]> Git Repo - linux.git/commitdiff
Merge branch 'i2c/for-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa...
authorLinus Torvalds <[email protected]>
Sun, 14 Dec 2014 20:54:40 +0000 (12:54 -0800)
committerLinus Torvalds <[email protected]>
Sun, 14 Dec 2014 20:54:40 +0000 (12:54 -0800)
Pull i2c updates from Wolfram Sang:
 "For 3.19, the I2C subsystem has to offer special candy this time.
  Right in time for Christmas :)

   - I2C slave framework: finally, a generic mechanism for Linux being
     an I2C slave (if the bus driver supports that).  Docs are still
     missing but will come later this cycle, the code is good enough to
     go.
   - I2C muxes represent their topology in sysfs much more detailed.
     This will help users to navigate around much easier.
   - irq population of i2c clients is now done at probe time, not device
     creation time, to have better support for deferred probing.
   - new drivers for Imagination SCB, Amlogic Meson
   - DMA support added for Freescale IMX, Renesas SHMobile
   - slightly bigger driver updates to OMAP, i801, AT91, and rk3x
     (mostly quirk handling, timing updates, and using better kernel
     interfaces)
   - eeprom driver can now write with byte-access (very slow, but OK to
     have)
   - and the bunch of smaller fixes, cleanups, ID updates..."

* 'i2c/for-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (56 commits)
  i2c: sh_mobile: remove unneeded DMA mask
  i2c: rcar: add slave support
  i2c: slave-eeprom: add eeprom simulator driver
  i2c: core changes for slave support
  MAINTAINERS: add I2C dt bindings also to I2C realm
  i2c: designware: Fix falling time bindings doc
  i2c: davinci: switch to use platform_get_irq
  Documentation: i2c: Use PM ops instead of legacy suspend/resume
  i2c: sh_mobile: optimize irq entry
  i2c: pxa: add support for SCCB devices
  omap: i2c: don't check bus state IP rev3.3 and earlier
  i2c: s3c2410: Handle i2c sys_cfg register in i2c driver
  i2c: rk3x: add Kconfig dependency on COMMON_CLK
  i2c: omap: add notes related to i2c multimaster mode
  i2c: omap: don't reset controller if Arbitration Lost detected
  i2c: omap: implement workaround for handling invalid BB-bit values
  i2c: omap: cleanup register definitions
  i2c: rk3x: handle dynamic clock rate changes correctly
  i2c: at91: enable probe deferring on dma channel request
  i2c: at91: remove legacy DMA support
  ...

1  2 
Documentation/devicetree/bindings/i2c/trivial-devices.txt
MAINTAINERS
drivers/i2c/busses/Kconfig
drivers/i2c/busses/Makefile
drivers/i2c/busses/i2c-davinci.c
drivers/i2c/busses/i2c-omap.c
drivers/i2c/i2c-core.c
include/linux/i2c.h

index 605dcca5dbec61a82f89bccb9f91a917ae283334,e0beef4f8cff5cdf10074352a83060c539f63065..9f4e3824e71eb22bb825cfcd0e2c6d128242f6af
@@@ -17,6 -17,9 +17,9 @@@ adi,adt7473           +/-1C TDM Extended Temp Ra
  adi,adt7475           +/-1C TDM Extended Temp Range I.C
  adi,adt7476           +/-1C TDM Extended Temp Range I.C
  adi,adt7490           +/-1C TDM Extended Temp Range I.C
+ adi,adxl345           Three-Axis Digital Accelerometer
+ adi,adxl346           Three-Axis Digital Accelerometer
+ adi,adxl34x           Three-Axis Digital Accelerometer
  at,24c08              i2c serial eeprom  (24cxx)
  atmel,24c00           i2c serial eeprom  (24cxx)
  atmel,24c01           i2c serial eeprom  (24cxx)
@@@ -56,8 -59,6 +59,8 @@@ gmt,g751              G751: Digital Temperature Sen
  infineon,slb9635tt    Infineon SLB9635 (Soft-) I2C TPM (old protocol, max 100khz)
  infineon,slb9645tt    Infineon SLB9645 I2C TPM (new protocol, max 400khz)
  isl,isl12057          Intersil ISL12057 I2C RTC Chip
 +isil,isl29028           (deprecated, use isl)
 +isl,isl29028            Intersil ISL29028 Ambient Light and Proximity Sensor
  maxim,ds1050          5 Bit Programmable, Pulse-Width Modulator
  maxim,max1237         Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs
  maxim,max6625         9-Bit/12-Bit Temperature Sensors with I²C-Compatible Serial Interface
