Merge branch 'i2c/for-4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 20 May 2016 00:48:12 +0000 (17:48 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 20 May 2016 00:48:12 +0000 (17:48 -0700)
Pull i2c updates from Wolfram Sang:

 - Peter Rosin did some major rework on the locking of i2c muxes by
   seperating parent-locked muxes and mux-locked muxes.

   This avoids deadlocks/workarounds when the mux itself needs i2c
   commands for muxing.  And as a side-effect, other workarounds in the
   media layer could be eliminated.  Also, Peter stepped up as the i2c
   mux maintainer and will keep an eye on these changes.

 - major updates to the octeon driver

 - add a helper to the core to generate the address+rw_bit octal and
   make drivers use it

 - quite a bunch of driver updates

* 'i2c/for-4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (84 commits)
  i2c: rcar: add DMA support
  i2c: st: Implement bus clear
  i2c: only check scl functions when using generic recovery
  i2c: algo-bit: declare i2c_bit_quirk_no_clk_stretch as static
  i2c: tegra: disable clock before returning error
  [media] rtl2832: regmap is aware of lockdep, drop local locking hack
  [media] rtl2832_sdr: get rid of empty regmap wrappers
  [media] rtl2832: change the i2c gate to be mux-locked
  [media] si2168: change the i2c gate to be mux-locked
  iio: imu: inv_mpu6050: change the i2c gate to be mux-locked
  i2c: mux: document i2c muxes and elaborate on parent-/mux-locked muxes
  i2c: mux: relax locking of the top i2c adapter during mux-locked muxing
  i2c: muxes always lock the parent adapter
  i2c: allow adapter drivers to override the adapter locking
  i2c: uniphier: add "\n" at the end of error log
  i2c: mv64xxx: remove CONFIG_HAVE_CLK conditionals
  i2c: mv64xxx: use clk_{prepare_enable,disable_unprepare}
  i2c: mv64xxx: handle probe deferral for the clock
  i2c: mv64xxx: enable the driver on ARCH_MVEBU
  i2c: octeon: Add workaround for broken irqs on CN3860
  ...

1  2 
MAINTAINERS
drivers/i2c/busses/Kconfig
drivers/i2c/busses/i2c-cpm.c
drivers/i2c/busses/i2c-exynos5.c
drivers/i2c/busses/i2c-rk3x.c
drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c
drivers/media/dvb-frontends/m88ds3103_priv.h
drivers/media/usb/cx231xx/cx231xx-core.c

diff --combined MAINTAINERS
index 0d4f9a1c7ce4d994f024b0ea445a82c2b26afaf4,1a8b11f920e6600d063bd9b26a868a5e1e16cd77..65f3277a8cf0ca4f1322a119943e4ebdace08ad5
@@@ -627,7 -627,6 +627,7 @@@ F: include/linux/altera_jtaguart.
  
  AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER
  M:    Tom Lendacky <thomas.lendacky@amd.com>
 +M:    Gary Hook <gary.hook@amd.com>
  L:    linux-crypto@vger.kernel.org
  S:    Supported
  F:    drivers/crypto/ccp/
@@@ -873,9 -872,9 +873,9 @@@ F: drivers/perf/arm_pmu.
  F:    include/linux/perf/arm_pmu.h
  
  ARM PORT
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -W:    http://www.arm.linux.org.uk/
 +W:    http://www.armlinux.org.uk/
  S:    Maintained
  F:    arch/arm/
  
@@@ -887,35 -886,35 +887,35 @@@ F:      arch/arm/plat-*
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git
  
  ARM PRIMECELL AACI PL041 DRIVER
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  S:    Maintained
  F:    sound/arm/aaci.*
  
  ARM PRIMECELL CLCD PL110 DRIVER
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  S:    Maintained
  F:    drivers/video/fbdev/amba-clcd.*
  
  ARM PRIMECELL KMI PL050 DRIVER
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  S:    Maintained
  F:    drivers/input/serio/ambakmi.*
  F:    include/linux/amba/kmi.h
  
  ARM PRIMECELL MMCI PL180/1 DRIVER
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  S:    Maintained
  F:    drivers/mmc/host/mmci.*
  F:    include/linux/amba/mmci.h
  
  ARM PRIMECELL UART PL010 AND PL011 DRIVERS
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  S:    Maintained
  F:    drivers/tty/serial/amba-pl01*.c
  F:    include/linux/amba/serial.h
  
  ARM PRIMECELL BUS SUPPORT
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  S:    Maintained
  F:    drivers/amba/
  F:    include/linux/amba/bus.h
@@@ -949,15 -948,12 +949,15 @@@ F:      drivers/clk/sunxi
  
  ARM/Amlogic Meson SoC support
  M:    Carlo Caione <carlo@caione.org>
 +M:    Kevin Hilman <khilman@baylibre.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -L:    linux-meson@googlegroups.com
 +L:    linux-amlogic@lists.infradead.org
  W:    http://linux-meson.com/
  S:    Maintained
  F:    arch/arm/mach-meson/
  F:    arch/arm/boot/dts/meson*
 +F:    arch/arm64/boot/dts/amlogic/
 +F:    drivers/pinctrl/meson/
  N:    meson
  
  ARM/Annapurna Labs ALPINE ARCHITECTURE
