Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
2013/7/8 Bo Shen : > Hi Richard, > > > On 7/5/2013 23:15, Richard Genoud wrote: + card->dev = >dev; >>+ card->owner = THIS_MODULE; >>+ card->dai_link = dai; >>+ card->num_links = 1; >>+ dai->name = "WM8731"; >>+ dai->stream_name = "WM8731 PCM"; >>+ dai->codec_dai_name = "wm8731-hifi"; >>+ dai->init = at91sam9x5ek_wm8731_init; >>+ card->dapm_widgets = at91sam9x5ek_dapm_widgets; >>+ card->num_dapm_widgets = >> ARRAY_SIZE(at91sam9x5ek_dapm_widgets); >>> >>> > >>> > >>> >Will keep these as snd_soc_card and snd_soc_dai_link structure >>> > separately? >> >> I don't really understand what you mean here. >> do you mean that something like that will more explicit ? : >> + card->dai_link[0].name = "WM8731"; >> + card->dai_link[0].stream_name = "WM8731 PCM"; >> + card->dai_link[0].codec_dai_name = "wm8731-hifi"; >> + card->dai_link[0].init = at91sam9x5ek_wm8731_init; >> > > I mean using structure to define snd_soc_card and snd_soc_dai_link, look > like: > struct snd_soc_dai_link dai_link_name = { > .name = xxx, > .stream_name = xxx, > ... > }; > > struct snd_soc_card card_name = { > .name = > .ower = THIS_MODULE, > .dai_link = _link_name, > ... > }; > > In this way, I think it will be more clear than put them in code. ok, got it ! Thanks ! Richard. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
2013/7/8 Bo Shen voice.s...@atmel.com: Hi Richard, On 7/5/2013 23:15, Richard Genoud wrote: + card-dev = pdev-dev; + card-owner = THIS_MODULE; + card-dai_link = dai; + card-num_links = 1; + dai-name = WM8731; + dai-stream_name = WM8731 PCM; + dai-codec_dai_name = wm8731-hifi; + dai-init = at91sam9x5ek_wm8731_init; + card-dapm_widgets = at91sam9x5ek_dapm_widgets; + card-num_dapm_widgets = ARRAY_SIZE(at91sam9x5ek_dapm_widgets); Will keep these as snd_soc_card and snd_soc_dai_link structure separately? I don't really understand what you mean here. do you mean that something like that will more explicit ? : + card-dai_link[0].name = WM8731; + card-dai_link[0].stream_name = WM8731 PCM; + card-dai_link[0].codec_dai_name = wm8731-hifi; + card-dai_link[0].init = at91sam9x5ek_wm8731_init; I mean using structure to define snd_soc_card and snd_soc_dai_link, look like: struct snd_soc_dai_link dai_link_name = { .name = xxx, .stream_name = xxx, ... }; struct snd_soc_card card_name = { .name = .ower = THIS_MODULE, .dai_link = dai_link_name, ... }; In this way, I think it will be more clear than put them in code. ok, got it ! Thanks ! Richard. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
Hi Richard, On 7/5/2013 23:15, Richard Genoud wrote: + card->dev = >dev; >>+ card->owner = THIS_MODULE; >>+ card->dai_link = dai; >>+ card->num_links = 1; >>+ dai->name = "WM8731"; >>+ dai->stream_name = "WM8731 PCM"; >>+ dai->codec_dai_name = "wm8731-hifi"; >>+ dai->init = at91sam9x5ek_wm8731_init; >>+ card->dapm_widgets = at91sam9x5ek_dapm_widgets; >>+ card->num_dapm_widgets = ARRAY_SIZE(at91sam9x5ek_dapm_widgets); > > >Will keep these as snd_soc_card and snd_soc_dai_link structure separately? I don't really understand what you mean here. do you mean that something like that will more explicit ? : + card->dai_link[0].name = "WM8731"; + card->dai_link[0].stream_name = "WM8731 PCM"; + card->dai_link[0].codec_dai_name = "wm8731-hifi"; + card->dai_link[0].init = at91sam9x5ek_wm8731_init; I mean using structure to define snd_soc_card and snd_soc_dai_link, look like: struct snd_soc_dai_link dai_link_name = { .name = xxx, .stream_name = xxx, ... }; struct snd_soc_card card_name = { .name = .ower = THIS_MODULE, .dai_link = _link_name, ... }; In this way, I think it will be more clear than put them in code. Best Regards, Bo Shen -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
Hi Richard, On 7/5/2013 23:15, Richard Genoud wrote: + card-dev = pdev-dev; + card-owner = THIS_MODULE; + card-dai_link = dai; + card-num_links = 1; + dai-name = WM8731; + dai-stream_name = WM8731 PCM; + dai-codec_dai_name = wm8731-hifi; + dai-init = at91sam9x5ek_wm8731_init; + card-dapm_widgets = at91sam9x5ek_dapm_widgets; + card-num_dapm_widgets = ARRAY_SIZE(at91sam9x5ek_dapm_widgets); Will keep these as snd_soc_card and snd_soc_dai_link structure separately? I don't really understand what you mean here. do you mean that something like that will more explicit ? : + card-dai_link[0].name = WM8731; + card-dai_link[0].stream_name = WM8731 PCM; + card-dai_link[0].codec_dai_name = wm8731-hifi; + card-dai_link[0].init = at91sam9x5ek_wm8731_init; I mean using structure to define snd_soc_card and snd_soc_dai_link, look like: struct snd_soc_dai_link dai_link_name = { .name = xxx, .stream_name = xxx, ... }; struct snd_soc_card card_name = { .name = .ower = THIS_MODULE, .dai_link = dai_link_name, ... }; In this way, I think it will be more clear than put them in code. Best Regards, Bo Shen -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
2013/7/5 Mark Brown : > On Fri, Jul 05, 2013 at 05:15:05PM +0200, Richard Genoud wrote: >> 2013/7/2 Bo Shen : > >> >> From: Nicolas Ferre >> >> >> >> Description of the Asoc machine driver for an at91sam9x5 based board >> >> with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a >> >> master on the SSC/I2S interface. Its connections are a headphone jack >> >> and an Line input jack. > > Always CC relevant maintainers and mailing lists on patches... Sorry Mark, I'll double check that on the next version. Thanks ! Best Regards, Richard. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
On Fri, Jul 05, 2013 at 05:15:05PM +0200, Richard Genoud wrote: > 2013/7/2 Bo Shen : > >> From: Nicolas Ferre > >> > >> Description of the Asoc machine driver for an at91sam9x5 based board > >> with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a > >> master on the SSC/I2S interface. Its connections are a headphone jack > >> and an Line input jack. Always CC relevant maintainers and mailing lists on patches... signature.asc Description: Digital signature
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
2013/7/2 Bo Shen : > Hi Richard, > > Will move this patch before 5, 6, 7? yes, you're right. > > > On 7/1/2013 16:39, Richard Genoud wrote: >> >> From: Nicolas Ferre >> >> Description of the Asoc machine driver for an at91sam9x5 based board >> with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a >> master on the SSC/I2S interface. Its connections are a headphone jack >> and an Line input jack. >> >> [Richard: this is based on an old patch from Nicolas that I forward >> ported and reworked to use only device tree] >> >> Signed-off-by: Nicolas Ferre >> Signed-off-by: Uwe Kleine-König >> Signed-off-by: Richard Genoud >> --- >> sound/soc/atmel/Kconfig | 12 ++ >> sound/soc/atmel/Makefile|2 + >> sound/soc/atmel/sam9x5_wm8731.c | 232 >> +++ >> 3 files changed, 246 insertions(+) >> create mode 100644 sound/soc/atmel/sam9x5_wm8731.c >> >> diff --git a/sound/soc/atmel/Kconfig b/sound/soc/atmel/Kconfig >> index 3fdd87f..f24d601 100644 >> --- a/sound/soc/atmel/Kconfig >> +++ b/sound/soc/atmel/Kconfig >> @@ -13,6 +13,7 @@ config SND_ATMEL_SOC_PDC >> config SND_ATMEL_SOC_DMA >> tristate >> depends on SND_ATMEL_SOC >> + select SND_SOC_DMAENGINE_PCM >> >> config SND_ATMEL_SOC_SSC >> tristate >> @@ -32,6 +33,17 @@ config SND_AT91_SOC_SAM9G20_WM8731 >> Say Y if you want to add support for SoC audio on WM8731-based >> AT91sam9g20 evaluation board. >> >> +config SND_AT91_SOC_SAM9X5_WM8731 >> + tristate "SoC Audio support for WM8731-based at91sam9x5 board" >> + depends on ATMEL_SSC && SND_ATMEL_SOC && SOC_AT91SAM9X5 >> + select SND_ATMEL_SOC_SSC >> + select SND_ATMEL_SOC_DMA >> + select SND_ATMEL_SOC_PDC > > > Not need to select SND_ATMEL_SOC_PDC ok, I'll drop this >> + select SND_SOC_WM8731 >> + help >> + Say Y if you want to add support for audio SoC on an >> + at91sam9x5 based board that is using WM8731 codec. >> + >> config SND_AT91_SOC_AFEB9260 >> tristate "SoC Audio support for AFEB9260 board" >> depends on ARCH_AT91 && ATMEL_SSC && ARCH_AT91 && MACH_AFEB9260 && >> SND_ATMEL_SOC >> diff --git a/sound/soc/atmel/Makefile b/sound/soc/atmel/Makefile >> index 41967cc..7784c09 100644 >> --- a/sound/soc/atmel/Makefile >> +++ b/sound/soc/atmel/Makefile >> @@ -11,6 +11,8 @@ obj-$(CONFIG_SND_ATMEL_SOC_SSC) += >> snd-soc-atmel_ssc_dai.o >> >> # AT91 Machine Support >> snd-soc-sam9g20-wm8731-objs := sam9g20_wm8731.o >> +snd-soc-sam9x5-wm8731-objs := sam9x5_wm8731.o >> >> obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o >> +obj-$(CONFIG_SND_AT91_SOC_SAM9X5_WM8731) += snd-soc-sam9x5-wm8731.o >> obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += snd-soc-afeb9260.o >> diff --git a/sound/soc/atmel/sam9x5_wm8731.c >> b/sound/soc/atmel/sam9x5_wm8731.c >> new file mode 100644 >> index 000..83ca457 >> --- /dev/null >> +++ b/sound/soc/atmel/sam9x5_wm8731.c >> @@ -0,0 +1,232 @@ >> +/* >> + * sam9x5_wm8731 -- SoC audio for AT91SAM9X5-based boards >> + * that are using WM8731 as codec. >> + * >> + * Copyright (C) 2011 Atmel, >> + * Nicolas Ferre >> + * >> + * Based on sam9g20_wm8731.c by: >> + * Sedji Gaouaou >> + * >> + * GPL >> + */ >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +#include >> + >> +#include >> +#include >> +#include >> +#include >> + >> +#include >> +#include >> +#include >> + >> +#include "../codecs/wm8731.h" >> +#include "atmel-pcm.h" >> +#include "atmel_ssc_dai.h" >> + >> +#define MCLK_RATE 12288000 >> + >> +#define DRV_NAME "sam9x5-snd-wm8731" >> + >> +/* >> + * Audio paths on at91sam9x5ek board: >> + * >> + * |A| > | | ---R> Headphone Jack >> + * |T| <\| WM | ---L--/ >> + * |9| ---> CLK <--> | 8751 | <--R- Line In Jack >> + * |1| < | | <--L--/ >> + */ >> +static const struct snd_soc_dapm_widget at91sam9x5ek_dapm_widgets[] = { >> + SND_SOC_DAPM_HP("Headphone Jack", NULL), >> + SND_SOC_DAPM_LINE("Line In Jack", NULL), >> +}; >> + >> +/* >> + * Logic for a wm8731 as connected on a at91sam9x5 based board. >> + */ >> +static int at91sam9x5ek_wm8731_init(struct snd_soc_pcm_runtime *rtd) >> +{ >> + struct snd_soc_codec *codec = rtd->codec; >> + struct snd_soc_dai *codec_dai = rtd->codec_dai; >> + struct snd_soc_dapm_context *dapm = >dapm; >> + struct device *dev = rtd->dev; >> + int ret; >> + >> + dev_dbg(dev, "ASoC: at91sam9x5ek_wm8731_init() called\n"); >> + >> + /* >> +* remove some not supported rates in relation with clock >> +* provided to the wm8731 codec >> +*/ >> + switch (MCLK_RATE) { >> + case 12288000: >> + codec_dai->driver->playback.rates &= SNDRV_PCM_RATE_8000 | >> +
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
2013/7/2 Bo Shen voice.s...@atmel.com: Hi Richard, Will move this patch before 5, 6, 7? yes, you're right. On 7/1/2013 16:39, Richard Genoud wrote: From: Nicolas Ferre nicolas.fe...@atmel.com Description of the Asoc machine driver for an at91sam9x5 based board with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a master on the SSC/I2S interface. Its connections are a headphone jack and an Line input jack. [Richard: this is based on an old patch from Nicolas that I forward ported and reworked to use only device tree] Signed-off-by: Nicolas Ferre nicolas.fe...@atmel.com Signed-off-by: Uwe Kleine-König u.kleine-koe...@pengutronix.de Signed-off-by: Richard Genoud richard.gen...@gmail.com --- sound/soc/atmel/Kconfig | 12 ++ sound/soc/atmel/Makefile|2 + sound/soc/atmel/sam9x5_wm8731.c | 232 +++ 3 files changed, 246 insertions(+) create mode 100644 sound/soc/atmel/sam9x5_wm8731.c diff --git a/sound/soc/atmel/Kconfig b/sound/soc/atmel/Kconfig index 3fdd87f..f24d601 100644 --- a/sound/soc/atmel/Kconfig +++ b/sound/soc/atmel/Kconfig @@ -13,6 +13,7 @@ config SND_ATMEL_SOC_PDC config SND_ATMEL_SOC_DMA tristate depends on SND_ATMEL_SOC + select SND_SOC_DMAENGINE_PCM config SND_ATMEL_SOC_SSC tristate @@ -32,6 +33,17 @@ config SND_AT91_SOC_SAM9G20_WM8731 Say Y if you want to add support for SoC audio on WM8731-based AT91sam9g20 evaluation board. +config SND_AT91_SOC_SAM9X5_WM8731 + tristate SoC Audio support for WM8731-based at91sam9x5 board + depends on ATMEL_SSC SND_ATMEL_SOC SOC_AT91SAM9X5 + select SND_ATMEL_SOC_SSC + select SND_ATMEL_SOC_DMA + select SND_ATMEL_SOC_PDC Not need to select SND_ATMEL_SOC_PDC ok, I'll drop this + select SND_SOC_WM8731 + help + Say Y if you want to add support for audio SoC on an + at91sam9x5 based board that is using WM8731 codec. + config SND_AT91_SOC_AFEB9260 tristate SoC Audio support for AFEB9260 board depends on ARCH_AT91 ATMEL_SSC ARCH_AT91 MACH_AFEB9260 SND_ATMEL_SOC diff --git a/sound/soc/atmel/Makefile b/sound/soc/atmel/Makefile index 41967cc..7784c09 100644 --- a/sound/soc/atmel/Makefile +++ b/sound/soc/atmel/Makefile @@ -11,6 +11,8 @@ obj-$(CONFIG_SND_ATMEL_SOC_SSC) += snd-soc-atmel_ssc_dai.o # AT91 Machine Support snd-soc-sam9g20-wm8731-objs := sam9g20_wm8731.o +snd-soc-sam9x5-wm8731-objs := sam9x5_wm8731.o obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o +obj-$(CONFIG_SND_AT91_SOC_SAM9X5_WM8731) += snd-soc-sam9x5-wm8731.o obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += snd-soc-afeb9260.o diff --git a/sound/soc/atmel/sam9x5_wm8731.c b/sound/soc/atmel/sam9x5_wm8731.c new file mode 100644 index 000..83ca457 --- /dev/null +++ b/sound/soc/atmel/sam9x5_wm8731.c @@ -0,0 +1,232 @@ +/* + * sam9x5_wm8731 -- SoC audio for AT91SAM9X5-based boards + * that are using WM8731 as codec. + * + * Copyright (C) 2011 Atmel, + * Nicolas Ferre nicolas.fe...@atmel.com + * + * Based on sam9g20_wm8731.c by: + * Sedji Gaouaou sedji.gaou...@atmel.com + * + * GPL + */ +#include linux/module.h +#include linux/moduleparam.h +#include linux/kernel.h +#include linux/clk.h +#include linux/timer.h +#include linux/interrupt.h +#include linux/platform_device.h +#include linux/i2c.h + +#include linux/atmel-ssc.h + +#include sound/core.h +#include sound/pcm.h +#include sound/pcm_params.h +#include sound/soc.h + +#include asm/mach-types.h +#include mach/hardware.h +#include mach/gpio.h + +#include ../codecs/wm8731.h +#include atmel-pcm.h +#include atmel_ssc_dai.h + +#define MCLK_RATE 12288000 + +#define DRV_NAME sam9x5-snd-wm8731 + +/* + * Audio paths on at91sam9x5ek board: + * + * |A| | | ---R Headphone Jack + * |T| \| WM | ---L--/ + * |9| --- CLK -- | 8751 | --R- Line In Jack + * |1| | | --L--/ + */ +static const struct snd_soc_dapm_widget at91sam9x5ek_dapm_widgets[] = { + SND_SOC_DAPM_HP(Headphone Jack, NULL), + SND_SOC_DAPM_LINE(Line In Jack, NULL), +}; + +/* + * Logic for a wm8731 as connected on a at91sam9x5 based board. + */ +static int at91sam9x5ek_wm8731_init(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_codec *codec = rtd-codec; + struct snd_soc_dai *codec_dai = rtd-codec_dai; + struct snd_soc_dapm_context *dapm = codec-dapm; + struct device *dev = rtd-dev; + int ret; + + dev_dbg(dev, ASoC: at91sam9x5ek_wm8731_init() called\n); + + /* +* remove some not supported rates in relation with clock +* provided to the wm8731 codec +*/ + switch (MCLK_RATE) { + case 12288000: + codec_dai-driver-playback.rates
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
On Fri, Jul 05, 2013 at 05:15:05PM +0200, Richard Genoud wrote: 2013/7/2 Bo Shen voice.s...@atmel.com: From: Nicolas Ferre nicolas.fe...@atmel.com Description of the Asoc machine driver for an at91sam9x5 based board with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a master on the SSC/I2S interface. Its connections are a headphone jack and an Line input jack. Always CC relevant maintainers and mailing lists on patches... signature.asc Description: Digital signature
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
2013/7/5 Mark Brown broo...@kernel.org: On Fri, Jul 05, 2013 at 05:15:05PM +0200, Richard Genoud wrote: 2013/7/2 Bo Shen voice.s...@atmel.com: From: Nicolas Ferre nicolas.fe...@atmel.com Description of the Asoc machine driver for an at91sam9x5 based board with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a master on the SSC/I2S interface. Its connections are a headphone jack and an Line input jack. Always CC relevant maintainers and mailing lists on patches... Sorry Mark, I'll double check that on the next version. Thanks ! Best Regards, Richard. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
Hi Richard, Will move this patch before 5, 6, 7? On 7/1/2013 16:39, Richard Genoud wrote: From: Nicolas Ferre Description of the Asoc machine driver for an at91sam9x5 based board with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a master on the SSC/I2S interface. Its connections are a headphone jack and an Line input jack. [Richard: this is based on an old patch from Nicolas that I forward ported and reworked to use only device tree] Signed-off-by: Nicolas Ferre Signed-off-by: Uwe Kleine-König Signed-off-by: Richard Genoud --- sound/soc/atmel/Kconfig | 12 ++ sound/soc/atmel/Makefile|2 + sound/soc/atmel/sam9x5_wm8731.c | 232 +++ 3 files changed, 246 insertions(+) create mode 100644 sound/soc/atmel/sam9x5_wm8731.c diff --git a/sound/soc/atmel/Kconfig b/sound/soc/atmel/Kconfig index 3fdd87f..f24d601 100644 --- a/sound/soc/atmel/Kconfig +++ b/sound/soc/atmel/Kconfig @@ -13,6 +13,7 @@ config SND_ATMEL_SOC_PDC config SND_ATMEL_SOC_DMA tristate depends on SND_ATMEL_SOC + select SND_SOC_DMAENGINE_PCM config SND_ATMEL_SOC_SSC tristate @@ -32,6 +33,17 @@ config SND_AT91_SOC_SAM9G20_WM8731 Say Y if you want to add support for SoC audio on WM8731-based AT91sam9g20 evaluation board. +config SND_AT91_SOC_SAM9X5_WM8731 + tristate "SoC Audio support for WM8731-based at91sam9x5 board" + depends on ATMEL_SSC && SND_ATMEL_SOC && SOC_AT91SAM9X5 + select SND_ATMEL_SOC_SSC + select SND_ATMEL_SOC_DMA + select SND_ATMEL_SOC_PDC Not need to select SND_ATMEL_SOC_PDC + select SND_SOC_WM8731 + help + Say Y if you want to add support for audio SoC on an + at91sam9x5 based board that is using WM8731 codec. + config SND_AT91_SOC_AFEB9260 tristate "SoC Audio support for AFEB9260 board" depends on ARCH_AT91 && ATMEL_SSC && ARCH_AT91 && MACH_AFEB9260 && SND_ATMEL_SOC diff --git a/sound/soc/atmel/Makefile b/sound/soc/atmel/Makefile index 41967cc..7784c09 100644 --- a/sound/soc/atmel/Makefile +++ b/sound/soc/atmel/Makefile @@ -11,6 +11,8 @@ obj-$(CONFIG_SND_ATMEL_SOC_SSC) += snd-soc-atmel_ssc_dai.o # AT91 Machine Support snd-soc-sam9g20-wm8731-objs := sam9g20_wm8731.o +snd-soc-sam9x5-wm8731-objs := sam9x5_wm8731.o obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o +obj-$(CONFIG_SND_AT91_SOC_SAM9X5_WM8731) += snd-soc-sam9x5-wm8731.o obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += snd-soc-afeb9260.o diff --git a/sound/soc/atmel/sam9x5_wm8731.c b/sound/soc/atmel/sam9x5_wm8731.c new file mode 100644 index 000..83ca457 --- /dev/null +++ b/sound/soc/atmel/sam9x5_wm8731.c @@ -0,0 +1,232 @@ +/* + * sam9x5_wm8731 -- SoC audio for AT91SAM9X5-based boards + * that are using WM8731 as codec. + * + * Copyright (C) 2011 Atmel, + * Nicolas Ferre + * + * Based on sam9g20_wm8731.c by: + * Sedji Gaouaou + * + * GPL + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include "../codecs/wm8731.h" +#include "atmel-pcm.h" +#include "atmel_ssc_dai.h" + +#define MCLK_RATE 12288000 + +#define DRV_NAME "sam9x5-snd-wm8731" + +/* + * Audio paths on at91sam9x5ek board: + * + * |A| > | | ---R> Headphone Jack + * |T| <\| WM | ---L--/ + * |9| ---> CLK <--> | 8751 | <--R- Line In Jack + * |1| < | | <--L--/ + */ +static const struct snd_soc_dapm_widget at91sam9x5ek_dapm_widgets[] = { + SND_SOC_DAPM_HP("Headphone Jack", NULL), + SND_SOC_DAPM_LINE("Line In Jack", NULL), +}; + +/* + * Logic for a wm8731 as connected on a at91sam9x5 based board. + */ +static int at91sam9x5ek_wm8731_init(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_codec *codec = rtd->codec; + struct snd_soc_dai *codec_dai = rtd->codec_dai; + struct snd_soc_dapm_context *dapm = >dapm; + struct device *dev = rtd->dev; + int ret; + + dev_dbg(dev, "ASoC: at91sam9x5ek_wm8731_init() called\n"); + + /* +* remove some not supported rates in relation with clock +* provided to the wm8731 codec +*/ + switch (MCLK_RATE) { + case 12288000: + codec_dai->driver->playback.rates &= SNDRV_PCM_RATE_8000 | +SNDRV_PCM_RATE_32000 | +SNDRV_PCM_RATE_48000 | +SNDRV_PCM_RATE_96000; + codec_dai->driver->capture.rates &= SNDRV_PCM_RATE_8000 | + SNDRV_PCM_RATE_32000 | + SNDRV_PCM_RATE_48000 | + SNDRV_PCM_RATE_96000; +
[RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
From: Nicolas Ferre Description of the Asoc machine driver for an at91sam9x5 based board with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a master on the SSC/I2S interface. Its connections are a headphone jack and an Line input jack. [Richard: this is based on an old patch from Nicolas that I forward ported and reworked to use only device tree] Signed-off-by: Nicolas Ferre Signed-off-by: Uwe Kleine-König Signed-off-by: Richard Genoud --- sound/soc/atmel/Kconfig | 12 ++ sound/soc/atmel/Makefile|2 + sound/soc/atmel/sam9x5_wm8731.c | 232 +++ 3 files changed, 246 insertions(+) create mode 100644 sound/soc/atmel/sam9x5_wm8731.c diff --git a/sound/soc/atmel/Kconfig b/sound/soc/atmel/Kconfig index 3fdd87f..f24d601 100644 --- a/sound/soc/atmel/Kconfig +++ b/sound/soc/atmel/Kconfig @@ -13,6 +13,7 @@ config SND_ATMEL_SOC_PDC config SND_ATMEL_SOC_DMA tristate depends on SND_ATMEL_SOC + select SND_SOC_DMAENGINE_PCM config SND_ATMEL_SOC_SSC tristate @@ -32,6 +33,17 @@ config SND_AT91_SOC_SAM9G20_WM8731 Say Y if you want to add support for SoC audio on WM8731-based AT91sam9g20 evaluation board. +config SND_AT91_SOC_SAM9X5_WM8731 + tristate "SoC Audio support for WM8731-based at91sam9x5 board" + depends on ATMEL_SSC && SND_ATMEL_SOC && SOC_AT91SAM9X5 + select SND_ATMEL_SOC_SSC + select SND_ATMEL_SOC_DMA + select SND_ATMEL_SOC_PDC + select SND_SOC_WM8731 + help + Say Y if you want to add support for audio SoC on an + at91sam9x5 based board that is using WM8731 codec. + config SND_AT91_SOC_AFEB9260 tristate "SoC Audio support for AFEB9260 board" depends on ARCH_AT91 && ATMEL_SSC && ARCH_AT91 && MACH_AFEB9260 && SND_ATMEL_SOC diff --git a/sound/soc/atmel/Makefile b/sound/soc/atmel/Makefile index 41967cc..7784c09 100644 --- a/sound/soc/atmel/Makefile +++ b/sound/soc/atmel/Makefile @@ -11,6 +11,8 @@ obj-$(CONFIG_SND_ATMEL_SOC_SSC) += snd-soc-atmel_ssc_dai.o # AT91 Machine Support snd-soc-sam9g20-wm8731-objs := sam9g20_wm8731.o +snd-soc-sam9x5-wm8731-objs := sam9x5_wm8731.o obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o +obj-$(CONFIG_SND_AT91_SOC_SAM9X5_WM8731) += snd-soc-sam9x5-wm8731.o obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += snd-soc-afeb9260.o diff --git a/sound/soc/atmel/sam9x5_wm8731.c b/sound/soc/atmel/sam9x5_wm8731.c new file mode 100644 index 000..83ca457 --- /dev/null +++ b/sound/soc/atmel/sam9x5_wm8731.c @@ -0,0 +1,232 @@ +/* + * sam9x5_wm8731 -- SoC audio for AT91SAM9X5-based boards + * that are using WM8731 as codec. + * + * Copyright (C) 2011 Atmel, + * Nicolas Ferre + * + * Based on sam9g20_wm8731.c by: + * Sedji Gaouaou + * + * GPL + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include "../codecs/wm8731.h" +#include "atmel-pcm.h" +#include "atmel_ssc_dai.h" + +#define MCLK_RATE 12288000 + +#define DRV_NAME "sam9x5-snd-wm8731" + +/* + * Audio paths on at91sam9x5ek board: + * + * |A| > | | ---R> Headphone Jack + * |T| <\| WM | ---L--/ + * |9| ---> CLK <--> | 8751 | <--R- Line In Jack + * |1| < | | <--L--/ + */ +static const struct snd_soc_dapm_widget at91sam9x5ek_dapm_widgets[] = { + SND_SOC_DAPM_HP("Headphone Jack", NULL), + SND_SOC_DAPM_LINE("Line In Jack", NULL), +}; + +/* + * Logic for a wm8731 as connected on a at91sam9x5 based board. + */ +static int at91sam9x5ek_wm8731_init(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_codec *codec = rtd->codec; + struct snd_soc_dai *codec_dai = rtd->codec_dai; + struct snd_soc_dapm_context *dapm = >dapm; + struct device *dev = rtd->dev; + int ret; + + dev_dbg(dev, "ASoC: at91sam9x5ek_wm8731_init() called\n"); + + /* +* remove some not supported rates in relation with clock +* provided to the wm8731 codec +*/ + switch (MCLK_RATE) { + case 12288000: + codec_dai->driver->playback.rates &= SNDRV_PCM_RATE_8000 | +SNDRV_PCM_RATE_32000 | +SNDRV_PCM_RATE_48000 | +SNDRV_PCM_RATE_96000; + codec_dai->driver->capture.rates &= SNDRV_PCM_RATE_8000 | + SNDRV_PCM_RATE_32000 | + SNDRV_PCM_RATE_48000 | + SNDRV_PCM_RATE_96000; + break; + case 1200: + /* all wm8731 rates supported */ + break; + default: +
[RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
From: Nicolas Ferre nicolas.fe...@atmel.com Description of the Asoc machine driver for an at91sam9x5 based board with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a master on the SSC/I2S interface. Its connections are a headphone jack and an Line input jack. [Richard: this is based on an old patch from Nicolas that I forward ported and reworked to use only device tree] Signed-off-by: Nicolas Ferre nicolas.fe...@atmel.com Signed-off-by: Uwe Kleine-König u.kleine-koe...@pengutronix.de Signed-off-by: Richard Genoud richard.gen...@gmail.com --- sound/soc/atmel/Kconfig | 12 ++ sound/soc/atmel/Makefile|2 + sound/soc/atmel/sam9x5_wm8731.c | 232 +++ 3 files changed, 246 insertions(+) create mode 100644 sound/soc/atmel/sam9x5_wm8731.c diff --git a/sound/soc/atmel/Kconfig b/sound/soc/atmel/Kconfig index 3fdd87f..f24d601 100644 --- a/sound/soc/atmel/Kconfig +++ b/sound/soc/atmel/Kconfig @@ -13,6 +13,7 @@ config SND_ATMEL_SOC_PDC config SND_ATMEL_SOC_DMA tristate depends on SND_ATMEL_SOC + select SND_SOC_DMAENGINE_PCM config SND_ATMEL_SOC_SSC tristate @@ -32,6 +33,17 @@ config SND_AT91_SOC_SAM9G20_WM8731 Say Y if you want to add support for SoC audio on WM8731-based AT91sam9g20 evaluation board. +config SND_AT91_SOC_SAM9X5_WM8731 + tristate SoC Audio support for WM8731-based at91sam9x5 board + depends on ATMEL_SSC SND_ATMEL_SOC SOC_AT91SAM9X5 + select SND_ATMEL_SOC_SSC + select SND_ATMEL_SOC_DMA + select SND_ATMEL_SOC_PDC + select SND_SOC_WM8731 + help + Say Y if you want to add support for audio SoC on an + at91sam9x5 based board that is using WM8731 codec. + config SND_AT91_SOC_AFEB9260 tristate SoC Audio support for AFEB9260 board depends on ARCH_AT91 ATMEL_SSC ARCH_AT91 MACH_AFEB9260 SND_ATMEL_SOC diff --git a/sound/soc/atmel/Makefile b/sound/soc/atmel/Makefile index 41967cc..7784c09 100644 --- a/sound/soc/atmel/Makefile +++ b/sound/soc/atmel/Makefile @@ -11,6 +11,8 @@ obj-$(CONFIG_SND_ATMEL_SOC_SSC) += snd-soc-atmel_ssc_dai.o # AT91 Machine Support snd-soc-sam9g20-wm8731-objs := sam9g20_wm8731.o +snd-soc-sam9x5-wm8731-objs := sam9x5_wm8731.o obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o +obj-$(CONFIG_SND_AT91_SOC_SAM9X5_WM8731) += snd-soc-sam9x5-wm8731.o obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += snd-soc-afeb9260.o diff --git a/sound/soc/atmel/sam9x5_wm8731.c b/sound/soc/atmel/sam9x5_wm8731.c new file mode 100644 index 000..83ca457 --- /dev/null +++ b/sound/soc/atmel/sam9x5_wm8731.c @@ -0,0 +1,232 @@ +/* + * sam9x5_wm8731 -- SoC audio for AT91SAM9X5-based boards + * that are using WM8731 as codec. + * + * Copyright (C) 2011 Atmel, + * Nicolas Ferre nicolas.fe...@atmel.com + * + * Based on sam9g20_wm8731.c by: + * Sedji Gaouaou sedji.gaou...@atmel.com + * + * GPL + */ +#include linux/module.h +#include linux/moduleparam.h +#include linux/kernel.h +#include linux/clk.h +#include linux/timer.h +#include linux/interrupt.h +#include linux/platform_device.h +#include linux/i2c.h + +#include linux/atmel-ssc.h + +#include sound/core.h +#include sound/pcm.h +#include sound/pcm_params.h +#include sound/soc.h + +#include asm/mach-types.h +#include mach/hardware.h +#include mach/gpio.h + +#include ../codecs/wm8731.h +#include atmel-pcm.h +#include atmel_ssc_dai.h + +#define MCLK_RATE 12288000 + +#define DRV_NAME sam9x5-snd-wm8731 + +/* + * Audio paths on at91sam9x5ek board: + * + * |A| | | ---R Headphone Jack + * |T| \| WM | ---L--/ + * |9| --- CLK -- | 8751 | --R- Line In Jack + * |1| | | --L--/ + */ +static const struct snd_soc_dapm_widget at91sam9x5ek_dapm_widgets[] = { + SND_SOC_DAPM_HP(Headphone Jack, NULL), + SND_SOC_DAPM_LINE(Line In Jack, NULL), +}; + +/* + * Logic for a wm8731 as connected on a at91sam9x5 based board. + */ +static int at91sam9x5ek_wm8731_init(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_codec *codec = rtd-codec; + struct snd_soc_dai *codec_dai = rtd-codec_dai; + struct snd_soc_dapm_context *dapm = codec-dapm; + struct device *dev = rtd-dev; + int ret; + + dev_dbg(dev, ASoC: at91sam9x5ek_wm8731_init() called\n); + + /* +* remove some not supported rates in relation with clock +* provided to the wm8731 codec +*/ + switch (MCLK_RATE) { + case 12288000: + codec_dai-driver-playback.rates = SNDRV_PCM_RATE_8000 | +SNDRV_PCM_RATE_32000 | +SNDRV_PCM_RATE_48000 | +SNDRV_PCM_RATE_96000; + codec_dai-driver-capture.rates = SNDRV_PCM_RATE_8000 | +
Re: [RFC PATCH 08/13] sound: sam9x5_wm8731: machine driver for at91sam9x5 wm8731 boards
Hi Richard, Will move this patch before 5, 6, 7? On 7/1/2013 16:39, Richard Genoud wrote: From: Nicolas Ferre nicolas.fe...@atmel.com Description of the Asoc machine driver for an at91sam9x5 based board with a wm8731 audio DAC. Wm8731 is clocked by a crystal and used as a master on the SSC/I2S interface. Its connections are a headphone jack and an Line input jack. [Richard: this is based on an old patch from Nicolas that I forward ported and reworked to use only device tree] Signed-off-by: Nicolas Ferre nicolas.fe...@atmel.com Signed-off-by: Uwe Kleine-König u.kleine-koe...@pengutronix.de Signed-off-by: Richard Genoud richard.gen...@gmail.com --- sound/soc/atmel/Kconfig | 12 ++ sound/soc/atmel/Makefile|2 + sound/soc/atmel/sam9x5_wm8731.c | 232 +++ 3 files changed, 246 insertions(+) create mode 100644 sound/soc/atmel/sam9x5_wm8731.c diff --git a/sound/soc/atmel/Kconfig b/sound/soc/atmel/Kconfig index 3fdd87f..f24d601 100644 --- a/sound/soc/atmel/Kconfig +++ b/sound/soc/atmel/Kconfig @@ -13,6 +13,7 @@ config SND_ATMEL_SOC_PDC config SND_ATMEL_SOC_DMA tristate depends on SND_ATMEL_SOC + select SND_SOC_DMAENGINE_PCM config SND_ATMEL_SOC_SSC tristate @@ -32,6 +33,17 @@ config SND_AT91_SOC_SAM9G20_WM8731 Say Y if you want to add support for SoC audio on WM8731-based AT91sam9g20 evaluation board. +config SND_AT91_SOC_SAM9X5_WM8731 + tristate SoC Audio support for WM8731-based at91sam9x5 board + depends on ATMEL_SSC SND_ATMEL_SOC SOC_AT91SAM9X5 + select SND_ATMEL_SOC_SSC + select SND_ATMEL_SOC_DMA + select SND_ATMEL_SOC_PDC Not need to select SND_ATMEL_SOC_PDC + select SND_SOC_WM8731 + help + Say Y if you want to add support for audio SoC on an + at91sam9x5 based board that is using WM8731 codec. + config SND_AT91_SOC_AFEB9260 tristate SoC Audio support for AFEB9260 board depends on ARCH_AT91 ATMEL_SSC ARCH_AT91 MACH_AFEB9260 SND_ATMEL_SOC diff --git a/sound/soc/atmel/Makefile b/sound/soc/atmel/Makefile index 41967cc..7784c09 100644 --- a/sound/soc/atmel/Makefile +++ b/sound/soc/atmel/Makefile @@ -11,6 +11,8 @@ obj-$(CONFIG_SND_ATMEL_SOC_SSC) += snd-soc-atmel_ssc_dai.o # AT91 Machine Support snd-soc-sam9g20-wm8731-objs := sam9g20_wm8731.o +snd-soc-sam9x5-wm8731-objs := sam9x5_wm8731.o obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o +obj-$(CONFIG_SND_AT91_SOC_SAM9X5_WM8731) += snd-soc-sam9x5-wm8731.o obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += snd-soc-afeb9260.o diff --git a/sound/soc/atmel/sam9x5_wm8731.c b/sound/soc/atmel/sam9x5_wm8731.c new file mode 100644 index 000..83ca457 --- /dev/null +++ b/sound/soc/atmel/sam9x5_wm8731.c @@ -0,0 +1,232 @@ +/* + * sam9x5_wm8731 -- SoC audio for AT91SAM9X5-based boards + * that are using WM8731 as codec. + * + * Copyright (C) 2011 Atmel, + * Nicolas Ferre nicolas.fe...@atmel.com + * + * Based on sam9g20_wm8731.c by: + * Sedji Gaouaou sedji.gaou...@atmel.com + * + * GPL + */ +#include linux/module.h +#include linux/moduleparam.h +#include linux/kernel.h +#include linux/clk.h +#include linux/timer.h +#include linux/interrupt.h +#include linux/platform_device.h +#include linux/i2c.h + +#include linux/atmel-ssc.h + +#include sound/core.h +#include sound/pcm.h +#include sound/pcm_params.h +#include sound/soc.h + +#include asm/mach-types.h +#include mach/hardware.h +#include mach/gpio.h + +#include ../codecs/wm8731.h +#include atmel-pcm.h +#include atmel_ssc_dai.h + +#define MCLK_RATE 12288000 + +#define DRV_NAME sam9x5-snd-wm8731 + +/* + * Audio paths on at91sam9x5ek board: + * + * |A| | | ---R Headphone Jack + * |T| \| WM | ---L--/ + * |9| --- CLK -- | 8751 | --R- Line In Jack + * |1| | | --L--/ + */ +static const struct snd_soc_dapm_widget at91sam9x5ek_dapm_widgets[] = { + SND_SOC_DAPM_HP(Headphone Jack, NULL), + SND_SOC_DAPM_LINE(Line In Jack, NULL), +}; + +/* + * Logic for a wm8731 as connected on a at91sam9x5 based board. + */ +static int at91sam9x5ek_wm8731_init(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_codec *codec = rtd-codec; + struct snd_soc_dai *codec_dai = rtd-codec_dai; + struct snd_soc_dapm_context *dapm = codec-dapm; + struct device *dev = rtd-dev; + int ret; + + dev_dbg(dev, ASoC: at91sam9x5ek_wm8731_init() called\n); + + /* +* remove some not supported rates in relation with clock +* provided to the wm8731 codec +*/ + switch (MCLK_RATE) { + case 12288000: + codec_dai-driver-playback.rates = SNDRV_PCM_RATE_8000 | +SNDRV_PCM_RATE_32000 | +SNDRV_PCM_RATE_48000 | +