@@@ -76,7 -77,12 +79,12 @@@ ovti,ov5642         OV5642: Color CMOS QSXGA (
  pericom,pt7c4338      Real-time Clock Module
  plx,pex8648           48-Lane, 12-Port PCI Express Gen 2 (5.0 GT/s) Switch
  ramtron,24c64         i2c serial eeprom  (24cxx)
+ ricoh,r2025sd         I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC
+ ricoh,r2221tl         I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC
  ricoh,rs5c372a                I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC
+ ricoh,rs5c372b                I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC
+ ricoh,rv5c386         I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC
+ ricoh,rv5c387a                I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC
  samsung,24ad0xd1      S524AD0XF1 (128K/256K-bit Serial EEPROM for Low Power)
  sii,s35390a           2-wire CMOS real-time clock
  st-micro,24c256               i2c serial eeprom  (24cxx)
diff --combined MAINTAINERS
index 9ef141a913cf61a842b66a5d4ba9ec429d639c98,794a8f0a31f6650bf56629cc1f07a9c6f68d5d7d..f3ff8d5b7193c0f18fd6dc0b513cee8a485b343f
@@@ -850,7 -850,6 +850,7 @@@ ARM/Amlogic MesonX SoC suppor
  M:    Carlo Caione <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 +F:    drivers/media/rc/meson-ir.c
  N:    meson[x68]
  
  ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
@@@ -862,7 -861,6 +862,7 @@@ W: http://maxim.org.za/at91_26.htm
  W:    http://www.linux4sam.org
  S:    Supported
  F:    arch/arm/mach-at91/
 +F:    include/soc/at91/
  F:    arch/arm/boot/dts/at91*.dts
  F:    arch/arm/boot/dts/at91*.dtsi
  F:    arch/arm/boot/dts/sama*.dts
@@@ -1310,22 -1308,30 +1310,22 @@@ F:   drivers/*/*rockchip
  F:    drivers/*/*/*rockchip*
  F:    sound/soc/rockchip/
  
 -ARM/SAMSUNG ARM ARCHITECTURES
 -M:    Ben Dooks <[email protected]>
 -M:    Kukjin Kim <[email protected]>
 +ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
 +M:    Kukjin Kim <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected] (moderated for non-subscribers)
 -W:    http://www.fluff.org/ben/linux/
  S:    Maintained
  F:    arch/arm/boot/dts/s3c*
  F:    arch/arm/boot/dts/exynos*
  F:    arch/arm/plat-samsung/
  F:    arch/arm/mach-s3c24*/
  F:    arch/arm/mach-s3c64xx/
 +F:    arch/arm/mach-s5p*/
 +F:    arch/arm/mach-exynos*/
  F:    drivers/*/*s3c2410*
  F:    drivers/*/*/*s3c2410*
  F:    drivers/spi/spi-s3c*
  F:    sound/soc/samsung/*
 -
 -ARM/S5P EXYNOS ARM ARCHITECTURES
 -M:    Kukjin Kim <[email protected]>
 -L:    [email protected] (moderated for non-subscribers)
 -L:    [email protected] (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-s5p*/
 -F:    arch/arm/mach-exynos*/
  N:    exynos
  
  ARM/SAMSUNG MOBILE MACHINE SUPPORT
@@@ -1375,12 -1381,12 +1375,12 @@@ F:   arch/arm/boot/dts/sh
  F:    arch/arm/configs/ape6evm_defconfig
  F:    arch/arm/configs/armadillo800eva_defconfig
  F:    arch/arm/configs/bockw_defconfig
 -F:    arch/arm/configs/koelsch_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
 +F:    arch/arm/include/debug/renesas-scif.S
  F:    arch/arm/mach-shmobile/
  F:    drivers/sh/
  
@@@ -1424,7 -1430,6 +1424,7 @@@ F:      drivers/tty/serial/st-asc.
  F:    drivers/usb/dwc3/dwc3-st.c
  F:    drivers/usb/host/ehci-st.c
  F:    drivers/usb/host/ohci-st.c
 +F:    drivers/ata/ahci_st.c
  
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <[email protected]>
@@@ -1498,19 -1503,6 +1498,19 @@@ S:    Maintaine
  F:    drivers/clk/ux500/
  F:    include/linux/platform_data/clk-ux500.h
  
 +ARM/VERSATILE EXPRESS PLATFORM
 +M:    Liviu Dudau <[email protected]>
 +M:    Sudeep Holla <[email protected]>
 +M:    Lorenzo Pieralisi <[email protected]>
 +L:    [email protected] (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/boot/dts/vexpress*
 +F:    arch/arm/mach-vexpress/
 +F:    */*/vexpress*
 +F:    */*/*/vexpress*
 +F:    drivers/clk/versatile/clk-vexpress-osc.c
 +F:    drivers/clocksource/versatile.c
 +
  ARM/VFP SUPPORT
  M:    Russell King <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -1722,13 -1714,6 +1722,13 @@@ F:    drivers/dma/at_hdmac.
  F:    drivers/dma/at_hdmac_regs.h
  F:    include/linux/platform_data/dma-atmel.h
  
 +ATMEL XDMA DRIVER
 +M:    Ludovic Desroches <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Supported
 +F:    drivers/dma/at_xdmac.c
 +
  ATMEL I2C DRIVER
  M:    Ludovic Desroches <[email protected]>
  L:    [email protected]
@@@ -1801,11 -1786,10 +1801,11 @@@ S:   Supporte
  F:    drivers/scsi/esas2r
  
  AUDIT SUBSYSTEM
 +M:    Paul Moore <[email protected]>
  M:    Eric Paris <[email protected]>
 -L:    [email protected] (subscribers-only)
 +L:    [email protected] (moderated for non-subscribers)
  W:    http://people.redhat.com/sgrubb/audit/
 -T:    git git://git.infradead.org/users/eparis/audit.git
 +T:    git git://git.infradead.org/users/pcmoore/audit
  S:    Maintained
  F:    include/linux/audit.h
  F:    include/uapi/linux/audit.h
@@@ -1844,7 -1828,7 +1844,7 @@@ F:      include/net/ax25.
  F:    net/ax25/
  
  AZ6007 DVB DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -1878,6 -1862,7 +1878,6 @@@ F:      drivers/net/wireless/b43legacy
  
  BACKLIGHT CLASS/SUBSYSTEM
  M:    Jingoo Han <[email protected]>
 -M:    Bryan Wu <[email protected]>
  M:    Lee Jones <[email protected]>
  S:    Maintained
  F:    drivers/video/backlight/
@@@ -2093,14 -2078,6 +2093,14 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  N:    bcm2835
  
 +BROADCOM BCM33XX MIPS ARCHITECTURE
 +M:    Kevin Cernekee <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    arch/mips/bcm3384/*
 +F:    arch/mips/include/asm/mach-bcm3384/*
 +F:    arch/mips/kernel/*bmips*
 +
  BROADCOM BCM5301X ARM ARCHITECTURE
  M:    Hauke Mehrtens <[email protected]>
  L:    [email protected]
@@@ -2117,34 -2094,13 +2117,34 @@@ S:   Maintaine
  F:    arch/arm/mach-bcm/bcm63xx.c
  F:    arch/arm/include/debug/bcm63xx.S
  
 +BROADCOM BCM63XX/BCM33XX UDC DRIVER
 +M:    Kevin Cernekee <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/usb/gadget/udc/bcm63xx_udc.*
 +
  BROADCOM BCM7XXX ARM ARCHITECTURE
  M:    Marc Carino <[email protected]>
  M:    Brian Norris <[email protected]>
 +M:    Gregory Fong <[email protected]>
 +M:    Florian Fainelli <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-bcm/*brcmstb*
  F:    arch/arm/boot/dts/bcm7*.dts*
 +F:    drivers/bus/brcmstb_gisb.c
 +
 +BROADCOM BMIPS MIPS ARCHITECTURE
 +M:    Kevin Cernekee <[email protected]>
 +M:    Florian Fainelli <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    arch/mips/bmips/*
 +F:    arch/mips/include/asm/mach-bmips/*
 +F:    arch/mips/kernel/*bmips*
 +F:    arch/mips/boot/dts/bcm*.dts*
 +F:    drivers/irqchip/irq-bcm7*
 +F:    drivers/irqchip/irq-brcmstb*
  
  BROADCOM TG3 GIGABIT ETHERNET DRIVER
  M:    Prashant Sreedharan <[email protected]>
  S:    Supported
  F:    drivers/scsi/bnx2i/
  
 +BROADCOM CYGNUS/IPROC ARM ARCHITECTURE
 +M:    Ray Jui <[email protected]>
 +M:    Scott Branden <[email protected]>
 +L:    [email protected] (moderated for non-subscribers)
 +L:    [email protected]
 +T:    git git://git.github.com/brcm/linux.git
 +S:    Maintained
 +N:    iproc
 +N:    cygnus
 +N:    bcm9113*
 +N:    bcm9583*
 +N:    bcm583*
 +N:    bcm113*
 +
  BROADCOM KONA GPIO DRIVER
  M:    Ray Jui <[email protected]>
  L:    [email protected]
@@@ -2256,7 -2198,7 +2256,7 @@@ F:      Documentation/filesystems/btrfs.tx
  F:    fs/btrfs/
  
  BTTV VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -2366,14 -2308,6 +2366,14 @@@ F:    security/capability.
  F:    security/commoncap.c
  F:    kernel/capability.c
  
 +CC2520 IEEE-802.15.4 RADIO DRIVER
 +M:    Varka Bhadram <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/net/ieee802154/cc2520.c
 +F:    include/linux/spi/cc2520.h
 +F:    Documentation/devicetree/bindings/net/ieee802154/cc2520.txt
 +
  CELL BROADBAND ENGINE ARCHITECTURE
  M:    Arnd Bergmann <[email protected]>
  L:    [email protected]
@@@ -2555,13 -2489,6 +2555,13 @@@ F:    fs/coda
  F:    include/linux/coda*.h
  F:    include/uapi/linux/coda*.h
  
 +CODA V4L2 MEM2MEM DRIVER
 +M:    Philipp Zabel <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/coda.txt
 +F:    drivers/media/platform/coda/
 +
  COMMON CLK FRAMEWORK
  M:    Mike Turquette <[email protected]>
  L:    [email protected]
@@@ -2577,7 -2504,8 +2577,7 @@@ M:      Steve French <[email protected]
  L:    [email protected]
  L:    [email protected] (moderated for non-subscribers)
  W:    http://linux-cifs.samba.org/
 -Q:    http://patchwork.ozlabs.org/project/linux-cifs-client/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git
 +T:    git git://git.samba.org/sfrench/cifs-2.6.git
  S:    Supported
  F:    Documentation/filesystems/cifs/
  F:    fs/cifs/
@@@ -2654,7 -2582,7 +2654,7 @@@ L:      [email protected]
  L:    [email protected]
  S:    Maintained
  F:    mm/memcontrol.c
 -F:    mm/page_cgroup.c
 +F:    mm/swap_cgroup.c
  
  CORETEMP HARDWARE MONITORING DRIVER
  M:    Fenghua Yu <[email protected]>
@@@ -2704,16 -2632,6 +2704,16 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    drivers/cpuidle/cpuidle-big_little.c
  
 +CPUIDLE DRIVER - ARM EXYNOS
 +M:    Bartlomiej Zolnierkiewicz <[email protected]>
 +M:    Daniel Lezcano <[email protected]>
 +M:    Kukjin Kim <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Supported
 +F:    drivers/cpuidle/cpuidle-exynos.c
 +F:    arch/arm/mach-exynos/pm.c
 +
  CPUIDLE DRIVERS
  M:    Rafael J. Wysocki <[email protected]>
  M:    Daniel Lezcano <[email protected]>
@@@ -2781,7 -2699,7 +2781,7 @@@ F:      drivers/net/wireless/cw1200
  
  CX18 VIDEO4LINUX DRIVER
  M:    Andy Walls <[email protected]>
 -L:    [email protected] (moderated for non-subscribers)
 +L:    [email protected] (subscribers-only)
  L:    [email protected]
  T:    git git://linuxtv.org/media_tree.git
  W:    http://linuxtv.org
@@@ -2801,7 -2719,7 +2801,7 @@@ F:      drivers/media/common/cx2341x
  F:    include/media/cx2341x*
  
  CX88 VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -2826,13 -2744,6 +2826,13 @@@ W:    http://www.chelsio.co
  S:    Supported
  F:    drivers/net/ethernet/chelsio/cxgb3/
  
 +CXGB3 ISCSI DRIVER (CXGB3I)
 +M:      Karen Xie <[email protected]>
 +L:      [email protected]
 +W:      http://www.chelsio.com
 +S:      Supported
 +F:      drivers/scsi/cxgbi/cxgb3i
 +
  CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
  M:    Steve Wise <[email protected]>
  L:    [email protected]
@@@ -2847,13 -2758,6 +2847,13 @@@ W:    http://www.chelsio.co
  S:    Supported
  F:    drivers/net/ethernet/chelsio/cxgb4/
  
 +CXGB4 ISCSI DRIVER (CXGB4I)
 +M:      Karen Xie <[email protected]>
 +L:      [email protected]
 +W:      http://www.chelsio.com
 +S:      Supported
 +F:      drivers/scsi/cxgbi/cxgb4i
 +
  CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
  M:    Steve Wise <[email protected]>
  L:    [email protected]
@@@ -2944,10 -2848,11 +2944,10 @@@ F:   Documentation/networking/dmfe.tx
  F:    drivers/net/ethernet/dec/tulip/dmfe.c
  
  DC390/AM53C974 SCSI driver
 -M:    Kurt Garloff <[email protected]>
 -W:    http://www.garloff.de/kurt/linux/dc390/
 -M:    Guennadi Liakhovetski <[email protected]>
 +M:    Hannes Reinecke <[email protected]>
 +L:    [email protected]
  S:    Maintained
 -F:    drivers/scsi/tmscsim.*
 +F:    drivers/scsi/am53c974.c
  
  DC395x SCSI driver
  M:    Oliver Neukum <[email protected]>
@@@ -3170,8 -3075,7 +3170,8 @@@ Q:      https://patchwork.kernel.org/project
  S:    Maintained
  F:    drivers/dma/
  F:    include/linux/dma*
 -T:    git git://git.infradead.org/users/vkoul/slave-dma.git (slave-dma)
 +F:    Documentation/dmaengine/
 +T:    git git://git.infradead.org/users/vkoul/slave-dma.git
  
  DME1737 HARDWARE MONITOR DRIVER
  M:    Juerg Haefliger <[email protected]>
@@@ -3484,7 -3388,7 +3484,7 @@@ F:      fs/ecryptfs
  EDAC-CORE
  M:    Doug Thompson <[email protected]>
  M:    Borislav Petkov <[email protected]>
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    bluesmoke.sourceforge.net
  S:    Supported
@@@ -3533,7 -3437,7 +3533,7 @@@ S:      Maintaine
  F:    drivers/edac/e7xxx_edac.c
  
  EDAC-GHES
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    bluesmoke.sourceforge.net
  S:    Maintained
@@@ -3561,21 -3465,21 +3561,21 @@@ S:   Maintaine
  F:    drivers/edac/i5000_edac.c
  
  EDAC-I5400
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    bluesmoke.sourceforge.net
  S:    Maintained
  F:    drivers/edac/i5400_edac.c
  
  EDAC-I7300
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    bluesmoke.sourceforge.net
  S:    Maintained
  F:    drivers/edac/i7300_edac.c
  
  EDAC-I7CORE
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    bluesmoke.sourceforge.net
  S:    Maintained
@@@ -3618,7 -3522,7 +3618,7 @@@ S:      Maintaine
  F:    drivers/edac/r82600_edac.c
  
  EDAC-SBRIDGE
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    bluesmoke.sourceforge.net
  S:    Maintained
@@@ -3678,7 -3582,7 +3678,7 @@@ S:      Maintaine
  F:    drivers/net/ethernet/ibm/ehea/
  
  EM28XX VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -4046,7 -3950,7 +4046,7 @@@ F:      drivers/tty/serial/ucc_uart.
  FREESCALE SOC SOUND DRIVERS
  M:    Timur Tabi <[email protected]>
  M:    Nicolin Chen <[email protected]>
 -M:    Xiubo Li <Li.Xiubo@freescale.com>
 +M:    Xiubo Li <Xiubo.Lee@gmail.com>
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected]
  S:    Maintained
@@@ -4657,6 -4561,7 +4657,7 @@@ W:      https://i2c.wiki.kernel.org
  Q:    https://patchwork.ozlabs.org/project/linux-i2c/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git
  S:    Maintained
+ F:    Documentation/devicetree/bindings/i2c/
  F:    Documentation/i2c/
  F:    drivers/i2c/
  F:    include/linux/i2c.h
@@@ -4795,21 -4700,8 +4796,21 @@@ S:    Maintaine
  F:    net/ieee802154/
  F:    net/mac802154/
  F:    drivers/net/ieee802154/
 +F:    include/linux/nl802154.h
 +F:    include/linux/ieee802154.h
 +F:    include/net/nl802154.h
 +F:    include/net/mac802154.h
 +F:    include/net/af_ieee802154.h
 +F:    include/net/cfg802154.h
 +F:    include/net/ieee802154_netdev.h
  F:    Documentation/networking/ieee802154.txt
  
 +IGORPLUG-USB IR RECEIVER
 +M:    Sean Young <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/media/rc/igorplugusb.c
 +
  IGUANAWORKS USB IR TRANSCEIVER
  M:    Sean Young <[email protected]>
  L:    [email protected]
@@@ -4825,7 -4717,6 +4826,7 @@@ L:      [email protected]
  S:    Maintained
  F:    drivers/iio/
  F:    drivers/staging/iio/
 +F:    include/linux/iio/
  
  IKANOS/ADI EAGLE ADSL USB DRIVER
  M:    Matthieu Castet <[email protected]>
  S:    Supported
  F:    security/integrity/ima/
  
 +IMGTEC IR DECODER DRIVER
 +M:    James Hogan <[email protected]>
 +S:    Maintained
 +F:    drivers/media/rc/img-ir/
 +
  IMS TWINTURBO FRAMEBUFFER DRIVER
  L:    [email protected]
  S:    Orphan
@@@ -5286,7 -5172,7 +5287,7 @@@ F:      drivers/media/tuners/it913x
  
  IVTV VIDEO4LINUX DRIVER
  M:    Andy Walls <[email protected]>
 -L:    [email protected] (moderated for non-subscribers)
 +L:    [email protected] (subscribers-only)
  L:    [email protected]
  T:    git git://linuxtv.org/media_tree.git
  W:    http://www.ivtvdriver.org
@@@ -5981,11 -5867,6 +5982,11 @@@ M:    Russell King <[email protected]
  S:    Maintained
  F:    drivers/gpu/drm/armada/
  
 +MARVELL 88E6352 DSA support
 +M:    Guenter Roeck <[email protected]>
 +S:    Maintained
 +F:    drivers/net/dsa/mv88e6352.c
 +
  MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2)
  M:    Mirko Lindner <[email protected]>
  M:    Stephen Hemminger <[email protected]>
@@@ -6067,7 -5948,7 +6068,7 @@@ S:      Maintaine
  F:    drivers/media/radio/radio-maxiradio*
  
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  P:    LinuxTV.org Project
  L:    [email protected]
  W:    http://linuxtv.org
@@@ -6096,13 -5977,10 +6097,13 @@@ W:   http://linuxtv.or
  S:    Odd Fixes
  F:    drivers/media/parport/pms*
  
 -MEGARAID SCSI DRIVERS
 -M:    Neela Syam Kolli <[email protected]>
 +MEGARAID SCSI/SAS DRIVERS
 +M:    Kashyap Desai <[email protected]>
 +M:    Sumit Saxena <[email protected]>
 +M:    Uday Lingala <[email protected]>
 +L:    [email protected]
  L:    [email protected]
 -W:    http://megaraid.lsilogic.com
 +W:    http://www.lsi.com
  S:    Maintained
  F:    Documentation/scsi/megaraid.txt
  F:    drivers/scsi/megaraid.*
@@@ -6225,28 -6103,6 +6226,28 @@@ S:    Supporte
  F:    include/linux/mlx5/
  F:    drivers/infiniband/hw/mlx5/
  
 +MN88472 MEDIA DRIVER
 +M:    Antti Palosaari <[email protected]>
 +L:    [email protected]
 +W:    http://linuxtv.org/
 +W:    http://palosaari.fi/linux/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +T:    git git://linuxtv.org/anttip/media_tree.git
 +S:    Maintained
 +F:    drivers/staging/media/mn88472/
 +F:    drivers/media/dvb-frontends/mn88472.h
 +
 +MN88473 MEDIA DRIVER
 +M:    Antti Palosaari <[email protected]>
 +L:    [email protected]
 +W:    http://linuxtv.org/
 +W:    http://palosaari.fi/linux/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +T:    git git://linuxtv.org/anttip/media_tree.git
 +S:    Maintained
 +F:    drivers/staging/media/mn88473/
 +F:    drivers/media/dvb-frontends/mn88473.h
 +
  MODULE SUPPORT
  M:    Rusty Russell <[email protected]>
  S:    Maintained
@@@ -6435,6 -6291,7 +6436,6 @@@ F:      drivers/scsi/g_NCR5380.
  F:    drivers/scsi/g_NCR5380_mmio.c
  F:    drivers/scsi/mac_scsi.*
  F:    drivers/scsi/pas16.*
 -F:    drivers/scsi/sun3_NCR5380.c
  F:    drivers/scsi/sun3_scsi.*
  F:    drivers/scsi/sun3_scsi_vme.c
  F:    drivers/scsi/t128.*
@@@ -6690,13 -6547,6 +6691,13 @@@ S:    Maintaine
  F:    Documentation/scsi/NinjaSCSI.txt
  F:    drivers/scsi/nsp32*
  
 +NIOS2 ARCHITECTURE
 +M:    Ley Foon Tan <[email protected]>
 +L:    [email protected] (moderated for non-subscribers)
 +T:    git git://git.rocketboards.org/linux-socfpga.git
 +S:    Maintained
 +F:    arch/nios2/
 +
  NTB DRIVER
  M:    Jon Mason <[email protected]>
  M:    Dave Jiang <[email protected]>
@@@ -6737,12 -6587,6 +6738,12 @@@ S:    Supporte
  F:    drivers/gpu/drm/i2c/tda998x_drv.c
  F:    include/drm/i2c/tda998x.h
  
 +NXP TFA9879 DRIVER
 +M:    Peter Rosin <[email protected]>
 +L:    [email protected] (moderated for non-subscribers)
 +S:    Maintained
 +F:    sound/soc/codecs/tfa9879*
 +
  OMAP SUPPORT
  M:    Tony Lindgren <[email protected]>
  L:    [email protected]
@@@ -6753,23 -6597,6 +6754,23 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    arch/arm/*omap*/
  F:    drivers/i2c/busses/i2c-omap.c
 +F:    drivers/irqchip/irq-omap-intc.c
 +F:    drivers/mfd/*omap*.c
 +F:    drivers/mfd/menelaus.c
 +F:    drivers/mfd/palmas.c
 +F:    drivers/mfd/tps65217.c
 +F:    drivers/mfd/tps65218.c
 +F:    drivers/mfd/tps65910.c
 +F:    drivers/mfd/twl-core.[ch]
 +F:    drivers/mfd/twl4030*.c
 +F:    drivers/mfd/twl6030*.c
 +F:    drivers/mfd/twl6040*.c
 +F:    drivers/regulator/palmas-regulator*.c
 +F:    drivers/regulator/pbias-regulator.c
 +F:    drivers/regulator/tps65217-regulator.c
 +F:    drivers/regulator/tps65218-regulator.c
 +F:    drivers/regulator/tps65910-regulator.c
 +F:    drivers/regulator/twl-regulator.c
  F:    include/linux/i2c-omap.h
  
  OMAP DEVICE TREE SUPPORT
@@@ -6780,9 -6607,6 +6781,9 @@@ L:      [email protected]
  S:    Maintained
  F:    arch/arm/boot/dts/*omap*
  F:    arch/arm/boot/dts/*am3*
 +F:    arch/arm/boot/dts/*am4*
 +F:    arch/arm/boot/dts/*am5*
 +F:    arch/arm/boot/dts/*dra7*
  
  OMAP CLOCK FRAMEWORK SUPPORT
  M:    Paul Walmsley <[email protected]>
  S:    Maintained
  F:    sound/soc/omap/
  
 +OMAP GENERAL PURPOSE MEMORY CONTROLLER SUPPORT
 +M:    Roger Quadros <[email protected]>
 +M:    Tony Lindgren <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/memory/omap-gpmc.c
 +F:    arch/arm/mach-omap2/*gpmc*
 +
  OMAP FRAMEBUFFER SUPPORT
  M:    Tomi Valkeinen <[email protected]>
  L:    [email protected]
@@@ -7038,12 -6854,11 +7039,12 @@@ F:   drivers/scsi/osd
  F:    include/scsi/osd_*
  F:    fs/exofs/
  
 -OVERLAYFS FILESYSTEM
 +OVERLAY FILESYSTEM
  M:    Miklos Szeredi <[email protected]>
 -L:    [email protected]
 +L:    [email protected]
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs.git
  S:    Supported
 -F:    fs/overlayfs/*
 +F:    fs/overlayfs/
  F:    Documentation/filesystems/overlayfs.txt
  
  P54 WIRELESS DRIVER
@@@ -7197,16 -7012,6 +7198,16 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/pci/xgene-pci.txt
  F:    drivers/pci/host/pci-xgene.c
  
 +PCI DRIVER FOR FREESCALE LAYERSCAPE
 +M:    Minghuan Lian <[email protected]>
 +M:    Mingkai Hu <[email protected]>
 +M:    Roy Zang <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/pci/host/*layerscape*
 +
  PCI DRIVER FOR IMX6
  M:    Richard Zhu <[email protected]>
  M:    Lucas Stach <[email protected]>
@@@ -7386,13 -7191,7 +7387,13 @@@ PIN CONTROLLER - ATMEL AT9
  M:    Jean-Christophe Plagniol-Villard <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 -F:    drivers/pinctrl/pinctrl-at91.c
 +F:    drivers/pinctrl/pinctrl-at91.*
 +
 +PIN CONTROLLER - INTEL
 +M:    Mika Westerberg <[email protected]>
 +M:    Heikki Krogerus <[email protected]>
 +S:    Maintained
 +F:    drivers/pinctrl/intel/
  
  PIN CONTROLLER - RENESAS
  M:    Laurent Pinchart <[email protected]>
@@@ -8011,13 -7810,6 +8012,13 @@@ F:    drivers/hid/hid-roccat
  F:    include/linux/hid-roccat*
  F:    Documentation/ABI/*/sysfs-driver-hid-roccat*
  
 +ROCKER DRIVER
 +M:    Jiri Pirko <[email protected]>
 +M:    Scott Feldman <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +F:    drivers/net/ethernet/rocker/
 +
  ROCKETPORT DRIVER
  P:    Comtrol Corp.
  W:    http://www.comtrol.com
@@@ -8065,10 -7857,11 +8066,10 @@@ S:   Maintaine
  F:    drivers/media/dvb-frontends/rtl2832_sdr*
  
  RTL8180 WIRELESS DRIVER
 -M:    "John W. Linville" <[email protected]>
  L:    [email protected]
  W:    http://wireless.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/rtl818x/rtl8180/
  
  RTL8187 WIRELESS DRIVER
@@@ -8185,7 -7978,7 +8186,7 @@@ S:      Odd Fixe
  F:    drivers/media/i2c/saa6588*
  
  SAA7134 VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -8643,7 -8436,7 +8644,7 @@@ S:      Maintaine
  F:    drivers/media/radio/si4713/radio-usb-si4713.c
  
  SIANO DVB DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -8653,14 -8446,6 +8654,14 @@@ F:    drivers/media/usb/siano
  F:    drivers/media/usb/siano/
  F:    drivers/media/mmc/siano/
  
 +SIMPLEFB FB DRIVER
 +M:    Hans de Goede <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/video/simple-framebuffer.txt
 +F:    drivers/video/fbdev/simplefb.c
 +F:    include/linux/platform_data/simplefb.h
 +
  SH_VEU V4L2 MEM2MEM DRIVER
  L:    [email protected]
  S:    Orphan
@@@ -8862,9 -8647,7 +8863,9 @@@ S:      Maintaine
  F:    drivers/leds/leds-net48xx.c
  
  SOFTLOGIC 6x10 MPEG CODEC
 -M:    Ismael Luceno <[email protected]>
 +M:    Bluecherry Maintainers <[email protected]>
 +M:    Andrey Utkin <[email protected]>
 +M:    Andrey Utkin <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/media/pci/solo6x10/
@@@ -9221,13 -9004,6 +9222,13 @@@ F:    lib/swiotlb.
  F:    arch/*/kernel/pci-swiotlb.c
  F:    include/linux/swiotlb.h
  
 +SWITCHDEV
 +M:    Jiri Pirko <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +F:    net/switchdev/
 +F:    include/net/switchdev.h
 +
  SYNOPSYS ARC ARCHITECTURE
  M:    Vineet Gupta <[email protected]>
  S:    Supported
@@@ -9345,7 -9121,7 +9346,7 @@@ S:      Maintaine
  F:    drivers/media/i2c/tda9840*
  
  TEA5761 TUNER DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -9353,7 -9129,7 +9354,7 @@@ S:      Odd fixe
  F:    drivers/media/tuners/tea5761.*
  
  TEA5767 TUNER DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -9665,7 -9441,7 +9666,7 @@@ F:      include/linux/shmem_fs.
  F:    mm/shmem.c
  
  TM6000 VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    arch/x86/kernel/cpu/mcheck/*
  
 +X86 VDSO
 +M:    Andy Lutomirski <[email protected]>
 +L:    [email protected]
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/vdso
 +S:    Maintained
 +F:    arch/x86/vdso/
 +
  XC2028/3028 TUNER DRIVER
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    [email protected]
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
index b4d135cc2f39be31e9b05ce2f0dbd1819cc8e2db,39862fd27a724474cbdf0f219b756b7456c4dd50..c1351d9fb35bbc8d38ddc96ee9294f2b2614bf11
@@@ -123,6 -123,7 +123,7 @@@ config I2C_I80
            Wildcat Point-LP (PCH)
            BayTrail (SOC)
            Sunrise Point-H (PCH)
+           Sunrise Point-LP (PCH)
  
          This driver can also be built as a module.  If so, the module
          will be called i2c-i801.
@@@ -523,6 -524,16 +524,16 @@@ config I2C_IBM_II
          This driver can also be built as a module.  If so, the module
          will be called i2c-ibm_iic.
  
+ config I2C_IMG
+       tristate "Imagination Technologies I2C SCB Controller"
+       depends on MIPS || METAG || COMPILE_TEST
+       help
+         Say Y here if you want to use the IMG I2C SCB controller,
+         available on the TZ1090 and other IMG SoCs.
+         This driver can also be built as a module.  If so, the module
+         will be called i2c-img-scb.
  config I2C_IMX
        tristate "IMX I2C interface"
        depends on ARCH_MXC
@@@ -553,6 -564,13 +564,13 @@@ config I2C_KEMPL
          This driver can also be built as a module. If so, the module
          will be called i2c-kempld.
  
+ config I2C_MESON
+       tristate "Amlogic Meson I2C controller"
+       depends on ARCH_MESON
+       help
+         If you say yes to this option, support will be included for the
+         I2C interface on the Amlogic Meson family of SoCs.
  config I2C_MPC
        tristate "MPC107/824x/85xx/512x/52xx/83xx/86xx"
        depends on PPC
@@@ -702,7 -720,7 +720,7 @@@ config I2C_RII
  
  config I2C_RK3X
        tristate "Rockchip RK3xxx I2C adapter"
-       depends on OF
+       depends on OF && COMMON_CLK
        help
          Say Y here to include support for the I2C adapter in Rockchip RK3xxx
          SoCs.
@@@ -881,16 -899,6 +899,16 @@@ config I2C_DIOLAN_U2
          This driver can also be built as a module.  If so, the module
          will be called i2c-diolan-u2c.
  
 +config I2C_DLN2
 +       tristate "Diolan DLN-2 USB I2C adapter"
 +       depends on MFD_DLN2
 +       help
 +       If you say yes to this option, support will be included for Diolan
 +       DLN2, a USB to I2C interface.
 +
 +       This driver can also be built as a module.  If so, the module
 +       will be called i2c-dln2.
 +
  config I2C_PARPORT
        tristate "Parallel port adapter"
        depends on PARPORT
index cdac7f15eab5341a3526ad40ded1bb66afa4f4e7,e9b4a1f8431f960607c73e46774a07547a871874..5e6c8223719e2587969f9ecb806409be736d674b
@@@ -50,9 -50,11 +50,11 @@@ obj-$(CONFIG_I2C_GPIO)              += i2c-gpio.
  obj-$(CONFIG_I2C_HIGHLANDER)  += i2c-highlander.o
  obj-$(CONFIG_I2C_HIX5HD2)     += i2c-hix5hd2.o
  obj-$(CONFIG_I2C_IBM_IIC)     += i2c-ibm_iic.o
+ obj-$(CONFIG_I2C_IMG)         += i2c-img-scb.o
  obj-$(CONFIG_I2C_IMX)         += i2c-imx.o
  obj-$(CONFIG_I2C_IOP3XX)      += i2c-iop3xx.o
  obj-$(CONFIG_I2C_KEMPLD)      += i2c-kempld.o
+ obj-$(CONFIG_I2C_MESON)               += i2c-meson.o
  obj-$(CONFIG_I2C_MPC)         += i2c-mpc.o
  obj-$(CONFIG_I2C_MV64XXX)     += i2c-mv64xxx.o
  obj-$(CONFIG_I2C_MXS)         += i2c-mxs.o
@@@ -87,7 -89,6 +89,7 @@@ obj-$(CONFIG_I2C_RCAR)                += i2c-rcar.
  
  # External I2C/SMBus adapter drivers
  obj-$(CONFIG_I2C_DIOLAN_U2C)  += i2c-diolan-u2c.o
 +obj-$(CONFIG_I2C_DLN2)                += i2c-dln2.o
  obj-$(CONFIG_I2C_PARPORT)     += i2c-parport.o
  obj-$(CONFIG_I2C_PARPORT_LIGHT)       += i2c-parport-light.o
  obj-$(CONFIG_I2C_ROBOTFUZZ_OSIF)      += i2c-robotfuzz-osif.o
index 01f0cd87a4a5b6d40fb0c01b17d5d589cc2d4ac4,228766bb0fdaa7a68a32094ebe2368a636d1ef9a..0aa1054711af9a5622d0b2db3754dbd707504f97
@@@ -368,8 -368,7 +368,7 @@@ i2c_davinci_xfer_msg(struct i2c_adapte
                flag |= DAVINCI_I2C_MDR_STP;
        davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag);
  
-       r = wait_for_completion_interruptible_timeout(&dev->cmd_complete,
-                                                     dev->adapter.timeout);
+       r = wait_for_completion_timeout(&dev->cmd_complete, dev->adapter.timeout);
        if (r == 0) {
                dev_err(dev->dev, "controller timed out\n");
                davinci_i2c_recover_bus(dev);
        if (dev->buf_len) {
                /* This should be 0 if all bytes were transferred
                 * or dev->cmd_err denotes an error.
-                * A signal may have aborted the transfer.
                 */
                if (r >= 0) {
                        dev_err(dev->dev, "abnormal termination buf_len=%i\n",
        if (dev->cmd_err & DAVINCI_I2C_STR_NACK) {
                if (msg->flags & I2C_M_IGNORE_NAK)
                        return msg->len;
 -              if (stop) {
 -                      w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
 -                      w |= DAVINCI_I2C_MDR_STP;
 -                      davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
 -              }
 +              w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
 +              w |= DAVINCI_I2C_MDR_STP;
 +              davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
                return -EREMOTEIO;
        }
        return -EIO;
@@@ -634,13 -634,17 +632,17 @@@ static int davinci_i2c_probe(struct pla
  {
        struct davinci_i2c_dev *dev;
        struct i2c_adapter *adap;
-       struct resource *mem, *irq;
-       int r;
-       irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-       if (!irq) {
-               dev_err(&pdev->dev, "no irq resource?\n");
-               return -ENODEV;
+       struct resource *mem;
+       int r, irq;
+       irq = platform_get_irq(pdev, 0);
+       if (irq <= 0) {
+               if (!irq)
+                       irq = -ENXIO;
+               if (irq != -EPROBE_DEFER)
+                       dev_err(&pdev->dev,
+                               "can't get irq resource ret=%d\n", irq);
+               return irq;
        }
  
        dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev),
        init_completion(&dev->xfr_complete);
  #endif
        dev->dev = &pdev->dev;
-       dev->irq = irq->start;
+       dev->irq = irq;
        dev->pdata = dev_get_platdata(&pdev->dev);
        platform_set_drvdata(pdev, dev);
  
index 0e650a0d0ad0ef212e55ea93f9545bcd560df306,94c2259e9af26ea1c94f85f89749bd748776f174..984fede623eabce87caddd5c966d28587ccc8d03
@@@ -54,6 -54,9 +54,9 @@@
  /* timeout for pm runtime autosuspend */
  #define OMAP_I2C_PM_TIMEOUT           1000    /* ms */
  
+ /* timeout for making decision on bus free status */
+ #define OMAP_I2C_BUS_FREE_TIMEOUT (msecs_to_jiffies(10))
  /* For OMAP3 I2C_IV has changed to I2C_WE (wakeup enable) */
  enum {
        OMAP_I2C_REV_REG = 0,
  #define OMAP_I2C_STAT_ROVR    (1 << 11)       /* Receive overrun */
  #define OMAP_I2C_STAT_XUDF    (1 << 10)       /* Transmit underflow */
  #define OMAP_I2C_STAT_AAS     (1 << 9)        /* Address as slave */
- #define OMAP_I2C_STAT_AD0     (1 << 8)        /* Address zero */
+ #define OMAP_I2C_STAT_BF      (1 << 8)        /* Bus Free */
  #define OMAP_I2C_STAT_XRDY    (1 << 4)        /* Transmit data ready */
  #define OMAP_I2C_STAT_RRDY    (1 << 3)        /* Receive data ready */
  #define OMAP_I2C_STAT_ARDY    (1 << 2)        /* Register access ready */
  #define OMAP_I2C_SCLH_HSSCLH  8
  
  /* I2C System Test Register (OMAP_I2C_SYSTEST): */
- #ifdef DEBUG
  #define OMAP_I2C_SYSTEST_ST_EN                (1 << 15)       /* System test enable */
  #define OMAP_I2C_SYSTEST_FREE         (1 << 14)       /* Free running mode */
  #define OMAP_I2C_SYSTEST_TMODE_MASK   (3 << 12)       /* Test mode select */
  #define OMAP_I2C_SYSTEST_TMODE_SHIFT  (12)            /* Test mode select */
+ /* Functional mode */
+ #define OMAP_I2C_SYSTEST_SCL_I_FUNC   (1 << 8)        /* SCL line input value */
+ #define OMAP_I2C_SYSTEST_SCL_O_FUNC   (1 << 7)        /* SCL line output value */
+ #define OMAP_I2C_SYSTEST_SDA_I_FUNC   (1 << 6)        /* SDA line input value */
+ #define OMAP_I2C_SYSTEST_SDA_O_FUNC   (1 << 5)        /* SDA line output value */
+ /* SDA/SCL IO mode */
  #define OMAP_I2C_SYSTEST_SCL_I                (1 << 3)        /* SCL line sense in */
  #define OMAP_I2C_SYSTEST_SCL_O                (1 << 2)        /* SCL line drive out */
  #define OMAP_I2C_SYSTEST_SDA_I                (1 << 1)        /* SDA line sense in */
  #define OMAP_I2C_SYSTEST_SDA_O                (1 << 0)        /* SDA line drive out */
- #endif
  
  /* OCP_SYSSTATUS bit definitions */
  #define SYSS_RESETDONE_MASK           (1 << 0)
@@@ -202,6 -209,9 +209,9 @@@ struct omap_i2c_dev 
                                                 */
        u32                     rev;
        unsigned                b_hw:1;         /* bad h/w fixes */
+       unsigned                bb_valid:1;     /* true when BB-bit reflects
+                                                * the I2C bus state
+                                                */
        unsigned                receiver:1;     /* true when we're in receiver mode */
        u16                     iestate;        /* Saved interrupt register */
        u16                     pscstate;
@@@ -289,6 -299,12 +299,12 @@@ static void __omap_i2c_init(struct omap
        /* Take the I2C module out of reset: */
        omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
  
+       /*
+        * NOTE: right after setting CON_EN, STAT_BB could be 0 while the
+        * bus is busy. It will be changed to 1 on the next IP FCLK clock.
+        * udelay(1) will be enough to fix that.
+        */
        /*
         * Don't write to this register if the IE state is 0 as it can
         * cause deadlock.
@@@ -328,7 -344,12 +344,12 @@@ static int omap_i2c_reset(struct omap_i
                /* SYSC register is cleared by the reset; rewrite it */
                omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, sysc);
  
+               if (dev->rev > OMAP_I2C_REV_ON_3430_3530) {
+                       /* Schedule I2C-bus monitoring on the next transfer */
+                       dev->bb_valid = 0;
+               }
        }
        return 0;
  }
  
@@@ -441,6 -462,11 +462,11 @@@ static int omap_i2c_init(struct omap_i2
        dev->scllstate = scll;
        dev->sclhstate = sclh;
  
+       if (dev->rev <= OMAP_I2C_REV_ON_3430_3530) {
+               /* Not implemented */
+               dev->bb_valid = 1;
+       }
        __omap_i2c_init(dev);
  
        return 0;
@@@ -465,6 -491,91 +491,91 @@@ static int omap_i2c_wait_for_bb(struct 
        return 0;
  }
  
+ /*
+  * Wait while BB-bit doesn't reflect the I2C bus state
+  *
+  * In a multimaster environment, after IP software reset, BB-bit value doesn't
+  * correspond to the current bus state. It may happen what BB-bit will be 0,
+  * while the bus is busy due to another I2C master activity.
+  * Here are BB-bit values after reset:
+  *     SDA   SCL   BB   NOTES
+  *       0     0    0   1, 2
+  *       1     0    0   1, 2
+  *       0     1    1
+  *       1     1    0   3
+  * Later, if IP detect SDA=0 and SCL=1 (ACK) or SDA 1->0 while SCL=1 (START)
+  * combinations on the bus, it set BB-bit to 1.
+  * If IP detect SDA 0->1 while SCL=1 (STOP) combination on the bus,
+  * it set BB-bit to 0 and BF to 1.
+  * BB and BF bits correctly tracks the bus state while IP is suspended
+  * BB bit became valid on the next FCLK clock after CON_EN bit set
+  *
+  * NOTES:
+  * 1. Any transfer started when BB=0 and bus is busy wouldn't be
+  *    completed by IP and results in controller timeout.
+  * 2. Any transfer started when BB=0 and SCL=0 results in IP
+  *    starting to drive SDA low. In that case IP corrupt data
+  *    on the bus.
+  * 3. Any transfer started in the middle of another master's transfer
+  *    results in unpredictable results and data corruption
+  */
+ static int omap_i2c_wait_for_bb_valid(struct omap_i2c_dev *dev)
+ {
+       unsigned long bus_free_timeout = 0;
+       unsigned long timeout;
+       int bus_free = 0;
+       u16 stat, systest;
+       if (dev->bb_valid)
+               return 0;
+       timeout = jiffies + OMAP_I2C_TIMEOUT;
+       while (1) {
+               stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
+               /*
+                * We will see BB or BF event in a case IP had detected any
+                * activity on the I2C bus. Now IP correctly tracks the bus
+                * state. BB-bit value is valid.
+                */
+               if (stat & (OMAP_I2C_STAT_BB | OMAP_I2C_STAT_BF))
+                       break;
+               /*
+                * Otherwise, we must look signals on the bus to make
+                * the right decision.
+                */
+               systest = omap_i2c_read_reg(dev, OMAP_I2C_SYSTEST_REG);
+               if ((systest & OMAP_I2C_SYSTEST_SCL_I_FUNC) &&
+                   (systest & OMAP_I2C_SYSTEST_SDA_I_FUNC)) {
+                       if (!bus_free) {
+                               bus_free_timeout = jiffies +
+                                       OMAP_I2C_BUS_FREE_TIMEOUT;
+                               bus_free = 1;
+                       }
+                       /*
+                        * SDA and SCL lines was high for 10 ms without bus
+                        * activity detected. The bus is free. Consider
+                        * BB-bit value is valid.
+                        */
+                       if (time_after(jiffies, bus_free_timeout))
+                               break;
+               } else {
+                       bus_free = 0;
+               }
+               if (time_after(jiffies, timeout)) {
+                       dev_warn(dev->dev, "timeout waiting for bus ready\n");
+                       return -ETIMEDOUT;
+               }
+               msleep(1);
+       }
+       dev->bb_valid = 1;
+       return 0;
+ }
  static void omap_i2c_resize_fifo(struct omap_i2c_dev *dev, u8 size, bool is_rx)
  {
        u16             buf;
@@@ -557,7 -668,11 +668,11 @@@ static int omap_i2c_xfer_msg(struct i2c
  
        if (!dev->b_hw && stop)
                w |= OMAP_I2C_CON_STP;
+       /*
+        * NOTE: STAT_BB bit could became 1 here if another master occupy
+        * the bus. IP successfully complete transfer when the bus will be
+        * free again (BB reset to 0).
+        */
        omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
  
        /*
                return 0;
  
        /* We have an error */
-       if (dev->cmd_err & (OMAP_I2C_STAT_AL | OMAP_I2C_STAT_ROVR |
-                           OMAP_I2C_STAT_XUDF)) {
+       if (dev->cmd_err & (OMAP_I2C_STAT_ROVR | OMAP_I2C_STAT_XUDF)) {
                omap_i2c_reset(dev);
                __omap_i2c_init(dev);
                return -EIO;
        }
  
+       if (dev->cmd_err & OMAP_I2C_STAT_AL)
+               return -EAGAIN;
        if (dev->cmd_err & OMAP_I2C_STAT_NACK) {
                if (msg->flags & I2C_M_IGNORE_NAK)
                        return 0;
@@@ -635,6 -752,10 +752,10 @@@ omap_i2c_xfer(struct i2c_adapter *adap
        if (r < 0)
                goto out;
  
+       r = omap_i2c_wait_for_bb_valid(dev);
+       if (r < 0)
+               goto out;
        r = omap_i2c_wait_for_bb(dev);
        if (r < 0)
                goto out;
@@@ -922,12 -1043,14 +1043,12 @@@ omap_i2c_isr_thread(int this_irq, void 
                if (stat & OMAP_I2C_STAT_NACK) {
                        err |= OMAP_I2C_STAT_NACK;
                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
 -                      break;
                }
  
                if (stat & OMAP_I2C_STAT_AL) {
                        dev_err(dev->dev, "Arbitration lost\n");
                        err |= OMAP_I2C_STAT_AL;
                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
 -                      break;
                }
  
                /*
                        if (dev->fifo_size)
                                num_bytes = dev->buf_len;
  
 -                      omap_i2c_receive_data(dev, num_bytes, true);
 -
 -                      if (dev->errata & I2C_OMAP_ERRATA_I207)
 +                      if (dev->errata & I2C_OMAP_ERRATA_I207) {
                                i2c_omap_errata_i207(dev, stat);
 +                              num_bytes = (omap_i2c_read_reg(dev,
 +                                      OMAP_I2C_BUFSTAT_REG) >> 8) & 0x3F;
 +                      }
  
 +                      omap_i2c_receive_data(dev, num_bytes, true);
                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
                        continue;
                }
@@@ -1280,6 -1401,7 +1401,6 @@@ static int omap_i2c_remove(struct platf
  }
  
  #ifdef CONFIG_PM
 -#ifdef CONFIG_PM_RUNTIME
  static int omap_i2c_runtime_suspend(struct device *dev)
  {
        struct platform_device *pdev = to_platform_device(dev);
@@@ -1317,6 -1439,7 +1438,6 @@@ static int omap_i2c_runtime_resume(stru
  
        return 0;
  }
 -#endif /* CONFIG_PM_RUNTIME */
  
  static struct dev_pm_ops omap_i2c_pm_ops = {
        SET_RUNTIME_PM_OPS(omap_i2c_runtime_suspend,
diff --combined drivers/i2c/i2c-core.c
index 229a89e84b0f2473c08f9f55d369c6a77d7eda17,c09d06bf4d9b03cbe939350bf23606bbc557f828..39d25a8cb1ad355e099b8958afa2b5e8c2c16f75
@@@ -24,6 -24,7 +24,7 @@@
     (c) 2013  Wolfram Sang <[email protected]>
     I2C ACPI code Copyright (C) 2014 Intel Corp
     Author: Lan Tianyu <[email protected]>
+    I2C slave support (c) 2014 by Wolfram Sang <[email protected]>
   */
  
  #include <linux/module.h>
@@@ -49,7 -50,6 +50,7 @@@
  #include <linux/acpi.h>
  #include <linux/jump_label.h>
  #include <asm/uaccess.h>
 +#include <linux/err.h>
  
  #include "i2c-core.h"
  
@@@ -261,7 -261,7 +262,7 @@@ acpi_i2c_space_handler(u32 function, ac
        struct acpi_resource *ares;
        u32 accessor_type = function >> 16;
        u8 action = function & ACPI_IO_MASK;
-       acpi_status ret = AE_OK;
+       acpi_status ret;
        int status;
  
        ret = acpi_buffer_to_resource(info->connection, info->length, &ares);
@@@ -404,7 -404,6 +405,7 @@@ static int acpi_i2c_install_space_handl
                return -ENOMEM;
        }
  
 +      acpi_walk_dep_device_list(handle);
        return 0;
  }
  
@@@ -628,6 -627,17 +629,17 @@@ static int i2c_device_probe(struct devi
        if (!client)
                return 0;
  
+       if (!client->irq && dev->of_node) {
+               int irq = of_irq_get(dev->of_node, 0);
+               if (irq == -EPROBE_DEFER)
+                       return irq;
+               if (irq < 0)
+                       irq = 0;
+               client->irq = irq;
+       }
        driver = to_i2c_driver(dev->driver);
        if (!driver->probe || !driver->id_table)
                return -ENODEV;
@@@ -1370,69 -1380,61 +1382,67 @@@ static void i2c_scan_static_board_info(
  /* OF support code */
  
  #if IS_ENABLED(CONFIG_OF)
 -static void of_i2c_register_devices(struct i2c_adapter *adap)
 +static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap,
 +                                               struct device_node *node)
  {
 -      void *result;
 -      struct device_node *node;
 +      struct i2c_client *result;
 +      struct i2c_board_info info = {};
 +      struct dev_archdata dev_ad = {};
 +      const __be32 *addr;
 +      int len;
  
 -      /* Only register child devices if the adapter has a node pointer set */
 -      if (!adap->dev.of_node)
 -              return;
 +      dev_dbg(&adap->dev, "of_i2c: register %s\n", node->full_name);
  
 -      dev_dbg(&adap->dev, "of_i2c: walking child nodes\n");
 +      if (of_modalias_node(node, info.type, sizeof(info.type)) < 0) {
 +              dev_err(&adap->dev, "of_i2c: modalias failure on %s\n",
 +                      node->full_name);
 +              return ERR_PTR(-EINVAL);
 +      }
  
 -      for_each_available_child_of_node(adap->dev.of_node, node) {
 -              struct i2c_board_info info = {};
 -              struct dev_archdata dev_ad = {};
 -              const __be32 *addr;
 -              int len;
 +      addr = of_get_property(node, "reg", &len);
 +      if (!addr || (len < sizeof(int))) {
 +              dev_err(&adap->dev, "of_i2c: invalid reg on %s\n",
 +                      node->full_name);
 +              return ERR_PTR(-EINVAL);
 +      }
  
 -              dev_dbg(&adap->dev, "of_i2c: register %s\n", node->full_name);
 +      info.addr = be32_to_cpup(addr);
 +      if (info.addr > (1 << 10) - 1) {
 +              dev_err(&adap->dev, "of_i2c: invalid addr=%x on %s\n",
 +                      info.addr, node->full_name);
 +              return ERR_PTR(-EINVAL);
 +      }
  
-       info.irq = irq_of_parse_and_map(node, 0);
 -              if (of_modalias_node(node, info.type, sizeof(info.type)) < 0) {
 -                      dev_err(&adap->dev, "of_i2c: modalias failure on %s\n",
 -                              node->full_name);
 -                      continue;
 -              }
 +      info.of_node = of_node_get(node);
 +      info.archdata = &dev_ad;
  
 -              addr = of_get_property(node, "reg", &len);
 -              if (!addr || (len < sizeof(int))) {
 -                      dev_err(&adap->dev, "of_i2c: invalid reg on %s\n",
 -                              node->full_name);
 -                      continue;
 -              }
 +      if (of_get_property(node, "wakeup-source", NULL))
 +              info.flags |= I2C_CLIENT_WAKE;
  
 -              info.addr = be32_to_cpup(addr);
 -              if (info.addr > (1 << 10) - 1) {
 -                      dev_err(&adap->dev, "of_i2c: invalid addr=%x on %s\n",
 -                              info.addr, node->full_name);
 -                      continue;
 -              }
 +      request_module("%s%s", I2C_MODULE_PREFIX, info.type);
  
 -              info.of_node = of_node_get(node);
 -              info.archdata = &dev_ad;
 +      result = i2c_new_device(adap, &info);
 +      if (result == NULL) {
 +              dev_err(&adap->dev, "of_i2c: Failure registering %s\n",
 +                      node->full_name);
 +              of_node_put(node);
-               irq_dispose_mapping(info.irq);
 +              return ERR_PTR(-EINVAL);
 +      }
 +      return result;
 +}
  
 -              if (of_get_property(node, "wakeup-source", NULL))
 -                      info.flags |= I2C_CLIENT_WAKE;
 +static void of_i2c_register_devices(struct i2c_adapter *adap)
 +{
 +      struct device_node *node;
  
 -              request_module("%s%s", I2C_MODULE_PREFIX, info.type);
 +      /* Only register child devices if the adapter has a node pointer set */
 +      if (!adap->dev.of_node)
 +              return;
  
 -              result = i2c_new_device(adap, &info);
 -              if (result == NULL) {
 -                      dev_err(&adap->dev, "of_i2c: Failure registering %s\n",
 -                              node->full_name);
 -                      of_node_put(node);
 -                      continue;
 -              }
 -      }
 +      dev_dbg(&adap->dev, "of_i2c: walking child nodes\n");
 +
 +      for_each_available_child_of_node(adap->dev.of_node, node)
 +              of_i2c_register_device(adap, node);
  }
  
  static int of_dev_node_match(struct device *dev, void *data)
@@@ -1952,52 -1954,6 +1962,52 @@@ void i2c_clients_command(struct i2c_ada
  }
  EXPORT_SYMBOL(i2c_clients_command);
  
 +#if IS_ENABLED(CONFIG_OF_DYNAMIC)
 +static int of_i2c_notify(struct notifier_block *nb, unsigned long action,
 +                       void *arg)
 +{
 +      struct of_reconfig_data *rd = arg;
 +      struct i2c_adapter *adap;
 +      struct i2c_client *client;
 +
 +      switch (of_reconfig_get_state_change(action, rd)) {
 +      case OF_RECONFIG_CHANGE_ADD:
 +              adap = of_find_i2c_adapter_by_node(rd->dn->parent);
 +              if (adap == NULL)
 +                      return NOTIFY_OK;       /* not for us */
 +
 +              client = of_i2c_register_device(adap, rd->dn);
 +              put_device(&adap->dev);
 +
 +              if (IS_ERR(client)) {
 +                      pr_err("%s: failed to create for '%s'\n",
 +                                      __func__, rd->dn->full_name);
 +                      return notifier_from_errno(PTR_ERR(client));
 +              }
 +              break;
 +      case OF_RECONFIG_CHANGE_REMOVE:
 +              /* find our device by node */
 +              client = of_find_i2c_device_by_node(rd->dn);
 +              if (client == NULL)
 +                      return NOTIFY_OK;       /* no? not meant for us */
 +
 +              /* unregister takes one ref away */
 +              i2c_unregister_device(client);
 +
 +              /* and put the reference of the find */
 +              put_device(&client->dev);
 +              break;
 +      }
 +
 +      return NOTIFY_OK;
 +}
 +static struct notifier_block i2c_of_notifier = {
 +      .notifier_call = of_i2c_notify,
 +};
 +#else
 +extern struct notifier_block i2c_of_notifier;
 +#endif /* CONFIG_OF_DYNAMIC */
 +
  static int __init i2c_init(void)
  {
        int retval;
        retval = i2c_add_driver(&dummy_driver);
        if (retval)
                goto class_err;
 +
 +      if (IS_ENABLED(CONFIG_OF_DYNAMIC))
 +              WARN_ON(of_reconfig_notifier_register(&i2c_of_notifier));
 +
        return 0;
  
  class_err:
@@@ -2032,8 -1984,6 +2042,8 @@@ bus_err
  
  static void __exit i2c_exit(void)
  {
 +      if (IS_ENABLED(CONFIG_OF_DYNAMIC))
 +              WARN_ON(of_reconfig_notifier_unregister(&i2c_of_notifier));
        i2c_del_driver(&dummy_driver);
  #ifdef CONFIG_I2C_COMPAT
        class_compat_unregister(i2c_adapter_compat_class);
@@@ -2962,6 -2912,54 +2972,54 @@@ trace
  }
  EXPORT_SYMBOL(i2c_smbus_xfer);
  
+ int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb)
+ {
+       int ret;
+       if (!client || !slave_cb)
+               return -EINVAL;
+       if (!(client->flags & I2C_CLIENT_TEN)) {
+               /* Enforce stricter address checking */
+               ret = i2c_check_addr_validity(client->addr);
+               if (ret)
+                       return ret;
+       }
+       if (!client->adapter->algo->reg_slave)
+               return -EOPNOTSUPP;
+       client->slave_cb = slave_cb;
+       i2c_lock_adapter(client->adapter);
+       ret = client->adapter->algo->reg_slave(client);
+       i2c_unlock_adapter(client->adapter);
+       if (ret)
+               client->slave_cb = NULL;
+       return ret;
+ }
+ EXPORT_SYMBOL_GPL(i2c_slave_register);
+ int i2c_slave_unregister(struct i2c_client *client)
+ {
+       int ret;
+       if (!client->adapter->algo->unreg_slave)
+               return -EOPNOTSUPP;
+       i2c_lock_adapter(client->adapter);
+       ret = client->adapter->algo->unreg_slave(client);
+       i2c_unlock_adapter(client->adapter);
+       if (ret == 0)
+               client->slave_cb = NULL;
+       return ret;
+ }
+ EXPORT_SYMBOL_GPL(i2c_slave_unregister);
  MODULE_AUTHOR("Simon G. Vogl <[email protected]>");
  MODULE_DESCRIPTION("I2C-Bus main module");
  MODULE_LICENSE("GPL");
diff --combined include/linux/i2c.h
index 70ee0d3a2be3676aae85435cb187f72c4a0292f2,a720d9921b47a8bff59c12ec063851c5fcc26884..e3a1721c8354b98d6c613d536e4704ff52fa18d4
@@@ -46,6 -46,8 +46,8 @@@ struct i2c_client
  struct i2c_driver;
  union i2c_smbus_data;
  struct i2c_board_info;
+ enum i2c_slave_event;
+ typedef int (*i2c_slave_cb_t)(struct i2c_client *, enum i2c_slave_event, u8 *);
  
  struct module;
  
@@@ -209,6 -211,8 +211,8 @@@ struct i2c_driver 
   * @irq: indicates the IRQ generated by this device (if any)
   * @detected: member of an i2c_driver.clients list or i2c-core's
   *    userspace_devices list
+  * @slave_cb: Callback when I2C slave mode of an adapter is used. The adapter
+  *    calls it to pass on slave events to the slave driver.
   *
   * An i2c_client identifies a single device (i.e. chip) connected to an
   * i2c bus. The behaviour exposed to Linux is defined by the driver
@@@ -224,6 -228,7 +228,7 @@@ struct i2c_client 
        struct device dev;              /* the device structure         */
        int irq;                        /* irq issued by device         */
        struct list_head detected;
+       i2c_slave_cb_t slave_cb;        /* callback for slave mode      */
  };
  #define to_i2c_client(d) container_of(d, struct i2c_client, dev)
  
@@@ -246,6 -251,25 +251,25 @@@ static inline void i2c_set_clientdata(s
        dev_set_drvdata(&dev->dev, data);
  }
  
+ /* I2C slave support */
+ enum i2c_slave_event {
+       I2C_SLAVE_REQ_READ_START,
+       I2C_SLAVE_REQ_READ_END,
+       I2C_SLAVE_REQ_WRITE_START,
+       I2C_SLAVE_REQ_WRITE_END,
+       I2C_SLAVE_STOP,
+ };
+ extern int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb);
+ extern int i2c_slave_unregister(struct i2c_client *client);
+ static inline int i2c_slave_event(struct i2c_client *client,
+                                 enum i2c_slave_event event, u8 *val)
+ {
+       return client->slave_cb(client, event, val);
+ }
  /**
   * struct i2c_board_info - template for device creation
   * @type: chip type, to initialize i2c_client.name
@@@ -352,6 -376,8 +376,8 @@@ i2c_register_board_info(int busnum, str
   *   into I2C transfers instead.
   * @functionality: Return the flags that this algorithm/adapter pair supports
   *   from the I2C_FUNC_* flags.
+  * @reg_slave: Register given client to I2C slave mode of this adapter
+  * @unreg_slave: Unregister given client from I2C slave mode of this adapter
   *
   * The following structs are for those who like to implement new bus drivers:
   * i2c_algorithm is the interface to a class of hardware solutions which can
   * to name two of the most common.
   *
   * The return codes from the @master_xfer field should indicate the type of
 - * error code that occured during the transfer, as documented in the kernel
 + * error code that occurred during the transfer, as documented in the kernel
   * Documentation file Documentation/i2c/fault-codes.
   */
  struct i2c_algorithm {
  
        /* To determine what the adapter supports */
        u32 (*functionality) (struct i2c_adapter *);
+       int (*reg_slave)(struct i2c_client *client);
+       int (*unreg_slave)(struct i2c_client *client);
  };
  
  /**
This page took 0.167032 seconds and 4 git commands to generate.