]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'linus/master' into staging/for_v3.8
authorMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 28 Nov 2012 09:22:38 +0000 (07:22 -0200)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 28 Nov 2012 09:22:38 +0000 (07:22 -0200)
* linus/master: (1428 commits)
  futex: avoid wake_futex() for a PI futex_q
  watchdog: using u64 in get_sample_period()
  writeback: put unused inodes to LRU after writeback completion
  mm: vmscan: check for fatal signals iff the process was throttled
  Revert "mm: remove __GFP_NO_KSWAPD"
  proc: check vma->vm_file before dereferencing
  UAPI: strip the _UAPI prefix from header guards during header installation
  include/linux/bug.h: fix sparse warning related to BUILD_BUG_ON_INVALID
  Linux 3.7-rc7
  powerpc/eeh: Do not invalidate PE properly
  ALSA: hda - Fix build without CONFIG_PM
  of/address: sparc: Declare of_iomap as an extern function for sparc again
  PM / QoS: fix wrong error-checking condition
  bnx2x: remove redundant warning log
  vxlan: fix command usage in its doc
  8139cp: revert "set ring address before enabling receiver"
  MPI: Fix compilation on MIPS with GCC 4.4 and newer
  MIPS: Fix crash that occurs when function tracing is enabled
  MIPS: Merge overlapping bootmem ranges
  jbd: Fix lock ordering bug in journal_unmap_buffer()
  ...

1  2 
MAINTAINERS
drivers/media/i2c/adv7604.c
drivers/media/i2c/soc_camera/mt9v022.c
drivers/media/platform/s5p-fimc/fimc-capture.c
drivers/media/platform/s5p-fimc/fimc-mdevice.c
drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
drivers/media/usb/dvb-usb-v2/rtl28xxu.c

diff --combined MAINTAINERS
index b6236790811111c163cab91a6b57f8dddad42845,9386a63ea8f63b653b683379ea54c7bd91eb72ec..9fba9ed4f61560e994ad30d89855be0b255a32df
@@@ -235,6 -235,7 +235,7 @@@ F: drivers/platform/x86/acer-wmi.
  
  ACPI
  M:    Len Brown <lenb@kernel.org>
+ M:    Rafael J. Wysocki <rjw@sisk.pl>
  L:    linux-acpi@vger.kernel.org
  W:    http://www.lesswatts.org/projects/acpi/
  Q:    http://patchwork.kernel.org/project/linux-acpi/list/
@@@ -336,13 -337,6 +337,13 @@@ W:       http://wireless.kernel.org
  S:    Orphan
  F:    drivers/net/wireless/adm8211.*
  
 +ADP1653 FLASH CONTROLLER DRIVER
 +M:    Sakari Ailus <sakari.ailus@iki.fi>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/i2c/adp1653.c
 +F:    include/media/adp1653.h
 +
  ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501)
  M:    Michael Hennerich <michael.hennerich@analog.com>
  L:    device-drivers-devel@blackfin.uclinux.org
@@@ -509,7 -503,7 +510,7 @@@ F: include/linux/altera_uart.
  F:    include/linux/altera_jtaguart.h
  
  AMD FAM15H PROCESSOR POWER MONITORING DRIVER
- M:    Andreas Herrmann <andreas.herrmann3@amd.com>
+ M:    Andreas Herrmann <herrmann.der.user@googlemail.com>
  L:    lm-sensors@lm-sensors.org
  S:    Maintained
  F:    Documentation/hwmon/fam15h_power
@@@ -532,17 -526,17 +533,17 @@@ F:      drivers/video/geode
  F:    arch/x86/include/asm/geode.h
  
  AMD IOMMU (AMD-VI)
- M:    Joerg Roedel <joerg.roedel@amd.com>
+ M:    Joerg Roedel <joro@8bytes.org>
  L:    iommu@lists.linux-foundation.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
- S:    Supported
+ S:    Maintained
  F:    drivers/iommu/amd_iommu*.[ch]
  F:    include/linux/amd-iommu.h
  
  AMD MICROCODE UPDATE SUPPORT
- M:    Andreas Herrmann <andreas.herrmann3@amd.com>
+ M:    Andreas Herrmann <herrmann.der.user@googlemail.com>
  L:    amd64-microcode@amd64.org
- S:    Supported
+ S:    Maintained
  F:    arch/x86/kernel/microcode_amd.c
  
  AMS (Apple Motion Sensor) DRIVER
@@@ -643,6 -637,13 +644,13 @@@ W:       http://www.arm.linux.org.uk
  S:    Maintained
  F:    arch/arm/
  
+ ARM SUB-ARCHITECTURES
+ L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+ S:    MAINTAINED
+ F:    arch/arm/mach-*/
+ F:    arch/arm/plat-*/
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git
  ARM PRIMECELL AACI PL041 DRIVER
  M:    Russell King <linux@arm.linux.org.uk>
  S:    Maintained
@@@ -840,6 -841,14 +848,14 @@@ T:       git git://git.kernel.org/pub/scm/lin
  F:    arch/arm/mach-sa1100/jornada720.c
  F:    arch/arm/mach-sa1100/include/mach/jornada720.h
  
+ ARM/IGEP MACHINE SUPPORT
+ M:    Enric Balletbo i Serra <eballetbo@gmail.com>
+ M:    Javier Martinez Canillas <javier@dowhile0.org>
+ L:    linux-omap@vger.kernel.org
+ L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+ S:    Maintained
+ F:    arch/arm/mach-omap2/board-igep0020.c
  ARM/INCOME PXA270 SUPPORT
  M:    Marek Vasut <marek.vasut@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1479,14 -1488,6 +1495,14 @@@ F:    include/linux/ax25.
  F:    include/net/ax25.h
  F:    net/ax25/
  
 +AZ6007 DVB DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/usb/dvb-usb-v2/az6007.c
 +
  B43 WIRELESS DRIVER
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
@@@ -1739,11 -1740,11 +1755,11 @@@ F:   Documentation/filesystems/btrfs.tx
  F:    fs/btrfs/
  
  BTTV VIDEO4LINUX DRIVER
 -M:    Mauro Carvalho Chehab <mchehab@infradead.org>
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
  L:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 -S:    Maintained
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
  F:    Documentation/video4linux/bttv/
  F:    drivers/media/pci/bt8xx/bttv*
  
@@@ -1772,7 -1773,7 +1788,7 @@@ F:      fs/cachefiles
  CAFE CMOS INTEGRATED CAMERA CONTROLLER DRIVER
  M:    Jonathan Corbet <corbet@lwn.net>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    Documentation/video4linux/cafe_ccic
  F:    drivers/media/platform/marvell-ccic/
@@@ -2159,22 -2160,12 +2175,22 @@@ CX18 VIDEO4LINUX DRIVE
  M:    Andy Walls <awalls@md.metrocast.net>
  L:    ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://linuxtv.org
  W:    http://www.ivtvdriver.org/index.php/Cx18
  S:    Maintained
  F:    Documentation/video4linux/cx18.txt
  F:    drivers/media/pci/cx18/
 +F:    include/uapi/linux/ivtv*
 +
 +CX88 VIDEO4LINUX DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
 +F:    Documentation/video4linux/cx88/
 +F:    drivers/media/pci/cx88/
  
  CXD2820R MEDIA DRIVER
  M:    Antti Palosaari <crope@iki.fi>
@@@ -2524,6 -2515,7 +2540,7 @@@ M:      Joonyoung Shim <jy0922.shim@samsung.
  M:    Seung-Woo Kim <sw0312.kim@samsung.com>
  M:    Kyungmin Park <kyungmin.park@samsung.com>
  L:    dri-devel@lists.freedesktop.org
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git
  S:    Supported
  F:    drivers/gpu/drm/exynos
  F:    include/drm/exynos*
@@@ -2724,10 -2716,10 +2741,10 @@@ F:   include/linux/edac.
  
  EDAC-AMD64
  M:    Doug Thompson <dougthompson@xmission.com>
- M:    Borislav Petkov <borislav.petkov@amd.com>
+ M:    Borislav Petkov <bp@alien8.de>
  L:    linux-edac@vger.kernel.org
  W:    bluesmoke.sourceforge.net
- S:    Supported
+ S:    Maintained
  F:    drivers/edac/amd64_edac*
  
  EDAC-E752X
@@@ -2826,6 -2818,7 +2843,7 @@@ F:      sound/usb/misc/ua101.
  EXTENSIBLE FIRMWARE INTERFACE (EFI)
  M:    Matt Fleming <matt.fleming@intel.com>
  L:    linux-efi@vger.kernel.org
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi.git
  S:    Maintained
  F:    Documentation/x86/efi-stub.txt
  F:    arch/ia64/kernel/efi.c
@@@ -2859,14 -2852,6 +2877,14 @@@ L:    netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/net/ethernet/ibm/ehea/
  
 +EM28XX VIDEO4LINUX DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/usb/em28xx/
 +
  EMBEDDED LINUX
  M:    Paul Gortmaker <paul.gortmaker@windriver.com>
  M:    Matt Mackall <mpm@selenic.com>
@@@ -3065,14 -3050,6 +3083,14 @@@ T:    git git://git.alsa-project.org/alsa-
  S:    Maintained
  F:    sound/firewire/
  
 +FIREWIRE MEDIA DRIVERS (firedtv)
 +M:    Stefan Richter <stefanr@s5r6.in-berlin.de>
 +L:    linux-media@vger.kernel.org
 +L:    linux1394-devel@lists.sourceforge.net
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +S:    Maintained
 +F:    drivers/media/firewire/
 +
  FIREWIRE SBP-2 TARGET
  M:    Chris Boot <bootc@bootc.net>
  L:    linux-scsi@vger.kernel.org
@@@ -3359,56 -3336,56 +3377,56 @@@ F:   drivers/net/ethernet/aeroflex
  GSPCA FINEPIX SUBDRIVER
  M:    Frank Zago <frank@zago.net>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/finepix.c
  
  GSPCA GL860 SUBDRIVER
  M:    Olivier Lorin <o.lorin@laposte.net>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/gl860/
  
  GSPCA M5602 SUBDRIVER
  M:    Erik Andren <erik.andren@gmail.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/m5602/
  
  GSPCA PAC207 SONIXB SUBDRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/pac207.c
  
  GSPCA SN9C20X SUBDRIVER
  M:    Brian Johnson <brijohn@gmail.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/sn9c20x.c
  
  GSPCA T613 SUBDRIVER
  M:    Leandro Costantino <lcostantino@gmail.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/t613.c
  
  GSPCA USB WEBCAM DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/gspca/
  
  STK1160 USB VIDEO CAPTURE DRIVER
  M:    Ezequiel Garcia <elezegarcia@gmail.com>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/usb/stk1160/
  
