diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 537084c79..784cfb8e0 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -572,6 +572,24 @@ config SND_SOC_WM9712
 config SND_SOC_WM9713
 	tristate
 
+config SND_SOC_SWP70_17WSH_MCASP0
+	tristate "Yamaha SWP70 Audio CODEC for 17WSH McASP0"
+
+config SND_SOC_SWP70_17WSH_MCASP1
+	tristate "Yamaha SWP70 Audio CODEC for 17WSH McASP1"
+
+config SND_SOC_SWP70_CVP_MCASP0
+	tristate "Yamaha SWP70 Audio CODEC for CVP McASP0"
+
+config SND_SOC_SWP70_CVP_MCASP1
+	tristate "Yamaha SWP70 Audio CODEC for CVP McASP1"
+
+config SND_SOC_SWP70_PSR_MCASP0
+	tristate "Yamaha SWP70 Audio CODEC for PSR McASP0"
+
+config SND_SOC_SWP70_PSR_MCASP1
+	tristate "Yamaha SWP70 Audio CODEC for PSR McASP1"
+
 # Amp
 config SND_SOC_LM4857
 	tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index ff1775c56..2c0c82d75 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -125,7 +125,12 @@ snd-soc-wm9705-objs := wm9705.o
 snd-soc-wm9712-objs := wm9712.o
 snd-soc-wm9713-objs := wm9713.o
 snd-soc-wm-hubs-objs := wm_hubs.o
-
+snd-soc-swp70_17wsh_mcasp0-objs := swp70_17wsh_mcasp0.o
+snd-soc-swp70_17wsh_mcasp1-objs := swp70_17wsh_mcasp1.o
+snd-soc-swp70_cvp_mcasp0-objs := swp70_cvp_mcasp0.o
+snd-soc-swp70_cvp_mcasp1-objs := swp70_cvp_mcasp1.o
+snd-soc-swp70_psr_mcasp0-objs := swp70_psr_mcasp0.o
+snd-soc-swp70_psr_mcasp1-objs := swp70_psr_mcasp1.o
 # Amp
 snd-soc-max9877-objs := max9877.o
 snd-soc-tpa6130a2-objs := tpa6130a2.o
@@ -256,6 +261,12 @@ obj-$(CONFIG_SND_SOC_WM9712)	+= snd-soc-wm9712.o
 obj-$(CONFIG_SND_SOC_WM9713)	+= snd-soc-wm9713.o
 obj-$(CONFIG_SND_SOC_WM_ADSP)	+= snd-soc-wm-adsp.o
 obj-$(CONFIG_SND_SOC_WM_HUBS)	+= snd-soc-wm-hubs.o
+obj-$(CONFIG_SND_SOC_SWP70_17WSH_MCASP0)	+= snd-soc-swp70_17wsh_mcasp0.o
+obj-$(CONFIG_SND_SOC_SWP70_17WSH_MCASP1)	+= snd-soc-swp70_17wsh_mcasp1.o
+obj-$(CONFIG_SND_SOC_SWP70_CVP_MCASP0)	+= snd-soc-swp70_cvp_mcasp0.o
+obj-$(CONFIG_SND_SOC_SWP70_CVP_MCASP1)	+= snd-soc-swp70_cvp_mcasp1.o
+obj-$(CONFIG_SND_SOC_SWP70_PSR_MCASP0)	+= snd-soc-swp70_psr_mcasp0.o
+obj-$(CONFIG_SND_SOC_SWP70_PSR_MCASP1)	+= snd-soc-swp70_psr_mcasp1.o
 
 # Amp
 obj-$(CONFIG_SND_SOC_MAX9877)	+= snd-soc-max9877.o
