]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branches 'asoc/topic/ad1836', 'asoc/topic/ad193x', 'asoc/topic...
authorMark Brown <broonie@linaro.org>
Wed, 8 Jan 2014 20:00:31 +0000 (20:00 +0000)
committerMark Brown <broonie@linaro.org>
Wed, 8 Jan 2014 20:00:31 +0000 (20:00 +0000)
15 files changed:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70 
include/sound/soc.h
sound/soc/Kconfig
sound/soc/Makefile
sound/soc/atmel/sam9x5_wm8731.c
sound/soc/codecs/arizona.h
sound/soc/codecs/wm5110.c
sound/soc/codecs/wm8731.c
sound/soc/codecs/wm8962.c
sound/soc/codecs/wm_adsp.c
sound/soc/fsl/Kconfig
sound/soc/fsl/imx-spdif.c
sound/soc/generic/simple-card.c
sound/soc/mxs/mxs-saif.c
sound/soc/sh/rcar/scu.c
sound/soc/sh/rcar/ssi.c

index 0a600b8d6c3af7471fe7c5b3ba923008430eb9ef,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1cda7d343d16edd43f4f430078d0333b74405bd0,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,f7e1fac51bba946ae1560ec842f7a0c27f1e6e17,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1cda7d343d16edd43f4f430078d0333b74405bd0,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1,1f741cb24f337c3e4662c2ff2cd45f78985c54c1..03ce45bf8ade2cefb6c70df8a5f3687da6242db4
      ++                                                                                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 */
      ++                                                              
      ++                                                                /* 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;
      ++                                                                /* 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;
      +                                                               
index 5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,866dfec4b6b5319a636715c1f9e6dd0438c7030c,a5e3a70c0d3d970450daa6cd6e65bcd693abf835,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,5138b8493051fd54c674fe26ea87d9d5fd1411c6,463a9e25e04f7533e4a913585321da2f91011a30..d62ce483a443a5298688f51462e807e6ea1b2cb4
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -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,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 -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"
index 8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,c70c7f76d2df72157691829a460e3d52f00c4e0f,b52d4aad07160ec964d0434ee688752a9565833b,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,8b9e70105dd28f5ccceabad1cd2ea414a97640a1,ff291d3e60af3ab128acf48599b203484cd8a650..62a1822e77bf6f42410fd68c6d539c8cf97c922f
      ++                                                              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/
index 7d6a9055874b822bb440eab72a66dc5c034127ed,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,6f4e812d6e61d98dc6e2cf025e337d28c95bb63a,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac,992ae38d5a15afda177080da1032300bcffd18ac..3188036a18f004ad5e68f56ef4c10e3757c43f06
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -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,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;
      ++                                                                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");
index 9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,256548a5230e91d66acd345f54c69f735bbadb94,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,10b398477203a43be5365eab324a0cfba805a1e4,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d,9e81b6392692cbd78e7e9ad7b263fcd00c214a1d..16df0f9133537569c2a84f677e4fcb23d7af1b4e
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 -81,7 +81,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ struct arizona_priv 
------- --------------------------------------------------------------#define ARIZONA_NUM_MIXER_INPUTS 99
      ++                                                                unsigned int spk_ena_pending:1;
      ++                                                              };
      ++                                                              
+++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++      #define ARIZONA_NUM_MIXER_INPUTS 103
      +                                                               
      +                                                               extern const unsigned int arizona_mixer_tlv[];
      +                                                               extern const char *arizona_mixer_texts[ARIZONA_NUM_MIXER_INPUTS];
      ++                                                                ARIZONA_MIXER_INPUT_ROUTES(name " Input 4")
      ++                                                              
      ++                                                              #define ARIZONA_DSP_ROUTES(name) \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        { name, NULL, name " Preloader"}, \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        { name " Preloader", NULL, name " Aux 1" }, \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        { name " Preloader", NULL, name " Aux 2" }, \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        { name " Preloader", NULL, name " Aux 3" }, \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        { name " Preloader", NULL, name " Aux 4" }, \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        { name " Preloader", NULL, name " Aux 5" }, \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        { name " Preloader", NULL, name " Aux 6" }, \
      +                                                                 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 1"), \
      +                                                                 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 2"), \
      +                                                                 ARIZONA_MIXER_INPUT_ROUTES(name " Aux 3"), \
      ++                                                                ARIZONA_MIXER_INPUT_ROUTES(name " Aux 4"), \
      ++                                                                ARIZONA_MIXER_INPUT_ROUTES(name " Aux 5"), \
      ++                                                                ARIZONA_MIXER_INPUT_ROUTES(name " Aux 6"), \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ARIZONA_MIXER_ROUTES(name " Preloader", name "L"), \
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ARIZONA_MIXER_ROUTES(name " Preloader", name "R")
      +                                                               
      +                                                               #define ARIZONA_RATE_ENUM_SIZE 4
      +                                                               extern const char *arizona_rate_text[ARIZONA_RATE_ENUM_SIZE];
      ++                                                              extern const int arizona_rate_val[ARIZONA_RATE_ENUM_SIZE];
      ++                                                              
      ++                                                              extern const struct soc_enum arizona_isrc_fsl[];
+++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++      extern const struct soc_enum arizona_isrc_fsh[];
+++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++      extern const struct soc_enum arizona_asrc_rate1;
      +                                                               
      +                                                               extern const struct soc_enum arizona_in_vi_ramp;
      +                                                               extern const struct soc_enum arizona_in_vd_ramp;
      ++                                                              extern const struct soc_enum arizona_lhpf4_mode;
      ++                                                              
      ++                                                              extern const struct soc_enum arizona_ng_hold;
+++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++      extern const struct soc_enum arizona_in_hpf_cut_enum;
      +                                                               extern const struct soc_enum arizona_in_dmic_osr[];
      +                                                               
      +                                                               extern int arizona_in_ev(struct snd_soc_dapm_widget *w,
index 0ab2dc296474373e1e407abf0762afeeffead4c6,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,f3d96eae031a89f0804421d8c4008a06de7137cd,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,bbd64384ca1ce9b76f8efc63f8ead2e3bc8a1c0c,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d,c3c7396a618115d06171bb87314b363cc8ac9f6d..22bd7dd80bbafad2bf8449d4504cbc4219c5855f
      ++                                                              #include <linux/mfd/arizona/registers.h>
      ++                                                              
      ++                                                              #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 -67,8 +105,8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ static int wm5110_sysclk_ev(struct snd_
------- ---------------------- ---------------------------------------                          regmap_write(regmap, patch[i].reg,
------- ---------------------- ---------------------------------------                                       patch[i].def);
      ++                      +                                         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:
      ++                                                              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,
      ++                                                              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),
      ++                                                              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),
      +                                                               
      ++                                                              
      ++                                                              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),
      ++                                                              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);
      +                                                               
      ++                                                              
      ++                                                              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);
      ++                                                              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",
      ++                                                              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),
      ++                                                                             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,
      ++                                                              
      ++                                                              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"),
      ++                                                              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"),
      ++                                                                { 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" }, \
------- --------------------------------------------------------------  { name, "ASRC2R", "ASRC2R" }
      ++                                                                { 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" },
      ++                                                              
      ++                                                                { "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" },
      ++                                                              
      ++                                                                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"),
      ++                                                                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" },
      ++                      +                                         { "AEC Loopback", "HPOUT3L", "OUT3L" },
      ++                      +                                         { "AEC Loopback", "HPOUT3R", "OUT3R" },
      ++                                                                { "HPOUT3L", NULL, "OUT3L" },
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        { "HPOUT3R", NULL, "OUT3R" },
      +                                                               
      +                       +                                         { "AEC Loopback", "SPKOUTL", "OUT4L" },
      +                                                                 { "SPKOUTLN", NULL, "OUT4L" },
------- --------------------------------------------------------------                  .channels_max = 2,
      ++                                                                        .playback = {
      ++                                                                                .stream_name = "AIF2 Playback",
      ++                                                                                .channels_min = 1,
------- --------------------------------------------------------------                   .channels_max = 2,
+++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++                        .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,
      +                                                                          },
      ++                                                                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;
------- --------------------------------------------------------------  int i;
      ++                                                              {
      ++                                                                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);
      ++                                                                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;
      +                                                               
      ++                                                                                 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);
      +                                                               
index bc7472c968e37300edfdd38f9108bee0af77bb4f,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,6117107ea56029f3760ee6c76d177f4ef70c730c,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799,456bb8c6d759176a3bf31c5f7003a6e8cfc2d799..029720366ff8f65f7d6b208216f7cba64b6523af
      ++                                                                        iface |= 0x0001;
      ++                                                                        break;
      ++                                                                case SND_SOC_DAIFMT_DSP_A:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                iface |= 0x0013;
      +                                                                         break;
      +                                                                 case SND_SOC_DAIFMT_DSP_B:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                iface |= 0x0003;
      +                                                                         break;
      +                                                                 default:
      +                                                                         return -EINVAL;
      ++                                                              };
      ++                                                              #endif /* CONFIG_SPI_MASTER */
      ++                                                              