@@@ -979,13 -975,6 +979,13 @@@ F:       arch/arm/mach-artpe
  F:    arch/arm/boot/dts/artpec6*
  F:    drivers/clk/clk-artpec6.c
  
 +ARM/ASPEED MACHINE SUPPORT
 +M:    Joel Stanley <joel@jms.id.au>
 +S:    Maintained
 +F:    arch/arm/mach-aspeed/
 +F:    arch/arm/boot/dts/aspeed-*
 +F:    drivers/*/*aspeed*
 +
  ARM/ATMEL AT91RM9200, AT91SAM9 AND SAMA5 SOC SUPPORT
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  M:    Alexandre Belloni <alexandre.belloni@free-electrons.com>
@@@ -1047,7 -1036,7 +1047,7 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  
  ARM/CLKDEV SUPPORT
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/include/asm/clkdev.h
@@@ -1104,9 -1093,9 +1104,9 @@@ F:      arch/arm/boot/dts/cx92755
  N:    digicolor
  
  ARM/EBSA110 MACHINE SUPPORT
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -W:    http://www.arm.linux.org.uk/
 +W:    http://www.armlinux.org.uk/
  S:    Maintained
  F:    arch/arm/mach-ebsa110/
  F:    drivers/net/ethernet/amd/am79c961a.*
@@@ -1135,9 -1124,9 +1135,9 @@@ T:      git git://git.berlios.de/gemini-boar
  F:    arch/arm/mm/*-fa*
  
  ARM/FOOTBRIDGE ARCHITECTURE
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -W:    http://www.arm.linux.org.uk/
 +W:    http://www.armlinux.org.uk/
  S:    Maintained
  F:    arch/arm/include/asm/hardware/dec21285.h
  F:    arch/arm/mach-footbridge/
@@@ -1271,7 -1260,7 +1271,7 @@@ M:      Santosh Shilimkar <ssantosh@kernel.o
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-keystone/
 -F:    arch/arm/boot/dts/k2*
 +F:    arch/arm/boot/dts/keystone-*
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git
  
  ARM/TEXAS INSTRUMENT KEYSTONE CLOCK FRAMEWORK
@@@ -1299,12 -1288,6 +1299,12 @@@ L:    linux-kernel@vger.kernel.or
  S:    Maintained
  F:    drivers/memory/*emif*
  
 +ARM/LG1K ARCHITECTURE
 +M:    Chanho Min <chanho.min@lge.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm64/boot/dts/lg/
 +
  ARM/LOGICPD PXA270 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1323,25 -1306,11 +1323,25 @@@ F:   drivers/mtd/spi-nor/nxp-spifi.
  F:    drivers/rtc/rtc-lpc24xx.c
  N:    lpc18xx
  
 +ARM/LPC32XX SOC SUPPORT
 +M:    Vladimir Zapolskiy <vz@mleia.com>
 +M:    Sylvain Lemieux <slemieux.tyco@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +T:    git git://github.com/vzapolskiy/linux-lpc32xx.git
 +S:    Maintained
 +F:    arch/arm/boot/dts/lpc32*
 +F:    arch/arm/mach-lpc32xx/
 +F:    drivers/i2c/busses/i2c-pnx.c
 +F:    drivers/net/ethernet/nxp/lpc_eth.c
 +F:    drivers/usb/host/ohci-nxp.c
 +F:    drivers/watchdog/pnx4008_wdt.c
 +N:    lpc32xx
 +
  ARM/MAGICIAN MACHINE SUPPORT
  M:    Philipp Zabel <philipp.zabel@gmail.com>
  S:    Maintained
  
 -ARM/Marvell Kirkwood and Armada 370, 375, 38x, XP SOC support
 +ARM/Marvell Kirkwood and Armada 370, 375, 38x, 39x, XP, 3700, 7K/8K SOC support
  M:    Jason Cooper <jason@lakedaemon.net>
  M:    Andrew Lunn <andrew@lunn.ch>
  M:    Gregory Clement <gregory.clement@free-electrons.com>
@@@ -1353,8 -1322,7 +1353,8 @@@ F:      drivers/rtc/rtc-armada38x.
  F:    arch/arm/boot/dts/armada*
  F:    arch/arm/boot/dts/kirkwood*
  F:    arch/arm64/boot/dts/marvell/armada*
 -
 +F:    drivers/cpufreq/mvebu-cpufreq.c
 +F:    arch/arm/configs/mvebu_*_defconfig
  
  ARM/Marvell Berlin SoC support
  M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
@@@ -1387,15 -1355,6 +1387,15 @@@ W:    http://www.digriz.org.uk/ts78xx/kern
  S:    Maintained
  F:    arch/arm/mach-orion5x/ts78xx-*
  
 +ARM/OXNAS platform support
 +M:    Neil Armstrong <narmstrong@baylibre.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/mach-oxnas/
 +F:    arch/arm/boot/dts/oxnas*
 +F:    arch/arm/boot/dts/wd-mbwe.dts
 +N:    oxnas
 +
  ARM/Mediatek RTC DRIVER
  M:    Eddie Huang <eddie.huang@mediatek.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1498,7 -1457,7 +1498,7 @@@ S:      Maintaine
  ARM/PT DIGITAL BOARD PORT
  M:    Stefan Eletzhofer <stefan.eletzhofer@eletztrick.de>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -W:    http://www.arm.linux.org.uk/
 +W:    http://www.armlinux.org.uk/
  S:    Maintained
  
  ARM/QUALCOMM SUPPORT
@@@ -1511,10 -1470,7 +1511,10 @@@ F:    arch/arm/boot/dts/qcom-*.dt
  F:    arch/arm/boot/dts/qcom-*.dtsi
  F:    arch/arm/mach-qcom/
  F:    arch/arm64/boot/dts/qcom/*
 +F:    drivers/i2c/busses/i2c-qup.c
 +F:    drivers/clk/qcom/
  F:    drivers/soc/qcom/
 +F:    drivers/spi/spi-qup.c
  F:    drivers/tty/serial/msm_serial.h
  F:    drivers/tty/serial/msm_serial.c
  F:    drivers/*/pm8???-*
@@@ -1535,13 -1491,11 +1535,13 @@@ Q:   http://patchwork.kernel.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
  S:    Supported
  F:    arch/arm64/boot/dts/renesas/
 +F:    drivers/soc/renesas/
 +F:    include/linux/soc/renesas/
  
  ARM/RISCPC ARCHITECTURE
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -W:    http://www.arm.linux.org.uk/
 +W:    http://www.armlinux.org.uk/
  S:    Maintained
  F:    arch/arm/include/asm/hardware/entry-macro-iomd.S
  F:    arch/arm/include/asm/hardware/ioc.h
@@@ -1586,7 -1540,6 +1586,7 @@@ F:      arch/arm/mach-s5p*
  F:    arch/arm/mach-exynos*/
  F:    drivers/*/*s3c2410*
  F:    drivers/*/*/*s3c2410*
 +F:    drivers/memory/samsung/*
  F:    drivers/soc/samsung/*
  F:    drivers/spi/spi-s3c*
  F:    sound/soc/samsung/*
@@@ -1651,8 -1604,6 +1651,8 @@@ F:      arch/arm/configs/shmobile_defconfi
  F:    arch/arm/include/debug/renesas-scif.S
  F:    arch/arm/mach-shmobile/
  F:    drivers/sh/
 +F:    drivers/soc/renesas/
 +F:    include/linux/soc/renesas/
  
  ARM/SOCFPGA ARCHITECTURE
  M:    Dinh Nguyen <dinguyen@opensource.altera.com>
@@@ -1687,7 -1638,6 +1687,7 @@@ F:      arch/arm/boot/dts/sti
  F:    drivers/char/hw_random/st-rng.c
  F:    drivers/clocksource/arm_global_timer.c
  F:    drivers/clocksource/clksrc_st_lpc.c
 +F:    drivers/cpufreq/sti-cpufreq.c
  F:    drivers/i2c/busses/i2c-st.c
  F:    drivers/media/rc/st_rc.c
  F:    drivers/media/platform/sti/c8sectpfe/
@@@ -1697,7 -1647,6 +1697,7 @@@ F:      drivers/phy/phy-miphy365x.
  F:    drivers/phy/phy-stih407-usb.c
  F:    drivers/phy/phy-stih41x-usb.c
  F:    drivers/pinctrl/pinctrl-st.c
 +F:    drivers/remoteproc/st_remoteproc.c
  F:    drivers/reset/sti/
  F:    drivers/rtc/rtc-st-lpc.c
  F:    drivers/tty/serial/st-asc.c
@@@ -1822,12 -1771,11 +1822,12 @@@ F:   */*/vexpress
  F:    */*/*/vexpress*
  F:    drivers/clk/versatile/clk-vexpress-osc.c
  F:    drivers/clocksource/versatile.c
 +N:    mps2
  
  ARM/VFP SUPPORT
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -W:    http://www.arm.linux.org.uk/
 +W:    http://www.armlinux.org.uk/
  S:    Maintained
  F:    arch/arm/vfp/
  
@@@ -2255,13 -2203,10 +2255,13 @@@ BATMAN ADVANCE
  M:    Marek Lindner <mareklindner@neomailbox.ch>
  M:    Simon Wunderlich <sw@simonwunderlich.de>
  M:    Antonio Quartulli <a@unstable.cc>
 -L:    b.a.t.m.a.n@lists.open-mesh.org
 +L:    b.a.t.m.a.n@lists.open-mesh.org (moderated for non-subscribers)
  W:    https://www.open-mesh.org/
  Q:    https://patchwork.open-mesh.org/project/batman/list/
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-class-net-batman-adv
 +F:    Documentation/ABI/testing/sysfs-class-net-mesh
 +F:    Documentation/networking/batman-adv.txt
  F:    net/batman-adv/
  
  BAYCOM/HDLCDRV DRIVERS FOR AX.25