@@@ -3629,6 -3606,49 +3647,49 @@@ F:    drivers/hid/hid-hyperv.
  F:    drivers/net/hyperv/
  F:    drivers/staging/hv/
  
+ I2C OVER PARALLEL PORT
+ M:    Jean Delvare <khali@linux-fr.org>
+ L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ F:    Documentation/i2c/busses/i2c-parport
+ F:    Documentation/i2c/busses/i2c-parport-light
+ F:    drivers/i2c/busses/i2c-parport.c
+ F:    drivers/i2c/busses/i2c-parport-light.c
+ I2C/SMBUS CONTROLLER DRIVERS FOR PC
+ M:    Jean Delvare <khali@linux-fr.org>
+ L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ F:    Documentation/i2c/busses/i2c-ali1535
+ F:    Documentation/i2c/busses/i2c-ali1563
+ F:    Documentation/i2c/busses/i2c-ali15x3
+ F:    Documentation/i2c/busses/i2c-amd756
+ F:    Documentation/i2c/busses/i2c-amd8111
+ F:    Documentation/i2c/busses/i2c-i801
+ F:    Documentation/i2c/busses/i2c-nforce2
+ F:    Documentation/i2c/busses/i2c-piix4
+ F:    Documentation/i2c/busses/i2c-sis5595
+ F:    Documentation/i2c/busses/i2c-sis630
+ F:    Documentation/i2c/busses/i2c-sis96x
+ F:    Documentation/i2c/busses/i2c-via
+ F:    Documentation/i2c/busses/i2c-viapro
+ F:    drivers/i2c/busses/i2c-ali1535.c
+ F:    drivers/i2c/busses/i2c-ali1563.c
+ F:    drivers/i2c/busses/i2c-ali15x3.c
+ F:    drivers/i2c/busses/i2c-amd756.c
+ F:    drivers/i2c/busses/i2c-amd756-s4882.c
+ F:    drivers/i2c/busses/i2c-amd8111.c
+ F:    drivers/i2c/busses/i2c-i801.c
+ F:    drivers/i2c/busses/i2c-isch.c
+ F:    drivers/i2c/busses/i2c-nforce2.c
+ F:    drivers/i2c/busses/i2c-nforce2-s4985.c
+ F:    drivers/i2c/busses/i2c-piix4.c
+ F:    drivers/i2c/busses/i2c-sis5595.c
+ F:    drivers/i2c/busses/i2c-sis630.c
+ F:    drivers/i2c/busses/i2c-sis96x.c
+ F:    drivers/i2c/busses/i2c-via.c
+ F:    drivers/i2c/busses/i2c-viapro.c
  I2C/SMBUS STUB DRIVER
  M:    "Mark M. Hoffman" <mhoffman@lightlink.com>
  L:    linux-i2c@vger.kernel.org
@@@ -3636,9 -3656,8 +3697,8 @@@ S:      Maintaine
  F:    drivers/i2c/busses/i2c-stub.c
  
  I2C SUBSYSTEM
- M:    "Jean Delvare (PC drivers, core)" <khali@linux-fr.org>
+ M:    Wolfram Sang <w.sang@pengutronix.de>
  M:    "Ben Dooks (embedded platforms)" <ben-linux@fluff.org>
- M:    "Wolfram Sang (embedded platforms)" <w.sang@pengutronix.de>
  L:    linux-i2c@vger.kernel.org
  W:    http://i2c.wiki.kernel.org/
  T:    quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/
@@@ -3649,6 -3668,13 +3709,13 @@@ F:    drivers/i2c
  F:    include/linux/i2c.h
  F:    include/linux/i2c-*.h
  
+ I2C-TAOS-EVM DRIVER
+ M:    Jean Delvare <khali@linux-fr.org>
+ L:    linux-i2c@vger.kernel.org
+ S:    Maintained
+ F:    Documentation/i2c/busses/i2c-taos-evm
+ F:    drivers/i2c/busses/i2c-taos-evm.c
  I2C-TINY-USB DRIVER
  M:    Till Harbaum <till@harbaum.org>
  L:    linux-i2c@vger.kernel.org
@@@ -3735,7 -3761,7 +3802,7 @@@ S:      Maintaine
  F:    drivers/platform/x86/ideapad-laptop.c
  
  IDE/ATAPI DRIVERS
- M:    Borislav Petkov <petkovbb@gmail.com>
+ M:    Borislav Petkov <bp@alien8.de>
  L:    linux-ide@vger.kernel.org
  S:    Maintained
  F:    Documentation/cdrom/ide-cd
@@@ -3758,12 -3784,6 +3825,12 @@@ F:    net/ieee802154
  F:    net/mac802154/
  F:    drivers/ieee802154/
  
 +IGUANAWORKS USB IR TRANSCEIVER
 +M:    Sean Young <sean@mess.org>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/rc/iguanair.c
 +
  IIO SUBSYSTEM AND DRIVERS
  M:    Jonathan Cameron <jic23@cam.ac.uk>
  L:    linux-iio@vger.kernel.org
@@@ -4138,41 -4158,17 +4205,41 @@@ S:   Maintaine
  F:    Documentation/hwmon/it87
  F:    drivers/hwmon/it87.c
  
 +IT913X MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/usb/dvb-usb-v2/it913x*
 +
 +IT913X FE MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/it913x-fe*
 +
  IVTV VIDEO4LINUX DRIVER
  M:    Andy Walls <awalls@md.metrocast.net>
  L:    ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://www.ivtvdriver.org
  S:    Maintained
  F:    Documentation/video4linux/*.ivtv
  F:    drivers/media/pci/ivtv/
  F:    include/linux/ivtv*
  
 +IX2505V MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/ix2505v*
 +
  JC42.4 TEMPERATURE SENSOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    lm-sensors@lm-sensors.org
@@@ -4292,8 -4288,8 +4359,8 @@@ F:      include/linux/lockd
  F:    include/linux/sunrpc/
  
  KERNEL VIRTUAL MACHINE (KVM)
- M:    Avi Kivity <avi@redhat.com>
  M:    Marcelo Tosatti <mtosatti@redhat.com>
+ M:    Gleb Natapov <gleb@redhat.com>
  L:    kvm@vger.kernel.org
  W:    http://kvm.qumranet.com
  S:    Supported
@@@ -4443,7 -4439,7 +4510,7 @@@ F:      Documentation/scsi/53c700.tx
  F:    drivers/scsi/53c700*
  
  LED SUBSYSTEM
- M:    Bryan Wu <bryan.wu@canonical.com>
+ M:    Bryan Wu <cooloney@gmail.com>
  M:    Richard Purdie <rpurdie@rpsys.net>
  L:    linux-leds@vger.kernel.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds.git
@@@ -4617,14 -4613,6 +4684,14 @@@ S:    Maintaine
  F:    Documentation/hwmon/lm90
  F:    drivers/hwmon/lm90.c
  
 +LME2510 MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/usb/dvb-usb-v2/lmedm04*
 +
  LOCKDEP AND LOCKSTAT
  M:    Peter Zijlstra <peterz@infradead.org>
  M:    Ingo Molnar <mingo@redhat.com>
@@@ -4715,14 -4703,6 +4782,14 @@@ W:    http://www.tazenda.demon.co.uk/phil/
  S:    Maintained
  F:    arch/m68k/hp300/
  
 +M88RS2000 MEDIA DRIVER
 +M:    Malcolm Priestley <tvboxspy@gmail.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +S:    Maintained
 +F:    drivers/media/dvb-frontends/m88rs2000*
 +
  MAC80211
  M:    Johannes Berg <johannes@sipsolutions.net>
  L:    linux-wireless@vger.kernel.org
@@@ -4815,12 -4795,12 +4882,12 @@@ F:   Documentation/hwmon/max665
  F:    drivers/hwmon/max6650.c
  
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
 -M:    Mauro Carvalho Chehab <mchehab@infradead.org>
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
  P:    LinuxTV.org Project
  L:    linux-media@vger.kernel.org
  W:    http://linuxtv.org
  Q:    http://patchwork.kernel.org/project/linux-media/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    Documentation/dvb/
  F:    Documentation/video4linux/
@@@ -4828,13 -4808,8 +4895,13 @@@ F:    Documentation/DocBook/media
  F:    drivers/media/
  F:    drivers/staging/media/
  F:    include/media/
 -F:    include/linux/dvb/
 -F:    include/linux/videodev*.h
 +F:    include/uapi/linux/dvb/
 +F:    include/uapi/linux/videodev2.h
 +F:    include/uapi/linux/media.h
 +F:    include/uapi/linux/v4l2-*
 +F:    include/uapi/linux/meye.h
 +F:    include/uapi/linux/ivtv*
 +F:    include/uapi/linux/uvcvideo.h
  
  MEGARAID SCSI DRIVERS
  M:    Neela Syam Kolli <megaraidlinux@lsi.com>
@@@ -4908,7 -4883,7 +4975,7 @@@ W:      http://popies.net/meye
  S:    Orphan
  F:    Documentation/video4linux/meye.txt
  F:    drivers/media/pci/meye/
 -F:    include/linux/meye.h
 +F:    include/uapi/linux/meye.h
  
  MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER
  M:    Pavel Pisa <ppisa@pikron.com>
@@@ -4922,13 -4897,6 +4989,13 @@@ S:    Maintaine
  F:    Documentation/serial/moxa-smartio
  F:    drivers/tty/mxser.*
  
 +MR800 AVERMEDIA USB FM RADIO DRIVER
 +M:    Alexey Klimov <klimov.linux@gmail.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/radio/radio-mr800.c
 +
  MSI LAPTOP SUPPORT
  M:    "Lee, Chun-Yi" <jlee@novell.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -5118,6 -5086,20 +5185,20 @@@ F:    net/ipv6
  F:    include/net/ip*
  F:    arch/x86/net/*
  
+ NETWORKING [IPSEC]
+ M:    Steffen Klassert <steffen.klassert@secunet.com>
+ M:    Herbert Xu <herbert@gondor.apana.org.au>
+ M:    "David S. Miller" <davem@davemloft.net>
+ L:    netdev@vger.kernel.org
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
+ S:    Maintained
+ F:    net/xfrm/
+ F:    net/key/
+ F:    net/ipv4/xfrm*
+ F:    net/ipv6/xfrm*
+ F:    include/uapi/linux/xfrm.h
+ F:    include/net/xfrm.h
  NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK)
  M:    Paul Moore <paul@paul-moore.com>
  L:    netdev@vger.kernel.org
@@@ -5145,7 -5127,13 +5226,13 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Odd Fixes
  F:    drivers/net/
  F:    include/linux/if_*
- F:    include/linux/*device.h
+ F:    include/linux/netdevice.h
+ F:    include/linux/arcdevice.h
+ F:    include/linux/etherdevice.h
+ F:    include/linux/fcdevice.h
+ F:    include/linux/fddidevice.h
+ F:    include/linux/hippidevice.h
+ F:    include/linux/inetdevice.h
  
  NETXEN (1/10) GbE SUPPORT
  M:    Sony Chacko <sony.chacko@qlogic.com>
@@@ -5369,7 -5357,7 +5456,7 @@@ F:      drivers/char/pcmcia/cm4040_cs.
  OMNIVISION OV7670 SENSOR DRIVER
  M:    Jonathan Corbet <corbet@lwn.net>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    drivers/media/i2c/ov7670.c
  
@@@ -5433,7 -5421,7 +5520,7 @@@ S:      Maintaine
  F:    sound/drivers/opl4/
  
  OPROFILE
- M:    Robert Richter <robert.richter@amd.com>
+ M:    Robert Richter <rric@kernel.org>
  L:    oprofile-list@lists.sf.net
  S:    Maintained
  F:    arch/*/include/asm/oprofile*.h
