Merge tag 'sound-3.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 May 2012 20:05:43 +0000 (13:05 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 May 2012 20:05:43 +0000 (13:05 -0700)
Pull sound updates from Takashi Iwai:
 "This is the first big chunk for 3.5 merges of sound stuff.

  There are a few big changes in different areas.  First off, the
  streaming logic of USB-audio endpoints has been largely rewritten for
  the better support of "implicit feedback".  If anything about USB got
  broken, this change has to be checked.

  For HD-audio, the resume procedure was changed; instead of delaying
  the resume of the hardware until the first use, now waking up
  immediately at resume.  This is for buggy BIOS.

  For ASoC, dynamic PCM support and the improved support for digital
  links between off-SoC devices are major framework changes.

  Some highlights are below:

  * HD-audio
   - Avoid accesses of invalid pin-control bits that may stall the codec
   - V-ref setup cleanups
   - Fix the races in power-saving code
   - Fix the races in codec cache hashes and connection lists
   - Split some common codes for BIOS auto-parser to hda_auto_parser.c
   - Changed the PM resume code to wake up immediately for buggy BIOS
   - Creative SoundCore3D support
   - Add Conexant CX20751/2/3/4 codec support

  * ASoC
   - Dynamic PCM support, allowing support for SoCs with internal
     routing through components with tight sequencing and formatting
     constraints within their internal paths or where there are multiple
     components connected with CPU managed DMA controllers inside the
     SoC.
   - Greatly improved support for direct digital links between off-SoC
     devices, providing a much simpler way of connecting things like
     digital basebands to CODECs.
   - Much more fine grained and robust locking, cleaning up some of the
     confusion that crept in with multi-component.
   - CPU support for nVidia Tegra 30 I2S and audio hub controllers and
     ST-Ericsson MSP I2S controolers
   - New CODEC drivers for Cirrus CS42L52, LAPIS Semiconductor ML26124,
     Texas Instruments LM49453.
   - Some regmap changes needed by the Tegra I2S driver.
   - mc13783 audio support.

  * Misc
   - Rewrite with module_pci_driver()
   - Xonar DGX support for snd-oxygen
   - Improvement of packet handling in snd-firewire driver
   - New USB-endpoint streaming logic
   - Enhanced M-audio FTU quirks and relevant cleanups
   - Increment the support of OSS devices to 256
   - snd-aloop accuracy improvement

  There are a few more pending changes for 3.5, but they will be sent
  slightly later as partly depending on the changes of DRM."

Fix up conflicts in regmap (due to duplicate patches, with some further
updates then having already come in from the regmap tree).  Also some
fairly trivial context conflicts in the imx and mcx soc drivers.

* tag 'sound-3.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (280 commits)
  ALSA: snd-usb: fix stream info output in /proc
  ALSA: pcm - Add proper state checks to snd_pcm_drain()
  ALSA: sh: Fix up namespace collision in sh_dac_audio.
  ALSA: hda/realtek - Fix unused variable compile warning
  ASoC: sh: fsi: enable chip specific data transfer mode
  ASoC: sh: fsi: call fsi_hw_startup/shutdown from fsi_dai_trigger()
  ASoC: sh: fsi: use same format for IN/OUT
  ASoC: sh: fsi: add fsi_version() and removed meaningless version check
  ASoC: sh: fsi: use register field macro name on IN/OUT_DMAC
  ASoC: tegra: Add machine driver for WM8753 codec
  ALSA: hda - Fix possible races of accesses to connection list array
  ASoC: OMAP: HDMI: Introduce codec
  ARM: mx31_3ds: Add sound support
  ASoC: imx-mc13783 cleanup
  mx31moboard: Add sound support
  ASoC: mc13783 codec cleanups
  ASoC: add imx-mc13783 sound support
  ASoC: Add mc13783 codec
  mfd: mc13xxx: add codec platform data
  ASoC: don't flip master of DT-instantiated DAI links
  ...