@@@ -2976,7 -2921,7 +2976,7 @@@ F:      mm/cleancache.
  F:    include/linux/cleancache.h
  
  CLK API
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    linux-clk@vger.kernel.org
  S:    Maintained
  F:    include/linux/clk.h
@@@ -3403,16 -3348,15 +3403,16 @@@ F:   Documentation/powerpc/cxlflash.tx
  
  STMMAC ETHERNET DRIVER
  M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
 +M:    Alexandre Torgue <alexandre.torgue@st.com>
  L:    netdev@vger.kernel.org
  W:    http://www.stlinux.com
  S:    Supported
  F:    drivers/net/ethernet/stmicro/stmmac/
  
  CYBERPRO FB DRIVER
 -M:    Russell King <linux@arm.linux.org.uk>
 +M:    Russell King <linux@armlinux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -W:    http://www.arm.linux.org.uk/
 +W:    http://www.armlinux.org.uk/
  S:    Maintained
  F:    drivers/video/fbdev/cyber2000fb.*
  
@@@ -3595,15 -3539,6 +3595,15 @@@ F:    drivers/devfreq/devfreq-event.
  F:    include/linux/devfreq-event.h
  F:    Documentation/devicetree/bindings/devfreq/event/
  
 +BUS FREQUENCY DRIVER FOR SAMSUNG EXYNOS
 +M:    Chanwoo Choi <cw00.choi@samsung.com>
 +L:    linux-pm@vger.kernel.org
 +L:    linux-samsung-soc@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mzx/devfreq.git
 +S:    Maintained
 +F:    drivers/devfreq/exynos-bus.c
 +F:    Documentation/devicetree/bindings/devfreq/exynos-bus.txt
 +
  DEVICE NUMBER REGISTRY
  M:    Torben Mathiasen <device@lanana.org>
  W:    http://lanana.org/docs/device-list/index.html
@@@ -3946,7 -3881,7 +3946,7 @@@ F:      Documentation/devicetree/bindings/di
  
  DRM DRIVERS FOR VIVANTE GPU IP
  M:    Lucas Stach <l.stach@pengutronix.de>
 -R:    Russell King <linux+etnaviv@arm.linux.org.uk>
 +R:    Russell King <linux+etnaviv@armlinux.org.uk>
  R:    Christian Gmeiner <christian.gmeiner@gmail.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
@@@ -4288,8 -4223,8 +4288,8 @@@ F:      Documentation/efi-stub.tx
  F:    arch/ia64/kernel/efi.c
  F:    arch/x86/boot/compressed/eboot.[ch]
  F:    arch/x86/include/asm/efi.h
 -F:    arch/x86/platform/efi/*
 -F:    drivers/firmware/efi/*
 +F:    arch/x86/platform/efi/
 +F:    drivers/firmware/efi/
  F:    include/linux/efi*.h
  
  EFI VARIABLE FILESYSTEM
@@@ -4444,12 -4379,6 +4444,12 @@@ S:    Maintaine
  F:    drivers/video/fbdev/exynos/exynos_mipi*
  F:    include/video/exynos_mipi*
  
 +EZchip NPS platform support
 +M:    Noam Camus <noamc@ezchip.com>
 +S:    Supported
 +F:    arch/arc/plat-eznps
 +F:    arch/arc/boot/dts/eznps.dts
 +
  F71805F HARDWARE MONITORING DRIVER
  M:    Jean Delvare <jdelvare@suse.com>
  L:    linux-hwmon@vger.kernel.org
@@@ -4732,7 -4661,6 +4732,7 @@@ FREESCALE SOC SOUND DRIVER
  M:    Timur Tabi <timur@tabi.org>
  M:    Nicolin Chen <nicoleotsuka@gmail.com>
  M:    Xiubo Li <Xiubo.Lee@gmail.com>
 +R:    Fabio Estevam <fabio.estevam@nxp.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
@@@ -4816,7 -4744,7 +4816,7 @@@ F:      drivers/platform/x86/fujitsu-tablet.
  
  FUSE: FILESYSTEM IN USERSPACE
  M:    Miklos Szeredi <miklos@szeredi.hu>
 -L:    fuse-devel@lists.sourceforge.net
 +L:    linux-fsdevel@vger.kernel.org
  W:    http://fuse.sourceforge.net/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git
  S:    Maintained
@@@ -4956,7 -4884,6 +4956,7 @@@ M:      Alexandre Courbot <gnurou@gmail.com
  L:    linux-gpio@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
  S:    Maintained
 +F:    Documentation/devicetree/bindings/gpio/
  F:    Documentation/gpio/
  F:    Documentation/ABI/testing/gpio-cdev
  F:    Documentation/ABI/obsolete/sysfs-gpio
@@@ -4976,7 -4903,7 +4976,7 @@@ F:      net/ipv4/gre_offload.
  F:    include/net/gre.h
  
  GRETH 10/100/1G Ethernet MAC device driver
 -M:    Kristoffer Glembo <kristoffer@gaisler.com>
 +M:    Andreas Larsson <andreas@gaisler.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/ethernet/aeroflex/
@@@ -5348,6 -5275,7 +5348,7 @@@ I2C MUXE
  M:    Peter Rosin <peda@axentia.se>
  L:    linux-i2c@vger.kernel.org
  S:    Maintained
+ F:    Documentation/i2c/i2c-topology
  F:    Documentation/i2c/muxes/
  F:    Documentation/devicetree/bindings/i2c/i2c-mux*
  F:    drivers/i2c/i2c-mux.c
@@@ -5817,6 -5745,13 +5818,6 @@@ F:     drivers/char/hw_random/ixp4xx-rng.
  
  INTEL ETHERNET DRIVERS
  M:    Jeff Kirsher <jeffrey.t.kirsher@intel.com>
 -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:    Bruce Allan <bruce.w.allan@intel.com>
 -R:    John Ronciak <john.ronciak@intel.com>
 -R:    Mitch Williams <mitch.a.williams@intel.com>
  L:    intel-wired-lan@lists.osuosl.org (moderated for non-subscribers)
  W:    http://www.intel.com/support/feedback.htm
  W:    http://e1000.sourceforge.net/
@@@ -6093,7 -6028,7 +6094,7 @@@ F:      include/scsi/*iscsi
  
  ISCSI EXTENSIONS FOR RDMA (ISER) INITIATOR
  M:    Or Gerlitz <ogerlitz@mellanox.com>
 -M:    Sagi Grimberg <sagig@mellanox.com>
 +M:    Sagi Grimberg <sagi@grimberg.me>
  M:    Roi Dayan <roid@mellanox.com>
  L:    linux-rdma@vger.kernel.org
  S:    Supported
@@@ -6103,7 -6038,7 +6104,7 @@@ Q:      http://patchwork.kernel.org/project/
  F:    drivers/infiniband/ulp/iser/
  
  ISCSI EXTENSIONS FOR RDMA (ISER) TARGET
 -M:    Sagi Grimberg <sagig@mellanox.com>
 +M:    Sagi Grimberg <sagi@grimberg.me>
  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
@@@ -6318,8 -6253,8 +6319,8 @@@ S:      Maintaine
  F:    tools/testing/selftests
  
  KERNEL VIRTUAL MACHINE (KVM)
 -M:    Gleb Natapov <gleb@kernel.org>
  M:    Paolo Bonzini <pbonzini@redhat.com>
 +M:    Radim Krčmář <rkrcmar@redhat.com>
  L:    kvm@vger.kernel.org
  W:    http://www.linux-kvm.org
  T:    git git://git.kernel.org/pub/scm/virt/kvm/kvm.git
@@@ -6466,7 -6401,7 +6467,7 @@@ F:      mm/kmemleak.
  F:    mm/kmemleak-test.c
  
  KPROBES
 -M:    Ananth N Mavinakayanahalli <ananth@in.ibm.com>
 +M:    Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
  M:    Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
  M:    "David S. Miller" <davem@davemloft.net>
  M:    Masami Hiramatsu <mhiramat@kernel.org>
@@@ -6492,7 -6427,7 +6493,7 @@@ F:      net/l3mde
  F:    include/net/l3mdev.h
  
  LANTIQ MIPS ARCHITECTURE
 -M:    John Crispin <blogic@openwrt.org>
 +M:    John Crispin <john@phrozen.org>
  L:    linux-mips@linux-mips.org
  S:    Maintained
  F:    arch/mips/lantiq
@@@ -6754,7 -6689,6 +6755,7 @@@ F:      kernel/livepatch
  F:    include/linux/livepatch.h
  F:    arch/x86/include/asm/livepatch.h
  F:    arch/x86/kernel/livepatch.c
 +F:    Documentation/livepatch/
  F:    Documentation/ABI/testing/sysfs-kernel-livepatch
  F:    samples/livepatch/
  L:    live-patching@vger.kernel.org
@@@ -6843,6 -6777,12 +6844,6 @@@ W:     logfs.or
  S:    Maintained
  F:    fs/logfs/
  
 -LPC32XX MACHINE SUPPORT
 -M:    Roland Stigge <stigge@antcom.de>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-lpc32xx/
 -
  LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
  M:    Sathya Prakash <sathya.prakash@broadcom.com>
  M:    Chaitra P B <chaitra.basappa@broadcom.com>
@@@ -6966,7 -6906,7 +6967,7 @@@ L:      linux-man@vger.kernel.or
  S:    Maintained
  
  MARVELL ARMADA DRM SUPPORT
 -M:    Russell King <rmk+kernel@arm.linux.org.uk>
 +M:    Russell King <rmk+kernel@armlinux.org.uk>
  S:    Maintained
  F:    drivers/gpu/drm/armada/
  
@@@ -7081,9 -7021,9 +7082,9 @@@ 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/*/max14577*.c
  F:    drivers/*/max77686*.c
 -F:    drivers/*/max77693.c
 +F:    drivers/*/max77693*.c
  F:    drivers/extcon/extcon-max14577.c
  F:    drivers/extcon/extcon-max77693.c
  F:    drivers/rtc/rtc-max77686.c
@@@ -7333,15 -7273,6 +7334,15 @@@ S:    Supporte
  F:    Documentation/mips/
  F:    arch/mips/
  
 +MIPS/LOONGSON1 ARCHITECTURE
 +M:    Keguang Zhang <keguang.zhang@gmail.com>
 +L:    linux-mips@linux-mips.org
 +S:    Maintained
 +F:    arch/mips/loongson32/
 +F:    arch/mips/include/asm/mach-loongson32/
 +F:    drivers/*/*loongson1*
 +F:    drivers/*/*/*loongson1*
 +
  MIROSOUND PCM20 FM RADIO RECEIVER DRIVER
  M:    Hans Verkuil <hverkuil@xs4all.nl>
  L:    linux-media@vger.kernel.org