@@@ -5717,7 -5705,7 +5804,7 @@@ S:      Maintaine
  F:    drivers/pinctrl/spear/
  
  PKTCDVD DRIVER
- M:    Peter Osterlund <petero2@telia.com>
+ M:    Jiri Kosina <jkosina@suse.cz>
  S:    Maintained
  F:    drivers/block/pktcdvd.c
  F:    include/linux/pktcdvd.h
@@@ -5912,18 -5900,11 +5999,18 @@@ M:   Mike Isely <isely@pobox.com
  L:    pvrusb2@isely.net       (subscribers-only)
  L:    linux-media@vger.kernel.org
  W:    http://www.isely.net/pvrusb2/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    Documentation/video4linux/README.pvrusb2
  F:    drivers/media/usb/pvrusb2/
  
 +PWC WEBCAM DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/usb/pwc/*
 +
  PWM SUBSYSTEM
  M:    Thierry Reding <thierry.reding@avionic-design.de>
  L:    linux-kernel@vger.kernel.org
@@@ -6066,21 -6047,6 +6153,21 @@@ S:    Maintaine
  F:    drivers/video/aty/radeon*
  F:    include/linux/radeonfb.h
  
 +RADIOSHARK RADIO DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/radio/radio-shark.c
 +
 +RADIOSHARK2 RADIO DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    linux-media@vger.kernel.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/radio/radio-shark2.c
 +F:    drivers/media/radio/radio-tea5777.c
 +
  RAGE128 FRAMEBUFFER DISPLAY DRIVER
  M:    Paul Mackerras <paulus@samba.org>
  L:    linux-fbdev@vger.kernel.org
@@@ -6321,19 -6287,10 +6408,19 @@@ L:   linux-arm-kernel@lists.infradead.or
  S:    Supported
  F:    drivers/mmc/host/s3cmci.*
  
 +SAA7134 VIDEO4LINUX DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
 +F:    Documentation/video4linux/saa7134/
 +F:    drivers/media/pci/saa7134/
 +
  SAA7146 VIDEO4LINUX-2 DRIVER
  M:    Michael Hunold <michael@mihu.de>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://www.mihu.de/linux/saa7146
  S:    Maintained
  F:    drivers/media/common/saa7146/
@@@ -6368,14 -6325,6 +6455,14 @@@ F:    drivers/regulator/s5m*.
  F:    drivers/rtc/rtc-sec.c
  F:    include/linux/mfd/samsung/
  
 +SAMSUNG S3C24XX/S3C64XX SOC SERIES CAMIF DRIVER
 +M:    Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
 +L:    linux-media@vger.kernel.org
 +L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    drivers/media/platform/s3c-camif/
 +F:    include/media/s3c_camif.h
 +
  SERIAL DRIVERS
  M:    Alan Cox <alan@linux.intel.com>
  L:    linux-serial@vger.kernel.org
@@@ -6669,18 -6618,6 +6756,18 @@@ S:    Supporte
  F:    arch/arm/mach-davinci
  F:    drivers/i2c/busses/i2c-davinci.c
  
 +TI DAVINCI SERIES MEDIA DRIVER
 +M:    Manjunath Hadli <manjunath.hadli@ti.com>
 +M:    Prabhakar Lad <prabhakar.lad@ti.com>
 +L:    linux-media@vger.kernel.org
 +L:    davinci-linux-open-source@linux.davincidsp.com (moderated for non-subscribers)
 +W:    http://linuxtv.org/
 +Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +T:    git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
 +S:    Supported
 +F:    drivers/media/platform/davinci/
 +F:    include/media/davinci/
 +
  SIS 190 ETHERNET DRIVER
  M:    Francois Romieu <romieu@fr.zoreil.com>
  L:    netdev@vger.kernel.org
@@@ -6747,15 -6684,6 +6834,15 @@@ M:    Nicolas Pitre <nico@fluxnic.net
  S:    Odd Fixes
  F:    drivers/net/ethernet/smsc/smc91x.*
  
 +SMIA AND SMIA++ IMAGE SENSOR DRIVER
 +M:    Sakari Ailus <sakari.ailus@iki.fi>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/i2c/smiapp
 +F:    include/media/smiapp.h
 +F:    drivers/media/i2c/smiapp-pll.c
 +F:    drivers/media/i2c/smiapp-pll.h
 +
  SMM665 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    lm-sensors@lm-sensors.org
@@@ -6814,7 -6742,7 +6901,7 @@@ F:      arch/ia64/sn
  SOC-CAMERA V4L2 SUBSYSTEM
  M:    Guennadi Liakhovetski <g.liakhovetski@gmx.de>
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  S:    Maintained
  F:    include/media/soc*
  F:    drivers/media/i2c/soc_camera/
@@@ -7304,22 -7232,6 +7391,22 @@@ T:    git git://linuxtv.org/mkrufky/tuners
  S:    Maintained
  F:    drivers/media/tuners/tda8290.*
  
 +TEA5761 TUNER DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
 +F:    drivers/media/tuners/tea5761.*
 +
 +TEA5767 TUNER DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/tuners/tea5767.*
 +
  TEAM DRIVER
  M:    Jiri Pirko <jpirko@redhat.com>
  L:    netdev@vger.kernel.org
@@@ -7327,12 -7239,6 +7414,12 @@@ S:    Supporte
  F:    drivers/net/team/
  F:    include/linux/if_team.h
  
 +TECHNOTREND USB IR RECEIVER
 +M:    Sean Young <sean@mess.org>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/rc/ttusbir.c
 +
  TEGRA SUPPORT
  M:    Stephen Warren <swarren@wwwdotorg.org>
  L:    linux-tegra@vger.kernel.org
@@@ -7361,6 -7267,14 +7448,14 @@@ L:    linux-xtensa@linux-xtensa.or
  S:    Maintained
  F:    arch/xtensa/
  
+ THERMAL
+ M:      Zhang Rui <rui.zhang@intel.com>
+ L:      linux-pm@vger.kernel.org
+ T:      git git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux.git
+ S:      Supported
+ F:      drivers/thermal/
+ F:      include/linux/thermal.h
  THINKPAD ACPI EXTRAS DRIVER
  M:    Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
  L:    ibm-acpi-devel@lists.sourceforge.net
@@@ -7477,14 -7391,6 +7572,14 @@@ S:    Maintaine
  F:    include/linux/shmem_fs.h
  F:    mm/shmem.c
  
 +TM6000 VIDEO4LINUX DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Odd fixes
 +F:    drivers/media/usb/tm6000/
 +
  TPM DEVICE DRIVER
  M:    Kent Yoder <key@linux.vnet.ibm.com>
  M:    Rajiv Andrade <mail@srajiv.net>
@@@ -7879,7 -7785,7 +7974,7 @@@ USB SN9C1xx DRIVE
  M:    Luca Risolia <luca.risolia@studio.unibo.it>
  L:    linux-usb@vger.kernel.org
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://www.linux-projects.org
  S:    Maintained
  F:    Documentation/video4linux/sn9c102.txt
@@@ -7915,12 -7821,18 +8010,19 @@@ USB VIDEO CLAS
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
  L:    linux-uvc-devel@lists.sourceforge.net (subscribers-only)
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://www.ideasonboard.org/uvc/
  S:    Maintained
  F:    drivers/media/usb/uvc/
 +F:    include/uapi/linux/uvcvideo.h
  
+ USB WEBCAM GADGET
+ M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ L:    linux-usb@vger.kernel.org
+ S:    Maintained
+ F:    drivers/usb/gadget/*uvc*.c
+ F:    drivers/usb/gadget/webcam.c
  USB WIRELESS RNDIS DRIVER (rndis_wlan)
  M:    Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
  L:    linux-wireless@vger.kernel.org
@@@ -7944,7 -7856,7 +8046,7 @@@ USB ZR364XX DRIVE
  M:    Antoine Jacquet <royale@zerezo.com>
  L:    linux-usb@vger.kernel.org
  L:    linux-media@vger.kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media.git
 +T:    git git://linuxtv.org/media_tree.git
  W:    http://royale.zerezo.com/zr364xx/
  S:    Maintained
  F:    Documentation/video4linux/zr364xx.txt
@@@ -8040,13 -7952,6 +8142,6 @@@ M:     Roger Luethi <rl@hellgate.ch
  S:    Maintained
  F:    drivers/net/ethernet/via/via-rhine.c
  
- VIAPRO SMBUS DRIVER
- M:    Jean Delvare <khali@linux-fr.org>
- L:    linux-i2c@vger.kernel.org
- S:    Maintained
- F:    Documentation/i2c/busses/i2c-viapro
- F:    drivers/i2c/busses/i2c-viapro.c
  VIA SD/MMC CARD CONTROLLER DRIVER
  M:    Bruce Chang <brucechang@via.com.tw>
  M:    Harald Welte <HaraldWelte@viatech.com>
@@@ -8301,19 -8206,11 +8396,19 @@@ F:   drivers/platform/x8
  
  X86 MCE INFRASTRUCTURE
  M:    Tony Luck <tony.luck@intel.com>
- M:    Borislav Petkov <bp@amd64.org>
+ M:    Borislav Petkov <bp@alien8.de>
  L:    linux-edac@vger.kernel.org
  S:    Maintained
  F:    arch/x86/kernel/cpu/mcheck/*
  
 +XC2028/3028 TUNER DRIVER
 +M:    Mauro Carvalho Chehab <mchehab@redhat.com>
 +L:    linux-media@vger.kernel.org
 +W:    http://linuxtv.org
 +T:    git git://linuxtv.org/media_tree.git
 +S:    Maintained
 +F:    drivers/media/tuners/tuner-xc2028.*
 +
  XEN HYPERVISOR INTERFACE
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  M:    Jeremy Fitzhardinge <jeremy@goop.org>
index 89fc85403ca27f2a284e1f0e7b84d4bf7b529f17,05f8950f6f91b54cbad5f195fcfecd3cc6a784c1..f47555b1000aa13238e07b94a8116f080ca90f79
@@@ -53,8 -53,7 +53,7 @@@ MODULE_LICENSE("GPL")
  /* ADV7604 system clock frequency */
  #define ADV7604_fsc (28636360)
  