+++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++      #if IS_ENABLED(CONFIG_I2C)
      +                                                               static int wm8731_i2c_probe(struct i2c_client *i2c,
      +                                                                                     const struct i2c_device_id *id)
      +                                                               {
      ++                                                              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",
      ++                                                              
      ++                                                              static void __exit wm8731_exit(void)
      ++                                                              {
+++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++      #if IS_ENABLED(CONFIG_I2C)
      +                                                                 i2c_del_driver(&wm8731_i2c_driver);
      +                                                               #endif
      +                                                               #if defined(CONFIG_SPI_MASTER)
index 0f17ed3e29f41dc9d7ddebb505b7fad8fc545b02,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,2bf9ee7c54078d26854540fc2502ab387f42748c,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,07da601f834326b094dd2dedbef829b2f5ad7584,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9,543c5c2631b61827bcebca8af1926ea02b5655e9..97db3b45b4113ad5fe7f7d42dd0e4e018b8c8c51
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -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 +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;
      ++                                                                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;
      ++                                                              }
      ++                                                              EXPORT_SYMBOL_GPL(wm8962_mic_detect);
      ++                                                              
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++      #if IS_ENABLED(CONFIG_INPUT)
      +                                                               static int beep_rates[] = {
      +                                                                 500, 1000, 2000, 4000,
      +                                                               };
index 4fbcab63e61f1c5d8b4843fdec5c6d3dbfa498ed,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,a061183add67b0f83381001dbada97287e787c03,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,b42f9af163c81248fe55c152d46f1a632f5884db,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,b38f3506418ff0d43dc927fe45424e3d9d998d75,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567,46ec0e9744d4b88b50cc922cfdc65a0b4247e567..41669ad5823329139382ef3cba58d6ab5327674f
      ++                                                                                                reg = wm_adsp_region_to_reg(mem,
      ++                                                                                                                            reg);
      ++                                                                                                reg += offset;
+++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                        break;
      +                                                                                         }
      +                                                                                 }
      +                                                               
      ++                                                                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");
