From: Mark Brown Date: Mon, 6 Oct 2014 11:48:57 +0000 (+0100) Subject: Merge remote-tracking branches 'asoc/topic/davinci', 'asoc/topic/dmic', 'asoc/topic... X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=565fefdf31a58b5c07869fe598c3dcc69ed680d7;p=GitHub%2FLineageOS%2FG12%2Fandroid_kernel_amlogic_linux-4.9.git Merge remote-tracking branches 'asoc/topic/davinci', 'asoc/topic/dmic', 'asoc/topic/drivers', 'asoc/topic/es8328' and 'asoc/topic/fsl' into asoc-next --- 565fefdf31a58b5c07869fe598c3dcc69ed680d7 diff --cc include/sound/soc.h index f90f605b3971,be6ecae247b0,be6ecae247b0,be6ecae247b0,ac99fc083eec,be6ecae247b0..7ba7130037a0 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@@@@@@ -757,22 -731,6 -731,6 -731,6 -757,23 -731,6 +757,22 @@@@@@@ struct snd_soc_component /* Don't use these, use snd_soc_component_get_dapm() */ struct snd_soc_dapm_context dapm; struct snd_soc_dapm_context *dapm_ptr; +++ + +++ + const struct snd_kcontrol_new *controls; +++ + unsigned int num_controls; +++ + const struct snd_soc_dapm_widget *dapm_widgets; +++ + unsigned int num_dapm_widgets; +++ + const struct snd_soc_dapm_route *dapm_routes; +++ + unsigned int num_dapm_routes; - bool steal_sibling_dai_widgets; +++ + struct snd_soc_codec *codec; +++ + +++ + int (*probe)(struct snd_soc_component *); +++ + void (*remove)(struct snd_soc_component *); +++ + +++ +#ifdef CONFIG_DEBUG_FS +++ + void (*init_debugfs)(struct snd_soc_component *component); +++ + const char *debugfs_prefix; +++ +#endif }; /* SoC Audio Codec device */ diff --cc sound/soc/codecs/Kconfig index 184ee7e2a3da,8838838e25ed,e514e98e48c4,8838838e25ed,8bca6343d8a3,8bca6343d8a3..7678122f8fe0 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@@@@@@ -57,9 -56,7 -56,8 -56,7 -56,9 -56,9 +57,10 @@@@@@@ config SND_SOC_ALL_CODEC select SND_SOC_DA7213 if I2C select SND_SOC_DA732X if I2C select SND_SOC_DA9055 if I2C ++ +++ select SND_SOC_DMIC select SND_SOC_BT_SCO +++ select SND_SOC_ES8328_SPI if SPI_MASTER +++ select SND_SOC_ES8328_I2C if I2C select SND_SOC_ISABELLE if I2C select SND_SOC_JZ4740_CODEC select SND_SOC_LM4857 if I2C diff --cc sound/soc/davinci/davinci-mcasp.c index 68347b55f6e1,5dcacc495438,c28508da34cf,c28508da34cf,c28508da34cf,c28508da34cf..0eed9b1b24e1 --- a/sound/soc/davinci/davinci-mcasp.c +++ b/sound/soc/davinci/davinci-mcasp.c @@@@@@@ -874,14 -869,24 -857,14 -857,14 -857,14 -857,14 +886,24 @@@@@@@ static int davinci_mcasp_suspend(struc { struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai); struct davinci_mcasp_context *context = &mcasp->context; + ++++ u32 reg; + ++++ int i; + ---- context->txfmtctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG); ---- context->rxfmtctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG); ---- context->txfmt = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXFMT_REG); ---- context->rxfmt = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMT_REG); ---- context->aclkxctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG); ---- context->aclkrctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKRCTL_REG); ---- context->pdir = mcasp_get_reg(mcasp, DAVINCI_MCASP_PDIR_REG); + ++++ for (i = 0; i < ARRAY_SIZE(context_regs); i++) + ++++ context->config_regs[i] = mcasp_get_reg(mcasp, context_regs[i]); + ++++ + ++++ if (mcasp->txnumevt) { + ++++ reg = mcasp->fifo_base + MCASP_WFIFOCTL_OFFSET; + ++++ context->afifo_regs[0] = mcasp_get_reg(mcasp, reg); + ++++ } + ++++ if (mcasp->rxnumevt) { + ++++ reg = mcasp->fifo_base + MCASP_RFIFOCTL_OFFSET; + ++++ context->afifo_regs[1] = mcasp_get_reg(mcasp, reg); + ++++ } ++++ - context->txfmtctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXFMCTL_REG); - context->rxfmtctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMCTL_REG); - context->txfmt = mcasp_get_reg(mcasp, DAVINCI_MCASP_TXFMT_REG); - context->rxfmt = mcasp_get_reg(mcasp, DAVINCI_MCASP_RXFMT_REG); - context->aclkxctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKXCTL_REG); - context->aclkrctl = mcasp_get_reg(mcasp, DAVINCI_MCASP_ACLKRCTL_REG); - context->pdir = mcasp_get_reg(mcasp, DAVINCI_MCASP_PDIR_REG); + ++++ for (i = 0; i < mcasp->num_serializer; i++) + ++++ context->xrsr_regs[i] = mcasp_get_reg(mcasp, + ++++ DAVINCI_MCASP_XRSRCTL_REG(i)); return 0; } diff --cc sound/soc/fsl/Kconfig index 6164e78b466a,f54a8fc99291,f54a8fc99291,f54a8fc99291,f54a8fc99291,0f23d1ae5be7..081e406b3713 --- a/sound/soc/fsl/Kconfig +++ b/sound/soc/fsl/Kconfig @@@@@@@ -280,23 -269,6 -269,6 -269,6 -269,6 -281,20 +280,20 @@@@@@@ config SND_SOC_IMX_MC1378 select SND_SOC_MC13783 select SND_SOC_IMX_PCM_DMA ++++ config SND_SOC_FSL_ASOC_CARD ++++ tristate "Generic ASoC Sound Card with ASRC support" ++++ depends on OF && I2C ++++ select SND_SOC_IMX_AUDMUX ++++ select SND_SOC_IMX_PCM_DMA ++++ select SND_SOC_FSL_ESAI ++++ select SND_SOC_FSL_SAI ++++ select SND_SOC_FSL_SSI - select SND_SOC_CS42XX8_I2C - select SND_SOC_SGTL5000 - select SND_SOC_WM8962 ++++ help ++++ ALSA SoC Audio support with ASRC feature for Freescale SoCs that have ++++ ESAI/SAI/SSI and connect with external CODECs such as WM8962, CS42888 ++++ and SGTL5000. ++++ Say Y if you want to add support for Freescale Generic ASoC Sound Card. ++++ endif # SND_IMX_SOC endmenu diff --cc sound/soc/soc-core.c index 57de6a7d7ffa,d4bfd4a9076f,d4bfd4a9076f,d4bfd4a9076f,c612900c80ff,d4bfd4a9076f..3d8cff629a18 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@@@@@@ -1083,42 -1173,42 -1173,42 -1173,42 -1086,75 -1173,42 +1086,42 @@@@@@@ static void soc_set_name_prefix(struct } } --- -static int soc_probe_codec(struct snd_soc_card *card, --- - struct snd_soc_codec *codec) +++ +static int soc_probe_component(struct snd_soc_card *card, +++ + struct snd_soc_component *component) { --- - int ret = 0; --- - const struct snd_soc_codec_driver *driver = codec->driver; +++ + struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component); - struct snd_soc_component *dai_component, *component2; struct snd_soc_dai *dai; +++ + int ret; +++ + +++ + if (component->probed) +++ + return 0; --- - codec->component.card = card; --- - codec->dapm.card = card; --- - soc_set_name_prefix(card, &codec->component); +++ + component->card = card; +++ + dapm->card = card; +++ + soc_set_name_prefix(card, component); --- - if (!try_module_get(codec->dev->driver->owner)) +++ + if (!try_module_get(component->dev->driver->owner)) return -ENODEV; --- - soc_init_codec_debugfs(codec); +++ + soc_init_component_debugfs(component); --- - if (driver->dapm_widgets) { --- - ret = snd_soc_dapm_new_controls(&codec->dapm, --- - driver->dapm_widgets, --- - driver->num_dapm_widgets); +++ + if (component->dapm_widgets) { +++ + ret = snd_soc_dapm_new_controls(dapm, component->dapm_widgets, +++ + component->num_dapm_widgets); if (ret != 0) { --- - dev_err(codec->dev, +++ + dev_err(component->dev, "Failed to create new controls %d\n", ret); goto err_probe; } } --- - /* Create DAPM widgets for each DAI stream */ --- - list_for_each_entry(dai, &codec->component.dai_list, list) { --- - ret = snd_soc_dapm_new_dai_widgets(&codec->dapm, dai); - /* - * This is rather ugly, but certain platforms expect that the DAPM - * widgets for the DAIs for components with the same parent device are - * created in the platforms DAPM context. Until that is fixed we need to - * keep this. - */ - if (component->steal_sibling_dai_widgets) { - dai_component = NULL; - list_for_each_entry(component2, &component_list, list) { - if (component == component2) - continue; - - if (component2->dev == component->dev && - !list_empty(&component2->dai_list)) { - dai_component = component2; - break; - } - } - } else { - dai_component = component; - list_for_each_entry(component2, &component_list, list) { - if (component2->dev == component->dev && - component2->steal_sibling_dai_widgets) { - dai_component = NULL; - break; - } - } - } ----- - if (dai_component) { - list_for_each_entry(dai, &dai_component->dai_list, list) { - snd_soc_dapm_new_dai_widgets(dapm, dai); - if (ret != 0) { - dev_err(component->dev, - "Failed to create DAI widgets %d\n", - ret); - goto err_probe; - } +++++ list_for_each_entry(dai, &component->dai_list, list) { +++++ ret = snd_soc_dapm_new_dai_widgets(dapm, dai); + if (ret != 0) { --- - dev_err(codec->dev, +++++ dev_err(component->dev, + "Failed to create DAI widgets %d\n", ret); + goto err_probe; } } @@@@@@@ -4127,15 -4261,10 -4261,10 -4261,10 -4170,28 -4261,10 +4133,15 @@@@@@@ int snd_soc_add_platform(struct device platform->dev = dev; platform->driver = platform_drv; --- - if (platform_drv->write) --- - platform->component.write = snd_soc_platform_drv_write; --- - if (platform_drv->read) --- - platform->component.read = snd_soc_platform_drv_read; - if (platform_drv->controls) { - platform->component.controls = platform_drv->controls; - platform->component.num_controls = platform_drv->num_controls; - } - if (platform_drv->dapm_widgets) { - platform->component.dapm_widgets = platform_drv->dapm_widgets; - platform->component.num_dapm_widgets = platform_drv->num_dapm_widgets; - platform->component.steal_sibling_dai_widgets = true; - } - if (platform_drv->dapm_routes) { - platform->component.dapm_routes = platform_drv->dapm_routes; - platform->component.num_dapm_routes = platform_drv->num_dapm_routes; - } +++ + +++ + if (platform_drv->probe) +++ + platform->component.probe = snd_soc_platform_drv_probe; +++ + if (platform_drv->remove) +++ + platform->component.remove = snd_soc_platform_drv_remove; +++ + +++ +#ifdef CONFIG_DEBUG_FS +++ + platform->component.debugfs_prefix = "platform"; +++ +#endif mutex_lock(&client_mutex); snd_soc_component_add_unlocked(&platform->component); @@@@@@@ -4347,7 -4445,7 -4445,7 -4445,7 -4403,9 -4445,7 +4353,8 @@@@@@@ int snd_soc_register_codec(struct devic if (codec_drv->read) codec->component.read = snd_soc_codec_drv_read; codec->component.ignore_pmdown_time = codec_drv->ignore_pmdown_time; ----- codec->dapm.codec = codec; +++ + codec->dapm.idle_bias_off = codec_drv->idle_bias_off; ++++ + codec->dapm.suspend_bias_off = codec_drv->suspend_bias_off; if (codec_drv->seq_notifier) codec->dapm.seq_notifier = codec_drv->seq_notifier; if (codec_drv->set_bias_level)