diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 385dc25..f9d6ff8 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -6,6 +6,10 @@ config SND_SOC_AK4535
 	tristate
 	depends on SND_SOC
 
+config SND_SOC_BLUECORE
+	tristate
+	depends on SND_SOC
+
 config SND_SOC_TLV320
 	tristate
 	depends on SND_SOC
@@ -68,4 +72,4 @@ config SND_SOC_WM9712
 
 config SND_SOC_WM9713
 	tristate
-	depends on SND_SOC
\ No newline at end of file
+	depends on SND_SOC
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 2d81da6..292ed18 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -1,5 +1,6 @@
 snd-soc-ac97-objs := ac97.o
 snd-soc-ak4535-objs := ak4535.o
+snd-soc-bluecore-objs := bluecore.o
 snd-soc-tlv320-objs := tlv320.o
 snd-soc-uda1380-objs := uda1380.o
 snd-soc-wm8510-objs := wm8510.o
@@ -19,6 +20,7 @@ snd-soc-wm9713-objs := wm9713.o
 
 obj-$(CONFIG_SND_SOC_AC97_CODEC)	+= snd-soc-ac97.o
 obj-$(CONFIG_SND_SOC_AK4535)	+= snd-soc-ak4535.o
+obj-$(CONFIG_SND_SOC_BLUECORE)	+= snd-soc-bluecore.o
 obj-$(CONFIG_SND_SOC_TLV320)	+= snd-soc-tlv320.o
 obj-$(CONFIG_SND_SOC_UDA1380)	+= snd-soc-uda1380.o
 obj-$(CONFIG_SND_SOC_WM8510)	+= snd-soc-wm8510.o
@@ -34,4 +36,4 @@ obj-$(CONFIG_SND_SOC_WM8974)	+= snd-soc-
 obj-$(CONFIG_SND_SOC_WM8976)	+= snd-soc-wm8976.o
 obj-$(CONFIG_SND_SOC_WM8980)	+= snd-soc-wm8980.o
 obj-$(CONFIG_SND_SOC_WM9712)	+= snd-soc-wm9712.o
-obj-$(CONFIG_SND_SOC_WM9713)	+= snd-soc-wm9713.o
\ No newline at end of file
+obj-$(CONFIG_SND_SOC_WM9713)	+= snd-soc-wm9713.o
diff --git a/sound/soc/codecs/bluecore.c b/sound/soc/codecs/bluecore.c
new file mode 100644
index 0000000..fc5f4fc
--- /dev/null
+++ b/sound/soc/codecs/bluecore.c
@@ -0,0 +1,110 @@
+/*
+ * bluecore.c  --  ALSA Soc CSR BlueCore PCM interface.
+ *
+ * Author:	Frank Mandarino <fmandarino@endrelia.com>
+ *		Endrelia Technologies Inc.
+ * Created:	Mar 16, 2007
+ *
+ *  This program is free software; you can redistribute  it and/or modify it
+ *  under  the terms of  the GNU General  Public License as published by the
+ *  Free Software Foundation;  either version 2 of the  License, or (at your
+ *  option) any later version.
+ */
+
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <sound/driver.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/initval.h>
+#include <sound/soc.h>
+
+#define BLUECORE_VERSION "0.1"
+
+#define BLUECORE_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE)
+
+struct snd_soc_codec_dai bluecore_dai = {
+	.name = "BlueCore",
+	.playback = {
+		.stream_name = "Playback",
+		.channels_min = 1,
+		.channels_max = 1,
+		.rates = SNDRV_PCM_RATE_8000,
+		.formats = BLUECORE_FORMATS,},
+	.capture = {
+		.stream_name = "Capture",
+		.channels_min = 1,
+		.channels_max = 1,
+		.rates = SNDRV_PCM_RATE_8000,
+		.formats = BLUECORE_FORMATS,},
+};
+
+EXPORT_SYMBOL_GPL(bluecore_dai);
+
+static int bluecore_soc_probe(struct platform_device *pdev)
+{
+	struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+	struct snd_soc_codec *codec;
+	int ret = 0;
+
+	printk(KERN_INFO "bluecore: BlueCore PCM SoC Audio %s\n", BLUECORE_VERSION);
+
+	socdev->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
+	if (socdev->codec == NULL)
+		return -ENOMEM;
+	codec = socdev->codec;
+	mutex_init(&codec->mutex);
+
+	codec->name = "BlueCore";
+	codec->owner = THIS_MODULE;
+	codec->dai = &bluecore_dai;
+	codec->num_dai = 1;
+	INIT_LIST_HEAD(&codec->dapm_widgets);
+	INIT_LIST_HEAD(&codec->dapm_paths);
+
+	/* register pcms */
+	ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+	if(ret < 0)
+		goto err;
+
+	ret = snd_soc_register_card(socdev);
+	if (ret < 0)
+		goto bus_err;
+	return 0;
+
+bus_err:
+	snd_soc_free_pcms(socdev);
+
+err:
+	kfree(socdev->codec);
+	socdev->codec = NULL;
+	return ret;
+}
+
+static int bluecore_soc_remove(struct platform_device *pdev)
+{
+	struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+	struct snd_soc_codec *codec = socdev->codec;
+
+	if(codec == NULL)
+		return 0;
+
+	snd_soc_free_pcms(socdev);
+	kfree(socdev->codec);
+
+	return 0;
+}
+
+struct snd_soc_codec_device soc_codec_dev_bluecore = {
+	.probe = 	bluecore_soc_probe,
+	.remove = 	bluecore_soc_remove,
+};
+
+EXPORT_SYMBOL_GPL(soc_codec_dev_bluecore);
+
+MODULE_DESCRIPTION("Soc BlueCore PCM driver");
+MODULE_AUTHOR("Frank Mandarino");
+MODULE_LICENSE("GPL");
+
diff --git a/sound/soc/codecs/bluecore.h b/sound/soc/codecs/bluecore.h
new file mode 100644
index 0000000..52d961c
--- /dev/null
+++ b/sound/soc/codecs/bluecore.h
@@ -0,0 +1,20 @@
+/*
+ * bluecore.h  --  CSR BlueCore PCM Soc Audio driver
+ *
+ * Author:	Frank Mandarino <fmandarino@endrelia.com>
+ *		Endrelia Technologies Inc.
+ * Created:	Mar 16, 2007
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef _BLUECORE_H
+#define _BLUECORE_H
+
+extern struct snd_soc_codec_dai bluecore_dai;
+extern struct snd_soc_codec_device soc_codec_dev_bluecore;
+
+#endif
+
