Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 17 Dec 2014 18:16:27 +0000 (10:16 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 17 Dec 2014 18:16:27 +0000 (10:16 -0800)
Pull thermal management update from Zhang Rui:
 "Summary:

   - of-thermal extension to allow drivers to register and use its
     functionality in a better way, without exploiting thermal core.
     From Lukasz Majewski.

   - Fix a bug in intel_soc_dts_thermal driver which calls a sleep
     function in interrupt handler.  From Maurice Petallo.

   - add a thermal UAPI header file for exporting the thermal generic
     netlink information to user-space.  From Florian Fainelli.

   - First round of refactoring in Exynos driver.  Bartlomiej and Lukasz
     are attempting to make it lean and easier to understand.

   - New thermal driver for Rockchip (rk3288), with support for DT
     thermal.  From Caesar Wang.

   - New thermal driver for Nvidia, Tegra124 SOCTHERM driver, with
     support for DT thermal.  From Mikko Perttunen.

   - New cooling device, based on common clock framework.  From Eduardo
     Valentin.

   - a couple of small fixes in thermal core framework.  From Srinivas
     Pandruvada, Javi Merino, Luis Henriques.

   - Dropping Armada A375-Z1 SoC thermal support as the chip is not in
     the market, armada folks decided to drop its support.

   - a couple of small fixes and cleanups in int340x thermal driver"

* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux: (58 commits)
  thermal: provide an UAPI header file
  Thermal/int340x: Clear the error value of the last acpi_bus_get_device() call
  thermal/powerclamp: add id for braswell cpu
  thermal: Intel SoC DTS: Don't do thermal zone update inside spin_lock
  Thermal: fix platform_no_drv_owner.cocci warnings
  Thermal/int340x: avoid unnecessary pointer casting
  thermal: int3403: Delete a check before thermal_zone_device_unregister()
  thermal/int3400: export uuids
  thermal: of: Extend current of-thermal.c code to allow setting emulated temp
  thermal: of: Extend of-thermal to export table of trip points
  thermal: of: Rename struct __thermal_trip to struct thermal_trip
  thermal: of: Extend of-thermal.c to provide check if trip point is valid
  thermal: of: Extend of-thermal.c to provide number of trip points
  thermal: Fix error path in thermal_init()
  thermal: lock the thermal zone when switching governors
  thermal: core: ignore invalid trip temperature
  thermal: armada: Remove support for A375-Z1 SoC
  thermal: rockchip: add driver for thermal
  dt-bindings: document Rockchip thermal
  thermal: exynos: remove exynos_tmu_data.h include
  ...

1  2 
MAINTAINERS
arch/arm/boot/dts/tegra124.dtsi
drivers/hwmon/lm75.c
drivers/hwmon/ntc_thermistor.c
drivers/thermal/armada_thermal.c
drivers/thermal/samsung/exynos_tmu.c
include/uapi/linux/Kbuild

diff --combined MAINTAINERS
index 68e79dac352f1019220c65b34576f60b15b1df8a,9c709f503c03177275a14d0b9741a6f555346fe3..4507a7e87c009892ebe7635f21022d9a889be210
@@@ -618,16 -618,6 +618,16 @@@ S:       Maintaine
  F:    drivers/iommu/amd_iommu*.[ch]
  F:    include/linux/amd-iommu.h
  
 +AMD KFD
 +M:      Oded Gabbay <oded.gabbay@amd.com>
 +L:      dri-devel@lists.freedesktop.org
 +T:      git git://people.freedesktop.org/~gabbayo/linux.git
 +S:      Supported
 +F:      drivers/gpu/drm/amd/amdkfd/
 +F:      drivers/gpu/drm/radeon/radeon_kfd.c
 +F:      drivers/gpu/drm/radeon/radeon_kfd.h
 +F:      include/uapi/linux/kfd_ioctl.h
 +
  AMD MICROCODE UPDATE SUPPORT
  M:    Andreas Herrmann <herrmann.der.user@googlemail.com>
  L:    amd64-microcode@amd64.org
@@@ -860,7 -850,6 +860,7 @@@ ARM/Amlogic MesonX SoC suppor
  M:    Carlo Caione <carlo@caione.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 +F:    drivers/media/rc/meson-ir.c
  N:    meson[x68]
  
  ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
@@@ -872,7 -861,6 +872,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
@@@ -930,15 -918,6 +930,15 @@@ M:       Hubert Feurstein <hubert.feurstein@c
  S:    Maintained
  F:    arch/arm/mach-ep93xx/micro9.c
  
 +ARM/CORESIGHT FRAMEWORK AND DRIVERS
 +M:    Mathieu Poirier <mathieu.poirier@linaro.org>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    drivers/coresight/*
 +F:    Documentation/trace/coresight.txt
 +F:    Documentation/devicetree/bindings/arm/coresight.txt
 +F:    Documentation/ABI/testing/sysfs-bus-coresight-devices-*
 +
  ARM/CORGI MACHINE SUPPORT
  M:    Richard Purdie <rpurdie@rpsys.net>
  S:    Maintained
@@@ -1329,22 -1308,30 +1329,22 @@@ F:   drivers/*/*rockchip
  F:    drivers/*/*/*rockchip*
  F:    sound/soc/rockchip/
  
 -ARM/SAMSUNG ARM ARCHITECTURES
 -M:    Ben Dooks <ben-linux@fluff.org>
 -M:    Kukjin Kim <kgene.kim@samsung.com>
 +ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
 +M:    Kukjin Kim <kgene@kernel.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org (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 <kgene.kim@samsung.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-s5p*/
 -F:    arch/arm/mach-exynos*/
  N:    exynos
  
  ARM/SAMSUNG MOBILE MACHINE SUPPORT
@@@ -1394,12 -1381,12 +1394,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/
  
@@@ -1443,7 -1430,6 +1443,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 <kernel@wantstofly.org>
@@@ -1517,19 -1503,6 +1517,19 @@@ S:    Maintaine
  F:    drivers/clk/ux500/
  F:    include/linux/platform_data/clk-ux500.h
  
 +ARM/VERSATILE EXPRESS PLATFORM
 +M:    Liviu Dudau <liviu.dudau@arm.com>
 +M:    Sudeep Holla <sudeep.holla@arm.com>
 +M:    Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
 +L:    linux-arm-kernel@lists.infradead.org (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 <linux@arm.linux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1741,13 -1714,6 +1741,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 <ludovic.desroches@atmel.com>
 +L:    linux-arm-kernel@lists.infradead.org
 +L:    dmaengine@vger.kernel.org
 +S:    Supported
 +F:    drivers/dma/at_xdmac.c
 +
  ATMEL I2C DRIVER
  M:    Ludovic Desroches <ludovic.desroches@atmel.com>
  L:    linux-i2c@vger.kernel.org
@@@ -1820,11 -1786,10 +1820,11 @@@ S:   Supporte
  F:    drivers/scsi/esas2r
  
  AUDIT SUBSYSTEM
 +M:    Paul Moore <paul@paul-moore.com>
  M:    Eric Paris <eparis@redhat.com>
 -L:    linux-audit@redhat.com (subscribers-only)
 +L:    linux-audit@redhat.com (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
@@@ -1863,7 -1828,7 +1863,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -1897,6 -1862,7 +1897,6 @@@ F:      drivers/net/wireless/b43legacy
  
  BACKLIGHT CLASS/SUBSYSTEM
  M:    Jingoo Han <jg1.han@samsung.com>
 -M:    Bryan Wu <cooloney@gmail.com>
  M:    Lee Jones <lee.jones@linaro.org>
  S:    Maintained
  F:    drivers/video/backlight/
@@@ -1925,6 -1891,13 +1925,6 @@@ W:     http://bcache.evilpiepirate.or
  S:    Maintained:
  F:    drivers/md/bcache/
  
 -BECEEM BCS200/BCS220-3/BCSM250 WIMAX SUPPORT
 -M: Kevin McKinney <klmckinney1@gmail.com>
 -M: Matthias Beyer <mail@beyermatthias.de>
 -L: devel@driverdev.osuosl.org
 -S: Maintained
 -F: drivers/staging/bcm*
 -
  BEFS FILE SYSTEM
  S:    Orphan
  F:    Documentation/filesystems/befs.txt
@@@ -2105,14 -2078,6 +2105,14 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  N:    bcm2835
  
 +BROADCOM BCM33XX MIPS ARCHITECTURE
 +M:    Kevin Cernekee <cernekee@gmail.com>
 +L:    linux-mips@linux-mips.org
 +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 <hauke@hauke-m.de>
  L:    linux-arm-kernel@lists.infradead.org
@@@ -2129,34 -2094,13 +2129,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 <cernekee@gmail.com>
 +L:    linux-usb@vger.kernel.org
 +S:    Maintained
 +F:    drivers/usb/gadget/udc/bcm63xx_udc.*
 +
  BROADCOM BCM7XXX ARM ARCHITECTURE
  M:    Marc Carino <marc.ceeeee@gmail.com>
  M:    Brian Norris <computersforpeace@gmail.com>
 +M:    Gregory Fong <gregory.0xf0@gmail.com>
 +M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  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 <cernekee@gmail.com>
 +M:    Florian Fainelli <f.fainelli@gmail.com>
 +L:    linux-mips@linux-mips.org
 +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 <prashant@broadcom.com>
@@@ -2187,20 -2131,6 +2187,20 @@@ L:    linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/scsi/bnx2i/
  
 +BROADCOM CYGNUS/IPROC ARM ARCHITECTURE
 +M:    Ray Jui <rjui@broadcom.com>
 +M:    Scott Branden <sbranden@broadcom.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +L:    bcm-kernel-feedback-list@broadcom.com
 +T:    git git://git.github.com/brcm/linux.git
 +S:    Maintained
 +N:    iproc
 +N:    cygnus
 +N:    bcm9113*
 +N:    bcm9583*
 +N:    bcm583*
 +N:    bcm113*
 +
  BROADCOM KONA GPIO DRIVER
  M:    Ray Jui <rjui@broadcom.com>
  L:    bcm-kernel-feedback-list@broadcom.com
@@@ -2268,7 -2198,7 +2268,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -2378,14 -2308,6 +2378,14 @@@ F:    security/capability.
  F:    security/commoncap.c
  F:    kernel/capability.c
  
 +CC2520 IEEE-802.15.4 RADIO DRIVER
 +M:    Varka Bhadram <varkabhadram@gmail.com>
 +L:    linux-wpan@vger.kernel.org
 +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 <arnd@arndb.de>
  L:    linuxppc-dev@lists.ozlabs.org
@@@ -2567,13 -2489,6 +2567,13 @@@ F:    fs/coda
  F:    include/linux/coda*.h
  F:    include/uapi/linux/coda*.h
  
 +CODA V4L2 MEM2MEM DRIVER
 +M:    Philipp Zabel <p.zabel@pengutronix.de>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/coda.txt
 +F:    drivers/media/platform/coda/
 +
  COMMON CLK FRAMEWORK
  M:    Mike Turquette <mturquette@linaro.org>
  L:    linux-kernel@vger.kernel.org
@@@ -2589,7 -2504,8 +2589,7 @@@ M:      Steve French <sfrench@samba.org
  L:    linux-cifs@vger.kernel.org
  L:    samba-technical@lists.samba.org (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/
@@@ -2666,7 -2582,7 +2666,7 @@@ L:      cgroups@vger.kernel.or
  L:    linux-mm@kvack.org
  S:    Maintained
  F:    mm/memcontrol.c
 -F:    mm/page_cgroup.c
 +F:    mm/swap_cgroup.c
  
  CORETEMP HARDWARE MONITORING DRIVER
  M:    Fenghua Yu <fenghua.yu@intel.com>
@@@ -2716,16 -2632,6 +2716,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 <b.zolnierkie@samsung.com>
 +M:    Daniel Lezcano <daniel.lezcano@linaro.org>
 +M:    Kukjin Kim <kgene@kernel.org>
 +L:    linux-pm@vger.kernel.org
 +L:    linux-samsung-soc@vger.kernel.org
 +S:    Supported
 +F:    drivers/cpuidle/cpuidle-exynos.c
 +F:    arch/arm/mach-exynos/pm.c
 +
  CPUIDLE DRIVERS
  M:    Rafael J. Wysocki <rjw@rjwysocki.net>
  M:    Daniel Lezcano <daniel.lezcano@linaro.org>
@@@ -2793,7 -2699,7 +2793,7 @@@ F:      drivers/net/wireless/cw1200
  
  CX18 VIDEO4LINUX DRIVER
  M:    Andy Walls <awalls@md.metrocast.net>
 -L:    ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
 +L:    ivtv-devel@ivtvdriver.org (subscribers-only)
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  W:    http://linuxtv.org
@@@ -2813,7 -2719,7 +2813,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -2956,10 -2862,11 +2956,10 @@@ F:   Documentation/networking/dmfe.tx
  F:    drivers/net/ethernet/dec/tulip/dmfe.c
  
  DC390/AM53C974 SCSI driver
 -M:    Kurt Garloff <garloff@suse.de>
 -W:    http://www.garloff.de/kurt/linux/dc390/
 -M:    Guennadi Liakhovetski <g.liakhovetski@gmx.de>
 +M:    Hannes Reinecke <hare@suse.de>
 +L:    linux-scsi@vger.kernel.org
  S:    Maintained
 -F:    drivers/scsi/tmscsim.*
 +F:    drivers/scsi/am53c974.c
  
  DC395x SCSI driver
  M:    Oliver Neukum <oliver@neukum.org>
@@@ -3182,8 -3089,7 +3182,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 <juergh@gmail.com>
@@@ -3300,13 -3206,6 +3300,13 @@@ F:    drivers/gpu/drm/exynos
  F:    include/drm/exynos*
  F:    include/uapi/drm/exynos*
  
 +DRM DRIVERS FOR FREESCALE IMX
 +M:    Philipp Zabel <p.zabel@pengutronix.de>
 +L:    dri-devel@lists.freedesktop.org
 +S:    Maintained
 +F:    drivers/gpu/drm/imx/
 +F:    Documentation/devicetree/bindings/drm/imx/
 +
  DRM DRIVERS FOR NVIDIA TEGRA
  M:    Thierry Reding <thierry.reding@gmail.com>
  M:    Terje Bergström <tbergstrom@nvidia.com>
@@@ -3503,7 -3402,7 +3503,7 @@@ F:      fs/ecryptfs
  EDAC-CORE
  M:    Doug Thompson <dougthompson@xmission.com>
  M:    Borislav Petkov <bp@alien8.de>
 -M:    Mauro Carvalho Chehab <m.chehab@samsung.com>
 +M:    Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  L:    linux-edac@vger.kernel.org
  W:    bluesmoke.sourceforge.net
  S:    Supported
@@@ -3552,7 -3451,7 +3552,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:    linux-edac@vger.kernel.org
  W:    bluesmoke.sourceforge.net
  S:    Maintained
@@@ -3580,21 -3479,21 +3580,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:    linux-edac@vger.kernel.org
  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:    linux-edac@vger.kernel.org
  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:    linux-edac@vger.kernel.org
  W:    bluesmoke.sourceforge.net
  S:    Maintained
@@@ -3637,7 -3536,7 +3637,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:    linux-edac@vger.kernel.org
  W:    bluesmoke.sourceforge.net
  S:    Maintained
@@@ -3697,7 -3596,7 +3697,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -4065,7 -3964,7 +4065,7 @@@ F:      drivers/tty/serial/ucc_uart.
  FREESCALE SOC SOUND DRIVERS
  M:    Timur Tabi <timur@tabi.org>
  M:    Nicolin Chen <nicoleotsuka@gmail.com>
 -M:    Xiubo Li <Li.Xiubo@freescale.com>
 +M:    Xiubo Li <Xiubo.Lee@gmail.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
@@@ -4255,12 -4154,6 +4255,12 @@@ L:    linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/media/usb/go7007/
  
 +GOODIX TOUCHSCREEN
 +M:    Bastien Nocera <hadess@hadess.net>
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    drivers/input/touchscreen/goodix.c
 +
  GPIO SUBSYSTEM
  M:    Linus Walleij <linus.walleij@linaro.org>
  M:    Alexandre Courbot <gnurou@gmail.com>
@@@ -4682,7 -4575,6 +4682,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
@@@ -4821,21 -4713,8 +4821,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 <sean@mess.org>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/rc/igorplugusb.c
 +
  IGUANAWORKS USB IR TRANSCEIVER
  M:    Sean Young <sean@mess.org>
  L:    linux-media@vger.kernel.org
@@@ -4893,11 -4772,6 +4893,11 @@@ L:    linux-security-module@vger.kernel.or
  S:    Supported
  F:    security/integrity/ima/
  
 +IMGTEC IR DECODER DRIVER
 +M:    James Hogan <james.hogan@imgtec.com>
 +S:    Maintained
 +F:    drivers/media/rc/img-ir/
 +
  IMS TWINTURBO FRAMEBUFFER DRIVER
  L:    linux-fbdev@vger.kernel.org
  S:    Orphan
@@@ -5312,7 -5186,7 +5312,7 @@@ F:      drivers/media/tuners/it913x
  
  IVTV VIDEO4LINUX DRIVER
  M:    Andy Walls <awalls@md.metrocast.net>
 -L:    ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
 +L:    ivtv-devel@ivtvdriver.org (subscribers-only)
  L:    linux-media@vger.kernel.org
  T:    git git://linuxtv.org/media_tree.git
  W:    http://www.ivtvdriver.org
@@@ -6007,11 -5881,6 +6007,11 @@@ M:    Russell King <rmk+kernel@arm.linux.o
  S:    Maintained
  F:    drivers/gpu/drm/armada/
  
 +MARVELL 88E6352 DSA support
 +M:    Guenter Roeck <linux@roeck-us.net>
 +S:    Maintained
 +F:    drivers/net/dsa/mv88e6352.c
 +
  MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2)
  M:    Mirko Lindner <mlindner@marvell.com>
  M:    Stephen Hemminger <stephen@networkplumber.org>
@@@ -6093,7 -5962,7 +6093,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
@@@ -6122,13 -5991,10 +6122,13 @@@ W:   http://linuxtv.or
  S:    Odd Fixes
  F:    drivers/media/parport/pms*
  
 -MEGARAID SCSI DRIVERS
 -M:    Neela Syam Kolli <megaraidlinux@lsi.com>
 +MEGARAID SCSI/SAS DRIVERS
 +M:    Kashyap Desai <kashyap.desai@avagotech.com>
 +M:    Sumit Saxena <sumit.saxena@avagotech.com>
 +M:    Uday Lingala <uday.lingala@avagotech.com>
 +L:    megaraidlinux.pdl@avagotech.com
  L:    linux-scsi@vger.kernel.org
 -W:    http://megaraid.lsilogic.com
 +W:    http://www.lsi.com
  S:    Maintained
  F:    Documentation/scsi/megaraid.txt
  F:    drivers/scsi/megaraid.*
@@@ -6251,28 -6117,6 +6251,28 @@@ S:    Supporte
  F:    include/linux/mlx5/
  F:    drivers/infiniband/hw/mlx5/
  
 +MN88472 MEDIA DRIVER
 +M:    Antti Palosaari <crope@iki.fi>
 +L:    linux-media@vger.kernel.org
 +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 <crope@iki.fi>
 +L:    linux-media@vger.kernel.org
 +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 <rusty@rustcorp.com.au>
  S:    Maintained
@@@ -6461,6 -6305,7 +6461,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.*
@@@ -6716,13 -6561,6 +6716,13 @@@ S:    Maintaine
  F:    Documentation/scsi/NinjaSCSI.txt
  F:    drivers/scsi/nsp32*
  
 +NIOS2 ARCHITECTURE
 +M:    Ley Foon Tan <lftan@altera.com>
 +L:    nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
 +T:    git git://git.rocketboards.org/linux-socfpga.git
 +S:    Maintained
 +F:    arch/nios2/
 +
  NTB DRIVER
  M:    Jon Mason <jdmason@kudzu.us>
  M:    Dave Jiang <dave.jiang@intel.com>
@@@ -6763,12 -6601,6 +6763,12 @@@ S:    Supporte
  F:    drivers/gpu/drm/i2c/tda998x_drv.c
  F:    include/drm/i2c/tda998x.h
  
 +NXP TFA9879 DRIVER
 +M:    Peter Rosin <peda@axentia.se>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    sound/soc/codecs/tfa9879*
 +
  OMAP SUPPORT
  M:    Tony Lindgren <tony@atomide.com>
  L:    linux-omap@vger.kernel.org
@@@ -6838,14 -6670,6 +6838,14 @@@ L:    linux-omap@vger.kernel.or
  S:    Maintained
  F:    sound/soc/omap/
  
 +OMAP GENERAL PURPOSE MEMORY CONTROLLER SUPPORT
 +M:    Roger Quadros <rogerq@ti.com>
 +M:    Tony Lindgren <tony@atomide.com>
 +L:    linux-omap@vger.kernel.org
 +S:    Maintained
 +F:    drivers/memory/omap-gpmc.c
 +F:    arch/arm/mach-omap2/*gpmc*
 +
  OMAP FRAMEBUFFER SUPPORT
  M:    Tomi Valkeinen <tomi.valkeinen@ti.com>
  L:    linux-fbdev@vger.kernel.org
@@@ -7223,16 -7047,6 +7223,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 <minghuan.Lian@freescale.com>
 +M:    Mingkai Hu <mingkai.hu@freescale.com>
 +M:    Roy Zang <tie-fei.zang@freescale.com>
 +L:    linuxppc-dev@lists.ozlabs.org
 +L:    linux-pci@vger.kernel.org
 +L:    linux-arm-kernel@lists.infradead.org
 +S:    Maintained
 +F:    drivers/pci/host/*layerscape*
 +
  PCI DRIVER FOR IMX6
  M:    Richard Zhu <r65037@freescale.com>
  M:    Lucas Stach <l.stach@pengutronix.de>
@@@ -7412,13 -7226,7 +7412,13 @@@ PIN CONTROLLER - ATMEL AT9
  M:    Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -F:    drivers/pinctrl/pinctrl-at91.c
 +F:    drivers/pinctrl/pinctrl-at91.*
 +
 +PIN CONTROLLER - INTEL
 +M:    Mika Westerberg <mika.westerberg@linux.intel.com>
 +M:    Heikki Krogerus <heikki.krogerus@linux.intel.com>
 +S:    Maintained
 +F:    drivers/pinctrl/intel/
  
  PIN CONTROLLER - RENESAS
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
@@@ -8037,13 -7845,6 +8037,13 @@@ F:    drivers/hid/hid-roccat
  F:    include/linux/hid-roccat*
  F:    Documentation/ABI/*/sysfs-driver-hid-roccat*
  
 +ROCKER DRIVER
 +M:    Jiri Pirko <jiri@resnulli.us>
 +M:    Scott Feldman <sfeldma@gmail.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/ethernet/rocker/
 +
  ROCKETPORT DRIVER
  P:    Comtrol Corp.
  W:    http://www.comtrol.com
@@@ -8051,12 -7852,6 +8051,12 @@@ S:    Maintaine
  F:    Documentation/serial/rocket.txt
  F:    drivers/tty/rocket*
  
 +ROCKETPORT EXPRESS/INFINITY DRIVER
 +M:    Kevin Cernekee <cernekee@gmail.com>
 +L:    linux-serial@vger.kernel.org
 +S:    Odd Fixes
 +F:    drivers/tty/serial/rp2.*
 +
  ROSE NETWORK LAYER
  M:    Ralf Baechle <ralf@linux-mips.org>
  L:    linux-hams@vger.kernel.org
@@@ -8097,10 -7892,11 +8097,10 @@@ S:   Maintaine
  F:    drivers/media/dvb-frontends/rtl2832_sdr*
  
  RTL8180 WIRELESS DRIVER
 -M:    "John W. Linville" <linville@tuxdriver.com>
  L:    linux-wireless@vger.kernel.org
  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
@@@ -8217,7 -8013,7 +8217,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -8675,7 -8471,7 +8675,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -8685,14 -8481,6 +8685,14 @@@ F:    drivers/media/usb/siano
  F:    drivers/media/usb/siano/
  F:    drivers/media/mmc/siano/
  
 +SIMPLEFB FB DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-fbdev@vger.kernel.org
 +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:    linux-media@vger.kernel.org
  S:    Orphan
@@@ -8894,9 -8682,7 +8894,9 @@@ S:      Maintaine
  F:    drivers/leds/leds-net48xx.c
  
  SOFTLOGIC 6x10 MPEG CODEC
 -M:    Ismael Luceno <ismael.luceno@corp.bluecherry.net>
 +M:    Bluecherry Maintainers <maintainers@bluecherrydvr.com>
 +M:    Andrey Utkin <andrey.utkin@corp.bluecherry.net>
 +M:    Andrey Utkin <andrey.krieger.utkin@gmail.com>
  L:    linux-media@vger.kernel.org
  S:    Supported
  F:    drivers/media/pci/solo6x10/
@@@ -9253,13 -9039,6 +9253,13 @@@ F:    lib/swiotlb.
  F:    arch/*/kernel/pci-swiotlb.c
  F:    include/linux/swiotlb.h
  
 +SWITCHDEV
 +M:    Jiri Pirko <jiri@resnulli.us>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    net/switchdev/
 +F:    include/net/switchdev.h
 +
  SYNOPSYS ARC ARCHITECTURE
  M:    Vineet Gupta <vgupta@synopsys.com>
  S:    Supported
@@@ -9377,7 -9156,7 +9377,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -9385,7 -9164,7 +9385,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -9516,6 -9295,7 +9516,7 @@@ Q:      https://patchwork.kernel.org/project
  S:    Supported
  F:    drivers/thermal/
  F:    include/linux/thermal.h
+ F:    include/uapi/linux/thermal.h
  F:    include/linux/cpu_cooling.h
  F:    Documentation/devicetree/bindings/thermal/
  
@@@ -9620,7 -9400,7 +9621,7 @@@ F:      include/uapi/linux/tipc*.
  F:    net/tipc/
  
  TILE ARCHITECTURE
 -M:    Chris Metcalf <cmetcalf@tilera.com>
 +M:    Chris Metcalf <cmetcalf@ezchip.com>
  W:    http://www.tilera.com/scm/
  S:    Supported
  F:    arch/tile/
@@@ -9697,7 -9477,7 +9698,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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
@@@ -10517,15 -10297,8 +10518,15 @@@ L: linux-edac@vger.kernel.or
  S:    Maintained
  F:    arch/x86/kernel/cpu/mcheck/*
  
 +X86 VDSO
 +M:    Andy Lutomirski <luto@amacapital.net>
 +L:    linux-kernel@vger.kernel.org
 +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:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
index 3ad2e3cf299921b71b8e72a2eaf844517d7acb83,b92ac360b5b0e03886a87973a541f27112948d45..4be06c6ea0c8581dd71dad22af2ef45a8dc0984b
@@@ -1,9 -1,9 +1,10 @@@
  #include <dt-bindings/clock/tegra124-car.h>
  #include <dt-bindings/gpio/tegra-gpio.h>
 +#include <dt-bindings/memory/tegra124-mc.h>
  #include <dt-bindings/pinctrl/pinctrl-tegra.h>
  #include <dt-bindings/pinctrl/pinctrl-tegra-xusb.h>
  #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/thermal/tegra124-soctherm.h>
  
  #include "skeleton.dtsi"
  
                        resets = <&tegra_car 27>;
                        reset-names = "dc";
  
 +                      iommus = <&mc TEGRA_SWGROUP_DC>;
 +
                        nvidia,head = <0>;
                };
  
                        resets = <&tegra_car 26>;
                        reset-names = "dc";
  
 +                      iommus = <&mc TEGRA_SWGROUP_DCB>;
 +
                        nvidia,head = <1>;
                };
  
        pinmux: pinmux@0,70000868 {
                compatible = "nvidia,tegra124-pinmux";
                reg = <0x0 0x70000868 0x0 0x164>, /* Pad control registers */
 -                    <0x0 0x70003000 0x0 0x434>; /* Mux registers */
 +                    <0x0 0x70003000 0x0 0x434>, /* Mux registers */
 +                    <0x0 0x70000820 0x0 0x008>; /* MIPI pad control */
        };
  
        /*
                reset-names = "fuse";
        };
  
 +      mc: memory-controller@0,70019000 {
 +              compatible = "nvidia,tegra124-mc";
 +              reg = <0x0 0x70019000 0x0 0x1000>;
 +              clocks = <&tegra_car TEGRA124_CLK_MC>;
 +              clock-names = "mc";
 +
 +              interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
 +
 +              #iommu-cells = <1>;
 +      };
 +
        sata@0,70020000 {
                compatible = "nvidia,tegra124-ahci";
  
                status = "disabled";
        };
  
+       soctherm: thermal-sensor@0,700e2000 {
+               compatible = "nvidia,tegra124-soctherm";
+               reg = <0x0 0x700e2000 0x0 0x1000>;
+               interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&tegra_car TEGRA124_CLK_TSENSOR>,
+                       <&tegra_car TEGRA124_CLK_SOC_THERM>;
+               clock-names = "tsensor", "soctherm";
+               resets = <&tegra_car 78>;
+               reset-names = "soctherm";
+               #thermal-sensor-cells = <1>;
+       };
        ahub@0,70300000 {
                compatible = "nvidia,tegra124-ahub";
                reg = <0x0 0x70300000 0x0 0x200>,
                };
        };
  
+       thermal-zones {
+               cpu {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+                       thermal-sensors =
+                               <&soctherm TEGRA124_SOCTHERM_SENSOR_CPU>;
+               };
+               mem {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+                       thermal-sensors =
+                               <&soctherm TEGRA124_SOCTHERM_SENSOR_MEM>;
+               };
+               gpu {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+                       thermal-sensors =
+                               <&soctherm TEGRA124_SOCTHERM_SENSOR_GPU>;
+               };
+               pllx {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+                       thermal-sensors =
+                               <&soctherm TEGRA124_SOCTHERM_SENSOR_PLLX>;
+               };
+       };
        timer {
                compatible = "arm,armv7-timer";
                interrupts = <GIC_PPI 13
diff --combined drivers/hwmon/lm75.c
index 6753fd940c7623a0fbbd2790c7b7bf5af43f2a18,e7c8bf9093ead28c0946e40c07be4348afbfb1e8..fe41d5ae7cb2c02e8121d80ebab5bdf7a3533cab
@@@ -44,7 -44,6 +44,7 @@@ enum lm75_type {              /* keep sorted in alp
        g751,
        lm75,
        lm75a,
 +      lm75b,
        max6625,
        max6626,
        mcp980x,
@@@ -177,6 -176,10 +177,10 @@@ static struct attribute *lm75_attrs[] 
  };
  ATTRIBUTE_GROUPS(lm75);
  
+ static const struct thermal_zone_of_device_ops lm75_of_thermal_ops = {
+       .get_temp = lm75_read_temp,
+ };
  /*-----------------------------------------------------------------------*/
  
  /* device probe and removal */
@@@ -234,10 -237,6 +238,10 @@@ lm75_probe(struct i2c_client *client, c
                data->resolution = 9;
                data->sample_time = HZ / 2;
                break;
 +      case lm75b:
 +              data->resolution = 11;
 +              data->sample_time = HZ / 4;
 +              break;
        case max6625:
                data->resolution = 9;
                data->sample_time = HZ / 4;
        if (IS_ERR(data->hwmon_dev))
                return PTR_ERR(data->hwmon_dev);
  
-       data->tz = thermal_zone_of_sensor_register(data->hwmon_dev,
-                                                  0,
+       data->tz = thermal_zone_of_sensor_register(data->hwmon_dev, 0,
                                                   data->hwmon_dev,
-                                                  lm75_read_temp, NULL);
+                                                  &lm75_of_thermal_ops);
        if (IS_ERR(data->tz))
                data->tz = NULL;
  
@@@ -327,7 -325,6 +330,7 @@@ static const struct i2c_device_id lm75_
        { "g751", g751, },
        { "lm75", lm75, },
        { "lm75a", lm75a, },
 +      { "lm75b", lm75b, },
        { "max6625", max6625, },
        { "max6626", max6626, },
        { "mcp980x", mcp980x, },
@@@ -415,12 -412,6 +418,12 @@@ static int lm75_detect(struct i2c_clien
                 || i2c_smbus_read_byte_data(new_client, 7) != os)
                        return -ENODEV;
        }
 +      /*
 +       * It is very unlikely that this is a LM75 if both
 +       * hysteresis and temperature limit registers are 0.
 +       */
 +      if (hyst == 0 && os == 0)
 +              return -ENODEV;
  
        /* Addresses cycling */
        for (i = 8; i <= 248; i += 40) {
index fd9a945fe8dbc37702bcc3833ccfb3fa39144733,bca8521c8a9bdaadce6041edd2837bc686209fbd..112e4d45e4a0c31ff8234a36f008b629c71230a5
@@@ -486,6 -486,10 +486,10 @@@ static const struct attribute_group ntc
        .attrs = ntc_attributes,
  };
  
+ static const struct thermal_zone_of_device_ops ntc_of_thermal_ops = {
+       .get_temp = ntc_read_temp,
+ };
  static int ntc_thermistor_probe(struct platform_device *pdev)
  {
        const struct of_device_id *of_id =
                                                                pdev_id->name);
  
        data->tz = thermal_zone_of_sensor_register(data->dev, 0, data->dev,
-                                               ntc_read_temp, NULL);
+                                                  &ntc_of_thermal_ops);
        if (IS_ERR(data->tz)) {
                dev_dbg(&pdev->dev, "Failed to register to thermal fw.\n");
                data->tz = NULL;
@@@ -609,6 -613,7 +613,6 @@@ static int ntc_thermistor_remove(struc
  static struct platform_driver ntc_thermistor_driver = {
        .driver = {
                .name = "ntc-thermistor",
 -              .owner = THIS_MODULE,
                .of_match_table = of_match_ptr(ntc_match),
        },
        .probe = ntc_thermistor_probe,
index eaaf59c98ba2f6ec1a9c8bcbe3edc08f95d81af8,9c8e7834e4ae44f27764ad91e0662c3c2e80369a..c2556cf5186bc75b71870ed6a304fda430b8521b
  #define PMU_TDC0_OTF_CAL_MASK         (0x1 << 30)
  #define PMU_TDC0_START_CAL_MASK               (0x1 << 25)
  
- #define A375_Z1_CAL_RESET_LSB         0x8011e214
- #define A375_Z1_CAL_RESET_MSB         0x30a88019
- #define A375_Z1_WORKAROUND_BIT                BIT(9)
  #define A375_UNIT_CONTROL_SHIFT               27
  #define A375_UNIT_CONTROL_MASK                0x7
  #define A375_READOUT_INVERT           BIT(15)
@@@ -124,24 -120,12 +120,12 @@@ static void armada375_init_sensor(struc
                                  struct armada_thermal_priv *priv)
  {
        unsigned long reg;
-       bool quirk_needed =
-               !!of_device_is_compatible(pdev->dev.of_node,
-                                         "marvell,armada375-z1-thermal");
-       if (quirk_needed) {
-               /* Ensure these registers have the default (reset) values */
-               writel(A375_Z1_CAL_RESET_LSB, priv->control);
-               writel(A375_Z1_CAL_RESET_MSB, priv->control + 0x4);
-       }
  
        reg = readl(priv->control + 4);
        reg &= ~(A375_UNIT_CONTROL_MASK << A375_UNIT_CONTROL_SHIFT);
        reg &= ~A375_READOUT_INVERT;
        reg &= ~A375_HW_RESETn;
  
-       if (quirk_needed)
-               reg |= A375_Z1_WORKAROUND_BIT;
        writel(reg, priv->control + 4);
        mdelay(20);
  
@@@ -259,10 -243,6 +243,6 @@@ static const struct of_device_id armada
                .compatible = "marvell,armada375-thermal",
                .data       = &armada375_data,
        },
-       {
-               .compatible = "marvell,armada375-z1-thermal",
-               .data       = &armada375_data,
-       },
        {
                .compatible = "marvell,armada380-thermal",
                .data       = &armada380_data,
@@@ -329,6 -309,7 +309,6 @@@ static struct platform_driver armada_th
        .remove = armada_thermal_exit,
        .driver = {
                .name = "armada_thermal",
 -              .owner = THIS_MODULE,
                .of_match_table = armada_thermal_id_table,
        },
  };
index 1e7d0736e8628b7a0f5d0c14b0284eaf6501a875,2a1c4c7a7c1be2138a8fe8b0654e8683780497d9..d44d91d681d4333055526c28ff461e73ed709d0c
  
  #include "exynos_thermal_common.h"
  #include "exynos_tmu.h"
- #include "exynos_tmu_data.h"
+ /* Exynos generic registers */
+ #define EXYNOS_TMU_REG_TRIMINFO               0x0
+ #define EXYNOS_TMU_REG_CONTROL                0x20
+ #define EXYNOS_TMU_REG_STATUS         0x28
+ #define EXYNOS_TMU_REG_CURRENT_TEMP   0x40
+ #define EXYNOS_TMU_REG_INTEN          0x70
+ #define EXYNOS_TMU_REG_INTSTAT                0x74
+ #define EXYNOS_TMU_REG_INTCLEAR               0x78
+ #define EXYNOS_TMU_TEMP_MASK          0xff
+ #define EXYNOS_TMU_REF_VOLTAGE_SHIFT  24
+ #define EXYNOS_TMU_REF_VOLTAGE_MASK   0x1f
+ #define EXYNOS_TMU_BUF_SLOPE_SEL_MASK 0xf
+ #define EXYNOS_TMU_BUF_SLOPE_SEL_SHIFT        8
+ #define EXYNOS_TMU_CORE_EN_SHIFT      0
+ /* Exynos3250 specific registers */
+ #define EXYNOS_TMU_TRIMINFO_CON1      0x10
+ /* Exynos4210 specific registers */
+ #define EXYNOS4210_TMU_REG_THRESHOLD_TEMP     0x44
+ #define EXYNOS4210_TMU_REG_TRIG_LEVEL0        0x50
+ /* Exynos5250, Exynos4412, Exynos3250 specific registers */
+ #define EXYNOS_TMU_TRIMINFO_CON2      0x14
+ #define EXYNOS_THD_TEMP_RISE          0x50
+ #define EXYNOS_THD_TEMP_FALL          0x54
+ #define EXYNOS_EMUL_CON               0x80
+ #define EXYNOS_TRIMINFO_RELOAD_ENABLE 1
+ #define EXYNOS_TRIMINFO_25_SHIFT      0
+ #define EXYNOS_TRIMINFO_85_SHIFT      8
+ #define EXYNOS_TMU_TRIP_MODE_SHIFT    13
+ #define EXYNOS_TMU_TRIP_MODE_MASK     0x7
+ #define EXYNOS_TMU_THERM_TRIP_EN_SHIFT        12
+ #define EXYNOS_TMU_INTEN_RISE0_SHIFT  0
+ #define EXYNOS_TMU_INTEN_RISE1_SHIFT  4
+ #define EXYNOS_TMU_INTEN_RISE2_SHIFT  8
+ #define EXYNOS_TMU_INTEN_RISE3_SHIFT  12
+ #define EXYNOS_TMU_INTEN_FALL0_SHIFT  16
+ #define EXYNOS_EMUL_TIME      0x57F0
+ #define EXYNOS_EMUL_TIME_MASK 0xffff
+ #define EXYNOS_EMUL_TIME_SHIFT        16
+ #define EXYNOS_EMUL_DATA_SHIFT        8
+ #define EXYNOS_EMUL_DATA_MASK 0xFF
+ #define EXYNOS_EMUL_ENABLE    0x1
+ /* Exynos5260 specific */
+ #define EXYNOS5260_TMU_REG_INTEN              0xC0
+ #define EXYNOS5260_TMU_REG_INTSTAT            0xC4
+ #define EXYNOS5260_TMU_REG_INTCLEAR           0xC8
+ #define EXYNOS5260_EMUL_CON                   0x100
+ /* Exynos4412 specific */
+ #define EXYNOS4412_MUX_ADDR_VALUE          6
+ #define EXYNOS4412_MUX_ADDR_SHIFT          20
+ /*exynos5440 specific registers*/
+ #define EXYNOS5440_TMU_S0_7_TRIM              0x000
+ #define EXYNOS5440_TMU_S0_7_CTRL              0x020
+ #define EXYNOS5440_TMU_S0_7_DEBUG             0x040
+ #define EXYNOS5440_TMU_S0_7_TEMP              0x0f0
+ #define EXYNOS5440_TMU_S0_7_TH0                       0x110
+ #define EXYNOS5440_TMU_S0_7_TH1                       0x130
+ #define EXYNOS5440_TMU_S0_7_TH2                       0x150
+ #define EXYNOS5440_TMU_S0_7_IRQEN             0x210
+ #define EXYNOS5440_TMU_S0_7_IRQ                       0x230
+ /* exynos5440 common registers */
+ #define EXYNOS5440_TMU_IRQ_STATUS             0x000
+ #define EXYNOS5440_TMU_PMIN                   0x004
+ #define EXYNOS5440_TMU_INTEN_RISE0_SHIFT      0
+ #define EXYNOS5440_TMU_INTEN_RISE1_SHIFT      1
+ #define EXYNOS5440_TMU_INTEN_RISE2_SHIFT      2
+ #define EXYNOS5440_TMU_INTEN_RISE3_SHIFT      3
+ #define EXYNOS5440_TMU_INTEN_FALL0_SHIFT      4
+ #define EXYNOS5440_TMU_TH_RISE4_SHIFT         24
+ #define EXYNOS5440_EFUSE_SWAP_OFFSET          8
  
  /**
   * struct exynos_tmu_data : A structure to hold the private data of the TMU
   * @temp_error2: fused value of the second point trim.
   * @regulator: pointer to the TMU regulator structure.
   * @reg_conf: pointer to structure to register with core thermal.
+  * @tmu_initialize: SoC specific TMU initialization method
+  * @tmu_control: SoC specific TMU control method
+  * @tmu_read: SoC specific TMU temperature read method
+  * @tmu_set_emulation: SoC specific TMU emulation setting method
+  * @tmu_clear_irqs: SoC specific TMU interrupts clearing method
   */
  struct exynos_tmu_data {
        int id;
        u8 temp_error1, temp_error2;
        struct regulator *regulator;
        struct thermal_sensor_conf *reg_conf;
+       int (*tmu_initialize)(struct platform_device *pdev);
+       void (*tmu_control)(struct platform_device *pdev, bool on);
+       int (*tmu_read)(struct exynos_tmu_data *data);
+       void (*tmu_set_emulation)(struct exynos_tmu_data *data,
+                                 unsigned long temp);
+       void (*tmu_clear_irqs)(struct exynos_tmu_data *data);
  };
  
  /*
@@@ -122,83 -213,10 +213,10 @@@ static int code_to_temp(struct exynos_t
        return temp;
  }
  
- static void exynos_tmu_clear_irqs(struct exynos_tmu_data *data)
- {
-       const struct exynos_tmu_registers *reg = data->pdata->registers;
-       unsigned int val_irq;
-       val_irq = readl(data->base + reg->tmu_intstat);
-       /*
-        * Clear the interrupts.  Please note that the documentation for
-        * Exynos3250, Exynos4412, Exynos5250 and Exynos5260 incorrectly
-        * states that INTCLEAR register has a different placing of bits
-        * responsible for FALL IRQs than INTSTAT register.  Exynos5420
-        * and Exynos5440 documentation is correct (Exynos4210 doesn't
-        * support FALL IRQs at all).
-        */
-       writel(val_irq, data->base + reg->tmu_intclear);
- }
- static int exynos_tmu_initialize(struct platform_device *pdev)
+ static void sanitize_temp_error(struct exynos_tmu_data *data, u32 trim_info)
  {
-       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
        struct exynos_tmu_platform_data *pdata = data->pdata;
-       const struct exynos_tmu_registers *reg = pdata->registers;
-       unsigned int status, trim_info = 0, con, ctrl;
-       unsigned int rising_threshold = 0, falling_threshold = 0;
-       int ret = 0, threshold_code, i;
-       mutex_lock(&data->lock);
-       clk_enable(data->clk);
-       if (!IS_ERR(data->clk_sec))
-               clk_enable(data->clk_sec);
  
-       if (TMU_SUPPORTS(pdata, READY_STATUS)) {
-               status = readb(data->base + reg->tmu_status);
-               if (!status) {
-                       ret = -EBUSY;
-                       goto out;
-               }
-       }
-       if (TMU_SUPPORTS(pdata, TRIM_RELOAD)) {
-               for (i = 0; i < reg->triminfo_ctrl_count; i++) {
-                       if (pdata->triminfo_reload[i]) {
-                               ctrl = readl(data->base +
-                                               reg->triminfo_ctrl[i]);
-                               ctrl |= pdata->triminfo_reload[i];
-                               writel(ctrl, data->base +
-                                               reg->triminfo_ctrl[i]);
-                       }
-               }
-       }
-       /* Save trimming info in order to perform calibration */
-       if (data->soc == SOC_ARCH_EXYNOS5440) {
-               /*
-                * For exynos5440 soc triminfo value is swapped between TMU0 and
-                * TMU2, so the below logic is needed.
-                */
-               switch (data->id) {
-               case 0:
-                       trim_info = readl(data->base +
-                       EXYNOS5440_EFUSE_SWAP_OFFSET + reg->triminfo_data);
-                       break;
-               case 1:
-                       trim_info = readl(data->base + reg->triminfo_data);
-                       break;
-               case 2:
-                       trim_info = readl(data->base -
-                       EXYNOS5440_EFUSE_SWAP_OFFSET + reg->triminfo_data);
-               }
-       } else {
-               /* On exynos5420 the triminfo register is in the shared space */
-               if (data->soc == SOC_ARCH_EXYNOS5420_TRIMINFO)
-                       trim_info = readl(data->base_second +
-                                                       reg->triminfo_data);
-               else
-                       trim_info = readl(data->base + reg->triminfo_data);
-       }
        data->temp_error1 = trim_info & EXYNOS_TMU_TEMP_MASK;
        data->temp_error2 = ((trim_info >> EXYNOS_TRIMINFO_85_SHIFT) &
                                EXYNOS_TMU_TEMP_MASK);
                data->temp_error2 =
                        (pdata->efuse_value >> EXYNOS_TRIMINFO_85_SHIFT) &
                        EXYNOS_TMU_TEMP_MASK;
+ }
  
-       rising_threshold = readl(data->base + reg->threshold_th0);
+ static u32 get_th_reg(struct exynos_tmu_data *data, u32 threshold, bool falling)
+ {
+       struct exynos_tmu_platform_data *pdata = data->pdata;
+       int i;
  
-       if (data->soc == SOC_ARCH_EXYNOS4210) {
-               /* Write temperature code for threshold */
-               threshold_code = temp_to_code(data, pdata->threshold);
-               writeb(threshold_code,
-                       data->base + reg->threshold_temp);
-               for (i = 0; i < pdata->non_hw_trigger_levels; i++)
-                       writeb(pdata->trigger_levels[i], data->base +
-                       reg->threshold_th0 + i * sizeof(reg->threshold_th0));
+       for (i = 0; i < pdata->non_hw_trigger_levels; i++) {
+               u8 temp = pdata->trigger_levels[i];
  
-               exynos_tmu_clear_irqs(data);
-       } else {
-               /* Write temperature code for rising and falling threshold */
-               for (i = 0; i < pdata->non_hw_trigger_levels; i++) {
-                       threshold_code = temp_to_code(data,
-                                               pdata->trigger_levels[i]);
-                       rising_threshold &= ~(0xff << 8 * i);
-                       rising_threshold |= threshold_code << 8 * i;
-                       if (pdata->threshold_falling) {
-                               threshold_code = temp_to_code(data,
-                                               pdata->trigger_levels[i] -
-                                               pdata->threshold_falling);
-                               falling_threshold |= threshold_code << 8 * i;
-                       }
-               }
+               if (falling)
+                       temp -= pdata->threshold_falling;
+               else
+                       threshold &= ~(0xff << 8 * i);
  
-               writel(rising_threshold,
-                               data->base + reg->threshold_th0);
-               writel(falling_threshold,
-                               data->base + reg->threshold_th1);
-               exynos_tmu_clear_irqs(data);
-               /* if last threshold limit is also present */
-               i = pdata->max_trigger_level - 1;
-               if (pdata->trigger_levels[i] &&
-                               (pdata->trigger_type[i] == HW_TRIP)) {
-                       threshold_code = temp_to_code(data,
-                                               pdata->trigger_levels[i]);
-                       if (i == EXYNOS_MAX_TRIGGER_PER_REG - 1) {
-                               /* 1-4 level to be assigned in th0 reg */
-                               rising_threshold &= ~(0xff << 8 * i);
-                               rising_threshold |= threshold_code << 8 * i;
-                               writel(rising_threshold,
-                                       data->base + reg->threshold_th0);
-                       } else if (i == EXYNOS_MAX_TRIGGER_PER_REG) {
-                               /* 5th level to be assigned in th2 reg */
-                               rising_threshold =
-                               threshold_code << reg->threshold_th3_l0_shift;
-                               writel(rising_threshold,
-                                       data->base + reg->threshold_th2);
-                       }
-                       con = readl(data->base + reg->tmu_ctrl);
-                       con |= (1 << reg->therm_trip_en_shift);
-                       writel(con, data->base + reg->tmu_ctrl);
-               }
+               threshold |= temp_to_code(data, temp) << 8 * i;
        }
-       /*Clear the PMIN in the common TMU register*/
-       if (reg->tmu_pmin && !data->id)
-               writel(0, data->base_second + reg->tmu_pmin);
- out:
+       return threshold;
+ }
+ static int exynos_tmu_initialize(struct platform_device *pdev)
+ {
+       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
+       int ret;
+       mutex_lock(&data->lock);
+       clk_enable(data->clk);
+       if (!IS_ERR(data->clk_sec))
+               clk_enable(data->clk_sec);
+       ret = data->tmu_initialize(pdev);
        clk_disable(data->clk);
        mutex_unlock(&data->lock);
        if (!IS_ERR(data->clk_sec))
        return ret;
  }
  
- static void exynos_tmu_control(struct platform_device *pdev, bool on)
+ static u32 get_con_reg(struct exynos_tmu_data *data, u32 con)
  {
-       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
        struct exynos_tmu_platform_data *pdata = data->pdata;
-       const struct exynos_tmu_registers *reg = pdata->registers;
-       unsigned int con, interrupt_en;
  
-       mutex_lock(&data->lock);
-       clk_enable(data->clk);
-       con = readl(data->base + reg->tmu_ctrl);
-       if (pdata->test_mux)
-               con |= (pdata->test_mux << reg->test_mux_addr_shift);
+       if (data->soc == SOC_ARCH_EXYNOS4412 ||
+           data->soc == SOC_ARCH_EXYNOS3250)
+               con |= (EXYNOS4412_MUX_ADDR_VALUE << EXYNOS4412_MUX_ADDR_SHIFT);
  
        con &= ~(EXYNOS_TMU_REF_VOLTAGE_MASK << EXYNOS_TMU_REF_VOLTAGE_SHIFT);
        con |= pdata->reference_voltage << EXYNOS_TMU_REF_VOLTAGE_SHIFT;
        con |= (pdata->gain << EXYNOS_TMU_BUF_SLOPE_SEL_SHIFT);
  
        if (pdata->noise_cancel_mode) {
-               con &= ~(reg->therm_trip_mode_mask <<
-                                       reg->therm_trip_mode_shift);
-               con |= (pdata->noise_cancel_mode << reg->therm_trip_mode_shift);
+               con &= ~(EXYNOS_TMU_TRIP_MODE_MASK << EXYNOS_TMU_TRIP_MODE_SHIFT);
+               con |= (pdata->noise_cancel_mode << EXYNOS_TMU_TRIP_MODE_SHIFT);
        }
  
-       if (on) {
-               con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
-               interrupt_en =
-                       pdata->trigger_enable[3] << reg->inten_rise3_shift |
-                       pdata->trigger_enable[2] << reg->inten_rise2_shift |
-                       pdata->trigger_enable[1] << reg->inten_rise1_shift |
-                       pdata->trigger_enable[0] << reg->inten_rise0_shift;
-               if (TMU_SUPPORTS(pdata, FALLING_TRIP))
-                       interrupt_en |=
-                               interrupt_en << reg->inten_fall0_shift;
-       } else {
-               con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT);
-               interrupt_en = 0; /* Disable all interrupts */
-       }
-       writel(interrupt_en, data->base + reg->tmu_inten);
-       writel(con, data->base + reg->tmu_ctrl);
+       return con;
+ }
+ static void exynos_tmu_control(struct platform_device *pdev, bool on)
+ {
+       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
  
+       mutex_lock(&data->lock);
+       clk_enable(data->clk);
+       data->tmu_control(pdev, on);
        clk_disable(data->clk);
        mutex_unlock(&data->lock);
  }
  
- static int exynos_tmu_read(struct exynos_tmu_data *data)
+ static int exynos4210_tmu_initialize(struct platform_device *pdev)
  {
+       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
        struct exynos_tmu_platform_data *pdata = data->pdata;
-       const struct exynos_tmu_registers *reg = pdata->registers;
-       u8 temp_code;
-       int temp;
+       unsigned int status;
+       int ret = 0, threshold_code, i;
  
-       mutex_lock(&data->lock);
-       clk_enable(data->clk);
+       status = readb(data->base + EXYNOS_TMU_REG_STATUS);
+       if (!status) {
+               ret = -EBUSY;
+               goto out;
+       }
  
-       temp_code = readb(data->base + reg->tmu_cur_temp);
+       sanitize_temp_error(data, readl(data->base + EXYNOS_TMU_REG_TRIMINFO));
  
-       if (data->soc == SOC_ARCH_EXYNOS4210)
-               /* temp_code should range between 75 and 175 */
-               if (temp_code < 75 || temp_code > 175) {
-                       temp = -ENODATA;
-                       goto out;
+       /* Write temperature code for threshold */
+       threshold_code = temp_to_code(data, pdata->threshold);
+       writeb(threshold_code, data->base + EXYNOS4210_TMU_REG_THRESHOLD_TEMP);
+       for (i = 0; i < pdata->non_hw_trigger_levels; i++)
+               writeb(pdata->trigger_levels[i], data->base +
+                      EXYNOS4210_TMU_REG_TRIG_LEVEL0 + i * 4);
+       data->tmu_clear_irqs(data);
+ out:
+       return ret;
+ }
+ static int exynos4412_tmu_initialize(struct platform_device *pdev)
+ {
+       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
+       struct exynos_tmu_platform_data *pdata = data->pdata;
+       unsigned int status, trim_info, con, ctrl, rising_threshold;
+       int ret = 0, threshold_code, i;
+       status = readb(data->base + EXYNOS_TMU_REG_STATUS);
+       if (!status) {
+               ret = -EBUSY;
+               goto out;
+       }
+       if (data->soc == SOC_ARCH_EXYNOS3250 ||
+           data->soc == SOC_ARCH_EXYNOS4412 ||
+           data->soc == SOC_ARCH_EXYNOS5250) {
+               if (data->soc == SOC_ARCH_EXYNOS3250) {
+                       ctrl = readl(data->base + EXYNOS_TMU_TRIMINFO_CON1);
+                       ctrl |= EXYNOS_TRIMINFO_RELOAD_ENABLE;
+                       writel(ctrl, data->base + EXYNOS_TMU_TRIMINFO_CON1);
                }
+               ctrl = readl(data->base + EXYNOS_TMU_TRIMINFO_CON2);
+               ctrl |= EXYNOS_TRIMINFO_RELOAD_ENABLE;
+               writel(ctrl, data->base + EXYNOS_TMU_TRIMINFO_CON2);
+       }
  
-       temp = code_to_temp(data, temp_code);
+       /* On exynos5420 the triminfo register is in the shared space */
+       if (data->soc == SOC_ARCH_EXYNOS5420_TRIMINFO)
+               trim_info = readl(data->base_second + EXYNOS_TMU_REG_TRIMINFO);
+       else
+               trim_info = readl(data->base + EXYNOS_TMU_REG_TRIMINFO);
+       sanitize_temp_error(data, trim_info);
+       /* Write temperature code for rising and falling threshold */
+       rising_threshold = readl(data->base + EXYNOS_THD_TEMP_RISE);
+       rising_threshold = get_th_reg(data, rising_threshold, false);
+       writel(rising_threshold, data->base + EXYNOS_THD_TEMP_RISE);
+       writel(get_th_reg(data, 0, true), data->base + EXYNOS_THD_TEMP_FALL);
+       data->tmu_clear_irqs(data);
+       /* if last threshold limit is also present */
+       i = pdata->max_trigger_level - 1;
+       if (pdata->trigger_levels[i] && pdata->trigger_type[i] == HW_TRIP) {
+               threshold_code = temp_to_code(data, pdata->trigger_levels[i]);
+               /* 1-4 level to be assigned in th0 reg */
+               rising_threshold &= ~(0xff << 8 * i);
+               rising_threshold |= threshold_code << 8 * i;
+               writel(rising_threshold, data->base + EXYNOS_THD_TEMP_RISE);
+               con = readl(data->base + EXYNOS_TMU_REG_CONTROL);
+               con |= (1 << EXYNOS_TMU_THERM_TRIP_EN_SHIFT);
+               writel(con, data->base + EXYNOS_TMU_REG_CONTROL);
+       }
  out:
-       clk_disable(data->clk);
-       mutex_unlock(&data->lock);
+       return ret;
+ }
  
-       return temp;
+ static int exynos5440_tmu_initialize(struct platform_device *pdev)
+ {
+       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
+       struct exynos_tmu_platform_data *pdata = data->pdata;
+       unsigned int trim_info = 0, con, rising_threshold;
+       int ret = 0, threshold_code, i;
+       /*
+        * For exynos5440 soc triminfo value is swapped between TMU0 and
+        * TMU2, so the below logic is needed.
+        */
+       switch (data->id) {
+       case 0:
+               trim_info = readl(data->base + EXYNOS5440_EFUSE_SWAP_OFFSET +
+                                EXYNOS5440_TMU_S0_7_TRIM);
+               break;
+       case 1:
+               trim_info = readl(data->base + EXYNOS5440_TMU_S0_7_TRIM);
+               break;
+       case 2:
+               trim_info = readl(data->base - EXYNOS5440_EFUSE_SWAP_OFFSET +
+                                 EXYNOS5440_TMU_S0_7_TRIM);
+       }
+       sanitize_temp_error(data, trim_info);
+       /* Write temperature code for rising and falling threshold */
+       rising_threshold = readl(data->base + EXYNOS5440_TMU_S0_7_TH0);
+       rising_threshold = get_th_reg(data, rising_threshold, false);
+       writel(rising_threshold, data->base + EXYNOS5440_TMU_S0_7_TH0);
+       writel(0, data->base + EXYNOS5440_TMU_S0_7_TH1);
+       data->tmu_clear_irqs(data);
+       /* if last threshold limit is also present */
+       i = pdata->max_trigger_level - 1;
+       if (pdata->trigger_levels[i] && pdata->trigger_type[i] == HW_TRIP) {
+               threshold_code = temp_to_code(data, pdata->trigger_levels[i]);
+               /* 5th level to be assigned in th2 reg */
+               rising_threshold =
+                       threshold_code << EXYNOS5440_TMU_TH_RISE4_SHIFT;
+               writel(rising_threshold, data->base + EXYNOS5440_TMU_S0_7_TH2);
+               con = readl(data->base + EXYNOS5440_TMU_S0_7_CTRL);
+               con |= (1 << EXYNOS_TMU_THERM_TRIP_EN_SHIFT);
+               writel(con, data->base + EXYNOS5440_TMU_S0_7_CTRL);
+       }
+       /* Clear the PMIN in the common TMU register */
+       if (!data->id)
+               writel(0, data->base_second + EXYNOS5440_TMU_PMIN);
+       return ret;
  }
  
- #ifdef CONFIG_THERMAL_EMULATION
- static int exynos_tmu_set_emulation(void *drv_data, unsigned long temp)
+ static void exynos4210_tmu_control(struct platform_device *pdev, bool on)
  {
-       struct exynos_tmu_data *data = drv_data;
+       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
        struct exynos_tmu_platform_data *pdata = data->pdata;
-       const struct exynos_tmu_registers *reg = pdata->registers;
-       unsigned int val;
-       int ret = -EINVAL;
+       unsigned int con, interrupt_en;
  
-       if (!TMU_SUPPORTS(pdata, EMULATION))
-               goto out;
+       con = get_con_reg(data, readl(data->base + EXYNOS_TMU_REG_CONTROL));
  
-       if (temp && temp < MCELSIUS)
-               goto out;
+       if (on) {
+               con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
+               interrupt_en =
+                       pdata->trigger_enable[3] << EXYNOS_TMU_INTEN_RISE3_SHIFT |
+                       pdata->trigger_enable[2] << EXYNOS_TMU_INTEN_RISE2_SHIFT |
+                       pdata->trigger_enable[1] << EXYNOS_TMU_INTEN_RISE1_SHIFT |
+                       pdata->trigger_enable[0] << EXYNOS_TMU_INTEN_RISE0_SHIFT;
+               if (data->soc != SOC_ARCH_EXYNOS4210)
+                       interrupt_en |=
+                               interrupt_en << EXYNOS_TMU_INTEN_FALL0_SHIFT;
+       } else {
+               con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT);
+               interrupt_en = 0; /* Disable all interrupts */
+       }
+       writel(interrupt_en, data->base + EXYNOS_TMU_REG_INTEN);
+       writel(con, data->base + EXYNOS_TMU_REG_CONTROL);
+ }
+ static void exynos5440_tmu_control(struct platform_device *pdev, bool on)
+ {
+       struct exynos_tmu_data *data = platform_get_drvdata(pdev);
+       struct exynos_tmu_platform_data *pdata = data->pdata;
+       unsigned int con, interrupt_en;
+       con = get_con_reg(data, readl(data->base + EXYNOS5440_TMU_S0_7_CTRL));
+       if (on) {
+               con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT);
+               interrupt_en =
+                       pdata->trigger_enable[3] << EXYNOS5440_TMU_INTEN_RISE3_SHIFT |
+                       pdata->trigger_enable[2] << EXYNOS5440_TMU_INTEN_RISE2_SHIFT |
+                       pdata->trigger_enable[1] << EXYNOS5440_TMU_INTEN_RISE1_SHIFT |
+                       pdata->trigger_enable[0] << EXYNOS5440_TMU_INTEN_RISE0_SHIFT;
+               interrupt_en |= interrupt_en << EXYNOS5440_TMU_INTEN_FALL0_SHIFT;
+       } else {
+               con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT);
+               interrupt_en = 0; /* Disable all interrupts */
+       }
+       writel(interrupt_en, data->base + EXYNOS5440_TMU_S0_7_IRQEN);
+       writel(con, data->base + EXYNOS5440_TMU_S0_7_CTRL);
+ }
+ static int exynos_tmu_read(struct exynos_tmu_data *data)
+ {
+       int ret;
  
        mutex_lock(&data->lock);
        clk_enable(data->clk);
+       ret = data->tmu_read(data);
+       if (ret >= 0)
+               ret = code_to_temp(data, ret);
+       clk_disable(data->clk);
+       mutex_unlock(&data->lock);
  
-       val = readl(data->base + reg->emul_con);
+       return ret;
+ }
  
+ #ifdef CONFIG_THERMAL_EMULATION
+ static u32 get_emul_con_reg(struct exynos_tmu_data *data, unsigned int val,
+                           unsigned long temp)
+ {
        if (temp) {
                temp /= MCELSIUS;
  
-               if (TMU_SUPPORTS(pdata, EMUL_TIME)) {
-                       val &= ~(EXYNOS_EMUL_TIME_MASK << reg->emul_time_shift);
-                       val |= (EXYNOS_EMUL_TIME << reg->emul_time_shift);
+               if (data->soc != SOC_ARCH_EXYNOS5440) {
+                       val &= ~(EXYNOS_EMUL_TIME_MASK << EXYNOS_EMUL_TIME_SHIFT);
+                       val |= (EXYNOS_EMUL_TIME << EXYNOS_EMUL_TIME_SHIFT);
                }
-               val &= ~(EXYNOS_EMUL_DATA_MASK << reg->emul_temp_shift);
-               val |= (temp_to_code(data, temp) << reg->emul_temp_shift) |
+               val &= ~(EXYNOS_EMUL_DATA_MASK << EXYNOS_EMUL_DATA_SHIFT);
+               val |= (temp_to_code(data, temp) << EXYNOS_EMUL_DATA_SHIFT) |
                        EXYNOS_EMUL_ENABLE;
        } else {
                val &= ~EXYNOS_EMUL_ENABLE;
        }
  
-       writel(val, data->base + reg->emul_con);
+       return val;
+ }
+ static void exynos4412_tmu_set_emulation(struct exynos_tmu_data *data,
+                                        unsigned long temp)
+ {
+       unsigned int val;
+       u32 emul_con;
+       if (data->soc == SOC_ARCH_EXYNOS5260)
+               emul_con = EXYNOS5260_EMUL_CON;
+       else
+               emul_con = EXYNOS_EMUL_CON;
+       val = readl(data->base + emul_con);
+       val = get_emul_con_reg(data, val, temp);
+       writel(val, data->base + emul_con);
+ }
+ static void exynos5440_tmu_set_emulation(struct exynos_tmu_data *data,
+                                        unsigned long temp)
+ {
+       unsigned int val;
+       val = readl(data->base + EXYNOS5440_TMU_S0_7_DEBUG);
+       val = get_emul_con_reg(data, val, temp);
+       writel(val, data->base + EXYNOS5440_TMU_S0_7_DEBUG);
+ }
+ static int exynos_tmu_set_emulation(void *drv_data, unsigned long temp)
+ {
+       struct exynos_tmu_data *data = drv_data;
+       int ret = -EINVAL;
+       if (data->soc == SOC_ARCH_EXYNOS4210)
+               goto out;
  
+       if (temp && temp < MCELSIUS)
+               goto out;
+       mutex_lock(&data->lock);
+       clk_enable(data->clk);
+       data->tmu_set_emulation(data, temp);
        clk_disable(data->clk);
        mutex_unlock(&data->lock);
        return 0;
@@@ -401,23 -572,41 +572,41 @@@ out
        return ret;
  }
  #else
+ #define exynos4412_tmu_set_emulation NULL
+ #define exynos5440_tmu_set_emulation NULL
  static int exynos_tmu_set_emulation(void *drv_data,   unsigned long temp)
        { return -EINVAL; }
  #endif/*CONFIG_THERMAL_EMULATION*/
  
+ static int exynos4210_tmu_read(struct exynos_tmu_data *data)
+ {
+       int ret = readb(data->base + EXYNOS_TMU_REG_CURRENT_TEMP);
+       /* "temp_code" should range between 75 and 175 */
+       return (ret < 75 || ret > 175) ? -ENODATA : ret;
+ }
+ static int exynos4412_tmu_read(struct exynos_tmu_data *data)
+ {
+       return readb(data->base + EXYNOS_TMU_REG_CURRENT_TEMP);
+ }
+ static int exynos5440_tmu_read(struct exynos_tmu_data *data)
+ {
+       return readb(data->base + EXYNOS5440_TMU_S0_7_TEMP);
+ }
  static void exynos_tmu_work(struct work_struct *work)
  {
        struct exynos_tmu_data *data = container_of(work,
                        struct exynos_tmu_data, irq_work);
-       struct exynos_tmu_platform_data *pdata = data->pdata;
-       const struct exynos_tmu_registers *reg = pdata->registers;
        unsigned int val_type;
  
        if (!IS_ERR(data->clk_sec))
                clk_enable(data->clk_sec);
        /* Find which sensor generated this interrupt */
-       if (reg->tmu_irqstatus) {
-               val_type = readl(data->base_second + reg->tmu_irqstatus);
+       if (data->soc == SOC_ARCH_EXYNOS5440) {
+               val_type = readl(data->base_second + EXYNOS5440_TMU_IRQ_STATUS);
                if (!((val_type >> data->id) & 0x1))
                        goto out;
        }
        clk_enable(data->clk);
  
        /* TODO: take action based on particular interrupt */
-       exynos_tmu_clear_irqs(data);
+       data->tmu_clear_irqs(data);
  
        clk_disable(data->clk);
        mutex_unlock(&data->lock);
@@@ -437,6 -626,40 +626,40 @@@ out
        enable_irq(data->irq);
  }
  
+ static void exynos4210_tmu_clear_irqs(struct exynos_tmu_data *data)
+ {
+       unsigned int val_irq;
+       u32 tmu_intstat, tmu_intclear;
+       if (data->soc == SOC_ARCH_EXYNOS5260) {
+               tmu_intstat = EXYNOS5260_TMU_REG_INTSTAT;
+               tmu_intclear = EXYNOS5260_TMU_REG_INTCLEAR;
+       } else {
+               tmu_intstat = EXYNOS_TMU_REG_INTSTAT;
+               tmu_intclear = EXYNOS_TMU_REG_INTCLEAR;
+       }
+       val_irq = readl(data->base + tmu_intstat);
+       /*
+        * Clear the interrupts.  Please note that the documentation for
+        * Exynos3250, Exynos4412, Exynos5250 and Exynos5260 incorrectly
+        * states that INTCLEAR register has a different placing of bits
+        * responsible for FALL IRQs than INTSTAT register.  Exynos5420
+        * and Exynos5440 documentation is correct (Exynos4210 doesn't
+        * support FALL IRQs at all).
+        */
+       writel(val_irq, data->base + tmu_intclear);
+ }
+ static void exynos5440_tmu_clear_irqs(struct exynos_tmu_data *data)
+ {
+       unsigned int val_irq;
+       val_irq = readl(data->base + EXYNOS5440_TMU_S0_7_IRQ);
+       /* clear the interrupts */
+       writel(val_irq, data->base + EXYNOS5440_TMU_S0_7_IRQ);
+ }
  static irqreturn_t exynos_tmu_irq(int irq, void *id)
  {
        struct exynos_tmu_data *data = id;
  static const struct of_device_id exynos_tmu_match[] = {
        {
                .compatible = "samsung,exynos3250-tmu",
-               .data = (void *)EXYNOS3250_TMU_DRV_DATA,
+               .data = &exynos3250_default_tmu_data,
        },
        {
                .compatible = "samsung,exynos4210-tmu",
-               .data = (void *)EXYNOS4210_TMU_DRV_DATA,
+               .data = &exynos4210_default_tmu_data,
        },
        {
                .compatible = "samsung,exynos4412-tmu",
-               .data = (void *)EXYNOS4412_TMU_DRV_DATA,
+               .data = &exynos4412_default_tmu_data,
        },
        {
                .compatible = "samsung,exynos5250-tmu",
-               .data = (void *)EXYNOS5250_TMU_DRV_DATA,
+               .data = &exynos5250_default_tmu_data,
        },
        {
                .compatible = "samsung,exynos5260-tmu",
-               .data = (void *)EXYNOS5260_TMU_DRV_DATA,
+               .data = &exynos5260_default_tmu_data,
        },
        {
                .compatible = "samsung,exynos5420-tmu",
-               .data = (void *)EXYNOS5420_TMU_DRV_DATA,
+               .data = &exynos5420_default_tmu_data,
        },
        {
                .compatible = "samsung,exynos5420-tmu-ext-triminfo",
-               .data = (void *)EXYNOS5420_TMU_DRV_DATA,
+               .data = &exynos5420_default_tmu_data,
        },
        {
                .compatible = "samsung,exynos5440-tmu",
-               .data = (void *)EXYNOS5440_TMU_DRV_DATA,
+               .data = &exynos5440_default_tmu_data,
        },
        {},
  };
@@@ -553,12 -776,47 +776,47 @@@ static int exynos_map_dt_data(struct pl
                dev_err(&pdev->dev, "No platform init data supplied.\n");
                return -ENODEV;
        }
        data->pdata = pdata;
+       data->soc = pdata->type;
+       switch (data->soc) {
+       case SOC_ARCH_EXYNOS4210:
+               data->tmu_initialize = exynos4210_tmu_initialize;
+               data->tmu_control = exynos4210_tmu_control;
+               data->tmu_read = exynos4210_tmu_read;
+               data->tmu_clear_irqs = exynos4210_tmu_clear_irqs;
+               break;
+       case SOC_ARCH_EXYNOS3250:
+       case SOC_ARCH_EXYNOS4412:
+       case SOC_ARCH_EXYNOS5250:
+       case SOC_ARCH_EXYNOS5260:
+       case SOC_ARCH_EXYNOS5420:
+       case SOC_ARCH_EXYNOS5420_TRIMINFO:
+               data->tmu_initialize = exynos4412_tmu_initialize;
+               data->tmu_control = exynos4210_tmu_control;
+               data->tmu_read = exynos4412_tmu_read;
+               data->tmu_set_emulation = exynos4412_tmu_set_emulation;
+               data->tmu_clear_irqs = exynos4210_tmu_clear_irqs;
+               break;
+       case SOC_ARCH_EXYNOS5440:
+               data->tmu_initialize = exynos5440_tmu_initialize;
+               data->tmu_control = exynos5440_tmu_control;
+               data->tmu_read = exynos5440_tmu_read;
+               data->tmu_set_emulation = exynos5440_tmu_set_emulation;
+               data->tmu_clear_irqs = exynos5440_tmu_clear_irqs;
+               break;
+       default:
+               dev_err(&pdev->dev, "Platform not supported\n");
+               return -EINVAL;
+       }
        /*
         * Check if the TMU shares some registers and then try to map the
         * memory of common registers.
         */
-       if (!TMU_SUPPORTS(pdata, ADDRESS_MULTIPLE))
+       if (data->soc != SOC_ARCH_EXYNOS5420_TRIMINFO &&
+           data->soc != SOC_ARCH_EXYNOS5440)
                return 0;
  
        if (of_address_to_resource(pdev->dev.of_node, 1, &res)) {
@@@ -625,20 -883,6 +883,6 @@@ static int exynos_tmu_probe(struct plat
                goto err_clk_sec;
        }
  
-       if (pdata->type == SOC_ARCH_EXYNOS3250 ||
-           pdata->type == SOC_ARCH_EXYNOS4210 ||
-           pdata->type == SOC_ARCH_EXYNOS4412 ||
-           pdata->type == SOC_ARCH_EXYNOS5250 ||
-           pdata->type == SOC_ARCH_EXYNOS5260 ||
-           pdata->type == SOC_ARCH_EXYNOS5420_TRIMINFO ||
-           pdata->type == SOC_ARCH_EXYNOS5440)
-               data->soc = pdata->type;
-       else {
-               ret = -EINVAL;
-               dev_err(&pdev->dev, "Platform not supported\n");
-               goto err_clk;
-       }
        ret = exynos_tmu_initialize(pdev);
        if (ret) {
                dev_err(&pdev->dev, "Failed to initialize TMU\n");
@@@ -750,6 -994,7 +994,6 @@@ static SIMPLE_DEV_PM_OPS(exynos_tmu_pm
  static struct platform_driver exynos_tmu_driver = {
        .driver = {
                .name   = "exynos-tmu",
 -              .owner  = THIS_MODULE,
                .pm     = EXYNOS_TMU_PM,
                .of_match_table = exynos_tmu_match,
        },
index 259d31fc9073cb4e9d6865a4184aa64144612ba8,a1943e2d126469a373a8de881aacbe45494a05b8..00b100023c477bf80de661c386ceb27461f4bbd6
@@@ -1,5 -1,4 +1,5 @@@
  # UAPI Header export list
 +header-y += android/
  header-y += byteorder/
  header-y += can/
  header-y += caif/
@@@ -38,27 -37,27 +38,27 @@@ header-y += aio_abi.
  header-y += apm_bios.h
  header-y += arcfb.h
  header-y += atalk.h
 -header-y += atm.h
 -header-y += atm_eni.h
 -header-y += atm_he.h
 -header-y += atm_idt77105.h
 -header-y += atm_nicstar.h
 -header-y += atm_tcp.h
 -header-y += atm_zatm.h
  header-y += atmapi.h
  header-y += atmarp.h
  header-y += atmbr2684.h
  header-y += atmclip.h
  header-y += atmdev.h
 +header-y += atm_eni.h
 +header-y += atm.h
 +header-y += atm_he.h
 +header-y += atm_idt77105.h
  header-y += atmioc.h
  header-y += atmlec.h
  header-y += atmmpc.h
 +header-y += atm_nicstar.h
  header-y += atmppp.h
  header-y += atmsap.h
  header-y += atmsvc.h
 +header-y += atm_tcp.h
 +header-y += atm_zatm.h
  header-y += audit.h
 -header-y += auto_fs.h
  header-y += auto_fs4.h
 +header-y += auto_fs.h
  header-y += auxvec.h
  header-y += ax25.h
  header-y += b1lli.h
@@@ -68,8 -67,8 +68,8 @@@ header-y += bfs_fs.
  header-y += binfmts.h
  header-y += blkpg.h
  header-y += blktrace_api.h
 -header-y += bpf.h
  header-y += bpf_common.h
 +header-y += bpf.h
  header-y += bpqether.h
  header-y += bsg.h
  header-y += btrfs.h
@@@ -94,21 -93,21 +94,21 @@@ header-y += cyclades.
  header-y += cycx_cfm.h
  header-y += dcbnl.h
  header-y += dccp.h
 -header-y += dlm.h
 +header-y += dlmconstants.h
  header-y += dlm_device.h
 +header-y += dlm.h
  header-y += dlm_netlink.h
  header-y += dlm_plock.h
 -header-y += dlmconstants.h
  header-y += dm-ioctl.h
  header-y += dm-log-userspace.h
  header-y += dn.h
  header-y += dqblk_xfs.h
  header-y += edd.h
  header-y += efs_fs_sb.h
 +header-y += elfcore.h
  header-y += elf-em.h
  header-y += elf-fdpic.h
  header-y += elf.h
 -header-y += elfcore.h
  header-y += errno.h
  header-y += errqueue.h
  header-y += ethtool.h
@@@ -132,15 -131,15 +132,15 @@@ header-y += fsl_hypervisor.
  header-y += fuse.h
  header-y += futex.h
  header-y += gameport.h
 -header-y += gen_stats.h
  header-y += genetlink.h
 +header-y += gen_stats.h
  header-y += gfs2_ondisk.h
  header-y += gigaset_dev.h
 -header-y += hdlc.h
  header-y += hdlcdrv.h
 +header-y += hdlc.h
  header-y += hdreg.h
 -header-y += hid.h
  header-y += hiddev.h
 +header-y += hid.h
  header-y += hidraw.h
  header-y += hpet.h
  header-y += hsr_netlink.h
@@@ -152,6 -151,7 +152,6 @@@ header-y += i2o-dev.
  header-y += i8k.h
  header-y += icmp.h
  header-y += icmpv6.h
 -header-y += if.h
  header-y += if_addr.h
  header-y += if_addrlabel.h
  header-y += if_alg.h
@@@ -165,7 -165,6 +165,7 @@@ header-y += if_ether.
  header-y += if_fc.h
  header-y += if_fddi.h
  header-y += if_frad.h
 +header-y += if.h
  header-y += if_hippi.h
  header-y += if_infiniband.h
  header-y += if_link.h
@@@ -183,41 -182,40 +183,41 @@@ header-y += if_tunnel.
  header-y += if_vlan.h
  header-y += if_x25.h
  header-y += igmp.h
 -header-y += in.h
  header-y += in6.h
 -header-y += in_route.h
  header-y += inet_diag.h
 +header-y += in.h
  header-y += inotify.h
  header-y += input.h
 +header-y += in_route.h
  header-y += ioctl.h
 -header-y += ip.h
  header-y += ip6_tunnel.h
 -header-y += ip_vs.h
  header-y += ipc.h
 +header-y += ip.h
  header-y += ipmi.h
  header-y += ipmi_msgdefs.h
  header-y += ipsec.h
  header-y += ipv6.h
  header-y += ipv6_route.h
 +header-y += ip_vs.h
  header-y += ipx.h
  header-y += irda.h
  header-y += irqnr.h
 -header-y += isdn.h
  header-y += isdn_divertif.h
 -header-y += isdn_ppp.h
 +header-y += isdn.h
  header-y += isdnif.h
 +header-y += isdn_ppp.h
  header-y += iso_fs.h
 -header-y += ivtv.h
  header-y += ivtvfb.h
 +header-y += ivtv.h
  header-y += ixjuser.h
  header-y += jffs2.h
  header-y += joystick.h
 -header-y += kd.h
 +header-y += kcmp.h
  header-y += kdev_t.h
 -header-y += kernel-page-flags.h
 -header-y += kernel.h
 +header-y += kd.h
  header-y += kernelcapi.h
 +header-y += kernel.h
 +header-y += kernel-page-flags.h
  header-y += kexec.h
  header-y += keyboard.h
  header-y += keyctl.h
@@@ -233,7 -231,6 +233,7 @@@ ifneq ($(wildcard $(srctree)/arch/$(SRC
  header-y += kvm_para.h
  endif
  
 +header-y += hw_breakpoint.h
  header-y += l2tp.h
  header-y += libc-compat.h
  header-y += limits.h
@@@ -246,7 -243,6 +246,7 @@@ header-y += map_to_7segment.
  header-y += matroxfb.h
  header-y += mdio.h
  header-y += media.h
 +header-y += media-bus-format.h
  header-y += mei.h
  header-y += memfd.h
  header-y += mempolicy.h
@@@ -259,43 -255,43 +259,43 @@@ header-y += mman.
  header-y += mmtimer.h
  header-y += mpls.h
  header-y += mqueue.h
 -header-y += mroute.h
  header-y += mroute6.h
 +header-y += mroute.h
  header-y += msdos_fs.h
  header-y += msg.h
  header-y += mtio.h
 -header-y += n_r3964.h
  header-y += nbd.h
 -header-y += ncp.h
  header-y += ncp_fs.h
 +header-y += ncp.h
  header-y += ncp_mount.h
  header-y += ncp_no.h
  header-y += neighbour.h
 -header-y += net.h
 -header-y += net_dropmon.h
 -header-y += net_tstamp.h
  header-y += netconf.h
  header-y += netdevice.h
 -header-y += netlink_diag.h
 -header-y += netfilter.h
 +header-y += net_dropmon.h
  header-y += netfilter_arp.h
  header-y += netfilter_bridge.h
  header-y += netfilter_decnet.h
 +header-y += netfilter.h
  header-y += netfilter_ipv4.h
  header-y += netfilter_ipv6.h
 +header-y += net.h
 +header-y += netlink_diag.h
  header-y += netlink.h
  header-y += netrom.h
 +header-y += net_tstamp.h
  header-y += nfc.h
 -header-y += nfs.h
  header-y += nfs2.h
  header-y += nfs3.h
  header-y += nfs4.h
  header-y += nfs4_mount.h
 +header-y += nfsacl.h
  header-y += nfs_fs.h
 +header-y += nfs.h
  header-y += nfs_idmap.h
  header-y += nfs_mount.h
 -header-y += nfsacl.h
  header-y += nl80211.h
 +header-y += n_r3964.h
  header-y += nubus.h
  header-y += nvme.h
  header-y += nvram.h
@@@ -315,16 -311,16 +315,16 @@@ header-y += pfkeyv2.
  header-y += pg.h
  header-y += phantom.h
  header-y += phonet.h
 +header-y += pktcdvd.h
  header-y += pkt_cls.h
  header-y += pkt_sched.h
 -header-y += pktcdvd.h
  header-y += pmu.h
  header-y += poll.h
  header-y += posix_types.h
  header-y += ppdev.h
  header-y += ppp-comp.h
 -header-y += ppp-ioctl.h
  header-y += ppp_defs.h
 +header-y += ppp-ioctl.h
  header-y += pps.h
  header-y += prctl.h
  header-y += psci.h
@@@ -356,13 -352,13 +356,13 @@@ header-y += seccomp.
  header-y += securebits.h
  header-y += selinux_netlink.h
  header-y += sem.h
 -header-y += serial.h
  header-y += serial_core.h
 +header-y += serial.h
  header-y += serial_reg.h
  header-y += serio.h
  header-y += shm.h
 -header-y += signal.h
  header-y += signalfd.h
 +header-y += signal.h
  header-y += smiapp.h
  header-y += snmp.h
  header-y += sock_diag.h
@@@ -371,8 -367,8 +371,8 @@@ header-y += sockios.
  header-y += som.h
  header-y += sonet.h
  header-y += sonypi.h
 -header-y += sound.h
  header-y += soundcard.h
 +header-y += sound.h
  header-y += stat.h
  header-y += stddef.h
  header-y += string.h
@@@ -387,16 -383,16 +387,17 @@@ header-y += tcp.
  header-y += tcp_metrics.h
  header-y += telephony.h
  header-y += termios.h
+ header-y += thermal.h
  header-y += time.h
  header-y += times.h
  header-y += timex.h
  header-y += tiocl.h
 -header-y += tipc.h
  header-y += tipc_config.h
 +header-y += tipc_netlink.h
 +header-y += tipc.h
  header-y += toshiba.h
 -header-y += tty.h
  header-y += tty_flags.h
 +header-y += tty.h
  header-y += types.h
  header-y += udf_fs_i.h
  header-y += udp.h
@@@ -432,9 -428,7 +433,9 @@@ header-y += virtio_net.
  header-y += virtio_pci.h
  header-y += virtio_ring.h
  header-y += virtio_rng.h
 -header=y += vm_sockets.h
 +header-y += virtio_scsi.h
 +header-y += virtio_types.h
 +header-y += vm_sockets.h
  header-y += vt.h
  header-y += wait.h
  header-y += wanrouter.h
@@@ -444,5 -438,6 +445,5 @@@ header-y += wireless.
  header-y += x25.h
  header-y += xattr.h
  header-y += xfrm.h
 -header-y += hw_breakpoint.h
  header-y += zorro.h
  header-y += zorro_ids.h