19 files changed:
1  2 
MAINTAINERS
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/mach-mx31moboard.c
arch/arm/mach-shmobile/Kconfig
arch/arm/mach-shmobile/board-ap4evb.c
arch/arm/mach-shmobile/board-mackerel.c
arch/arm/mach-tegra/board-dt-tegra20.c
arch/arm/mach-tegra/board-harmony.c
arch/arm/mach-tegra/board-seaboard.c
arch/arm/mach-tegra/board-trimslice.c
arch/arm/mach-tegra/devices.c
arch/arm/mach-tegra/tegra2_clocks.c
arch/sh/boards/Kconfig
arch/sh/boards/mach-ecovec24/setup.c
arch/sh/boards/mach-se/7724/setup.c
sound/pci/hda/patch_realtek.c
sound/soc/codecs/sgtl5000.c
sound/soc/fsl/Kconfig
sound/soc/mxs/mxs-saif.c

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -65,3 -80,103 +80,103 @@@ config SND_MPC52xx_SOC_EFIK
        help
          Say Y if you want to add support for sound on the Efika.
  
 -      tristate "Audio on the the i.MX31ADS with WM1133-EV1 fitted"
+ endif # SND_POWERPC_SOC
+ menuconfig SND_IMX_SOC
+       tristate "SoC Audio for Freescale i.MX CPUs"
+       depends on ARCH_MXC
+       help
+         Say Y or M if you want to add support for codecs attached to
+         the i.MX CPUs.
+ if SND_IMX_SOC
+ config SND_SOC_IMX_SSI
+       tristate
+ config SND_SOC_IMX_PCM
+       tristate
+ config SND_SOC_IMX_PCM_FIQ
+       tristate
+       select FIQ
+       select SND_SOC_IMX_PCM
+ config SND_SOC_IMX_PCM_DMA
+       tristate
+       select SND_SOC_DMAENGINE_PCM
+       select SND_SOC_IMX_PCM
+ config SND_SOC_IMX_AUDMUX
+       tristate
+ config SND_MXC_SOC_WM1133_EV1
++      tristate "Audio on the i.MX31ADS with WM1133-EV1 fitted"
+       depends on MACH_MX31ADS_WM1133_EV1 && EXPERIMENTAL
+       select SND_SOC_WM8350
+       select SND_SOC_IMX_PCM_FIQ
+       select SND_SOC_IMX_AUDMUX
+       select SND_SOC_IMX_SSI
+       help
+         Enable support for audio on the i.MX31ADS with the WM1133-EV1
+         PMIC board with WM8835x fitted.
+ config SND_SOC_MX27VIS_AIC32X4
+       tristate "SoC audio support for Visstrim M10 boards"
+       depends on MACH_IMX27_VISSTRIM_M10 && I2C
+       select SND_SOC_TLV320AIC32X4
+       select SND_SOC_IMX_PCM_DMA
+       select SND_SOC_IMX_AUDMUX
+       select SND_SOC_IMX_SSI
+       help
+         Say Y if you want to add support for SoC audio on Visstrim SM10
+         board with TLV320AIC32X4 codec.
+ config SND_SOC_PHYCORE_AC97
+       tristate "SoC Audio support for Phytec phyCORE (and phyCARD) boards"
+       depends on MACH_PCM043 || MACH_PCA100
+       select SND_SOC_AC97_BUS
+       select SND_SOC_WM9712
+       select SND_SOC_IMX_PCM_FIQ
+       select SND_SOC_IMX_AUDMUX
+       select SND_SOC_IMX_SSI
+       help
+         Say Y if you want to add support for SoC audio on Phytec phyCORE
+         and phyCARD boards in AC97 mode
+ config SND_SOC_EUKREA_TLV320
+       tristate "Eukrea TLV320"
+       depends on MACH_EUKREA_MBIMX27_BASEBOARD \
+               || MACH_EUKREA_MBIMXSD25_BASEBOARD \
+               || MACH_EUKREA_MBIMXSD35_BASEBOARD \
+               || MACH_EUKREA_MBIMXSD51_BASEBOARD
+       depends on I2C
+       select SND_SOC_TLV320AIC23
+       select SND_SOC_IMX_PCM_FIQ
+       select SND_SOC_IMX_AUDMUX
+       select SND_SOC_IMX_SSI
+       help
+         Enable I2S based access to the TLV320AIC23B codec attached
+         to the SSI interface
+ config SND_SOC_IMX_SGTL5000
+       tristate "SoC Audio support for i.MX boards with sgtl5000"
+       depends on OF && I2C
+       select SND_SOC_SGTL5000
+       select SND_SOC_IMX_PCM_DMA
+       select SND_SOC_IMX_AUDMUX
+       select SND_SOC_FSL_SSI
+       select SND_SOC_FSL_UTILS
+       help
+         Say Y if you want to add support for SoC audio on an i.MX board with
+         a sgtl5000 codec.
+ config SND_SOC_IMX_MC13783
+       tristate "SoC Audio support for I.MX boards with mc13783"
+       depends on MFD_MC13783
+       select SND_SOC_IMX_SSI
+       select SND_SOC_IMX_AUDMUX
+       select SND_SOC_MC13783
+       select SND_SOC_IMX_PCM_DMA
+ endif # SND_IMX_SOC
@@@ -626,38 -628,50 +629,57 @@@ static int __devinit mxs_saif_probe(str
        struct resource *iores, *dmares;
        struct mxs_saif *saif;
        struct mxs_saif_platform_data *pdata;
 +      struct pinctrl *pinctrl;
        int ret = 0;
  
-       if (pdev->id >= ARRAY_SIZE(mxs_saif))
+       if (!np && pdev->id >= ARRAY_SIZE(mxs_saif))
                return -EINVAL;
  
        saif = devm_kzalloc(&pdev->dev, sizeof(*saif), GFP_KERNEL);
        if (!saif)
                return -ENOMEM;
  
-       mxs_saif[pdev->id] = saif;
-       saif->id = pdev->id;
-       pdata = pdev->dev.platform_data;
-       if (pdata && !pdata->master_mode) {
-               saif->master_id = pdata->master_id;
-               if (saif->master_id < 0 ||
-                       saif->master_id >= ARRAY_SIZE(mxs_saif) ||
-                       saif->master_id == saif->id) {
-                       dev_err(&pdev->dev, "get wrong master id\n");
-                       return -EINVAL;
+       if (np) {
+               struct device_node *master;
+               saif->id = of_alias_get_id(np, "saif");
+               if (saif->id < 0)
+                       return saif->id;
+               /*
+                * If there is no "fsl,saif-master" phandle, it's a saif
+                * master.  Otherwise, it's a slave and its phandle points
+                * to the master.
+                */
+               master = of_parse_phandle(np, "fsl,saif-master", 0);
+               if (!master) {
+                       saif->master_id = saif->id;
+               } else {
+                       saif->master_id = of_alias_get_id(master, "saif");
+                       if (saif->master_id < 0)
+                               return saif->master_id;
                }
        } else {
-               saif->master_id = saif->id;
+               saif->id = pdev->id;
+               pdata = pdev->dev.platform_data;
+               if (pdata && !pdata->master_mode)
+                       saif->master_id = pdata->master_id;
+               else
+                       saif->master_id = saif->id;
+       }
+       if (saif->master_id < 0 || saif->master_id >= ARRAY_SIZE(mxs_saif)) {
+               dev_err(&pdev->dev, "get wrong master id\n");
+               return -EINVAL;
        }
  
+       mxs_saif[saif->id] = saif;
 +      pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
 +      if (IS_ERR(pinctrl)) {
 +              ret = PTR_ERR(pinctrl);
 +              return ret;
 +      }
 +
        saif->clk = clk_get(&pdev->dev, NULL);
        if (IS_ERR(saif->clk)) {
                ret = PTR_ERR(saif->clk);