@@@ -7609,10 -7540,10 +7610,10 @@@ M:   Michael Schmitz <schmitzmic@gmail.co
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
  F:    Documentation/scsi/g_NCR5380.txt
 +F:    Documentation/scsi/dtc3x80.txt
  F:    drivers/scsi/NCR5380.*
  F:    drivers/scsi/arm/cumana_1.c
  F:    drivers/scsi/arm/oak.c
 -F:    drivers/scsi/atari_NCR5380.c
  F:    drivers/scsi/atari_scsi.*
  F:    drivers/scsi/dmx3191d.c
  F:    drivers/scsi/dtc.*
@@@ -7975,7 -7906,7 +7976,7 @@@ S:      Supporte
  F:    drivers/nfc/nxp-nci
  
  NXP TDA998X DRM DRIVER
 -M:    Russell King <rmk+kernel@arm.linux.org.uk>
 +M:    Russell King <rmk+kernel@armlinux.org.uk>
  S:    Supported
  F:    drivers/gpu/drm/i2c/tda998x_drv.c
  F:    include/drm/i2c/tda998x.h
@@@ -8048,7 -7979,7 +8049,7 @@@ F:      arch/arm/*omap*/*pm
  F:    drivers/cpufreq/omap-cpufreq.c
  
  OMAP POWERDOMAIN SOC ADAPTATION LAYER SUPPORT
 -M:    Rajendra Nayak <rnayak@ti.com>
 +M:    Rajendra Nayak <rnayak@codeaurora.org>
  M:    Paul Walmsley <paul@pwsan.com>
  L:    linux-omap@vger.kernel.org
  S:    Maintained
@@@ -9261,7 -9192,7 +9262,7 @@@ S:      Maintaine
  F:    drivers/video/fbdev/aty/aty128fb.c
  
  RALINK MIPS ARCHITECTURE
 -M:    John Crispin <blogic@openwrt.org>
 +M:    John Crispin <john@phrozen.org>
  L:    linux-mips@linux-mips.org
  S:    Maintained
  F:    arch/mips/ralink
@@@ -9559,7 -9490,7 +9560,7 @@@ F:      drivers/net/wireless/realtek/rtlwifi
  RTL8XXXU WIRELESS DRIVER (rtl8xxxu)
  M:    Jes Sorensen <Jes.Sorensen@redhat.com>
  L:    linux-wireless@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jes/linux.git rtl8723au-mac80211
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jes/linux.git rtl8xxxu-devel
  S:    Maintained
  F:    drivers/net/wireless/realtek/rtl8xxxu/
  
@@@ -10041,12 -9972,6 +10042,12 @@@ T:  git git://git.kernel.org/pub/scm/lin
  S:    Supported
  F:    security/apparmor/
  
 +LOADPIN SECURITY MODULE
 +M:    Kees Cook <keescook@chromium.org>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git lsm/loadpin
 +S:    Supported
 +F:    security/loadpin/
 +
  YAMA SECURITY MODULE
  M:    Kees Cook <keescook@chromium.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git yama/tip
@@@ -10090,8 -10015,7 +10091,8 @@@ F:   drivers/infiniband/hw/ocrdma
  
  SFC NETWORK DRIVER
  M:    Solarflare linux maintainers <linux-net-drivers@solarflare.com>
 -M:    Shradha Shah <sshah@solarflare.com>
 +M:    Edward Cree <ecree@solarflare.com>
 +M:    Bert Kenward <bkenward@solarflare.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/sfc/