diff --git a/sound/soc/codecs/swp70_17wsh_mcasp0.c b/sound/soc/codecs/swp70_17wsh_mcasp0.c
new file mode 100644
index 000000000..dd4162569
--- /dev/null
+++ b/sound/soc/codecs/swp70_17wsh_mcasp0.c
@@ -0,0 +1,110 @@
+#include <linux/module.h>
+#include <linux/of.h>
+#include <sound/soc.h>
+
+#define DRV_NAME "17wsh_swp70p0"
+#define RATES    SNDRV_PCM_RATE_44100
+#define FORMATS  SNDRV_PCM_FMTBIT_S32_LE
+
+static int swp70p0_set_dai_fmt(struct snd_soc_dai *codec_dai,
+		unsigned int fmt)
+{
+	return 0;
+}
+
+static int swp70p0_set_dai_sysclk(struct snd_soc_dai *codec_dai,
+		int clk_id, unsigned int freq, int dir)
+{
+	return 0;
+}
+
+static struct snd_soc_dai_ops swp70p0_dai_ops = {
+	.set_sysclk	= swp70p0_set_dai_sysclk,
+	.set_fmt	= swp70p0_set_dai_fmt,
+};
+
+static const struct snd_soc_dapm_widget swp70p0_dapm_widgets[] = {
+	SND_SOC_DAPM_OUTPUT("TDMOUT0"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT1"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT2"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT3"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT4"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT5"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT6"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT7"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT8"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT9"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT10"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT11"),
+};
+
+static const struct snd_soc_dapm_route swp70p0_dapm_routes[] = {
+	{ "TDMOUT0", NULL, "Playback" },
+	{ "TDMOUT1", NULL, "Playback" },
+	{ "TDMOUT2", NULL, "Playback" },
+	{ "TDMOUT3", NULL, "Playback" },
+	{ "TDMOUT4", NULL, "Playback" },
+	{ "TDMOUT5", NULL, "Playback" },
+	{ "TDMOUT6", NULL, "Playback" },
+	{ "TDMOUT7", NULL, "Playback" },
+	{ "TDMOUT8", NULL, "Playback" },
+	{ "TDMOUT9", NULL, "Playback" },
+	{ "TDMOUT10", NULL, "Playback" },
+	{ "TDMOUT11", NULL, "Playback" },
+};
+
+static struct snd_soc_dai_driver swp70p0_dai = {
+	.name = "swp70p0-pcm",
+	.playback = {
+		.stream_name = "Playback",
+		.channels_min = 12,
+		.channels_max = 12,
+		.rates = RATES,
+		.formats = FORMATS,
+	},
+	.ops = &swp70p0_dai_ops,
+};
+
+static struct snd_soc_codec_driver soc_codec_swp70p0 = {
+	.dapm_widgets = swp70p0_dapm_widgets,
+	.num_dapm_widgets = ARRAY_SIZE(swp70p0_dapm_widgets),
+	.dapm_routes = swp70p0_dapm_routes,
+	.num_dapm_routes = ARRAY_SIZE(swp70p0_dapm_routes),
+};
+
+static int swp70p0_probe(struct platform_device *pdev)
+{
+        return snd_soc_register_codec(&pdev->dev,
+				      &soc_codec_swp70p0, &swp70p0_dai, 1);
+}
+
+static int swp70p0_remove(struct platform_device *pdev)
+{
+        snd_soc_unregister_codec(&pdev->dev);
+        return 0;
+}
+
+#ifdef CONFIG_OF
+static const struct of_device_id swp70p0_dt_ids[] = {
+	{ .compatible = "yamaha,swp70p0", },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, swp70p0_dt_ids);
+#endif
+
+static struct platform_driver swp70p0_codec_driver = {
+	.probe = swp70p0_probe,
+	.remove = swp70p0_remove,
+	.driver = {
+		.name = DRV_NAME,
+		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(swp70p0_dt_ids),
+        },
+};
+
+module_platform_driver(swp70p0_codec_driver);
+
+MODULE_DESCRIPTION("swp70p0 audio codec driver");
+MODULE_AUTHOR("Yamaha Corporation");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRV_NAME);
diff --git a/sound/soc/codecs/swp70_17wsh_mcasp1.c b/sound/soc/codecs/swp70_17wsh_mcasp1.c
new file mode 100644
index 000000000..8dad77bee
--- /dev/null
+++ b/sound/soc/codecs/swp70_17wsh_mcasp1.c
@@ -0,0 +1,125 @@
+#include <linux/module.h>
+#include <linux/of.h>
+#include <sound/soc.h>
+
+#define DRV_NAME "17wsh_swp70p1"
+#define RATES    SNDRV_PCM_RATE_44100
+#define FORMATS  SNDRV_PCM_FMTBIT_S32_LE
+
+static int swp70p1_set_dai_fmt(struct snd_soc_dai *codec_dai,
+		unsigned int fmt)
+{
+	return 0;
+}
+
+static int swp70p1_set_dai_sysclk(struct snd_soc_dai *codec_dai,
+		int clk_id, unsigned int freq, int dir)
+{
+	return 0;
+}
+
+static struct snd_soc_dai_ops swp70p1_dai_ops = {
+	.set_sysclk	= swp70p1_set_dai_sysclk,
+	.set_fmt	= swp70p1_set_dai_fmt,
+};
+
+static const struct snd_soc_dapm_widget swp70p1_dapm_widgets[] = {
+	SND_SOC_DAPM_OUTPUT("TDMOUT0"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT1"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT2"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT3"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT4"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT5"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT6"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT7"),
+	SND_SOC_DAPM_INPUT("TDMIN0"),
+	SND_SOC_DAPM_INPUT("TDMIN1"),
+	SND_SOC_DAPM_INPUT("TDMIN2"),
+	SND_SOC_DAPM_INPUT("TDMIN3"),
+	SND_SOC_DAPM_INPUT("TDMIN4"),
+	SND_SOC_DAPM_INPUT("TDMIN5"),
+	SND_SOC_DAPM_INPUT("TDMIN6"),
+	SND_SOC_DAPM_INPUT("TDMIN7"),
+};
+
+static const struct snd_soc_dapm_route swp70p1_dapm_routes[] = {
+	{ "TDMOUT0", NULL, "Playback" },
+	{ "TDMOUT1", NULL, "Playback" },
+	{ "TDMOUT2", NULL, "Playback" },
+	{ "TDMOUT3", NULL, "Playback" },
+	{ "TDMOUT4", NULL, "Playback" },
+	{ "TDMOUT5", NULL, "Playback" },
+	{ "TDMOUT6", NULL, "Playback" },
+	{ "TDMOUT7", NULL, "Playback" },
+	{ "Capture", NULL, "TDMIN0" },
+	{ "Capture", NULL, "TDMIN1" },
+	{ "Capture", NULL, "TDMIN2" },
+	{ "Capture", NULL, "TDMIN3" },
+	{ "Capture", NULL, "TDMIN4" },
+	{ "Capture", NULL, "TDMIN5" },
+	{ "Capture", NULL, "TDMIN6" },
+	{ "Capture", NULL, "TDMIN7" },
+};
+
+static struct snd_soc_dai_driver swp70p1_dai = {
+	.name = "swp70p1-pcm",
+	.playback = {
+		.stream_name = "Playback",
+		.channels_min = 8,
+		.channels_max = 8,
+		.rates = RATES,
+		.formats = FORMATS,
+	},
+	.capture = {
+		.stream_name = "Capture",
+		.channels_min = 8,
+		.channels_max = 8,
+		.rates = RATES,
+		.formats = FORMATS,
+	},
+	.ops = &swp70p1_dai_ops,
+};
+
+static struct snd_soc_codec_driver soc_codec_swp70p1 = {
+	.dapm_widgets = swp70p1_dapm_widgets,
+	.num_dapm_widgets = ARRAY_SIZE(swp70p1_dapm_widgets),
+	.dapm_routes = swp70p1_dapm_routes,
+	.num_dapm_routes = ARRAY_SIZE(swp70p1_dapm_routes),
+};
+
+static int swp70p1_probe(struct platform_device *pdev)
+{
+        return snd_soc_register_codec(&pdev->dev,
+				      &soc_codec_swp70p1, &swp70p1_dai, 1);
+}
+
+static int swp70p1_remove(struct platform_device *pdev)
+{
+        snd_soc_unregister_codec(&pdev->dev);
+        return 0;
+}
+
+#ifdef CONFIG_OF
+static const struct of_device_id swp70p1_dt_ids[] = {
+	{ .compatible = "yamaha,swp70p1", },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, swp70p1_dt_ids);
+#endif
+
+static struct platform_driver swp70p1_codec_driver = {
+	.probe = swp70p1_probe,
+	.remove = swp70p1_remove,
+	.driver = {
+		.name = DRV_NAME,
+		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(swp70p1_dt_ids),
+        },
+};
+
+module_platform_driver(swp70p1_codec_driver);
+
+MODULE_DESCRIPTION("swp70p1 audio codec driver");
+MODULE_AUTHOR("Yamaha Corporation");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRV_NAME);
diff --git a/sound/soc/codecs/swp70_cvp_mcasp0.c b/sound/soc/codecs/swp70_cvp_mcasp0.c
new file mode 100644
index 000000000..bdd815453
--- /dev/null
+++ b/sound/soc/codecs/swp70_cvp_mcasp0.c
@@ -0,0 +1,110 @@
+#include <linux/module.h>
+#include <linux/of.h>
+#include <sound/soc.h>
+
+#define DRV_NAME "cvp_swp70p0"
+#define RATES    SNDRV_PCM_RATE_44100
+#define FORMATS  SNDRV_PCM_FMTBIT_S32_LE
+
+static int cvp_swp70p0_set_dai_fmt(struct snd_soc_dai *codec_dai,
+		unsigned int fmt)
+{
+	return 0;
+}
+
+static int cvp_swp70p0_set_dai_sysclk(struct snd_soc_dai *codec_dai,
+		int clk_id, unsigned int freq, int dir)
+{
+	return 0;
+}
+
+static struct snd_soc_dai_ops cvp_swp70p0_dai_ops = {
+	.set_sysclk	= cvp_swp70p0_set_dai_sysclk,
+	.set_fmt	= cvp_swp70p0_set_dai_fmt,
+};
+
+static const struct snd_soc_dapm_widget cvp_swp70p0_dapm_widgets[] = {
+	SND_SOC_DAPM_OUTPUT("TDMOUT0"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT1"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT2"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT3"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT4"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT5"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT6"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT7"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT8"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT9"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT10"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT11"),
+};
+
+static const struct snd_soc_dapm_route cvp_swp70p0_dapm_routes[] = {
+	{ "TDMOUT0", NULL, "Playback" },
+	{ "TDMOUT1", NULL, "Playback" },
+	{ "TDMOUT2", NULL, "Playback" },
+	{ "TDMOUT3", NULL, "Playback" },
+	{ "TDMOUT4", NULL, "Playback" },
+	{ "TDMOUT5", NULL, "Playback" },
+	{ "TDMOUT6", NULL, "Playback" },
+	{ "TDMOUT7", NULL, "Playback" },
+	{ "TDMOUT8", NULL, "Playback" },
+	{ "TDMOUT9", NULL, "Playback" },
+	{ "TDMOUT10", NULL, "Playback" },
+	{ "TDMOUT11", NULL, "Playback" },
+};
+
+static struct snd_soc_dai_driver cvp_swp70p0_dai = {
+	.name = "swp70p0-pcm",
+	.playback = {
+		.stream_name = "Playback",
+		.channels_min = 12,
+		.channels_max = 12,
+		.rates = RATES,
+		.formats = FORMATS,
+	},
+	.ops = &cvp_swp70p0_dai_ops,
+};
+
+static struct snd_soc_codec_driver soc_codec_cvp_swp70p0 = {
+	.dapm_widgets = cvp_swp70p0_dapm_widgets,
+	.num_dapm_widgets = ARRAY_SIZE(cvp_swp70p0_dapm_widgets),
+	.dapm_routes = cvp_swp70p0_dapm_routes,
+	.num_dapm_routes = ARRAY_SIZE(cvp_swp70p0_dapm_routes),
+};
+
+static int cvp_swp70p0_probe(struct platform_device *pdev)
+{
+        return snd_soc_register_codec(&pdev->dev,
+				      &soc_codec_cvp_swp70p0, &cvp_swp70p0_dai, 1);
+}
+
+static int cvp_swp70p0_remove(struct platform_device *pdev)
+{
+        snd_soc_unregister_codec(&pdev->dev);
+        return 0;
+}
+
+#ifdef CONFIG_OF
+static const struct of_device_id cvp_swp70p0_dt_ids[] = {
+	{ .compatible = "yamaha,cvp_swp70p0", },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, cvp_swp70p0_dt_ids);
+#endif
+
+static struct platform_driver cvp_swp70p0_codec_driver = {
+	.probe = cvp_swp70p0_probe,
+	.remove = cvp_swp70p0_remove,
+	.driver = {
+		.name = DRV_NAME,
+		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(cvp_swp70p0_dt_ids),
+        },
+};
+
+module_platform_driver(cvp_swp70p0_codec_driver);
+
+MODULE_DESCRIPTION("cvp swp70p0 audio codec driver");
+MODULE_AUTHOR("Yamaha Corporation");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRV_NAME);
diff --git a/sound/soc/codecs/swp70_cvp_mcasp1.c b/sound/soc/codecs/swp70_cvp_mcasp1.c
new file mode 100644
index 000000000..47fd61d7b
--- /dev/null
+++ b/sound/soc/codecs/swp70_cvp_mcasp1.c
@@ -0,0 +1,94 @@
+#include <linux/module.h>
+#include <linux/of.h>
+#include <sound/soc.h>
+
+#define DRV_NAME "cvp_swp70p1"
+#define RATES    SNDRV_PCM_RATE_44100
+#define FORMATS  SNDRV_PCM_FMTBIT_S32_LE
+
+static int cvp_swp70p1_set_dai_fmt(struct snd_soc_dai *codec_dai,
+		unsigned int fmt)
+{
+	return 0;
+}
+
+static int cvp_swp70p1_set_dai_sysclk(struct snd_soc_dai *codec_dai,
+		int clk_id, unsigned int freq, int dir)
+{
+	return 0;
+}
+
+static struct snd_soc_dai_ops cvp_swp70p1_dai_ops = {
+	.set_sysclk	= cvp_swp70p1_set_dai_sysclk,
+	.set_fmt	= cvp_swp70p1_set_dai_fmt,
+};
+
+static const struct snd_soc_dapm_widget cvp_swp70p1_dapm_widgets[] = {
+	SND_SOC_DAPM_INPUT("TDMIN0"),
+	SND_SOC_DAPM_INPUT("TDMIN1"),
+	SND_SOC_DAPM_INPUT("TDMIN2"),
+	SND_SOC_DAPM_INPUT("TDMIN3"),
+};
+
+static const struct snd_soc_dapm_route cvp_swp70p1_dapm_routes[] = {
+		{ "Capture", NULL, "TDMIN0" },
+		{ "Capture", NULL, "TDMIN1" },
+		{ "Capture", NULL, "TDMIN2" },
+		{ "Capture", NULL, "TDMIN3" },
+};
+
+static struct snd_soc_dai_driver cvp_swp70p1_dai = {
+	.name = "swp70p1-pcm",
+	.capture = {
+		.stream_name = "Capture",
+		.channels_min = 4,
+		.channels_max = 4,
+		.rates = RATES,
+		.formats = FORMATS,
+	},
+	.ops = &cvp_swp70p1_dai_ops,
+};
+
+static struct snd_soc_codec_driver soc_codec_cvp_swp70p1 = {
+	.dapm_widgets = cvp_swp70p1_dapm_widgets,
+	.num_dapm_widgets = ARRAY_SIZE(cvp_swp70p1_dapm_widgets),
+	.dapm_routes = cvp_swp70p1_dapm_routes,
+	.num_dapm_routes = ARRAY_SIZE(cvp_swp70p1_dapm_routes),
+};
+
+static int cvp_swp70p1_probe(struct platform_device *pdev)
+{
+        return snd_soc_register_codec(&pdev->dev,
+				      &soc_codec_cvp_swp70p1, &cvp_swp70p1_dai, 1);
+}
+
+static int cvp_swp70p1_remove(struct platform_device *pdev)
+{
+        snd_soc_unregister_codec(&pdev->dev);
+        return 0;
+}
+
+#ifdef CONFIG_OF
+static const struct of_device_id cvp_swp70p1_dt_ids[] = {
+	{ .compatible = "yamaha,cvp_swp70p1", },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, cvp_swp70p1_dt_ids);
+#endif
+
+static struct platform_driver cvp_swp70p1_codec_driver = {
+	.probe = cvp_swp70p1_probe,
+	.remove = cvp_swp70p1_remove,
+	.driver = {
+		.name = DRV_NAME,
+		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(cvp_swp70p1_dt_ids),
+        },
+};
+
+module_platform_driver(cvp_swp70p1_codec_driver);
+
+MODULE_DESCRIPTION("cvp swp70p1 audio codec driver");
+MODULE_AUTHOR("Yamaha Corporation");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRV_NAME);
diff --git a/sound/soc/codecs/swp70_psr_mcasp0.c b/sound/soc/codecs/swp70_psr_mcasp0.c
new file mode 100644
index 000000000..13c584a10
--- /dev/null
+++ b/sound/soc/codecs/swp70_psr_mcasp0.c
@@ -0,0 +1,110 @@
+#include <linux/module.h>
+#include <linux/of.h>
+#include <sound/soc.h>
+
+#define DRV_NAME "psr_swp70p0"
+#define RATES    SNDRV_PCM_RATE_44100
+#define FORMATS  SNDRV_PCM_FMTBIT_S32_LE
+
+static int psr_swp70p0_set_dai_fmt(struct snd_soc_dai *codec_dai,
+		unsigned int fmt)
+{
+	return 0;
+}
+
+static int psr_swp70p0_set_dai_sysclk(struct snd_soc_dai *codec_dai,
+		int clk_id, unsigned int freq, int dir)
+{
+	return 0;
+}
+
+static struct snd_soc_dai_ops psr_swp70p0_dai_ops = {
+	.set_sysclk	= psr_swp70p0_set_dai_sysclk,
+	.set_fmt	= psr_swp70p0_set_dai_fmt,
+};
+
+static const struct snd_soc_dapm_widget psr_swp70p0_dapm_widgets[] = {
+	SND_SOC_DAPM_OUTPUT("TDMOUT0"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT1"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT2"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT3"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT4"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT5"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT6"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT7"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT8"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT9"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT10"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT11"),
+};
+
+static const struct snd_soc_dapm_route psr_swp70p0_dapm_routes[] = {
+	{ "TDMOUT0", NULL, "Playback" },
+	{ "TDMOUT1", NULL, "Playback" },
+	{ "TDMOUT2", NULL, "Playback" },
+	{ "TDMOUT3", NULL, "Playback" },
+	{ "TDMOUT4", NULL, "Playback" },
+	{ "TDMOUT5", NULL, "Playback" },
+	{ "TDMOUT6", NULL, "Playback" },
+	{ "TDMOUT7", NULL, "Playback" },
+	{ "TDMOUT8", NULL, "Playback" },
+	{ "TDMOUT9", NULL, "Playback" },
+	{ "TDMOUT10", NULL, "Playback" },
+	{ "TDMOUT11", NULL, "Playback" },
+};
+
+static struct snd_soc_dai_driver psr_swp70p0_dai = {
+	.name = "swp70p0-pcm",
+	.playback = {
+		.stream_name = "Playback",
+		.channels_min = 12,
+		.channels_max = 12,
+		.rates = RATES,
+		.formats = FORMATS,
+	},
+	.ops = &psr_swp70p0_dai_ops,
+};
+
+static struct snd_soc_codec_driver soc_codec_psr_swp70p0 = {
+	.dapm_widgets = psr_swp70p0_dapm_widgets,
+	.num_dapm_widgets = ARRAY_SIZE(psr_swp70p0_dapm_widgets),
+	.dapm_routes = psr_swp70p0_dapm_routes,
+	.num_dapm_routes = ARRAY_SIZE(psr_swp70p0_dapm_routes),
+};
+
+static int psr_swp70p0_probe(struct platform_device *pdev)
+{
+        return snd_soc_register_codec(&pdev->dev,
+				      &soc_codec_psr_swp70p0, &psr_swp70p0_dai, 1);
+}
+
+static int psr_swp70p0_remove(struct platform_device *pdev)
+{
+        snd_soc_unregister_codec(&pdev->dev);
+        return 0;
+}
+
+#ifdef CONFIG_OF
+static const struct of_device_id psr_swp70p0_dt_ids[] = {
+	{ .compatible = "yamaha,psr_swp70p0", },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, psr_swp70p0_dt_ids);
+#endif
+
+static struct platform_driver psr_swp70p0_codec_driver = {
+	.probe = psr_swp70p0_probe,
+	.remove = psr_swp70p0_remove,
+	.driver = {
+		.name = DRV_NAME,
+		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(psr_swp70p0_dt_ids),
+        },
+};
+
+module_platform_driver(psr_swp70p0_codec_driver);
+
+MODULE_DESCRIPTION("psr swp70p0 audio codec driver");
+MODULE_AUTHOR("Yamaha Corporation");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRV_NAME);
diff --git a/sound/soc/codecs/swp70_psr_mcasp1.c b/sound/soc/codecs/swp70_psr_mcasp1.c
new file mode 100644
index 000000000..cf32db107
--- /dev/null
+++ b/sound/soc/codecs/swp70_psr_mcasp1.c
@@ -0,0 +1,109 @@
+#include <linux/module.h>
+#include <linux/of.h>
+#include <sound/soc.h>
+
+#define DRV_NAME "psr_swp70p1"
+#define RATES    SNDRV_PCM_RATE_44100
+#define FORMATS  SNDRV_PCM_FMTBIT_S32_LE
+
+static int psr_swp70p1_set_dai_fmt(struct snd_soc_dai *codec_dai,
+		unsigned int fmt)
+{
+	return 0;
+}
+
+static int psr_swp70p1_set_dai_sysclk(struct snd_soc_dai *codec_dai,
+		int clk_id, unsigned int freq, int dir)
+{
+	return 0;
+}
+
+static struct snd_soc_dai_ops psr_swp70p1_dai_ops = {
+	.set_sysclk	= psr_swp70p1_set_dai_sysclk,
+	.set_fmt	= psr_swp70p1_set_dai_fmt,
+};
+
+static const struct snd_soc_dapm_widget psr_swp70p1_dapm_widgets[] = {
+	SND_SOC_DAPM_OUTPUT("TDMOUT0"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT1"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT2"),
+	SND_SOC_DAPM_OUTPUT("TDMOUT3"),
+	SND_SOC_DAPM_INPUT("TDMIN0"),
+	SND_SOC_DAPM_INPUT("TDMIN1"),
+	SND_SOC_DAPM_INPUT("TDMIN2"),
+	SND_SOC_DAPM_INPUT("TDMIN3"),
+};
+
+static const struct snd_soc_dapm_route psr_swp70p1_dapm_routes[] = {
+	{ "TDMOUT0", NULL, "Playback" },
+	{ "TDMOUT1", NULL, "Playback" },
+	{ "TDMOUT2", NULL, "Playback" },
+	{ "TDMOUT3", NULL, "Playback" },
+	{ "Capture", NULL, "TDMIN0" },
+	{ "Capture", NULL, "TDMIN1" },
+	{ "Capture", NULL, "TDMIN2" },
+	{ "Capture", NULL, "TDMIN3" },
+};
+
+static struct snd_soc_dai_driver psr_swp70p1_dai = {
+	.name = "swp70p1-pcm",
+	.playback = {
+		.stream_name = "Playback",
+		.channels_min = 4,
+		.channels_max = 4,
+		.rates = RATES,
+		.formats = FORMATS,
+	},
+	.capture = {
+		.stream_name = "Capture",
+		.channels_min = 4,
+		.channels_max = 4,
+		.rates = RATES,
+		.formats = FORMATS,
+	},
+	.ops = &psr_swp70p1_dai_ops,
+};
+
+static struct snd_soc_codec_driver soc_codec_psr_swp70p1 = {
+	.dapm_widgets = psr_swp70p1_dapm_widgets,
+	.num_dapm_widgets = ARRAY_SIZE(psr_swp70p1_dapm_widgets),
+	.dapm_routes = psr_swp70p1_dapm_routes,
+	.num_dapm_routes = ARRAY_SIZE(psr_swp70p1_dapm_routes),
+};
+
+static int psr_swp70p1_probe(struct platform_device *pdev)
+{
+        return snd_soc_register_codec(&pdev->dev,
+				      &soc_codec_psr_swp70p1, &psr_swp70p1_dai, 1);
+}
+
+static int psr_swp70p1_remove(struct platform_device *pdev)
+{
+        snd_soc_unregister_codec(&pdev->dev);
+        return 0;
+}
+
+#ifdef CONFIG_OF
+static const struct of_device_id psr_swp70p1_dt_ids[] = {
+	{ .compatible = "yamaha,psr_swp70p1", },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, psr_swp70p1_dt_ids);
+#endif
+
+static struct platform_driver psr_swp70p1_codec_driver = {
+	.probe = psr_swp70p1_probe,
+	.remove = psr_swp70p1_remove,
+	.driver = {
+		.name = DRV_NAME,
+		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(psr_swp70p1_dt_ids),
+        },
+};
+
+module_platform_driver(psr_swp70p1_codec_driver);
+
+MODULE_DESCRIPTION("psr swp70p1 audio codec driver");
+MODULE_AUTHOR("Yamaha Corporation");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRV_NAME);
diff --git a/sound/soc/davinci/Kconfig b/sound/soc/davinci/Kconfig
index 54582e2f8..c911d1484 100644
--- a/sound/soc/davinci/Kconfig
+++ b/sound/soc/davinci/Kconfig
@@ -30,10 +30,15 @@ config SND_DAVINCI_SOC_VCIF
 
 config SND_DAVINCI_SOC_GENERIC_EVM
 	tristate
