[alsa-devel] [PATCH 2/2] ASoC: Add FSI-DA7210 sound support for SuperH
Signed-off-by: Kuninori Morimoto morimoto.kuninori@renesas.com --- sound/soc/sh/Kconfig | 8 +++ sound/soc/sh/Makefile | 2 + sound/soc/sh/fsi-da7210.c | 117 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 0 deletions(-) create mode 100644 sound/soc/sh/fsi-da7210.c
diff --git a/sound/soc/sh/Kconfig b/sound/soc/sh/Kconfig index 9e69765..8072a6d 100644 --- a/sound/soc/sh/Kconfig +++ b/sound/soc/sh/Kconfig @@ -47,4 +47,12 @@ config SND_FSI_AK4642 This option enables generic sound support for the FSI - AK4642 unit
+config SND_FSI_DA7210 + bool "FSI-DA7210 sound support" + depends on SND_SOC_SH4_FSI + select SND_SOC_DA7210 + help + This option enables generic sound support for the + FSI - DA7210 unit + endmenu diff --git a/sound/soc/sh/Makefile b/sound/soc/sh/Makefile index a699787..1d0ec0a 100644 --- a/sound/soc/sh/Makefile +++ b/sound/soc/sh/Makefile @@ -13,6 +13,8 @@ obj-$(CONFIG_SND_SOC_SH4_FSI) += snd-soc-fsi.o ## boards snd-soc-sh7760-ac97-objs := sh7760-ac97.o snd-soc-fsi-ak4642-objs := fsi-ak4642.o +snd-soc-fsi-da7210-objs := fsi-da7210.o
obj-$(CONFIG_SND_SH7760_AC97) += snd-soc-sh7760-ac97.o obj-$(CONFIG_SND_FSI_AK4642) += snd-soc-fsi-ak4642.o +obj-$(CONFIG_SND_FSI_DA7210) += snd-soc-fsi-da7210.o diff --git a/sound/soc/sh/fsi-da7210.c b/sound/soc/sh/fsi-da7210.c new file mode 100644 index 0000000..e25e964 --- /dev/null +++ b/sound/soc/sh/fsi-da7210.c @@ -0,0 +1,117 @@ +/* + * fsi-da7210.c + * + * Copyright (C) 2009 Renesas Solutions Corp. + * Kuninori Morimoto morimoto.kuninori@renesas.com + * + * 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/interrupt.h> +#include <linux/platform_device.h> +#include <linux/io.h> +#include <linux/i2c.h> +#include <sound/core.h> +#include <sound/pcm.h> +#include <sound/pcm_params.h> +#include <sound/soc.h> +#include <sound/soc-dapm.h> + +#include <sound/sh_fsi.h> +#include "../codecs/da7210.h" + +static int fsi_da7210_init(struct snd_soc_codec *codec) +{ + return snd_soc_dai_set_fmt(&da7210_dai, + SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_CBM_CFM); + + /* Use this function to add machine dapm controls */ + return 0; +} + +static struct snd_soc_dai_link fsi_da7210_dai = { + .name = "DA7210", + .stream_name = "DA7210", + .cpu_dai = &fsi_soc_dai[1], /* FSI B */ + .codec_dai = &da7210_dai, + .init = fsi_da7210_init, +}; + +static struct snd_soc_card fsi_soc_card = { + .name = "FSI", + .platform = &fsi_soc_platform, + .dai_link = &fsi_da7210_dai, + .num_links = 1, +}; + +static struct snd_soc_device fsi_da7210_snd_devdata = { + .card = &fsi_soc_card, + .codec_dev = &soc_codec_dev_da7210, +}; + +#define DA7210_BUS 0 +#define DA7210_ADR (0x34 >> 1) +static int da7210_add_i2c_device(void) +{ + struct i2c_board_info info; + struct i2c_adapter *adapter; + struct i2c_client *client; + + memset(&info, 0, sizeof(struct i2c_board_info)); + info.addr = DA7210_ADR; + strlcpy(info.type, "da7210", I2C_NAME_SIZE); + + adapter = i2c_get_adapter(DA7210_BUS); + if (!adapter) { + printk(KERN_ERR "can't get i2c adapter\n"); + return -ENODEV; + } + + client = i2c_new_device(adapter, &info); + i2c_put_adapter(adapter); + if (!client) { + printk(KERN_ERR "can't add i2c device\n"); + return -ENODEV; + } + + return 0; +} + +static struct platform_device *fsi_da7210_snd_device; + +static int __init fsi_da7210_sound_init(void) +{ + + int ret; + + da7210_add_i2c_device(); + + fsi_da7210_snd_device = platform_device_alloc("soc-audio", -1); + if (!fsi_da7210_snd_device) + return -ENOMEM; + + platform_set_drvdata(fsi_da7210_snd_device, &fsi_da7210_snd_devdata); + fsi_da7210_snd_devdata.dev = &fsi_da7210_snd_device->dev; + ret = platform_device_add(fsi_da7210_snd_device); + if (ret) + platform_device_put(fsi_da7210_snd_device); + + return ret; +} + +static void __exit fsi_da7210_sound_exit(void) +{ + platform_device_unregister(fsi_da7210_snd_device); +} + +module_init(fsi_da7210_sound_init); +module_exit(fsi_da7210_sound_exit); + +/* Module information */ +MODULE_DESCRIPTION("ALSA SoC FSI DA2710"); +MODULE_AUTHOR("Kuninori Morimoto morimoto.kuninori@renesas.com"); +MODULE_LICENSE("GPL");
On Wed, Dec 09, 2009 at 11:53:37AM +0900, Kuninori Morimoto wrote:
+static int fsi_da7210_init(struct snd_soc_codec *codec) +{
- return snd_soc_dai_set_fmt(&da7210_dai,
SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
SND_SOC_DAIFMT_CBM_CFM);
- /* Use this function to add machine dapm controls */
- return 0;
+}
The second return statement can be removed - I suspect some compiler versions will warn about unreachable code there.
+#define DA7210_BUS 0 +#define DA7210_ADR (0x34 >> 1) +static int da7210_add_i2c_device(void) +{
This should be being done by the arch code rather than here, and there's no code to remove the device on shutdown. This idiom has been used by some drivers as part of a transition from the old style ASoC stuff where the I2C device was registered in the CODEC to reduce cross tree issues but it's best to avoid it for new code.
Dear Mark
+#define DA7210_BUS 0 +#define DA7210_ADR (0x34 >> 1) +static int da7210_add_i2c_device(void) +{
This should be being done by the arch code rather than here, and there's no code to remove the device on shutdown. This idiom has been used by some drivers as part of a transition from the old style ASoC stuff where the I2C device was registered in the CODEC to reduce cross tree issues but it's best to avoid it for new code.
Wow... I should modify ak4642 / fsi-ak4642 too
Best regards -- Kuninori Morimoto
On 10 Dec 2009, at 02:17, Kuninori Morimoto <morimoto.kuninori@renesas.com
wrote:
Dear Mark
+#define DA7210_BUS 0 +#define DA7210_ADR (0x34 >> 1) +static int da7210_add_i2c_device(void) +{
This should be being done by the arch code rather than here, and there's no code to remove the device on shutdown. This idiom has been used by some drivers as part of a transition from the old style ASoC stuff where the I2C device was registered in the CODEC to reduce cross tree issues but it's best to avoid it for new code.
Wow... I should modify ak4642 / fsi-ak4642 too
Yes, please. It's not super urgent but it'd be a nice cleanup.
participants (2)
-
Kuninori Morimoto
-
Mark Brown