@@@ -10237,8 -10161,8 +10238,8 @@@ F:   arch/arm/mach-s3c24xx/bast-irq.
  TI DAVINCI MACHINE SUPPORT
  M:    Sekhar Nori <nsekhar@ti.com>
  M:    Kevin Hilman <khilman@kernel.org>
 -T:    git git://gitorious.org/linux-davinci/linux-davinci.git
 -Q:    http://patchwork.kernel.org/project/linux-davinci/list/
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci.git
  S:    Supported
  F:    arch/arm/mach-davinci/
  F:    drivers/i2c/busses/i2c-davinci.c
@@@ -11018,11 -10942,10 +11019,11 @@@ M:        Prashant Gaikwad <pgaikwad@nvidia.co
  S:    Supported
  F:    drivers/clk/tegra/
  
 -TEGRA DMA DRIVER
 +TEGRA DMA DRIVERS
  M:    Laxman Dewangan <ldewangan@nvidia.com>
 +M:    Jon Hunter <jonathanh@nvidia.com>
  S:    Supported
 -F:    drivers/dma/tegra20-apb-dma.c
 +F:    drivers/dma/tegra*
  
  TEGRA I2C DRIVER
  M:    Laxman Dewangan <ldewangan@nvidia.com>
@@@ -11149,15 -11072,6 +11150,15 @@@ S: Maintaine
  F:    drivers/clk/ti/
  F:    include/linux/clk/ti.h
  
 +TI ETHERNET SWITCH DRIVER (CPSW)
 +M:    Mugunthan V N <mugunthanvnm@ti.com>
 +R:    Grygorii Strashko <grygorii.strashko@ti.com>
 +L:    linux-omap@vger.kernel.org
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/ethernet/ti/cpsw*
 +F:    drivers/net/ethernet/ti/davinci*
 +
  TI FLASH MEDIA INTERFACE DRIVER
  M:    Alex Dubov <oakad@yahoo.com>
  S:    Maintained
@@@ -11323,13 -11237,14 +11324,13 @@@ S:        Maintaine
  F:    drivers/media/i2c/tc358743*
  F:    include/media/i2c/tc358743.h
  
 -TMIO MMC DRIVER
 -M:    Ian Molton <ian@mnementh.co.uk>
 +TMIO/SDHI MMC DRIVER
 +M:    Wolfram Sang <wsa+renesas@sang-engineering.com>
  L:    linux-mmc@vger.kernel.org
 -S:    Maintained
 +S:    Supported
  F:    drivers/mmc/host/tmio_mmc*
  F:    drivers/mmc/host/sh_mobile_sdhi.c
 -F:    include/linux/mmc/tmio.h
 -F:    include/linux/mmc/sh_mobile_sdhi.h
 +F:    include/linux/mfd/tmio.h
  
  TMP401 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
@@@ -11361,14 -11276,6 +11362,14 @@@ W: https://linuxtv.or
  S:    Odd Fixes
  F:    drivers/media/pci/tw68/
  
 +TW686X VIDEO4LINUX DRIVER
 +M:    Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +W:    http://linuxtv.org
 +S:    Maintained
 +F:    drivers/media/pci/tw686x/
 +
  TPM DEVICE DRIVER
  M:    Peter Huewe <peterhuewe@gmx.de>
  M:    Marcel Selhorst <tpmdd@selhorst.net>
@@@ -11402,20 -11309,6 +11403,20 @@@ F: include/trace
  F:    kernel/trace/
  F:    tools/testing/selftests/ftrace/
  
 +TRACING MMIO ACCESSES (MMIOTRACE)
 +M:    Steven Rostedt <rostedt@goodmis.org>
 +M:    Ingo Molnar <mingo@kernel.org>
 +R:    Karol Herbst <karolherbst@gmail.com>
 +R:    Pekka Paalanen <ppaalanen@gmail.com>
 +S:    Maintained
 +L:    linux-kernel@vger.kernel.org
 +L:    nouveau@lists.freedesktop.org
 +F:    kernel/trace/trace_mmiotrace.c
 +F:    include/linux/mmiotrace.h
 +F:    arch/x86/mm/kmmio.c
 +F:    arch/x86/mm/mmio-mod.c
 +F:    arch/x86/mm/testmmiotrace.c
 +
  TRIVIAL PATCHES
  M:    Jiri Kosina <trivial@kernel.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git
@@@ -12095,9 -11988,7 +12096,9 @@@ L:   linux-kernel@vger.kernel.or
  W:    http://www.slimlogic.co.uk/?p=48
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
  S:    Supported
 +F:    Documentation/devicetree/bindings/regulator/
  F:    drivers/regulator/
 +F:    include/dt-bindings/regulator/
  F:    include/linux/regulator/
  
  VRF
index 0967e1a5b3a25f1d351f83adb40f7bad0c52c659,29664338aab1074524ef1ce01c6b7de7e236920b..2dd40ddf04de3117862491a8bb25edb8f64237e6
@@@ -663,7 -663,7 +663,7 @@@ config I2C_MT65X
  
  config I2C_MV64XXX
        tristate "Marvell mv64xxx I2C Controller"
-       depends on MV64X60 || PLAT_ORION || ARCH_SUNXI
+       depends on MV64X60 || PLAT_ORION || ARCH_SUNXI || ARCH_MVEBU
        help
          If you say yes to this option, support will be included for the
          built-in I2C interface on the Marvell 64xxx line of host bridges.
@@@ -975,10 -975,10 +975,10 @@@ config I2C_XL
  
  config I2C_XLP9XX
        tristate "XLP9XX I2C support"
 -      depends on CPU_XLP || COMPILE_TEST
 +      depends on CPU_XLP || ARCH_VULCAN || COMPILE_TEST
        help
          This driver enables support for the on-chip I2C interface of
 -        the Broadcom XLP9xx/XLP5xx MIPS processors.
 +        the Broadcom XLP9xx/XLP5xx MIPS and Vulcan ARM64 processors.
  
          This driver can also be built as a module.  If so, the module will
          be called i2c-xlp9xx.
index b167ab25310a3b53797a8604d0adf360d91fb3e9,b6d2821aaabd5edaeba5b9027b130882720ca039..ee57c1e865e271228a38484d03c1c02c979fa7a9
@@@ -116,8 -116,8 +116,8 @@@ struct cpm_i2c 
        cbd_t __iomem *rbase;
        u_char *txbuf[CPM_MAXBD];
        u_char *rxbuf[CPM_MAXBD];
 -      u32 txdma[CPM_MAXBD];
 -      u32 rxdma[CPM_MAXBD];
 +      dma_addr_t txdma[CPM_MAXBD];
 +      dma_addr_t rxdma[CPM_MAXBD];
  };
  
  static irqreturn_t cpm_i2c_interrupt(int irq, void *dev_id)
@@@ -197,9 -197,7 +197,7 @@@ static void cpm_i2c_parse_message(struc
        tbdf = cpm->tbase + tx;
        rbdf = cpm->rbase + rx;
  
-       addr = pmsg->addr << 1;
-       if (pmsg->flags & I2C_M_RD)
-               addr |= 1;
+       addr = i2c_8bit_addr_from_msg(pmsg);
  
        tb = cpm->txbuf[tx];
        rb = cpm->rxbuf[rx];
index f54ece8fce781865336caca2e43abb301a69b62c,8710052eeb6be51bd181482788b629a1365a1542..c0e3ada028763d3e615c98f0998db8b169eb12be
@@@ -671,9 -671,7 +671,9 @@@ static int exynos5_i2c_xfer(struct i2c_
                return -EIO;
        }
  
 -      clk_prepare_enable(i2c->clk);
 +      ret = clk_enable(i2c->clk);
 +      if (ret)
 +              return ret;
  
        for (i = 0; i < num; i++, msgs++) {
                stop = (i == num - 1);
        }
  
   out:
 -      clk_disable_unprepare(i2c->clk);
 +      clk_disable(i2c->clk);
        return ret;
  }
  