- #define DIGITAL_INPUT ((state->prim_mode == ADV7604_PRIM_MODE_HDMI_COMP) || \
-                       (state->prim_mode == ADV7604_PRIM_MODE_HDMI_GR))
+ #define DIGITAL_INPUT (state->mode == ADV7604_MODE_HDMI)
  
  /*
   **********************************************************************
@@@ -68,7 -67,7 +67,7 @@@ struct adv7604_state 
        struct v4l2_subdev sd;
        struct media_pad pad;
        struct v4l2_ctrl_handler hdl;
-       enum adv7604_prim_mode prim_mode;
+       enum adv7604_mode mode;
        struct v4l2_dv_timings timings;
        u8 edid[256];
        unsigned edid_blocks;
@@@ -77,6 -76,7 +76,7 @@@
        struct workqueue_struct *work_queues;
        struct delayed_work delayed_work_enable_hotplug;
        bool connector_hdmi;
+       bool restart_stdi_once;
  
        /* i2c clients */
        struct i2c_client *i2c_avlink;
@@@ -106,7 -106,6 +106,6 @@@ static const struct v4l2_dv_timings adv
        V4L2_DV_BT_CEA_720X576P50,
        V4L2_DV_BT_CEA_1280X720P24,
        V4L2_DV_BT_CEA_1280X720P25,
-       V4L2_DV_BT_CEA_1280X720P30,
        V4L2_DV_BT_CEA_1280X720P50,
        V4L2_DV_BT_CEA_1280X720P60,
        V4L2_DV_BT_CEA_1920X1080P24,
        V4L2_DV_BT_CEA_1920X1080P50,
        V4L2_DV_BT_CEA_1920X1080P60,
  
+       /* sorted by DMT ID */
        V4L2_DV_BT_DMT_640X350P85,
        V4L2_DV_BT_DMT_640X400P85,
        V4L2_DV_BT_DMT_720X400P85,
        { },
  };
  
+ struct adv7604_video_standards {
+       struct v4l2_dv_timings timings;
+       u8 vid_std;
+       u8 v_freq;
+ };
+ /* sorted by number of lines */
+ static const struct adv7604_video_standards adv7604_prim_mode_comp[] = {
+       /* { V4L2_DV_BT_CEA_720X480P59_94, 0x0a, 0x00 }, TODO flickering */
+       { V4L2_DV_BT_CEA_720X576P50, 0x0b, 0x00 },
+       { V4L2_DV_BT_CEA_1280X720P50, 0x19, 0x01 },
+       { V4L2_DV_BT_CEA_1280X720P60, 0x19, 0x00 },
+       { V4L2_DV_BT_CEA_1920X1080P24, 0x1e, 0x04 },
+       { V4L2_DV_BT_CEA_1920X1080P25, 0x1e, 0x03 },
+       { V4L2_DV_BT_CEA_1920X1080P30, 0x1e, 0x02 },
+       { V4L2_DV_BT_CEA_1920X1080P50, 0x1e, 0x01 },
+       { V4L2_DV_BT_CEA_1920X1080P60, 0x1e, 0x00 },
+       /* TODO add 1920x1080P60_RB (CVT timing) */
+       { },
+ };
+ /* sorted by number of lines */
+ static const struct adv7604_video_standards adv7604_prim_mode_gr[] = {
+       { V4L2_DV_BT_DMT_640X480P60, 0x08, 0x00 },
+       { V4L2_DV_BT_DMT_640X480P72, 0x09, 0x00 },
+       { V4L2_DV_BT_DMT_640X480P75, 0x0a, 0x00 },
+       { V4L2_DV_BT_DMT_640X480P85, 0x0b, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P56, 0x00, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P60, 0x01, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P72, 0x02, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P75, 0x03, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P85, 0x04, 0x00 },
+       { V4L2_DV_BT_DMT_1024X768P60, 0x0c, 0x00 },
+       { V4L2_DV_BT_DMT_1024X768P70, 0x0d, 0x00 },
+       { V4L2_DV_BT_DMT_1024X768P75, 0x0e, 0x00 },
+       { V4L2_DV_BT_DMT_1024X768P85, 0x0f, 0x00 },
+       { V4L2_DV_BT_DMT_1280X1024P60, 0x05, 0x00 },
+       { V4L2_DV_BT_DMT_1280X1024P75, 0x06, 0x00 },
+       { V4L2_DV_BT_DMT_1360X768P60, 0x12, 0x00 },
+       { V4L2_DV_BT_DMT_1366X768P60, 0x13, 0x00 },
+       { V4L2_DV_BT_DMT_1400X1050P60, 0x14, 0x00 },
+       { V4L2_DV_BT_DMT_1400X1050P75, 0x15, 0x00 },
+       { V4L2_DV_BT_DMT_1600X1200P60, 0x16, 0x00 }, /* TODO not tested */
+       /* TODO add 1600X1200P60_RB (not a DMT timing) */
+       { V4L2_DV_BT_DMT_1680X1050P60, 0x18, 0x00 },
+       { V4L2_DV_BT_DMT_1920X1200P60_RB, 0x19, 0x00 }, /* TODO not tested */
+       { },
+ };
+ /* sorted by number of lines */
+ static const struct adv7604_video_standards adv7604_prim_mode_hdmi_comp[] = {
+       { V4L2_DV_BT_CEA_720X480P59_94, 0x0a, 0x00 },
+       { V4L2_DV_BT_CEA_720X576P50, 0x0b, 0x00 },
+       { V4L2_DV_BT_CEA_1280X720P50, 0x13, 0x01 },
+       { V4L2_DV_BT_CEA_1280X720P60, 0x13, 0x00 },
+       { V4L2_DV_BT_CEA_1920X1080P24, 0x1e, 0x04 },
+       { V4L2_DV_BT_CEA_1920X1080P25, 0x1e, 0x03 },
+       { V4L2_DV_BT_CEA_1920X1080P30, 0x1e, 0x02 },
+       { V4L2_DV_BT_CEA_1920X1080P50, 0x1e, 0x01 },
+       { V4L2_DV_BT_CEA_1920X1080P60, 0x1e, 0x00 },
+       { },
+ };
+ /* sorted by number of lines */
+ static const struct adv7604_video_standards adv7604_prim_mode_hdmi_gr[] = {
+       { V4L2_DV_BT_DMT_640X480P60, 0x08, 0x00 },
+       { V4L2_DV_BT_DMT_640X480P72, 0x09, 0x00 },
+       { V4L2_DV_BT_DMT_640X480P75, 0x0a, 0x00 },
+       { V4L2_DV_BT_DMT_640X480P85, 0x0b, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P56, 0x00, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P60, 0x01, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P72, 0x02, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P75, 0x03, 0x00 },
+       { V4L2_DV_BT_DMT_800X600P85, 0x04, 0x00 },
+       { V4L2_DV_BT_DMT_1024X768P60, 0x0c, 0x00 },
+       { V4L2_DV_BT_DMT_1024X768P70, 0x0d, 0x00 },
+       { V4L2_DV_BT_DMT_1024X768P75, 0x0e, 0x00 },
+       { V4L2_DV_BT_DMT_1024X768P85, 0x0f, 0x00 },
+       { V4L2_DV_BT_DMT_1280X1024P60, 0x05, 0x00 },
+       { V4L2_DV_BT_DMT_1280X1024P75, 0x06, 0x00 },
+       { },
+ };
  /* ----------------------------------------------------------------------- */
  
  static inline struct adv7604_state *to_state(struct v4l2_subdev *sd)
@@@ -403,19 -486,9 +486,19 @@@ static inline int edid_read_block(struc
        struct i2c_client *client = state->i2c_edid;
        u8 msgbuf0[1] = { 0 };
        u8 msgbuf1[256];
 -      struct i2c_msg msg[2] = { { client->addr, 0, 1, msgbuf0 },
 -                                { client->addr, 0 | I2C_M_RD, len, msgbuf1 }
 -                              };
 +      struct i2c_msg msg[2] = {
 +              {
 +                      .addr = client->addr,
 +                      .len = 1,
 +                      .buf = msgbuf0
 +              },
 +              {
 +                      .addr = client->addr,
 +                      .flags = I2C_M_RD,
 +                      .len = len,
 +                      .buf = msgbuf1
 +              },
 +      };
  
        if (i2c_transfer(client->adapter, msg, 2) < 0)
                return -EIO;
@@@ -682,64 -755,144 +765,144 @@@ static int adv7604_s_detect_tx_5v_ctrl(
                                ((io_read(sd, 0x6f) & 0x10) >> 4));
  }
  
