Merge remote-tracking branches 'asoc/topic/omap', 'asoc/topic/qcom', 'asoc/topic...
authorMark Brown <broonie@kernel.org>
Sun, 12 Apr 2015 18:49:11 +0000 (19:49 +0100)
committerMark Brown <broonie@kernel.org>
Sun, 12 Apr 2015 18:49:11 +0000 (19:49 +0100)
1  2  3  4  5 
MAINTAINERS
sound/soc/codecs/rt286.c
sound/soc/omap/omap-hdmi-audio.c
sound/soc/sh/rcar/core.c

diff --combined MAINTAINERS
index 3a3c461e0787db9935f3332054c0b8b8a6077084,ddb9ac8d32b3eddc46d66bd408392ae09b637ea7,9514b794b74d7fb93072bbdbaefaaa79df38c5fd,ddc5a8cf9a8ac0078f8ca1bc99d9c48f8197214a,ddc5a8cf9a8ac0078f8ca1bc99d9c48f8197214a..080be6d19f786d1327fa2aba886c438815bd8638
@@@@@@ -34,7 -34,7 -34,7 -34,7 -34,7 +34,7 @@@@@@ trivial patch so apply some common sens
        generalized kernel feature ready for next time.
     
        PLEASE check your patch with the automated style checker
 -      (scripts/checkpatch.pl) to catch trival style violations.
 +      (scripts/checkpatch.pl) to catch trivial style violations.
        See Documentation/CodingStyle for guidance here.
     
        PLEASE CC: the maintainers and mailing lists that are generated
@@@@@@ -270,12 -270,12 -270,12 -270,12 -270,12 +270,12 @@@@@@ F:        drivers/acpi
     F: drivers/pnp/pnpacpi/
     F: include/linux/acpi.h
     F: include/acpi/
 -   F: Documentation/acpi
 +   F: Documentation/acpi/
     F: Documentation/ABI/testing/sysfs-bus-acpi
     F: drivers/pci/*acpi*
     F: drivers/pci/*/*acpi*
     F: drivers/pci/*/*/*acpi*
 -   F: tools/power/acpi
 +   F: tools/power/acpi/
     
     ACPI COMPONENT ARCHITECTURE (ACPICA)
     M: Robert Moore <robert.moore@intel.com>
@@@@@@ -563,12 -563,6 -563,12 -563,12 -563,12 +563,12 @@@@@@ S: Odd Fixe
     L: linux-alpha@vger.kernel.org
     F: arch/alpha/
     
 +   ALTERA MAILBOX DRIVER
 +   M: Ley Foon Tan <lftan@altera.com>
 +   L: nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
 +   S: Maintained
 +   F: drivers/mailbox/mailbox-altera.c
 +   
     ALTERA TRIPLE SPEED ETHERNET DRIVER
     M: Vince Bridgers <vbridger@opensource.altera.com>
     L: netdev@vger.kernel.org
@@@@@@ -630,14 -624,13 -630,15 -630,15 -630,15 +630,14 @@@@@@ L:      dri-devel@lists.freedesktop.or
     T:      git git://people.freedesktop.org/~gabbayo/linux.git
     S:      Supported
     F:      drivers/gpu/drm/amd/amdkfd/
 +   F: drivers/gpu/drm/amd/include/cik_structs.h
 +   F: drivers/gpu/drm/amd/include/kgd_kfd_interface.h
     F:      drivers/gpu/drm/radeon/radeon_kfd.c
     F:      drivers/gpu/drm/radeon/radeon_kfd.h
     F:      include/uapi/linux/kfd_ioctl.h
     
     AMD MICROCODE UPDATE SUPPORT
 ----M: Andreas Herrmann <herrmann.der.user@googlemail.com>
 ----L: amd64-microcode@amd64.org
 ++++M: Borislav Petkov <bp@alien8.de>
     S: Maintained
     F: arch/x86/kernel/cpu/microcode/amd*
     
@@@@@@ -666,13 -659,6 -667,13 -667,13 -667,13 +666,13 @@@@@@ L: linux-media@vger.kernel.or
     S: Maintained
     F: drivers/media/i2c/ad9389b*
     
 +   ANALOG DEVICES INC ADV7180 DRIVER
 +   M: Lars-Peter Clausen <lars@metafoo.de>
 +   L: linux-media@vger.kernel.org
 +   W: http://ez.analog.com/community/linux-device-drivers
 +   S: Supported
 +   F: drivers/media/i2c/adv7180.c
 +   
     ANALOG DEVICES INC ADV7511 DRIVER
     M: Hans Verkuil <hans.verkuil@cisco.com>
     L: linux-media@vger.kernel.org