@@@ -749,9 -747,7 +749,9 @@@ static int exynos5_i2c_probe(struct pla
                return -ENOENT;
        }
  
 -      clk_prepare_enable(i2c->clk);
 +      ret = clk_prepare_enable(i2c->clk);
 +      if (ret)
 +              return ret;
  
        mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        i2c->regs = devm_ioremap_resource(&pdev->dev, mem);
  
        platform_set_drvdata(pdev, i2c);
  
 +      clk_disable(i2c->clk);
 +
 +      return 0;
 +
   err_clk:
        clk_disable_unprepare(i2c->clk);
        return ret;
@@@ -818,8 -810,6 +818,8 @@@ static int exynos5_i2c_remove(struct pl
  
        i2c_del_adapter(&i2c->adap);
  
 +      clk_unprepare(i2c->clk);
 +
        return 0;
  }
  
@@@ -831,8 -821,6 +831,8 @@@ static int exynos5_i2c_suspend_noirq(st
  
        i2c->suspended = 1;
  
 +      clk_unprepare(i2c->clk);
 +
        return 0;
  }
  
@@@ -842,9 -830,7 +842,9 @@@ static int exynos5_i2c_resume_noirq(str
        struct exynos5_i2c *i2c = platform_get_drvdata(pdev);
        int ret = 0;
  
 -      clk_prepare_enable(i2c->clk);
 +      ret = clk_prepare_enable(i2c->clk);
 +      if (ret)
 +              return ret;
  
        ret = exynos5_hsi2c_clock_setup(i2c);
        if (ret) {
        }
  
        exynos5_i2c_init(i2c);
 -      clk_disable_unprepare(i2c->clk);
 +      clk_disable(i2c->clk);
        i2c->suspended = 0;
  
        return 0;
  #endif
  
  static const struct dev_pm_ops exynos5_i2c_dev_pm_ops = {
- #ifdef CONFIG_PM_SLEEP
-       .suspend_noirq = exynos5_i2c_suspend_noirq,
-       .resume_noirq = exynos5_i2c_resume_noirq,
-       .freeze_noirq = exynos5_i2c_suspend_noirq,
-       .thaw_noirq = exynos5_i2c_resume_noirq,
-       .poweroff_noirq = exynos5_i2c_suspend_noirq,
-       .restore_noirq = exynos5_i2c_resume_noirq,
- #endif
+       SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(exynos5_i2c_suspend_noirq,
+                                     exynos5_i2c_resume_noirq)
  };
  
  static struct platform_driver exynos5_i2c_driver = {
index 3dcc5f3f26cb5fc815210c222f7a5584e8a11e59,c4b0d89736949932bf3c5e88880d4871a9026293..80bed02cd942ccc27ea7552b79a33dc44a354563
@@@ -101,10 -101,7 +101,7 @@@ struct rk3x_i2c 
        struct notifier_block clk_rate_nb;
  
        /* Settings */
-       unsigned int scl_frequency;
-       unsigned int scl_rise_ns;
-       unsigned int scl_fall_ns;
-       unsigned int sda_fall_ns;
+       struct i2c_timings t;
  
        /* Synchronization & notification */
        spinlock_t lock;
@@@ -437,10 -434,7 +434,7 @@@ out
   * Calculate divider values for desired SCL frequency
   *
   * @clk_rate: I2C input clock rate
-  * @scl_rate: Desired SCL rate
-  * @scl_rise_ns: How many ns it takes for SCL to rise.
-  * @scl_fall_ns: How many ns it takes for SCL to fall.
-  * @sda_fall_ns: How many ns it takes for SDA to fall.
+  * @t: Known I2C timing information.
   * @div_low: Divider output for low
   * @div_high: Divider output for high
   *
   * a best-effort divider value is returned in divs. If the target rate is
   * too high, we silently use the highest possible rate.
   */
- static int rk3x_i2c_calc_divs(unsigned long clk_rate, unsigned long scl_rate,
-                             unsigned long scl_rise_ns,
-                             unsigned long scl_fall_ns,
-                             unsigned long sda_fall_ns,
-                             unsigned long *div_low, unsigned long *div_high)
+ static int rk3x_i2c_calc_divs(unsigned long clk_rate,
+                             struct i2c_timings *t,
+                             unsigned long *div_low,
+                             unsigned long *div_high)
  {
        unsigned long spec_min_low_ns, spec_min_high_ns;
        unsigned long spec_setup_start, spec_max_data_hold_ns;
        int ret = 0;
  
        /* Only support standard-mode and fast-mode */
-       if (WARN_ON(scl_rate > 400000))
-               scl_rate = 400000;
+       if (WARN_ON(t->bus_freq_hz > 400000))
+               t->bus_freq_hz = 400000;
  
        /* prevent scl_rate_khz from becoming 0 */
-       if (WARN_ON(scl_rate < 1000))
-               scl_rate = 1000;
+       if (WARN_ON(t->bus_freq_hz < 1000))
+               t->bus_freq_hz = 1000;
  
        /*
         * min_low_ns:  The minimum number of ns we need to hold low to
         *       This is because the i2c host on Rockchip holds the data line
         *       for half the low time.
         */
-       if (scl_rate <= 100000) {
+       if (t->bus_freq_hz <= 100000) {
                /* Standard-mode */
                spec_min_low_ns = 4700;
                spec_setup_start = 4700;
                spec_max_data_hold_ns = 900;
                data_hold_buffer_ns = 50;
        }
-       min_high_ns = scl_rise_ns + spec_min_high_ns;
+       min_high_ns = t->scl_rise_ns + spec_min_high_ns;
  
        /*
         * Timings for repeated start:
         * we meet tSU;STA and tHD;STA times.
         */
        min_high_ns = max(min_high_ns,
-               DIV_ROUND_UP((scl_rise_ns + spec_setup_start) * 1000, 875));
+               DIV_ROUND_UP((t->scl_rise_ns + spec_setup_start) * 1000, 875));
        min_high_ns = max(min_high_ns,
-               DIV_ROUND_UP((scl_rise_ns + spec_setup_start +
-                             sda_fall_ns + spec_min_high_ns), 2));
+               DIV_ROUND_UP((t->scl_rise_ns + spec_setup_start +
+                             t->sda_fall_ns + spec_min_high_ns), 2));
  
-       min_low_ns = scl_fall_ns + spec_min_low_ns;
+       min_low_ns = t->scl_fall_ns + spec_min_low_ns;
        max_low_ns = spec_max_data_hold_ns * 2 - data_hold_buffer_ns;
        min_total_ns = min_low_ns + min_high_ns;
  
        /* Adjust to avoid overflow */
        clk_rate_khz = DIV_ROUND_UP(clk_rate, 1000);
-       scl_rate_khz = scl_rate / 1000;
+       scl_rate_khz = t->bus_freq_hz / 1000;
  
        /*
         * We need the total div to be >= this number
  
  static void rk3x_i2c_adapt_div(struct rk3x_i2c *i2c, unsigned long clk_rate)
  {
+       struct i2c_timings *t = &i2c->t;
        unsigned long div_low, div_high;
        u64 t_low_ns, t_high_ns;
        int ret;
  
-       ret = rk3x_i2c_calc_divs(clk_rate, i2c->scl_frequency, i2c->scl_rise_ns,
-                                i2c->scl_fall_ns, i2c->sda_fall_ns,
-                                &div_low, &div_high);
-       WARN_ONCE(ret != 0, "Could not reach SCL freq %u", i2c->scl_frequency);
+       ret = rk3x_i2c_calc_divs(clk_rate, t, &div_low, &div_high);
+       WARN_ONCE(ret != 0, "Could not reach SCL freq %u", t->bus_freq_hz);
  
        clk_enable(i2c->clk);
        i2c_writel(i2c, (div_high << 16) | (div_low & 0xffff), REG_CLKDIV);
        dev_dbg(i2c->dev,
                "CLK %lukhz, Req %uns, Act low %lluns high %lluns\n",
                clk_rate / 1000,
-               1000000000 / i2c->scl_frequency,
+               1000000000 / t->bus_freq_hz,
                t_low_ns, t_high_ns);
  }
  
@@@ -664,9 -656,7 +656,7 @@@ static int rk3x_i2c_clk_notifier_cb(str
  
        switch (event) {
        case PRE_RATE_CHANGE:
-               if (rk3x_i2c_calc_divs(ndata->new_rate, i2c->scl_frequency,
-                                      i2c->scl_rise_ns, i2c->scl_fall_ns,
-                                      i2c->sda_fall_ns,
+               if (rk3x_i2c_calc_divs(ndata->new_rate, &i2c->t,
                                       &div_low, &div_high) != 0)
                        return NOTIFY_STOP;
  
@@@ -855,7 -845,6 +845,7 @@@ static struct rk3x_i2c_soc_data soc_dat
  static const struct of_device_id rk3x_i2c_match[] = {
        { .compatible = "rockchip,rk3066-i2c", .data = (void *)&soc_data[0] },
        { .compatible = "rockchip,rk3188-i2c", .data = (void *)&soc_data[1] },
 +      { .compatible = "rockchip,rk3228-i2c", .data = (void *)&soc_data[2] },
        { .compatible = "rockchip,rk3288-i2c", .data = (void *)&soc_data[2] },
        {},
  };
@@@ -880,37 -869,8 +870,8 @@@ static int rk3x_i2c_probe(struct platfo
        match = of_match_node(rk3x_i2c_match, np);
        i2c->soc_data = (struct rk3x_i2c_soc_data *)match->data;
  
-       if (of_property_read_u32(pdev->dev.of_node, "clock-frequency",
-                                &i2c->scl_frequency)) {
-               dev_info(&pdev->dev, "using default SCL frequency: %d\n",
-                        DEFAULT_SCL_RATE);
-               i2c->scl_frequency = DEFAULT_SCL_RATE;
-       }
-       if (i2c->scl_frequency == 0 || i2c->scl_frequency > 400 * 1000) {
-               dev_warn(&pdev->dev, "invalid SCL frequency specified.\n");
-               dev_warn(&pdev->dev, "using default SCL frequency: %d\n",
-                        DEFAULT_SCL_RATE);
-               i2c->scl_frequency = DEFAULT_SCL_RATE;
-       }
-       /*
-        * Read rise and fall time from device tree. If not available use
-        * the default maximum timing from the specification.
-        */
-       if (of_property_read_u32(pdev->dev.of_node, "i2c-scl-rising-time-ns",
-                                &i2c->scl_rise_ns)) {
-               if (i2c->scl_frequency <= 100000)
-                       i2c->scl_rise_ns = 1000;
-               else
-                       i2c->scl_rise_ns = 300;
-       }
-       if (of_property_read_u32(pdev->dev.of_node, "i2c-scl-falling-time-ns",
-                                &i2c->scl_fall_ns))
-               i2c->scl_fall_ns = 300;
-       if (of_property_read_u32(pdev->dev.of_node, "i2c-sda-falling-time-ns",
-                                &i2c->sda_fall_ns))
-               i2c->sda_fall_ns = i2c->scl_fall_ns;
+       /* use common interface to get I2C timing properties */
+       i2c_parse_fw_timings(&pdev->dev, &i2c->t, true);
  
        strlcpy(i2c->adap.name, "rk3x-i2c", sizeof(i2c->adap.name));
        i2c->adap.owner = THIS_MODULE;
index 5ee4e0dc093e687445cfb3daab47f8a7f0e182fe,e25f7ef7f0eae9362dd569c0fb7c535d25af9835..9ba1179105bd53264c118e341e421fb3bd154df5
@@@ -15,7 -15,6 +15,6 @@@
  #include <linux/delay.h>
  #include <linux/err.h>
  #include <linux/i2c.h>
- #include <linux/i2c-mux.h>
  #include <linux/iio/iio.h>
  #include <linux/module.h>
  #include "inv_mpu_iio.h"
@@@ -25,46 -24,16 +24,16 @@@ static const struct regmap_config inv_m
        .val_bits = 8,
  };
  
- /*
-  * The i2c read/write needs to happen in unlocked mode. As the parent
-  * adapter is common. If we use locked versions, it will fail as
-  * the mux adapter will lock the parent i2c adapter, while calling
-  * select/deselect functions.
-  */
- static int inv_mpu6050_write_reg_unlocked(struct i2c_client *client,
-                                         u8 reg, u8 d)
+ static int inv_mpu6050_select_bypass(struct i2c_mux_core *muxc, u32 chan_id)
  {
-       int ret;
-       u8 buf[2] = {reg, d};
-       struct i2c_msg msg[1] = {
-               {
-                       .addr = client->addr,
-                       .flags = 0,
-                       .len = sizeof(buf),
-                       .buf = buf,
-               }
-       };
-       ret = __i2c_transfer(client->adapter, msg, 1);
-       if (ret != 1)
-               return ret;
-       return 0;
- }
- static int inv_mpu6050_select_bypass(struct i2c_adapter *adap, void *mux_priv,
-                                    u32 chan_id)
- {
-       struct i2c_client *client = mux_priv;
-       struct iio_dev *indio_dev = dev_get_drvdata(&client->dev);
+       struct iio_dev *indio_dev = i2c_mux_priv(muxc);
        struct inv_mpu6050_state *st = iio_priv(indio_dev);
        int ret = 0;
  
        /* Use the same mutex which was used everywhere to protect power-op */
        mutex_lock(&indio_dev->mlock);
        if (!st->powerup_count) {
-               ret = inv_mpu6050_write_reg_unlocked(client,
-                                                    st->reg->pwr_mgmt_1, 0);
+               ret = regmap_write(st->map, st->reg->pwr_mgmt_1, 0);
                if (ret)
                        goto write_error;
  
        }
        if (!ret) {
                st->powerup_count++;
-               ret = inv_mpu6050_write_reg_unlocked(client,
-                                                    st->reg->int_pin_cfg,
-                                                    INV_MPU6050_INT_PIN_CFG |
-                                                    INV_MPU6050_BIT_BYPASS_EN);
+               ret = regmap_write(st->map, st->reg->int_pin_cfg,
+                                  INV_MPU6050_INT_PIN_CFG |
+                                  INV_MPU6050_BIT_BYPASS_EN);
        }
  write_error:
        mutex_unlock(&indio_dev->mlock);
        return ret;
  }
  
- static int inv_mpu6050_deselect_bypass(struct i2c_adapter *adap,
-                                      void *mux_priv, u32 chan_id)
+ static int inv_mpu6050_deselect_bypass(struct i2c_mux_core *muxc, u32 chan_id)
  {
-       struct i2c_client *client = mux_priv;
-       struct iio_dev *indio_dev = dev_get_drvdata(&client->dev);
+       struct iio_dev *indio_dev = i2c_mux_priv(muxc);
        struct inv_mpu6050_state *st = iio_priv(indio_dev);
  
        mutex_lock(&indio_dev->mlock);
        /* It doesn't really mattter, if any of the calls fails */
-       inv_mpu6050_write_reg_unlocked(client, st->reg->int_pin_cfg,
-                                      INV_MPU6050_INT_PIN_CFG);
+       regmap_write(st->map, st->reg->int_pin_cfg, INV_MPU6050_INT_PIN_CFG);
        st->powerup_count--;
        if (!st->powerup_count)
-               inv_mpu6050_write_reg_unlocked(client, st->reg->pwr_mgmt_1,
-                                              INV_MPU6050_BIT_SLEEP);
+               regmap_write(st->map, st->reg->pwr_mgmt_1,
+                            INV_MPU6050_BIT_SLEEP);
        mutex_unlock(&indio_dev->mlock);
  
        return 0;
  }
  
 +static const char *inv_mpu_match_acpi_device(struct device *dev, int *chip_id)
 +{
 +      const struct acpi_device_id *id;
 +
 +      id = acpi_match_device(dev->driver->acpi_match_table, dev);
 +      if (!id)
 +              return NULL;
 +
 +      *chip_id = (int)id->driver_data;
 +
 +      return dev_name(dev);
 +}
 +
  /**
   *  inv_mpu_probe() - probe function.
   *  @client:          i2c client.
@@@ -128,25 -80,14 +93,25 @@@ static int inv_mpu_probe(struct i2c_cli
                         const struct i2c_device_id *id)
  {
        struct inv_mpu6050_state *st;
 -      int result;
 -      const char *name = id ? id->name : NULL;
 +      int result, chip_type;
        struct regmap *regmap;
 +      const char *name;
  
        if (!i2c_check_functionality(client->adapter,
                                     I2C_FUNC_SMBUS_I2C_BLOCK))
                return -EOPNOTSUPP;
  
 +      if (id) {
 +              chip_type = (int)id->driver_data;
 +              name = id->name;
 +      } else if (ACPI_HANDLE(&client->dev)) {
 +              name = inv_mpu_match_acpi_device(&client->dev, &chip_type);
 +              if (!name)
 +                      return -ENODEV;
 +      } else {
 +              return -ENOSYS;
 +      }
 +
        regmap = devm_regmap_init_i2c(client, &inv_mpu_regmap_config);
        if (IS_ERR(regmap)) {
                dev_err(&client->dev, "Failed to register i2c regmap %d\n",
        }
  
        result = inv_mpu_core_probe(regmap, client->irq, name,
 -                                  NULL, id->driver_data);
 +                                  NULL, chip_type);
        if (result < 0)
                return result;
  
        st = iio_priv(dev_get_drvdata(&client->dev));
-       st->mux_adapter = i2c_add_mux_adapter(client->adapter,
-                                             &client->dev,
-                                             client,
-                                             0, 0, 0,
-                                             inv_mpu6050_select_bypass,
-                                             inv_mpu6050_deselect_bypass);
-       if (!st->mux_adapter) {
-               result = -ENODEV;
+       st->muxc = i2c_mux_alloc(client->adapter, &client->dev,
+                                1, 0, I2C_MUX_LOCKED,
+                                inv_mpu6050_select_bypass,
+                                inv_mpu6050_deselect_bypass);
+       if (!st->muxc) {
+               result = -ENOMEM;
                goto out_unreg_device;
        }
+       st->muxc->priv = dev_get_drvdata(&client->dev);
+       result = i2c_mux_add_adapter(st->muxc, 0, 0, 0);
+       if (result)
+               goto out_unreg_device;
  
        result = inv_mpu_acpi_create_mux_client(client);
        if (result)
        return 0;
  
  out_del_mux:
-       i2c_del_mux_adapter(st->mux_adapter);
+       i2c_mux_del_adapters(st->muxc);
  out_unreg_device:
        inv_mpu_core_remove(&client->dev);
        return result;
@@@ -190,7 -133,7 +157,7 @@@ static int inv_mpu_remove(struct i2c_cl
        struct inv_mpu6050_state *st = iio_priv(indio_dev);
  
        inv_mpu_acpi_delete_mux_client(client);
-       i2c_del_mux_adapter(st->mux_adapter);
+       i2c_mux_del_adapters(st->muxc);
  
        return inv_mpu_core_remove(&client->dev);
  }
index 651e005146b21546848ce324a386dfa0851e5499,c5b4e177c6ea78eca9e652ed34d09727cb2df003..d78e467295d2f5f936baf7cdbf6aa8a18e50b054
@@@ -42,11 -42,11 +42,11 @@@ struct m88ds3103_dev 
        enum fe_status fe_status;
        u32 dvbv3_ber; /* for old DVBv3 API read_ber */
        bool warm; /* FW running */
-       struct i2c_adapter *i2c_adapter;
+       struct i2c_mux_core *muxc;
        /* auto detect chip id to do different config */
        u8 chip_id;
        /* main mclk is calculated for M88RS6000 dynamically */
 -      u32 mclk_khz;
 +      s32 mclk_khz;
        u64 post_bit_error;
        u64 post_bit_count;
  };