- static void configure_free_run(struct v4l2_subdev *sd, const struct v4l2_bt_timings *timings)
+ static int find_and_set_predefined_video_timings(struct v4l2_subdev *sd,
+               u8 prim_mode,
+               const struct adv7604_video_standards *predef_vid_timings,
+               const struct v4l2_dv_timings *timings)
+ {
+       struct adv7604_state *state = to_state(sd);
+       int i;
+       for (i = 0; predef_vid_timings[i].timings.bt.width; i++) {
+               if (!v4l_match_dv_timings(timings, &predef_vid_timings[i].timings,
+                                       DIGITAL_INPUT ? 250000 : 1000000))
+                       continue;
+               io_write(sd, 0x00, predef_vid_timings[i].vid_std); /* video std */
+               io_write(sd, 0x01, (predef_vid_timings[i].v_freq << 4) +
+                               prim_mode); /* v_freq and prim mode */
+               return 0;
+       }
+       return -1;
+ }
+ static int configure_predefined_video_timings(struct v4l2_subdev *sd,
+               struct v4l2_dv_timings *timings)
  {
+       struct adv7604_state *state = to_state(sd);
+       int err;
+       v4l2_dbg(1, debug, sd, "%s", __func__);
+       /* reset to default values */
+       io_write(sd, 0x16, 0x43);
+       io_write(sd, 0x17, 0x5a);
+       /* disable embedded syncs for auto graphics mode */
+       cp_write_and_or(sd, 0x81, 0xef, 0x00);
+       cp_write(sd, 0x8f, 0x00);
+       cp_write(sd, 0x90, 0x00);
+       cp_write(sd, 0xa2, 0x00);
+       cp_write(sd, 0xa3, 0x00);
+       cp_write(sd, 0xa4, 0x00);
+       cp_write(sd, 0xa5, 0x00);
+       cp_write(sd, 0xa6, 0x00);
+       cp_write(sd, 0xa7, 0x00);
+       cp_write(sd, 0xab, 0x00);
+       cp_write(sd, 0xac, 0x00);
+       switch (state->mode) {
+       case ADV7604_MODE_COMP:
+       case ADV7604_MODE_GR:
+               err = find_and_set_predefined_video_timings(sd,
+                               0x01, adv7604_prim_mode_comp, timings);
+               if (err)
+                       err = find_and_set_predefined_video_timings(sd,
+                                       0x02, adv7604_prim_mode_gr, timings);
+               break;
+       case ADV7604_MODE_HDMI:
+               err = find_and_set_predefined_video_timings(sd,
+                               0x05, adv7604_prim_mode_hdmi_comp, timings);
+               if (err)
+                       err = find_and_set_predefined_video_timings(sd,
+                                       0x06, adv7604_prim_mode_hdmi_gr, timings);
+               break;
+       default:
+               v4l2_dbg(2, debug, sd, "%s: Unknown mode %d\n",
+                               __func__, state->mode);
+               err = -1;
+               break;
+       }
+       return err;
+ }
+ static void configure_custom_video_timings(struct v4l2_subdev *sd,
+               const struct v4l2_bt_timings *bt)
+ {
+       struct adv7604_state *state = to_state(sd);
        struct i2c_client *client = v4l2_get_subdevdata(sd);
-       u32 width = htotal(timings);
-       u32 height = vtotal(timings);
-       u16 ch1_fr_ll = (((u32)timings->pixelclock / 100) > 0) ?
-               ((width * (ADV7604_fsc / 100)) / ((u32)timings->pixelclock / 100)) : 0;
+       u32 width = htotal(bt);
+       u32 height = vtotal(bt);
+       u16 cp_start_sav = bt->hsync + bt->hbackporch - 4;
+       u16 cp_start_eav = width - bt->hfrontporch;
+       u16 cp_start_vbi = height - bt->vfrontporch;
+       u16 cp_end_vbi = bt->vsync + bt->vbackporch;
+       u16 ch1_fr_ll = (((u32)bt->pixelclock / 100) > 0) ?
+               ((width * (ADV7604_fsc / 100)) / ((u32)bt->pixelclock / 100)) : 0;
+       const u8 pll[2] = {
+               0xc0 | ((width >> 8) & 0x1f),
+               width & 0xff
+       };
  
        v4l2_dbg(2, debug, sd, "%s\n", __func__);
  
-       cp_write(sd, 0x8f, (ch1_fr_ll >> 8) & 0x7);     /* CH1_FR_LL */
-       cp_write(sd, 0x90, ch1_fr_ll & 0xff);           /* CH1_FR_LL */
-       cp_write(sd, 0xab, (height >> 4) & 0xff); /* CP_LCOUNT_MAX */
-       cp_write(sd, 0xac, (height & 0x0f) << 4); /* CP_LCOUNT_MAX */
-       /* TODO support interlaced */
-       cp_write(sd, 0x91, 0x10);       /* INTERLACED */
-       /* Should only be set in auto-graphics mode [REF_02 p. 91-92] */
-       if ((io_read(sd, 0x00) == 0x07) && (io_read(sd, 0x01) == 0x02)) {
-               u16 cp_start_sav, cp_start_eav, cp_start_vbi, cp_end_vbi;
-               const u8 pll[2] = {
-                       (0xc0 | ((width >> 8) & 0x1f)),
-                       (width & 0xff)
-               };
+       switch (state->mode) {
+       case ADV7604_MODE_COMP:
+       case ADV7604_MODE_GR:
+               /* auto graphics */
+               io_write(sd, 0x00, 0x07); /* video std */
+               io_write(sd, 0x01, 0x02); /* prim mode */
+               /* enable embedded syncs for auto graphics mode */
+               cp_write_and_or(sd, 0x81, 0xef, 0x10);
  
+               /* Should only be set in auto-graphics mode [REF_02, p. 91-92] */
                /* setup PLL_DIV_MAN_EN and PLL_DIV_RATIO */
                /* IO-map reg. 0x16 and 0x17 should be written in sequence */
                if (adv_smbus_write_i2c_block_data(client, 0x16, 2, pll)) {
                        v4l2_err(sd, "writing to reg 0x16 and 0x17 failed\n");
-                       return;
+                       break;
                }
  
                /* active video - horizontal timing */
-               cp_start_sav = timings->hsync + timings->hbackporch - 4;
-               cp_start_eav = width - timings->hfrontporch;
                cp_write(sd, 0xa2, (cp_start_sav >> 4) & 0xff);
-               cp_write(sd, 0xa3, ((cp_start_sav & 0x0f) << 4) | ((cp_start_eav >> 8) & 0x0f));
+               cp_write(sd, 0xa3, ((cp_start_sav & 0x0f) << 4) |
+                                       ((cp_start_eav >> 8) & 0x0f));
                cp_write(sd, 0xa4, cp_start_eav & 0xff);
  
                /* active video - vertical timing */
-               cp_start_vbi = height - timings->vfrontporch;
-               cp_end_vbi = timings->vsync + timings->vbackporch;
                cp_write(sd, 0xa5, (cp_start_vbi >> 4) & 0xff);
-               cp_write(sd, 0xa6, ((cp_start_vbi & 0xf) << 4) | ((cp_end_vbi >> 8) & 0xf));
+               cp_write(sd, 0xa6, ((cp_start_vbi & 0xf) << 4) |
+                                       ((cp_end_vbi >> 8) & 0xf));
                cp_write(sd, 0xa7, cp_end_vbi & 0xff);
-       } else {
-               /* reset to default values */
-               io_write(sd, 0x16, 0x43);
-               io_write(sd, 0x17, 0x5a);
-               cp_write(sd, 0xa2, 0x00);
-               cp_write(sd, 0xa3, 0x00);
-               cp_write(sd, 0xa4, 0x00);
-               cp_write(sd, 0xa5, 0x00);
-               cp_write(sd, 0xa6, 0x00);
-               cp_write(sd, 0xa7, 0x00);
+               break;
+       case ADV7604_MODE_HDMI:
+               /* set default prim_mode/vid_std for HDMI
+                  accoring to [REF_03, c. 4.2] */
+               io_write(sd, 0x00, 0x02); /* video std */
+               io_write(sd, 0x01, 0x06); /* prim mode */
+               break;
+       default:
+               v4l2_dbg(2, debug, sd, "%s: Unknown mode %d\n",
+                               __func__, state->mode);
+               break;
        }
- }
  
+       cp_write(sd, 0x8f, (ch1_fr_ll >> 8) & 0x7);
+       cp_write(sd, 0x90, ch1_fr_ll & 0xff);
+       cp_write(sd, 0xab, (height >> 4) & 0xff);
+       cp_write(sd, 0xac, (height & 0x0f) << 4);
+ }
  
  static void set_rgb_quantization_range(struct v4l2_subdev *sd)
  {
        switch (state->rgb_quantization_range) {
        case V4L2_DV_RGB_RANGE_AUTO:
                /* automatic */
-               if ((hdmi_read(sd, 0x05) & 0x80) ||
-                               (state->prim_mode == ADV7604_PRIM_MODE_COMP) ||
-                               (state->prim_mode == ADV7604_PRIM_MODE_RGB)) {
-                       /* receiving HDMI or analog signal */
-                       io_write_and_or(sd, 0x02, 0x0f, 0xf0);
-               } else {
+               if (DIGITAL_INPUT && !(hdmi_read(sd, 0x05) & 0x80)) {
                        /* receiving DVI-D signal */
  
                        /* ADV7604 selects RGB limited range regardless of
                                /* RGB full range (0-255) */
                                io_write_and_or(sd, 0x02, 0x0f, 0x10);
                        }
+               } else {
+                       /* receiving HDMI or analog signal, set automode */
+                       io_write_and_or(sd, 0x02, 0x0f, 0xf0);
                }
                break;
        case V4L2_DV_RGB_RANGE_LIMITED:
@@@ -977,8 -1128,10 +1138,10 @@@ static int stdi2dv_timings(struct v4l2_
                        state->aspect_ratio, timings))
                return 0;
  
-       v4l2_dbg(2, debug, sd, "%s: No format candidate found for lcf=%d, bl = %d\n",
-                       __func__, stdi->lcf, stdi->bl);
+       v4l2_dbg(2, debug, sd,
+               "%s: No format candidate found for lcvs = %d, lcf=%d, bl = %d, %chsync, %cvsync\n",
+               __func__, stdi->lcvs, stdi->lcf, stdi->bl,
+               stdi->hs_pol, stdi->vs_pol);
        return -1;
  }
  