@@@@@@ -710,7 -696,7 -711,7 -711,7 -711,7 +710,7 @@@@@@ L:      alsa-devel@alsa-project.org (moderat
     W: http://blackfin.uclinux.org/
     S: Supported
     F: sound/soc/blackfin/*
 -    
 +   
     ANALOG DEVICES INC IIO DRIVERS
     M: Lars-Peter Clausen <lars@metafoo.de>
     M: Michael Hennerich <Michael.Hennerich@analog.com>
@@@@@@ -722,16 -708,6 -723,16 -723,16 -723,16 +722,16 @@@@@@ X: drivers/iio/*/adjd
     F: drivers/staging/iio/*/ad*
     F: staging/iio/trigger/iio-trig-bfin-timer.c
     
 +   ANDROID DRIVERS
 +   M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 +   M: Arve Hjønnevåg <arve@android.com>
 +   M: Riley Andrews <riandrews@android.com>
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/gregkh/staging.git
 +   L: devel@driverdev.osuosl.org
 +   S: Supported
 +   F: drivers/android/
 +   F: drivers/staging/android/
 +   
     AOA (Apple Onboard Audio) ALSA DRIVER
     M: Johannes Berg <johannes@sipsolutions.net>
     L: linuxppc-dev@lists.ozlabs.org
@@@@@@ -748,15 -724,15 -749,15 -749,15 -749,15 +748,15 @@@@@@ F:        include/uapi/linux/apm_bios.
     F: drivers/char/apm-emulation.c
     
     APPLE BCM5974 MULTITOUCH DRIVER
 -   M: Henrik Rydberg <rydberg@euromail.se>
 +   M: Henrik Rydberg <rydberg@bitmath.org>
     L: linux-input@vger.kernel.org
 -   S: Maintained
 +   S: Odd fixes
     F: drivers/input/mouse/bcm5974.c
     
     APPLE SMC DRIVER
 -   M: Henrik Rydberg <rydberg@euromail.se>
 +   M: Henrik Rydberg <rydberg@bitmath.org>
     L: lm-sensors@lm-sensors.org
 -   S: Maintained
 +   S: Odd fixes
     F: drivers/hwmon/applesmc.c
     
     APPLETALK NETWORK LAYER
@@@@@@ -778,6 -754,13 -779,6 -779,6 -779,6 +778,6 @@@@@@ L:     linux-media@vger.kernel.or
     S: Maintained
     F: drivers/media/i2c/aptina-pll.*
     
 -   ARASAN COMPACT FLASH PATA CONTROLLER
 -   M: Viresh Kumar <viresh.linux@gmail.com>
 -   L: linux-ide@vger.kernel.org
 -   S: Maintained
 -   F: include/linux/pata_arasan_cf_data.h
 -   F: drivers/ata/pata_arasan_cf.c
 -   
     ARC FRAMEBUFFER DRIVER
     M: Jaya Kumar <jayalk@intworks.biz>
     S: Maintained
@@@@@@ -894,7 -877,6 -895,7 -895,7 -895,7 +894,7 @@@@@@ F:      arch/arm/boot/dts/at91*.dt
     F: arch/arm/boot/dts/at91*.dtsi
     F: arch/arm/boot/dts/sama*.dts
     F: arch/arm/boot/dts/sama*.dtsi
 +   F: arch/arm/include/debug/at91.S
     
     ARM/ATMEL AT91 Clock Support
     M: Boris Brezillon <boris.brezillon@free-electrons.com>
@@@@@@ -976,7 -958,7 -977,7 -977,7 -977,7 +976,7 @@@@@@ S:      Maintaine
     F: arch/arm/mach-prima2/
     F: drivers/clk/sirf/
     F: drivers/clocksource/timer-prima2.c
 -   F: drivers/clocksource/timer-marco.c
 +   F: drivers/clocksource/timer-atlas7.c
     N: [^a-z]sirf
     
     ARM/EBSA110 MACHINE SUPPORT
@@@@@@ -1029,16 -1011,6 -1030,6 -1030,6 -1030,6 +1029,16 @@@@@@ F:      arch/arm/mach-mxs
     F: arch/arm/boot/dts/imx*
     F: arch/arm/configs/imx*_defconfig
     
 ++++ARM/FREESCALE VYBRID ARM ARCHITECTURE
 ++++M: Shawn Guo <shawn.guo@linaro.org>
 ++++M: Sascha Hauer <kernel@pengutronix.de>
 ++++R: Stefan Agner <stefan@agner.ch>
 ++++L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 ++++S: Maintained
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
 ++++F: arch/arm/mach-imx/*vf610*
 ++++F: arch/arm/boot/dts/vf*
 ++++
     ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
     M: Lennert Buytenhek <kernel@wantstofly.org>
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@@@@ -1185,7 -1157,6 -1176,7 -1176,7 -1176,7 +1185,7 @@@@@@ M:        Sebastian Hesselbarth <sebastian.hes
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
     S: Maintained
     F: arch/arm/mach-mvebu/
  ---F: drivers/rtc/armada38x-rtc
 ++++F: drivers/rtc/rtc-armada38x.c
     
     ARM/Marvell Berlin SoC support
     M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
@@@@@@ -1197,7 -1168,6 -1188,6 -1188,6 -1188,6 +1197,7 @@@@@@ ARM/Marvell Dove/MV78xx0/Orion SOC supp
     M: Jason Cooper <jason@lakedaemon.net>
     M: Andrew Lunn <andrew@lunn.ch>
     M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
 ++++M: Gregory Clement <gregory.clement@free-electrons.com>
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
     S: Maintained
     F: arch/arm/mach-dove/
@@@@@@ -1320,13 -1290,10 -1310,13 -1310,13 -1310,13 +1320,13 @@@@@@ S:  Maintaine
     
     ARM/QUALCOMM SUPPORT
     M: Kumar Gala <galak@codeaurora.org>
 +   M: Andy Gross <agross@codeaurora.org>
     M: David Brown <davidb@codeaurora.org>
     L: linux-arm-msm@vger.kernel.org
 +   L: linux-soc@vger.kernel.org
     S: Maintained
     F: arch/arm/mach-qcom/
 +   F: drivers/soc/qcom/
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom.git
     
     ARM/RADISYS ENP2611 MACHINE SUPPORT
@@@@@@ -1361,7 -1328,6 -1351,6 -1351,6 -1351,6 +1361,7 @@@@@@ F:        drivers/i2c/busses/i2c-rk3x.
     F: drivers/*/*rockchip*
     F: drivers/*/*/*rockchip*
     F: sound/soc/rockchip/
 ++++N: rockchip
     
     ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
     M: Kukjin Kim <kgene@kernel.org>
@@@@@@ -1429,6 -1395,7 -1418,6 -1418,6 -1418,6 +1429,6 @@@@@@ F:        arch/arm/configs/ape6evm_defconfi
     F: arch/arm/configs/armadillo800eva_defconfig
     F: arch/arm/configs/bockw_defconfig
     F: arch/arm/configs/kzm9g_defconfig
 -   F: arch/arm/configs/lager_defconfig
     F: arch/arm/configs/mackerel_defconfig
     F: arch/arm/configs/marzen_defconfig
     F: arch/arm/configs/shmobile_defconfig
@@@@@@ -1616,14 -1583,12 -1605,14 -1605,14 -1605,14 +1616,14 @@@@@@ N:  xilin
     F: drivers/clocksource/cadence_ttc_timer.c
     F: drivers/i2c/busses/i2c-cadence.c
     F: drivers/mmc/host/sdhci-of-arasan.c
 +   F: drivers/edac/synopsys_edac.c
     
     ARM SMMU DRIVER
     M: Will Deacon <will.deacon@arm.com>
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
     S: Maintained
     F: drivers/iommu/arm-smmu.c
 +   F: drivers/iommu/io-pgtable-arm.c
     
     ARM64 PORT (AARCH64 ARCHITECTURE)
     M: Catalin Marinas <catalin.marinas@arm.com>
@@@@@@ -1675,8 -1640,8 -1664,8 -1664,8 -1664,8 +1675,8 @@@@@@ F:        drivers/misc/eeprom/at24.
     F: include/linux/platform_data/at24.h
     
     ATA OVER ETHERNET (AOE) DRIVER
 ----M: "Ed L. Cashin" <ecashin@coraid.com>
 ----W: http://support.coraid.com/support/linux
 ++++M: "Ed L. Cashin" <ed.cashin@acm.org>
 ++++W: http://www.openaoe.org/
     S: Supported
     F: Documentation/aoe/
     F: drivers/block/aoe/
@@@@@@ -1692,6 -1657,7 -1681,6 -1681,6 -1681,6 +1692,6 @@@@@@ M:        Jiri Slaby <jirislaby@gmail.com
     M: Nick Kossifidis <mickflemm@gmail.com>
     M: "Luis R. Rodriguez" <mcgrof@do-not-panic.com>
     L: linux-wireless@vger.kernel.org
 -   L: ath5k-devel@lists.ath5k.org
     W: http://wireless.kernel.org/en/users/Drivers/ath5k
     S: Maintained
     F: drivers/net/wireless/ath/ath5k/
@@@@@@ -1741,7 -1707,7 -1730,7 -1730,7 -1730,7 +1741,7 @@@@@@ S:        Maintaine
     F: drivers/net/ethernet/atheros/
     
     ATM
 ----M: Chas Williams <chas@cmf.nrl.navy.mil>
 ++++M: Chas Williams <3chas3@gmail.com>
     L: linux-atm-general@lists.sourceforge.net (moderated for non-subscribers)
     L: netdev@vger.kernel.org
     W: http://linux-atm.sourceforge.net
@@@@@@ -1762,7 -1728,7 -1751,7 -1751,7 -1751,7 +1762,7 @@@@@@ S:        Supporte
     F: drivers/tty/serial/atmel_serial.c
     
     ATMEL Audio ALSA driver
 ----M: Bo Shen <voice.shen@atmel.com>
 ++++M: Nicolas Ferre <nicolas.ferre@atmel.com>
     L: alsa-devel@alsa-project.org (moderated for non-subscribers)
     S: Supported
     F: sound/soc/atmel
@@@@@@ -2076,7 -2042,7 -2065,7 -2065,7 -2065,7 +2076,7 @@@@@@ F:        include/net/bluetooth
     BONDING DRIVER
     M: Jay Vosburgh <j.vosburgh@gmail.com>
     M: Veaceslav Falico <vfalico@gmail.com>
 ----M: Andy Gospodarek <andy@greyhouse.net>
 ++++M: Andy Gospodarek <gospo@cumulusnetworks.com>
     L: netdev@vger.kernel.org
     W: http://sourceforge.net/projects/bonding/
     S: Supported
@@@@@@ -2118,6 -2084,7 -2107,7 -2107,7 -2107,7 +2118,6 @@@@@@ F:        drivers/net/ethernet/broadcom/bnx2x
     
     BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE
     M: Christian Daudt <bcm@fixthebug.org>
 ----M: Matt Porter <mporter@linaro.org>
     M: Florian Fainelli <f.fainelli@gmail.com>
     L: bcm-kernel-feedback-list@broadcom.com
     T: git git://github.com/broadcom/mach-bcm
@@@@@@ -2157,7 -2124,7 -2147,7 -2147,7 -2147,7 +2157,7 @@@@@@ F:        arch/arm/boot/dts/bcm470
     BROADCOM BCM63XX ARM ARCHITECTURE
     M: Florian Fainelli <f.fainelli@gmail.com>
     L: linux-arm-kernel@lists.infradead.org
 -   T: git git://git.github.com/brcm/linux.git
 +   T: git git://github.com/broadcom/arm-bcm63xx.git
     S: Maintained
     F: arch/arm/mach-bcm/bcm63xx.c
     F: arch/arm/include/debug/bcm63xx.S
@@@@@@ -2174,7 -2141,6 -2164,7 -2164,7 -2164,7 +2174,7 @@@@@@ M:        Brian Norris <computersforpeace@gmai
     M: Gregory Fong <gregory.0xf0@gmail.com>
     M: Florian Fainelli <f.fainelli@gmail.com>
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +   T: git git://github.com/broadcom/stblinux.git
     S: Maintained
     F: arch/arm/mach-bcm/*brcmstb*
     F: arch/arm/boot/dts/bcm7*.dts*
@@@@@@ -2184,7 -2150,6 -2174,7 -2174,7 -2174,7 +2184,7 @@@@@@ BROADCOM BMIPS MIPS ARCHITECTUR
     M: Kevin Cernekee <cernekee@gmail.com>
     M: Florian Fainelli <f.fainelli@gmail.com>
     L: linux-mips@linux-mips.org
 +   T: git git://github.com/broadcom/stblinux.git
     S: Maintained
     F: arch/mips/bmips/*
     F: arch/mips/include/asm/mach-bmips/*
@@@@@@ -2227,7 -2192,7 -2217,7 -2217,7 -2217,7 +2227,7 @@@@@@ M:        Ray Jui <rjui@broadcom.com
     M: Scott Branden <sbranden@broadcom.com>
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
     L: bcm-kernel-feedback-list@broadcom.com
 -   T: git git://git.github.com/brcm/linux.git
 +   T: git git://github.com/broadcom/cygnus-linux.git
     S: Maintained
     N: iproc
     N: cygnus
@@@@@@ -2294,7 -2259,6 -2284,7 -2284,7 -2284,7 +2294,7 @@@@@@ F:        drivers/gpio/gpio-bt8xx.
     BTRFS FILE SYSTEM
     M: Chris Mason <clm@fb.com>
     M: Josef Bacik <jbacik@fb.com>
 +   M: David Sterba <dsterba@suse.cz>
     L: linux-btrfs@vger.kernel.org
     W: http://btrfs.wiki.kernel.org/
     Q: http://patchwork.kernel.org/project/linux-btrfs/list/
@@@@@@ -2379,11 -2343,9 -2369,10 -2369,10 -2369,10 +2379,11 @@@@@@ F:   arch/x86/include/asm/tce.
     
     CAN NETWORK LAYER
     M: Oliver Hartkopp <socketcan@hartkopp.net>
 ++++M: Marc Kleine-Budde <mkl@pengutronix.de>
     L: linux-can@vger.kernel.org
 ----W: http://gitorious.org/linux-can
 -   T: git git://gitorious.org/linux-can/linux-can-next.git
 ++++W: https://github.com/linux-can
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
     S: Maintained
     F: Documentation/networking/can.txt
     F: net/can/
@@@@@@ -2397,9 -2359,8 -2386,9 -2386,9 -2386,9 +2397,9 @@@@@@ CAN NETWORK DRIVER
     M: Wolfgang Grandegger <wg@grandegger.com>
     M: Marc Kleine-Budde <mkl@pengutronix.de>
     L: linux-can@vger.kernel.org
 ----W: http://gitorious.org/linux-can
 -   T: git git://gitorious.org/linux-can/linux-can-next.git
 ++++W: https://github.com/linux-can
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
     S: Maintained
     F: drivers/net/can/
     F: include/linux/can/dev.h
@@@@@@ -2417,12 -2378,6 -2406,12 -2406,12 -2406,12 +2417,12 @@@@@@ F:   security/capability.
     F: security/commoncap.c
     F: kernel/capability.c
     
 +   CAPELLA MICROSYSTEMS LIGHT SENSOR DRIVER
 +   M: Kevin Tsai <ktsai@capellamicro.com>
 +   S: Maintained
 +   F: drivers/iio/light/cm*
 +   F: Documentation/devicetree/bindings/i2c/trivial-devices.txt
 +   
     CC2520 IEEE-802.15.4 RADIO DRIVER
     M: Varka Bhadram <varkabhadram@gmail.com>
     L: linux-wpan@vger.kernel.org
@@@@@@ -2444,8 -2399,7 -2433,8 -2433,8 -2433,8 +2444,8 @@@@@@ F:        arch/powerpc/oprofile/*cell
     F: arch/powerpc/platforms/cell/
     
     CEPH DISTRIBUTED FILE SYSTEM CLIENT
 -   M: Sage Weil <sage@inktank.com>
 +   M: Yan, Zheng <zyan@redhat.com>
 +   M: Sage Weil <sage@redhat.com>
     L: ceph-devel@vger.kernel.org
     W: http://ceph.com/
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
@@@@@@ -2982,12 -2936,6 -2971,12 -2971,12 -2971,12 +2982,12 @@@@@@ S:   Supporte
     F: drivers/input/touchscreen/cyttsp*
     F: include/linux/input/cyttsp.h
     
 +   DALLAS/MAXIM DS1685-FAMILY REAL TIME CLOCK
 +   M: Joshua Kinard <kumba@gentoo.org>
 +   S: Maintained
 +   F: drivers/rtc/rtc-ds1685.c
 +   F: include/linux/rtc/ds1685.h
 +   
     DAMA SLAVE for AX.25
     M: Joerg Reuter <jreuter@yaina.de>
     W: http://yaina.de/jreuter/
@@@@@@ -3064,7 -3012,6 -3053,7 -3053,7 -3053,7 +3064,7 @@@@@@ F:        drivers/platform/x86/dell-laptop.
     
     DELL LAPTOP SMM DRIVER
     M: Guenter Roeck <linux@roeck-us.net>
 +   S: Maintained
     F: drivers/char/i8k.c
     F: include/uapi/linux/i8k.h
     
@@@@@@ -3080,7 -3027,7 -3069,7 -3069,7 -3069,7 +3080,7 @@@@@@ S:        Maintaine
     F: drivers/platform/x86/dell-wmi.c
     
     DESIGNWARE USB2 DRD IP DRIVER
 -   M: Paul Zimmerman <paulz@synopsys.com>
 +   M: John Youn <johnyoun@synopsys.com>
     L: linux-usb@vger.kernel.org
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb.git
     S: Maintained
@@@@@@ -3176,12 -3123,6 -3165,12 -3165,12 -3165,12 +3176,12 @@@@@@ L:   linux-i2c@vger.kernel.or
     S: Maintained
     F: drivers/i2c/busses/i2c-diolan-u2c.c
     
 +   DIRECT ACCESS (DAX)
 +   M: Matthew Wilcox <willy@linux.intel.com>
 +   L: linux-fsdevel@vger.kernel.org
 +   S: Supported
 +   F: fs/dax.c
 +   
     DIRECTORY NOTIFICATION (DNOTIFY)
     M: Eric Paris <eparis@parisplace.org>
     S: Maintained
@@@@@@ -3241,7 -3182,7 -3230,7 -3230,7 -3230,7 +3241,7 @@@@@@ L:        dmaengine@vger.kernel.or
     Q: https://patchwork.kernel.org/project/linux-dmaengine/list/
     S: Maintained
     F: drivers/dma/
 -   F: include/linux/dma*
 +   F: include/linux/dmaengine.h
     F: Documentation/dmaengine/
     T: git git://git.infradead.org/users/vkoul/slave-dma.git
     
@@@@@@ -3252,13 -3193,6 -3241,6 -3241,6 -3241,6 +3252,13 @@@@@@ S:      Maintaine
     F: Documentation/hwmon/dme1737
     F: drivers/hwmon/dme1737.c
     
 ++++DMI/SMBIOS SUPPORT
 ++++M: Jean Delvare <jdelvare@suse.de>
 ++++S: Maintained
 ++++F: drivers/firmware/dmi-id.c
 ++++F: drivers/firmware/dmi_scan.c
 ++++F: include/linux/dmi.h
 ++++
     DOCKING STATION DRIVER
     M: Shaohua Li <shaohua.li@intel.com>
     L: linux-acpi@vger.kernel.org
@@@@@@ -3273,7 -3207,6 -3255,7 -3255,7 -3255,7 +3273,7 @@@@@@ F:        Documentation
     X: Documentation/ABI/
     X: Documentation/devicetree/
     X: Documentation/[a-z][a-z]_[A-Z][A-Z]/
 +   T: git git://git.lwn.net/linux-2.6.git docs-next
     
     DOUBLETALK DRIVER
     M: "James R. Van Zandt" <jrv@vanzandt.mv.com>
@@@@@@ -3533,14 -3466,6 -3515,14 -3515,14 -3515,14 +3533,14 @@@@@@ M:   "Maciej W. Rozycki" <macro@linux-mip
     S: Maintained
     F: drivers/tty/serial/dz.*
     
 +   E3X0 POWER BUTTON DRIVER
 +   M: Moritz Fischer <moritz.fischer@ettus.com>
 +   L: usrp-users@lists.ettus.com
 +   W: http://www.ettus.com
 +   S: Supported
 +   F: drivers/input/misc/e3x0-button.c
 +   F: Documentation/devicetree/bindings/input/e3x0-button.txt
 +   
     E4000 MEDIA DRIVER
     M: Antti Palosaari <crope@iki.fi>
     L: linux-media@vger.kernel.org
@@@@@@ -3582,8 -3507,6 -3564,8 -3564,8 -3564,8 +3582,8 @@@@@@ M:        Borislav Petkov <bp@alien8.de
     M: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
     L: linux-edac@vger.kernel.org
     W: bluesmoke.sourceforge.net
 +   T: git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp.git#for-next
 +   T: git://git.kernel.org/pub/linux/kernel/git/mchehab/linux-edac.git#linux_next
     S: Supported
     F: Documentation/edac.txt
     F: drivers/edac/
@@@@@@ -3948,14 -3871,8 -3930,14 -3930,14 -3930,14 +3948,14 @@@@@@ S:   Supporte
     F: Documentation/fault-injection/
     F: lib/fault-inject.c
     
 +   FBTFT Framebuffer drivers
 +   M: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 +   M: Noralf Trønnes <noralf@tronnes.org>
 +   S: Maintained
 +   F: drivers/staging/fbtft/
 +   
     FCOE SUBSYSTEM (libfc, libfcoe, fcoe)
 -   M: Robert Love <robert.w.love@intel.com>
 +   M: Vasu Dev <vasu.dev@intel.com>
     L: fcoe-devel@open-fcoe.org
     W: www.Open-FCoE.org
     S: Supported
@@@@@@ -4111,12 -4028,6 -4093,12 -4093,12 -4093,12 +4111,12 @@@@@@ S:   Maintaine
     F: include/linux/platform_data/video-imxfb.h
     F: drivers/video/fbdev/imxfb.c
     
 +   FREESCALE QUAD SPI DRIVER
 +   M: Han Xu <han.xu@freescale.com>
 +   L: linux-mtd@lists.infradead.org
 +   S: Maintained
 +   F: drivers/mtd/spi-nor/fsl-quadspi.c
 +   
     FREESCALE SOC FS_ENET DRIVER
     M: Pantelis Antoniou <pantelis.antoniou@gmail.com>
     M: Vitaly Bordug <vbordug@ru.mvista.com>
@@@@@@ -4257,11 -4168,6 -4239,11 -4239,11 -4239,11 +4257,11 @@@@@@ W:   http://www.icp-vortex.com
     S: Supported
     F: drivers/scsi/gdt*
     
 +   GDB KERNEL DEBUGGING HELPER SCRIPTS
 +   M: Jan Kiszka <jan.kiszka@siemens.com>
 +   S: Supported
 +   F: scripts/gdb/
 +   
     GEMTEK FM RADIO RECEIVER DRIVER
     M: Hans Verkuil <hverkuil@xs4all.nl>
     L: linux-media@vger.kernel.org
@@@@@@ -4496,7 -4402,6 -4478,7 -4478,7 -4478,7 +4496,7 @@@@@@ F:        include/linux/hwmon*.
     HARDWARE RANDOM NUMBER GENERATOR CORE
     M: Matt Mackall <mpm@selenic.com>
     M: Herbert Xu <herbert@gondor.apana.org.au>
 +   L: linux-crypto@vger.kernel.org
     S: Odd fixes
     F: Documentation/hw_random.txt
     F: drivers/char/hw_random/
@@@@@@ -4843,20 -4748,20 -4825,20 -4825,20 -4825,20 +4843,20 @@@@@@ S:  Supporte
     F: drivers/scsi/ipr.*
     
     IBM Power Virtual Ethernet Device Driver
 -   M: Santiago Leon <santil@linux.vnet.ibm.com>
 +   M: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
     L: netdev@vger.kernel.org
     S: Supported
     F: drivers/net/ethernet/ibm/ibmveth.*
     
     IBM Power Virtual SCSI Device Drivers
 -   M: Nathan Fontenot <nfont@linux.vnet.ibm.com>
 +   M: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
     L: linux-scsi@vger.kernel.org
     S: Supported
     F: drivers/scsi/ibmvscsi/ibmvscsi*
     F: drivers/scsi/ibmvscsi/viosrp.h
     
     IBM Power Virtual FC Device Drivers
 -   M: Brian King <brking@linux.vnet.ibm.com>
 +   M: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
     L: linux-scsi@vger.kernel.org
     S: Supported
     F: drivers/scsi/ibmvscsi/ibmvfc*
@@@@@@ -4982,7 -4887,7 -4964,7 -4964,7 -4964,7 +4982,7 @@@@@@ F:        drivers/ipack
     
     INTEGRITY MEASUREMENT ARCHITECTURE (IMA)
     M: Mimi Zohar <zohar@linux.vnet.ibm.com>
 -   M: Dmitry Kasatkin <d.kasatkin@samsung.com>
 +   M: Dmitry Kasatkin <dmitry.kasatkin@gmail.com>
     L: linux-ima-devel@lists.sourceforge.net
     L: linux-ima-user@lists.sourceforge.net
     L: linux-security-module@vger.kernel.org
@@@@@@ -5024,6 -4929,7 -5006,6 -5006,6 -5006,6 +5024,6 @@@@@@ F:        include/uapi/linux/inotify.
     
     INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS
     M: Dmitry Torokhov <dmitry.torokhov@gmail.com>
 -   M: Dmitry Torokhov <dtor@mail.ru>
     L: linux-input@vger.kernel.org
     Q: http://patchwork.kernel.org/project/linux-input/list/
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git
@@@@@@ -5034,27 -4940,18 -5016,27 -5016,27 -5016,27 +5034,27 @@@@@@ F:  include/uapi/linux/input.
     F: include/linux/input/
     
     INPUT MULTITOUCH (MT) PROTOCOL
 -   M: Henrik Rydberg <rydberg@euromail.se>
 +   M: Henrik Rydberg <rydberg@bitmath.org>
     L: linux-input@vger.kernel.org
     T: git git://git.kernel.org/pub/scm/linux/kernel/git/rydberg/input-mt.git
 -   S: Maintained
 +   S: Odd fixes
     F: Documentation/input/multi-touch-protocol.txt
     F: drivers/input/input-mt.c
     K: \b(ABS|SYN)_MT_
     
 +   INTEL ASoC BDW/HSW DRIVERS
 +   M: Jie Yang <yang.jie@linux.intel.com>
 +   L: alsa-devel@alsa-project.org
 +   S: Supported
 +   F: sound/soc/intel/sst-haswell*
 +   F: sound/soc/intel/sst-dsp*
 +   F: sound/soc/intel/sst-firmware.c
 +   F: sound/soc/intel/broadwell.c
 +   F: sound/soc/intel/haswell.c
 +   
     INTEL C600 SERIES SAS CONTROLLER DRIVER
     M: Intel SCU Linux support <intel-linux-scu@intel.com>
     M: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
 -   M: Dave Jiang <dave.jiang@intel.com>
     L: linux-scsi@vger.kernel.org
     T: git git://git.code.sf.net/p/intel-sas/isci
     S: Supported
@@@@@@ -5094,7 -4991,7 -5076,7 -5076,7 -5076,7 +5094,7 @@@@@@ S:        Supporte
     F: drivers/platform/x86/intel_menlow.c
     
     INTEL IA32 MICROCODE UPDATE SUPPORT
 ----M: Tigran Aivazian <tigran@aivazian.fsnet.co.uk>
 ++++M: Borislav Petkov <bp@alien8.de>
     S: Maintained
     F: arch/x86/kernel/cpu/microcode/core*
     F: arch/x86/kernel/cpu/microcode/intel*
@@@@@@ -5135,21 -5032,22 -5117,22 -5117,22 -5117,22 +5135,21 @@@@@@ M:  Deepak Saxena <dsaxena@plexity.net
     S: Maintained
     F: drivers/char/hw_random/ixp4xx-rng.c
     
 ----INTEL ETHERNET DRIVERS (e100/e1000/e1000e/fm10k/igb/igbvf/ixgb/ixgbe/ixgbevf/i40e/i40evf)
 ++++INTEL ETHERNET DRIVERS
     M: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
 ----M: Jesse Brandeburg <jesse.brandeburg@intel.com>
 ----M: Bruce Allan <bruce.w.allan@intel.com>
 ----M: Carolyn Wyborny <carolyn.wyborny@intel.com>
 ----M: Don Skidmore <donald.c.skidmore@intel.com>
 ----M: Greg Rose <gregory.v.rose@intel.com>
 ----M: Matthew Vick <matthew.vick@intel.com>
 ----M: John Ronciak <john.ronciak@intel.com>
 ----M: Mitch Williams <mitch.a.williams@intel.com>
 ----M: Linux NICS <linux.nics@intel.com>
 ----L: e1000-devel@lists.sourceforge.net
 ++++R: Jesse Brandeburg <jesse.brandeburg@intel.com>
 ++++R: Shannon Nelson <shannon.nelson@intel.com>
 ++++R: Carolyn Wyborny <carolyn.wyborny@intel.com>
 ++++R: Don Skidmore <donald.c.skidmore@intel.com>
 ++++R: Matthew Vick <matthew.vick@intel.com>
 ++++R: John Ronciak <john.ronciak@intel.com>
 ++++R: Mitch Williams <mitch.a.williams@intel.com>
 ++++L: intel-wired-lan@lists.osuosl.org
     W: http://www.intel.com/support/feedback.htm
     W: http://e1000.sourceforge.net/
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net.git
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git
 ++++Q: http://patchwork.ozlabs.org/project/intel-wired-lan/list/
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue.git
 ++++T: git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git
     S: Supported
     F: Documentation/networking/e100.txt
     F: Documentation/networking/e1000.txt
@@@@@@ -5271,6 -5169,6 -5254,13 -5254,6 -5254,6 +5271,13 @@@@@@ F:      drivers/char/ipmi
     F: include/linux/ipmi*
     F: include/uapi/linux/ipmi*
     
++ ++QCOM AUDIO (ASoC) DRIVERS
++ ++M: Patrick Lai <plai@codeaurora.org>
++ ++M: Banajit Goswami <bgoswami@codeaurora.org>
++ ++L: alsa-devel@alsa-project.org (moderated for non-subscribers)
++ ++S: Supported
++ ++F: sound/soc/qcom/
++ ++
     IPS SCSI RAID DRIVER
     M: Adaptec OEM Raid Solutions <aacraid@adaptec.com>
     L: linux-scsi@vger.kernel.org
@@@@@@ -5381,15 -5279,6 -5371,15 -5364,15 -5364,15 +5388,15 @@@@@@ W:   www.open-iscsi.or
     Q: http://patchwork.kernel.org/project/linux-rdma/list/
     F: drivers/infiniband/ulp/iser/
     
 +   ISCSI EXTENSIONS FOR RDMA (ISER) TARGET
 +   M: Sagi Grimberg <sagig@mellanox.com>
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending.git master
 +   L: linux-rdma@vger.kernel.org
 +   L: target-devel@vger.kernel.org
 +   S: Supported
 +   W: http://www.linux-iscsi.org
 +   F: drivers/infiniband/ulp/isert
 +   
     ISDN SUBSYSTEM
     M: Karsten Keil <isdn@linux-pingi.de>
     L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
@@@@@@ -5804,49 -5693,6 -5794,49 -5787,49 -5787,49 +5811,49 @@@@@@ F:   drivers/lguest
     F: include/linux/lguest*.h
     F: tools/lguest/
     
 +   LIBATA SUBSYSTEM (Serial and Parallel ATA drivers)
 +   M: Tejun Heo <tj@kernel.org>
 +   L: linux-ide@vger.kernel.org
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
 +   S: Maintained
 +   F: drivers/ata/
 +   F: include/linux/ata.h
 +   F: include/linux/libata.h
 +   
 +   LIBATA PATA ARASAN COMPACT FLASH CONTROLLER
 +   M: Viresh Kumar <viresh.linux@gmail.com>
 +   L: linux-ide@vger.kernel.org
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
 +   S: Maintained
 +   F: include/linux/pata_arasan_cf_data.h
 +   F: drivers/ata/pata_arasan_cf.c
 +   
 +   LIBATA PATA DRIVERS
 +   M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
 +   M: Tejun Heo <tj@kernel.org>
 +   L: linux-ide@vger.kernel.org
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
 +   S: Maintained
 +   F: drivers/ata/pata_*.c
 +   F: drivers/ata/ata_generic.c
 +   
 +   LIBATA SATA AHCI PLATFORM devices support
 +   M: Hans de Goede <hdegoede@redhat.com>
 +   M: Tejun Heo <tj@kernel.org>
 +   L: linux-ide@vger.kernel.org
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
 +   S: Maintained
 +   F: drivers/ata/ahci_platform.c
 +   F: drivers/ata/libahci_platform.c
 +   F: include/linux/ahci_platform.h
 +   
 +   LIBATA SATA PROMISE TX2/TX4 CONTROLLER DRIVER
 +   M: Mikael Pettersson <mikpelinux@gmail.com>
 +   L: linux-ide@vger.kernel.org
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
 +   S: Maintained
 +   F: drivers/ata/sata_promise.*
 +   
     LIBLOCKDEP
     M: Sasha Levin <sasha.levin@oracle.com>
     S: Maintained
@@@@@@ -5938,21 -5784,6 -5928,21 -5921,21 -5921,21 +5945,21 @@@@@@ F:   Documentation/misc-devices/lis3lv02
     F: drivers/misc/lis3lv02d/
     F: drivers/platform/x86/hp_accel.c
     
 +   LIVE PATCHING
 +   M: Josh Poimboeuf <jpoimboe@redhat.com>
 +   M: Seth Jennings <sjenning@redhat.com>
 +   M: Jiri Kosina <jkosina@suse.cz>
 +   M: Vojtech Pavlik <vojtech@suse.cz>
 +   S: Maintained
 +   F: kernel/livepatch/
 +   F: include/linux/livepatch.h
 +   F: arch/x86/include/asm/livepatch.h
 +   F: arch/x86/kernel/livepatch.c
 +   F: Documentation/ABI/testing/sysfs-kernel-livepatch
 +   F: samples/livepatch/
 +   L: live-patching@vger.kernel.org
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/livepatching.git
 +   
     LLC (802.2)
     M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
     S: Maintained
@@@@@@ -6251,33 -6082,6 -6241,33 -6234,33 -6234,33 +6258,33 @@@@@@ F:   Documentation/devicetree/bindings/i2
     F: drivers/hwmon/max6697.c
     F: include/linux/platform_data/max6697.h
     
 +   MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
 +   M: Krzysztof Kozlowski <k.kozlowski@samsung.com>
 +   L: linux-pm@vger.kernel.org
 +   S: Supported
 +   F: drivers/power/max14577_charger.c
 +   F: drivers/power/max77693_charger.c
 +   
 +   MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
 +   M: Chanwoo Choi <cw00.choi@samsung.com>
 +   M: Krzysztof Kozlowski <k.kozlowski@samsung.com>
 +   L: linux-kernel@vger.kernel.org
 +   S: Supported
 +   F: drivers/*/max14577.c
 +   F: drivers/*/max77686.c
 +   F: drivers/*/max77693.c
 +   F: drivers/extcon/extcon-max14577.c
 +   F: drivers/extcon/extcon-max77693.c
 +   F: drivers/rtc/rtc-max77686.c
 +   F: drivers/clk/clk-max77686.c
 +   F: Documentation/devicetree/bindings/mfd/max14577.txt
 +   F: Documentation/devicetree/bindings/mfd/max77686.txt
 +   F: Documentation/devicetree/bindings/mfd/max77693.txt
 +   F: Documentation/devicetree/bindings/clock/maxim,max77686.txt
 +   F: include/linux/mfd/max14577*.h
 +   F: include/linux/mfd/max77686*.h
 +   F: include/linux/mfd/max77693*.h
 +   
     MAXIRADIO FM RADIO RECEIVER DRIVER
     M: Hans Verkuil <hverkuil@xs4all.nl>
     L: linux-media@vger.kernel.org
@@@@@@ -6308,6 -6112,14 -6298,6 -6291,6 -6291,6 +6315,6 @@@@@@ F:       include/uapi/linux/meye.
     F: include/uapi/linux/ivtv*
     F: include/uapi/linux/uvcvideo.h
     
 -   MEDIAVISION PRO MOVIE STUDIO DRIVER
 -   M: Hans Verkuil <hverkuil@xs4all.nl>
 -   L: linux-media@vger.kernel.org
 -   T: git git://linuxtv.org/media_tree.git
 -   W: http://linuxtv.org
 -   S: Odd Fixes
 -   F: drivers/media/parport/pms*
 -   
     MEGARAID SCSI/SAS DRIVERS
     M: Kashyap Desai <kashyap.desai@avagotech.com>
     M: Sumit Saxena <sumit.saxena@avagotech.com>
@@@@@@ -6725,10 -6537,9 -6715,10 -6708,10 -6708,10 +6732,10 @@@@@@ F:   include/uapi/linux/netrom.
     F: net/netrom/
     
     NETWORK BLOCK DEVICE (NBD)
 -   M: Paul Clements <Paul.Clements@steeleye.com>
 +   M: Markus Pargmann <mpa@pengutronix.de>
     S: Maintained
     L: nbd-general@lists.sourceforge.net
 +   T: git git://git.pengutronix.de/git/mpa/linux-nbd.git
     F: Documentation/blockdev/nbd.txt
     F: drivers/block/nbd.c
     F: include/linux/nbd.h
@@@@@@ -6757,7 -6568,6 -6747,7 -6740,7 -6740,7 +6764,7 @@@@@@ F:        include/linux/netdevice.
     F: include/uapi/linux/in.h
     F: include/uapi/linux/net.h
     F: include/uapi/linux/netdevice.h
 +   F: include/uapi/linux/net_namespace.h
     F: tools/net/
     F: tools/testing/selftests/net/
     F: lib/random32.c
@@@@@@ -6862,7 -6672,6 -6852,7 -6845,7 -6845,7 +6869,7 @@@@@@ F:        Documentation/devicetree/bindings/ne
     
     NFS, SUNRPC, AND LOCKD CLIENTS
     M: Trond Myklebust <trond.myklebust@primarydata.com>
 +   M: Anna Schumaker <anna.schumaker@netapp.com>
     L: linux-nfs@vger.kernel.org
     W: http://client.linux-nfs.org
     T: git git://git.linux-nfs.org/projects/trondmy/linux-nfs.git
@@@@@@ -6905,7 -6714,7 -6895,7 -6888,7 -6888,7 +6912,7 @@@@@@ F:        drivers/scsi/nsp32
     NIOS2 ARCHITECTURE
     M: Ley Foon Tan <lftan@altera.com>
     L: nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
 -   T: git git://git.rocketboards.org/linux-socfpga.git
 +   T: git git://git.rocketboards.org/linux-socfpga-next.git
     S: Maintained
     F: arch/nios2/
     
@@@@@@ -7078,12 -6887,6 -7068,12 -7061,12 -7061,12 +7085,12 @@@@@@ L:   linux-omap@vger.kernel.or
     S: Maintained
     F: arch/arm/mach-omap2/omap_hwmod.*
     
 +   OMAP HWMOD DATA
 +   M: Paul Walmsley <paul@pwsan.com>
 +   L: linux-omap@vger.kernel.org
 +   S: Maintained
 +   F: arch/arm/mach-omap2/omap_hwmod*data*
 +   
     OMAP HWMOD DATA FOR OMAP4-BASED DEVICES
     M: Benoît Cousson <bcousson@baylibre.com>
     L: linux-omap@vger.kernel.org
@@@@@@ -7174,12 -6977,14 -7164,12 -7157,12 -7157,12 +7181,12 @@@@@@ OPEN FIRMWARE AND FLATTENED DEVICE TRE
     M: Grant Likely <grant.likely@linaro.org>
     M: Rob Herring <robh+dt@kernel.org>
     L: devicetree@vger.kernel.org
 -   W: http://fdt.secretlab.ca
 -   T: git git://git.secretlab.ca/git/linux-2.6.git
 +   W: http://www.devicetree.org/
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux.git
     S: Maintained
     F: drivers/of/
     F: include/linux/of*.h
     F: scripts/dtc/
 -   K: of_get_property
 -   K: of_match_table
     
     OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
     M: Rob Herring <robh+dt@kernel.org>
@@@@@@ -7203,12 -7008,11 -7193,12 -7186,12 -7186,12 +7210,12 @@@@@@ F:  arch/openrisc
     
     OPENVSWITCH
     M: Pravin Shelar <pshelar@nicira.com>
 +   L: netdev@vger.kernel.org
     L: dev@openvswitch.org
     W: http://openvswitch.org
 -   T: git git://git.kernel.org/pub/scm/linux/kernel/git/pshelar/openvswitch.git
     S: Maintained
     F: net/openvswitch/
 +   F: include/uapi/linux/openvswitch.h
     
     OPL4 DRIVER
     M: Clemens Ladisch <clemens@ladisch.de>
@@@@@@ -7230,7 -7034,8 -7220,8 -7213,8 -7213,8 +7237,7 @@@@@@ ORACLE CLUSTER FILESYSTEM 2 (OCFS2
     M: Mark Fasheh <mfasheh@suse.com>
     M: Joel Becker <jlbec@evilplan.org>
     L: ocfs2-devel@oss.oracle.com (moderated for non-subscribers)
 ----W: http://oss.oracle.com/projects/ocfs2/
 ----T: git git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2.git
 ++++W: http://ocfs2.wiki.kernel.org
     S: Supported
     F: Documentation/filesystems/ocfs2.txt
     F: Documentation/filesystems/dlmfs.txt
@@@@@@ -7319,7 -7124,7 -7310,7 -7303,7 -7303,7 +7326,7 @@@@@@ M:        Alok Kataria <akataria@vmware.com
     M: Rusty Russell <rusty@rustcorp.com.au>
     L: virtualization@lists.linux-foundation.org
     S: Supported
 -   F: Documentation/ia64/paravirt_ops.txt
 +   F: Documentation/virtual/paravirt_ops.txt
     F: arch/*/kernel/paravirt*
     F: arch/*/include/asm/paravirt.h
     
@@@@@@ -7405,14 -7210,6 -7396,14 -7389,14 -7389,14 +7412,14 @@@@@@ F:   include/linux/pci
     F: arch/x86/pci/
     F: arch/x86/kernel/quirks.c
     
 +   PCI DRIVER FOR ARM VERSATILE PLATFORM
 +   M: Rob Herring <robh@kernel.org>
 +   L: linux-pci@vger.kernel.org
 +   L: linux-arm-kernel@lists.infradead.org
 +   S: Maintained
 +   F: Documentation/devicetree/bindings/pci/versatile.txt
 +   F: drivers/pci/host/pci-versatile.c
 +   
     PCI DRIVER FOR APPLIEDMICRO XGENE
     M: Tanmay Inamdar <tinamdar@apm.com>
     L: linux-pci@vger.kernel.org
@@@@@@ -7432,7 -7229,7 -7423,7 -7416,7 -7416,7 +7439,7 @@@@@@ S:        Maintaine
     F: drivers/pci/host/*layerscape*
     
     PCI DRIVER FOR IMX6
 -   M: Richard Zhu <r65037@freescale.com>
 +   M: Richard Zhu <Richard.Zhu@freescale.com>
     M: Lucas Stach <l.stach@pengutronix.de>
     L: linux-pci@vger.kernel.org
     L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@@@@ -7602,7 -7399,6 -7593,7 -7586,7 -7586,7 +7609,7 @@@@@@ F:        drivers/crypto/picoxcell
     PIN CONTROL SUBSYSTEM
     M: Linus Walleij <linus.walleij@linaro.org>
     L: linux-gpio@vger.kernel.org
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
     S: Maintained
     F: drivers/pinctrl/
     F: include/linux/pinctrl/
@@@@@@ -7770,6 -7566,12 -7761,6 -7754,6 -7754,6 +7777,6 @@@@@@ W:       http://wireless.kernel.org/en/users/
     S: Obsolete
     F: drivers/net/wireless/prism54/
     
 -   PROMISE SATA TX2/TX4 CONTROLLER LIBATA DRIVER
 -   M: Mikael Pettersson <mikpelinux@gmail.com>
 -   L: linux-ide@vger.kernel.org
 -   S: Maintained
 -   F: drivers/ata/sata_promise.*
 -   
     PS3 NETWORK SUPPORT
     M: Geoff Levand <geoff@infradead.org>
     L: netdev@vger.kernel.org
@@@@@@ -7935,7 -7737,8 -7926,7 -7919,7 -7919,7 +7942,7 @@@@@@ F:        Documentation/scsi/LICENSE.qla2xx
     F: drivers/scsi/qla2xxx/
     
     QLOGIC QLA4XXX iSCSI DRIVER
 -   M: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
 -   M: iscsi-driver@qlogic.com
 +   M: QLogic-Storage-Upstream@qlogic.com
     L: linux-scsi@vger.kernel.org
     S: Supported
     F: Documentation/scsi/LICENSE.qla4xxx
@@@@@@ -8014,9 -7817,17 -8005,9 -7998,9 -7998,9 +8021,9 @@@@@@ T:       git git://github.com/KrasnikovEugene
     S: Supported
     F: drivers/net/wireless/ath/wcn36xx/
     
 -   QUICKCAM PARALLEL PORT WEBCAMS
 -   M: Hans Verkuil <hverkuil@xs4all.nl>
 -   L: linux-media@vger.kernel.org
 -   T: git git://linuxtv.org/media_tree.git
 -   W: http://linuxtv.org
 -   S: Odd Fixes
 -   F: drivers/media/parport/*-qcam*
 -   
     RADOS BLOCK DEVICE (RBD)
 -   M: Yehuda Sadeh <yehuda@inktank.com>
 -   M: Sage Weil <sage@inktank.com>
 +   M: Ilya Dryomov <idryomov@gmail.com>
 +   M: Sage Weil <sage@redhat.com>
     M: Alex Elder <elder@kernel.org>
     M: ceph-devel@vger.kernel.org
     W: http://ceph.com/
@@@@@@ -8202,13 -8013,6 -8193,13 -8186,13 -8186,13 +8209,13 @@@@@@ S:   Maintaine
     F: Documentation/rfkill.txt
     F: net/rfkill/
     
 +   RHASHTABLE
 +   M: Thomas Graf <tgraf@suug.ch>
 +   L: netdev@vger.kernel.org
 +   S: Maintained
 +   F: lib/rhashtable.c
 +   F: include/linux/rhashtable.h
 +   
     RICOH SMARTMEDIA/XD DRIVER
     M: Maxim Levitsky <maximlevitsky@gmail.com>
     S: Maintained
@@@@@@ -8497,14 -8301,6 -8488,6 -8481,6 -8481,6 +8504,14 @@@@@@ S:      Supporte
     L: netdev@vger.kernel.org
     F: drivers/net/ethernet/samsung/sxgbe/
     
 ++++SAMSUNG THERMAL DRIVER
 ++++M: Lukasz Majewski <l.majewski@samsung.com>
 ++++L: linux-pm@vger.kernel.org
 ++++L: linux-samsung-soc@vger.kernel.org
 ++++S: Supported
 ++++T: https://github.com/lmajewski/linux-samsung-thermal.git
 ++++F: drivers/thermal/samsung/
 ++++
     SAMSUNG USB2 PHY DRIVER
     M: Kamil Debski <k.debski@samsung.com>
     L: linux-kernel@vger.kernel.org
@@@@@@ -8528,7 -8324,6 -8511,7 -8504,7 -8504,7 +8535,7 @@@@@@ SYNOPSYS DESIGNWARE DMAC DRIVE
     M: Viresh Kumar <viresh.linux@gmail.com>
     M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
     S: Maintained
 +   F: include/linux/dma/dw.h
     F: include/linux/platform_data/dma-dw.h
     F: drivers/dma/dw/
     
@@@@@@ -8560,6 -8355,12 -8543,6 -8536,6 -8536,6 +8567,6 @@@@@@ F:       kernel/time/clocksource.
     F: kernel/time/time*.c
     F: kernel/time/ntp.c
     
 -   TLG2300 VIDEO4LINUX-2 DRIVER
 -   M: Huang Shijie <shijie8@gmail.com>
 -   M: Hans Verkuil <hverkuil@xs4all.nl>
 -   S: Odd Fixes
 -   F: drivers/media/usb/tlg2300/
 -   
     SC1200 WDT DRIVER
     M: Zwane Mwaikambo <zwanem@gmail.com>
     S: Maintained
@@@@@@ -8591,7 -8392,7 -8574,7 -8567,7 -8567,7 +8598,7 @@@@@@ S:        Maintaine
     F: drivers/scsi/sr*
     
     SCSI RDMA PROTOCOL (SRP) INITIATOR
 -   M: Bart Van Assche <bvanassche@acm.org>
 +   M: Bart Van Assche <bart.vanassche@sandisk.com>
     L: linux-rdma@vger.kernel.org
     S: Supported
     W: http://www.openfabrics.org
@@@@@@ -8745,6 -8546,25 -8728,6 -8721,6 -8721,6 +8752,6 @@@@@@ S:       Maintaine
     F: drivers/misc/phantom.c
     F: include/uapi/linux/phantom.h
     
 -   SERIAL ATA (SATA) SUBSYSTEM
 -   M: Tejun Heo <tj@kernel.org>
 -   L: linux-ide@vger.kernel.org
 -   T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
 -   S: Supported
 -   F: drivers/ata/
 -   F: include/linux/ata.h
 -   F: include/linux/libata.h
 -   
 -   SERIAL ATA AHCI PLATFORM devices support
 -   M: Hans de Goede <hdegoede@redhat.com>
 -   M: Tejun Heo <tj@kernel.org>
 -   L: linux-ide@vger.kernel.org
 -   T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata.git
 -   S: Supported
 -   F: drivers/ata/ahci_platform.c
 -   F: drivers/ata/libahci_platform.c
 -   F: include/linux/ahci_platform.h
 -   
     SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER
     M: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
     L: linux-scsi@vger.kernel.org
@@@@@@ -8925,15 -8745,6 -8908,15 -8901,15 -8901,15 +8932,15 @@@@@@ S:   Maintaine
     F: drivers/media/platform/davinci/
     F: include/media/davinci/
     
 +   TI AM437X VPFE DRIVER
 +   M: Lad, Prabhakar <prabhakar.csengg@gmail.com>
 +   L: linux-media@vger.kernel.org
 +   W: http://linuxtv.org/
 +   Q: http://patchwork.linuxtv.org/project/linux-media/list/
 +   T: git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
 +   S: Maintained
 +   F: drivers/media/platform/am437x/
 +   
     SIS 190 ETHERNET DRIVER
     M: Francois Romieu <romieu@fr.zoreil.com>
     L: netdev@vger.kernel.org
@@@@@@ -9015,8 -8826,6 -8998,8 -8991,8 -8991,8 +9022,8 @@@@@@ F:        drivers/media/i2c/smiapp
     F: include/media/smiapp.h
     F: drivers/media/i2c/smiapp-pll.c
     F: drivers/media/i2c/smiapp-pll.h
 +   F: include/uapi/linux/smiapp.h
 +   F: Documentation/devicetree/bindings/media/i2c/nokia,smia.txt
     
     SMM665 HARDWARE MONITOR DRIVER
     M: Guenter Roeck <linux@roeck-us.net>
@@@@@@ -9083,7 -8892,6 -9066,7 -9059,7 -9059,7 +9090,7 @@@@@@ SOFTLOGIC 6x10 MPEG CODE
     M: Bluecherry Maintainers <maintainers@bluecherrydvr.com>
     M: Andrey Utkin <andrey.utkin@corp.bluecherry.net>
     M: Andrey Utkin <andrey.krieger.utkin@gmail.com>
 +   M: Ismael Luceno <ismael@iodev.co.uk>
     L: linux-media@vger.kernel.org
     S: Supported
     F: drivers/media/pci/solo6x10/
@@@@@@ -9356,14 -9164,6 -9339,14 -9332,14 -9332,14 +9363,14 @@@@@@ L:   linux-wireless@vger.kernel.or
     S: Maintained
     F: drivers/staging/rtl8723au/
     
 +   STAGING - SILICON MOTION SM7XX FRAME BUFFER DRIVER
 +   M: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
 +   M: Teddy Wang <teddy.wang@siliconmotion.com>
 +   M: Sudip Mukherjee <sudip@vectorindia.org>
 +   L: linux-fbdev@vger.kernel.org
 +   S: Maintained
 +   F: drivers/staging/sm7xxfb/
 +   
     STAGING - SLICOSS
     M: Lior Dotan <liodot@gmail.com>
     M: Christopher Harrer <charrer@alacritech.com>
@@@@@@ -9404,13 -9204,6 -9387,13 -9380,13 -9380,13 +9411,13 @@@@@@ F:   arch/m68k/sun3*
     F: arch/m68k/include/asm/sun3*
     F: drivers/net/ethernet/i825xx/sun3*
     
 +   SUN4I LOW RES ADC ATTACHED TABLET KEYS DRIVER
 +   M: Hans de Goede <hdegoede@redhat.com>
 +   L: linux-input@vger.kernel.org
 +   S: Maintained
 +   F: Documentation/devicetree/bindings/input/sun4i-lradc-keys.txt
 +   F: drivers/input/keyboard/sun4i-lradc-keys.c
 +   
     SUNDANCE NETWORK DRIVER
     M: Denis Kirjanov <kda@linux-powerpc.org>
     L: netdev@vger.kernel.org
@@@@@@ -9419,6 -9212,7 -9402,6 -9395,6 -9395,6 +9426,6 @@@@@@ F:        drivers/net/ethernet/dlink/sundance.
     
     SUPERH
     L: linux-sh@vger.kernel.org
 -   W: http://www.linux-sh.org
     Q: http://patchwork.kernel.org/project/linux-sh/list/
     S: Orphan
     F: Documentation/sh/
@@@@@@ -9739,15 -9533,9 -9722,15 -9715,15 -9715,15 +9746,15 @@@@@@ F:   drivers/platform/x86/thinkpad_acpi.
     TI BANDGAP AND THERMAL DRIVER
     M: Eduardo Valentin <edubezval@gmail.com>
     L: linux-pm@vger.kernel.org
 -   S: Supported
 +   L: linux-omap@vger.kernel.org
 +   S: Maintained
     F: drivers/thermal/ti-soc-thermal/
     
 +   TI CDCE706 CLOCK DRIVER
 +   M: Max Filippov <jcmvbkbc@gmail.com>
 +   S: Maintained
 +   F: drivers/clk/clk-cdce706.c
 +   
     TI CLOCK DRIVER
     M: Tero Kristo <t-kristo@ti.com>
     L: linux-omap@vger.kernel.org
@@@@@@ -9802,13 -9590,6 -9785,13 -9778,13 -9778,13 +9809,13 @@@@@@ F:   drivers/power/lp8788-charger.
     F: drivers/regulator/lp8788-*.c
     F: include/linux/mfd/lp8788*.h
     
 +   TI NETCP ETHERNET DRIVER
 +   M: Wingman Kwok <w-kwok2@ti.com>
 +   M: Murali Karicheri <m-karicheri2@ti.com>
 +   L: netdev@vger.kernel.org
 +   S: Maintained
 +   F: drivers/net/ethernet/ti/netcp*
 +   
     TI TWL4030 SERIES SOC CODEC DRIVER
     M: Peter Ujfalusi <peter.ujfalusi@ti.com>
     L: alsa-devel@alsa-project.org (moderated for non-subscribers)
@@@@@@ -9836,7 -9617,7 -9819,7 -9812,7 -9812,7 +9843,7 @@@@@@ F:        net/tipc
     
     TILE ARCHITECTURE
     M: Chris Metcalf <cmetcalf@ezchip.com>
 -   W: http://www.tilera.com/scm/
 +   W: http://www.ezchip.com/scm/
     S: Supported
     F: arch/tile/
     F: drivers/char/tile-srom.c
@@@@@@ -9929,21 -9710,13 -9912,21 -9905,21 -9905,21 +9936,21 @@@@@@ F:  drivers/media/pci/tw68
     
     TPM DEVICE DRIVER
     M: Peter Huewe <peterhuewe@gmx.de>
 -   M: Ashley Lai <ashley@ashleylai.com>
     M: Marcel Selhorst <tpmdd@selhorst.net>
     W: http://tpmdd.sourceforge.net
     L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
 +   Q: git git://github.com/PeterHuewe/linux-tpmdd.git
 +   T: https://github.com/PeterHuewe/linux-tpmdd
     S: Maintained
     F: drivers/char/tpm/
     
 +   TPM IBM_VTPM DEVICE DRIVER
 +   M: Ashley Lai <ashleydlai@gmail.com>
 +   W: http://tpmdd.sourceforge.net
 +   L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
 +   S: Maintained
 +   F: drivers/char/tpm/tpm_ibmvtpm*
 +   
     TRACING
     M: Steven Rostedt <rostedt@goodmis.org>
     M: Ingo Molnar <mingo@redhat.com>
@@@@@@ -10098,15 -9871,20 -10081,15 -10074,15 -10074,15 +10105,15 @@@@@@ F:     drivers/scsi/ufs
     
     UNSORTED BLOCK IMAGES (UBI)
     M: Artem Bityutskiy <dedekind1@gmail.com>
 +   M: Richard Weinberger <richard@nod.at>
     W: http://www.linux-mtd.infradead.org/
     L: linux-mtd@lists.infradead.org
     T: git git://git.infradead.org/ubifs-2.6.git
 -   S: Maintained
 +   S: Supported
     F: drivers/mtd/ubi/
     F: include/linux/mtd/ubi.h
     F: include/uapi/mtd/ubi-user.h
     
 -   UNSORTED BLOCK IMAGES (UBI) Fastmap
 -   M: Richard Weinberger <richard@nod.at>
 -   L: linux-mtd@lists.infradead.org
 -   S: Maintained
 -   F: drivers/mtd/ubi/fastmap.c
 -   
     USB ACM DRIVER
     M: Oliver Neukum <oliver@neukum.org>
     L: linux-usb@vger.kernel.org
@@@@@@ -10213,13 -9991,6 -10196,6 -10189,6 -10189,6 +10220,13 @@@@@@ S: Maintaine
     F: Documentation/usb/ohci.txt
     F: drivers/usb/host/ohci*
     
 ++++USB OTG FSM (Finite State Machine)
 ++++M: Peter Chen <Peter.Chen@freescale.com>
 ++++T: git git://github.com/hzpeterchen/linux-usb.git
 ++++L: linux-usb@vger.kernel.org
 ++++S: Maintained
 ++++F: drivers/usb/common/usb-otg-fsm.c
 ++++
     USB OVER IP DRIVER
     M: Valentina Manea <valentina.manea.m@gmail.com>
     M: Shuah Khan <shuah.kh@samsung.com>
@@@@@@ -10375,7 -10146,6 -10351,7 -10344,7 -10344,7 +10382,7 @@@@@@ USERSPACE I/O (UIO
     M: "Hans J. Koch" <hjk@hansjkoch.de>
     M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
     S: Maintained
 +   T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
     F: Documentation/DocBook/uio-howto.tmpl
     F: drivers/uio/
     F: include/linux/uio*.h
@@@@@@ -10803,7 -10573,6 -10779,7 -10772,7 -10772,7 +10810,7 @@@@@@ F:  drivers/pci/*xen
     
     XEN BLOCK SUBSYSTEM
     M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
 +   M: Roger Pau Monné <roger.pau@citrix.com>
     L: xen-devel@lists.xenproject.org (moderated for non-subscribers)
     S: Supported
     F: drivers/block/xen-blkback/*
@@@@@@ -10859,7 -10628,6 -10835,7 -10828,7 -10828,7 +10866,7 @@@@@@ M:  Max Filippov <jcmvbkbc@gmail.com
     L: linux-xtensa@linux-xtensa.org
     S: Maintained
     F: drivers/spi/spi-xtensa-xtfpga.c
 +   F: sound/soc/xtensa/xtfpga-i2s.c
     
     YAM DRIVER FOR AX.25
     M: Jean-Paul Roubelat <jpr@f6fbb.org>
diff --combined sound/soc/codecs/rt286.c
index 826037090c8385cf9a2ddaf255052051390f377d,2cd4fe463102d4532458e1ed3402abd276be8fc1,f374840a5a7ce376272d8f7e3290f91c099cb19f,f374840a5a7ce376272d8f7e3290f91c099cb19f,87af81b9e971f084a993562eb46472dd3665c0ab..0fcda35a3a93694fa5352d06144e934ee99b7583
     #include "rt286.h"
     
     #define RT286_VENDOR_ID 0x10ec0286
 +   #define RT288_VENDOR_ID 0x10ec0288
     
     struct rt286_priv {
        struct regmap *regmap;
@@@@@@ -306,8 -305,6 -306,8 -306,8 -306,8 +306,8 @@@@@@ static int rt286_jack_detect(struct rt2
        *hp = false;
        *mic = false;
     
 +      if (!rt286->codec)
 +              return -EINVAL;
        if (rt286->pdata.cbj_en) {
                regmap_read(rt286->regmap, RT286_GET_HP_SENSE, &buf);
                *hp = buf & 0x80000000;
@@@@@@ -395,20 -392,9 -395,9 -395,9 -395,20 +395,20 @@@@@@ int rt286_mic_detect(struct snd_soc_cod
     
        rt286->jack = jack;
     
 ---    /* Send an initial empty report */
 ---    snd_soc_jack_report(rt286->jack, 0,
 ---            SND_JACK_MICROPHONE | SND_JACK_HEADPHONE);
 +++    if (jack) {
 +++            /* enable IRQ */
-               if (rt286->jack->status | SND_JACK_HEADPHONE)
++++            if (rt286->jack->status & SND_JACK_HEADPHONE)
 +++                    snd_soc_dapm_force_enable_pin(&codec->dapm, "LDO1");
 +++            regmap_update_bits(rt286->regmap, RT286_IRQ_CTRL, 0x2, 0x2);
 +++            /* Send an initial empty report */
 +++            snd_soc_jack_report(rt286->jack, rt286->jack->status,
 +++                    SND_JACK_MICROPHONE | SND_JACK_HEADPHONE);
 +++    } else {
 +++            /* disable IRQ */
 +++            regmap_update_bits(rt286->regmap, RT286_IRQ_CTRL, 0x2, 0x0);
 +++            snd_soc_dapm_disable_pin(&codec->dapm, "LDO1");
 +++    }
 +++    snd_soc_dapm_sync(&codec->dapm);
     
        return 0;
     }
@@@@@@ -417,8 -403,7 -406,8 -406,8 -417,8 +417,8 @@@@@@ EXPORT_SYMBOL_GPL(rt286_mic_detect)
     static int is_mclk_mode(struct snd_soc_dapm_widget *source,
                         struct snd_soc_dapm_widget *sink)
     {
 -      struct rt286_priv *rt286 = snd_soc_codec_get_drvdata(source->codec);
 +      struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
 +      struct rt286_priv *rt286 = snd_soc_codec_get_drvdata(codec);
     
        if (rt286->clk_id == RT286_SCLK_S_MCLK)
                return 1;
@@@@@@ -432,8 -417,6 -421,8 -421,8 -432,8 +432,8 @@@@@@ static const DECLARE_TLV_DB_SCALE(mic_v
     static const struct snd_kcontrol_new rt286_snd_controls[] = {
        SOC_DOUBLE_R_TLV("DAC0 Playback Volume", RT286_DACL_GAIN,
                            RT286_DACR_GAIN, 0, 0x7f, 0, out_vol_tlv),
 +      SOC_DOUBLE_R("ADC0 Capture Switch", RT286_ADCL_GAIN,
 +                          RT286_ADCR_GAIN, 7, 1, 1),
        SOC_DOUBLE_R_TLV("ADC0 Capture Volume", RT286_ADCL_GAIN,
                            RT286_ADCR_GAIN, 0, 0x7f, 0, out_vol_tlv),
        SOC_SINGLE_TLV("AMIC Volume", RT286_MIC_GAIN,
@@@@@@ -517,7 -500,7 -506,7 -506,7 -517,7 +517,7 @@@@@@ SOC_DAPM_ENUM("SPO source", rt286_spo_e
     static int rt286_spk_event(struct snd_soc_dapm_widget *w,
                            struct snd_kcontrol *kcontrol, int event)
     {
 -      struct snd_soc_codec *codec = w->codec;
 +      struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
     
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
     static int rt286_set_dmic1_event(struct snd_soc_dapm_widget *w,
                                  struct snd_kcontrol *kcontrol, int event)
     {
 -      struct snd_soc_codec *codec = w->codec;
 +      struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
     
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
        return 0;
     }
     
 -   static int rt286_adc_event(struct snd_soc_dapm_widget *w,
 -                           struct snd_kcontrol *kcontrol, int event)
 -   {
 -      struct snd_soc_codec *codec = w->codec;
 -      unsigned int nid;
 -   
 -      nid = (w->reg >> 20) & 0xff;
 -   
 -      switch (event) {
 -      case SND_SOC_DAPM_POST_PMU:
 -              snd_soc_update_bits(codec,
 -                      VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
 -                      0x7080, 0x7000);
 -              break;
 -      case SND_SOC_DAPM_PRE_PMD:
 -              snd_soc_update_bits(codec,
 -                      VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
 -                      0x7080, 0x7080);
 -              break;
 -      default:
 -              return 0;
 -      }
 -   
 -      return 0;
 -   }
 -   
     static int rt286_vref_event(struct snd_soc_dapm_widget *w,
                             struct snd_kcontrol *kcontrol, int event)
     {
 -      struct snd_soc_codec *codec = w->codec;
 +      struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
     
        switch (event) {
        case SND_SOC_DAPM_PRE_PMU:
     static int rt286_ldo2_event(struct snd_soc_dapm_widget *w,
                             struct snd_kcontrol *kcontrol, int event)
     {
 -      struct snd_soc_codec *codec = w->codec;
 +      struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
     
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
     static int rt286_mic1_event(struct snd_soc_dapm_widget *w,
                             struct snd_kcontrol *kcontrol, int event)
     {
 -      struct snd_soc_codec *codec = w->codec;
 +      struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
     
        switch (event) {
        case SND_SOC_DAPM_PRE_PMU:
@@@@@@ -658,10 -667,12 -647,10 -647,10 -658,10 +658,10 @@@@@@ static const struct snd_soc_dapm_widge
        SND_SOC_DAPM_ADC("ADC 1", NULL, SND_SOC_NOPM, 0, 0),
     
        /* ADC Mux */
 -      SND_SOC_DAPM_MUX_E("ADC 0 Mux", RT286_SET_POWER(RT286_ADC_IN1), 0, 1,
 -              &rt286_adc0_mux, rt286_adc_event, SND_SOC_DAPM_PRE_PMD |
 -              SND_SOC_DAPM_POST_PMU),
 -      SND_SOC_DAPM_MUX_E("ADC 1 Mux", RT286_SET_POWER(RT286_ADC_IN2), 0, 1,
 -              &rt286_adc1_mux, rt286_adc_event, SND_SOC_DAPM_PRE_PMD |
 -              SND_SOC_DAPM_POST_PMU),
 +      SND_SOC_DAPM_MUX("ADC 0 Mux", RT286_SET_POWER(RT286_ADC_IN1), 0, 1,
 +              &rt286_adc0_mux),
 +      SND_SOC_DAPM_MUX("ADC 1 Mux", RT286_SET_POWER(RT286_ADC_IN2), 0, 1,
 +              &rt286_adc1_mux),
     
        /* Audio Interface */
        SND_SOC_DAPM_AIF_IN("AIF1RX", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0),
@@@@@@ -850,8 -861,10 -839,8 -839,8 -850,8 +850,8 @@@@@@ static int rt286_hw_params(struct snd_p
                RT286_I2S_CTRL1, 0x0018, d_len_code << 3);
        dev_dbg(codec->dev, "format val = 0x%x\n", val);
     
 -      if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
 -              snd_soc_update_bits(codec, RT286_DAC_FORMAT, 0x407f, val);
 -      else
 -              snd_soc_update_bits(codec, RT286_ADC_FORMAT, 0x407f, val);
 +      snd_soc_update_bits(codec, RT286_DAC_FORMAT, 0x407f, val);
 +      snd_soc_update_bits(codec, RT286_ADC_FORMAT, 0x407f, val);
     
        return 0;
     }
@@@@@@ -1048,7 -1061,7 -1037,7 -1037,7 -1048,6 +1048,6 @@@@@@ static int rt286_probe(struct snd_soc_c
        struct rt286_priv *rt286 = snd_soc_codec_get_drvdata(codec);
     
        rt286->codec = codec;
----    codec->dapm.bias_level = SND_SOC_BIAS_OFF;
     
        if (rt286->i2c->irq) {
                regmap_update_bits(rt286->regmap,
@@@@@@ -1183,7 -1196,6 -1172,7 -1172,7 -1182,7 +1182,7 @@@@@@ static const struct regmap_config rt286
     
     static const struct i2c_device_id rt286_i2c_id[] = {
        {"rt286", 0},
 +      {"rt288", 0},
        {}
     };
     MODULE_DEVICE_TABLE(i2c, rt286_i2c_id);
@@@@@@ -1204,23 -1216,12 -1193,23 -1193,23 -1203,23 +1203,23 @@@@@@ static struct dmi_system_id force_combo
        { }
     };
     
  ---                   DMI_MATCH(DMI_BOARD_NAME, "0144P8")
 +   static struct dmi_system_id dmi_dell_dino[] = {
 +      {
 +              .ident = "Dell Dino",
 +              .matches = {
 +                      DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
 ++++                   DMI_MATCH(DMI_PRODUCT_NAME, "XPS 13 9343")
 +              }
 +      },
 +      { }
 +   };
 +   
     static int rt286_i2c_probe(struct i2c_client *i2c,
                           const struct i2c_device_id *id)
     {
        struct rt286_platform_data *pdata = dev_get_platdata(&i2c->dev);
        struct rt286_priv *rt286;
----    int i, ret;
++++    int i, ret, val;
     
        rt286 = devm_kzalloc(&i2c->dev, sizeof(*rt286),
                                GFP_KERNEL);
                return ret;
        }
     
----    regmap_read(rt286->regmap,
----            RT286_GET_PARAM(AC_NODE_ROOT, AC_PAR_VENDOR_ID), &ret);
- --    if (ret != RT286_VENDOR_ID && ret != RT288_VENDOR_ID) {
 -      if (ret != RT286_VENDOR_ID) {
++++    ret = regmap_read(rt286->regmap,
++++            RT286_GET_PARAM(AC_NODE_ROOT, AC_PAR_VENDOR_ID), &val);
++++    if (ret != 0) {
++++            dev_err(&i2c->dev, "I2C error %d\n", ret);
++++            return ret;
++++    }
++++    if (val != RT286_VENDOR_ID && val != RT288_VENDOR_ID) {
                dev_err(&i2c->dev,
----                    "Device with ID register %x is not rt286\n", ret);
++++                    "Device with ID register %x is not rt286\n", val);
                return -ENODEV;
        }
     
        rt286->i2c = i2c;
        i2c_set_clientdata(i2c, rt286);
     
++++    /* restore codec default */
++++    for (i = 0; i < INDEX_CACHE_SIZE; i++)
++++            regmap_write(rt286->regmap, rt286->index_cache[i].reg,
++++                            rt286->index_cache[i].def);
++++    for (i = 0; i < ARRAY_SIZE(rt286_reg); i++)
++++            regmap_write(rt286->regmap, rt286_reg[i].reg,
++++                            rt286_reg[i].def);
++++ 
        if (pdata)
                rt286->pdata = *pdata;
     
 -      if (dmi_check_system(force_combo_jack_table))
 +      if (dmi_check_system(force_combo_jack_table) ||
 +              dmi_check_system(dmi_dell_dino))
                rt286->pdata.cbj_en = true;
     
        regmap_write(rt286->regmap, RT286_SET_AUDIO_POWER, AC_PWRST_D3);
        regmap_update_bits(rt286->regmap, RT286_DEPOP_CTRL3, 0xf777, 0x4737);
        regmap_update_bits(rt286->regmap, RT286_DEPOP_CTRL4, 0x00ff, 0x003f);
     
 +      if (dmi_check_system(dmi_dell_dino)) {
 +              regmap_update_bits(rt286->regmap,
 +                      RT286_SET_GPIO_MASK, 0x40, 0x40);
 +              regmap_update_bits(rt286->regmap,
 +                      RT286_SET_GPIO_DIRECTION, 0x40, 0x40);
 +              regmap_update_bits(rt286->regmap,
 +                      RT286_SET_GPIO_DATA, 0x40, 0x40);
 +              regmap_update_bits(rt286->regmap,
 +                      RT286_GPIO_CTRL, 0xc, 0x8);
 +      }
 +   
        if (rt286->i2c->irq) {
                ret = request_threaded_irq(rt286->i2c->irq, NULL, rt286_irq,
                        IRQF_TRIGGER_HIGH | IRQF_ONESHOT, "rt286", rt286);
index f7eb42aa3f3893ca7cfd76fd2f8a96ff986d68b2,1822578bbc2ca83869eb7b032079fd9b5c30286c,ccfb41c22e53b11cedbf5d8272a56a757ad283d1,ccfb41c22e53b11cedbf5d8272a56a757ad283d1,ccfb41c22e53b11cedbf5d8272a56a757ad283d1..4775da4c4db56529bbc0a6bd6be0b7b2a24370f0
@@@@@@ -142,8 -142,6 -142,8 -142,8 -142,8 +142,6 @@@@@@ static int hdmi_dai_hw_params(struct sn
     
        iec->status[0] |= IEC958_AES0_CON_EMPHASIS_NONE;
     
- ---   iec->status[0] |= IEC958_AES1_PRO_MODE_NOTID;
- ---
        iec->status[1] = IEC958_AES1_CON_GENERAL;
     
        iec->status[2] |= IEC958_AES2_CON_SOURCE_UNSPEC;
@@@@@@ -352,9 -350,6 -352,6 -352,6 -352,6 +350,9 @@@@@@ static int omap_hdmi_audio_probe(struc
                return ret;
     
        card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
 ++++   if (!card)
 ++++           return -ENOMEM;
 ++++
        card->name = devm_kasprintf(dev, GFP_KERNEL,
                                    "HDMI %s", dev_name(ad->dssdev));
        card->owner = THIS_MODULE;
diff --combined sound/soc/sh/rcar/core.c
index 31202e95be1ee6dc5fde83e44ce955347bc8109c,75308bbc2ce896e4a266ca0830cde8f5c020a225,1b53605f7154394d1746cb0a692953e296848c2a,6f60149acdbffba1568243576bb069bad63c106d,1b53605f7154394d1746cb0a692953e296848c2a..9f48d75fa992351adffef3d834620e7d2682354e
      *
      */
     #include <linux/pm_runtime.h>
--- -#include <linux/shdma-base.h>
     #include "rsnd.h"
     
     #define RSND_RATES SNDRV_PCM_RATE_8000_96000
     #define RSND_FMTS (SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S16_LE)
     
--- -static struct rsnd_of_data rsnd_of_data_gen1 = {
+++ +static const struct rsnd_of_data rsnd_of_data_gen1 = {
        .flags = RSND_GEN1,
     };
     
--- -static struct rsnd_of_data rsnd_of_data_gen2 = {
+++ +static const struct rsnd_of_data rsnd_of_data_gen2 = {
        .flags = RSND_GEN2,
     };
     
--- -static struct of_device_id rsnd_of_match[] = {
+++ +static const struct of_device_id rsnd_of_match[] = {
        { .compatible = "renesas,rcar_sound-gen1", .data = &rsnd_of_data_gen1 },
        { .compatible = "renesas,rcar_sound-gen2", .data = &rsnd_of_data_gen2 },
        {},
@@@@@@ -138,264 -138,251 -138,251 -137,39 -138,251 +137,39 @@@@@@ char *rsnd_mod_name(struct rsnd_mod *mo
        return mod->ops->name;
     }
     
--- -char *rsnd_mod_dma_name(struct rsnd_mod *mod)
+++ +struct dma_chan *rsnd_mod_dma_req(struct rsnd_mod *mod)
     {
--- -   if (!mod || !mod->ops)
--- -           return "unknown";
--- -
--- -   if (!mod->ops->dma_name)
--- -           return mod->ops->name;
+++ +   if (!mod || !mod->ops || !mod->ops->dma_req)
+++ +           return NULL;
     
--- -   return mod->ops->dma_name(mod);
+++ +   return mod->ops->dma_req(mod);
     }
     
 -   void rsnd_mod_init(struct rsnd_priv *priv,
 -                 struct rsnd_mod *mod,
  - -void rsnd_mod_init(struct rsnd_mod *mod,
 ++ +int rsnd_mod_init(struct rsnd_mod *mod,
                   struct rsnd_mod_ops *ops,
 +                 struct clk *clk,
                   enum rsnd_mod_type type,
                   int id)
     {
 -      mod->priv       = priv;
 ++ +   int ret = clk_prepare(clk);
 ++ +
 ++ +   if (ret)
 ++ +           return ret;
 ++ +
        mod->id         = id;
        mod->ops        = ops;
        mod->type       = type;
 -   }
 -   
 -   /*
 -    * rsnd_dma functions
 -    */
 -   void rsnd_dma_stop(struct rsnd_dma *dma)
 -   {
 -      dmaengine_terminate_all(dma->chan);
 -   }
 -   
 -   static void rsnd_dma_complete(void *data)
 -   {
 -      struct rsnd_dma *dma = (struct rsnd_dma *)data;
 -      struct rsnd_mod *mod = rsnd_dma_to_mod(dma);
 -      struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
 -   
 -      /*
 -       * Renesas sound Gen1 needs 1 DMAC,
 -       * Gen2 needs 2 DMAC.
 -       * In Gen2 case, it are Audio-DMAC, and Audio-DMAC-peri-peri.
 -       * But, Audio-DMAC-peri-peri doesn't have interrupt,
 -       * and this driver is assuming that here.
 -       *
 -       * If Audio-DMAC-peri-peri has interrpt,
 -       * rsnd_dai_pointer_update() will be called twice,
 -       * ant it will breaks io->byte_pos
 -       */
 -   
 -      rsnd_dai_pointer_update(io, io->byte_per_period);
 -   }
 -   
 -   void rsnd_dma_start(struct rsnd_dma *dma)
 -   {
 -      struct rsnd_mod *mod = rsnd_dma_to_mod(dma);
 -      struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
 -      struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
 -      struct snd_pcm_substream *substream = io->substream;
 -      struct device *dev = rsnd_priv_to_dev(priv);
 -      struct dma_async_tx_descriptor *desc;
 -   
 -      desc = dmaengine_prep_dma_cyclic(dma->chan,
 -                                       (dma->addr) ? dma->addr :
 -                                       substream->runtime->dma_addr,
 -                                       snd_pcm_lib_buffer_bytes(substream),
 -                                       snd_pcm_lib_period_bytes(substream),
 -                                       dma->dir,
 -                                       DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
 -   
 -      if (!desc) {
 -              dev_err(dev, "dmaengine_prep_slave_sg() fail\n");
 -              return;
 -      }
 -   
 -      desc->callback          = rsnd_dma_complete;
 -      desc->callback_param    = dma;
 -   
 -      if (dmaengine_submit(desc) < 0) {
 -              dev_err(dev, "dmaengine_submit() fail\n");
 -              return;
 -      }
 -   
 -      dma_async_issue_pending(dma->chan);
 -   }
 -   
 -   int rsnd_dma_available(struct rsnd_dma *dma)
 -   {
 -      return !!dma->chan;
 -   }
 -   
 -   #define DMA_NAME_SIZE 16
 -   #define MOD_MAX 4 /* MEM/SSI/SRC/DVC */
 -   static int _rsnd_dma_of_name(char *dma_name, struct rsnd_mod *mod)
 -   {
 -      if (mod)
 -              return snprintf(dma_name, DMA_NAME_SIZE / 2, "%s%d",
 -                       rsnd_mod_dma_name(mod), rsnd_mod_id(mod));
 -      else
 -              return snprintf(dma_name, DMA_NAME_SIZE / 2, "mem");
 -   
 -   }
 -   
 -   static void rsnd_dma_of_name(struct rsnd_mod *mod_from,
 -                           struct rsnd_mod *mod_to,
 -                           char *dma_name)
 -   {
 -      int index = 0;
 -   
 -      index = _rsnd_dma_of_name(dma_name + index, mod_from);
 -      *(dma_name + index++) = '_';
 -      index = _rsnd_dma_of_name(dma_name + index, mod_to);
 -   }
 -   
 -   static void rsnd_dma_of_path(struct rsnd_dma *dma,
 -                           int is_play,
 -                           struct rsnd_mod **mod_from,
 -                           struct rsnd_mod **mod_to)
 -   {
 -      struct rsnd_mod *this = rsnd_dma_to_mod(dma);
 -      struct rsnd_dai_stream *io = rsnd_mod_to_io(this);
 -      struct rsnd_mod *ssi = rsnd_io_to_mod_ssi(io);
 -      struct rsnd_mod *src = rsnd_io_to_mod_src(io);
 -      struct rsnd_mod *dvc = rsnd_io_to_mod_dvc(io);
 -      struct rsnd_mod *mod[MOD_MAX];
 -      int i, index;
 -   
 -   
 -      for (i = 0; i < MOD_MAX; i++)
 -              mod[i] = NULL;
 -   
 -      /*
 -       * in play case...
 -       *
 -       * src -> dst
 -       *
 -       * mem -> SSI
 -       * mem -> SRC -> SSI
 -       * mem -> SRC -> DVC -> SSI
 -       */
 -      mod[0] = NULL; /* for "mem" */
 -      index = 1;
 -      for (i = 1; i < MOD_MAX; i++) {
 -              if (!src) {
 -                      mod[i] = ssi;
 -              } else if (!dvc) {
 -                      mod[i] = src;
 -                      src = NULL;
 -              } else {
 -                      if ((!is_play) && (this == src))
 -                              this = dvc;
 -   
 -                      mod[i] = (is_play) ? src : dvc;
 -                      i++;
 -                      mod[i] = (is_play) ? dvc : src;
 -                      src = NULL;
 -                      dvc = NULL;
 -              }
 -   
 -              if (mod[i] == this)
 -                      index = i;
 -   
 -              if (mod[i] == ssi)
 -                      break;
 -      }
 +      mod->clk        = clk;
  - -}
  - -
  - -/*
  - - * rsnd_dma functions
  - - */
  - -void rsnd_dma_stop(struct rsnd_dma *dma)
  - -{
  - -   dmaengine_terminate_all(dma->chan);
  - -}
  - -
  - -static void rsnd_dma_complete(void *data)
  - -{
  - -   struct rsnd_dma *dma = (struct rsnd_dma *)data;
  - -   struct rsnd_mod *mod = rsnd_dma_to_mod(dma);
  - -   struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
  - -
  - -   /*
  - -    * Renesas sound Gen1 needs 1 DMAC,
  - -    * Gen2 needs 2 DMAC.
  - -    * In Gen2 case, it are Audio-DMAC, and Audio-DMAC-peri-peri.
  - -    * But, Audio-DMAC-peri-peri doesn't have interrupt,
  - -    * and this driver is assuming that here.
  - -    *
  - -    * If Audio-DMAC-peri-peri has interrpt,
  - -    * rsnd_dai_pointer_update() will be called twice,
  - -    * ant it will breaks io->byte_pos
  - -    */
  - -
  - -   rsnd_dai_pointer_update(io, io->byte_per_period);
  - -}
  - -
  - -void rsnd_dma_start(struct rsnd_dma *dma)
  - -{
  - -   struct rsnd_mod *mod = rsnd_dma_to_mod(dma);
  - -   struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
  - -   struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
  - -   struct snd_pcm_substream *substream = io->substream;
  - -   struct device *dev = rsnd_priv_to_dev(priv);
  - -   struct dma_async_tx_descriptor *desc;
  - -
  - -   desc = dmaengine_prep_dma_cyclic(dma->chan,
  - -                                    (dma->addr) ? dma->addr :
  - -                                    substream->runtime->dma_addr,
  - -                                    snd_pcm_lib_buffer_bytes(substream),
  - -                                    snd_pcm_lib_period_bytes(substream),
  - -                                    dma->dir,
  - -                                    DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
  - -
  - -   if (!desc) {
  - -           dev_err(dev, "dmaengine_prep_slave_sg() fail\n");
  - -           return;
  - -   }
  - -
  - -   desc->callback          = rsnd_dma_complete;
  - -   desc->callback_param    = dma;
  - -
  - -   if (dmaengine_submit(desc) < 0) {
  - -           dev_err(dev, "dmaengine_submit() fail\n");
  - -           return;
  - -   }
  - -
  - -   dma_async_issue_pending(dma->chan);
  - -}
  - -
  - -int rsnd_dma_available(struct rsnd_dma *dma)
  - -{
  - -   return !!dma->chan;
  - -}
  - -
  - -#define DMA_NAME_SIZE 16
  - -#define MOD_MAX 4 /* MEM/SSI/SRC/DVC */
  - -static int _rsnd_dma_of_name(char *dma_name, struct rsnd_mod *mod)
  - -{
  - -   if (mod)
  - -           return snprintf(dma_name, DMA_NAME_SIZE / 2, "%s%d",
  - -                    rsnd_mod_dma_name(mod), rsnd_mod_id(mod));
  - -   else
  - -           return snprintf(dma_name, DMA_NAME_SIZE / 2, "mem");
  - -
  - -}
  - -
  - -static void rsnd_dma_of_name(struct rsnd_mod *mod_from,
  - -                        struct rsnd_mod *mod_to,
  - -                        char *dma_name)
  - -{
  - -   int index = 0;
  - -
  - -   index = _rsnd_dma_of_name(dma_name + index, mod_from);
  - -   *(dma_name + index++) = '_';
  - -   index = _rsnd_dma_of_name(dma_name + index, mod_to);
  - -}
  - -
  - -static void rsnd_dma_of_path(struct rsnd_dma *dma,
  - -                        int is_play,
  - -                        struct rsnd_mod **mod_from,
  - -                        struct rsnd_mod **mod_to)
  - -{
  - -   struct rsnd_mod *this = rsnd_dma_to_mod(dma);
  - -   struct rsnd_dai_stream *io = rsnd_mod_to_io(this);
  - -   struct rsnd_mod *ssi = rsnd_io_to_mod_ssi(io);
  - -   struct rsnd_mod *src = rsnd_io_to_mod_src(io);
  - -   struct rsnd_mod *dvc = rsnd_io_to_mod_dvc(io);
  - -   struct rsnd_mod *mod[MOD_MAX];
  - -   int i, index;
  - -
  - -
  - -   for (i = 0; i < MOD_MAX; i++)
  - -           mod[i] = NULL;
     
  - -   /*
  - -    * in play case...
  - -    *
  - -    * src -> dst
  - -    *
  - -    * mem -> SSI
  - -    * mem -> SRC -> SSI
  - -    * mem -> SRC -> DVC -> SSI
  - -    */
  - -   mod[0] = NULL; /* for "mem" */
  - -   index = 1;
  - -   for (i = 1; i < MOD_MAX; i++) {
  - -           if (!src) {
  - -                   mod[i] = ssi;
  - -           } else if (!dvc) {
  - -                   mod[i] = src;
  - -                   src = NULL;
  - -           } else {
  - -                   if ((!is_play) && (this == src))
  - -                           this = dvc;
  - -
  - -                   mod[i] = (is_play) ? src : dvc;
  - -                   i++;
  - -                   mod[i] = (is_play) ? dvc : src;
  - -                   src = NULL;
  - -                   dvc = NULL;
  - -           }
  - -
  - -           if (mod[i] == this)
  - -                   index = i;
  - -
  - -           if (mod[i] == ssi)
  - -                   break;
  - -   }
  - -
 -- -   if (is_play) {
 -- -           *mod_from = mod[index - 1];
 -- -           *mod_to   = mod[index];
 -- -   } else {
 -- -           *mod_from = mod[index];
 -- -           *mod_to   = mod[index - 1];
 -- -   }
 -- -}
 -- -
 -- -int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma,
 -- -             int is_play, int id)
 -- -{
 -- -   struct device *dev = rsnd_priv_to_dev(priv);
 -- -   struct dma_slave_config cfg;
 -- -   struct rsnd_mod *mod_from;
 -- -   struct rsnd_mod *mod_to;
 -- -   char dma_name[DMA_NAME_SIZE];
 -- -   dma_cap_mask_t mask;
 -- -   int ret;
 -- -
 -- -   if (dma->chan) {
 -- -           dev_err(dev, "it already has dma channel\n");
 -- -           return -EIO;
 -- -   }
 -- -
 -- -   dma_cap_zero(mask);
 -- -   dma_cap_set(DMA_SLAVE, mask);
 -- -
 -- -   rsnd_dma_of_path(dma, is_play, &mod_from, &mod_to);
 -- -   rsnd_dma_of_name(mod_from, mod_to, dma_name);
 -- -
 -- -   cfg.slave_id    = id;
 -- -   cfg.direction   = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
 -- -   cfg.src_addr    = rsnd_gen_dma_addr(priv, mod_from, is_play, 1);
 -- -   cfg.dst_addr    = rsnd_gen_dma_addr(priv, mod_to,   is_play, 0);
 -- -   cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
 -- -   cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
 -- -
 -- -   dev_dbg(dev, "dma : %s %pad -> %pad\n",
 -- -           dma_name, &cfg.src_addr, &cfg.dst_addr);
 -- -
 -- -   dma->chan = dma_request_slave_channel_compat(mask, shdma_chan_filter,
 -- -                                                (void *)id, dev,
 -- -                                                dma_name);
 -- -   if (!dma->chan) {
 -- -           dev_err(dev, "can't get dma channel\n");
 -- -           goto rsnd_dma_channel_err;
 -- -   }
 -- -
 -- -   ret = dmaengine_slave_config(dma->chan, &cfg);
 -- -   if (ret < 0)
 -- -           goto rsnd_dma_init_err;
 -- -
 -- -   dma->addr = is_play ? cfg.src_addr : cfg.dst_addr;
 -- -   dma->dir = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
 -- -
 -- -   return 0;
 -- -
 -- -rsnd_dma_init_err:
 -- -   rsnd_dma_quit(priv, dma);
 -- -rsnd_dma_channel_err:
 -- -
 -- -   /*
 -- -    * DMA failed. try to PIO mode
 -- -    * see
 -- -    *      rsnd_ssi_fallback()
 -- -    *      rsnd_rdai_continuance_probe()
 -- -    */
 -- -   return -EAGAIN;
 ++ +   return ret;
     }
     
 -- -void  rsnd_dma_quit(struct rsnd_priv *priv,
 -- -               struct rsnd_dma *dma)
 ++ +void rsnd_mod_quit(struct rsnd_mod *mod)
     {
 -- -   if (dma->chan)
 -- -           dma_release_channel(dma->chan);
 -- -
 -- -   dma->chan = NULL;
 ++ +   if (mod->clk)
 ++ +           clk_unprepare(mod->clk);
     }
     
-    /*
-     * rsnd_dma functions
-     */
-    void rsnd_dma_stop(struct rsnd_dma *dma)
-    {
-       dmaengine_terminate_all(dma->chan);
-    }
-    
-    static void rsnd_dma_complete(void *data)
-    {
-       struct rsnd_dma *dma = (struct rsnd_dma *)data;
-       struct rsnd_mod *mod = rsnd_dma_to_mod(dma);
-       struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
-    
-       /*
-        * Renesas sound Gen1 needs 1 DMAC,
-        * Gen2 needs 2 DMAC.
-        * In Gen2 case, it are Audio-DMAC, and Audio-DMAC-peri-peri.
-        * But, Audio-DMAC-peri-peri doesn't have interrupt,
-        * and this driver is assuming that here.
-        *
-        * If Audio-DMAC-peri-peri has interrpt,
-        * rsnd_dai_pointer_update() will be called twice,
-        * ant it will breaks io->byte_pos
-        */
-    
-       rsnd_dai_pointer_update(io, io->byte_per_period);
-    }
-    
-    void rsnd_dma_start(struct rsnd_dma *dma)
-    {
-       struct rsnd_mod *mod = rsnd_dma_to_mod(dma);
-       struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
-       struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
-       struct snd_pcm_substream *substream = io->substream;
-       struct device *dev = rsnd_priv_to_dev(priv);
-       struct dma_async_tx_descriptor *desc;
-    
-       desc = dmaengine_prep_dma_cyclic(dma->chan,
-                                        (dma->addr) ? dma->addr :
-                                        substream->runtime->dma_addr,
-                                        snd_pcm_lib_buffer_bytes(substream),
-                                        snd_pcm_lib_period_bytes(substream),
-                                        dma->dir,
-                                        DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
-    
-       if (!desc) {
-               dev_err(dev, "dmaengine_prep_slave_sg() fail\n");
-               return;
-       }
-    
-       desc->callback          = rsnd_dma_complete;
-       desc->callback_param    = dma;
-    
-       if (dmaengine_submit(desc) < 0) {
-               dev_err(dev, "dmaengine_submit() fail\n");
-               return;
-       }
-    
-       dma_async_issue_pending(dma->chan);
-    }
-    
-    int rsnd_dma_available(struct rsnd_dma *dma)
-    {
-       return !!dma->chan;
-    }
-    
-    #define DMA_NAME_SIZE 16
-    #define MOD_MAX 4 /* MEM/SSI/SRC/DVC */
-    static int _rsnd_dma_of_name(char *dma_name, struct rsnd_mod *mod)
-    {
-       if (mod)
-               return snprintf(dma_name, DMA_NAME_SIZE / 2, "%s%d",
-                        rsnd_mod_dma_name(mod), rsnd_mod_id(mod));
-       else
-               return snprintf(dma_name, DMA_NAME_SIZE / 2, "mem");
-    
-    }
-    
-    static void rsnd_dma_of_name(struct rsnd_mod *mod_from,
-                            struct rsnd_mod *mod_to,
-                            char *dma_name)
-    {
-       int index = 0;
-    
-       index = _rsnd_dma_of_name(dma_name + index, mod_from);
-       *(dma_name + index++) = '_';
-       index = _rsnd_dma_of_name(dma_name + index, mod_to);
-    }
-    
-    static void rsnd_dma_of_path(struct rsnd_dma *dma,
-                            int is_play,
-                            struct rsnd_mod **mod_from,
-                            struct rsnd_mod **mod_to)
-    {
-       struct rsnd_mod *this = rsnd_dma_to_mod(dma);
-       struct rsnd_dai_stream *io = rsnd_mod_to_io(this);
-       struct rsnd_mod *ssi = rsnd_io_to_mod_ssi(io);
-       struct rsnd_mod *src = rsnd_io_to_mod_src(io);
-       struct rsnd_mod *dvc = rsnd_io_to_mod_dvc(io);
-       struct rsnd_mod *mod[MOD_MAX];
-       int i, index;
-    
-    
-       for (i = 0; i < MOD_MAX; i++)
-               mod[i] = NULL;
-    
-       /*
-        * in play case...
-        *
-        * src -> dst
-        *
-        * mem -> SSI
-        * mem -> SRC -> SSI
-        * mem -> SRC -> DVC -> SSI
-        */
-       mod[0] = NULL; /* for "mem" */
-       index = 1;
-       for (i = 1; i < MOD_MAX; i++) {
-               if (!src) {
-                       mod[i] = ssi;
-               } else if (!dvc) {
-                       mod[i] = src;
-                       src = NULL;
-               } else {
-                       if ((!is_play) && (this == src))
-                               this = dvc;
-    
-                       mod[i] = (is_play) ? src : dvc;
-                       i++;
-                       mod[i] = (is_play) ? dvc : src;
-                       src = NULL;
-                       dvc = NULL;
-               }
-    
-               if (mod[i] == this)
-                       index = i;
-    
-               if (mod[i] == ssi)
-                       break;
-       }
-    
-       if (is_play) {
-               *mod_from = mod[index - 1];
-               *mod_to   = mod[index];
-       } else {
-               *mod_from = mod[index];
-               *mod_to   = mod[index - 1];
-       }
-    }
-    
-    int rsnd_dma_init(struct rsnd_priv *priv, struct rsnd_dma *dma,
-                 int is_play, int id)
-    {
-       struct device *dev = rsnd_priv_to_dev(priv);
-       struct dma_slave_config cfg;
-       struct rsnd_mod *mod_from;
-       struct rsnd_mod *mod_to;
-       char dma_name[DMA_NAME_SIZE];
-       dma_cap_mask_t mask;
-       int ret;
-    
-       if (dma->chan) {
-               dev_err(dev, "it already has dma channel\n");
-               return -EIO;
-       }
-    
-       dma_cap_zero(mask);
-       dma_cap_set(DMA_SLAVE, mask);
-    
-       rsnd_dma_of_path(dma, is_play, &mod_from, &mod_to);
-       rsnd_dma_of_name(mod_from, mod_to, dma_name);
-    
-       cfg.slave_id    = id;
-       cfg.direction   = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
-       cfg.src_addr    = rsnd_gen_dma_addr(priv, mod_from, is_play, 1);
-       cfg.dst_addr    = rsnd_gen_dma_addr(priv, mod_to,   is_play, 0);
-       cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-       cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
-    
-       dev_dbg(dev, "dma : %s %pad -> %pad\n",
-               dma_name, &cfg.src_addr, &cfg.dst_addr);
-    
-       dma->chan = dma_request_slave_channel_compat(mask, shdma_chan_filter,
-                                                    (void *)id, dev,
-                                                    dma_name);
-       if (!dma->chan) {
-               dev_err(dev, "can't get dma channel\n");
-               goto rsnd_dma_channel_err;
-       }
-    
-       ret = dmaengine_slave_config(dma->chan, &cfg);
-       if (ret < 0)
-               goto rsnd_dma_init_err;
-    
-       dma->addr = is_play ? cfg.src_addr : cfg.dst_addr;
-       dma->dir = is_play ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM;
-    
-       return 0;
-    
-    rsnd_dma_init_err:
-       rsnd_dma_quit(priv, dma);
-    rsnd_dma_channel_err:
-    
-       /*
-        * DMA failed. try to PIO mode
-        * see
-        *      rsnd_ssi_fallback()
-        *      rsnd_rdai_continuance_probe()
-        */
-       return -EAGAIN;
-    }
-    
-    void  rsnd_dma_quit(struct rsnd_priv *priv,
-                   struct rsnd_dma *dma)
-    {
-       if (dma->chan)
-               dma_release_channel(dma->chan);
-    
-       dma->chan = NULL;
-    }
-    
     /*
      * settting function
      */
@@@@@@ -425,28 -412,28 -412,28 -199,28 -412,28 +199,28 @@@@@@ u32 rsnd_get_adinr(struct rsnd_mod *mod
     /*
      * rsnd_dai functions
      */
 -   #define __rsnd_mod_call(mod, func, rdai...)                        \
 +   #define __rsnd_mod_call(mod, func, param...)                       \
     ({                                                         \
        struct rsnd_priv *priv = rsnd_mod_to_priv(mod);         \
        struct device *dev = rsnd_priv_to_dev(priv);            \
--- -   u32 mask = 1 << __rsnd_mod_shift_##func;                        \
+++ +   u32 mask = (1 << __rsnd_mod_shift_##func) & ~(1 << 31); \
        u32 call = __rsnd_mod_call_##func << __rsnd_mod_shift_##func;   \
        int ret = 0;                                                    \
        if ((mod->status & mask) == call) {                             \
                dev_dbg(dev, "%s[%d] %s\n",                             \
                        rsnd_mod_name(mod), rsnd_mod_id(mod), #func);   \
 -              ret = (mod)->ops->func(mod, rdai);                      \
 +              ret = (mod)->ops->func(mod, param);                     \
                mod->status = (mod->status & ~mask) | (~call & mask);   \
        }                                                               \
        ret;                                                            \
     })
     
 -   #define rsnd_mod_call(mod, func, rdai...)  \
 +   #define rsnd_mod_call(mod, func, param...) \
        (!(mod) ? -ENODEV :                     \
         !((mod)->ops->func) ? 0 :              \
 -       __rsnd_mod_call(mod, func, rdai))
 +       __rsnd_mod_call(mod, func, param))
     
 -   #define rsnd_dai_call(fn, io, rdai...)                             \
 +   #define rsnd_dai_call(fn, io, param...)                            \
     ({                                                         \
        struct rsnd_mod *mod;                                   \
        int ret = 0, i;                                         \
                mod = (io)->mod[i];                             \
                if (!mod)                                       \
                        continue;                               \
 -              ret = rsnd_mod_call(mod, fn, rdai);             \
 +              ret = rsnd_mod_call(mod, fn, param);            \
                if (ret < 0)                                    \
                        break;                                  \
        }                                                       \
@@@@@@ -471,7 -458,7 -458,7 -245,7 -458,7 +245,7 @@@@@@ static int rsnd_dai_connect(struct rsnd
                struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
                struct device *dev = rsnd_priv_to_dev(priv);
     
--- -           dev_err(dev, "%s%d is not empty\n",
+++ +           dev_err(dev, "%s[%d] is not empty\n",
                        rsnd_mod_name(mod),
                        rsnd_mod_id(mod));
                return -EIO;
@@@@@@ -490,7 -477,17 -477,7 -264,7 -477,7 +264,7 @@@@@@ static void rsnd_dai_disconnect(struct 
        io->mod[mod->type] = NULL;
     }
     
 -   int rsnd_dai_id(struct rsnd_priv *priv, struct rsnd_dai *rdai)
 -   {
 -      int id = rdai - priv->rdai;
 -   
 -      if ((id < 0) || (id >= rsnd_rdai_nr(priv)))
 -              return -EINVAL;
 -   
 -      return id;
 -   }
 -   
 -   struct rsnd_dai *rsnd_dai_get(struct rsnd_priv *priv, int id)
 +   struct rsnd_dai *rsnd_rdai_get(struct rsnd_priv *priv, int id)
     {
        if ((id < 0) || (id >= rsnd_rdai_nr(priv)))
                return NULL;
@@@@@@ -502,7 -499,12 -489,7 -276,7 -489,7 +276,7 @@@@@@ static struct rsnd_dai *rsnd_dai_to_rda
     {
        struct rsnd_priv *priv = snd_soc_dai_get_drvdata(dai);
     
 -      return rsnd_dai_get(priv, dai->id);
 -   }
 -   
 -   int rsnd_dai_is_play(struct rsnd_dai *rdai, struct rsnd_dai_stream *io)
 -   {
 -      return &rdai->playback == io;
 +      return rsnd_rdai_get(priv, dai->id);
     }
     
     /*
@@@@@@ -596,20 -598,20 -583,20 -370,20 -583,20 +370,20 @@@@@@ static int rsnd_soc_dai_trigger(struct 
                if (ret < 0)
                        goto dai_trigger_end;
     
 -              ret = rsnd_dai_call(init, io, rdai);
 +              ret = rsnd_dai_call(init, io, priv);
                if (ret < 0)
                        goto dai_trigger_end;
     
 -              ret = rsnd_dai_call(start, io, rdai);
 +              ret = rsnd_dai_call(start, io, priv);
                if (ret < 0)
                        goto dai_trigger_end;
                break;
        case SNDRV_PCM_TRIGGER_STOP:
 -              ret = rsnd_dai_call(stop, io, rdai);
 +              ret = rsnd_dai_call(stop, io, priv);
                if (ret < 0)
                        goto dai_trigger_end;
     
 -              ret = rsnd_dai_call(quit, io, rdai);
 +              ret = rsnd_dai_call(quit, io, priv);
                if (ret < 0)
                        goto dai_trigger_end;
     
@@@@@@ -871,15 -873,15 -858,15 -645,15 -858,15 +645,15 @@@@@@ static int rsnd_dai_probe(struct platfo
        priv->rdai      = rdai;
     
        for (i = 0; i < dai_nr; i++) {
 -              rdai[i].info = &info->dai_info[i];
     
 -              pmod = rdai[i].info->playback.ssi;
 -              cmod = rdai[i].info->capture.ssi;
 +              pmod = info->dai_info[i].playback.ssi;
 +              cmod = info->dai_info[i].capture.ssi;
     
                /*
                 *      init rsnd_dai
                 */
                snprintf(rdai[i].name, RSND_DAI_NAME_SIZE, "rsnd-dai.%d", i);
 +              rdai[i].priv = priv;
     
                /*
                 *      init snd_soc_dai_driver
                drv[i].name     = rdai[i].name;
                drv[i].ops      = &rsnd_soc_dai_ops;
                if (pmod) {
+++ +                   snprintf(rdai[i].playback.name, RSND_DAI_NAME_SIZE,
+++ +                            "DAI%d Playback", i);
+++ +
                        drv[i].playback.rates           = RSND_RATES;
                        drv[i].playback.formats         = RSND_FMTS;
                        drv[i].playback.channels_min    = 2;
                        drv[i].playback.channels_max    = 2;
+++ +                   drv[i].playback.stream_name     = rdai[i].playback.name;
     
                        rdai[i].playback.info = &info->dai_info[i].playback;
 +                      rdai[i].playback.rdai = rdai + i;
                        rsnd_path_init(priv, &rdai[i], &rdai[i].playback);
                }
                if (cmod) {
+++ +                   snprintf(rdai[i].capture.name, RSND_DAI_NAME_SIZE,
+++ +                            "DAI%d Capture", i);
+++ +
                        drv[i].capture.rates            = RSND_RATES;
                        drv[i].capture.formats          = RSND_FMTS;
                        drv[i].capture.channels_min     = 2;
                        drv[i].capture.channels_max     = 2;
+++ +                   drv[i].capture.stream_name      = rdai[i].capture.name;
     
                        rdai[i].capture.info = &info->dai_info[i].capture;
 +                      rdai[i].capture.rdai = rdai + i;
                        rsnd_path_init(priv, &rdai[i], &rdai[i].capture);
                }
     
@@@@@@ -946,6 -946,6 -933,6 -728,15 -933,6 +728,15 @@@@@@ static int rsnd_pcm_open(struct snd_pcm
     static int rsnd_hw_params(struct snd_pcm_substream *substream,
                         struct snd_pcm_hw_params *hw_params)
     {
+++ +   struct snd_soc_dai *dai = rsnd_substream_to_dai(substream);
+++ +   struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
+++ +   struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream);
+++ +   int ret;
+++ +
+++ +   ret = rsnd_dai_call(hw_params, io, substream, hw_params);
+++ +   if (ret)
+++ +           return ret;
+++ +
        return snd_pcm_lib_malloc_pages(substream,
                                        params_buffer_bytes(hw_params));
     }
@@@@@@ -1037,6 -1037,7 -1024,6 -828,6 -1024,6 +828,6 @@@@@@ static int rsnd_kctrl_put(struct snd_kc
     }
     
     static int __rsnd_kctrl_new(struct rsnd_mod *mod,
 -                          struct rsnd_dai *rdai,
                            struct snd_soc_pcm_runtime *rtd,
                            const unsigned char *name,
                            struct rsnd_kctrl_cfg *cfg,
                return -ENOMEM;
     
        ret = snd_ctl_add(card, kctrl);
 -      if (ret < 0)
 +      if (ret < 0) {
 +              snd_ctl_free_one(kctrl);
                return ret;
 +      }
     
        cfg->update = update;
 +      cfg->card = card;
 +      cfg->kctrl = kctrl;
     
        return 0;
     }
     
 +   void _rsnd_kctrl_remove(struct rsnd_kctrl_cfg *cfg)
 +   {
 +      snd_ctl_remove(cfg->card, cfg->kctrl);
 +   }
 +   
     int rsnd_kctrl_new_m(struct rsnd_mod *mod,
 -                   struct rsnd_dai *rdai,
                     struct snd_soc_pcm_runtime *rtd,
                     const unsigned char *name,
                     void (*update)(struct rsnd_mod *mod),
        _cfg->cfg.max   = max;
        _cfg->cfg.size  = RSND_DVC_CHANNELS;
        _cfg->cfg.val   = _cfg->val;
 -      return __rsnd_kctrl_new(mod, rdai, rtd, name, &_cfg->cfg, update);
 +      return __rsnd_kctrl_new(mod, rtd, name, &_cfg->cfg, update);
     }
     
     int rsnd_kctrl_new_s(struct rsnd_mod *mod,
 -                   struct rsnd_dai *rdai,
                     struct snd_soc_pcm_runtime *rtd,
                     const unsigned char *name,
                     void (*update)(struct rsnd_mod *mod),
        _cfg->cfg.max   = max;
        _cfg->cfg.size  = 1;
        _cfg->cfg.val   = &_cfg->val;
 -      return __rsnd_kctrl_new(mod, rdai, rtd, name, &_cfg->cfg, update);
 +      return __rsnd_kctrl_new(mod, rtd, name, &_cfg->cfg, update);
     }
     
     int rsnd_kctrl_new_e(struct rsnd_mod *mod,
 -                   struct rsnd_dai *rdai,
                     struct snd_soc_pcm_runtime *rtd,
                     const unsigned char *name,
                     struct rsnd_kctrl_cfg_s *_cfg,
        _cfg->cfg.size  = 1;
        _cfg->cfg.val   = &_cfg->val;
        _cfg->cfg.texts = texts;
 -      return __rsnd_kctrl_new(mod, rdai, rtd, name, &_cfg->cfg, update);
 +      return __rsnd_kctrl_new(mod, rtd, name, &_cfg->cfg, update);
     }
     
     /*
@@@@@@ -1130,11 -1125,11 -1117,11 -921,11 -1117,11 +921,11 @@@@@@ static int rsnd_pcm_new(struct snd_soc_
        struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
        int ret;
     
 -      ret = rsnd_dai_call(pcm_new, &rdai->playback, rdai, rtd);
 +      ret = rsnd_dai_call(pcm_new, &rdai->playback, rtd);
        if (ret)
                return ret;
     
 -      ret = rsnd_dai_call(pcm_new, &rdai->capture, rdai, rtd);
 +      ret = rsnd_dai_call(pcm_new, &rdai->capture, rtd);
        if (ret)
                return ret;
     
                PREALLOC_BUFFER, PREALLOC_BUFFER_MAX);
     }
     
 -   static void rsnd_pcm_free(struct snd_pcm *pcm)
 -   {
 -      snd_pcm_lib_preallocate_free_for_all(pcm);
 -   }
 -   
     static struct snd_soc_platform_driver rsnd_soc_platform = {
        .ops            = &rsnd_pcm_ops,
        .pcm_new        = rsnd_pcm_new,
 -      .pcm_free       = rsnd_pcm_free,
     };
     
     static const struct snd_soc_component_driver rsnd_soc_component = {
     };
     
     static int rsnd_rdai_continuance_probe(struct rsnd_priv *priv,
 -                                     struct rsnd_dai *rdai,
 -                                     int is_play)
 +                                     struct rsnd_dai_stream *io)
     {
 -      struct rsnd_dai_stream *io = is_play ? &rdai->playback : &rdai->capture;
        int ret;
     
 -      ret = rsnd_dai_call(probe, io, rdai);
 +      ret = rsnd_dai_call(probe, io, priv);
        if (ret == -EAGAIN) {
                /*
                 * Fallback to PIO mode
                 *      rsnd_dma_init()
                 *      rsnd_ssi_fallback()
                 */
 -              rsnd_dai_call(remove, io, rdai);
 +              rsnd_dai_call(remove, io, priv);
     
                /*
                 * remove SRC/DVC from DAI,
                /*
                 * fallback
                 */
 -              rsnd_dai_call(fallback, io, rdai);
 +              rsnd_dai_call(fallback, io, priv);
     
                /*
                 * retry to "probe".
                 * DAI has SSI which is PIO mode only now.
                 */
 -              ret = rsnd_dai_call(probe, io, rdai);
 +              ret = rsnd_dai_call(probe, io, priv);
        }
     
        return ret;
@@@@@@ -1210,6 -1213,6 -1197,6 -1001,7 -1197,6 +1001,7 @@@@@@ static int rsnd_probe(struct platform_d
                            const struct rsnd_of_data *of_data,
                            struct rsnd_priv *priv) = {
                rsnd_gen_probe,
+++ +           rsnd_dma_probe,
                rsnd_ssi_probe,
                rsnd_src_probe,
                rsnd_dvc_probe,
        }
     
        for_each_rsnd_dai(rdai, priv, i) {
 -              ret = rsnd_rdai_continuance_probe(priv, rdai, 1);
 +              ret = rsnd_rdai_continuance_probe(priv, &rdai->playback);
                if (ret)
                        goto exit_snd_probe;
     
 -              ret = rsnd_rdai_continuance_probe(priv, rdai, 0);
 +              ret = rsnd_rdai_continuance_probe(priv, &rdai->capture);
                if (ret)
                        goto exit_snd_probe;
        }
     
 ++++   dev_set_drvdata(dev, priv);
 ++++
        /*
         *      asoc register
         */
                goto exit_snd_soc;
        }
     
 ----   dev_set_drvdata(dev, priv);
 ----
        pm_runtime_enable(dev);
     
        dev_info(dev, "probed\n");
@@@@@@ -1292,8 -1295,8 -1279,8 -1084,8 -1279,8 +1084,8 @@@@@@ exit_snd_soc
        snd_soc_unregister_platform(dev);
     exit_snd_probe:
        for_each_rsnd_dai(rdai, priv, i) {
 -              rsnd_dai_call(remove, &rdai->playback, rdai);
 -              rsnd_dai_call(remove, &rdai->capture, rdai);
 +              rsnd_dai_call(remove, &rdai->playback, priv);
 +              rsnd_dai_call(remove, &rdai->capture, priv);
        }
     
        return ret;
@@@@@@ -1303,27 -1306,15 -1290,18 -1095,27 -1290,18 +1095,27 @@@@@@ static int rsnd_remove(struct platform_
     {
        struct rsnd_priv *priv = dev_get_drvdata(&pdev->dev);
        struct rsnd_dai *rdai;
 ++ +   void (*remove_func[])(struct platform_device *pdev,
 ++ +                         struct rsnd_priv *priv) = {
 ++ +           rsnd_ssi_remove,
 ++ +           rsnd_src_remove,
 ++ +           rsnd_dvc_remove,
 ++ +   };
        int ret = 0, i;
     
        pm_runtime_disable(&pdev->dev);
     
        for_each_rsnd_dai(rdai, priv, i) {
 -              ret |= rsnd_dai_call(remove, &rdai->playback, rdai);
 -              ret |= rsnd_dai_call(remove, &rdai->capture, rdai);
 +              ret |= rsnd_dai_call(remove, &rdai->playback, priv);
 +              ret |= rsnd_dai_call(remove, &rdai->capture, priv);
        }
     
 ++ +   for (i = 0; i < ARRAY_SIZE(remove_func); i++)
 ++ +           remove_func[i](pdev, priv);
 ++ +
 +      snd_soc_unregister_component(&pdev->dev);
 +      snd_soc_unregister_platform(&pdev->dev);
 +   
        return ret;
     }