index 6741fd02b50fd600fb9b2689a3d27e01ac8a6ea7,f7aac2abd7831c58b5e5c2118fc0756e0db3eff3..630f4fc5155f12d220945519567ff2fa24567220
@@@ -752,8 -752,7 +752,8 @@@ EXPORT_SYMBOL_GPL(cx231xx_set_mode)
  int cx231xx_ep5_bulkout(struct cx231xx *dev, u8 *firmware, u16 size)
  {
        int errCode = 0;
 -      int actlen, ret = -ENOMEM;
 +      int actlen = -1;
 +      int ret = -ENOMEM;
        u32 *buffer;
  
        buffer = kzalloc(4096, GFP_KERNEL);
@@@ -1305,6 -1304,9 +1305,9 @@@ int cx231xx_dev_init(struct cx231xx *de
        cx231xx_i2c_register(&dev->i2c_bus[1]);
        cx231xx_i2c_register(&dev->i2c_bus[2]);
  
+       errCode = cx231xx_i2c_mux_create(dev);
+       if (errCode < 0)
+               return errCode;
        cx231xx_i2c_mux_register(dev, 0);
        cx231xx_i2c_mux_register(dev, 1);
  
@@@ -1427,8 -1429,7 +1430,7 @@@ EXPORT_SYMBOL_GPL(cx231xx_dev_init)
  void cx231xx_dev_uninit(struct cx231xx *dev)
  {
        /* Un Initialize I2C bus */
-       cx231xx_i2c_mux_unregister(dev, 1);
-       cx231xx_i2c_mux_unregister(dev, 0);
+       cx231xx_i2c_mux_unregister(dev);
        cx231xx_i2c_unregister(&dev->i2c_bus[2]);
        cx231xx_i2c_unregister(&dev->i2c_bus[1]);
        cx231xx_i2c_unregister(&dev->i2c_bus[0]);