@@@ -1133,7 -1286,7 +1296,7 @@@ static int adv7604_query_dv_timings(str
                adv7604_fill_optional_dv_timings_fields(sd, timings);
        } else {
                /* find format
-                * Since LCVS values are inaccurate (REF_03, page 275-276),
+                * Since LCVS values are inaccurate [REF_03, p. 275-276],
                 * stdi2dv_timings() is called with lcvs +-1 if the first attempt fails.
                 */
                if (!stdi2dv_timings(sd, &stdi, timings))
                stdi.lcvs -= 2;
                v4l2_dbg(1, debug, sd, "%s: lcvs - 1 = %d\n", __func__, stdi.lcvs);
                if (stdi2dv_timings(sd, &stdi, timings)) {
+                       /*
+                        * The STDI block may measure wrong values, especially
+                        * for lcvs and lcf. If the driver can not find any
+                        * valid timing, the STDI block is restarted to measure
+                        * the video timings again. The function will return an
+                        * error, but the restart of STDI will generate a new
+                        * STDI interrupt and the format detection process will
+                        * restart.
+                        */
+                       if (state->restart_stdi_once) {
+                               v4l2_dbg(1, debug, sd, "%s: restart STDI\n", __func__);
+                               /* TODO restart STDI for Sync Channel 2 */
+                               /* enter one-shot mode */
+                               cp_write_and_or(sd, 0x86, 0xf9, 0x00);
+                               /* trigger STDI restart */
+                               cp_write_and_or(sd, 0x86, 0xf9, 0x04);
+                               /* reset to continuous mode */
+                               cp_write_and_or(sd, 0x86, 0xf9, 0x02);
+                               state->restart_stdi_once = false;
+                               return -ENOLINK;
+                       }
                        v4l2_dbg(1, debug, sd, "%s: format not supported\n", __func__);
                        return -ERANGE;
                }
+               state->restart_stdi_once = true;
        }
  found:
  
@@@ -1176,6 -1351,7 +1361,7 @@@ static int adv7604_s_dv_timings(struct 
  {
        struct adv7604_state *state = to_state(sd);
        struct v4l2_bt_timings *bt;
+       int err;
  
        if (!timings)
                return -EINVAL;
                                __func__, (u32)bt->pixelclock);
                return -ERANGE;
        }
        adv7604_fill_optional_dv_timings_fields(sd, timings);
  
        state->timings = *timings;
  
-       /* freerun */
-       configure_free_run(sd, bt);
+       cp_write(sd, 0x91, bt->interlaced ? 0x50 : 0x10);
+       /* Use prim_mode and vid_std when available */
+       err = configure_predefined_video_timings(sd, timings);
+       if (err) {
+               /* custom settings when the video format
+                does not have prim_mode/vid_std */
+               configure_custom_video_timings(sd, bt);
+       }
  
        set_rgb_quantization_range(sd);
  
@@@ -1213,24 -1397,25 +1407,25 @@@ static int adv7604_g_dv_timings(struct 
        return 0;
  }
  
