From: Tomoya MORINAGA <tomoya.rohm@gmail.com>
To: Liam Girdwood <lrg@ti.com>,
Mark Brown <broonie@opensource.wolfsonmicro.com>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.de>,
alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org
Cc: Tomoya MORINAGA <tomoya.rohm@gmail.com>,
kok.howg.ewe@intel.com, qi.wang@intel.com, joel.clark@intel.com,
yong.y.wang@intel.com
Subject: [PATCH v8] sound/soc/lapis: add machine driver for ML7213 Carrier Board
Date: Wed, 21 Mar 2012 10:15:17 +0900 [thread overview]
Message-ID: <1332292517-3411-1-git-send-email-tomoya.rohm@gmail.com> (raw)
This machine driver is for
LAPIS Semiconductor ML7213 Carrier Board + ML26124 Reference Board
Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
---
v8
- Delete redundant break
- Use module_platform_driver
- Delete redundant 'space'
- Delete snd_soc_dapm_enable_pin()s
---
sound/soc/lapis/Kconfig | 7 ++
sound/soc/lapis/Makefile | 2 +
sound/soc/lapis/ml7213ioh-machine.c | 169 +++++++++++++++++++++++++++++++++++
3 files changed, 178 insertions(+), 0 deletions(-)
create mode 100644 sound/soc/lapis/ml7213ioh-machine.c
diff --git a/sound/soc/lapis/Kconfig b/sound/soc/lapis/Kconfig
index 551e385..9bc1b4d 100644
--- a/sound/soc/lapis/Kconfig
+++ b/sound/soc/lapis/Kconfig
@@ -2,3 +2,10 @@ config SND_SOC_ML7213_PLATFORM
tristate "ML7213 IOH ASoC platform driver"
help
This option enables support for the AC Link Controllers in ML7213 IOH SoC.
+
+config SND_SOC_ML7213_MACHINE
+ tristate "ML7213 IOH ASoC machine driver"
+ select SND_SOC_ML7213_PLATFORM
+ select SND_SOC_ML26124
+ help
+ This is ASoC machine driver for ML7213 IOH
diff --git a/sound/soc/lapis/Makefile b/sound/soc/lapis/Makefile
index aba1630..7ec4bea 100644
--- a/sound/soc/lapis/Makefile
+++ b/sound/soc/lapis/Makefile
@@ -1,4 +1,6 @@
# Platform
+snd-soc-ml7213-machine-objs := ml7213ioh-machine.o
snd-soc-ml7213-plat-objs := ml7213ioh-plat.o
obj-$(CONFIG_SND_SOC_ML7213_PLATFORM) += snd-soc-ml7213-plat.o
+obj-$(CONFIG_SND_SOC_ML7213_MACHINE) += snd-soc-ml7213-machine.o
diff --git a/sound/soc/lapis/ml7213ioh-machine.c b/sound/soc/lapis/ml7213ioh-machine.c
new file mode 100644
index 0000000..14f83d2
--- /dev/null
+++ b/sound/soc/lapis/ml7213ioh-machine.c
@@ -0,0 +1,169 @@
+/*
+ * ml7213ioh-machine.c -- SoC Audio for LAPIS Semiconductor ML7213 IOH CRB
+ *
+ * Copyright (C) 2011 LAPIS Semiconductor Co., Ltd.
+ *
+ * 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; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/soc.h>
+#include <sound/pcm_params.h>
+#include <linux/i2c.h>
+#include "../codecs/ml26124.h"
+#include "ioh_i2s.h"
+
+static const struct snd_soc_dapm_widget ml7213_dapm_widgets[] = {
+ SND_SOC_DAPM_SPK("Speaker", NULL),
+ SND_SOC_DAPM_LINE("LINEOUT", NULL),
+ SND_SOC_DAPM_LINE("LINEIN", NULL),
+ SND_SOC_DAPM_MIC("AnalogMIC", NULL),
+ SND_SOC_DAPM_MIC("DigitalMIC", NULL),
+};
+
+static const struct snd_soc_dapm_route ml7213_routes[] = {
+ {"Speaker", NULL, "SPOUT"},
+ {"LINEOUT", NULL, "LOUT"},
+ {"AnalogMIC", NULL, "MICBIAS"},
+ {"MIN", NULL, "AnalogMIC"},
+ {"MDIN", NULL, "DigitalMIC"},
+ {"MIN", NULL, "LINEIN"},
+};
+
+static int ml7213_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *hw_params)
+{
+ int bclkfs;
+ int mclkfs;
+ unsigned int clk;
+ int ret;
+ 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;
+ unsigned int channel_map[] = {5, 0, 1, 2, 3, 4};
+
+ /* set cpu DAI channel mapping */
+ ret = snd_soc_dai_set_channel_map(cpu_dai, ARRAY_SIZE(channel_map),
+ channel_map, ARRAY_SIZE(channel_map), channel_map);
+ if (ret < 0)
+ return ret;
+
+ switch (params_rate(hw_params)) {
+ case 16000:
+ case 32000:
+ case 48000:
+ clk = 12288000;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ mclkfs = clk / params_rate(hw_params);
+
+ switch (params_format(hw_params)) {
+ case SNDRV_PCM_FORMAT_U8:
+ case SNDRV_PCM_FORMAT_S16_LE:
+ bclkfs = 32;
+ break;
+ case SNDRV_PCM_FORMAT_S32_LE:
+ bclkfs = 64;
+ break;
+ default:
+ pr_err("%s: Failed not support format\n", __func__);
+ return -EINVAL;
+ }
+
+ /* set the codec system clock for DAC and ADC */
+ ret = snd_soc_dai_set_sysclk(codec_dai, ML26124_USE_PLLOUT, clk,
+ SND_SOC_CLOCK_IN);
+ if (ret < 0)
+ return ret;
+
+ /* set codec DAI configuration */
+ ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
+ if (ret < 0)
+ return ret;
+
+ /* set cpu DAI configuration */
+ ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
+ if (ret < 0)
+ return ret;
+
+ return 0;
+}
+
+static struct snd_soc_ops ml7213_ops = {
+ .hw_params = ml7213_hw_params,
+};
+
+static struct snd_soc_dai_link ml7213crb_dai = {
+ .name = "ml26124",
+ .stream_name = "ML26124",
+ .cpu_dai_name = "ml7213ioh",
+ .codec_dai_name = "ml26124-hifi",
+ .platform_name = "ml7213-i2s-audio",
+ .codec_name = "ml26124.1-001a",
+ .ops = &ml7213_ops,
+};
+
+static struct snd_soc_card ml7213crb_card = {
+ .name = "LAPIS Semiconductor ML7213CRB",
+ .dai_link = &ml7213crb_dai,
+ .num_links = 1,
+ .dapm_widgets = ml7213_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(ml7213_dapm_widgets),
+ .dapm_routes = ml7213_routes,
+ .num_dapm_routes = ARRAY_SIZE(ml7213_routes),
+};
+
+static int __devinit lapis_ml7213_ml26124_probe(struct platform_device *pdev)
+{
+ int ret;
+
+ ml7213crb_card.dev = &pdev->dev;
+ ret = snd_soc_register_card(&ml7213crb_card);
+ if (ret) {
+ dev_err(&pdev->dev, "snd_soc_register_card failed %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int __devexit lapis_ml7213_ml26124_remove(struct platform_device *pdev)
+{
+ snd_soc_unregister_card(&ml7213crb_card);
+ platform_set_drvdata(pdev, NULL);
+ return 0;
+}
+
+static struct platform_driver snd_ml7213crb_driver = {
+ .driver = {
+ .owner = THIS_MODULE,
+ .name = "lapis-ml7213ioh-CRB",
+ },
+ .probe = lapis_ml7213_ml26124_probe,
+ .remove = __devexit_p(lapis_ml7213_ml26124_remove),
+};
+
+module_platform_driver(snd_ml7213crb_driver);
+
+MODULE_AUTHOR("Tomoya MORINAGA <tomoya.rohm@gmail.com>");
+MODULE_DESCRIPTION("LAPIS Semiconductor ML7213 IOH ALSA SoC machine driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:lapis-ml7213ioh-CRB");
--
1.7.7.6
WARNING: multiple messages have this Message-ID (diff)
From: Tomoya MORINAGA <tomoya.rohm@gmail.com>
To: Liam Girdwood <lrg@ti.com>,
Mark Brown <broonie@opensource.wolfsonmicro.com>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.de>,
alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org
Cc: qi.wang@intel.com, yong.y.wang@intel.com, joel.clark@intel.com,
kok.howg.ewe@intel.com, Tomoya MORINAGA <tomoya.rohm@gmail.com>
Subject: [PATCH v8] sound/soc/lapis: add machine driver for ML7213 Carrier Board
Date: Wed, 21 Mar 2012 10:15:17 +0900 [thread overview]
Message-ID: <1332292517-3411-1-git-send-email-tomoya.rohm@gmail.com> (raw)
This machine driver is for
LAPIS Semiconductor ML7213 Carrier Board + ML26124 Reference Board
Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
---
v8
- Delete redundant break
- Use module_platform_driver
- Delete redundant 'space'
- Delete snd_soc_dapm_enable_pin()s
---
sound/soc/lapis/Kconfig | 7 ++
sound/soc/lapis/Makefile | 2 +
sound/soc/lapis/ml7213ioh-machine.c | 169 +++++++++++++++++++++++++++++++++++
3 files changed, 178 insertions(+), 0 deletions(-)
create mode 100644 sound/soc/lapis/ml7213ioh-machine.c
diff --git a/sound/soc/lapis/Kconfig b/sound/soc/lapis/Kconfig
index 551e385..9bc1b4d 100644
--- a/sound/soc/lapis/Kconfig
+++ b/sound/soc/lapis/Kconfig
@@ -2,3 +2,10 @@ config SND_SOC_ML7213_PLATFORM
tristate "ML7213 IOH ASoC platform driver"
help
This option enables support for the AC Link Controllers in ML7213 IOH SoC.
+
+config SND_SOC_ML7213_MACHINE
+ tristate "ML7213 IOH ASoC machine driver"
+ select SND_SOC_ML7213_PLATFORM
+ select SND_SOC_ML26124
+ help
+ This is ASoC machine driver for ML7213 IOH
diff --git a/sound/soc/lapis/Makefile b/sound/soc/lapis/Makefile
index aba1630..7ec4bea 100644
--- a/sound/soc/lapis/Makefile
+++ b/sound/soc/lapis/Makefile
@@ -1,4 +1,6 @@
# Platform
+snd-soc-ml7213-machine-objs := ml7213ioh-machine.o
snd-soc-ml7213-plat-objs := ml7213ioh-plat.o
obj-$(CONFIG_SND_SOC_ML7213_PLATFORM) += snd-soc-ml7213-plat.o
+obj-$(CONFIG_SND_SOC_ML7213_MACHINE) += snd-soc-ml7213-machine.o
diff --git a/sound/soc/lapis/ml7213ioh-machine.c b/sound/soc/lapis/ml7213ioh-machine.c
new file mode 100644
index 0000000..14f83d2
--- /dev/null
+++ b/sound/soc/lapis/ml7213ioh-machine.c
@@ -0,0 +1,169 @@
+/*
+ * ml7213ioh-machine.c -- SoC Audio for LAPIS Semiconductor ML7213 IOH CRB
+ *
+ * Copyright (C) 2011 LAPIS Semiconductor Co., Ltd.
+ *
+ * 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; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/soc.h>
+#include <sound/pcm_params.h>
+#include <linux/i2c.h>
+#include "../codecs/ml26124.h"
+#include "ioh_i2s.h"
+
+static const struct snd_soc_dapm_widget ml7213_dapm_widgets[] = {
+ SND_SOC_DAPM_SPK("Speaker", NULL),
+ SND_SOC_DAPM_LINE("LINEOUT", NULL),
+ SND_SOC_DAPM_LINE("LINEIN", NULL),
+ SND_SOC_DAPM_MIC("AnalogMIC", NULL),
+ SND_SOC_DAPM_MIC("DigitalMIC", NULL),
+};
+
+static const struct snd_soc_dapm_route ml7213_routes[] = {
+ {"Speaker", NULL, "SPOUT"},
+ {"LINEOUT", NULL, "LOUT"},
+ {"AnalogMIC", NULL, "MICBIAS"},
+ {"MIN", NULL, "AnalogMIC"},
+ {"MDIN", NULL, "DigitalMIC"},
+ {"MIN", NULL, "LINEIN"},
+};
+
+static int ml7213_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *hw_params)
+{
+ int bclkfs;
+ int mclkfs;
+ unsigned int clk;
+ int ret;
+ 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;
+ unsigned int channel_map[] = {5, 0, 1, 2, 3, 4};
+
+ /* set cpu DAI channel mapping */
+ ret = snd_soc_dai_set_channel_map(cpu_dai, ARRAY_SIZE(channel_map),
+ channel_map, ARRAY_SIZE(channel_map), channel_map);
+ if (ret < 0)
+ return ret;
+
+ switch (params_rate(hw_params)) {
+ case 16000:
+ case 32000:
+ case 48000:
+ clk = 12288000;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ mclkfs = clk / params_rate(hw_params);
+
+ switch (params_format(hw_params)) {
+ case SNDRV_PCM_FORMAT_U8:
+ case SNDRV_PCM_FORMAT_S16_LE:
+ bclkfs = 32;
+ break;
+ case SNDRV_PCM_FORMAT_S32_LE:
+ bclkfs = 64;
+ break;
+ default:
+ pr_err("%s: Failed not support format\n", __func__);
+ return -EINVAL;
+ }
+
+ /* set the codec system clock for DAC and ADC */
+ ret = snd_soc_dai_set_sysclk(codec_dai, ML26124_USE_PLLOUT, clk,
+ SND_SOC_CLOCK_IN);
+ if (ret < 0)
+ return ret;
+
+ /* set codec DAI configuration */
+ ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
+ if (ret < 0)
+ return ret;
+
+ /* set cpu DAI configuration */
+ ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
+ if (ret < 0)
+ return ret;
+
+ return 0;
+}
+
+static struct snd_soc_ops ml7213_ops = {
+ .hw_params = ml7213_hw_params,
+};
+
+static struct snd_soc_dai_link ml7213crb_dai = {
+ .name = "ml26124",
+ .stream_name = "ML26124",
+ .cpu_dai_name = "ml7213ioh",
+ .codec_dai_name = "ml26124-hifi",
+ .platform_name = "ml7213-i2s-audio",
+ .codec_name = "ml26124.1-001a",
+ .ops = &ml7213_ops,
+};
+
+static struct snd_soc_card ml7213crb_card = {
+ .name = "LAPIS Semiconductor ML7213CRB",
+ .dai_link = &ml7213crb_dai,
+ .num_links = 1,
+ .dapm_widgets = ml7213_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(ml7213_dapm_widgets),
+ .dapm_routes = ml7213_routes,
+ .num_dapm_routes = ARRAY_SIZE(ml7213_routes),
+};
+
+static int __devinit lapis_ml7213_ml26124_probe(struct platform_device *pdev)
+{
+ int ret;
+
+ ml7213crb_card.dev = &pdev->dev;
+ ret = snd_soc_register_card(&ml7213crb_card);
+ if (ret) {
+ dev_err(&pdev->dev, "snd_soc_register_card failed %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int __devexit lapis_ml7213_ml26124_remove(struct platform_device *pdev)
+{
+ snd_soc_unregister_card(&ml7213crb_card);
+ platform_set_drvdata(pdev, NULL);
+ return 0;
+}
+
+static struct platform_driver snd_ml7213crb_driver = {
+ .driver = {
+ .owner = THIS_MODULE,
+ .name = "lapis-ml7213ioh-CRB",
+ },
+ .probe = lapis_ml7213_ml26124_probe,
+ .remove = __devexit_p(lapis_ml7213_ml26124_remove),
+};
+
+module_platform_driver(snd_ml7213crb_driver);
+
+MODULE_AUTHOR("Tomoya MORINAGA <tomoya.rohm@gmail.com>");
+MODULE_DESCRIPTION("LAPIS Semiconductor ML7213 IOH ALSA SoC machine driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:lapis-ml7213ioh-CRB");
--
1.7.7.6
next reply other threads:[~2012-03-21 1:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-21 1:15 Tomoya MORINAGA [this message]
2012-03-21 1:15 ` [PATCH v8] sound/soc/lapis: add machine driver for ML7213 Carrier Board Tomoya MORINAGA
2012-03-21 16:11 ` Mark Brown
2012-03-21 16:11 ` Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1332292517-3411-1-git-send-email-tomoya.rohm@gmail.com \
--to=tomoya.rohm@gmail.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=joel.clark@intel.com \
--cc=kok.howg.ewe@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lrg@ti.com \
--cc=perex@perex.cz \
--cc=qi.wang@intel.com \
--cc=tiwai@suse.de \
--cc=yong.y.wang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.