From: Mark Brown Date: Tue, 7 Jan 2014 17:58:12 +0000 (+0000) Subject: Merge remote-tracking branches 'asoc/topic/ad1836', 'asoc/topic/ad193x', 'asoc/topic... X-Git-Tag: next-20140108~51^2 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=c9fffa7ebe4abd38dda25c5e301ac74781654462;p=karo-tx-linux.git Merge remote-tracking branches 'asoc/topic/ad1836', 'asoc/topic/ad193x', 'asoc/topic/adav80x', 'asoc/topic/adsp', 'asoc/topic/ak4641', 'asoc/topic/ak4642', 'asoc/topic/arizona', 'asoc/topic/atmel', 'asoc/topic/au1x', 'asoc/topic/axi', 'asoc/topic/bcm2835', 'asoc/topic/blackfin', 'asoc/topic/cs4271', 'asoc/topic/cs42l52', 'asoc/topic/da7210', 'asoc/topic/davinci', 'asoc/topic/docs', 'asoc/topic/ep93xx', 'asoc/topic/fsl', 'asoc/topic/fsl-mxs', 'asoc/topic/generic', 'asoc/topic/hdmi', 'asoc/topic/jack', 'asoc/topic/jz4740', 'asoc/topic/max98090', 'asoc/topic/mc13783', 'asoc/topic/mxs', 'asoc/topic/omap', 'asoc/topic/pxa', 'asoc/topic/rcar', 'asoc/topic/s6000', 'asoc/topic/sai', 'asoc/topic/samsung', 'asoc/topic/sgtl5000', 'asoc/topic/spear', 'asoc/topic/ssm2518', 'asoc/topic/ssm2602', 'asoc/topic/tegra', 'asoc/topic/tlv320aic3x', 'asoc/topic/twl6040', 'asoc/topic/txx9', 'asoc/topic/uda1380', 'asoc/topic/ux500', 'asoc/topic/width', 'asoc/topic/wm8510', 'asoc/topic/wm8523', 'asoc/topic/wm8580', 'asoc/topic/wm8711', 'asoc/topic/wm8728', 'asoc/topic/wm8731', 'asoc/topic/wm8741', 'asoc/topic/wm8750', 'asoc/topic/wm8753', 'asoc/topic/wm8776', 'asoc/topic/wm8804', 'asoc/topic/wm8900', 'asoc/topic/wm8901', 'asoc/topic/wm8940', 'asoc/topic/wm8962', 'asoc/topic/wm8974', 'asoc/topic/wm8985', 'asoc/topic/wm8988', 'asoc/topic/wm8990', 'asoc/topic/wm8991', 'asoc/topic/wm8994', 'asoc/topic/wm8995', 'asoc/topic/wm9081' and 'asoc/topic/x86' into asoc-next --- c9fffa7ebe4abd38dda25c5e301ac74781654462 diff --cc include/sound/soc.h index 0a600b8d6c3a,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1cda7d343d16,1f741cb24f33,1f741cb24f33,1f741cb24f33,f7e1fac51bba,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1cda7d343d16,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33,1f741cb24f33..03ce45bf8ade --- a/include/sound/soc.h +++ b/include/sound/soc.h @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -444,17 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 -446,6 +444,17 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ int snd_soc_jack_add_gpios(struct snd_s ++ struct snd_soc_jack_gpio *gpios); ++ void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count, ++ struct snd_soc_jack_gpio *gpios); +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ #else +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ static inline int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count, +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ struct snd_soc_jack_gpio *gpios) +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ { +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ return 0; +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ } +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ static inline void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count, +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ struct snd_soc_jack_gpio *gpios) +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ { +++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++ } + #endif + + /* codec register bit access */ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -879,8 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,8 -879,6 -879,6 -879,6 -886,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,8 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 -879,6 +886,8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ struct snd_soc_dai_link ++ ++ /* Symmetry requirements */ ++ unsigned int symmetric_rates:1; +++++++++++++++++++ +++++++++++++++++ ++++++++++++++++++++++++++ unsigned int symmetric_channels:1; +++++++++++++++++++ +++++++++++++++++ ++++++++++++++++++++++++++ unsigned int symmetric_samplebits:1; + + /* Do not create a PCM for this DAI link (Backend link) */ + unsigned int no_pcm:1; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -888,10 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -888,6 -886,6 -886,6 -886,6 -893,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -888,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 -886,6 +895,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ /* This DAI link can route to other DAI links at runtime (Frontend)*/ ++ unsigned int dynamic:1; ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /* DPCM capture and Playback support */ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ unsigned int dpcm_capture:1; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ unsigned int dpcm_playback:1; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + /* pmdown_time is ignored at stop */ + unsigned int ignore_pmdown_time:1; + diff --cc sound/soc/Kconfig index 5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,866dfec4b6b5,a5e3a70c0d3d,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,5138b8493051,463a9e25e04f..d62ce483a443 --- a/sound/soc/Kconfig +++ b/sound/soc/Kconfig @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,9 -31,9 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 -31,8 +31,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ config SND_SOC_GENERIC_DMAENGINE_PC ++ select SND_DMAENGINE_PCM ++ ++ # All the supported SoCs ++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++ source "sound/soc/adi/Kconfig" + source "sound/soc/atmel/Kconfig" + source "sound/soc/au1x/Kconfig" +++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++ source "sound/soc/bcm/Kconfig" + source "sound/soc/blackfin/Kconfig" + source "sound/soc/cirrus/Kconfig" + source "sound/soc/davinci/Kconfig" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -43,7 -43,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 -42,7 +44,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ source "sound/soc/jz4740/Kconfig ++ source "sound/soc/nuc900/Kconfig" ++ source "sound/soc/omap/Kconfig" ++ source "sound/soc/kirkwood/Kconfig" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ source "sound/soc/intel/Kconfig" + source "sound/soc/mxs/Kconfig" + source "sound/soc/pxa/Kconfig" + source "sound/soc/samsung/Kconfig" diff --cc sound/soc/Makefile index 8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,c70c7f76d2df,b52d4aad0716,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,8b9e70105dd2,ff291d3e60af..62a1822e77bf --- a/sound/soc/Makefile +++ b/sound/soc/Makefile @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,16 -8,16 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 -8,15 +8,17 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ endi ++ obj-$(CONFIG_SND_SOC) += snd-soc-core.o ++ obj-$(CONFIG_SND_SOC) += codecs/ ++ obj-$(CONFIG_SND_SOC) += generic/ ++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++ obj-$(CONFIG_SND_SOC) += adi/ + obj-$(CONFIG_SND_SOC) += atmel/ + obj-$(CONFIG_SND_SOC) += au1x/ +++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++ obj-$(CONFIG_SND_SOC) += bcm/ + obj-$(CONFIG_SND_SOC) += blackfin/ + obj-$(CONFIG_SND_SOC) += cirrus/ + obj-$(CONFIG_SND_SOC) += davinci/ ++ obj-$(CONFIG_SND_SOC) += dwc/ ++ obj-$(CONFIG_SND_SOC) += fsl/ ++ obj-$(CONFIG_SND_SOC) += jz4740/ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ obj-$(CONFIG_SND_SOC) += intel/ + obj-$(CONFIG_SND_SOC) += mxs/ + obj-$(CONFIG_SND_SOC) += nuc900/ + obj-$(CONFIG_SND_SOC) += omap/ diff --cc sound/soc/atmel/sam9x5_wm8731.c index 7d6a9055874b,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,6f4e812d6e61,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15,992ae38d5a15..3188036a18f0 --- a/sound/soc/atmel/sam9x5_wm8731.c +++ b/sound/soc/atmel/sam9x5_wm8731.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -97,8 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 -97,6 +97,8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int sam9x5_wm8731_driver_probe(s ++ goto out; ++ } ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ snd_soc_card_set_drvdata(card, priv); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + card->dev = &pdev->dev; + card->owner = THIS_MODULE; + card->dai_link = dai; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -109,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 -107,7 +109,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ dai->stream_name = "WM8731 PCM"; ++ dai->codec_dai_name = "wm8731-hifi"; ++ dai->init = sam9x5_wm8731_init; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dai->dai_fmt = SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_NB_NF + | SND_SOC_DAIFMT_CBM_CFM; + + ret = snd_soc_of_parse_card_name(card, "atmel,model"); diff --cc sound/soc/codecs/wm5110.c index 0ab2dc296474,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,f3d96eae031a,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,bbd64384ca1c,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181,c3c7396a6181..22bd7dd80bba --- a/sound/soc/codecs/wm5110.c +++ b/sound/soc/codecs/wm5110.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,51 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,10 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 -30,13 +30,51 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ #include ++ ++ #include "arizona.h" +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #include "wm_adsp.h" + #include "wm5110.h" + +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #define WM5110_NUM_ADSP 4 +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + struct wm5110_priv { + struct arizona_priv core; + struct arizona_fll fll[2]; ++ }; ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ static const struct wm_adsp_region wm5110_dsp1_regions[] = { +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_PM, .base = 0x100000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_ZM, .base = 0x180000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_XM, .base = 0x190000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_YM, .base = 0x1a8000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ static const struct wm_adsp_region wm5110_dsp2_regions[] = { +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_PM, .base = 0x200000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_ZM, .base = 0x280000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_XM, .base = 0x290000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_YM, .base = 0x2a8000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ static const struct wm_adsp_region wm5110_dsp3_regions[] = { +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_PM, .base = 0x300000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_ZM, .base = 0x380000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_XM, .base = 0x390000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_YM, .base = 0x3a8000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ static const struct wm_adsp_region wm5110_dsp4_regions[] = { +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_PM, .base = 0x400000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_ZM, .base = 0x480000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_XM, .base = 0x490000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { .type = WMFW_ADSP2_YM, .base = 0x4a8000 }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ static const struct wm_adsp_region *wm5110_dsp_regions[] = { +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110_dsp1_regions, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110_dsp2_regions, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110_dsp3_regions, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110_dsp4_regions, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ }; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + static const struct reg_default wm5110_sysclk_revd_patch[] = { + + { 0x3093, 0x1001 }, + + { 0x30E3, 0x1301 }, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -105,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -40,0 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 -67,8 +105,8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int wm5110_sysclk_ev(struct snd_ ++ + case SND_SOC_DAPM_POST_PMU: ++ + if (patch) ++ + for (i = 0; i < patch_size; i++) +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ regmap_write_async(regmap, patch[i].reg, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ patch[i].def); + + break; + + + + default: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -155,25 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -76,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 -117,6 +155,25 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SOC_SINGLE_RANGE_TLV("IN3L Volume", ARI ++ SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL, ++ ARIZONA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_ENUM("IN HPF Cutoff Frequency", arizona_in_hpf_cut_enum), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_SINGLE("IN1L HPF Switch", ARIZONA_IN1L_CONTROL, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_IN1L_HPF_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_SINGLE("IN1R HPF Switch", ARIZONA_IN1R_CONTROL, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_IN1R_HPF_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_SINGLE("IN2L HPF Switch", ARIZONA_IN2L_CONTROL, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_IN2L_HPF_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_SINGLE("IN2R HPF Switch", ARIZONA_IN2R_CONTROL, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_IN2R_HPF_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_SINGLE("IN3L HPF Switch", ARIZONA_IN3L_CONTROL, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_IN3L_HPF_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_SINGLE("IN3R HPF Switch", ARIZONA_IN3R_CONTROL, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_IN3R_HPF_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_SINGLE("IN4L HPF Switch", ARIZONA_IN4L_CONTROL, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_IN4L_HPF_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_SINGLE("IN4R HPF Switch", ARIZONA_IN4R_CONTROL, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_IN4R_HPF_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L, + ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv), + SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -277,14 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -179,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 -220,6 +277,14 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mo ++ SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), ++ SOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode), ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_VALUE_ENUM("ISRC1 FSL", arizona_isrc_fsl[0]), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_VALUE_ENUM("ISRC2 FSL", arizona_isrc_fsl[1]), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_VALUE_ENUM("ISRC3 FSL", arizona_isrc_fsl[2]), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_VALUE_ENUM("ISRC1 FSH", arizona_isrc_fsh[0]), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_VALUE_ENUM("ISRC2 FSH", arizona_isrc_fsh[1]), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_VALUE_ENUM("ISRC3 FSH", arizona_isrc_fsh[2]), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_VALUE_ENUM("ASRC RATE 1", arizona_asrc_rate1), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE), + ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE), + ARIZONA_MIXER_CONTROLS("DSP2L", ARIZONA_DSP2LMIX_INPUT_1_SOURCE), @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -285,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -375,13 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -269,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 -310,6 +350,13 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SOC_DOUBLE("SPKDAT1 Switch", ARIZONA_PD ++ SOC_DOUBLE("SPKDAT2 Switch", ARIZONA_PDM_SPK2_CTRL_1, ARIZONA_SPK2L_MUTE_SHIFT, ++ ARIZONA_SPK2R_MUTE_SHIFT, 1, 1), ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_DOUBLE("HPOUT1 DRE Switch", ARIZONA_DRE_ENABLE, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DRE1L_ENA_SHIFT, ARIZONA_DRE1R_ENA_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_DOUBLE("HPOUT2 DRE Switch", ARIZONA_DRE_ENABLE, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DRE2L_ENA_SHIFT, ARIZONA_DRE2R_ENA_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOC_DOUBLE("HPOUT3 DRE Switch", ARIZONA_DRE_ENABLE, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DRE3L_ENA_SHIFT, ARIZONA_DRE3R_ENA_SHIFT, 1, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + SOC_ENUM("Output Ramp Up", arizona_out_vi_ramp), + SOC_ENUM("Output Ramp Down", arizona_out_vd_ramp), + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -318,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -415,10 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -302,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 -343,6 +390,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ARIZONA_MIXER_CONTROLS("AIF1TX8", ARIZO ++ ++ ARIZONA_MIXER_CONTROLS("AIF2TX1", ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE), ++ ARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_CONTROLS("AIF2TX3", ARIZONA_AIF2TX3MIX_INPUT_1_SOURCE), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_CONTROLS("AIF2TX4", ARIZONA_AIF2TX4MIX_INPUT_1_SOURCE), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_CONTROLS("AIF2TX5", ARIZONA_AIF2TX5MIX_INPUT_1_SOURCE), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_CONTROLS("AIF2TX6", ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE), + + ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE), + ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -347,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -448,22 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -331,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 -372,6 +423,22 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ARIZONA_MIXER_ENUMS(LHPF2, ARIZONA_HPLP ++ ARIZONA_MIXER_ENUMS(LHPF3, ARIZONA_HPLP3MIX_INPUT_1_SOURCE); ++ ARIZONA_MIXER_ENUMS(LHPF4, ARIZONA_HPLP4MIX_INPUT_1_SOURCE); ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(DSP1L, ARIZONA_DSP1LMIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(DSP1R, ARIZONA_DSP1RMIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_AUX_ENUMS(DSP1, ARIZONA_DSP1AUX1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(DSP2L, ARIZONA_DSP2LMIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(DSP2R, ARIZONA_DSP2RMIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_AUX_ENUMS(DSP2, ARIZONA_DSP2AUX1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(DSP3L, ARIZONA_DSP3LMIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(DSP3R, ARIZONA_DSP3RMIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_AUX_ENUMS(DSP3, ARIZONA_DSP3AUX1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(DSP4L, ARIZONA_DSP4LMIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(DSP4R, ARIZONA_DSP4RMIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_AUX_ENUMS(DSP4, ARIZONA_DSP4AUX1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + ARIZONA_MIXER_ENUMS(Mic, ARIZONA_MICMIX_INPUT_1_SOURCE); + ARIZONA_MIXER_ENUMS(Noise, ARIZONA_NOISEMIX_INPUT_1_SOURCE); + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -377,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -494,10 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -361,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 -402,6 +469,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ARIZONA_MIXER_ENUMS(AIF1TX8, ARIZONA_AI ++ ++ ARIZONA_MIXER_ENUMS(AIF2TX1, ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE); ++ ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(AIF2TX3, ARIZONA_AIF2TX3MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(AIF2TX4, ARIZONA_AIF2TX4MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(AIF2TX5, ARIZONA_AIF2TX5MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ENUMS(AIF2TX6, ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE); + + ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE); + ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE); @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -395,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -516,36 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -379,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 -420,6 +491,36 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1 ++ ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); ++ ARIZONA_MUX_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC1INT1, ARIZONA_ISRC1INT1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC1INT2, ARIZONA_ISRC1INT2MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC1INT3, ARIZONA_ISRC1INT3MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC1INT4, ARIZONA_ISRC1INT4MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC1DEC1, ARIZONA_ISRC1DEC1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC1DEC2, ARIZONA_ISRC1DEC2MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC1DEC3, ARIZONA_ISRC1DEC3MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC1DEC4, ARIZONA_ISRC1DEC4MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC2INT1, ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC2INT2, ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC2INT3, ARIZONA_ISRC2INT3MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC2INT4, ARIZONA_ISRC2INT4MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC2DEC1, ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC2DEC2, ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC2DEC3, ARIZONA_ISRC2DEC3MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC2DEC4, ARIZONA_ISRC2DEC4MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC3INT1, ARIZONA_ISRC3INT1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC3INT2, ARIZONA_ISRC3INT2MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC3INT3, ARIZONA_ISRC3INT3MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC3INT4, ARIZONA_ISRC3INT4MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC3DEC1, ARIZONA_ISRC3DEC1MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC3DEC2, ARIZONA_ISRC3DEC2MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC3DEC3, ARIZONA_ISRC3DEC3MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ENUMS(ISRC3DEC4, ARIZONA_ISRC3DEC4MIX_INPUT_1_SOURCE); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + static const char *wm5110_aec_loopback_texts[] = { + "HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "HPOUT3L", "HPOUT3R", + "SPKOUTL", "SPKOUTR", "SPKDAT1L", "SPKDAT1R", "SPKDAT2L", "SPKDAT2R", @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -535,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -686,65 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -519,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 -560,6 +661,65 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SND_SOC_DAPM_PGA("ASRC2L", ARIZONA_ASRC ++ SND_SOC_DAPM_PGA("ASRC2R", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2R_ENA_SHIFT, 0, ++ NULL, 0), ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WM_ADSP2("DSP1", 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WM_ADSP2("DSP2", 1), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WM_ADSP2("DSP3", 2), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WM_ADSP2("DSP4", 3), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC1INT1", ARIZONA_ISRC_1_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC1_INT0_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC1INT2", ARIZONA_ISRC_1_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC1_INT1_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC1INT3", ARIZONA_ISRC_1_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC1_INT2_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC1INT4", ARIZONA_ISRC_1_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC1_INT3_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC1DEC1", ARIZONA_ISRC_1_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC1_DEC0_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC1DEC2", ARIZONA_ISRC_1_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC1_DEC1_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC1DEC3", ARIZONA_ISRC_1_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC1_DEC2_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC1DEC4", ARIZONA_ISRC_1_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC1_DEC3_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC2INT1", ARIZONA_ISRC_2_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC2_INT0_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC2INT2", ARIZONA_ISRC_2_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC2_INT1_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC2INT3", ARIZONA_ISRC_2_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC2_INT2_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC2INT4", ARIZONA_ISRC_2_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC2_INT3_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC2DEC1", ARIZONA_ISRC_2_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC2_DEC0_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC2DEC2", ARIZONA_ISRC_2_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC2_DEC1_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC2DEC3", ARIZONA_ISRC_2_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC2_DEC2_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC2DEC4", ARIZONA_ISRC_2_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC2_DEC3_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC3INT1", ARIZONA_ISRC_3_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC3_INT0_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC3INT2", ARIZONA_ISRC_3_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC3_INT1_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC3INT3", ARIZONA_ISRC_3_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC3_INT2_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC3INT4", ARIZONA_ISRC_3_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC3_INT3_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC3DEC1", ARIZONA_ISRC_3_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC3_DEC0_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC3DEC2", ARIZONA_ISRC_3_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC3_DEC1_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC3DEC3", ARIZONA_ISRC_3_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC3_DEC2_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_PGA("ISRC3DEC4", ARIZONA_ISRC_3_CTRL_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_ISRC3_DEC3_ENA_SHIFT, 0, NULL, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, + ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0, + &wm5110_aec_loopback_mux), @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -577,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -787,27 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -561,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 -602,11 +762,27 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SND_SOC_DAPM_AIF_OUT("AIF2TX1", NULL, 0 ++ ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX1_ENA_SHIFT, 0), ++ SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 0, ++ ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX2_ENA_SHIFT, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 0, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX3_ENA_SHIFT, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 0, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX4_ENA_SHIFT, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 0, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX5_ENA_SHIFT, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 0, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX6_ENA_SHIFT, 0), + + SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0, + ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX1_ENA_SHIFT, 0), ++ SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 0, ++ ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX2_ENA_SHIFT, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 0, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX3_ENA_SHIFT, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 0, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX4_ENA_SHIFT, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 0, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX5_ENA_SHIFT, 0), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 0, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX6_ENA_SHIFT, 0), + + SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0, + ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -719,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -945,10 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -703,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 -744,6 +920,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ARIZONA_MIXER_WIDGETS(AIF1TX8, "AIF1TX8 ++ ++ ARIZONA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"), ++ ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_WIDGETS(AIF2TX3, "AIF2TX3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_WIDGETS(AIF2TX4, "AIF2TX4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_WIDGETS(AIF2TX5, "AIF2TX5"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_WIDGETS(AIF2TX6, "AIF2TX6"), + + ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"), + ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -737,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -967,41 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -721,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 -762,6 +942,41 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R") ++ ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), ++ ARIZONA_MUX_WIDGETS(ASRC2R, "ASRC2R"), ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_WIDGETS(DSP1, "DSP1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_WIDGETS(DSP2, "DSP2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_WIDGETS(DSP3, "DSP3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_WIDGETS(DSP4, "DSP4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC1DEC1, "ISRC1DEC1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC1DEC2, "ISRC1DEC2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC1DEC3, "ISRC1DEC3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC1DEC4, "ISRC1DEC4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC1INT1, "ISRC1INT1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC1INT2, "ISRC1INT2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC1INT3, "ISRC1INT3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC1INT4, "ISRC1INT4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC2DEC1, "ISRC2DEC1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC2DEC2, "ISRC2DEC2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC2DEC3, "ISRC2DEC3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC2DEC4, "ISRC2DEC4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC2INT1, "ISRC2INT1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC2INT2, "ISRC2INT2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC2INT3, "ISRC2INT3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC2INT4, "ISRC2INT4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC3DEC1, "ISRC3DEC1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC3DEC2, "ISRC3DEC2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC3DEC3, "ISRC3DEC3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC3DEC4, "ISRC3DEC4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC3INT1, "ISRC3INT1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC3INT2, "ISRC3INT2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC3INT3, "ISRC3INT3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_WIDGETS(ISRC3INT4, "ISRC3INT4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + SND_SOC_DAPM_OUTPUT("HPOUT1L"), + SND_SOC_DAPM_OUTPUT("HPOUT1R"), + SND_SOC_DAPM_OUTPUT("HPOUT2L"), @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -780,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -1045,10 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -764,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 -805,6 +1020,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SND_SOC_DAPM_OUTPUT("MICSUPP") ++ { name, "AIF1RX8", "AIF1RX8" }, \ ++ { name, "AIF2RX1", "AIF2RX1" }, \ ++ { name, "AIF2RX2", "AIF2RX2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "AIF2RX3", "AIF2RX3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "AIF2RX4", "AIF2RX4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "AIF2RX5", "AIF2RX5" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "AIF2RX6", "AIF2RX6" }, \ + { name, "AIF3RX1", "AIF3RX1" }, \ + { name, "AIF3RX2", "AIF3RX2" }, \ + { name, "SLIMRX1", "SLIMRX1" }, \ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -805,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -1074,55 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -789,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 -830,7 +1049,55 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ { name, "ASRC1L", "ASRC1L" }, \ ++ { name, "ASRC1R", "ASRC1R" }, \ ++ { name, "ASRC2L", "ASRC2L" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ASRC2R", "ASRC2R" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC1DEC1", "ISRC1DEC1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC1DEC2", "ISRC1DEC2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC1DEC3", "ISRC1DEC3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC1DEC4", "ISRC1DEC4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC1INT1", "ISRC1INT1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC1INT2", "ISRC1INT2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC1INT3", "ISRC1INT3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC1INT4", "ISRC1INT4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC2DEC1", "ISRC2DEC1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC2DEC2", "ISRC2DEC2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC2DEC3", "ISRC2DEC3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC2DEC4", "ISRC2DEC4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC2INT1", "ISRC2INT1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC2INT2", "ISRC2INT2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC2INT3", "ISRC2INT3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC2INT4", "ISRC2INT4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC3DEC1", "ISRC3DEC1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC3DEC2", "ISRC3DEC2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC3DEC3", "ISRC3DEC3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC3DEC4", "ISRC3DEC4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC3INT1", "ISRC3INT1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC3INT2", "ISRC3INT2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC3INT3", "ISRC3INT3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "ISRC3INT4", "ISRC3INT4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP1.1", "DSP1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP1.2", "DSP1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP1.3", "DSP1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP1.4", "DSP1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP1.5", "DSP1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP1.6", "DSP1" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP2.1", "DSP2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP2.2", "DSP2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP2.3", "DSP2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP2.4", "DSP2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP2.5", "DSP2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP2.6", "DSP2" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP3.1", "DSP3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP3.2", "DSP3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP3.3", "DSP3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP3.4", "DSP3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP3.5", "DSP3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP3.6", "DSP3" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP4.1", "DSP4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP4.2", "DSP4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP4.3", "DSP4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP4.4", "DSP4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP4.5", "DSP4" }, \ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { name, "DSP4.6", "DSP4" } + + static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { + { "AIF2 Capture", NULL, "DBVDD2" }, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -877,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -1194,17 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -861,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 -902,9 +1169,17 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ ++ { "AIF2 Capture", NULL, "AIF2TX1" }, ++ { "AIF2 Capture", NULL, "AIF2TX2" }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { "AIF2 Capture", NULL, "AIF2TX3" }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { "AIF2 Capture", NULL, "AIF2TX4" }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { "AIF2 Capture", NULL, "AIF2TX5" }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { "AIF2 Capture", NULL, "AIF2TX6" }, + + { "AIF2RX1", NULL, "AIF2 Playback" }, + { "AIF2RX2", NULL, "AIF2 Playback" }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { "AIF2RX3", NULL, "AIF2 Playback" }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { "AIF2RX4", NULL, "AIF2 Playback" }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { "AIF2RX5", NULL, "AIF2 Playback" }, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { "AIF2RX6", NULL, "AIF2 Playback" }, + + { "AIF3 Capture", NULL, "AIF3TX1" }, + { "AIF3 Capture", NULL, "AIF3TX2" }, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -963,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -1288,10 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -947,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 -988,6 +1263,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ ++ ARIZONA_MIXER_ROUTES("AIF2TX1", "AIF2TX1"), ++ ARIZONA_MIXER_ROUTES("AIF2TX2", "AIF2TX2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ROUTES("AIF2TX3", "AIF2TX3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ROUTES("AIF2TX4", "AIF2TX4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ROUTES("AIF2TX5", "AIF2TX5"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MIXER_ROUTES("AIF2TX6", "AIF2TX6"), + + ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"), + ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"), @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -999,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1328,41 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -983,4 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 -1024,6 +1303,41 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ ARIZONA_MUX_ROUTES("ASRC2L", "ASRC2L"), ++ ARIZONA_MUX_ROUTES("ASRC2R", "ASRC2R"), ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_ROUTES("DSP1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_ROUTES("DSP2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_ROUTES("DSP3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_DSP_ROUTES("DSP4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC1INT1", "ISRC1INT1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC1INT2", "ISRC1INT2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC1INT3", "ISRC1INT3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC1INT4", "ISRC1INT4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC1DEC1", "ISRC1DEC1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC1DEC2", "ISRC1DEC2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC1DEC3", "ISRC1DEC3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC1DEC4", "ISRC1DEC4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC2INT1", "ISRC2INT1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC2INT2", "ISRC2INT2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC2INT3", "ISRC2INT3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC2INT4", "ISRC2INT4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC2DEC1", "ISRC2DEC1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC2DEC2", "ISRC2DEC2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC2DEC3", "ISRC2DEC3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC2DEC4", "ISRC2DEC4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC3INT1", "ISRC3INT1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC3INT2", "ISRC3INT2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC3INT3", "ISRC3INT3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC3INT4", "ISRC3INT4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC3DEC1", "ISRC3DEC1"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC3DEC2", "ISRC3DEC2"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC3DEC3", "ISRC3DEC3"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_MUX_ROUTES("ISRC3DEC4", "ISRC3DEC4"), +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + { "AEC Loopback", "HPOUT1L", "OUT1L" }, + + { "AEC Loopback", "HPOUT1R", "OUT1R" }, + { "HPOUT1L", NULL, "OUT1L" }, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1012,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1376,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -992,4 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 -1037,7 +1351,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ + { "AEC Loopback", "HPOUT3L", "OUT3L" }, ++ + { "AEC Loopback", "HPOUT3R", "OUT3R" }, ++ { "HPOUT3L", NULL, "OUT3L" }, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ { "HPOUT3R", NULL, "OUT3R" }, + + + { "AEC Loopback", "SPKOUTL", "OUT4L" }, + { "SPKOUTLN", NULL, "OUT4L" }, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1095,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1459,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1067,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 -1120,14 +1434,14 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static struct snd_soc_dai_driver wm5110 ++ .playback = { ++ .stream_name = "AIF2 Playback", ++ .channels_min = 1, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .channels_max = 6, + .rates = WM5110_RATES, + .formats = WM5110_FORMATS, + }, ++ .capture = { ++ .stream_name = "AIF2 Capture", ++ .channels_min = 1, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .channels_max = 6, + .rates = WM5110_RATES, + .formats = WM5110_FORMATS, + }, @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1204,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1568,10 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1176,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 -1229,6 +1543,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int wm5110_codec_probe(struct sn ++ arizona_init_spk(codec); ++ arizona_init_gpio(codec); ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ret = snd_soc_add_codec_controls(codec, wm_adsp2_fw_controls, 8); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (ret != 0) +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ return ret; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS"); + + priv->core.arizona->dapm = &codec->dapm; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1258,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1626,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1230,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 -1283,7 +1601,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int wm5110_probe(struct platform ++ { ++ struct arizona *arizona = dev_get_drvdata(pdev->dev.parent); ++ struct wm5110_priv *wm5110; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ int i, ret; + + wm5110 = devm_kzalloc(&pdev->dev, sizeof(struct wm5110_priv), + GFP_KERNEL); @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1269,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1637,24 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1241,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 -1294,6 +1612,24 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ wm5110->core.arizona = arizona; ++ wm5110->core.num_inputs = 8; ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ for (i = 0; i < WM5110_NUM_ADSP; i++) { +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110->core.adsp[i].part = "wm5110"; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110->core.adsp[i].num = i + 1; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110->core.adsp[i].type = WMFW_ADSP2; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110->core.adsp[i].dev = arizona->dev; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110->core.adsp[i].regmap = arizona->regmap; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110->core.adsp[i].base = ARIZONA_DSP1_CONTROL_1 +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + (0x100 * i); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110->core.adsp[i].mem = wm5110_dsp_regions[i]; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wm5110->core.adsp[i].num_mems +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ = ARRAY_SIZE(wm5110_dsp1_regions); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ret = wm_adsp2_init(&wm5110->core.adsp[i], false); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (ret != 0) +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ return ret; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ } +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + for (i = 0; i < ARRAY_SIZE(wm5110->fll); i++) + wm5110->fll[i].vco_mult = 3; + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1279,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1665,12 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1251,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 -1304,6 +1640,12 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK, ++ &wm5110->fll[1]); ++ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /* SR2 fixed at 8kHz, SR3 fixed at 16kHz */ +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ regmap_update_bits(arizona->regmap, ARIZONA_SAMPLE_RATE_2, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_SAMPLE_RATE_2_MASK, 0x11); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ regmap_update_bits(arizona->regmap, ARIZONA_SAMPLE_RATE_3, +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ARIZONA_SAMPLE_RATE_3_MASK, 0x12); +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + for (i = 0; i < ARRAY_SIZE(wm5110_dai); i++) + arizona_init_dai(&wm5110->core, i); + diff --cc sound/soc/codecs/wm8731.c index bc7472c968e3,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,6117107ea560,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759,456bb8c6d759..029720366ff8 --- a/sound/soc/codecs/wm8731.c +++ b/sound/soc/codecs/wm8731.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,8 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 -447,10 +447,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int wm8731_set_dai_fmt(struct sn ++ iface |= 0x0001; ++ break; ++ case SND_SOC_DAIFMT_DSP_A: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ iface |= 0x0013; + break; + case SND_SOC_DAIFMT_DSP_B: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ iface |= 0x0003; + break; + default: + return -EINVAL; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -730,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 -732,7 +732,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static struct spi_driver wm8731_spi_dri ++ }; ++ #endif /* CONFIG_SPI_MASTER */ ++ ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++ #if IS_ENABLED(CONFIG_I2C) + static int wm8731_i2c_probe(struct i2c_client *i2c, + const struct i2c_device_id *id) + { @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -789,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 -791,7 +791,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static struct i2c_driver wm8731_i2c_dri ++ static int __init wm8731_modinit(void) ++ { ++ int ret = 0; ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++ #if IS_ENABLED(CONFIG_I2C) + ret = i2c_add_driver(&wm8731_i2c_driver); + if (ret != 0) { + printk(KERN_ERR "Failed to register WM8731 I2C driver: %d\n", @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -809,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 -811,7 +811,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ module_init(wm8731_modinit) ++ ++ static void __exit wm8731_exit(void) ++ { ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++ #if IS_ENABLED(CONFIG_I2C) + i2c_del_driver(&wm8731_i2c_driver); + #endif + #if defined(CONFIG_SPI_MASTER) diff --cc sound/soc/codecs/wm8962.c index 0f17ed3e29f4,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,2bf9ee7c5407,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,07da601f8343,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6,543c5c2631b6..97db3b45b411 --- a/sound/soc/codecs/wm8962.c +++ b/sound/soc/codecs/wm8962.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 -74,7 +74,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ struct wm8962_priv ++ struct regulator_bulk_data supplies[WM8962_NUM_SUPPLIES]; ++ struct notifier_block disable_nb[WM8962_NUM_SUPPLIES]; ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++ #if IS_ENABLED(CONFIG_INPUT) + struct input_dev *beep; + struct work_struct beep_work; + int beep_rate; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -2439,20 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2431,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 -2439,7 +2439,20 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static void wm8962_configure_bclk(struc ++ snd_soc_update_bits(codec, WM8962_CLOCKING_4, ++ WM8962_SYSCLK_RATE_MASK, clocking4); ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /* DSPCLK_DIV can be only generated correctly after enabling SYSCLK. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * So we here provisionally enable it and then disable it afterward ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * if current bias_level hasn't reached SND_SOC_BIAS_ON. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (codec->dapm.bias_level != SND_SOC_BIAS_ON) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ snd_soc_update_bits(codec, WM8962_CLOCKING2, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WM8962_SYSCLK_ENA_MASK, WM8962_SYSCLK_ENA); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + dspclk = snd_soc_read(codec, WM8962_CLOCKING1); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (codec->dapm.bias_level != SND_SOC_BIAS_ON) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ snd_soc_update_bits(codec, WM8962_CLOCKING2, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WM8962_SYSCLK_ENA_MASK, 0); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if (dspclk < 0) { + dev_err(codec->dev, "Failed to read DSPCLK: %d\n", dspclk); + return; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -3121,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3100,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 -3108,7 +3121,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ int wm8962_mic_detect(struct snd_soc_co ++ } ++ EXPORT_SYMBOL_GPL(wm8962_mic_detect); ++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++ #if IS_ENABLED(CONFIG_INPUT) + static int beep_rates[] = { + 500, 1000, 2000, 4000, + }; diff --cc sound/soc/codecs/wm_adsp.c index 4fbcab63e61f,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,8f720ded27c4,46ec0e9744d4,46ec0e9744d4,b42f9af163c8,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,b38f3506418f,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4,46ec0e9744d4..fb0c678939bf --- a/sound/soc/codecs/wm_adsp.c +++ b/sound/soc/codecs/wm_adsp.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,7 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1282,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 -1286,6 +1286,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int wm_adsp_load_coeff(struct wm ++ reg = wm_adsp_region_to_reg(mem, ++ reg); ++ reg += offset; +++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ break; + } + } + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1468,23 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1469,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1455,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 -1468,19 +1469,23 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int wm_adsp2_ena(struct wm_adsp ++ unsigned int val; ++ int ret, count; ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ret = regmap_update_bits_async(dsp->regmap, dsp->base + ADSP2_CONTROL, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ADSP2_SYS_ENA, ADSP2_SYS_ENA); + if (ret != 0) + return ret; + ++ /* Wait for the RAM to start, should be near instantaneous */ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ for (count = 0; count < 10; ++count) { + ret = regmap_read(dsp->regmap, dsp->base + ADSP2_STATUS1, + &val); + if (ret != 0) ++ return ret; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (val & ADSP2_RAM_RDY) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ break; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ msleep(1); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ } + + if (!(val & ADSP2_RAM_RDY)) { + adsp_err(dsp, "Failed to start DSP RAM\n"); @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1525,9 -1521,9 -1521,9 -1521,9 -1520,9 -1521,9 -1521,9 -1522,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1508,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 -1521,9 +1525,9 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ int wm_adsp2_event(struct snd_soc_dapm_ ++ val = (val & ARIZONA_SYSCLK_FREQ_MASK) ++ >> ARIZONA_SYSCLK_FREQ_SHIFT; ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ret = regmap_update_bits_async(dsp->regmap, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dsp->base + ADSP2_CLOCKING, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ADSP2_CLK_SEL_MASK, val); + if (ret != 0) { + adsp_err(dsp, "Failed to set clock rate: %d\n", + ret); @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1590,10 -1586,10 -1586,10 -1586,10 -1585,10 -1586,10 -1586,10 -1587,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1573,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 -1586,10 +1590,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ if (ret != 0) ++ goto err; ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ret = regmap_update_bits_async(dsp->regmap, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dsp->base + ADSP2_CONTROL, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ADSP2_CORE_ENA | ADSP2_START, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ADSP2_CORE_ENA | ADSP2_START); + if (ret != 0) + goto err; + diff --cc sound/soc/fsl/Kconfig index 8c10b8f80ace,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,ac4fe4ea15a9,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1,b7ab71f2ccc1..514c275c6108 --- a/sound/soc/fsl/Kconfig +++ b/sound/soc/fsl/Kconfig @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,7 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 -1,3 +1,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++ config SND_SOC_FSL_SAI ++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++ tristate ++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++ select SND_SOC_GENERIC_DMAENGINE_PCM ++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++ + config SND_SOC_FSL_SSI + tristate + diff --cc sound/soc/fsl/imx-spdif.c index e656245d24c9,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,980dd1fc9113,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08,8499d5292f08..e1dc40143600 --- a/sound/soc/fsl/imx-spdif.c +++ b/sound/soc/fsl/imx-spdif.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -14,15 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 -14,17 +14,15 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ #include ++ ++ struct imx_spdif_data { ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ struct snd_soc_dai_link dai; + struct snd_soc_card card; --------------------------------------------------------------------- struct platform_device *txdev; --------------------------------------------------------------------- struct platform_device *rxdev; + }; + + static int imx_spdif_audio_probe(struct platform_device *pdev) ++ { ++ struct device_node *spdif_np, *np = pdev->dev.of_node; ++ struct imx_spdif_data *data; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ int ret = 0; + + spdif_np = of_parse_phandle(np, "spdif-controller", 0); + if (!spdif_np) { @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -38,38 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -39,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 -40,57 +37,38 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ goto end; ++ } ++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.name = "S/PDIF PCM"; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.stream_name = "S/PDIF PCM"; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.codec_dai_name = "snd-soc-dummy-dai"; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.codec_name = "snd-soc-dummy"; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.cpu_of_node = spdif_np; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.platform_of_node = spdif_np; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.playback_only = true; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.capture_only = true; + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (of_property_read_bool(np, "spdif-out")) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.capture_only = false; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (of_property_read_bool(np, "spdif-in")) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->dai.playback_only = false; + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (data->dai.playback_only && data->dai.capture_only) { + dev_err(&pdev->dev, "no enabled S/PDIF DAI link\n"); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ goto end; + } + + data->card.dev = &pdev->dev; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->card.dai_link = &data->dai; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ data->card.num_links = 1; + + ret = snd_soc_of_parse_card_name(&data->card, "model"); + if (ret) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ goto end; + + ret = devm_snd_soc_register_card(&pdev->dev, &data->card); + if (ret) { ++ dev_err(&pdev->dev, "snd_soc_register_card failed: %d\n", ret); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ goto end; + } + + platform_set_drvdata(pdev, data); diff --cc sound/soc/generic/simple-card.c index be7c1db5388f,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,0430be85f23c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c,b2fbb7075a6c..e473dc9537e5 --- a/sound/soc/generic/simple-card.c +++ b/sound/soc/generic/simple-card.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -8,8 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,8 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 -8,7 +8,8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ #include +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ #include + #include + #include + #include @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -25,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -25,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 -24,7 +25,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int __asoc_simple_card_dai_init( ++ ++ daifmt |= set->fmt; ++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (daifmt) + ret = snd_soc_dai_set_fmt(dai, daifmt); + + if (ret == -ENOTSUPP) { @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -58,147 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -58,165 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 -57,11 +58,168 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int asoc_simple_card_dai_init(st ++ return 0; ++ } ++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ static int +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ asoc_simple_card_sub_parse_of(struct device_node *np, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct asoc_simple_dai *dai, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct device_node **node) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct clk *clk; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ int ret; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ * get node via "sound-dai = <&phandle port>" +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ * it will be used as xxx_of_node on soc_bind_dai_link() +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ *node = of_parse_phandle(np, "sound-dai", 0); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (!*node) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ return -ENODEV; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* get dai->name */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ret = snd_soc_of_get_dai_name(np, &dai->name); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (ret < 0) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ goto parse_error; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ * bitclock-inversion, frame-inversion +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ * bitclock-master, frame-master +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ * and specific "format" if it has +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ dai->fmt = snd_soc_of_parse_daifmt(np, NULL); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ * dai->sysclk come from +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ * "clocks = <&xxx>" (if system has common clock) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ * or "system-clock-frequency = " +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ * or device's module clock. +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (of_property_read_bool(np, "clocks")) { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ clk = of_clk_get(np, 0); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (IS_ERR(clk)) { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ret = PTR_ERR(clk); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ goto parse_error; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ dai->sysclk = clk_get_rate(clk); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } else if (of_property_read_bool(np, "system-clock-frequency")) { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ of_property_read_u32(np, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ "system-clock-frequency", +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ &dai->sysclk); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } else { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ clk = of_clk_get(*node, 0); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (!IS_ERR(clk)) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ dai->sysclk = clk_get_rate(clk); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ret = 0; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ parse_error: +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ of_node_put(*node); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ return ret; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ static int asoc_simple_card_parse_of(struct device_node *node, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct asoc_simple_card_info *info, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct device *dev, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct device_node **of_cpu, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct device_node **of_codec, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct device_node **of_platform) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct device_node *np; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ char *name; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ int ret; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* get CPU/CODEC common format via simple-audio-card,format */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ info->daifmt = snd_soc_of_parse_daifmt(node, "simple-audio-card,") & +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ (SND_SOC_DAIFMT_FORMAT_MASK | SND_SOC_DAIFMT_INV_MASK); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* DAPM routes */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (of_property_read_bool(node, "simple-audio-card,routing")) { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ret = snd_soc_of_parse_audio_routing(&info->snd_card, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ "simple-audio-card,routing"); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (ret) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ return ret; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* CPU sub-node */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ret = -EINVAL; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ np = of_get_child_by_name(node, "simple-audio-card,cpu"); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (np) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ret = asoc_simple_card_sub_parse_of(np, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ &info->cpu_dai, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ of_cpu); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (ret < 0) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ return ret; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* CODEC sub-node */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ret = -EINVAL; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ np = of_get_child_by_name(node, "simple-audio-card,codec"); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (np) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ret = asoc_simple_card_sub_parse_of(np, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ &info->codec_dai, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ of_codec); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (ret < 0) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ return ret; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (!info->cpu_dai.name || !info->codec_dai.name) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ return -EINVAL; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* card name is created from CPU/CODEC dai name */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ name = devm_kzalloc(dev, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ strlen(info->cpu_dai.name) + +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ strlen(info->codec_dai.name) + 2, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ GFP_KERNEL); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ sprintf(name, "%s-%s", info->cpu_dai.name, info->codec_dai.name); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ info->name = info->card = name; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ /* simple-card assumes platform == cpu */ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ *of_platform = *of_cpu; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ dev_dbg(dev, "card-name : %s\n", info->card); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ dev_dbg(dev, "platform : %04x\n", info->daifmt); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ dev_dbg(dev, "cpu : %s / %04x / %d\n", +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ info->cpu_dai.name, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ info->cpu_dai.fmt, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ info->cpu_dai.sysclk); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ dev_dbg(dev, "codec : %s / %04x / %d\n", +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ info->codec_dai.name, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ info->codec_dai.fmt, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ info->codec_dai.sysclk); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ return 0; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ + static int asoc_simple_card_probe(struct platform_device *pdev) + { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct asoc_simple_card_info *cinfo; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct device_node *np = pdev->dev.of_node; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ struct device_node *of_cpu, *of_codec, *of_platform; + struct device *dev = &pdev->dev; + +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ cinfo = NULL; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ of_cpu = NULL; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ of_codec = NULL; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ of_platform = NULL; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (np && of_device_is_available(np)) { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ cinfo = devm_kzalloc(dev, sizeof(*cinfo), GFP_KERNEL); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (cinfo) { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ int ret; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ cinfo->snd_card.dev = &pdev->dev; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ ret = asoc_simple_card_parse_of(np, cinfo, dev, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ &of_cpu, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ &of_codec, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ &of_platform); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (ret < 0) { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ if (ret != -EPROBE_DEFER) +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ dev_err(dev, "parse error %d\n", ret); +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ return ret; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } else { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ cinfo->snd_card.dev = &pdev->dev; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ cinfo = pdev->dev.platform_data; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ } +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ + if (!cinfo) { + dev_err(dev, "no info for asoc-simple-card\n"); + return -EINVAL; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -206,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -224,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 -69,10 +227,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ ++ if (!cinfo->name || ++ !cinfo->card || +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ !cinfo->codec_dai.name || +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ !(cinfo->codec || of_codec) || +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ !(cinfo->platform || of_platform) || +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ !(cinfo->cpu_dai.name || of_cpu)) { + dev_err(dev, "insufficient asoc_simple_card_info settings\n"); + return -EINVAL; + } @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -223,9 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -241,9 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 -86,6 +244,9 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ cinfo->snd_link.platform_name = cinfo->platform; ++ cinfo->snd_link.codec_name = cinfo->codec; ++ cinfo->snd_link.codec_dai_name = cinfo->codec_dai.name; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ cinfo->snd_link.cpu_of_node = of_cpu; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ cinfo->snd_link.codec_of_node = of_codec; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ cinfo->snd_link.platform_of_node = of_platform; + cinfo->snd_link.init = asoc_simple_card_dai_init; + + /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -235,32 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -253,23 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 -95,25 +256,23 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ cinfo->snd_card.owner = THIS_MODULE; ++ cinfo->snd_card.dai_link = &cinfo->snd_link; ++ cinfo->snd_card.num_links = 1; --------------------- ----------------------------------------------- cinfo->snd_card.dev = &pdev->dev; - - - - return snd_soc_register_card(&cinfo->snd_card); - - } - - - - static int asoc_simple_card_remove(struct platform_device *pdev) - - { - - struct asoc_simple_card_info *cinfo = pdev->dev.platform_data; + +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ return devm_snd_soc_register_card(&pdev->dev, &cinfo->snd_card); + } + +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ static const struct of_device_id asoc_simple_of_match[] = { +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ { .compatible = "simple-audio-card", }, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ {}, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ }; +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ MODULE_DEVICE_TABLE(of, asoc_simple_of_match); + + static struct platform_driver asoc_simple_card = { + .driver = { ++ .name = "asoc-simple-card", ++ .owner = THIS_MODULE, +++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++ .of_match_table = asoc_simple_of_match, + }, + .probe = asoc_simple_card_probe, --------------------- ----------------------------------------------- .remove = asoc_simple_card_remove, + }; + + module_platform_driver(asoc_simple_card); diff --cc sound/soc/mxs/mxs-saif.c index 54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,d6cb9a51dd57,d6cb9a51dd57,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,92db74dc3177,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33,54e622acac33..231d7e7b0711 --- a/sound/soc/mxs/mxs-saif.c +++ b/sound/soc/mxs/mxs-saif.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 -50,9 +50,9 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static struct mxs_saif *mxs_saif[2] ++ * This also means that both SAIFs must operate at the same sample rate. ++ * ++ * We abstract this as each saif has a master, the master could be +++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++ * itself or other saifs. In the generic saif driver, saif does not need +++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++ * to know the different clkmux. Saif only needs to know who is its master +++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++ * and operating its master to generate the proper clock rate for it. + * The master id is provided in mach-specific layer according to different + * clkmux setting. + */ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 -76,7 +76,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int mxs_saif_set_dai_sysclk(stru ++ * Since SAIF may work on EXTMASTER mode, IOW, it's working BITCLK&LRCLK ++ * is provided by other SAIF, we provide a interface here to get its master ++ * from its master_id. +++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++ * Note that the master could be itself. + */ + static inline struct mxs_saif *mxs_saif_get_master(struct mxs_saif * saif) + { @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 -516,7 +516,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int mxs_saif_trigger(struct snd_ ++ } ++ ++ /* +++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++ * If the saif's master is not itself, we also need to enable + * itself clk for its internal basic logic to work. + */ + if (saif != master_saif) { diff --cc sound/soc/sh/rcar/scu.c index fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,1406dd8d9ed2,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9,fa8fa15860b9..9bb08bb1d455 --- a/sound/soc/sh/rcar/scu.c +++ b/sound/soc/sh/rcar/scu.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,13 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 -13,9 +13,13 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ struct rsnd_scu { ++ struct rsnd_scu_platform_info *info; /* rcar_snd.h */ ++ struct rsnd_mod mod; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct clk *clk; + }; + + #define rsnd_scu_mode_flags(p) ((p)->info->flags) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ #define rsnd_scu_convert_rate(p) ((p)->info->convert_rate) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ #define RSND_SCU_NAME_SIZE 16 + + /* + * ADINR @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -30,15 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 -26,6 +30,15 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ #define OTBL_18 (6 << 16) ++ #define OTBL_16 (8 << 16) ++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * image of SRC (Sampling Rate Converter) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * 96kHz <-> +-----+ 48kHz +-----+ 48kHz +-------+ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * 48kHz <-> | SRC | <------> | SSI | <-----> | codec | ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * 44.1kHz <-> +-----+ +-----+ +-------+ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * ... ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ */ + + #define rsnd_mod_to_scu(_mod) \ + container_of((_mod), struct rsnd_scu, mod) @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -49,8 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 -36,7 +49,8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ ((pos) = (struct rsnd_scu *)(priv)->scu + i); \ ++ i++) ++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* Gen1 only */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ static int rsnd_src_set_route_if_gen1(struct rsnd_priv *priv, + struct rsnd_mod *mod, + struct rsnd_dai *rdai, + struct rsnd_dai_stream *io) @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -69,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 -55,7 +69,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ { 0x3, 28, }, /* 7 */ ++ { 0x3, 30, }, /* 8 */ ++ }; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_scu *scu = rsnd_mod_to_scu(mod); + u32 mask; + u32 val; + int shift; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -99,18 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 -85,9 +99,18 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ */ ++ shift = (id % 4) * 8; ++ mask = 0x1F << shift; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * ADG is used as source clock if SRC was used, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * then, SSI WS is used as destination clock. ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * SSI WS is used as source clock if SRC is not used ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * (when playback, source/destination become reverse when capture) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (rsnd_scu_convert_rate(scu)) /* use ADG */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ val = 0; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ else if (8 == id) /* use SSI WS, but SRU8 is special */ + val = id << shift; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ else /* use SSI WS */ + val = (id + 1) << shift; + + switch (id / 4) { @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -128,45 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 -105,30 +128,45 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ return 0; ++ } ++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ unsigned int rsnd_scu_get_ssi_rate(struct rsnd_priv *priv, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_mod *ssi_mod, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct snd_pcm_runtime *runtime) + { ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_scu *scu; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ unsigned int rate; + ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* this function is assuming SSI id = SCU id here */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ scu = rsnd_mod_to_scu(rsnd_scu_mod_get(priv, rsnd_mod_id(ssi_mod))); + ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * return convert rate if SRC is used, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * otherwise, return runtime->rate as usual ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rate = rsnd_scu_convert_rate(scu); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (!rate) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rate = runtime->rate; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ return rate; + } + ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ static int rsnd_scu_convert_rate_ctrl(struct rsnd_priv *priv, + struct rsnd_mod *mod, + struct rsnd_dai *rdai, + struct rsnd_dai_stream *io) ++ { ++ struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_scu *scu = rsnd_mod_to_scu(mod); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ u32 convert_rate = rsnd_scu_convert_rate(scu); + u32 adinr = runtime->channels; + ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* set/clear soft reset */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_SWRSR, 0); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_SWRSR, 1); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* Initialize the operation of the SRC internal circuits */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_SRCIR, 1); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* Set channel number and output bit length */ + switch (runtime->sample_bits) { + case 16: + adinr |= OTBL_16; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -177,81 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 -139,9 +177,81 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ default: ++ return -EIO; ++ } ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_ADINR, adinr); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (convert_rate) { ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ u32 fsrate = 0x0400000 / convert_rate * runtime->rate; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ int ret; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* Enable the initial value of IFS */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_IFSCR, 1); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* Set initial value of IFS */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_IFSVR, fsrate); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* Select SRC mode (fixed value) */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_SRCCR, 0x00010110); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* Set the restriction value of the FS ratio (98%) */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_MNFSR, fsrate / 100 * 98); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (rsnd_is_gen1(priv)) { ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* no SRC_BFSSR settings, since SRC_SRCCR::BUFMD is 0 */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ } + ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* set convert clock */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ret = rsnd_adg_set_convert_clk(priv, mod, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ runtime->rate, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ convert_rate); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (ret < 0) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ return ret; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ } ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* Cancel the initialization and operate the SRC function */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_SRCIR, 0); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* use DMA transfer */ + rsnd_mod_write(mod, BUSIF_MODE, 1); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ return 0; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ } ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ static int rsnd_scu_transfer_start(struct rsnd_priv *priv, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_mod *mod, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_dai *rdai, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_dai_stream *io) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ { ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_scu *scu = rsnd_mod_to_scu(mod); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ int id = rsnd_mod_id(mod); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ u32 val; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (rsnd_is_gen1(priv)) { ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ val = (1 << id); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_bset(mod, SRC_ROUTE_CTRL, val, val); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ } ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (rsnd_scu_convert_rate(scu)) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_ROUTE_MODE0, 1); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ return 0; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ } ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ static int rsnd_scu_transfer_stop(struct rsnd_priv *priv, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_mod *mod, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_dai *rdai, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_dai_stream *io) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ { ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_scu *scu = rsnd_mod_to_scu(mod); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ int id = rsnd_mod_id(mod); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ u32 mask; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (rsnd_is_gen1(priv)) { ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ mask = (1 << id); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_bset(mod, SRC_ROUTE_CTRL, mask, 0); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ } ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (rsnd_scu_convert_rate(scu)) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(mod, SRC_ROUTE_MODE0, 0); + + return 0; + } @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -269,7 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 -159,6 +269,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int rsnd_scu_start(struct rsnd_m ++ struct rsnd_dai_stream *io) ++ { ++ struct rsnd_priv *priv = rsnd_mod_to_priv(mod); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_scu *scu = rsnd_mod_to_scu(mod); + struct device *dev = rsnd_priv_to_dev(priv); + int ret; + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -284,19 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 -173,16 +284,19 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ return 0; ++ } ++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ clk_enable(scu->clk); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ + /* it use DMA transter */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ret = rsnd_src_set_route_if_gen1(priv, mod, rdai, io); + if (ret < 0) + return ret; + ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ret = rsnd_scu_convert_rate_ctrl(priv, mod, rdai, io); + if (ret < 0) + return ret; + ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ret = rsnd_scu_transfer_start(priv, mod, rdai, io); + if (ret < 0) + return ret; + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -305,27 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 -191,9 +305,27 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ return 0; ++ } ++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ static int rsnd_scu_stop(struct rsnd_mod *mod, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_dai *rdai, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_dai_stream *io) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ { ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_priv *priv = rsnd_mod_to_priv(mod); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_scu *scu = rsnd_mod_to_scu(mod); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (!rsnd_scu_hpbif_is_enable(mod)) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ return 0; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_scu_transfer_stop(priv, mod, rdai, io); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ clk_disable(scu->clk); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ return 0; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ } ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ + static struct rsnd_mod_ops rsnd_scu_ops = { + .name = "scu", + .start = rsnd_scu_start, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ .stop = rsnd_scu_stop, + }; + + struct rsnd_mod *rsnd_scu_mod_get(struct rsnd_priv *priv, int id) @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -341,8 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 -210,6 +342,8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ int rsnd_scu_probe(struct platform_devi ++ { ++ struct device *dev = rsnd_priv_to_dev(priv); ++ struct rsnd_scu *scu; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct clk *clk; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ char name[RSND_SCU_NAME_SIZE]; + int i, nr; + + /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -359,16 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 -226,9 +360,16 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ priv->scu = scu; ++ ++ for_each_rsnd_scu(scu, priv, i) { ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ snprintf(name, RSND_SCU_NAME_SIZE, "scu.%d", i); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ clk = devm_clk_get(dev, name); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (IS_ERR(clk)) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ return PTR_ERR(clk); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ + rsnd_mod_init(priv, &scu->mod, + &rsnd_scu_ops, i); + scu->info = &info->scu_info[i]; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ scu->clk = clk; + + dev_dbg(dev, "SCU%d probed\n", i); + } diff --cc sound/soc/sh/rcar/ssi.c index 5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,b7cd06be9436,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006,5ac20cd5e006..4b8cf7ca9d19 --- a/sound/soc/sh/rcar/ssi.c +++ b/sound/soc/sh/rcar/ssi.c @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,10 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 -187,9 +187,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static void rsnd_ssi_status_check(struc ++ } ++ ++ static int rsnd_ssi_master_clk_start(struct rsnd_ssi *ssi, ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct rsnd_dai_stream *io) + { + struct rsnd_priv *priv = rsnd_mod_to_priv(&ssi->mod); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); + struct device *dev = rsnd_priv_to_dev(priv); + int i, j, ret; + int adg_clk_div_table[] = { @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -200,7 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 -199,6 +200,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ 1, 2, 4, 8, 16, 6, 12, ++ }; ++ unsigned int main_rate; ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ unsigned int rate = rsnd_scu_get_ssi_rate(priv, &ssi->mod, runtime); + + /* + * Find best clock, and try to start ADG @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -211,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 -209,7 +211,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ++ /* ++ * this driver is assuming that ++ * system word is 64fs (= 2 x 32bit) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ * see rsnd_ssi_init() + */ + main_rate = rate / adg_clk_div_table[i] + * 32 * 2 * ssi_clk_mul_table[j]; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -256,7 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 -254,11 +256,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static void rsnd_ssi_hw_start(struct rs ++ if (rsnd_ssi_clk_from_parent(ssi)) ++ rsnd_ssi_hw_start(ssi->parent, rdai, io); ++ else ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_ssi_master_clk_start(ssi, io); + } + } + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -455,10 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 -457,6 +455,10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int rsnd_ssi_pio_start(struct rs ++ /* enable PIO IRQ */ ++ ssi->cr_etc = UIEN | OIEN | DIEN; ++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ /* enable PIO interrupt if gen2 */ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ if (rsnd_is_gen2(priv)) ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ rsnd_mod_write(&ssi->mod, INT_ENABLE, 0x0f000000); ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ + rsnd_ssi_hw_start(ssi, rdai, io); + + dev_dbg(dev, "%s.%d start\n", rsnd_mod_name(mod), rsnd_mod_id(mod)); @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -651,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 -650,7 +652,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ int rsnd_ssi_probe(struct platform_devi ++ ++ snprintf(name, RSND_SSI_NAME_SIZE, "ssi.%d", i); ++ ++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++ clk = devm_clk_get(dev, name); + if (IS_ERR(clk)) + return PTR_ERR(clk); +