-	select SND_SOC_TLV320AIC3X
-	select SND_SOC_TLV320AIC31XX
+#	select SND_SOC_TLV320AIC3X
+#	select SND_SOC_TLV320AIC31XX
 	select SND_DAVINCI_SOC_MCASP
 
+config SND_CLAP_ARM_EKB2
+	tristate "SoC Audio for the CLAP ARM EKB2 Board"
+	depends on SND_EDMA_SOC && SOC_AM43XX && MACH_CLAP_ARM_EKB2
+	select SND_DAVINCI_SOC_GENERIC_EVM
+
 config SND_AM33XX_SOC_EVM
 	tristate "SoC Audio for the AM33XX chip based boards"
 	depends on SND_EDMA_SOC && SOC_AM33XX && I2C
diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
index 19b2bff10..753c8ae72 100644
--- a/sound/soc/davinci/davinci-evm.c
+++ b/sound/soc/davinci/davinci-evm.c
@@ -99,6 +99,49 @@ static int evm_tda998x_startup(struct snd_pcm_substream *substream)
 	return evm_startup(substream);
 }
 
+static unsigned int evm_get_bclk(struct snd_pcm_hw_params *params)
+{
+	int sample_size = snd_pcm_format_width(params_format(params));
+	int rate = params_rate(params);
+	int channels = params_channels(params);
+
+	return sample_size * channels * rate;
+}
+
+static int swp70tdm_hw_params(struct snd_pcm_substream *substream,
+				 struct snd_pcm_hw_params *params)
+{
+	struct snd_soc_pcm_runtime *rtd = substream->private_data;
+	struct snd_soc_dai *codec_dai = rtd->codec_dai;
+	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+	struct snd_soc_codec *codec = rtd->codec;
+	struct snd_soc_card *soc_card = codec->card;
+	struct platform_device *pdev = to_platform_device(soc_card->dev);
+	unsigned int bclk_freq = evm_get_bclk(params) / 2;
+	unsigned sysclk = ((struct snd_soc_card_drvdata_davinci *)
+			   snd_soc_card_get_drvdata(soc_card))->sysclk;
+	int ret;
+
+	ret = snd_soc_dai_set_clkdiv(cpu_dai, 1, sysclk / bclk_freq);
+	if (ret < 0) {
+		dev_err(&pdev->dev, "can't set CPU DAI clock divider %d\n",
+			ret);
+		return ret;
+	}
+
+	/* set the codec system clock */
+	ret = snd_soc_dai_set_sysclk(codec_dai, 0, sysclk, SND_SOC_CLOCK_OUT);
+	if (ret < 0)
+		return ret;
+
+	/* set the CPU system clock */
+	ret = snd_soc_dai_set_sysclk(cpu_dai, 0, sysclk, SND_SOC_CLOCK_IN);
+	if (ret < 0)
+		return ret;
+
+	return ret;
+}
+
 static struct snd_soc_ops evm_ops = {
 	.startup = evm_startup,
 	.shutdown = evm_shutdown,
@@ -116,6 +159,18 @@ static struct snd_soc_ops dra7xx_ops = {
 	.shutdown = evm_shutdown,
 };
 
+static struct snd_soc_ops swp70p0_ops = {
+	.startup = evm_startup,
+	.shutdown = evm_shutdown,
+	.hw_params = swp70tdm_hw_params,
+};
+
+static struct snd_soc_ops swp70p1_ops = {
+	.startup = evm_startup,
+	.shutdown = evm_shutdown,
+	.hw_params = swp70tdm_hw_params,
+};
+
 /* davinci-evm machine dapm widgets */
 static const struct snd_soc_dapm_widget aic3x_dapm_widgets[] = {
 	SND_SOC_DAPM_HP("Headphone Jack", NULL),
@@ -454,6 +509,28 @@ static struct snd_soc_dai_link dra7xx_evm_link = {
 		   SND_SOC_DAIFMT_IB_NF,
 };
 
+static struct snd_soc_dai_link evm_dai_swp70p0[] = {
+	{
+		.name		= "SWP70 for 17wsh McASP0 Playback",
+		.stream_name	= "swp70p0",
+		.cpu_dai_name   = "48038000.mcasp",
+		.codec_dai_name	= "swp70p0-pcm",
+		.ops		= &swp70p0_ops,
+		.dai_fmt	= SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_NB_NF,
+	},
+};
+
+static struct snd_soc_dai_link evm_dai_swp70p1[] = {
+	{
+		.name		= "SWP70 for 17wsh McASP1 Playback",
+		.stream_name	= "swp70p1",
+		.cpu_dai_name   = "4803C000.mcasp",
+		.codec_dai_name	= "swp70p1-pcm",
+		.ops		= &swp70p1_ops,
+		.dai_fmt	= SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_NB_NF,
+	},
+};
+
 static const struct of_device_id davinci_evm_dt_ids[] = {
 	{
 		.compatible = "ti,da830-evm-audio",
@@ -467,6 +544,14 @@ static const struct of_device_id davinci_evm_dt_ids[] = {
 		.compatible = "ti,dra7xx-evm-audio",
 		.data = (void *) &dra7xx_evm_link,
 	},
+ 	{
+		.compatible = "ti,swp70p0-audio",
+		.data = &evm_dai_swp70p0,
+	},
+ 	{
+		.compatible = "ti,swp70p1-audio",
+		.data = &evm_dai_swp70p1,
+	},
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, davinci_evm_dt_ids);
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
index c40ed33cf..3a266005f 100644
--- a/sound/soc/davinci/davinci-mcasp.c
+++ b/sound/soc/davinci/davinci-mcasp.c
@@ -368,6 +368,10 @@ static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
 	case SND_SOC_DAIFMT_AC97:
 		mcasp_clr_bits(mcasp, DAVINCI_MCASP_TXFMCTL_REG, FSXDUR);
 		mcasp_clr_bits(mcasp, DAVINCI_MCASP_RXFMCTL_REG, FSRDUR);
+
+		mcasp_set_bits(mcasp, DAVINCI_MCASP_TXFMT_REG, FSXDLY(1));
+		mcasp_set_bits(mcasp, DAVINCI_MCASP_RXFMT_REG, FSRDLY(2));
+
 		/* No delay after FS */
 		data_delay = 0;
 		break;
diff --git a/sound/soc/davinci/davinci-pcm.c b/sound/soc/davinci/davinci-pcm.c
index 7809e9d93..14974d479 100644
--- a/sound/soc/davinci/davinci-pcm.c
+++ b/sound/soc/davinci/davinci-pcm.c
@@ -52,9 +52,9 @@ static struct snd_pcm_hardware pcm_hardware_playback = {
 		 SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME|
 		 SNDRV_PCM_INFO_BATCH),
 	.buffer_bytes_max = 128 * 1024,
-	.period_bytes_min = 32,
+	.period_bytes_min = 4,
 	.period_bytes_max = 8 * 1024,
-	.periods_min = 16,
+	.periods_min = 2,
 	.periods_max = 255,
 	.fifo_size = 0,
 };
@@ -65,9 +65,9 @@ static struct snd_pcm_hardware pcm_hardware_capture = {
 		 SNDRV_PCM_INFO_PAUSE |
 		 SNDRV_PCM_INFO_BATCH),
 	.buffer_bytes_max = 128 * 1024,
-	.period_bytes_min = 32,
+	.period_bytes_min = 4,
 	.period_bytes_max = 8 * 1024,
-	.periods_min = 16,
+	.periods_min = 2,
 	.periods_max = 255,
 	.fifo_size = 0,
 };
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 1f751066e..41fe18a32 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -868,10 +868,10 @@ static int soc_bind_dai_link(struct snd_soc_card *card, int num)
 		    (cpu_dai->dev->of_node != dai_link->cpu_of_node))
 			continue;
 		if (dai_link->cpu_name &&
-		    strcmp(dev_name(cpu_dai->dev), dai_link->cpu_name))
+			strcasecmp(dev_name(cpu_dai->dev), dai_link->cpu_name))
 			continue;
 		if (dai_link->cpu_dai_name &&
-		    strcmp(cpu_dai->name, dai_link->cpu_dai_name))
+			strcasecmp(cpu_dai->name, dai_link->cpu_dai_name))
 			continue;
 
 		rtd->cpu_dai = cpu_dai;