----------------------------------------------------------------------
----------------------------------------------------------------------          dsp->running = true;
      ++                                                                return 0;
      ++                                                              }
      ++                                                              
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      void wm_adsp2_boot_work(struct work_struct *work)
      +                                                               {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct wm_adsp *dsp = container_of(work,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                           struct wm_adsp,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                           boot_work);
      +                                                                 int ret;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        unsigned int val;
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        /*
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++         * For simplicity set the DSP clock rate to be the
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++         * SYSCLK rate rather than making it configurable.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++         */
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ret = regmap_read(dsp->regmap, ARIZONA_SYSTEM_CLOCK_1, &val);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        if (ret != 0) {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                adsp_err(dsp, "Failed to read SYSCLK state: %d\n", ret);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                return;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        }
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        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);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                return;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        }
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        if (dsp->dvfs) {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                ret = regmap_read(dsp->regmap,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                  dsp->base + ADSP2_CLOCKING, &val);
      +                                                                         if (ret != 0) {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                        dev_err(dsp->dev, "Failed to read clocking: %d\n", ret);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                        return;
      +                                                                         }
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                if ((val & ADSP2_CLK_SEL_MASK) >= 3) {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                        ret = regulator_enable(dsp->dvfs);
      +                                                                                 if (ret != 0) {
      +                                                                                         dev_err(dsp->dev,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                        "Failed to enable supply: %d\n",
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                        ret);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                return;
      +                                                                                 }
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                        ret = regulator_set_voltage(dsp->dvfs,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                    1800000,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                    1800000);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                        if (ret != 0) {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                dev_err(dsp->dev,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                        "Failed to raise supply: %d\n",
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                        ret);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                return;
      +                                                                                 }
      +                                                                         }
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        }
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ret = wm_adsp2_ena(dsp);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        if (ret != 0)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                return;
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ret = wm_adsp_load(dsp);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        if (ret != 0)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                goto err;
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ret = wm_adsp_setup_algs(dsp);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        if (ret != 0)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                goto err;
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ret = wm_adsp_load_coeff(dsp);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        if (ret != 0)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                goto err;
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        /* Initialize caches for enabled and unset controls */
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ret = wm_coeff_init_control_caches(dsp);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        if (ret != 0)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                goto err;
      +                                                               
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        /* Sync set controls */
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ret = wm_coeff_sync_controls(dsp);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        if (ret != 0)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                goto err;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        ret = regmap_update_bits_async(dsp->regmap,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                       dsp->base + ADSP2_CONTROL,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                       ADSP2_CORE_ENA,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                       ADSP2_CORE_ENA);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        if (ret != 0)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                goto err;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        dsp->running = true;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        return;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      err:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        regmap_update_bits(dsp->regmap, dsp->base + ADSP2_CONTROL,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                           ADSP2_SYS_ENA | ADSP2_CORE_ENA | ADSP2_START, 0);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      }
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                   struct snd_kcontrol *kcontrol, int event)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct snd_soc_codec *codec = w->codec;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct wm_adsp *dsp = &dsps[w->shift];
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        dsp->card = codec->card;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        switch (event) {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        case SND_SOC_DAPM_PRE_PMU:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                queue_work(system_unbound_wq, &dsp->boot_work);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                break;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        default:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                break;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        };
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        return 0;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      }
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      EXPORT_SYMBOL_GPL(wm_adsp2_early_event);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      int wm_adsp2_event(struct snd_soc_dapm_widget *w,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                   struct snd_kcontrol *kcontrol, int event)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct snd_soc_codec *codec = w->codec;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct wm_adsp *dsps = snd_soc_codec_get_drvdata(codec);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct wm_adsp *dsp = &dsps[w->shift];
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct wm_adsp_alg_region *alg_region;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct wm_coeff_ctl *ctl;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        int ret;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        switch (event) {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        case SND_SOC_DAPM_POST_PMU:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                flush_work(&dsp->boot_work);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                if (!dsp->running)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                        return -EIO;
      +                                                               
      +                                                                         ret = regmap_update_bits(dsp->regmap,
      +                                                                                                  dsp->base + ADSP2_CONTROL,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                         ADSP2_START,
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                         ADSP2_START);
      +                                                                         if (ret != 0)
      +                                                                                 goto err;
      +                                                                         break;
      +                                                               
      +                                                                 case SND_SOC_DAPM_PRE_PMD:
      ++                                                              
      ++                                                                INIT_LIST_HEAD(&adsp->alg_regions);
      ++                                                                INIT_LIST_HEAD(&adsp->ctl_list);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        INIT_WORK(&adsp->boot_work, wm_adsp2_boot_work);
      +                                                               
      +                                                                 if (dvfs) {
      +                                                                         adsp->dvfs = devm_regulator_get(adsp->dev, "DCVDD");
index 8c10b8f80acefe2c52654f74dd8904181a8da619,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,ac4fe4ea15a9a8471ad4b15c9c4bee45ec2b9635,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd,b7ab71f2ccc1676ec690427ef712c3785ccf80dd..514c275c6108ba52d2503870c4225afdc66b6dc9
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -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,3 +1,7 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++      config SND_SOC_FSL_SAI
++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++        tristate
++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++        select SND_SOC_GENERIC_DMAENGINE_PCM
++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++      
      +                                                               config SND_SOC_FSL_SSI
      +                                                                 tristate
      +                                                               
index e656245d24c919d25b458460245cbef0d62e2aee,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,980dd1fc9113c33f1c991fed2983d6cbc289fcd8,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a,8499d5292f088a45e9ea736106ee2db13e7d205a..e1dc40143600a05854331a539590603d0d859fed
----------------------------------------------------------------------  struct platform_device *txdev;
----------------------------------------------------------------------  struct platform_device *rxdev;
      ++                                                              #include <sound/soc.h>
      ++                                                              
      ++                                                              struct imx_spdif_data {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++        struct snd_soc_dai_link dai;
      +                                                                 struct snd_soc_card card;
      +                                                               };
      +                                                               
      +                                                               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) {
      ++                                                                        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);
index be7c1db5388faddcb4f6477b345ed5efba4abc9e,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,0430be85f23c966ef1441a557b584eb6dd6580f8,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7,b2fbb7075a6c9900aac6aea847b63242a359a5a7..e473dc9537e5643467bada06f97dd11f3b398cf4
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -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,7 +8,8 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
      ++                                                               * it under the terms of the GNU General Public License version 2 as
      ++                                                               * published by the Free Software Foundation.
      ++                                                               */
+++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++      #include <linux/clk.h>
+++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++      #include <linux/of.h>
      +                                                               #include <linux/platform_device.h>
      +                                                               #include <linux/module.h>
      +                                                               #include <sound/simple_card.h>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -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 -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) {
      ++                                                                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 = <xxx>"
+++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++         *  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;
      ++                                                              
      ++                                                                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;
      +                                                                 }
      ++                                                                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;
      +                                                               
      +                                                                 /*
--------------------- ------------------------------------------------  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;
      ++                                                                cinfo->snd_card.owner           = THIS_MODULE;
      ++                                                                cinfo->snd_card.dai_link        = &cinfo->snd_link;
      ++                                                                cinfo->snd_card.num_links       = 1;
--------------------- ------------------------------------------------  .remove         = asoc_simple_card_remove,
      +                                                               
+++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++        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,
      +                                                               };
      +                                                               
      +                                                               module_platform_driver(asoc_simple_card);
index 54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,d6cb9a51dd5791f1a6ad81803352c894265f4fa4,d6cb9a51dd5791f1a6ad81803352c894265f4fa4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,92db74dc3177c3393acfd333ee6e078af86f4da4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4,54e622acac330d82a92d95164ae79e89cfb461e4..231d7e7b07110d9e219788810acf70d62f1e00c6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -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 +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 +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)
      +                                                               {
      ++                                                                        }
      ++                                                              
      ++                                                                        /*
+++++++++++++++++++  +++++++++++++++++++++++++++++++++++++++++++                 * 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) {
index fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,1406dd8d9ed28fa52224317afbb68498fb4c4ae4,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15,fa8fa15860b9bda89dc5d3af73c85a5c4f076f15..9bb08bb1d4553ba43cdc135b04c7c1b725a1af68
      ++                                                              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
      ++                                                              #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)
      ++                                                                             ((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)
      ++                                                                        { 0x3, 28, }, /* 7 */
      ++                                                                        { 0x3, 30, }, /* 8 */
      ++                                                                };