- static void enable_input(struct v4l2_subdev *sd, enum adv7604_prim_mode prim_mode)
+ static void enable_input(struct v4l2_subdev *sd)
  {
-       switch (prim_mode) {
-       case ADV7604_PRIM_MODE_COMP:
-       case ADV7604_PRIM_MODE_RGB:
+       struct adv7604_state *state = to_state(sd);
+       switch (state->mode) {
+       case ADV7604_MODE_COMP:
+       case ADV7604_MODE_GR:
                /* enable */
                io_write(sd, 0x15, 0xb0);   /* Disable Tristate of Pins (no audio) */
                break;
-       case ADV7604_PRIM_MODE_HDMI_COMP:
-       case ADV7604_PRIM_MODE_HDMI_GR:
+       case ADV7604_MODE_HDMI:
                /* enable */
                hdmi_write(sd, 0x1a, 0x0a); /* Unmute audio */
                hdmi_write(sd, 0x01, 0x00); /* Enable HDMI clock terminators */
                io_write(sd, 0x15, 0xa0);   /* Disable Tristate of Pins */
                break;
        default:
-               v4l2_err(sd, "%s: reserved primary mode 0x%0x\n",
-                               __func__, prim_mode);
+               v4l2_dbg(2, debug, sd, "%s: Unknown mode %d\n",
+                               __func__, state->mode);
                break;
        }
  }
@@@ -1243,17 -1428,13 +1438,13 @@@ static void disable_input(struct v4l2_s
        hdmi_write(sd, 0x01, 0x78); /* Disable HDMI clock terminators */
  }
  
- static void select_input(struct v4l2_subdev *sd, enum adv7604_prim_mode prim_mode)
+ static void select_input(struct v4l2_subdev *sd)
  {
-       switch (prim_mode) {
-       case ADV7604_PRIM_MODE_COMP:
-       case ADV7604_PRIM_MODE_RGB:
-               /* set mode and select free run resolution */
-               io_write(sd, 0x00, 0x07); /* video std */
-               io_write(sd, 0x01, 0x02); /* prim mode */
-               /* enable embedded syncs for auto graphics mode */
-               cp_write_and_or(sd, 0x81, 0xef, 0x10);
+       struct adv7604_state *state = to_state(sd);
  
+       switch (state->mode) {
+       case ADV7604_MODE_COMP:
+       case ADV7604_MODE_GR:
                /* reset ADI recommended settings for HDMI: */
                /* "ADV7604 Register Settings Recommendations (rev. 2.5, June 2010)" p. 4. */
                hdmi_write(sd, 0x0d, 0x04); /* HDMI filter optimization */
                cp_write(sd, 0x40, 0x5c); /* CP core pre-gain control. Graphics mode */
                break;
  
-       case ADV7604_PRIM_MODE_HDMI_COMP:
-       case ADV7604_PRIM_MODE_HDMI_GR:
-               /* set mode and select free run resolution */
-               /* video std */
-               io_write(sd, 0x00,
-                       (prim_mode == ADV7604_PRIM_MODE_HDMI_GR) ? 0x02 : 0x1e);
-               io_write(sd, 0x01, prim_mode); /* prim mode */
-               /* disable embedded syncs for auto graphics mode */
-               cp_write_and_or(sd, 0x81, 0xef, 0x00);
+       case ADV7604_MODE_HDMI:
                /* set ADI recommended settings for HDMI: */
                /* "ADV7604 Register Settings Recommendations (rev. 2.5, June 2010)" p. 4. */
                hdmi_write(sd, 0x0d, 0x84); /* HDMI filter optimization */
  
                break;
        default:
-               v4l2_err(sd, "%s: reserved primary mode 0x%0x\n", __func__, prim_mode);
+               v4l2_dbg(2, debug, sd, "%s: Unknown mode %d\n",
+                               __func__, state->mode);
                break;
        }
  }
@@@ -1331,26 -1504,13 +1514,13 @@@ static int adv7604_s_routing(struct v4l
  
        v4l2_dbg(2, debug, sd, "%s: input %d", __func__, input);
  
-       switch (input) {
-       case 0:
-               /* TODO select HDMI_COMP or HDMI_GR */
-               state->prim_mode = ADV7604_PRIM_MODE_HDMI_COMP;
-               break;
-       case 1:
-               state->prim_mode = ADV7604_PRIM_MODE_RGB;
-               break;
-       case 2:
-               state->prim_mode = ADV7604_PRIM_MODE_COMP;
-               break;
-       default:
-               return -EINVAL;
-       }
+       state->mode = input;
  
        disable_input(sd);
  
-       select_input(sd, state->prim_mode);
+       select_input(sd);
  
-       enable_input(sd, state->prim_mode);
+       enable_input(sd);
  
        return 0;
  }
@@@ -1559,8 -1719,9 +1729,9 @@@ static int adv7604_log_status(struct v4
        v4l2_info(sd, "CP locked: %s\n", no_lock_cp(sd) ? "false" : "true");
        v4l2_info(sd, "CP free run: %s\n",
                        (!!(cp_read(sd, 0xff) & 0x10) ? "on" : "off"));
-       v4l2_info(sd, "Prim-mode = 0x%x, video std = 0x%x\n",
-                       io_read(sd, 0x01) & 0x0f, io_read(sd, 0x00) & 0x3f);
+       v4l2_info(sd, "Prim-mode = 0x%x, video std = 0x%x, v_freq = 0x%x\n",
+                       io_read(sd, 0x01) & 0x0f, io_read(sd, 0x00) & 0x3f,
+                       (io_read(sd, 0x01) & 0x70) >> 4);
  
        v4l2_info(sd, "-----Video Timings-----\n");
        if (read_stdi(sd, &stdi))
@@@ -1722,9 -1883,9 +1893,9 @@@ static int adv7604_core_init(struct v4l
        cp_write(sd, 0xba, (pdata->hdmi_free_run_mode << 1) | 0x01); /* HDMI free run */
        cp_write(sd, 0xf3, 0xdc); /* Low threshold to enter/exit free run mode */
        cp_write(sd, 0xf9, 0x23); /*  STDI ch. 1 - LCVS change threshold -
-                                     ADI recommended setting [REF_01 c. 2.3.3] */
+                                     ADI recommended setting [REF_01, c. 2.3.3] */
        cp_write(sd, 0x45, 0x23); /*  STDI ch. 2 - LCVS change threshold -
-                                     ADI recommended setting [REF_01 c. 2.3.3] */
+                                     ADI recommended setting [REF_01, c. 2.3.3] */
        cp_write(sd, 0xc9, 0x2d); /* use prim_mode and vid_std as free run resolution
                                     for digital formats */
  
        afe_write(sd, 0x02, pdata->ain_sel); /* Select analog input muxing mode */
        io_write_and_or(sd, 0x30, ~(1 << 4), pdata->output_bus_lsb_to_msb << 4);
  
-       state->prim_mode = pdata->prim_mode;
-       select_input(sd, pdata->prim_mode);
-       enable_input(sd, pdata->prim_mode);
        /* interrupts */
        io_write(sd, 0x40, 0xc2); /* Configure INT1 */
        io_write(sd, 0x41, 0xd7); /* STDI irq for any change, disable INT2 */
@@@ -1893,6 -2049,7 +2059,7 @@@ static int adv7604_probe(struct i2c_cli
                v4l2_err(sd, "failed to create all i2c clients\n");
                goto err_i2c;
        }
+       state->restart_stdi_once = true;
  
        /* work queues */
        state->work_queues = create_singlethread_workqueue(client->name);
index 84d204f82cb2eeeb094b868497d710cedb660f53,333ef178d6fbfe1d5622fd161c01856182b01871..d40a8858be01919ba5c85374a3ea6d61ffae10ae
@@@ -15,7 -15,6 +15,7 @@@
  #include <linux/log2.h>
  #include <linux/module.h>
  
 +#include <media/mt9v022.h>
  #include <media/soc_camera.h>
  #include <media/soc_mediabus.h>
  #include <media/v4l2-subdev.h>
@@@ -51,7 -50,6 +51,7 @@@ MODULE_PARM_DESC(sensor_type, "Sensor t
  #define MT9V022_PIXEL_OPERATION_MODE  0x0f
  #define MT9V022_LED_OUT_CONTROL               0x1b
  #define MT9V022_ADC_MODE_CONTROL      0x1c
 +#define MT9V022_REG32                 0x20
  #define MT9V022_ANALOG_GAIN           0x35
  #define MT9V022_BLACK_LEVEL_CALIB_CTRL        0x47
  #define MT9V022_PIXCLK_FV_LV          0x74
  #define MT9V022_COLUMN_SKIP           1
  #define MT9V022_ROW_SKIP              4
  
 -#define is_mt9v024(id) (id == 0x1324)
 +#define MT9V022_HORIZONTAL_BLANKING_MIN       43
 +#define MT9V022_HORIZONTAL_BLANKING_MAX       1023
 +#define MT9V022_HORIZONTAL_BLANKING_DEF       94
 +#define MT9V022_VERTICAL_BLANKING_MIN 2
 +#define MT9V022_VERTICAL_BLANKING_MAX 3000
 +#define MT9V022_VERTICAL_BLANKING_DEF 45
 +
 +#define is_mt9v022_rev3(id)   (id == 0x1313)
 +#define is_mt9v024(id)                (id == 0x1324)
  
  /* MT9V022 has only one fixed colorspace per pixelcode */
  struct mt9v022_datafmt {
@@@ -146,8 -136,6 +146,8 @@@ struct mt9v022 
                struct v4l2_ctrl *autogain;
                struct v4l2_ctrl *gain;
        };
 +      struct v4l2_ctrl *hblank;
 +      struct v4l2_ctrl *vblank;
        struct v4l2_rect rect;  /* Sensor window */
        const struct mt9v022_datafmt *fmt;
        const struct mt9v022_datafmt *fmts;
        int num_fmts;
        int model;      /* V4L2_IDENT_MT9V022* codes from v4l2-chip-ident.h */
        u16 chip_control;
 +      u16 chip_version;
        unsigned short y_skip_top;      /* Lines to skip at the top */
  };
  
@@@ -238,32 -225,12 +238,32 @@@ static int mt9v022_s_stream(struct v4l2
        struct i2c_client *client = v4l2_get_subdevdata(sd);
        struct mt9v022 *mt9v022 = to_mt9v022(client);
  
 -      if (enable)
 +      if (enable) {
                /* Switch to master "normal" mode */
                mt9v022->chip_control &= ~0x10;
 -      else
 +              if (is_mt9v022_rev3(mt9v022->chip_version) ||
 +                  is_mt9v024(mt9v022->chip_version)) {
 +                      /*
 +                       * Unset snapshot mode specific settings: clear bit 9
 +                       * and bit 2 in reg. 0x20 when in normal mode.
 +                       */
 +                      if (reg_clear(client, MT9V022_REG32, 0x204))
 +                              return -EIO;
 +              }
 +      } else {
                /* Switch to snapshot mode */
                mt9v022->chip_control |= 0x10;
 +              if (is_mt9v022_rev3(mt9v022->chip_version) ||
 +                  is_mt9v024(mt9v022->chip_version)) {
 +                      /*
 +                       * Required settings for snapshot mode: set bit 9
 +                       * (RST enable) and bit 2 (CR enable) in reg. 0x20
 +                       * See TechNote TN0960 or TN-09-225.
 +                       */
 +                      if (reg_set(client, MT9V022_REG32, 0x204))
 +                              return -EIO;
 +              }
 +      }
  
        if (reg_write(client, MT9V022_CHIP_CONTROL, mt9v022->chip_control) < 0)
                return -EIO;
@@@ -296,9 -263,14 +296,14 @@@ static int mt9v022_s_crop(struct v4l2_s
                if (ret & 1) /* Autoexposure */
                        ret = reg_write(client, mt9v022->reg->max_total_shutter_width,
                                        rect.height + mt9v022->y_skip_top + 43);
-               else
-                       ret = reg_write(client, MT9V022_TOTAL_SHUTTER_WIDTH,
-                                       rect.height + mt9v022->y_skip_top + 43);
+               /*
+                * If autoexposure is off, there is no need to set
+                * MT9V022_TOTAL_SHUTTER_WIDTH here. Autoexposure can be off
+                * only if the user has set exposure manually, using the
+                * V4L2_CID_EXPOSURE_AUTO with the value V4L2_EXPOSURE_MANUAL.
+                * In this case the register MT9V022_TOTAL_SHUTTER_WIDTH
+                * already contains the correct value.
+                */
        }
        /* Setup frame format: defaults apart from width and height */
        if (!ret)
                 * Default 94, Phytec driver says:
                 * "width + horizontal blank >= 660"
                 */
 -              ret = reg_write(client, MT9V022_HORIZONTAL_BLANKING,
 -                              rect.width > 660 - 43 ? 43 :
 -                              660 - rect.width);
 +              ret = v4l2_ctrl_s_ctrl(mt9v022->hblank,
 +                              rect.width > 660 - 43 ? 43 : 660 - rect.width);
        if (!ret)
 -              ret = reg_write(client, MT9V022_VERTICAL_BLANKING, 45);
 +              ret = v4l2_ctrl_s_ctrl(mt9v022->vblank, 45);
        if (!ret)
                ret = reg_write(client, MT9V022_WINDOW_WIDTH, rect.width);
        if (!ret)
@@@ -536,18 -509,6 +541,18 @@@ static int mt9v022_g_volatile_ctrl(stru
                range = exp->maximum - exp->minimum;
                exp->val = ((data - 1) * range + 239) / 479 + exp->minimum;
                return 0;
 +      case V4L2_CID_HBLANK:
 +              data = reg_read(client, MT9V022_HORIZONTAL_BLANKING);
 +              if (data < 0)
 +                      return -EIO;
 +              ctrl->val = data;
 +              return 0;
 +      case V4L2_CID_VBLANK:
 +              data = reg_read(client, MT9V022_VERTICAL_BLANKING);
 +              if (data < 0)
 +                      return -EIO;
 +              ctrl->val = data;
 +              return 0;
        }
        return -EINVAL;
  }
@@@ -629,16 -590,6 +634,16 @@@ static int mt9v022_s_ctrl(struct v4l2_c
                                return -EIO;
                }
                return 0;
 +      case V4L2_CID_HBLANK:
 +              if (reg_write(client, MT9V022_HORIZONTAL_BLANKING,
 +                              ctrl->val) < 0)
 +                      return -EIO;
 +              return 0;
 +      case V4L2_CID_VBLANK:
 +              if (reg_write(client, MT9V022_VERTICAL_BLANKING,
 +                              ctrl->val) < 0)
 +                      return -EIO;
 +              return 0;
        }
        return -EINVAL;
  }
@@@ -670,8 -621,6 +675,8 @@@ static int mt9v022_video_probe(struct i
                goto ei2c;
        }
  
 +      mt9v022->chip_version = data;
 +
        mt9v022->reg = is_mt9v024(data) ? &mt9v024_register :
                        &mt9v022_register;
  
@@@ -870,7 -819,6 +875,7 @@@ static int mt9v022_probe(struct i2c_cli
        struct mt9v022 *mt9v022;
        struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
        struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
 +      struct mt9v022_platform_data *pdata = icl->priv;
        int ret;
  
        if (!icl) {
        mt9v022->exposure = v4l2_ctrl_new_std(&mt9v022->hdl, &mt9v022_ctrl_ops,
                        V4L2_CID_EXPOSURE, 1, 255, 1, 255);
  
 +      mt9v022->hblank = v4l2_ctrl_new_std(&mt9v022->hdl, &mt9v022_ctrl_ops,
 +                      V4L2_CID_HBLANK, MT9V022_HORIZONTAL_BLANKING_MIN,
 +                      MT9V022_HORIZONTAL_BLANKING_MAX, 1,
 +                      MT9V022_HORIZONTAL_BLANKING_DEF);
 +
 +      mt9v022->vblank = v4l2_ctrl_new_std(&mt9v022->hdl, &mt9v022_ctrl_ops,
 +                      V4L2_CID_VBLANK, MT9V022_VERTICAL_BLANKING_MIN,
 +                      MT9V022_VERTICAL_BLANKING_MAX, 1,
 +                      MT9V022_VERTICAL_BLANKING_DEF);
 +
        mt9v022->subdev.ctrl_handler = &mt9v022->hdl;
        if (mt9v022->hdl.error) {
                int err = mt9v022->hdl.error;
  
 +              dev_err(&client->dev, "control initialisation err %d\n", err);
                kfree(mt9v022);
                return err;
        }
        mt9v022->chip_control = MT9V022_CHIP_CONTROL_DEFAULT;
  
        /*
 -       * MT9V022 _really_ corrupts the first read out line.
 -       * TODO: verify on i.MX31
 +       * On some platforms the first read out line is corrupted.
 +       * Workaround it by skipping if indicated by platform data.
         */
 -      mt9v022->y_skip_top     = 1;
 +      mt9v022->y_skip_top     = pdata ? pdata->y_skip_top : 0;
        mt9v022->rect.left      = MT9V022_COLUMN_SKIP;
        mt9v022->rect.top       = MT9V022_ROW_SKIP;
        mt9v022->rect.width     = MT9V022_MAX_WIDTH;
index e5fd159e3ee016ac118e548b9e5c15dd7e2a68eb,3d39d97abaa5ab3a35a4c89f20338848efc174b9..0d0aca5008764048d262bd86bc584894289dbb1c
@@@ -1231,14 -1231,6 +1231,14 @@@ static int fimc_cap_qbuf(struct file *f
        return vb2_qbuf(&fimc->vid_cap.vbq, buf);
  }
  
 +static int fimc_cap_expbuf(struct file *file, void *priv,
 +                        struct v4l2_exportbuffer *eb)
 +{
 +      struct fimc_dev *fimc = video_drvdata(file);
 +
 +      return vb2_expbuf(&fimc->vid_cap.vbq, eb);
 +}
 +
  static int fimc_cap_dqbuf(struct file *file, void *priv,
                           struct v4l2_buffer *buf)
  {
@@@ -1363,7 -1355,6 +1363,7 @@@ static const struct v4l2_ioctl_ops fimc
  
        .vidioc_qbuf                    = fimc_cap_qbuf,
        .vidioc_dqbuf                   = fimc_cap_dqbuf,
 +      .vidioc_expbuf                  = fimc_cap_expbuf,
  
        .vidioc_prepare_buf             = fimc_cap_prepare_buf,
        .vidioc_create_bufs             = fimc_cap_create_bufs,
@@@ -1739,13 -1730,15 +1739,15 @@@ static int fimc_register_capture_device
        q = &fimc->vid_cap.vbq;
        memset(q, 0, sizeof(*q));
        q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
 -      q->io_modes = VB2_MMAP | VB2_USERPTR;
 +      q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
        q->drv_priv = fimc->vid_cap.ctx;
        q->ops = &fimc_capture_qops;
        q->mem_ops = &vb2_dma_contig_memops;
        q->buf_struct_size = sizeof(struct fimc_vid_buffer);
  
-       vb2_queue_init(q);
+       ret = vb2_queue_init(q);
+       if (ret)
+               goto err_ent;
  
        vid_cap->vd_pad.flags = MEDIA_PAD_FL_SINK;
        ret = media_entity_init(&vfd->entity, 1, &vid_cap->vd_pad, 0);
index 715b258a0cacb3450a2abebc07346acee45bbcb4,38ea4d143a496cee415af614d0cf6f259560182a..9bd5dd4162206b261b94660d2e498404ef3c7072
@@@ -213,7 -213,7 +213,7 @@@ static int fimc_pipeline_close(struct f
   * @pipeline: video pipeline structure
   * @on: passed as the s_stream call argument
   */
 -int fimc_pipeline_s_stream(struct fimc_pipeline *p, bool on)
 +static int fimc_pipeline_s_stream(struct fimc_pipeline *p, bool on)
  {
        int i, ret;
  
@@@ -343,53 -343,50 +343,50 @@@ static int fimc_md_register_sensor_enti
  static int fimc_register_callback(struct device *dev, void *p)
  {
        struct fimc_dev *fimc = dev_get_drvdata(dev);
-       struct v4l2_subdev *sd = &fimc->vid_cap.subdev;
+       struct v4l2_subdev *sd;
        struct fimc_md *fmd = p;
-       int ret = 0;
-       if (!fimc || !fimc->pdev)
-               return 0;
+       int ret;
  
-       if (fimc->pdev->id < 0 || fimc->pdev->id >= FIMC_MAX_DEVS)
+       if (fimc == NULL || fimc->id >= FIMC_MAX_DEVS)
                return 0;
  
-       fimc->pipeline_ops = &fimc_pipeline_ops;
-       fmd->fimc[fimc->pdev->id] = fimc;
+       sd = &fimc->vid_cap.subdev;
        sd->grp_id = FIMC_GROUP_ID;
  
        ret = v4l2_device_register_subdev(&fmd->v4l2_dev, sd);
        if (ret) {
                v4l2_err(&fmd->v4l2_dev, "Failed to register FIMC.%d (%d)\n",
                         fimc->id, ret);
+               return ret;
        }
  
-       return ret;
+       fimc->pipeline_ops = &fimc_pipeline_ops;
+       fmd->fimc[fimc->id] = fimc;
+       return 0;
  }
  
  static int fimc_lite_register_callback(struct device *dev, void *p)
  {
        struct fimc_lite *fimc = dev_get_drvdata(dev);
-       struct v4l2_subdev *sd = &fimc->subdev;
        struct fimc_md *fmd = p;
        int ret;
  
-       if (fimc == NULL)
+       if (fimc == NULL || fimc->index >= FIMC_LITE_MAX_DEVS)
                return 0;
  
-       if (fimc->index >= FIMC_LITE_MAX_DEVS)
-               return 0;
+       fimc->subdev.grp_id = FLITE_GROUP_ID;
  
-       fimc->pipeline_ops = &fimc_pipeline_ops;
-       fmd->fimc_lite[fimc->index] = fimc;
-       sd->grp_id = FLITE_GROUP_ID;
-       ret = v4l2_device_register_subdev(&fmd->v4l2_dev, sd);
+       ret = v4l2_device_register_subdev(&fmd->v4l2_dev, &fimc->subdev);
        if (ret) {
                v4l2_err(&fmd->v4l2_dev,
                         "Failed to register FIMC-LITE.%d (%d)\n",
                         fimc->index, ret);
+               return ret;
        }
-       return ret;
+       fimc->pipeline_ops = &fimc_pipeline_ops;
+       fmd->fimc_lite[fimc->index] = fimc;
+       return 0;
  }
  
  static int csis_register_callback(struct device *dev, void *p)
        v4l2_info(sd, "csis%d sd: %s\n", pdev->id, sd->name);
  
        id = pdev->id < 0 ? 0 : pdev->id;
-       fmd->csis[id].sd = sd;
        sd->grp_id = CSIS_GROUP_ID;
        ret = v4l2_device_register_subdev(&fmd->v4l2_dev, sd);
-       if (ret)
+       if (!ret)
+               fmd->csis[id].sd = sd;
+       else
                v4l2_err(&fmd->v4l2_dev,
                         "Failed to register CSIS subdevice: %d\n", ret);
        return ret;
@@@ -548,7 -547,7 +547,7 @@@ static int __fimc_md_create_fimc_sink_l
                if (ret)
                        break;
  
 -              v4l2_info(&fmd->v4l2_dev, "created link [%s] %c> [%s]",
 +              v4l2_info(&fmd->v4l2_dev, "created link [%s] %c> [%s]\n",
                          source->name, flags ? '=' : '-', sink->name);
  
                if (flags == 0 || sensor == NULL)
index 7927f5771e17a53e872c715e0354a855e10e3496,ba51f65204de833cb9965f5f0764f85c8ce9166e..671b4fa232b4a9f9e74fdc1d59f55f99d16c518b
@@@ -224,7 -224,7 +224,7 @@@ static void dvb_usb_data_complete_raw(s
        dvb_dmx_swfilter_raw(&adap->demux, buf, len);
  }
  
 -int dvb_usbv2_adapter_stream_init(struct dvb_usb_adapter *adap)
 +static int dvb_usbv2_adapter_stream_init(struct dvb_usb_adapter *adap)
  {
        dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
                        adap->id);
        return usb_urb_initv2(&adap->stream, &adap->props->stream);
  }
  
 -int dvb_usbv2_adapter_stream_exit(struct dvb_usb_adapter *adap)
 +static int dvb_usbv2_adapter_stream_exit(struct dvb_usb_adapter *adap)
  {
        dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
                        adap->id);
@@@ -283,14 -283,13 +283,13 @@@ static inline int dvb_usb_ctrl_feed(str
  
        /* activate the pid on the device pid filter */
        if (adap->props->caps & DVB_USB_ADAP_HAS_PID_FILTER &&
-                       adap->pid_filtering &&
-                       adap->props->pid_filter)
+                       adap->pid_filtering && adap->props->pid_filter) {
                ret = adap->props->pid_filter(adap, dvbdmxfeed->index,
                                dvbdmxfeed->pid, (count == 1) ? 1 : 0);
-                       if (ret < 0)
-                               dev_err(&d->udev->dev, "%s: pid_filter() " \
-                                               "failed=%d\n", KBUILD_MODNAME,
-                                               ret);
+               if (ret < 0)
+                       dev_err(&d->udev->dev, "%s: pid_filter() failed=%d\n",
+                                       KBUILD_MODNAME, ret);
+       }
  
        /* start feeding if it is first pid */
        if (adap->feed_count == 1 && count == 1) {
@@@ -369,7 -368,7 +368,7 @@@ static int dvb_usb_stop_feed(struct dvb
        return dvb_usb_ctrl_feed(dvbdmxfeed, -1);
  }
  
 -int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
 +static int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
  {
        int ret;
        struct dvb_usb_device *d = adap_to_d(adap);
@@@ -441,7 -440,7 +440,7 @@@ err_dvb_register_adapter
        return ret;
  }
  
 -int dvb_usbv2_adapter_dvb_exit(struct dvb_usb_adapter *adap)
 +static int dvb_usbv2_adapter_dvb_exit(struct dvb_usb_adapter *adap)
  {
        dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
                        adap->id);
        return 0;
  }
  
 -int dvb_usbv2_device_power_ctrl(struct dvb_usb_device *d, int onoff)
 +static int dvb_usbv2_device_power_ctrl(struct dvb_usb_device *d, int onoff)
  {
        int ret;
  
@@@ -554,7 -553,7 +553,7 @@@ err
        return ret;
  }
  
 -int dvb_usbv2_adapter_frontend_init(struct dvb_usb_adapter *adap)
 +static int dvb_usbv2_adapter_frontend_init(struct dvb_usb_adapter *adap)
  {
        int ret, i, count_registered = 0;
        struct dvb_usb_device *d = adap_to_d(adap);
@@@ -623,7 -622,7 +622,7 @@@ err
        return ret;
  }
  
 -int dvb_usbv2_adapter_frontend_exit(struct dvb_usb_adapter *adap)
 +static int dvb_usbv2_adapter_frontend_exit(struct dvb_usb_adapter *adap)
  {
        int i;
        dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
index ec9108e2a297af0953f338de31b8ac99b756e446,093f1acce403e7fa35ddea58914dd386ee32f426..223f0e70fbf68881f0248e2d9fa1adb0d6d82986
@@@ -1197,7 -1197,7 +1197,7 @@@ static int rtl2831u_get_rc_config(struc
                struct dvb_usb_rc *rc)
  {
        rc->map_name = RC_MAP_EMPTY;
 -      rc->allowed_protos = RC_TYPE_NEC;
 +      rc->allowed_protos = RC_BIT_NEC;
        rc->query = rtl2831u_rc_query;
        rc->interval = 400;
  
@@@ -1269,7 -1269,7 +1269,7 @@@ static int rtl2832u_get_rc_config(struc
                struct dvb_usb_rc *rc)
  {
        rc->map_name = RC_MAP_EMPTY;
 -      rc->allowed_protos = RC_TYPE_NEC;
 +      rc->allowed_protos = RC_BIT_NEC;
        rc->query = rtl2832u_rc_query;
        rc->interval = 400;
  
@@@ -1346,6 -1346,10 +1346,10 @@@ static const struct usb_device_id rtl28
                &rtl2832u_props, "DigitalNow Quad DVB-T Receiver", NULL) },
        { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x00d3,
                &rtl2832u_props, "TerraTec Cinergy T Stick RC (Rev. 3)", NULL) },
+       { DVB_USB_DEVICE(USB_VID_DEXATEK, 0x1102,
+               &rtl2832u_props, "Dexatek DK mini DVB-T Dongle", NULL) },
+       { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x00d7,
+               &rtl2832u_props, "TerraTec Cinergy T Stick+", NULL) },
        { }
  };
  MODULE_DEVICE_TABLE(usb, rtl28xxu_id_table);