++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++        struct rsnd_scu *scu = rsnd_mod_to_scu(mod);
      +                                                                 u32 mask;
      +                                                                 u32 val;
      +                                                                 int shift;
      ++                                                                 */
      ++                                                                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) {
      ++                                                                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;
      ++                                                                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;
      +                                                               }
      ++                                                                                  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;
      +                                                               
      ++                                                                        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;
      +                                                               
      ++                                                                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)
      ++                                                              {
      ++                                                                struct device *dev = rsnd_priv_to_dev(priv);
      ++                                                                struct rsnd_scu *scu;
++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++        struct clk *clk;
++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++        char name[RSND_SCU_NAME_SIZE];
      +                                                                 int i, nr;
      +                                                               
      +                                                                 /*
      ++                                                                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);
      +                                                                 }
index 5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,b7cd06be94363903ae7287bad14ec1b11bfad38d,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4,5ac20cd5e00607efd0b8113fc85aec9ed97f57f4..4b8cf7ca9d19fb016b971cf9f0f1ddeb74fbb954
      ++                                                              }
      ++                                                              
      ++                                                              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[] = {
      ++                                                                        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
      ++                                                                                /*
      ++                                                                                 * 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];
      ++                                                                                if (rsnd_ssi_clk_from_parent(ssi))
      ++                                                                                        rsnd_ssi_hw_start(ssi->parent, rdai, io);
      ++                                                                                else
++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++                                rsnd_ssi_master_clk_start(ssi, io);
      +                                                                         }
      +                                                                 }
      +                                                               
      ++                                                                /* 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));
      ++                                                              
      ++                                                                        snprintf(name, RSND_SSI_NAME_SIZE, "ssi.%d", i);
      ++                                                              
++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++                clk = devm_clk_get(dev, name);
      +                                                                         if (IS_ERR(clk))
      +                                                                                 return PTR_ERR(clk);
      +