Merge branch 'fbdev-next' of git://github.com/schandinat/linux-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 14 Jan 2012 23:11:19 +0000 (15:11 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 14 Jan 2012 23:11:19 +0000 (15:11 -0800)
* 'fbdev-next' of git://github.com/schandinat/linux-2.6: (175 commits)
  module_param: make bool parameters really bool (drivers/video/i810)
  Revert "atmel_lcdfb: Adjust HFP calculation so it matches the manual."
  OMAPDSS: HDMI: Disable DDC internal pull up
  OMAPDSS: HDMI: Move duplicate code from boardfile
  OMAPDSS: add OrtusTech COM43H4M10XTC display support
  OMAP: DSS2: Support for UMSH-8173MD TFT panel
  ASoC: OMAP: HDMI: Move HDMI codec trigger function to generic HDMI driver
  OMAPDSS: HDMI: Create function to enable HDMI audio
  ASoC: OMAP: HDMI: Correct signature of ASoC functions
  ASoC: OMAP: HDMI: Introduce driver data for audio codec
  grvga: fix section mismatch warnings
  video: s3c-fb: Don't keep device runtime active when open
  video: s3c-fb: Hold runtime PM references when touching registers
  video: s3c-fb: Take a runtime PM reference when unblanked
  video: s3c-fb: Disable runtime PM in error paths from probe
  video: s3c-fb: Use s3c_fb_enable() to enable the framebuffer
  video: s3c-fb: Make runtime PM functional again
  drivers/video: fsl-diu-fb: merge fsl_diu_alloc() into map_video_memory()
  drivers/video: fsl-diu-fb: add default platform ops functions
  drivers/video: fsl-diu-fb: remove broken reference count enabling the display
  ...

23 files changed:
1  2 
MAINTAINERS
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-omap2/display.c
arch/arm/mach-shmobile/board-ag5evm.c
arch/arm/mach-shmobile/board-ap4evb.c
arch/arm/mach-shmobile/board-mackerel.c
arch/arm/mach-shmobile/clock-sh7372.c
arch/arm/mach-shmobile/clock-sh73a0.c
arch/sh/boards/mach-ap325rxa/setup.c
arch/sh/boards/mach-ecovec24/setup.c
arch/sh/boards/mach-kfr2r09/setup.c
arch/sh/boards/mach-migor/setup.c
arch/sh/boards/mach-se/7724/setup.c
drivers/media/video/omap/omap_vout.c
drivers/video/Kconfig
drivers/video/cirrusfb.c
drivers/video/mxsfb.c
drivers/video/omap2/dss/core.c
drivers/video/omap2/dss/dsi.c
drivers/video/omap2/dss/dss.h
drivers/video/omap2/omapfb/omapfb-main.c
drivers/video/omap2/omapfb/omapfb.h

diff --combined MAINTAINERS
index 4d1ba2022a95e29d75cc0a9fb18a6f24558deac0,7e1fc8961d878d0498ebdee212ff79d0d6d9bf9c..ebbee877330f076f9eedf360bcfd8c103dc0636c
@@@ -184,6 -184,11 +184,6 @@@ S:        Maintaine
  F:    Documentation/filesystems/9p.txt
  F:    fs/9p/
  
 -A2232 SERIAL BOARD DRIVER
 -L:    linux-m68k@lists.linux-m68k.org
 -S:    Orphan
 -F:    drivers/staging/generic_serial/ser_a2232*
 -
  AACRAID SCSI RAID DRIVER
  M:    Adaptec OEM Raid Solutions <aacraid@adaptec.com>
  L:    linux-scsi@vger.kernel.org
@@@ -342,7 -347,7 +342,7 @@@ S: Supporte
  F:    drivers/mfd/adp5520.c
  F:    drivers/video/backlight/adp5520_bl.c
  F:    drivers/leds/leds-adp5520.c
 -F:    drivers/gpio/adp5520-gpio.c
 +F:    drivers/gpio/gpio-adp5520.c
  F:    drivers/input/keyboard/adp5520-keys.c
  
  ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587)
@@@ -351,7 -356,7 +351,7 @@@ L: device-drivers-devel@blackfin.uclinu
  W:    http://wiki.analog.com/ADP5588
  S:    Supported
  F:    drivers/input/keyboard/adp5588-keys.c
 -F:    drivers/gpio/adp5588-gpio.c
 +F:    drivers/gpio/gpio-adp5588.c
  
  ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863)
  M:    Michael Hennerich <michael.hennerich@analog.com>
@@@ -537,7 -542,6 +537,7 @@@ F: sound/soc/codecs/adau
  F:    sound/soc/codecs/adav*
  F:    sound/soc/codecs/ad1*
  F:    sound/soc/codecs/ssm*
 +F:    sound/soc/codecs/sigmadsp.*
  
  ANALOG DEVICES INC ASOC DRIVERS
  L:    uclinux-dist-devel@blackfin.uclinux.org
@@@ -915,6 -919,7 +915,6 @@@ M: Lennert Buytenhek <kernel@wantstofly
  M:    Nicolas Pitre <nico@fluxnic.net>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Odd Fixes
 -F:    arch/arm/mach-loki/
  F:    arch/arm/mach-kirkwood/
  F:    arch/arm/mach-mv78xx0/
  F:    arch/arm/mach-orion5x/
@@@ -1076,8 -1081,8 +1076,8 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    arch/arm/mach-s5pv210/mach-aquila.c
  F:    arch/arm/mach-s5pv210/mach-goni.c
 -F:    arch/arm/mach-exynos4/mach-universal_c210.c
 -F:    arch/arm/mach-exynos4/mach-nuri.c
 +F:    arch/arm/mach-exynos/mach-universal_c210.c
 +F:    arch/arm/mach-exynos/mach-nuri.c
  
  ARM/SAMSUNG S5P SERIES FIMC SUPPORT
  M:    Kyungmin Park <kyungmin.park@samsung.com>
@@@ -1105,6 -1110,7 +1105,6 @@@ M:      Tomasz Stanislawski <t.stanislaws@sa
  L:    linux-arm-kernel@lists.infradead.org
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    arch/arm/plat-s5p/dev-tv.c
  F:    drivers/media/video/s5p-tv/
  
  ARM/SHMOBILE ARM ARCHITECTURE
@@@ -1118,6 -1124,13 +1118,6 @@@ S:     Supporte
  F:    arch/arm/mach-shmobile/
  F:    drivers/sh/
  
 -ARM/TELECHIPS ARM ARCHITECTURE
 -M:    "Hans J. Koch" <hjk@hansjkoch.de>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/plat-tcc/
 -F:    arch/arm/mach-tcc8k/
 -
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1139,13 -1152,14 +1139,13 @@@ L:   linux-arm-kernel@lists.infradead.or
  W:    http://www.mcuos.com
  S:    Maintained
  F:    arch/arm/mach-w90x900/
 -F:    arch/arm/mach-nuc93x/
  F:    drivers/input/keyboard/w90p910_keypad.c
  F:    drivers/input/touchscreen/w90p910_ts.c
  F:    drivers/watchdog/nuc900_wdt.c
  F:    drivers/net/ethernet/nuvoton/w90p910_ether.c
  F:    drivers/mtd/nand/nuc900_nand.c
  F:    drivers/rtc/rtc-nuc900.c
 -F:    drivers/spi/spi_nuc900.c
 +F:    drivers/spi/spi-nuc900.c
  F:    drivers/usb/host/ehci-w90x900.c
  F:    drivers/video/nuc900fb.c
  
@@@ -1170,6 -1184,7 +1170,6 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    arch/arm/mach-ux500/
  F:    drivers/dma/ste_dma40*
 -F:    drivers/mfd/ab3550*
  F:    drivers/mfd/abx500*
  F:    drivers/mfd/ab8500*
  F:    drivers/mfd/stmpe*
@@@ -1349,7 -1364,7 +1349,7 @@@ F:      drivers/net/ethernet/cadence
  ATMEL SPI DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
 -F:    drivers/spi/atmel_spi.*
 +F:    drivers/spi/spi-atmel.*
  
  ATMEL USBA UDC DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
@@@ -1488,7 -1503,7 +1488,7 @@@ M:      Sonic Zhang <sonic.zhang@analog.com
  L:    uclinux-dist-devel@blackfin.uclinux.org
  W:    http://blackfin.uclinux.org
  S:    Supported
 -F:    drivers/tty/serial/bfin_5xx.c
 +F:    drivers/tty/serial/bfin_uart.c
  
  BLACKFIN WATCHDOG DRIVER
  M:    Mike Frysinger <vapier.adi@gmail.com>
@@@ -1579,7 -1594,7 +1579,7 @@@ M:      Franky (Zhenhui) Lin <frankyl@broadc
  M:    Kan Yan <kanyan@broadcom.com>
  L:    linux-wireless@vger.kernel.org
  S:    Supported
 -F:    drivers/staging/brcm80211/
 +F:    drivers/net/wireless/brcm80211/
  
  BROADCOM BNX2FC 10 GIGABIT FCOE DRIVER
  M:    Bhanu Prakash Gollapudi <bprakash@broadcom.com>
@@@ -1618,7 -1633,7 +1618,7 @@@ BT8XXGPIO DRIVE
  M:    Michael Buesch <m@bues.ch>
  W:    http://bu3sch.de/btgpio.php
  S:    Maintained
 -F:    drivers/gpio/bt8xxgpio.c
 +F:    drivers/gpio/gpio-bt8xx.c
  
  BTRFS FILE SYSTEM
  M:    Chris Mason <chris.mason@oracle.com>
@@@ -1646,14 -1661,6 +1646,14 @@@ T:    git git://git.alsa-project.org/alsa-
  S:    Maintained
  F:    sound/pci/oxygen/
  
 +C6X ARCHITECTURE
 +M:    Mark Salter <msalter@redhat.com>
 +M:    Aurelien Jacquiot <a-jacquiot@ti.com>
 +L:    linux-c6x-dev@linux-c6x.org
 +W:    http://www.linux-c6x.org/wiki/index.php/Main_Page
 +S:    Maintained
 +F:    arch/c6x/
 +
  CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
  M:    David Howells <dhowells@redhat.com>
  L:    linux-cachefs@redhat.com
@@@ -1667,7 -1674,7 +1667,7 @@@ L:      linux-media@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
  S:    Maintained
  F:    Documentation/video4linux/cafe_ccic
 -F:    drivers/media/video/cafe_ccic*
 +F:    drivers/media/video/marvell-ccic/
  
  CAIF NETWORK LAYER
  M:    Sjur Braendeland <sjur.brandeland@stericsson.com>
@@@ -1691,9 -1698,11 +1691,9 @@@ F:     arch/x86/include/asm/tce.
  
  CAN NETWORK LAYER
  M:    Oliver Hartkopp <socketcan@hartkopp.net>
 -M:    Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
 -M:    Urs Thuermann <urs.thuermann@volkswagen.de>
  L:    linux-can@vger.kernel.org
 -L:    netdev@vger.kernel.org
 -W:    http://developer.berlios.de/projects/socketcan/
 +W:    http://gitorious.org/linux-can
 +T:    git git://gitorious.org/linux-can/linux-can-next.git
  S:    Maintained
  F:    net/can/
  F:    include/linux/can.h
@@@ -1704,10 -1713,9 +1704,10 @@@ F:    include/linux/can/gw.
  
  CAN NETWORK DRIVERS
  M:    Wolfgang Grandegger <wg@grandegger.com>
 +M:    Marc Kleine-Budde <mkl@pengutronix.de>
  L:    linux-can@vger.kernel.org
 -L:    netdev@vger.kernel.org
 -W:    http://developer.berlios.de/projects/socketcan/
 +W:    http://gitorious.org/linux-can
 +T:    git git://gitorious.org/linux-can/linux-can-next.git
  S:    Maintained
  F:    drivers/net/can/
  F:    include/linux/can/dev.h
@@@ -1891,6 -1899,12 +1891,6 @@@ L:     platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/compal-laptop.c
  
 -COMPUTONE INTELLIPORT MULTIPORT CARD
 -W:    http://www.wittsend.com/computone.html
 -S:    Orphan
 -F:    Documentation/serial/computone.txt
 -F:    drivers/staging/tty/ip2/
 -
  CONEXANT ACCESSRUNNER USB DRIVER
  M:    Simon Arlott <cxacru@fire.lp0.eu>
  L:    accessrunner-general@lists.sourceforge.net
@@@ -2105,7 -2119,7 +2105,7 @@@ DAVICOM FAST ETHERNET (DMFE) NETWORK DR
  L:    netdev@vger.kernel.org
  S:    Orphan
  F:    Documentation/networking/dmfe.txt
 -F:    drivers/net/ethernet/tulip/dmfe.c
 +F:    drivers/net/ethernet/dec/tulip/dmfe.c
  
  DC390/AM53C974 SCSI driver
  M:    Kurt Garloff <garloff@suse.de>
@@@ -2178,13 -2192,6 +2178,13 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    drivers/usb/dwc3/
  
 +DEVICE FREQUENCY (DEVFREQ)
 +M:    MyungJoo Ham <myungjoo.ham@samsung.com>
 +M:    Kyungmin Park <kyungmin.park@samsung.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +F:    drivers/devfreq/
 +
  DEVICE NUMBER REGISTRY
  M:    Torben Mathiasen <device@lanana.org>
  W:    http://lanana.org/docs/device-list/index.html
@@@ -2201,6 -2208,15 +2201,6 @@@ F:     drivers/md/dm
  F:    include/linux/device-mapper.h
  F:    include/linux/dm-*.h
  
 -DIGI INTL. EPCA DRIVER
 -M:    "Digi International, Inc" <Eng.Linux@digi.com>
 -L:    Eng.Linux@digi.com
 -W:    http://www.digi.com
 -S:    Orphan
 -F:    Documentation/serial/digiepca.txt
 -F:    drivers/staging/tty/epca*
 -F:    drivers/staging/tty/digi*
 -
  DIOLAN U2C-12 I2C DRIVER
  M:    Guenter Roeck <guenter.roeck@ericsson.com>
  L:    linux-i2c@vger.kernel.org
@@@ -2684,7 -2700,7 +2684,7 @@@ FIREWIRE SUBSYSTE
  M:    Stefan Richter <stefanr@s5r6.in-berlin.de>
  L:    linux1394-devel@lists.sourceforge.net
  W:    http://ieee1394.wiki.kernel.org/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git
  S:    Maintained
  F:    drivers/firewire/
  F:    include/linux/firewire*.h
@@@ -2904,7 -2920,6 +2904,7 @@@ F:      include/linux/gigaset_dev.
  
  GPIO SUBSYSTEM
  M:    Grant Likely <grant.likely@secretlab.ca>
 +M:    Linus Walleij <linus.walleij@stericsson.com>
  S:    Maintained
  T:    git git://git.secretlab.ca/git/linux-2.6.git
  F:    Documentation/gpio.txt
@@@ -2922,7 -2937,7 +2922,7 @@@ GRETH 10/100/1G Ethernet MAC device dri
  M:    Kristoffer Glembo <kristoffer@gaisler.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/greth*
 +F:    drivers/net/ethernet/aeroflex/
  
  GSPCA FINEPIX SUBDRIVER
  M:    Frank Zago <frank@zago.net>
@@@ -3086,7 -3101,6 +3086,7 @@@ F:      include/linux/hid
  
  HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS
  M:    Thomas Gleixner <tglx@linutronix.de>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
  S:    Maintained
  F:    Documentation/timers/
  F:    kernel/hrtimer.c
@@@ -3174,16 -3188,6 +3174,16 @@@ M:    William Irwin <wli@holomorphy.com
  S:    Maintained
  F:    fs/hugetlbfs/
  
 +Hyper-V CORE AND DRIVERS
 +M:    K. Y. Srinivasan <kys@microsoft.com>
 +M:    Haiyang Zhang <haiyangz@microsoft.com>
 +L:    devel@linuxdriverproject.org
 +S:    Maintained
 +F:    drivers/hv/
 +F:    drivers/hid/hid-hyperv.c
 +F:    drivers/net/hyperv/
 +F:    drivers/staging/hv/
 +
  I2C/SMBUS STUB DRIVER
  M:    "Mark M. Hoffman" <mhoffman@lightlink.com>
  L:    linux-i2c@vger.kernel.org
@@@ -3193,7 -3197,6 +3193,7 @@@ F:      drivers/i2c/busses/i2c-stub.
  I2C SUBSYSTEM
  M:    "Jean Delvare (PC drivers, core)" <khali@linux-fr.org>
  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/
@@@ -3580,7 -3583,8 +3580,7 @@@ F:      net/netfilter/ipvs
  IPWIRELESS DRIVER
  M:    Jiri Kosina <jkosina@suse.cz>
  M:    David Sterba <dsterba@suse.cz>
 -S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/ipwireless_cs.git
 +S:    Odd Fixes
  F:    drivers/tty/ipwireless/
  
  IPX NETWORK LAYER
@@@ -3606,7 -3610,7 +3606,7 @@@ F:      net/irda
  IRQ SUBSYSTEM
  M:    Thomas Gleixner <tglx@linutronix.de>
  S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git irq/core
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
  F:    kernel/irq/
  
  ISAPNP
@@@ -3775,6 -3779,7 +3775,6 @@@ S:      Odd Fixe
  
  KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
  M:    "J. Bruce Fields" <bfields@fieldses.org>
 -M:    Neil Brown <neilb@suse.de>
  L:    linux-nfs@vger.kernel.org
  W:    http://nfs.sourceforge.net/
  S:    Supported
@@@ -3872,7 -3877,8 +3872,7 @@@ L:      keyrings@linux-nfs.or
  S:    Supported
  F:    Documentation/security/keys-trusted-encrypted.txt
  F:    include/keys/encrypted-type.h
 -F:    security/keys/encrypted.c
 -F:    security/keys/encrypted.h
 +F:    security/keys/encrypted-keys/
  
  KGDB / KDB /debug_core
  M:    Jason Wessel <jason.wessel@windriver.com>
@@@ -4005,7 -4011,7 +4005,7 @@@ M:      Josh Boyer <jwboyer@gmail.com
  M:    Matt Porter <mporter@kernel.crashing.org>
  W:    http://www.penguinppc.org/
  L:    linuxppc-dev@lists.ozlabs.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx.git
 +T:    git git://git.infradead.org/users/jwboyer/powerpc-4xx.git
  S:    Maintained
  F:    arch/powerpc/platforms/40x/
  F:    arch/powerpc/platforms/44x/
@@@ -4092,7 -4098,7 +4092,7 @@@ F:      drivers/hwmon/lm90.
  LOCKDEP AND LOCKSTAT
  M:    Peter Zijlstra <peterz@infradead.org>
  M:    Ingo Molnar <mingo@redhat.com>
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/peterz/linux-2.6-lockdep.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking
  S:    Maintained
  F:    Documentation/lockdep*.txt
  F:    Documentation/lockstat.txt
@@@ -4274,9 -4280,7 +4274,9 @@@ T:      git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    Documentation/dvb/
  F:    Documentation/video4linux/
 +F:    Documentation/DocBook/media/
  F:    drivers/media/
 +F:    drivers/staging/media/
  F:    include/media/
  F:    include/linux/dvb/
  F:    include/linux/videodev*.h
@@@ -4683,8 -4687,6 +4683,8 @@@ Q:      http://patchwork.kernel.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
  S:    Maintained
  F:    arch/arm/*omap*/
 +F:    drivers/i2c/busses/i2c-omap.c
 +F:    include/linux/i2c-omap.h
  
  OMAP CLOCK FRAMEWORK SUPPORT
  M:    Paul Walmsley <paul@pwsan.com>
@@@ -4850,14 -4852,6 +4850,14 @@@ S:    Maintaine
  T:    git git://openrisc.net/~jonas/linux
  F:    arch/openrisc
  
 +OPENVSWITCH
 +M:    Jesse Gross <jesse@nicira.com>
 +L:    dev@openvswitch.org
 +W:    http://openvswitch.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch.git
 +S:    Maintained
 +F:    net/openvswitch/
 +
  OPL4 DRIVER
  M:    Clemens Ladisch <clemens@ladisch.de>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
@@@ -5092,7 -5086,6 +5092,7 @@@ M:      Peter Zijlstra <a.p.zijlstra@chello.
  M:    Paul Mackerras <paulus@samba.org>
  M:    Ingo Molnar <mingo@elte.hu>
  M:    Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
  S:    Supported
  F:    kernel/events/*
  F:    include/linux/perf_event.h
@@@ -5124,19 -5117,10 +5124,19 @@@ L:   linux-mtd@lists.infradead.or
  S:    Maintained
  F:    drivers/mtd/devices/phram.c
  
 +PICOXCELL SUPPORT
 +M:    Jamie Iles <jamie@jamieiles.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +T:    git git://github.com/jamieiles/linux-2.6-ji.git
 +S:    Supported
 +F:    arch/arm/mach-picoxcell
 +F:    drivers/*/picoxcell*
 +F:    drivers/*/*/picoxcell*
 +
  PIN CONTROL SUBSYSTEM
  M:    Linus Walleij <linus.walleij@linaro.org>
  S:    Maintained
 -F:    drivers/pinmux/
 +F:    drivers/pinctrl/
  
  PKTCDVD DRIVER
  M:    Peter Osterlund <petero2@telia.com>
@@@ -5181,7 -5165,6 +5181,7 @@@ F:      drivers/scsi/pm8001
  
  POSIX CLOCKS and TIMERS
  M:    Thomas Gleixner <tglx@linutronix.de>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
  S:    Supported
  F:    fs/timerfd.c
  F:    include/linux/timer*
@@@ -5319,27 -5302,35 +5319,27 @@@ F:   drivers/media/video/pvrusb2
  PXA2xx/PXA3xx SUPPORT
  M:    Eric Miao <eric.y.miao@gmail.com>
  M:    Russell King <linux@arm.linux.org.uk>
 +M:    Haojian Zhuang <haojian.zhuang@marvell.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +T:    git git://github.com/hzhuang1/linux.git
 +T:    git git://git.linaro.org/people/ycmiao/pxa-linux.git
  S:    Maintained
  F:    arch/arm/mach-pxa/
  F:    drivers/pcmcia/pxa2xx*
 -F:    drivers/spi/pxa2xx*
 +F:    drivers/spi/spi-pxa2xx*
  F:    drivers/usb/gadget/pxa2*
  F:    include/sound/pxa2xx-lib.h
  F:    sound/arm/pxa*
  F:    sound/soc/pxa
  
 -PXA168 SUPPORT
 -M:    Eric Miao <eric.y.miao@gmail.com>
 -M:    Jason Chagas <jason.chagas@marvell.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
 -S:    Maintained
 -
 -PXA910 SUPPORT
 +MMP SUPPORT
  M:    Eric Miao <eric.y.miao@gmail.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
 -S:    Maintained
 -
 -MMP2 SUPPORT (aka ARMADA610)
  M:    Haojian Zhuang <haojian.zhuang@marvell.com>
 -M:    Eric Miao <eric.y.miao@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
 +T:    git git://github.com/hzhuang1/linux.git
 +T:    git git://git.linaro.org/people/ycmiao/pxa-linux.git
  S:    Maintained
 +F:    arch/arm/mach-mmp/
  
  PXA MMCI DRIVER
  S:    Orphan
@@@ -5378,7 -5369,6 +5378,7 @@@ S:      Supporte
  F:    drivers/scsi/qla4xxx/
  
  QLOGIC QLA3XXX NETWORK DRIVER
 +M:    Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
  M:    Ron Mercer <ron.mercer@qlogic.com>
  M:    linux-driver@qlogic.com
  L:    netdev@vger.kernel.org
@@@ -5549,6 -5539,11 +5549,6 @@@ M:     Maxim Levitsky <maximlevitsky@gmail.
  S:    Maintained
  F:    drivers/memstick/host/r592.*
  
 -RISCOM8 DRIVER
 -S:    Orphan
 -F:    Documentation/serial/riscom8.txt
 -F:    drivers/staging/tty/riscom8*
 -
  ROCKETPORT DRIVER
  P:    Comtrol Corp.
  W:    http://www.comtrol.com
@@@ -5669,6 -5664,12 +5669,12 @@@ L:    alsa-devel@alsa-project.org (moderat
  S:    Supported
  F:    sound/soc/samsung
  
+ SAMSUNG FRAMEBUFFER DRIVER
+ M:    Jingoo Han <jg1.han@samsung.com>
+ L:    linux-fbdev@vger.kernel.org
+ S:    Maintained
+ F:    drivers/video/s3c-fb.c
  SERIAL DRIVERS
  M:    Alan Cox <alan@linux.intel.com>
  L:    linux-serial@vger.kernel.org
@@@ -5685,7 -5686,6 +5691,7 @@@ F:      drivers/dma/dw_dmac.
  TIMEKEEPING, NTP
  M:    John Stultz <johnstul@us.ibm.com>
  M:    Thomas Gleixner <tglx@linutronix.de>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
  S:    Supported
  F:    include/linux/clocksource.h
  F:    include/linux/time.h
@@@ -5710,7 -5710,6 +5716,7 @@@ F:      drivers/watchdog/sc1200wdt.
  SCHEDULER
  M:    Ingo Molnar <mingo@elte.hu>
  M:    Peter Zijlstra <peterz@infradead.org>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core
  S:    Maintained
  F:    kernel/sched*
  F:    include/linux/sched.h
@@@ -5808,14 -5807,13 +5814,14 @@@ L:   linux-mmc@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
  S:    Maintained
  F:    drivers/mmc/host/sdhci.*
 +F:    drivers/mmc/host/sdhci-pltfm.[ch]
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
  M:    Anton Vorontsov <avorontsov@ru.mvista.com>
  L:    linuxppc-dev@lists.ozlabs.org
  L:    linux-mmc@vger.kernel.org
  S:    Maintained
 -F:    drivers/mmc/host/sdhci-of.*
 +F:    drivers/mmc/host/sdhci-pltfm.[ch]
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) SAMSUNG DRIVER
  M:    Ben Dooks <ben-linux@fluff.org>
@@@ -5894,6 -5892,7 +5900,6 @@@ F:      drivers/net/ethernet/emulex/benet
  
  SFC NETWORK DRIVER
  M:    Solarflare linux maintainers <linux-net-drivers@solarflare.com>
 -M:    Steve Hodgson <shodgson@solarflare.com>
  M:    Ben Hutchings <bhutchings@solarflare.com>
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -5958,7 -5957,6 +5964,7 @@@ L:      davinci-linux-open-source@linux.davi
  Q:    http://patchwork.kernel.org/project/linux-davinci/list/
  S:    Supported
  F:    arch/arm/mach-davinci
 +F:    drivers/i2c/busses/i2c-davinci.c
  
  SIS 190 ETHERNET DRIVER
  M:    Francois Romieu <romieu@fr.zoreil.com>
@@@ -6195,7 -6193,9 +6201,7 @@@ M:      Viresh Kumar <viresh.kumar@st.com
  W:    http://www.st.com/spear
  S:    Maintained
  F:    arch/arm/mach-spear*/clock.c
 -F:    arch/arm/mach-spear*/include/mach/clkdev.h
  F:    arch/arm/plat-spear/clock.c
 -F:    arch/arm/plat-spear/include/plat/clkdev.h
  F:    arch/arm/plat-spear/include/plat/clock.h
  
  SPEAR PAD MULTIPLEXING SUPPORT
@@@ -6211,6 -6211,11 +6217,6 @@@ F:     arch/arm/mach-spear3xx/spear3*0_evb.
  F:    arch/arm/mach-spear6xx/spear600.c
  F:    arch/arm/mach-spear6xx/spear600_evb.c
  
 -SPECIALIX IO8+ MULTIPORT SERIAL CARD DRIVER
 -S:    Orphan
 -F:    Documentation/serial/specialix.txt
 -F:    drivers/staging/tty/specialix*
 -
  SPI SUBSYSTEM
  M:    Grant Likely <grant.likely@secretlab.ca>
  L:    spi-devel-general@lists.sourceforge.net
@@@ -6253,7 -6258,7 +6259,7 @@@ F:      arch/alpha/kernel/srm_env.
  
  STABLE BRANCH
  M:    Greg Kroah-Hartman <greg@kroah.com>
 -L:    stable@kernel.org
 +L:    stable@vger.kernel.org
  S:    Maintained
  
  STAGING SUBSYSTEM
@@@ -6288,6 -6293,11 +6294,6 @@@ M:     Manu Abraham <abraham.manu@gmail.com
  S:    Odd Fixes
  F:    drivers/staging/crystalhd/
  
 -STAGING - CYPRESS WESTBRIDGE SUPPORT
 -M:    David Cross <david.cross@cypress.com>
 -S:    Odd Fixes
 -F:    drivers/staging/westbridge/
 -
  STAGING - ECHO CANCELLER
  M:    Steve Underwood <steveu@coppice.org>
  M:    David Rowe <david@rowetel.com>
@@@ -6309,6 -6319,12 +6315,6 @@@ M:     David Täht <d@teklibre.com
  S:    Odd Fixes
  F:    drivers/staging/frontier/
  
 -STAGING - HYPER-V (MICROSOFT)
 -M:    Hank Janssen <hjanssen@microsoft.com>
 -M:    Haiyang Zhang <haiyangz@microsoft.com>
 -S:    Odd Fixes
 -F:    drivers/staging/hv/
 -
  STAGING - INDUSTRIAL IO
  M:    Jonathan Cameron <jic23@cam.ac.uk>
  L:    linux-iio@vger.kernel.org
@@@ -6319,7 -6335,7 +6325,7 @@@ STAGING - LIRC (LINUX INFRARED REMOTE C
  M:    Jarod Wilson <jarod@wilsonet.com>
  W:    http://www.lirc.org/
  S:    Odd Fixes
 -F:    drivers/staging/lirc/
 +F:    drivers/staging/media/lirc/
  
  STAGING - NVIDIA COMPLIANT EMBEDDED CONTROLLER INTERFACE (nvec)
  M:    Julian Andres Klode <jak@jak-linux.org>
@@@ -6355,7 -6371,7 +6361,7 @@@ F:      drivers/staging/sm7xx
  STAGING - SOFTLOGIC 6x10 MPEG CODEC
  M:    Ben Collins <bcollins@bluecherry.net>
  S:    Odd Fixes
 -F:    drivers/staging/solo6x10/
 +F:    drivers/staging/media/solo6x10/
  
  STAGING - SPEAKUP CONSOLE SPEECH DRIVER
  M:    William Hubbs <w.d.hubbs@gmail.com>
@@@ -6393,7 -6409,7 +6399,7 @@@ S:      Odd Fixe
  F:    drivers/staging/winbond/
  
  STAGING - XGI Z7,Z9,Z11 PCI DISPLAY DRIVER
 -M:    Arnaud Patard <apatard@mandriva.com>
 +M:    Arnaud Patard <arnaud.patard@rtp-net.org>
  S:    Odd Fixes
  F:    drivers/staging/xgifb/
  
@@@ -6484,13 -6500,6 +6490,13 @@@ W:    http://tcp-lp-mod.sourceforge.net
  S:    Maintained
  F:    net/ipv4/tcp_lp.c
  
 +TEAM DRIVER
 +M:    Jiri Pirko <jpirko@redhat.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/team/
 +F:    include/linux/if_team.h
 +
  TEGRA SUPPORT
  M:    Colin Cross <ccross@android.com>
  M:    Olof Johansson <olof@lixom.net>
@@@ -6628,7 -6637,7 +6634,7 @@@ TRACIN
  M:    Steven Rostedt <rostedt@goodmis.org>
  M:    Frederic Weisbecker <fweisbec@gmail.com>
  M:    Ingo Molnar <mingo@redhat.com>
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git perf/core
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
  S:    Maintained
  F:    Documentation/trace/ftrace.txt
  F:    arch/*/*/*/ftrace.h
@@@ -6658,7 -6667,7 +6664,7 @@@ TULIP NETWORK DRIVER
  M:    Grant Grundler <grundler@parisc-linux.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ethernet/tulip/
 +F:    drivers/net/ethernet/dec/tulip/
  
  TUN/TAP driver
  M:    Maxim Krasnyansky <maxk@qualcomm.com>
@@@ -7378,7 -7387,7 +7384,7 @@@ M:      Thomas Gleixner <tglx@linutronix.de
  M:    Ingo Molnar <mingo@redhat.com>
  M:    "H. Peter Anvin" <hpa@zytor.com>
  M:    x86@kernel.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core
  S:    Maintained
  F:    Documentation/x86/
  F:    arch/x86/
index 2ceb75d21eb2fdfb12073ba57579acb38a6aedf0,e1fe304ce36175b826987a2eb141d72a42047d30..39fba9df17fba3209396cba2d8be2d59553c8ab5
  #include <linux/leds_pwm.h>
  
  #include <mach/hardware.h>
 -#include <mach/omap4-common.h>
 +#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  
  #include <plat/board.h>
 -#include <plat/common.h>
 +#include "common.h"
  #include <plat/usb.h>
  #include <plat/mmc.h>
  #include <plat/omap4-keypad.h>
@@@ -372,17 -372,11 +372,17 @@@ static struct platform_device sdp4430_v
        },
  };
  
 +static struct platform_device sdp4430_dmic_codec = {
 +      .name   = "dmic-codec",
 +      .id     = -1,
 +};
 +
  static struct platform_device *sdp4430_devices[] __initdata = {
        &sdp4430_gpio_keys_device,
        &sdp4430_leds_gpio,
        &sdp4430_leds_pwm,
        &sdp4430_vbat,
 +      &sdp4430_dmic_codec,
  };
  
  static struct omap_musb_board_data musb_board_data = {
@@@ -410,7 -404,6 +410,7 @@@ static struct omap2_hsmmc_info mmc[] = 
        {
                .mmc            = 5,
                .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
 +              .pm_caps        = MMC_PM_KEEP_POWER,
                .gpio_cd        = -EINVAL,
                .gpio_wp        = -EINVAL,
                .ocr_mask       = MMC_VDD_165_195,
@@@ -602,20 -595,6 +602,6 @@@ static void __init omap_sfh7741prox_ini
                        __func__, OMAP4_SFH7741_ENABLE_GPIO, error);
  }
  
- static void sdp4430_hdmi_mux_init(void)
- {
-       /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
-       omap_mux_init_signal("hdmi_hpd",
-                       OMAP_PIN_INPUT_PULLUP);
-       omap_mux_init_signal("hdmi_cec",
-                       OMAP_PIN_INPUT_PULLUP);
-       /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
-       omap_mux_init_signal("hdmi_ddc_scl",
-                       OMAP_PIN_INPUT_PULLUP);
-       omap_mux_init_signal("hdmi_ddc_sda",
-                       OMAP_PIN_INPUT_PULLUP);
- }
  static struct gpio sdp4430_hdmi_gpios[] = {
        { HDMI_GPIO_HPD,        GPIOF_OUT_INIT_HIGH,    "hdmi_gpio_hpd"   },
        { HDMI_GPIO_LS_OE,      GPIOF_OUT_INIT_HIGH,    "hdmi_gpio_ls_oe" },
@@@ -833,9 -812,16 +819,16 @@@ static void omap_4430sdp_display_init(v
                pr_err("%s: Could not get display_sel GPIO\n", __func__);
  
        sdp4430_lcd_init();
-       sdp4430_hdmi_mux_init();
        sdp4430_picodlp_init();
        omap_display_init(&sdp4430_dss_data);
+       /*
+        * OMAP4460SDP/Blaze and OMAP4430 ES2.3 SDP/Blaze boards and
+        * later have external pull up on the HDMI I2C lines
+        */
+       if (cpu_is_omap446x() || omap_rev() > OMAP4430_REV_ES2_2)
+               omap_hdmi_init(OMAP_HDMI_SDA_SCL_EXTERNAL_PULLUP);
+       else
+               omap_hdmi_init(0);
  }
  
  #ifdef CONFIG_OMAP_MUX
@@@ -844,8 -830,74 +837,8 @@@ static struct omap_board_mux board_mux[
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
  
 -static struct omap_device_pad serial2_pads[] __initdata = {
 -      OMAP_MUX_STATIC("uart2_cts.uart2_cts",
 -                       OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart2_rts.uart2_rts",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart2_rx.uart2_rx",
 -                       OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart2_tx.uart2_tx",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -};
 -
 -static struct omap_device_pad serial3_pads[] __initdata = {
 -      OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
 -                       OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
 -                       OMAP_PIN_INPUT | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -};
 -
 -static struct omap_device_pad serial4_pads[] __initdata = {
 -      OMAP_MUX_STATIC("uart4_rx.uart4_rx",
 -                       OMAP_PIN_INPUT | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart4_tx.uart4_tx",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -};
 -
 -static struct omap_board_data serial2_data __initdata = {
 -      .id             = 1,
 -      .pads           = serial2_pads,
 -      .pads_cnt       = ARRAY_SIZE(serial2_pads),
 -};
 -
 -static struct omap_board_data serial3_data __initdata = {
 -      .id             = 2,
 -      .pads           = serial3_pads,
 -      .pads_cnt       = ARRAY_SIZE(serial3_pads),
 -};
 -
 -static struct omap_board_data serial4_data __initdata = {
 -      .id             = 3,
 -      .pads           = serial4_pads,
 -      .pads_cnt       = ARRAY_SIZE(serial4_pads),
 -};
 -
 -static inline void board_serial_init(void)
 -{
 -      struct omap_board_data bdata;
 -      bdata.flags     = 0;
 -      bdata.pads      = NULL;
 -      bdata.pads_cnt  = 0;
 -      bdata.id        = 0;
 -      /* pass dummy data for UART1 */
 -      omap_serial_init_port(&bdata);
 -
 -      omap_serial_init_port(&serial2_data);
 -      omap_serial_init_port(&serial3_data);
 -      omap_serial_init_port(&serial4_data);
 -}
  #else
  #define board_mux     NULL
 -
 -static inline void board_serial_init(void)
 -{
 -      omap_serial_init();
 -}
   #endif
  
  static void omap4_sdp4430_wifi_mux_init(void)
@@@ -895,7 -947,7 +888,7 @@@ static void __init omap_4430sdp_init(vo
        omap4_i2c_init();
        omap_sfh7741prox_init();
        platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
 -      board_serial_init();
 +      omap_serial_init();
        omap_sdrc_init(NULL, NULL);
        omap4_sdp4430_wifi_init();
        omap4_twl6030_hsmmc_init(mmc);
@@@ -925,8 -977,6 +918,8 @@@ MACHINE_START(OMAP_4430SDP, "OMAP4430 4
        .map_io         = omap4_map_io,
        .init_early     = omap4430_init_early,
        .init_irq       = gic_init_irq,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = omap_4430sdp_init,
        .timer          = &omap4_timer,
 +      .restart        = omap_prcm_restart,
  MACHINE_END
index e96a2e7ad36f527b81b321ce5f01fe5488c88f5f,3e1c507fb01f4532c8949f96aa8680e2eb32ae44..30ad40db2cf39558bdefc6bf40169114919ed6e7
  #include <linux/wl12xx.h>
  
  #include <mach/hardware.h>
 -#include <mach/omap4-common.h>
 +#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <video/omapdss.h>
  
  #include <plat/board.h>
 -#include <plat/common.h>
 +#include "common.h"
  #include <plat/usb.h>
  #include <plat/mmc.h>
  #include <video/omap-panel-dvi.h>
@@@ -364,8 -364,74 +364,8 @@@ static struct omap_board_mux board_mux[
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
  
 -static struct omap_device_pad serial2_pads[] __initdata = {
 -      OMAP_MUX_STATIC("uart2_cts.uart2_cts",
 -                       OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart2_rts.uart2_rts",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart2_rx.uart2_rx",
 -                       OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart2_tx.uart2_tx",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -};
 -
 -static struct omap_device_pad serial3_pads[] __initdata = {
 -      OMAP_MUX_STATIC("uart3_cts_rctx.uart3_cts_rctx",
 -                       OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart3_rts_sd.uart3_rts_sd",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart3_rx_irrx.uart3_rx_irrx",
 -                       OMAP_PIN_INPUT | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart3_tx_irtx.uart3_tx_irtx",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -};
 -
 -static struct omap_device_pad serial4_pads[] __initdata = {
 -      OMAP_MUX_STATIC("uart4_rx.uart4_rx",
 -                       OMAP_PIN_INPUT | OMAP_MUX_MODE0),
 -      OMAP_MUX_STATIC("uart4_tx.uart4_tx",
 -                       OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
 -};
 -
 -static struct omap_board_data serial2_data __initdata = {
 -      .id             = 1,
 -      .pads           = serial2_pads,
 -      .pads_cnt       = ARRAY_SIZE(serial2_pads),
 -};
 -
 -static struct omap_board_data serial3_data __initdata = {
 -      .id             = 2,
 -      .pads           = serial3_pads,
 -      .pads_cnt       = ARRAY_SIZE(serial3_pads),
 -};
 -
 -static struct omap_board_data serial4_data __initdata = {
 -      .id             = 3,
 -      .pads           = serial4_pads,
 -      .pads_cnt       = ARRAY_SIZE(serial4_pads),
 -};
 -
 -static inline void board_serial_init(void)
 -{
 -      struct omap_board_data bdata;
 -      bdata.flags     = 0;
 -      bdata.pads      = NULL;
 -      bdata.pads_cnt  = 0;
 -      bdata.id        = 0;
 -      /* pass dummy data for UART1 */
 -      omap_serial_init_port(&bdata);
 -
 -      omap_serial_init_port(&serial2_data);
 -      omap_serial_init_port(&serial3_data);
 -      omap_serial_init_port(&serial4_data);
 -}
  #else
  #define board_mux     NULL
 -
 -static inline void board_serial_init(void)
 -{
 -      omap_serial_init();
 -}
  #endif
  
  /* Display DVI */
@@@ -412,21 -478,6 +412,6 @@@ int __init omap4_panda_dvi_init(void
        return r;
  }
  
- static void omap4_panda_hdmi_mux_init(void)
- {
-       /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
-       omap_mux_init_signal("hdmi_hpd",
-                       OMAP_PIN_INPUT_PULLUP);
-       omap_mux_init_signal("hdmi_cec",
-                       OMAP_PIN_INPUT_PULLUP);
-       /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
-       omap_mux_init_signal("hdmi_ddc_scl",
-                       OMAP_PIN_INPUT_PULLUP);
-       omap_mux_init_signal("hdmi_ddc_sda",
-                       OMAP_PIN_INPUT_PULLUP);
- }
  static struct gpio panda_hdmi_gpios[] = {
        { HDMI_GPIO_HPD,        GPIOF_OUT_INIT_HIGH, "hdmi_gpio_hpd"   },
        { HDMI_GPIO_LS_OE,      GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ls_oe" },
@@@ -478,8 -529,16 +463,16 @@@ void omap4_panda_display_init(void
        if (r)
                pr_err("error initializing panda DVI\n");
  
-       omap4_panda_hdmi_mux_init();
        omap_display_init(&omap4_panda_dss_data);
+       /*
+        * OMAP4460SDP/Blaze and OMAP4430 ES2.3 SDP/Blaze boards and
+        * later have external pull up on the HDMI I2C lines
+        */
+       if (cpu_is_omap446x() || omap_rev() > OMAP4430_REV_ES2_2)
+               omap_hdmi_init(OMAP_HDMI_SDA_SCL_EXTERNAL_PULLUP);
+       else
+               omap_hdmi_init(0);
  }
  
  static void __init omap4_panda_init(void)
        omap4_panda_i2c_init();
        platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
        platform_device_register(&omap_vwlan_device);
 -      board_serial_init();
 +      omap_serial_init();
        omap_sdrc_init(NULL, NULL);
        omap4_twl6030_hsmmc_init(mmc);
        omap4_ehci_init();
@@@ -511,8 -570,6 +504,8 @@@ MACHINE_START(OMAP4_PANDA, "OMAP4 Pand
        .map_io         = omap4_map_io,
        .init_early     = omap4430_init_early,
        .init_irq       = gic_init_irq,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = omap4_panda_init,
        .timer          = &omap4_timer,
 +      .restart        = omap_prcm_restart,
  MACHINE_END
index bc6cf863a563bcf51f76240598ca6424b92939fe,ffd9bd98302362f1d51133e8759564cef30d8ea1..3c446d1a1781fe3d819b2732ea28e2426c2a1348
  #include <linux/io.h>
  #include <linux/clk.h>
  #include <linux/err.h>
 +#include <linux/delay.h>
  
  #include <video/omapdss.h>
  #include <plat/omap_hwmod.h>
  #include <plat/omap_device.h>
  #include <plat/omap-pm.h>
 -#include <plat/common.h>
 +#include "common.h"
  
+ #include "mux.h"
  #include "control.h"
  #include "display.h"
  
@@@ -97,6 -97,36 +98,36 @@@ static const struct omap_dss_hwmod_dat
        { "dss_hdmi", "omapdss_hdmi", -1 },
  };
  
+ static void omap4_hdmi_mux_pads(enum omap_hdmi_flags flags)
+ {
+       u32 reg;
+       u16 control_i2c_1;
+       /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
+       omap_mux_init_signal("hdmi_hpd",
+                       OMAP_PIN_INPUT_PULLUP);
+       omap_mux_init_signal("hdmi_cec",
+                       OMAP_PIN_INPUT_PULLUP);
+       /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
+       omap_mux_init_signal("hdmi_ddc_scl",
+                       OMAP_PIN_INPUT_PULLUP);
+       omap_mux_init_signal("hdmi_ddc_sda",
+                       OMAP_PIN_INPUT_PULLUP);
+       /*
+        * CONTROL_I2C_1: HDMI_DDC_SDA_PULLUPRESX (bit 28) and
+        * HDMI_DDC_SCL_PULLUPRESX (bit 24) are set to disable
+        * internal pull up resistor.
+        */
+       if (flags & OMAP_HDMI_SDA_SCL_EXTERNAL_PULLUP) {
+               control_i2c_1 = OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_1;
+               reg = omap4_ctrl_pad_readl(control_i2c_1);
+               reg |= (OMAP4_HDMI_DDC_SDA_PULLUPRESX_MASK |
+                       OMAP4_HDMI_DDC_SCL_PULLUPRESX_MASK);
+                       omap4_ctrl_pad_writel(reg, control_i2c_1);
+       }
+ }
  static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
  {
        u32 enable_mask, enable_shift;
        return 0;
  }
  
+ int omap_hdmi_init(enum omap_hdmi_flags flags)
+ {
+       if (cpu_is_omap44xx())
+               omap4_hdmi_mux_pads(flags);
+       return 0;
+ }
  static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask)
  {
        if (cpu_is_omap44xx())
index a4e6ca04e319534dfc4a0a94fa2a8fd7bb3e5caa,80319f214765cd3df4b7a2959600c4caee22c06b..eff8a96c75ee558298827e5c15a34fbf7af56ae9
@@@ -271,7 -271,7 +271,7 @@@ static struct sh_mobile_lcdc_info lcdc0
                .flags = LCDC_FLAGS_DWPOL,
                .lcd_size_cfg.width = 44,
                .lcd_size_cfg.height = 79,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .lcd_cfg = lcdc0_modes,
                .num_cfg = ARRAY_SIZE(lcdc0_modes),
                .board_cfg = {
@@@ -321,12 -321,46 +321,46 @@@ static struct resource mipidsi0_resourc
        },
  };
  
+ #define DSI0PHYCR     0xe615006c
+ static int sh_mipi_set_dot_clock(struct platform_device *pdev,
+                                void __iomem *base,
+                                int enable)
+ {
+       struct clk *pck;
+       int ret;
+       pck = clk_get(&pdev->dev, "dsip_clk");
+       if (IS_ERR(pck)) {
+               ret = PTR_ERR(pck);
+               goto sh_mipi_set_dot_clock_pck_err;
+       }
+       if (enable) {
+               clk_set_rate(pck, clk_round_rate(pck,  24000000));
+               __raw_writel(0x2a809010, DSI0PHYCR);
+               clk_enable(pck);
+       } else {
+               clk_disable(pck);
+       }
+       ret = 0;
+       clk_put(pck);
+ sh_mipi_set_dot_clock_pck_err:
+       return ret;
+ }
  static struct sh_mipi_dsi_info mipidsi0_info = {
        .data_format    = MIPI_RGB888,
        .lcd_chan       = &lcdc0_info.ch[0],
+       .lane           = 2,
        .vsynw_offset   = 20,
        .clksrc         = 1,
-       .flags          = SH_MIPI_DSI_HSABM,
+       .flags          = SH_MIPI_DSI_HSABM             |
+                         SH_MIPI_DSI_SYNC_PULSES_MODE  |
+                         SH_MIPI_DSI_HSbyteCLK,
+       .set_dot_clock  = sh_mipi_set_dot_clock,
  };
  
  static struct platform_device mipidsi0_device = {
@@@ -466,14 -500,14 +500,12 @@@ static struct map_desc ag5evm_io_desc[
  static void __init ag5evm_map_io(void)
  {
        iotable_init(ag5evm_io_desc, ARRAY_SIZE(ag5evm_io_desc));
 -      /* DMA memory at 0xf6000000 - 0xffdfffff */
 -      init_consistent_dma_size(158 << 20);
  
        /* setup early devices and console here as well */
        sh73a0_add_early_devices();
        shmobile_setup_console();
  }
  
- #define DSI0PHYCR     0xe615006c
  static void __init ag5evm_init(void)
  {
        sh73a0_pinmux_init();
        gpio_direction_output(GPIO_PORT235, 0);
        lcd_backlight_reset();
  
-       /* MIPI-DSI clock setup */
-       __raw_writel(0x2a809010, DSI0PHYCR);
        /* enable SDHI0 on CN15 [SD I/F] */
        gpio_request(GPIO_FN_SDHICD0, NULL);
        gpio_request(GPIO_FN_SDHIWP0, NULL);
@@@ -605,9 -636,8 +634,9 @@@ struct sys_timer ag5evm_timer = 
  
  MACHINE_START(AG5EVM, "ag5evm")
        .map_io         = ag5evm_map_io,
 +      .nr_irqs        = NR_IRQS_LEGACY,
        .init_irq       = sh73a0_init_irq,
 -      .handle_irq     = shmobile_handle_irq_gic,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = ag5evm_init,
        .timer          = &ag5evm_timer,
  MACHINE_END
index d2e7b73aa9b6418dce567e6be2216e07961fdb0c,42b4dda57a79b39d95d9fb07aaf4423e79546467..aab0a349f759baaa6469373270539cab35b9cee4
@@@ -491,7 -491,7 +491,7 @@@ static struct sh_mobile_lcdc_info lcdc_
        .meram_dev = &meram_info,
        .ch[0] = {
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .lcd_cfg = ap4evb_lcdc_modes,
                .num_cfg = ARRAY_SIZE(ap4evb_lcdc_modes),
                .meram_cfg = &lcd_meram_cfg,
@@@ -564,6 -564,30 +564,30 @@@ static struct platform_device keysc_dev
  };
  
  /* MIPI-DSI */
+ #define PHYCTRL               0x0070
+ static int sh_mipi_set_dot_clock(struct platform_device *pdev,
+                                void __iomem *base,
+                                int enable)
+ {
+       struct clk *pck = clk_get(&pdev->dev, "dsip_clk");
+       void __iomem *phy =  base + PHYCTRL;
+       if (IS_ERR(pck))
+               return PTR_ERR(pck);
+       if (enable) {
+               clk_set_rate(pck, clk_round_rate(pck, 24000000));
+               iowrite32(ioread32(phy) | (0xb << 8), phy);
+               clk_enable(pck);
+       } else {
+               clk_disable(pck);
+       }
+       clk_put(pck);
+       return 0;
+ }
  static struct resource mipidsi0_resources[] = {
        [0] = {
                .start  = 0xffc60000,
  static struct sh_mipi_dsi_info mipidsi0_info = {
        .data_format    = MIPI_RGB888,
        .lcd_chan       = &lcdc_info.ch[0],
+       .lane           = 2,
        .vsynw_offset   = 17,
+       .flags          = SH_MIPI_DSI_SYNC_PULSES_MODE |
+                         SH_MIPI_DSI_HSbyteCLK,
+       .set_dot_clock  = sh_mipi_set_dot_clock,
  };
  
  static struct platform_device mipidsi0_device = {
@@@ -762,22 -790,9 +790,22 @@@ static struct platform_device fsi_devic
        },
  };
  
 +static struct fsi_ak4642_info fsi2_ak4643_info = {
 +      .name           = "AK4643",
 +      .card           = "FSI2A-AK4643",
 +      .cpu_dai        = "fsia-dai",
 +      .codec          = "ak4642-codec.0-0013",
 +      .platform       = "sh_fsi2",
 +      .id             = FSI_PORT_A,
 +};
 +
  static struct platform_device fsi_ak4643_device = {
 -      .name           = "sh_fsi2_a_ak4643",
 +      .name   = "fsi-ak4642-audio",
 +      .dev    = {
 +              .platform_data  = &fsi_info,
 +      },
  };
 +
  static struct sh_mobile_meram_cfg hdmi_meram_cfg = {
        .icb[0] = {
                .marker_icb     = 30,
@@@ -798,7 -813,7 +826,7 @@@ static struct sh_mobile_lcdc_info sh_mo
        .meram_dev = &meram_info,
        .ch[0] = {
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .interface_type = RGB24,
                .clock_divider = 1,
                .flags = LCDC_FLAGS_DWPOL,
@@@ -1185,6 -1200,8 +1213,6 @@@ static struct map_desc ap4evb_io_desc[
  static void __init ap4evb_map_io(void)
  {
        iotable_init(ap4evb_io_desc, ARRAY_SIZE(ap4evb_io_desc));
 -      /* DMA memory at 0xf6000000 - 0xffdfffff */
 -      init_consistent_dma_size(158 << 20);
  
        /* setup early devices and console here as well */
        sh7372_add_early_devices();
index cbc5934ae03f0f0fa26057ee42c7d275ae7500fe,7db6a1712af5656ba7bbf53f368c620c195e0f20..9b42fbd10f8edf2873dbfba0bf6399305c8603db
@@@ -388,7 -388,7 +388,7 @@@ static struct sh_mobile_lcdc_info lcdc_
        .clock_source = LCDC_CLK_BUS,
        .ch[0] = {
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .lcd_cfg = mackerel_lcdc_modes,
                .num_cfg = ARRAY_SIZE(mackerel_lcdc_modes),
                .interface_type         = RGB24,
@@@ -451,7 -451,7 +451,7 @@@ static struct sh_mobile_lcdc_info hdmi_
        .clock_source = LCDC_CLK_EXTERNAL,
        .ch[0] = {
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .interface_type = RGB24,
                .clock_divider = 1,
                .flags = LCDC_FLAGS_DWPOL,
@@@ -990,20 -990,8 +990,20 @@@ static struct platform_device fsi_devic
        },
  };
  
 +static struct fsi_ak4642_info fsi2_ak4643_info = {
 +      .name           = "AK4643",
 +      .card           = "FSI2A-AK4643",
 +      .cpu_dai        = "fsia-dai",
 +      .codec          = "ak4642-codec.0-0013",
 +      .platform       = "sh_fsi2",
 +      .id             = FSI_PORT_A,
 +};
 +
  static struct platform_device fsi_ak4643_device = {
 -      .name           = "sh_fsi2_a_ak4643",
 +      .name   = "fsi-ak4642-audio",
 +      .dev    = {
 +              .platform_data  = &fsi2_ak4643_info,
 +      },
  };
  
  /*
@@@ -1402,6 -1390,8 +1402,6 @@@ static struct map_desc mackerel_io_desc
  static void __init mackerel_map_io(void)
  {
        iotable_init(mackerel_io_desc, ARRAY_SIZE(mackerel_io_desc));
 -      /* DMA memory at 0xf6000000 - 0xffdfffff */
 -      init_consistent_dma_size(158 << 20);
  
        /* setup early devices and console here as well */
        sh7372_add_early_devices();
index e349c22a0d71c93c54e49466549814795c80b77b,1ebab171e4f7cdf0702993065b9485e0eaef4bcd..293456d8dcfddac245745cd27b54d126bda7ce7d
@@@ -411,11 -411,11 +411,11 @@@ static struct clk *fsibckcr_parent[] = 
  };
  
  static struct clk div6_reparent_clks[DIV6_REPARENT_NR] = {
 -      [DIV6_HDMI] = SH_CLK_DIV6_EXT(&pllc1_div2_clk, HDMICKCR, 0,
 +      [DIV6_HDMI] = SH_CLK_DIV6_EXT(HDMICKCR, 0,
                                      hdmi_parent, ARRAY_SIZE(hdmi_parent), 6, 2),
 -      [DIV6_FSIA] = SH_CLK_DIV6_EXT(&pllc1_div2_clk, FSIACKCR, 0,
 +      [DIV6_FSIA] = SH_CLK_DIV6_EXT(FSIACKCR, 0,
                                      fsiackcr_parent, ARRAY_SIZE(fsiackcr_parent), 6, 2),
 -      [DIV6_FSIB] = SH_CLK_DIV6_EXT(&pllc1_div2_clk, FSIBCKCR, 0,
 +      [DIV6_FSIB] = SH_CLK_DIV6_EXT(FSIBCKCR, 0,
                                      fsibckcr_parent, ARRAY_SIZE(fsibckcr_parent), 6, 2),
  };
  
@@@ -612,8 -612,8 +612,8 @@@ static struct clk_lookup lookups[] = 
        CLKDEV_CON_ID("hdmi_clk", &div6_reparent_clks[DIV6_HDMI]),
        CLKDEV_ICK_ID("dsit_clk", "sh-mipi-dsi.0", &div6_clks[DIV6_DSIT]),
        CLKDEV_ICK_ID("dsit_clk", "sh-mipi-dsi.1", &div6_clks[DIV6_DSIT]),
-       CLKDEV_ICK_ID("dsi0p_clk", "sh-mipi-dsi.0", &div6_clks[DIV6_DSI0P]),
-       CLKDEV_ICK_ID("dsi1p_clk", "sh-mipi-dsi.1", &div6_clks[DIV6_DSI1P]),
+       CLKDEV_ICK_ID("dsip_clk", "sh-mipi-dsi.0", &div6_clks[DIV6_DSI0P]),
+       CLKDEV_ICK_ID("dsip_clk", "sh-mipi-dsi.1", &div6_clks[DIV6_DSI1P]),
  
        /* MSTP32 clocks */
        CLKDEV_DEV_ID("i2c-sh_mobile.2", &mstp_clks[MSTP001]), /* IIC2 */
index 34944d01bf1ed99db00a49f4b9845271ddce3a3e,3da30bac518eb4ae264517632e7abd2341a5d809..afbead6a6e1728d51a653f8bca52dcdc01276fbe
@@@ -92,24 -92,6 +92,24 @@@ static struct clk_ops div2_clk_ops = 
        .recalc         = div2_recalc,
  };
  
 +static unsigned long div7_recalc(struct clk *clk)
 +{
 +      return clk->parent->rate / 7;
 +}
 +
 +static struct clk_ops div7_clk_ops = {
 +      .recalc         = div7_recalc,
 +};
 +
 +static unsigned long div13_recalc(struct clk *clk)
 +{
 +      return clk->parent->rate / 13;
 +}
 +
 +static struct clk_ops div13_clk_ops = {
 +      .recalc         = div13_recalc,
 +};
 +
  /* Divide extal1 by two */
  static struct clk extal1_div2_clk = {
        .ops            = &div2_clk_ops,
@@@ -131,12 -113,6 +131,12 @@@ static struct clk main_clk = 
        .ops            = &main_clk_ops,
  };
  
 +/* Divide Main clock by two */
 +static struct clk main_div2_clk = {
 +      .ops            = &div2_clk_ops,
 +      .parent         = &main_clk,
 +};
 +
  /* PLL0, PLL1, PLL2, PLL3 */
  static unsigned long pll_recalc(struct clk *clk)
  {
@@@ -192,29 -168,12 +192,29 @@@ static struct clk pll3_clk = 
        .enable_bit     = 3,
  };
  
 -/* Divide PLL1 by two */
 +/* Divide PLL */
  static struct clk pll1_div2_clk = {
        .ops            = &div2_clk_ops,
        .parent         = &pll1_clk,
  };
  
 +static struct clk pll1_div7_clk = {
 +      .ops            = &div7_clk_ops,
 +      .parent         = &pll1_clk,
 +};
 +
 +static struct clk pll1_div13_clk = {
 +      .ops            = &div13_clk_ops,
 +      .parent         = &pll1_clk,
 +};
 +
 +/* External input clock */
 +struct clk sh73a0_extcki_clk = {
 +};
 +
 +struct clk sh73a0_extalr_clk = {
 +};
 +
  static struct clk *main_clks[] = {
        &r_clk,
        &sh73a0_extal1_clk,
        &extal1_div2_clk,
        &extal2_div2_clk,
        &main_clk,
 +      &main_div2_clk,
        &pll0_clk,
        &pll1_clk,
        &pll2_clk,
        &pll3_clk,
        &pll1_div2_clk,
 +      &pll1_div7_clk,
 +      &pll1_div13_clk,
 +      &sh73a0_extcki_clk,
 +      &sh73a0_extalr_clk,
  };
  
  static void div4_kick(struct clk *clk)
@@@ -285,84 -239,27 +285,84 @@@ enum { DIV6_VCK1, DIV6_VCK2, DIV6_VCK3
        DIV6_DSIT, DIV6_DSI0P, DIV6_DSI1P,
        DIV6_NR };
  
 +static struct clk *vck_parent[8] = {
 +      [0] = &pll1_div2_clk,
 +      [1] = &pll2_clk,
 +      [2] = &sh73a0_extcki_clk,
 +      [3] = &sh73a0_extal2_clk,
 +      [4] = &main_div2_clk,
 +      [5] = &sh73a0_extalr_clk,
 +      [6] = &main_clk,
 +};
 +
 +static struct clk *pll_parent[4] = {
 +      [0] = &pll1_div2_clk,
 +      [1] = &pll2_clk,
 +      [2] = &pll1_div13_clk,
 +};
 +
 +static struct clk *hsi_parent[4] = {
 +      [0] = &pll1_div2_clk,
 +      [1] = &pll2_clk,
 +      [2] = &pll1_div7_clk,
 +};
 +
 +static struct clk *pll_extal2_parent[] = {
 +      [0] = &pll1_div2_clk,
 +      [1] = &pll2_clk,
 +      [2] = &sh73a0_extal2_clk,
 +      [3] = &sh73a0_extal2_clk,
 +};
 +
 +static struct clk *dsi_parent[8] = {
 +      [0] = &pll1_div2_clk,
 +      [1] = &pll2_clk,
 +      [2] = &main_clk,
 +      [3] = &sh73a0_extal2_clk,
 +      [4] = &sh73a0_extcki_clk,
 +};
 +
  static struct clk div6_clks[DIV6_NR] = {
 -      [DIV6_VCK1] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR1, 0),
 -      [DIV6_VCK2] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR2, 0),
 -      [DIV6_VCK3] = SH_CLK_DIV6(&pll1_div2_clk, VCLKCR3, 0),
 -      [DIV6_ZB1] = SH_CLK_DIV6(&pll1_div2_clk, ZBCKCR, 0),
 -      [DIV6_FLCTL] = SH_CLK_DIV6(&pll1_div2_clk, FLCKCR, 0),
 -      [DIV6_SDHI0] = SH_CLK_DIV6(&pll1_div2_clk, SD0CKCR, 0),
 -      [DIV6_SDHI1] = SH_CLK_DIV6(&pll1_div2_clk, SD1CKCR, 0),
 -      [DIV6_SDHI2] = SH_CLK_DIV6(&pll1_div2_clk, SD2CKCR, 0),
 -      [DIV6_FSIA] = SH_CLK_DIV6(&pll1_div2_clk, FSIACKCR, 0),
 -      [DIV6_FSIB] = SH_CLK_DIV6(&pll1_div2_clk, FSIBCKCR, 0),
 -      [DIV6_SUB] = SH_CLK_DIV6(&sh73a0_extal2_clk, SUBCKCR, 0),
 -      [DIV6_SPUA] = SH_CLK_DIV6(&pll1_div2_clk, SPUACKCR, 0),
 -      [DIV6_SPUV] = SH_CLK_DIV6(&pll1_div2_clk, SPUVCKCR, 0),
 -      [DIV6_MSU] = SH_CLK_DIV6(&pll1_div2_clk, MSUCKCR, 0),
 -      [DIV6_HSI] = SH_CLK_DIV6(&pll1_div2_clk, HSICKCR, 0),
 -      [DIV6_MFG1] = SH_CLK_DIV6(&pll1_div2_clk, MFCK1CR, 0),
 -      [DIV6_MFG2] = SH_CLK_DIV6(&pll1_div2_clk, MFCK2CR, 0),
 -      [DIV6_DSIT] = SH_CLK_DIV6(&pll1_div2_clk, DSITCKCR, 0),
 -      [DIV6_DSI0P] = SH_CLK_DIV6(&pll1_div2_clk, DSI0PCKCR, 0),
 -      [DIV6_DSI1P] = SH_CLK_DIV6(&pll1_div2_clk, DSI1PCKCR, 0),
 +      [DIV6_VCK1] = SH_CLK_DIV6_EXT(VCLKCR1, 0,
 +                      vck_parent, ARRAY_SIZE(vck_parent), 12, 3),
 +      [DIV6_VCK2] = SH_CLK_DIV6_EXT(VCLKCR2, 0,
 +                      vck_parent, ARRAY_SIZE(vck_parent), 12, 3),
 +      [DIV6_VCK3] = SH_CLK_DIV6_EXT(VCLKCR3, 0,
 +                      vck_parent, ARRAY_SIZE(vck_parent), 12, 3),
 +      [DIV6_ZB1] = SH_CLK_DIV6_EXT(ZBCKCR, CLK_ENABLE_ON_INIT,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 7, 1),
 +      [DIV6_FLCTL] = SH_CLK_DIV6_EXT(FLCKCR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 7, 1),
 +      [DIV6_SDHI0] = SH_CLK_DIV6_EXT(SD0CKCR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 6, 2),
 +      [DIV6_SDHI1] = SH_CLK_DIV6_EXT(SD1CKCR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 6, 2),
 +      [DIV6_SDHI2] = SH_CLK_DIV6_EXT(SD2CKCR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 6, 2),
 +      [DIV6_FSIA] = SH_CLK_DIV6_EXT(FSIACKCR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 6, 1),
 +      [DIV6_FSIB] = SH_CLK_DIV6_EXT(FSIBCKCR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 6, 1),
 +      [DIV6_SUB] = SH_CLK_DIV6_EXT(SUBCKCR, 0,
 +                      pll_extal2_parent, ARRAY_SIZE(pll_extal2_parent), 6, 2),
 +      [DIV6_SPUA] = SH_CLK_DIV6_EXT(SPUACKCR, 0,
 +                      pll_extal2_parent, ARRAY_SIZE(pll_extal2_parent), 6, 2),
 +      [DIV6_SPUV] = SH_CLK_DIV6_EXT(SPUVCKCR, 0,
 +                      pll_extal2_parent, ARRAY_SIZE(pll_extal2_parent), 6, 2),
 +      [DIV6_MSU] = SH_CLK_DIV6_EXT(MSUCKCR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 7, 1),
 +      [DIV6_HSI] = SH_CLK_DIV6_EXT(HSICKCR, 0,
 +                      hsi_parent, ARRAY_SIZE(hsi_parent), 6, 2),
 +      [DIV6_MFG1] = SH_CLK_DIV6_EXT(MFCK1CR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 7, 1),
 +      [DIV6_MFG2] = SH_CLK_DIV6_EXT(MFCK2CR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 7, 1),
 +      [DIV6_DSIT] = SH_CLK_DIV6_EXT(DSITCKCR, 0,
 +                      pll_parent, ARRAY_SIZE(pll_parent), 7, 1),
 +      [DIV6_DSI0P] = SH_CLK_DIV6_EXT(DSI0PCKCR, 0,
 +                      dsi_parent, ARRAY_SIZE(dsi_parent), 12, 3),
 +      [DIV6_DSI1P] = SH_CLK_DIV6_EXT(DSI1PCKCR, 0,
 +                      dsi_parent, ARRAY_SIZE(dsi_parent), 12, 3),
  };
  
  enum { MSTP001,
        MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
        MSTP331, MSTP329, MSTP325, MSTP323, MSTP318,
        MSTP314, MSTP313, MSTP312, MSTP311,
 +      MSTP303, MSTP302, MSTP301, MSTP300,
        MSTP411, MSTP410, MSTP403,
        MSTP_NR };
  
@@@ -405,10 -301,6 +405,10 @@@ static struct clk mstp_clks[MSTP_NR] = 
        [MSTP313] = MSTP(&div6_clks[DIV6_SDHI1], SMSTPCR3, 13, 0), /* SDHI1 */
        [MSTP312] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMCIF0 */
        [MSTP311] = MSTP(&div6_clks[DIV6_SDHI2], SMSTPCR3, 11, 0), /* SDHI2 */
 +      [MSTP303] = MSTP(&main_div2_clk, SMSTPCR3, 3, 0), /* TPU1 */
 +      [MSTP302] = MSTP(&main_div2_clk, SMSTPCR3, 2, 0), /* TPU2 */
 +      [MSTP301] = MSTP(&main_div2_clk, SMSTPCR3, 1, 0), /* TPU3 */
 +      [MSTP300] = MSTP(&main_div2_clk, SMSTPCR3, 0, 0), /* TPU4 */
        [MSTP411] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 11, 0), /* IIC3 */
        [MSTP410] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 10, 0), /* IIC4 */
        [MSTP403] = MSTP(&r_clk, SMSTPCR4, 3, 0), /* KEYSC */
@@@ -427,8 -319,8 +427,8 @@@ static struct clk_lookup lookups[] = 
        CLKDEV_CON_ID("sdhi2_clk", &div6_clks[DIV6_SDHI2]),
        CLKDEV_ICK_ID("dsit_clk", "sh-mipi-dsi.0", &div6_clks[DIV6_DSIT]),
        CLKDEV_ICK_ID("dsit_clk", "sh-mipi-dsi.1", &div6_clks[DIV6_DSIT]),
-       CLKDEV_ICK_ID("dsi0p_clk", "sh-mipi-dsi.0", &div6_clks[DIV6_DSI0P]),
-       CLKDEV_ICK_ID("dsi1p_clk", "sh-mipi-dsi.1", &div6_clks[DIV6_DSI1P]),
+       CLKDEV_ICK_ID("dsip_clk", "sh-mipi-dsi.0", &div6_clks[DIV6_DSI0P]),
+       CLKDEV_ICK_ID("dsip_clk", "sh-mipi-dsi.1", &div6_clks[DIV6_DSI1P]),
  
        /* MSTP32 clocks */
        CLKDEV_DEV_ID("i2c-sh_mobile.2", &mstp_clks[MSTP001]), /* I2C2 */
        CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */
        CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMCIF0 */
        CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP311]), /* SDHI2 */
 +      CLKDEV_DEV_ID("leds-renesas-tpu.12", &mstp_clks[MSTP303]), /* TPU1 */
 +      CLKDEV_DEV_ID("leds-renesas-tpu.21", &mstp_clks[MSTP302]), /* TPU2 */
 +      CLKDEV_DEV_ID("leds-renesas-tpu.30", &mstp_clks[MSTP301]), /* TPU3 */
 +      CLKDEV_DEV_ID("leds-renesas-tpu.41", &mstp_clks[MSTP300]), /* TPU4 */
        CLKDEV_DEV_ID("i2c-sh_mobile.3", &mstp_clks[MSTP411]), /* I2C3 */
        CLKDEV_DEV_ID("i2c-sh_mobile.4", &mstp_clks[MSTP410]), /* I2C4 */
        CLKDEV_DEV_ID("sh_keysc.0", &mstp_clks[MSTP403]), /* KEYSC */
@@@ -499,7 -387,7 +499,7 @@@ void __init sh73a0_clock_init(void
                ret = sh_clk_div4_register(div4_clks, DIV4_NR, &div4_table);
  
        if (!ret)
 -              ret = sh_clk_div6_register(div6_clks, DIV6_NR);
 +              ret = sh_clk_div6_reparent_register(div6_clks, DIV6_NR);
  
        if (!ret)
                ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR);
index 74d49c01783b26912f7e611b8d7f483020d27009,7977911e72cf78cecc76bc25f6343a7c63f4a95c..6418e95c2b6b87f3350cc735e20d7e3bcfab484c
@@@ -207,7 -207,7 +207,7 @@@ static struct sh_mobile_lcdc_info lcdc_
        .clock_source = LCDC_CLK_EXTERNAL,
        .ch[0] = {
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .interface_type = RGB18,
                .clock_divider = 1,
                .lcd_cfg = ap325rxa_lcdc_modes,
@@@ -249,6 -249,9 +249,6 @@@ static struct platform_device lcdc_devi
        .dev            = {
                .platform_data  = &lcdc_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_LCDC,
 -      },
  };
  
  static void camera_power(int val)
@@@ -421,6 -424,9 +421,6 @@@ static struct platform_device ceu_devic
        .dev            = {
                .platform_data  = &sh_mobile_ceu_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_CEU,
 -      },
  };
  
  static struct resource sdhi0_cn3_resources[] = {
@@@ -448,6 -454,9 +448,6 @@@ static struct platform_device sdhi0_cn3
        .dev = {
                .platform_data = &sdhi0_cn3_data,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SDHI0,
 -      },
  };
  
  static struct resource sdhi1_cn7_resources[] = {
@@@ -475,6 -484,9 +475,6 @@@ static struct platform_device sdhi1_cn7
        .dev = {
                .platform_data = &sdhi1_cn7_data,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SDHI1,
 -      },
  };
  
  static struct i2c_board_info __initdata ap325rxa_i2c_devices[] = {
index 9a19fb07276cba9304c3a34fed5febd8414fd378,1d4a706ed6ef94732ff1fe68eacdf961f6280174..033ef2ba621f008c5c92ac0dace7808a5b21035b
@@@ -156,6 -156,9 +156,6 @@@ static struct platform_device sh_eth_de
        },
        .num_resources = ARRAY_SIZE(sh_eth_resources),
        .resource = sh_eth_resources,
 -      .archdata = {
 -              .hwblk_id = HWBLK_ETHER,
 -      },
  };
  
  /* USB0 host */
@@@ -275,6 -278,9 +275,6 @@@ static struct platform_device usbhs_dev
        },
        .num_resources  = ARRAY_SIZE(usbhs_resources),
        .resource       = usbhs_resources,
 -      .archdata = {
 -              .hwblk_id = HWBLK_USB1,
 -      },
  };
  
  /* LCDC */
@@@ -324,7 -330,7 +324,7 @@@ static struct sh_mobile_lcdc_info lcdc_
        .ch[0] = {
                .interface_type = RGB18,
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .lcd_size_cfg = { /* 7.0 inch */
                        .width = 152,
                        .height = 91,
@@@ -360,6 -366,9 +360,6 @@@ static struct platform_device lcdc_devi
        .dev            = {
                .platform_data  = &lcdc_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_LCDC,
 -      },
  };
  
  /* CEU0 */
@@@ -391,6 -400,9 +391,6 @@@ static struct platform_device ceu0_devi
        .dev    = {
                .platform_data  = &sh_mobile_ceu0_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_CEU0,
 -      },
  };
  
  /* CEU1 */
@@@ -422,6 -434,9 +422,6 @@@ static struct platform_device ceu1_devi
        .dev    = {
                .platform_data  = &sh_mobile_ceu1_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_CEU1,
 -      },
  };
  
  /* I2C device */
@@@ -476,6 -491,9 +476,6 @@@ static struct platform_device keysc_dev
        .dev    = {
                .platform_data  = &keysc_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_KEYSC,
 -      },
  };
  
  /* TouchScreen */
@@@ -550,6 -568,9 +550,6 @@@ static struct platform_device sdhi0_dev
        .dev    = {
                .platform_data  = &sdhi0_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SDHI0,
 -      },
  };
  
  #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE)
@@@ -587,6 -608,9 +587,6 @@@ static struct platform_device sdhi1_dev
        .dev    = {
                .platform_data  = &sdhi1_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SDHI1,
 -      },
  };
  #endif /* CONFIG_MMC_SH_MMCIF */
  
@@@ -652,6 -676,9 +652,6 @@@ static struct platform_device msiof0_de
        },
        .num_resources  = ARRAY_SIZE(msiof0_resources),
        .resource       = msiof0_resources,
 -      .archdata = {
 -              .hwblk_id = HWBLK_MSIOF0,
 -      },
  };
  
  #endif
@@@ -791,6 -818,9 +791,6 @@@ static struct platform_device fsi_devic
        .dev    = {
                .platform_data  = &fsi_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SPU, /* FSI needs SPU hwblk */
 -      },
  };
  
  /* IrDA */
@@@ -852,6 -882,9 +852,6 @@@ static struct platform_device vou_devic
        .dev            = {
                .platform_data  = &sh_vou_pdata,
        },
 -      .archdata       = {
 -              .hwblk_id       = HWBLK_VOU,
 -      },
  };
  
  #if defined(CONFIG_MMC_SH_MMCIF) || defined(CONFIG_MMC_SH_MMCIF_MODULE)
@@@ -903,6 -936,9 +903,6 @@@ static struct platform_device sh_mmcif_
        },
        .num_resources  = ARRAY_SIZE(sh_mmcif_resources),
        .resource       = sh_mmcif_resources,
 -      .archdata = {
 -              .hwblk_id = HWBLK_MMC,
 -      },
  };
  #endif
  
index 5c3c713668480815b63cc24bc4896fc2689bf22f,208c9b0402637010cf1fdc7c0d84f31494d9b955..2a18b06abdafcd8220cfc99c03fac52e98ca2efd
@@@ -122,6 -122,9 +122,6 @@@ static struct platform_device kfr2r09_s
        .dev    = {
                .platform_data  = &kfr2r09_sh_keysc_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_KEYSC,
 -      },
  };
  
  static const struct fb_videomode kfr2r09_lcdc_modes[] = {
@@@ -143,7 -146,7 +143,7 @@@ static struct sh_mobile_lcdc_info kfr2r
        .clock_source = LCDC_CLK_BUS,
        .ch[0] = {
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .interface_type = SYS18,
                .clock_divider = 6,
                .flags = LCDC_FLAGS_DWPOL,
@@@ -188,6 -191,9 +188,6 @@@ static struct platform_device kfr2r09_s
        .dev    = {
                .platform_data  = &kfr2r09_sh_lcdc_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_LCDC,
 -      },
  };
  
  static struct r8a66597_platdata kfr2r09_usb0_gadget_data = {
@@@ -248,6 -254,9 +248,6 @@@ static struct platform_device kfr2r09_c
        .dev    = {
                .platform_data  = &sh_mobile_ceu_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_CEU0,
 -      },
  };
  
  static struct i2c_board_info kfr2r09_i2c_camera = {
@@@ -368,6 -377,9 +368,6 @@@ static struct platform_device kfr2r09_s
        .dev = {
                .platform_data  = &sh7724_sdhi0_data,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SDHI0,
 -      },
  };
  
  static struct platform_device *kfr2r09_devices[] __initdata = {
index f8f9377d5684ecfb9a817a35eab371d78400bb7e,ccf61fb998531b10203b46e7b3f10ddcd9ebd679..68c3d6f4289665f5c4b7e38265d7f1ce5db6c81b
@@@ -99,6 -99,9 +99,6 @@@ static struct platform_device sh_keysc_
        .dev    = {
                .platform_data  = &sh_keysc_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_KEYSC,
 -      },
  };
  
  static struct mtd_partition migor_nor_flash_partitions[] =
@@@ -241,7 -244,7 +241,7 @@@ static struct sh_mobile_lcdc_info sh_mo
        .clock_source = LCDC_CLK_BUS,
        .ch[0] = {
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .interface_type = RGB16,
                .clock_divider = 2,
                .lcd_cfg = migor_lcd_modes,
        .clock_source = LCDC_CLK_PERIPHERAL,
        .ch[0] = {
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .interface_type = SYS16A,
                .clock_divider = 10,
                .lcd_cfg = migor_lcd_modes,
@@@ -297,6 -300,9 +297,6 @@@ static struct platform_device migor_lcd
        .dev    = {
                .platform_data  = &sh_mobile_lcdc_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_LCDC,
 -      },
  };
  
  static struct clk *camera_clk;
@@@ -384,6 -390,9 +384,6 @@@ static struct platform_device migor_ceu
        .dev    = {
                .platform_data  = &sh_mobile_ceu_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_CEU,
 -      },
  };
  
  static struct resource sdhi_cn9_resources[] = {
@@@ -412,6 -421,9 +412,6 @@@ static struct platform_device sdhi_cn9_
        .dev = {
                .platform_data  = &sh7724_sdhi_data,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SDHI,
 -      },
  };
  
  static struct i2c_board_info migor_i2c_devices[] = {
index 2585733e9bce205a4f1a20638af38c88921e4e4a,3aab70cd39e354705b84be9e00e4e6081f54e657..036fe1adaef17b4367259a71d59e3ba642f9f64a
@@@ -179,7 -179,7 +179,7 @@@ static struct sh_mobile_lcdc_info lcdc_
        .clock_source = LCDC_CLK_EXTERNAL,
        .ch[0] = {
                .chan = LCDC_CHAN_MAINLCD,
-               .bpp = 16,
+               .fourcc = V4L2_PIX_FMT_RGB565,
                .clock_divider = 1,
                .lcd_size_cfg = { /* 7.0 inch */
                        .width = 152,
@@@ -210,6 -210,9 +210,6 @@@ static struct platform_device lcdc_devi
        .dev            = {
                .platform_data  = &lcdc_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_LCDC,
 -      },
  };
  
  /* CEU0 */
@@@ -241,6 -244,9 +241,6 @@@ static struct platform_device ceu0_devi
        .dev    = {
                .platform_data  = &sh_mobile_ceu0_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_CEU0,
 -      },
  };
  
  /* CEU1 */
@@@ -272,6 -278,9 +272,6 @@@ static struct platform_device ceu1_devi
        .dev    = {
                .platform_data  = &sh_mobile_ceu1_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_CEU1,
 -      },
  };
  
  /* FSI */
@@@ -301,22 -310,13 +301,22 @@@ static struct platform_device fsi_devic
        .dev    = {
                .platform_data  = &fsi_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SPU, /* FSI needs SPU hwblk */
 -      },
 +};
 +
 +static struct fsi_ak4642_info fsi_ak4642_info = {
 +      .name           = "AK4642",
 +      .card           = "FSIA-AK4642",
 +      .cpu_dai        = "fsia-dai",
 +      .codec          = "ak4642-codec.0-0012",
 +      .platform       = "sh_fsi.0",
 +      .id             = FSI_PORT_A,
  };
  
  static struct platform_device fsi_ak4642_device = {
 -      .name           = "sh_fsi_a_ak4642",
 +      .name   = "fsi-ak4642-audio",
 +      .dev    = {
 +              .platform_data  = &fsi_ak4642_info,
 +      },
  };
  
  /* KEYSC in SoC (Needs SW33-2 set to ON) */
@@@ -355,6 -355,9 +355,6 @@@ static struct platform_device keysc_dev
        .dev    = {
                .platform_data  = &keysc_info,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_KEYSC,
 -      },
  };
  
  /* SH Eth */
@@@ -383,6 -386,9 +383,6 @@@ static struct platform_device sh_eth_de
        },
        .num_resources = ARRAY_SIZE(sh_eth_resources),
        .resource = sh_eth_resources,
 -      .archdata = {
 -              .hwblk_id = HWBLK_ETHER,
 -      },
  };
  
  static struct r8a66597_platdata sh7724_usb0_host_data = {
@@@ -412,6 -418,9 +412,6 @@@ static struct platform_device sh7724_us
        },
        .num_resources  = ARRAY_SIZE(sh7724_usb0_host_resources),
        .resource       = sh7724_usb0_host_resources,
 -      .archdata = {
 -              .hwblk_id = HWBLK_USB0,
 -      },
  };
  
  static struct r8a66597_platdata sh7724_usb1_gadget_data = {
@@@ -470,6 -479,9 +470,6 @@@ static struct platform_device sdhi0_cn7
        .dev = {
                .platform_data  = &sh7724_sdhi0_data,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SDHI0,
 -      },
  };
  
  static struct resource sdhi1_cn8_resources[] = {
@@@ -499,6 -511,9 +499,6 @@@ static struct platform_device sdhi1_cn8
        .dev = {
                .platform_data  = &sh7724_sdhi1_data,
        },
 -      .archdata = {
 -              .hwblk_id = HWBLK_SDHI1,
 -      },
  };
  
  /* IrDA */
@@@ -561,6 -576,9 +561,6 @@@ static struct platform_device vou_devic
        .dev            = {
                .platform_data  = &sh_vou_pdata,
        },
 -      .archdata       = {
 -              .hwblk_id       = HWBLK_VOU,
 -      },
  };
  
  static struct platform_device *ms7724se_devices[] __initdata = {
index 0de598bf66bb14dc563d4d15dd8a15ad3aecd50b,27c19fe786864445ad5cd93f9b75d3c4357adb97..a378c2ce1273bcf9c32391f650003f108f6b5c80
@@@ -38,7 -38,6 +38,7 @@@
  #include <linux/irq.h>
  #include <linux/videodev2.h>
  #include <linux/dma-mapping.h>
 +#include <linux/slab.h>
  
  #include <media/videobuf-dma-contig.h>
  #include <media/v4l2-device.h>
@@@ -70,9 -69,9 +70,9 @@@ static u32 video1_numbuffers = 3
  static u32 video2_numbuffers = 3;
  static u32 video1_bufsize = OMAP_VOUT_MAX_BUF_SIZE;
  static u32 video2_bufsize = OMAP_VOUT_MAX_BUF_SIZE;
 -static u32 vid1_static_vrfb_alloc;
 -static u32 vid2_static_vrfb_alloc;
 -static int debug;
 +static bool vid1_static_vrfb_alloc;
 +static bool vid2_static_vrfb_alloc;
 +static bool debug;
  
  /* Module parameters */
  module_param(video1_numbuffers, uint, S_IRUGO);
@@@ -424,7 -423,7 +424,7 @@@ static int omapvid_setup_overlay(struc
                "%s enable=%d addr=%x width=%d\n height=%d color_mode=%d\n"
                "rotation=%d mirror=%d posx=%d posy=%d out_width = %d \n"
                "out_height=%d rotation_type=%d screen_width=%d\n",
-               __func__, info.enabled, info.paddr, info.width, info.height,
+               __func__, ovl->is_enabled(ovl), info.paddr, info.width, info.height,
                info.color_mode, info.rotation, info.mirror, info.pos_x,
                info.pos_y, info.out_width, info.out_height, info.rotation_type,
                info.screen_width);
@@@ -943,12 -942,8 +943,8 @@@ static int omap_vout_release(struct fil
        /* Disable all the overlay managers connected with this interface */
        for (i = 0; i < ovid->num_overlays; i++) {
                struct omap_overlay *ovl = ovid->overlays[i];
-               if (ovl->manager && ovl->manager->device) {
-                       struct omap_overlay_info info;
-                       ovl->get_overlay_info(ovl, &info);
-                       info.enabled = 0;
-                       ovl->set_overlay_info(ovl, &info);
-               }
+               if (ovl->manager && ovl->manager->device)
+                       ovl->disable(ovl);
        }
        /* Turn off the pipeline */
        ret = omapvid_apply_changes(vout);
@@@ -1668,7 -1663,6 +1664,6 @@@ static int vidioc_streamon(struct file 
                if (ovl->manager && ovl->manager->device) {
                        struct omap_overlay_info info;
                        ovl->get_overlay_info(ovl, &info);
-                       info.enabled = 1;
                        info.paddr = addr;
                        if (ovl->set_overlay_info(ovl, &info)) {
                                ret = -EINVAL;
        if (ret)
                v4l2_err(&vout->vid_dev->v4l2_dev, "failed to change mode\n");
  
+       for (j = 0; j < ovid->num_overlays; j++) {
+               struct omap_overlay *ovl = ovid->overlays[j];
+               if (ovl->manager && ovl->manager->device) {
+                       ret = ovl->enable(ovl);
+                       if (ret)
+                               goto streamon_err1;
+               }
+       }
        ret = 0;
  
  streamon_err1:
@@@ -1716,16 -1720,8 +1721,8 @@@ static int vidioc_streamoff(struct fil
        for (j = 0; j < ovid->num_overlays; j++) {
                struct omap_overlay *ovl = ovid->overlays[j];
  
-               if (ovl->manager && ovl->manager->device) {
-                       struct omap_overlay_info info;
-                       ovl->get_overlay_info(ovl, &info);
-                       info.enabled = 0;
-                       ret = ovl->set_overlay_info(ovl, &info);
-                       if (ret)
-                               v4l2_err(&vout->vid_dev->v4l2_dev,
-                               "failed to update overlay info in streamoff\n");
-               }
+               if (ovl->manager && ovl->manager->device)
+                       ovl->disable(ovl);
        }
  
        /* Turn of the pipeline */
@@@ -2170,14 -2166,6 +2167,14 @@@ static int __init omap_vout_probe(struc
        vid_dev->num_displays = 0;
        for_each_dss_dev(dssdev) {
                omap_dss_get_device(dssdev);
 +
 +              if (!dssdev->driver) {
 +                      dev_warn(&pdev->dev, "no driver for display: %s\n",
 +                                      dssdev->name);
 +                      omap_dss_put_device(dssdev);
 +                      continue;
 +              }
 +
                vid_dev->displays[vid_dev->num_displays++] = dssdev;
        }
  
diff --combined drivers/video/Kconfig
index acd4ba555e3a5df1570d57eed24e18d2303a098f,dcf0a828f66ebd684571143457a6bd4f04fe1a5c..6ca0c407c1447151f1d9b64bfb6c9445acd61b72
@@@ -1763,16 -1763,16 +1763,16 @@@ config FB_AU110
          au1100fb:panel=<name>.
  
  config FB_AU1200
 -      bool "Au1200 LCD Driver"
 +      bool "Au1200/Au1300 LCD Driver"
        depends on (FB = y) && MIPS_ALCHEMY
        select FB_SYS_FILLRECT
        select FB_SYS_COPYAREA
        select FB_SYS_IMAGEBLIT
        select FB_SYS_FOPS
        help
 -        This is the framebuffer driver for the AMD Au1200 SOC.  It can drive
 -        various panels and CRTs by passing in kernel cmd line option
 -        au1200fb:panel=<name>.
 +        This is the framebuffer driver for the Au1200/Au1300 SOCs.
 +        It can drive various panels and CRTs by passing in kernel cmd line
 +        option au1200fb:panel=<name>.
  
  config FB_VT8500
        bool "VT8500 LCD Driver"
@@@ -2413,7 -2413,6 +2413,6 @@@ source "drivers/video/omap/Kconfig
  source "drivers/video/omap2/Kconfig"
  
  source "drivers/video/backlight/Kconfig"
- source "drivers/video/display/Kconfig"
  
  if VT
        source "drivers/video/console/Kconfig"
diff --combined drivers/video/cirrusfb.c
index 6fb499e7678f4e989df30484ee1fba85b70c0502,6ea505c6f0c89c3986f4184002f91b054c691d20..738c8ce7d132d1aaa88c3c625f5a6bc51aa04d72
@@@ -280,52 -280,74 +280,74 @@@ MODULE_DEVICE_TABLE(pci, cirrusfb_pci_t
  #endif /* CONFIG_PCI */
  
  #ifdef CONFIG_ZORRO
- static const struct zorro_device_id cirrusfb_zorro_table[] = {
+ struct zorrocl {
+       enum cirrus_board type; /* Board type */
+       u32 regoffset;          /* Offset of registers in first Zorro device */
+       u32 ramsize;            /* Size of video RAM in first Zorro device */
+                               /* If zero, use autoprobe on RAM device */
+       u32 ramoffset;          /* Offset of video RAM in first Zorro device */
+       zorro_id ramid;         /* Zorro ID of RAM device */
+       zorro_id ramid2;        /* Zorro ID of optional second RAM device */
+ };
+ static const struct zorrocl zcl_sd64 __devinitconst = {
+       .type           = BT_SD64,
+       .ramid          = ZORRO_PROD_HELFRICH_SD64_RAM,
+ };
+ static const struct zorrocl zcl_piccolo __devinitconst = {
+       .type           = BT_PICCOLO,
+       .ramid          = ZORRO_PROD_HELFRICH_PICCOLO_RAM,
+ };
+ static const struct zorrocl zcl_picasso __devinitconst = {
+       .type           = BT_PICASSO,
+       .ramid          = ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_RAM,
+ };
+ static const struct zorrocl zcl_spectrum __devinitconst = {
+       .type           = BT_SPECTRUM,
+       .ramid          = ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_RAM,
+ };
+ static const struct zorrocl zcl_picasso4_z3 __devinitconst = {
+       .type           = BT_PICASSO4,
+       .regoffset      = 0x00600000,
+       .ramsize        = 4 * MB_,
+       .ramoffset      = 0x01000000,   /* 0x02000000 for 64 MiB boards */
+ };
+ static const struct zorrocl zcl_picasso4_z2 __devinitconst = {
+       .type           = BT_PICASSO4,
+       .regoffset      = 0x10000,
+       .ramid          = ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_RAM1,
+       .ramid2         = ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_RAM2,
+ };
+ static const struct zorro_device_id cirrusfb_zorro_table[] __devinitconst = {
        {
-               .id             = ZORRO_PROD_HELFRICH_SD64_RAM,
-               .driver_data    = BT_SD64,
+               .id             = ZORRO_PROD_HELFRICH_SD64_REG,
+               .driver_data    = (unsigned long)&zcl_sd64,
        }, {
-               .id             = ZORRO_PROD_HELFRICH_PICCOLO_RAM,
-               .driver_data    = BT_PICCOLO,
+               .id             = ZORRO_PROD_HELFRICH_PICCOLO_REG,
+               .driver_data    = (unsigned long)&zcl_piccolo,
        }, {
-               .id     = ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_RAM,
-               .driver_data    = BT_PICASSO,
+               .id     = ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_REG,
+               .driver_data    = (unsigned long)&zcl_picasso,
        }, {
-               .id             = ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_RAM,
-               .driver_data    = BT_SPECTRUM,
+               .id             = ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_REG,
+               .driver_data    = (unsigned long)&zcl_spectrum,
        }, {
                .id             = ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z3,
-               .driver_data    = BT_PICASSO4,
+               .driver_data    = (unsigned long)&zcl_picasso4_z3,
+       }, {
+               .id             = ZORRO_PROD_VILLAGE_TRONIC_PICASSO_IV_Z2_REG,
+               .driver_data    = (unsigned long)&zcl_picasso4_z2,
        },
        { 0 }
  };
  MODULE_DEVICE_TABLE(zorro, cirrusfb_zorro_table);
- static const struct {
-       zorro_id id2;
-       unsigned long size;
- } cirrusfb_zorro_table2[] = {
-       [BT_SD64] = {
-               .id2    = ZORRO_PROD_HELFRICH_SD64_REG,
-               .size   = 0x400000
-       },
-       [BT_PICCOLO] = {
-               .id2    = ZORRO_PROD_HELFRICH_PICCOLO_REG,
-               .size   = 0x200000
-       },
-       [BT_PICASSO] = {
-               .id2    = ZORRO_PROD_VILLAGE_TRONIC_PICASSO_II_II_PLUS_REG,
-               .size   = 0x200000
-       },
-       [BT_SPECTRUM] = {
-               .id2    = ZORRO_PROD_GVP_EGS_28_24_SPECTRUM_REG,
-               .size   = 0x200000
-       },
-       [BT_PICASSO4] = {
-               .id2    = 0,
-               .size   = 0x400000
-       }
- };
  #endif /* CONFIG_ZORRO */
  
  #ifdef CIRRUSFB_DEBUG
@@@ -350,7 -372,7 +372,7 @@@ struct cirrusfb_info 
        void (*unmap)(struct fb_info *info);
  };
  
 -static int noaccel __devinitdata;
 +static bool noaccel __devinitdata;
  static char *mode_option __devinitdata = "640x480@60";
  
  /****************************************************************************/
@@@ -1956,16 -1978,12 +1978,12 @@@ static void cirrusfb_zorro_unmap(struc
        struct cirrusfb_info *cinfo = info->par;
        struct zorro_dev *zdev = to_zorro_dev(info->device);
  
-       zorro_release_device(zdev);
-       if (cinfo->btype == BT_PICASSO4) {
-               cinfo->regbase -= 0x600000;
-               iounmap((void *)cinfo->regbase);
+       if (info->fix.smem_start > 16 * MB_)
                iounmap(info->screen_base);
-       } else {
-               if (zorro_resource_start(zdev) > 0x01000000)
-                       iounmap(info->screen_base);
-       }
+       if (info->fix.mmio_start > 16 * MB_)
+               iounmap(cinfo->regbase);
+       zorro_release_device(zdev);
  }
  #endif /* CONFIG_ZORRO */
  
@@@ -2222,115 -2240,116 +2240,116 @@@ static struct pci_driver cirrusfb_pci_d
  static int __devinit cirrusfb_zorro_register(struct zorro_dev *z,
                                             const struct zorro_device_id *ent)
  {
-       struct cirrusfb_info *cinfo;
        struct fb_info *info;
+       int error;
+       const struct zorrocl *zcl;
        enum cirrus_board btype;
-       struct zorro_dev *z2 = NULL;
-       unsigned long board_addr, board_size, size;
-       int ret;
-       btype = ent->driver_data;
-       if (cirrusfb_zorro_table2[btype].id2)
-               z2 = zorro_find_device(cirrusfb_zorro_table2[btype].id2, NULL);
-       size = cirrusfb_zorro_table2[btype].size;
+       unsigned long regbase, ramsize, rambase;
+       struct cirrusfb_info *cinfo;
  
        info = framebuffer_alloc(sizeof(struct cirrusfb_info), &z->dev);
        if (!info) {
                printk(KERN_ERR "cirrusfb: could not allocate memory\n");
-               ret = -ENOMEM;
-               goto err_out;
+               return -ENOMEM;
        }
  
-       dev_info(info->device, "%s board detected\n",
-                cirrusfb_board_info[btype].name);
-       cinfo = info->par;
-       cinfo->btype = btype;
-       assert(z);
-       assert(btype != BT_NONE);
+       zcl = (const struct zorrocl *)ent->driver_data;
+       btype = zcl->type;
+       regbase = zorro_resource_start(z) + zcl->regoffset;
+       ramsize = zcl->ramsize;
+       if (ramsize) {
+               rambase = zorro_resource_start(z) + zcl->ramoffset;
+               if (zorro_resource_len(z) == 64 * MB_) {
+                       /* Quirk for 64 MiB Picasso IV */
+                       rambase += zcl->ramoffset;
+               }
+       } else {
+               struct zorro_dev *ram = zorro_find_device(zcl->ramid, NULL);
+               if (!ram || !zorro_resource_len(ram)) {
+                       dev_err(info->device, "No video RAM found\n");
+                       error = -ENODEV;
+                       goto err_release_fb;
+               }
+               rambase = zorro_resource_start(ram);
+               ramsize = zorro_resource_len(ram);
+               if (zcl->ramid2 &&
+                   (ram = zorro_find_device(zcl->ramid2, NULL))) {
+                       if (zorro_resource_start(ram) != rambase + ramsize) {
+                               dev_warn(info->device,
+                                        "Skipping non-contiguous RAM at %pR\n",
+                                        &ram->resource);
+                       } else {
+                               ramsize += zorro_resource_len(ram);
+                       }
+               }
+       }
  
-       board_addr = zorro_resource_start(z);
-       board_size = zorro_resource_len(z);
-       info->screen_size = size;
+       dev_info(info->device,
+                "%s board detected, REG at 0x%lx, %lu MiB RAM at 0x%lx\n",
+                cirrusfb_board_info[btype].name, regbase, ramsize / MB_,
+                rambase);
  
        if (!zorro_request_device(z, "cirrusfb")) {
-               dev_err(info->device, "cannot reserve region 0x%lx, abort\n",
-                       board_addr);
-               ret = -EBUSY;
+               dev_err(info->device, "Cannot reserve %pR\n", &z->resource);
+               error = -EBUSY;
                goto err_release_fb;
        }
  
-       ret = -EIO;
-       if (btype == BT_PICASSO4) {
-               dev_info(info->device, " REG at $%lx\n", board_addr + 0x600000);
-               /* To be precise, for the P4 this is not the */
-               /* begin of the board, but the begin of RAM. */
-               /* for P4, map in its address space in 2 chunks (### TEST! ) */
-               /* (note the ugly hardcoded 16M number) */
-               cinfo->regbase = ioremap(board_addr, 16777216);
-               if (!cinfo->regbase)
-                       goto err_release_region;
-               dev_dbg(info->device, "Virtual address for board set to: $%p\n",
-                       cinfo->regbase);
-               cinfo->regbase += 0x600000;
-               info->fix.mmio_start = board_addr + 0x600000;
-               info->fix.smem_start = board_addr + 16777216;
-               info->screen_base = ioremap(info->fix.smem_start, 16777216);
-               if (!info->screen_base)
-                       goto err_unmap_regbase;
-       } else {
-               dev_info(info->device, " REG at $%lx\n",
-                        (unsigned long) z2->resource.start);
-               info->fix.smem_start = board_addr;
-               if (board_addr > 0x01000000)
-                       info->screen_base = ioremap(board_addr, board_size);
-               else
-                       info->screen_base = (caddr_t) ZTWO_VADDR(board_addr);
-               if (!info->screen_base)
-                       goto err_release_region;
+       cinfo = info->par;
+       cinfo->btype = btype;
  
-               /* set address for REG area of board */
-               cinfo->regbase = (caddr_t) ZTWO_VADDR(z2->resource.start);
-               info->fix.mmio_start = z2->resource.start;
+       info->fix.mmio_start = regbase;
+       cinfo->regbase = regbase > 16 * MB_ ? ioremap(regbase, 64 * 1024)
+                                           : (caddr_t)ZTWO_VADDR(regbase);
+       if (!cinfo->regbase) {
+               dev_err(info->device, "Cannot map registers\n");
+               error = -EIO;
+               goto err_release_dev;
+       }
  
-               dev_dbg(info->device, "Virtual address for board set to: $%p\n",
-                       cinfo->regbase);
+       info->fix.smem_start = rambase;
+       info->screen_size = ramsize;
+       info->screen_base = rambase > 16 * MB_ ? ioremap(rambase, ramsize)
+                                              : (caddr_t)ZTWO_VADDR(rambase);
+       if (!info->screen_base) {
+               dev_err(info->device, "Cannot map video RAM\n");
+               error = -EIO;
+               goto err_unmap_reg;
        }
        cinfo->unmap = cirrusfb_zorro_unmap;
  
        dev_info(info->device,
-                "Cirrus Logic chipset on Zorro bus, RAM (%lu MB) at $%lx\n",
-                board_size / MB_, board_addr);
-       zorro_set_drvdata(z, info);
+                "Cirrus Logic chipset on Zorro bus, RAM (%lu MiB) at 0x%lx\n",
+                ramsize / MB_, rambase);
  
        /* MCLK select etc. */
        if (cirrusfb_board_info[btype].init_sr1f)
                vga_wseq(cinfo->regbase, CL_SEQR1F,
                         cirrusfb_board_info[btype].sr1f);
  
-       ret = cirrusfb_register(info);
-       if (!ret)
-               return 0;
+       error = cirrusfb_register(info);
+       if (error) {
+               dev_err(info->device, "Failed to register device, error %d\n",
+                       error);
+               goto err_unmap_ram;
+       }
  
-       if (btype == BT_PICASSO4 || board_addr > 0x01000000)
+       zorro_set_drvdata(z, info);
+       return 0;
+ err_unmap_ram:
+       if (rambase > 16 * MB_)
                iounmap(info->screen_base);
  
- err_unmap_regbase:
-       if (btype == BT_PICASSO4)
-               iounmap(cinfo->regbase - 0x600000);
- err_release_region:
-       release_region(board_addr, board_size);
+ err_unmap_reg:
+       if (regbase > 16 * MB_)
+               iounmap(cinfo->regbase);
+ err_release_dev:
+       zorro_release_device(z);
  err_release_fb:
        framebuffer_release(info);
- err_out:
-       return ret;
+       return error;
  }
  
  void __devexit cirrusfb_zorro_unregister(struct zorro_dev *z)
        struct fb_info *info = zorro_get_drvdata(z);
  
        cirrusfb_cleanup(info);
+       zorro_set_drvdata(z, NULL);
  }
  
  static struct zorro_driver cirrusfb_zorro_driver = {
diff --combined drivers/video/mxsfb.c
index eb3c5eea1a0fcc2ed868248b81d2ad9871d52018,d29c7c06ea7b22934a62e7d0520c8bce02898f36..4a89f889852d46c121444e63df424bccf12cb2a5
@@@ -328,7 -328,7 +328,7 @@@ static void mxsfb_enable_controller(str
  
        dev_dbg(&host->pdev->dev, "%s\n", __func__);
  
 -      clk_enable(host->clk);
 +      clk_prepare_enable(host->clk);
        clk_set_rate(host->clk, PICOS2KHZ(fb_info->var.pixclock) * 1000U);
  
        /* if it was disabled, re-enable the mode again */
@@@ -368,7 -368,7 +368,7 @@@ static void mxsfb_disable_controller(st
  
        writel(VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4 + REG_CLR);
  
 -      clk_disable(host->clk);
 +      clk_disable_unprepare(host->clk);
  
        host->enabled = 0;
  }
@@@ -668,7 -668,7 +668,7 @@@ static int __devinit mxsfb_restore_mode
        line_count = fb_info->fix.smem_len / fb_info->fix.line_length;
        fb_info->fix.ypanstep = 1;
  
 -      clk_enable(host->clk);
 +      clk_prepare_enable(host->clk);
        host->enabled = 1;
  
        return 0;
@@@ -841,7 -841,7 +841,7 @@@ static int __devinit mxsfb_probe(struc
  
  error_register:
        if (host->enabled)
 -              clk_disable(host->clk);
 +              clk_disable_unprepare(host->clk);
        fb_destroy_modelist(&fb_info->modelist);
  error_init_fb:
        kfree(fb_info->pseudo_palette);
@@@ -902,18 -902,7 +902,7 @@@ static struct platform_driver mxsfb_dri
        },
  };
  
- static int __init mxsfb_init(void)
- {
-       return platform_driver_register(&mxsfb_driver);
- }
- static void __exit mxsfb_exit(void)
- {
-       platform_driver_unregister(&mxsfb_driver);
- }
- module_init(mxsfb_init);
- module_exit(mxsfb_exit);
+ module_platform_driver(mxsfb_driver);
  
  MODULE_DESCRIPTION("Freescale mxs framebuffer driver");
  MODULE_AUTHOR("Sascha Hauer, Pengutronix");
index da7b18576549cd748b9245973974d19f712596eb,5c464304cc8d6b5e81d7dbc2f28d1173071abe1c..8613f86fb56d32b4f45cf1f5900e5edea69abe9c
@@@ -50,7 -50,7 +50,7 @@@ module_param_named(def_disp, def_disp_n
  MODULE_PARM_DESC(def_disp, "default display name");
  
  #ifdef DEBUG
 -unsigned int dss_debug;
 +bool dss_debug;
  module_param_named(debug, dss_debug, bool, 0644);
  #endif
  
@@@ -178,6 -178,8 +178,8 @@@ static int omap_dss_probe(struct platfo
  
        dss_features_init();
  
+       dss_apply_init();
        dss_init_overlay_managers(pdev);
        dss_init_overlays(pdev);
  
index 46f37883e499184910471aec6875d519cdc8acc3,511ae2a7add8666160005f67b19f94466998c58b..d4d676c82c12fbe9789edc354c85b5a14bd19cbb
@@@ -203,6 -203,21 +203,21 @@@ struct dsi_reg { u16 idx; }
  typedef void (*omap_dsi_isr_t) (void *arg, u32 mask);
  
  #define DSI_MAX_NR_ISRS                2
+ #define DSI_MAX_NR_LANES      5
+ enum dsi_lane_function {
+       DSI_LANE_UNUSED = 0,
+       DSI_LANE_CLK,
+       DSI_LANE_DATA1,
+       DSI_LANE_DATA2,
+       DSI_LANE_DATA3,
+       DSI_LANE_DATA4,
+ };
+ struct dsi_lane_config {
+       enum dsi_lane_function function;
+       u8 polarity;
+ };
  
  struct dsi_isr_data {
        omap_dsi_isr_t  isr;
@@@ -223,24 -238,6 +238,6 @@@ enum dsi_vc_source 
        DSI_VC_SOURCE_VP,
  };
  
- enum dsi_lane {
-       DSI_CLK_P       = 1 << 0,
-       DSI_CLK_N       = 1 << 1,
-       DSI_DATA1_P     = 1 << 2,
-       DSI_DATA1_N     = 1 << 3,
-       DSI_DATA2_P     = 1 << 4,
-       DSI_DATA2_N     = 1 << 5,
-       DSI_DATA3_P     = 1 << 6,
-       DSI_DATA3_N     = 1 << 7,
-       DSI_DATA4_P     = 1 << 8,
-       DSI_DATA4_N     = 1 << 9,
- };
- struct dsi_update_region {
-       u16 x, y, w, h;
-       struct omap_dss_device *device;
- };
  struct dsi_irq_stats {
        unsigned long last_reset;
        unsigned irq_count;
@@@ -290,7 -287,9 +287,9 @@@ struct dsi_data 
        struct dsi_isr_tables isr_tables_copy;
  
        int update_channel;
-       struct dsi_update_region update_region;
+ #ifdef DEBUG
+       unsigned update_bytes;
+ #endif
  
        bool te_enabled;
        bool ulps_enabled;
        unsigned long  fint_min, fint_max;
        unsigned long lpdiv_max;
  
-       int num_data_lanes;
+       unsigned num_lanes_supported;
+       struct dsi_lane_config lanes[DSI_MAX_NR_LANES];
+       unsigned num_lanes_used;
  
        unsigned scp_clk_refcount;
  };
@@@ -340,8 -342,8 +342,8 @@@ struct dsi_packet_sent_handler_data 
  static struct platform_device *dsi_pdev_map[MAX_NUM_DSI];
  
  #ifdef DEBUG
 -static unsigned int dsi_perf;
 -module_param_named(dsi_perf, dsi_perf, bool, 0644);
 +static bool dsi_perf;
 +module_param(dsi_perf, bool, 0644);
  #endif
  
  static inline struct dsi_data *dsi_get_dsidrv_data(struct platform_device *dsidev)
@@@ -413,14 -415,29 +415,29 @@@ static void dsi_completion_handler(voi
  static inline int wait_for_bit_change(struct platform_device *dsidev,
                const struct dsi_reg idx, int bitnum, int value)
  {
-       int t = 100000;
+       unsigned long timeout;
+       ktime_t wait;
+       int t;
  
-       while (REG_GET(dsidev, idx, bitnum, bitnum) != value) {
-               if (--t == 0)
-                       return !value;
+       /* first busyloop to see if the bit changes right away */
+       t = 100;
+       while (t-- > 0) {
+               if (REG_GET(dsidev, idx, bitnum, bitnum) == value)
+                       return value;
        }
  
-       return value;
+       /* then loop for 500ms, sleeping for 1ms in between */
+       timeout = jiffies + msecs_to_jiffies(500);
+       while (time_before(jiffies, timeout)) {
+               if (REG_GET(dsidev, idx, bitnum, bitnum) == value)
+                       return value;
+               wait = ns_to_ktime(1000 * 1000);
+               set_current_state(TASK_UNINTERRUPTIBLE);
+               schedule_hrtimeout(&wait, HRTIMER_MODE_REL);
+       }
+       return !value;
  }
  
  u8 dsi_get_pixel_size(enum omap_dss_dsi_pixel_format fmt)
@@@ -454,7 -471,6 +471,6 @@@ static void dsi_perf_mark_start(struct 
  static void dsi_perf_show(struct platform_device *dsidev, const char *name)
  {
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
-       struct omap_dss_device *dssdev = dsi->update_region.device;
        ktime_t t, setup_time, trans_time;
        u32 total_bytes;
        u32 setup_us, trans_us, total_us;
  
        total_us = setup_us + trans_us;
  
-       total_bytes = dsi->update_region.w *
-               dsi->update_region.h *
-               dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt) / 8;
+       total_bytes = dsi->update_bytes;
  
        printk(KERN_INFO "DSI(%s): %u us + %u us = %u us (%uHz), "
                        "%u bytes, %u kbytes/sec\n",
@@@ -1720,17 -1734,19 +1734,19 @@@ static void dsi_dump_dsidev_clocks(stru
        seq_printf(s,   "CLKIN4DDR\t%-16luregm %u\n",
                        cinfo->clkin4ddr, cinfo->regm);
  
-       seq_printf(s,   "%s (%s)\t%-16luregm_dispc %u\t(%s)\n",
-                       dss_get_generic_clk_source_name(dispc_clk_src),
-                       dss_feat_get_clk_source_name(dispc_clk_src),
+       seq_printf(s,   "DSI_PLL_HSDIV_DISPC (%s)\t%-16luregm_dispc %u\t(%s)\n",
+                       dss_feat_get_clk_source_name(dsi_module == 0 ?
+                               OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC :
+                               OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC),
                        cinfo->dsi_pll_hsdiv_dispc_clk,
                        cinfo->regm_dispc,
                        dispc_clk_src == OMAP_DSS_CLK_SRC_FCK ?
                        "off" : "on");
  
-       seq_printf(s,   "%s (%s)\t%-16luregm_dsi %u\t(%s)\n",
-                       dss_get_generic_clk_source_name(dsi_clk_src),
-                       dss_feat_get_clk_source_name(dsi_clk_src),
+       seq_printf(s,   "DSI_PLL_HSDIV_DSI (%s)\t%-16luregm_dsi %u\t(%s)\n",
+                       dss_feat_get_clk_source_name(dsi_module == 0 ?
+                               OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI :
+                               OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DSI),
                        cinfo->dsi_pll_hsdiv_dsi_clk,
                        cinfo->regm_dsi,
                        dsi_clk_src == OMAP_DSS_CLK_SRC_FCK ?
@@@ -2029,34 -2045,6 +2045,6 @@@ static int dsi_cio_power(struct platfor
        return 0;
  }
  
- /* Number of data lanes present on DSI interface */
- static inline int dsi_get_num_data_lanes(struct platform_device *dsidev)
- {
-       /* DSI on OMAP3 doesn't have register DSI_GNQ, set number
-        * of data lanes as 2 by default */
-       if (dss_has_feature(FEAT_DSI_GNQ))
-               return REG_GET(dsidev, DSI_GNQ, 11, 9); /* NB_DATA_LANES */
-       else
-               return 2;
- }
- /* Number of data lanes used by the dss device */
- static inline int dsi_get_num_data_lanes_dssdev(struct omap_dss_device *dssdev)
- {
-       int num_data_lanes = 0;
-       if (dssdev->phy.dsi.data1_lane != 0)
-               num_data_lanes++;
-       if (dssdev->phy.dsi.data2_lane != 0)
-               num_data_lanes++;
-       if (dssdev->phy.dsi.data3_lane != 0)
-               num_data_lanes++;
-       if (dssdev->phy.dsi.data4_lane != 0)
-               num_data_lanes++;
-       return num_data_lanes;
- }
  static unsigned dsi_get_line_buf_size(struct platform_device *dsidev)
  {
        int val;
        }
  }
  
- static void dsi_set_lane_config(struct omap_dss_device *dssdev)
+ static int dsi_parse_lane_config(struct omap_dss_device *dssdev)
  {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
-       u32 r;
-       int num_data_lanes_dssdev = dsi_get_num_data_lanes_dssdev(dssdev);
+       struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
+       u8 lanes[DSI_MAX_NR_LANES];
+       u8 polarities[DSI_MAX_NR_LANES];
+       int num_lanes, i;
+       static const enum dsi_lane_function functions[] = {
+               DSI_LANE_CLK,
+               DSI_LANE_DATA1,
+               DSI_LANE_DATA2,
+               DSI_LANE_DATA3,
+               DSI_LANE_DATA4,
+       };
+       lanes[0] = dssdev->phy.dsi.clk_lane;
+       lanes[1] = dssdev->phy.dsi.data1_lane;
+       lanes[2] = dssdev->phy.dsi.data2_lane;
+       lanes[3] = dssdev->phy.dsi.data3_lane;
+       lanes[4] = dssdev->phy.dsi.data4_lane;
+       polarities[0] = dssdev->phy.dsi.clk_pol;
+       polarities[1] = dssdev->phy.dsi.data1_pol;
+       polarities[2] = dssdev->phy.dsi.data2_pol;
+       polarities[3] = dssdev->phy.dsi.data3_pol;
+       polarities[4] = dssdev->phy.dsi.data4_pol;
  
-       int clk_lane   = dssdev->phy.dsi.clk_lane;
-       int data1_lane = dssdev->phy.dsi.data1_lane;
-       int data2_lane = dssdev->phy.dsi.data2_lane;
-       int clk_pol    = dssdev->phy.dsi.clk_pol;
-       int data1_pol  = dssdev->phy.dsi.data1_pol;
-       int data2_pol  = dssdev->phy.dsi.data2_pol;
+       num_lanes = 0;
+       for (i = 0; i < dsi->num_lanes_supported; ++i)
+               dsi->lanes[i].function = DSI_LANE_UNUSED;
+       for (i = 0; i < dsi->num_lanes_supported; ++i) {
+               int num;
+               if (lanes[i] == DSI_LANE_UNUSED)
+                       break;
+               num = lanes[i] - 1;
+               if (num >= dsi->num_lanes_supported)
+                       return -EINVAL;
+               if (dsi->lanes[num].function != DSI_LANE_UNUSED)
+                       return -EINVAL;
+               dsi->lanes[num].function = functions[i];
+               dsi->lanes[num].polarity = polarities[i];
+               num_lanes++;
+       }
+       if (num_lanes < 2 || num_lanes > dsi->num_lanes_supported)
+               return -EINVAL;
+       dsi->num_lanes_used = num_lanes;
+       return 0;
+ }
+ static int dsi_set_lane_config(struct omap_dss_device *dssdev)
+ {
+       struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
+       struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
+       static const u8 offsets[] = { 0, 4, 8, 12, 16 };
+       static const enum dsi_lane_function functions[] = {
+               DSI_LANE_CLK,
+               DSI_LANE_DATA1,
+               DSI_LANE_DATA2,
+               DSI_LANE_DATA3,
+               DSI_LANE_DATA4,
+       };
+       u32 r;
+       int i;
  
        r = dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG1);
-       r = FLD_MOD(r, clk_lane, 2, 0);
-       r = FLD_MOD(r, clk_pol, 3, 3);
-       r = FLD_MOD(r, data1_lane, 6, 4);
-       r = FLD_MOD(r, data1_pol, 7, 7);
-       r = FLD_MOD(r, data2_lane, 10, 8);
-       r = FLD_MOD(r, data2_pol, 11, 11);
-       if (num_data_lanes_dssdev > 2) {
-               int data3_lane  = dssdev->phy.dsi.data3_lane;
-               int data3_pol  = dssdev->phy.dsi.data3_pol;
-               r = FLD_MOD(r, data3_lane, 14, 12);
-               r = FLD_MOD(r, data3_pol, 15, 15);
+       for (i = 0; i < dsi->num_lanes_used; ++i) {
+               unsigned offset = offsets[i];
+               unsigned polarity, lane_number;
+               unsigned t;
+               for (t = 0; t < dsi->num_lanes_supported; ++t)
+                       if (dsi->lanes[t].function == functions[i])
+                               break;
+               if (t == dsi->num_lanes_supported)
+                       return -EINVAL;
+               lane_number = t;
+               polarity = dsi->lanes[t].polarity;
+               r = FLD_MOD(r, lane_number + 1, offset + 2, offset);
+               r = FLD_MOD(r, polarity, offset + 3, offset + 3);
        }
-       if (num_data_lanes_dssdev > 3) {
-               int data4_lane  = dssdev->phy.dsi.data4_lane;
-               int data4_pol  = dssdev->phy.dsi.data4_pol;
  
-               r = FLD_MOD(r, data4_lane, 18, 16);
-               r = FLD_MOD(r, data4_pol, 19, 19);
+       /* clear the unused lanes */
+       for (; i < dsi->num_lanes_supported; ++i) {
+               unsigned offset = offsets[i];
+               r = FLD_MOD(r, 0, offset + 2, offset);
+               r = FLD_MOD(r, 0, offset + 3, offset + 3);
        }
-       dsi_write_reg(dsidev, DSI_COMPLEXIO_CFG1, r);
  
-       /* The configuration of the DSI complex I/O (number of data lanes,
-          position, differential order) should not be changed while
-          DSS.DSI_CLK_CRTRL[20] LP_CLK_ENABLE bit is set to 1. In order for
-          the hardware to take into account a new configuration of the complex
-          I/O (done in DSS.DSI_COMPLEXIO_CFG1 register), it is recommended to
-          follow this sequence: First set the DSS.DSI_CTRL[0] IF_EN bit to 1,
-          then reset the DSS.DSI_CTRL[0] IF_EN to 0, then set
-          DSS.DSI_CLK_CTRL[20] LP_CLK_ENABLE to 1 and finally set again the
-          DSS.DSI_CTRL[0] IF_EN bit to 1. If the sequence is not followed, the
-          DSI complex I/O configuration is unknown. */
+       dsi_write_reg(dsidev, DSI_COMPLEXIO_CFG1, r);
  
-       /*
-       REG_FLD_MOD(dsidev, DSI_CTRL, 1, 0, 0);
-       REG_FLD_MOD(dsidev, DSI_CTRL, 0, 0, 0);
-       REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 1, 20, 20);
-       REG_FLD_MOD(dsidev, DSI_CTRL, 1, 0, 0);
-       */
+       return 0;
  }
  
  static inline unsigned ns2ddr(struct platform_device *dsidev, unsigned ns)
@@@ -2230,49 -2271,28 +2271,28 @@@ static void dsi_cio_timings(struct plat
        dsi_write_reg(dsidev, DSI_DSIPHY_CFG2, r);
  }
  
+ /* lane masks have lane 0 at lsb. mask_p for positive lines, n for negative */
  static void dsi_cio_enable_lane_override(struct omap_dss_device *dssdev,
-               enum dsi_lane lanes)
+               unsigned mask_p, unsigned mask_n)
  {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
-       int clk_lane   = dssdev->phy.dsi.clk_lane;
-       int data1_lane = dssdev->phy.dsi.data1_lane;
-       int data2_lane = dssdev->phy.dsi.data2_lane;
-       int data3_lane = dssdev->phy.dsi.data3_lane;
-       int data4_lane = dssdev->phy.dsi.data4_lane;
-       int clk_pol    = dssdev->phy.dsi.clk_pol;
-       int data1_pol  = dssdev->phy.dsi.data1_pol;
-       int data2_pol  = dssdev->phy.dsi.data2_pol;
-       int data3_pol  = dssdev->phy.dsi.data3_pol;
-       int data4_pol  = dssdev->phy.dsi.data4_pol;
-       u32 l = 0;
-       u8 lptxscp_start = dsi->num_data_lanes == 2 ? 22 : 26;
-       if (lanes & DSI_CLK_P)
-               l |= 1 << ((clk_lane - 1) * 2 + (clk_pol ? 0 : 1));
-       if (lanes & DSI_CLK_N)
-               l |= 1 << ((clk_lane - 1) * 2 + (clk_pol ? 1 : 0));
-       if (lanes & DSI_DATA1_P)
-               l |= 1 << ((data1_lane - 1) * 2 + (data1_pol ? 0 : 1));
-       if (lanes & DSI_DATA1_N)
-               l |= 1 << ((data1_lane - 1) * 2 + (data1_pol ? 1 : 0));
-       if (lanes & DSI_DATA2_P)
-               l |= 1 << ((data2_lane - 1) * 2 + (data2_pol ? 0 : 1));
-       if (lanes & DSI_DATA2_N)
-               l |= 1 << ((data2_lane - 1) * 2 + (data2_pol ? 1 : 0));
-       if (lanes & DSI_DATA3_P)
-               l |= 1 << ((data3_lane - 1) * 2 + (data3_pol ? 0 : 1));
-       if (lanes & DSI_DATA3_N)
-               l |= 1 << ((data3_lane - 1) * 2 + (data3_pol ? 1 : 0));
-       if (lanes & DSI_DATA4_P)
-               l |= 1 << ((data4_lane - 1) * 2 + (data4_pol ? 0 : 1));
-       if (lanes & DSI_DATA4_N)
-               l |= 1 << ((data4_lane - 1) * 2 + (data4_pol ? 1 : 0));
+       int i;
+       u32 l;
+       u8 lptxscp_start = dsi->num_lanes_supported == 3 ? 22 : 26;
+       l = 0;
+       for (i = 0; i < dsi->num_lanes_supported; ++i) {
+               unsigned p = dsi->lanes[i].polarity;
+               if (mask_p & (1 << i))
+                       l |= 1 << (i * 2 + (p ? 0 : 1));
+               if (mask_n & (1 << i))
+                       l |= 1 << (i * 2 + (p ? 1 : 0));
+       }
        /*
         * Bits in REGLPTXSCPDAT4TO0DXDY:
         * 17: DY0 18: DX0
@@@ -2305,51 -2325,40 +2325,40 @@@ static void dsi_cio_disable_lane_overri
  static int dsi_cio_wait_tx_clk_esc_reset(struct omap_dss_device *dssdev)
  {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
-       int t;
-       int bits[3];
-       bool in_use[3];
-       if (dss_has_feature(FEAT_DSI_REVERSE_TXCLKESC)) {
-               bits[0] = 28;
-               bits[1] = 27;
-               bits[2] = 26;
-       } else {
-               bits[0] = 24;
-               bits[1] = 25;
-               bits[2] = 26;
-       }
-       in_use[0] = false;
-       in_use[1] = false;
-       in_use[2] = false;
+       struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
+       int t, i;
+       bool in_use[DSI_MAX_NR_LANES];
+       static const u8 offsets_old[] = { 28, 27, 26 };
+       static const u8 offsets_new[] = { 24, 25, 26, 27, 28 };
+       const u8 *offsets;
+       if (dss_has_feature(FEAT_DSI_REVERSE_TXCLKESC))
+               offsets = offsets_old;
+       else
+               offsets = offsets_new;
  
-       if (dssdev->phy.dsi.clk_lane != 0)
-               in_use[dssdev->phy.dsi.clk_lane - 1] = true;
-       if (dssdev->phy.dsi.data1_lane != 0)
-               in_use[dssdev->phy.dsi.data1_lane - 1] = true;
-       if (dssdev->phy.dsi.data2_lane != 0)
-               in_use[dssdev->phy.dsi.data2_lane - 1] = true;
+       for (i = 0; i < dsi->num_lanes_supported; ++i)
+               in_use[i] = dsi->lanes[i].function != DSI_LANE_UNUSED;
  
        t = 100000;
        while (true) {
                u32 l;
-               int i;
                int ok;
  
                l = dsi_read_reg(dsidev, DSI_DSIPHY_CFG5);
  
                ok = 0;
-               for (i = 0; i < 3; ++i) {
-                       if (!in_use[i] || (l & (1 << bits[i])))
+               for (i = 0; i < dsi->num_lanes_supported; ++i) {
+                       if (!in_use[i] || (l & (1 << offsets[i])))
                                ok++;
                }
  
-               if (ok == 3)
+               if (ok == dsi->num_lanes_supported)
                        break;
  
                if (--t == 0) {
-                       for (i = 0; i < 3; ++i) {
-                               if (!in_use[i] || (l & (1 << bits[i])))
+                       for (i = 0; i < dsi->num_lanes_supported; ++i) {
+                               if (!in_use[i] || (l & (1 << offsets[i])))
                                        continue;
  
                                DSSERR("CIO TXCLKESC%d domain not coming " \
        return 0;
  }
  
+ /* return bitmask of enabled lanes, lane0 being the lsb */
  static unsigned dsi_get_lane_mask(struct omap_dss_device *dssdev)
  {
-       unsigned lanes = 0;
+       struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
+       struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
+       unsigned mask = 0;
+       int i;
  
-       if (dssdev->phy.dsi.clk_lane != 0)
-               lanes |= 1 << (dssdev->phy.dsi.clk_lane - 1);
-       if (dssdev->phy.dsi.data1_lane != 0)
-               lanes |= 1 << (dssdev->phy.dsi.data1_lane - 1);
-       if (dssdev->phy.dsi.data2_lane != 0)
-               lanes |= 1 << (dssdev->phy.dsi.data2_lane - 1);
-       if (dssdev->phy.dsi.data3_lane != 0)
-               lanes |= 1 << (dssdev->phy.dsi.data3_lane - 1);
-       if (dssdev->phy.dsi.data4_lane != 0)
-               lanes |= 1 << (dssdev->phy.dsi.data4_lane - 1);
+       for (i = 0; i < dsi->num_lanes_supported; ++i) {
+               if (dsi->lanes[i].function != DSI_LANE_UNUSED)
+                       mask |= 1 << i;
+       }
  
-       return lanes;
+       return mask;
  }
  
  static int dsi_cio_init(struct omap_dss_device *dssdev)
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
        int r;
-       int num_data_lanes_dssdev = dsi_get_num_data_lanes_dssdev(dssdev);
        u32 l;
  
        DSSDBGF();
                goto err_scp_clk_dom;
        }
  
-       dsi_set_lane_config(dssdev);
+       r = dsi_set_lane_config(dssdev);
+       if (r)
+               goto err_scp_clk_dom;
  
        /* set TX STOP MODE timer to maximum for this operation */
        l = dsi_read_reg(dsidev, DSI_TIMING1);
        dsi_write_reg(dsidev, DSI_TIMING1, l);
  
        if (dsi->ulps_enabled) {
-               u32 lane_mask = DSI_CLK_P | DSI_DATA1_P | DSI_DATA2_P;
+               unsigned mask_p;
+               int i;
  
                DSSDBG("manual ulps exit\n");
  
                 * ULPS exit sequence, as after reset the DSS HW thinks
                 * that we are not in ULPS mode, and refuses to send the
                 * sequence. So we need to send the ULPS exit sequence
-                * manually.
+                * manually by setting positive lines high and negative lines
+                * low for 1ms.
                 */
  
-               if (num_data_lanes_dssdev > 2)
-                       lane_mask |= DSI_DATA3_P;
+               mask_p = 0;
  
-               if (num_data_lanes_dssdev > 3)
-                       lane_mask |= DSI_DATA4_P;
+               for (i = 0; i < dsi->num_lanes_supported; ++i) {
+                       if (dsi->lanes[i].function == DSI_LANE_UNUSED)
+                               continue;
+                       mask_p |= 1 << i;
+               }
  
-               dsi_cio_enable_lane_override(dssdev, lane_mask);
+               dsi_cio_enable_lane_override(dssdev, mask_p, 0);
        }
  
        r = dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_ON);
@@@ -2913,6 -2925,9 +2925,9 @@@ static int dsi_vc_send_bta(struct platf
  
        REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 1, 6, 6); /* BTA_EN */
  
+       /* flush posted write */
+       dsi_read_reg(dsidev, DSI_VC_CTRL(channel));
        return 0;
  }
  
@@@ -3513,7 -3528,8 +3528,8 @@@ static int dsi_enter_ulps(struct platfo
  {
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
        DECLARE_COMPLETION_ONSTACK(completion);
-       int r;
+       int r, i;
+       unsigned mask;
  
        DSSDBGF();
  
        if (dsi->ulps_enabled)
                return 0;
  
+       /* DDR_CLK_ALWAYS_ON */
        if (REG_GET(dsidev, DSI_CLK_CTRL, 13, 13)) {
-               DSSERR("DDR_CLK_ALWAYS_ON enabled when entering ULPS\n");
-               return -EIO;
+               dsi_if_enable(dsidev, 0);
+               REG_FLD_MOD(dsidev, DSI_CLK_CTRL, 0, 13, 13);
+               dsi_if_enable(dsidev, 1);
        }
  
        dsi_sync_vc(dsidev, 0);
        if (r)
                return r;
  
+       mask = 0;
+       for (i = 0; i < dsi->num_lanes_supported; ++i) {
+               if (dsi->lanes[i].function == DSI_LANE_UNUSED)
+                       continue;
+               mask |= 1 << i;
+       }
        /* Assert TxRequestEsc for data lanes and TxUlpsClk for clk lane */
        /* LANEx_ULPS_SIG2 */
-       REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, (1 << 0) | (1 << 1) | (1 << 2),
-               7, 5);
+       REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, mask, 9, 5);
+       /* flush posted write and wait for SCP interface to finish the write */
+       dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG2);
  
        if (wait_for_completion_timeout(&completion,
                                msecs_to_jiffies(1000)) == 0) {
                        DSI_CIO_IRQ_ULPSACTIVENOT_ALL0);
  
        /* Reset LANEx_ULPS_SIG2 */
-       REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, (0 << 0) | (0 << 1) | (0 << 2),
-               7, 5);
+       REG_FLD_MOD(dsidev, DSI_COMPLEXIO_CFG2, 0, 9, 5);
+       /* flush posted write and wait for SCP interface to finish the write */
+       dsi_read_reg(dsidev, DSI_COMPLEXIO_CFG2);
  
        dsi_cio_power(dsidev, DSI_COMPLEXIO_POWER_ULPS);
  
@@@ -3836,6 -3865,7 +3865,7 @@@ static int dsi_proto_config(struct omap
  static void dsi_proto_timings(struct omap_dss_device *dssdev)
  {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
+       struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
        unsigned tlpx, tclk_zero, tclk_prepare, tclk_trail;
        unsigned tclk_pre, tclk_post;
        unsigned ths_prepare, ths_prepare_ths_zero, ths_zero;
        unsigned ddr_clk_pre, ddr_clk_post;
        unsigned enter_hs_mode_lat, exit_hs_mode_lat;
        unsigned ths_eot;
-       int ndl = dsi_get_num_data_lanes_dssdev(dssdev);
+       int ndl = dsi->num_lanes_used - 1;
        u32 r;
  
        r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG0);
        }
  }
  
- int dsi_video_mode_enable(struct omap_dss_device *dssdev, int channel)
+ int dsi_enable_video_output(struct omap_dss_device *dssdev, int channel)
  {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
        int bpp = dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt);
        u8 data_type;
        u16 word_count;
+       int r;
  
-       switch (dssdev->panel.dsi_pix_fmt) {
-       case OMAP_DSS_DSI_FMT_RGB888:
-               data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24;
-               break;
-       case OMAP_DSS_DSI_FMT_RGB666:
-               data_type = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
-               break;
-       case OMAP_DSS_DSI_FMT_RGB666_PACKED:
-               data_type = MIPI_DSI_PACKED_PIXEL_STREAM_18;
-               break;
-       case OMAP_DSS_DSI_FMT_RGB565:
-               data_type = MIPI_DSI_PACKED_PIXEL_STREAM_16;
-               break;
-       default:
-               BUG();
-       };
+       if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) {
+               switch (dssdev->panel.dsi_pix_fmt) {
+               case OMAP_DSS_DSI_FMT_RGB888:
+                       data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24;
+                       break;
+               case OMAP_DSS_DSI_FMT_RGB666:
+                       data_type = MIPI_DSI_PIXEL_STREAM_3BYTE_18;
+                       break;
+               case OMAP_DSS_DSI_FMT_RGB666_PACKED:
+                       data_type = MIPI_DSI_PACKED_PIXEL_STREAM_18;
+                       break;
+               case OMAP_DSS_DSI_FMT_RGB565:
+                       data_type = MIPI_DSI_PACKED_PIXEL_STREAM_16;
+                       break;
+               default:
+                       BUG();
+               };
  
-       dsi_if_enable(dsidev, false);
-       dsi_vc_enable(dsidev, channel, false);
+               dsi_if_enable(dsidev, false);
+               dsi_vc_enable(dsidev, channel, false);
  
-       /* MODE, 1 = video mode */
-       REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 1, 4, 4);
+               /* MODE, 1 = video mode */
+               REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 1, 4, 4);
  
-       word_count = DIV_ROUND_UP(dssdev->panel.timings.x_res * bpp, 8);
+               word_count = DIV_ROUND_UP(dssdev->panel.timings.x_res * bpp, 8);
  
-       dsi_vc_write_long_header(dsidev, channel, data_type, word_count, 0);
+               dsi_vc_write_long_header(dsidev, channel, data_type,
+                               word_count, 0);
  
-       dsi_vc_enable(dsidev, channel, true);
-       dsi_if_enable(dsidev, true);
+               dsi_vc_enable(dsidev, channel, true);
+               dsi_if_enable(dsidev, true);
+       }
  
-       dssdev->manager->enable(dssdev->manager);
+       r = dss_mgr_enable(dssdev->manager);
+       if (r) {
+               if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) {
+                       dsi_if_enable(dsidev, false);
+                       dsi_vc_enable(dsidev, channel, false);
+               }
+               return r;
+       }
  
        return 0;
  }
- EXPORT_SYMBOL(dsi_video_mode_enable);
+ EXPORT_SYMBOL(dsi_enable_video_output);
  
- void dsi_video_mode_disable(struct omap_dss_device *dssdev, int channel)
+ void dsi_disable_video_output(struct omap_dss_device *dssdev, int channel)
  {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
  
-       dsi_if_enable(dsidev, false);
-       dsi_vc_enable(dsidev, channel, false);
+       if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_VIDEO_MODE) {
+               dsi_if_enable(dsidev, false);
+               dsi_vc_enable(dsidev, channel, false);
  
-       /* MODE, 0 = command mode */
-       REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 0, 4, 4);
+               /* MODE, 0 = command mode */
+               REG_FLD_MOD(dsidev, DSI_VC_CTRL(channel), 0, 4, 4);
  
-       dsi_vc_enable(dsidev, channel, true);
-       dsi_if_enable(dsidev, true);
+               dsi_vc_enable(dsidev, channel, true);
+               dsi_if_enable(dsidev, true);
+       }
  
-       dssdev->manager->disable(dssdev->manager);
+       dss_mgr_disable(dssdev->manager);
  }
- EXPORT_SYMBOL(dsi_video_mode_disable);
+ EXPORT_SYMBOL(dsi_disable_video_output);
  
  static void dsi_update_screen_dispc(struct omap_dss_device *dssdev,
-               u16 x, u16 y, u16 w, u16 h)
+               u16 w, u16 h)
  {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
        const unsigned channel = dsi->update_channel;
        const unsigned line_buf_size = dsi_get_line_buf_size(dsidev);
  
-       DSSDBG("dsi_update_screen_dispc(%d,%d %dx%d)\n",
-                       x, y, w, h);
+       DSSDBG("dsi_update_screen_dispc(%dx%d)\n", w, h);
  
        dsi_vc_config_source(dsidev, channel, DSI_VC_SOURCE_VP);
  
                msecs_to_jiffies(250));
        BUG_ON(r == 0);
  
-       dss_start_update(dssdev);
+       dss_mgr_start_update(dssdev->manager);
  
        if (dsi->te_enabled) {
                /* disable LP_RX_TO, so that we can receive TE.  Time to wait
@@@ -4146,66 -4189,27 +4189,27 @@@ static void dsi_framedone_irq_callback(
  #endif
  }
  
- int omap_dsi_prepare_update(struct omap_dss_device *dssdev,
-                                   u16 *x, u16 *y, u16 *w, u16 *h,
-                                   bool enlarge_update_area)
+ int omap_dsi_update(struct omap_dss_device *dssdev, int channel,
+               void (*callback)(int, void *), void *data)
  {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
+       struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
        u16 dw, dh;
  
-       dssdev->driver->get_resolution(dssdev, &dw, &dh);
-       if  (*x > dw || *y > dh)
-               return -EINVAL;
-       if (*x + *w > dw)
-               return -EINVAL;
-       if (*y + *h > dh)
-               return -EINVAL;
-       if (*w == 1)
-               return -EINVAL;
-       if (*w == 0 || *h == 0)
-               return -EINVAL;
        dsi_perf_mark_setup(dsidev);
  
-       dss_setup_partial_planes(dssdev, x, y, w, h,
-                       enlarge_update_area);
-       dispc_mgr_set_lcd_size(dssdev->manager->id, *w, *h);
-       return 0;
- }
- EXPORT_SYMBOL(omap_dsi_prepare_update);
- int omap_dsi_update(struct omap_dss_device *dssdev,
-               int channel,
-               u16 x, u16 y, u16 w, u16 h,
-               void (*callback)(int, void *), void *data)
- {
-       struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
-       struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
        dsi->update_channel = channel;
  
-       /* OMAP DSS cannot send updates of odd widths.
-        * omap_dsi_prepare_update() makes the widths even, but add a BUG_ON
-        * here to make sure we catch erroneous updates. Otherwise we'll only
-        * see rather obscure HW error happening, as DSS halts. */
-       BUG_ON(x % 2 == 1);
        dsi->framedone_callback = callback;
        dsi->framedone_data = data;
  
-       dsi->update_region.x = x;
-       dsi->update_region.y = y;
-       dsi->update_region.w = w;
-       dsi->update_region.h = h;
-       dsi->update_region.device = dssdev;
+       dssdev->driver->get_resolution(dssdev, &dw, &dh);
  
-       dsi_update_screen_dispc(dssdev, x, y, w, h);
+ #ifdef DEBUG
+       dsi->update_bytes = dw * dh *
+               dsi_get_pixel_size(dssdev->panel.dsi_pix_fmt) / 8;
+ #endif
+       dsi_update_screen_dispc(dssdev, dw, dh);
  
        return 0;
  }
@@@ -4218,6 -4222,7 +4222,7 @@@ static int dsi_display_init_dispc(struc
        int r;
  
        if (dssdev->panel.dsi_mode == OMAP_DSS_DSI_CMD_MODE) {
+               u16 dw, dh;
                u32 irq;
                struct omap_video_timings timings = {
                        .hsw            = 1,
                        .vbp            = 0,
                };
  
+               dssdev->driver->get_resolution(dssdev, &dw, &dh);
+               timings.x_res = dw;
+               timings.y_res = dh;
                irq = dssdev->manager->id == OMAP_DSS_CHANNEL_LCD ?
                        DISPC_IRQ_FRAMEDONE : DISPC_IRQ_FRAMEDONE2;
  
@@@ -4330,6 -4339,12 +4339,12 @@@ static int dsi_display_init_dsi(struct 
        int dsi_module = dsi_get_dsidev_id(dsidev);
        int r;
  
+       r = dsi_parse_lane_config(dssdev);
+       if (r) {
+               DSSERR("illegal lane config");
+               goto err0;
+       }
        r = dsi_pll_init(dsidev, true, true);
        if (r)
                goto err0;
@@@ -4521,7 -4536,6 +4536,6 @@@ int dsi_init_display(struct omap_dss_de
  {
        struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
        struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
-       int dsi_module = dsi_get_dsidev_id(dsidev);
  
        DSSDBG("DSI init\n");
  
                dsi->vdds_dsi_reg = vdds_dsi;
        }
  
-       if (dsi_get_num_data_lanes_dssdev(dssdev) > dsi->num_data_lanes) {
-               DSSERR("DSI%d can't support more than %d data lanes\n",
-                       dsi_module + 1, dsi->num_data_lanes);
-               return -EINVAL;
-       }
        return 0;
  }
  
@@@ -4771,7 -4779,13 +4779,13 @@@ static int omap_dsihw_probe(struct plat
        dev_dbg(&dsidev->dev, "OMAP DSI rev %d.%d\n",
               FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
  
-       dsi->num_data_lanes = dsi_get_num_data_lanes(dsidev);
+       /* DSI on OMAP3 doesn't have register DSI_GNQ, set number
+        * of data to 3 by default */
+       if (dss_has_feature(FEAT_DSI_GNQ))
+               /* NB_DATA_LANES */
+               dsi->num_lanes_supported = 1 + REG_GET(dsidev, DSI_GNQ, 11, 9);
+       else
+               dsi->num_lanes_supported = 3;
  
        dsi_runtime_put(dsidev);
  
index 57a52eecee912cc2f1c50d161d0b0e266a080209,3cf99a95dae242b2a2f751dfec1b7a945adb18d5..32ff69fb3333fbf352f03fcad01479020dc10efa
@@@ -28,7 -28,7 +28,7 @@@
  #endif
  
  #ifdef DEBUG
 -extern unsigned int dss_debug;
 +extern bool dss_debug;
  #ifdef DSS_SUBSYS_NAME
  #define DSSDBG(format, ...) \
        if (dss_debug) \
@@@ -163,6 -163,34 +163,34 @@@ struct bus_type *dss_get_bus(void)
  struct regulator *dss_get_vdds_dsi(void);
  struct regulator *dss_get_vdds_sdi(void);
  
+ /* apply */
+ void dss_apply_init(void);
+ int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr);
+ int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl);
+ void dss_mgr_start_update(struct omap_overlay_manager *mgr);
+ int omap_dss_mgr_apply(struct omap_overlay_manager *mgr);
+ int dss_mgr_enable(struct omap_overlay_manager *mgr);
+ void dss_mgr_disable(struct omap_overlay_manager *mgr);
+ int dss_mgr_set_info(struct omap_overlay_manager *mgr,
+               struct omap_overlay_manager_info *info);
+ void dss_mgr_get_info(struct omap_overlay_manager *mgr,
+               struct omap_overlay_manager_info *info);
+ int dss_mgr_set_device(struct omap_overlay_manager *mgr,
+               struct omap_dss_device *dssdev);
+ int dss_mgr_unset_device(struct omap_overlay_manager *mgr);
+ bool dss_ovl_is_enabled(struct omap_overlay *ovl);
+ int dss_ovl_enable(struct omap_overlay *ovl);
+ int dss_ovl_disable(struct omap_overlay *ovl);
+ int dss_ovl_set_info(struct omap_overlay *ovl,
+               struct omap_overlay_info *info);
+ void dss_ovl_get_info(struct omap_overlay *ovl,
+               struct omap_overlay_info *info);
+ int dss_ovl_set_manager(struct omap_overlay *ovl,
+               struct omap_overlay_manager *mgr);
+ int dss_ovl_unset_manager(struct omap_overlay *ovl);
  /* display */
  int dss_suspend_all_devices(void);
  int dss_resume_all_devices(void);
@@@ -181,21 -209,22 +209,22 @@@ void default_get_overlay_fifo_threshold
  /* manager */
  int dss_init_overlay_managers(struct platform_device *pdev);
  void dss_uninit_overlay_managers(struct platform_device *pdev);
- int dss_mgr_wait_for_go_ovl(struct omap_overlay *ovl);
- void dss_setup_partial_planes(struct omap_dss_device *dssdev,
-                               u16 *x, u16 *y, u16 *w, u16 *h,
-                               bool enlarge_update_area);
- void dss_start_update(struct omap_dss_device *dssdev);
+ int dss_mgr_simple_check(struct omap_overlay_manager *mgr,
+               const struct omap_overlay_manager_info *info);
+ int dss_mgr_check(struct omap_overlay_manager *mgr,
+               struct omap_dss_device *dssdev,
+               struct omap_overlay_manager_info *info,
+               struct omap_overlay_info **overlay_infos);
  
  /* overlay */
  void dss_init_overlays(struct platform_device *pdev);
  void dss_uninit_overlays(struct platform_device *pdev);
- int dss_check_overlay(struct omap_overlay *ovl, struct omap_dss_device *dssdev);
  void dss_overlay_setup_dispc_manager(struct omap_overlay_manager *mgr);
- #ifdef L4_EXAMPLE
- void dss_overlay_setup_l4_manager(struct omap_overlay_manager *mgr);
- #endif
  void dss_recheck_connections(struct omap_dss_device *dssdev, bool force);
+ int dss_ovl_simple_check(struct omap_overlay *ovl,
+               const struct omap_overlay_info *info);
+ int dss_ovl_check(struct omap_overlay *ovl,
+               struct omap_overlay_info *info, struct omap_dss_device *dssdev);
  
  /* DSS */
  int dss_init_platform_driver(void);
@@@ -399,21 -428,22 +428,22 @@@ int dispc_calc_clock_rates(unsigned lon
                struct dispc_clock_info *cinfo);
  
  
+ void dispc_ovl_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high);
  u32 dispc_ovl_get_fifo_size(enum omap_plane plane);
  u32 dispc_ovl_get_burst_size(enum omap_plane plane);
  int dispc_ovl_setup(enum omap_plane plane, struct omap_overlay_info *oi,
-               bool ilace, enum omap_channel channel, bool replication,
-               u32 fifo_low, u32 fifo_high);
+               bool ilace, bool replication);
  int dispc_ovl_enable(enum omap_plane plane, bool enable);
+ void dispc_ovl_set_channel_out(enum omap_plane plane,
+               enum omap_channel channel);
  
  void dispc_mgr_enable_fifohandcheck(enum omap_channel channel, bool enable);
  void dispc_mgr_set_lcd_size(enum omap_channel channel, u16 width, u16 height);
- void dispc_mgr_enable_cpr(enum omap_channel channel, bool enable);
- void dispc_mgr_set_cpr_coef(enum omap_channel channel,
-               struct omap_dss_cpr_coefs *coefs);
+ u32 dispc_mgr_get_vsync_irq(enum omap_channel channel);
+ u32 dispc_mgr_get_framedone_irq(enum omap_channel channel);
  bool dispc_mgr_go_busy(enum omap_channel channel);
  void dispc_mgr_go(enum omap_channel channel);
+ bool dispc_mgr_is_enabled(enum omap_channel channel);
  void dispc_mgr_enable(enum omap_channel channel, bool enable);
  bool dispc_mgr_is_channel_enabled(enum omap_channel channel);
  void dispc_mgr_set_io_pad_mode(enum dss_io_pad_mode mode);
@@@ -421,18 -451,6 +451,6 @@@ void dispc_mgr_enable_stallmode(enum om
  void dispc_mgr_set_tft_data_lines(enum omap_channel channel, u8 data_lines);
  void dispc_mgr_set_lcd_display_type(enum omap_channel channel,
                enum omap_lcd_display_type type);
- void dispc_mgr_set_default_color(enum omap_channel channel, u32 color);
- u32 dispc_mgr_get_default_color(enum omap_channel channel);
- void dispc_mgr_set_trans_key(enum omap_channel ch,
-               enum omap_dss_trans_key_type type,
-               u32 trans_key);
- void dispc_mgr_get_trans_key(enum omap_channel ch,
-               enum omap_dss_trans_key_type *type,
-               u32 *trans_key);
- void dispc_mgr_enable_trans_key(enum omap_channel ch, bool enable);
- void dispc_mgr_enable_alpha_fixed_zorder(enum omap_channel ch, bool enable);
- bool dispc_mgr_trans_key_enabled(enum omap_channel ch);
- bool dispc_mgr_alpha_fixed_zorder_enabled(enum omap_channel ch);
  void dispc_mgr_set_lcd_timings(enum omap_channel channel,
                struct omap_video_timings *timings);
  void dispc_mgr_set_pol_freq(enum omap_channel channel,
@@@ -443,6 -461,8 +461,8 @@@ int dispc_mgr_set_clock_div(enum omap_c
                struct dispc_clock_info *cinfo);
  int dispc_mgr_get_clock_div(enum omap_channel channel,
                struct dispc_clock_info *cinfo);
+ void dispc_mgr_setup(enum omap_channel channel,
+               struct omap_overlay_manager_info *info);
  
  /* VENC */
  #ifdef CONFIG_OMAP2_DSS_VENC
index 68ba1f80008220f780fb136e37d1401d43676dd3,46024ab9dae6ac150a0df82eb521820ba6b89641..ce158311ff59930c3cce586741f758f6102c8750
  
  static char *def_mode;
  static char *def_vram;
 -static int def_vrfb;
 +static bool def_vrfb;
  static int def_rotate;
 -static int def_mirror;
 +static bool def_mirror;
  static bool auto_update;
  static unsigned int auto_update_freq;
  module_param(auto_update, bool, 0);
  module_param(auto_update_freq, uint, 0644);
  
  #ifdef DEBUG
 -unsigned int omapfb_debug;
 +bool omapfb_debug;
  module_param_named(debug, omapfb_debug, bool, 0644);
 -static unsigned int omapfb_test_pattern;
 +static bool omapfb_test_pattern;
  module_param_named(test, omapfb_test_pattern, bool, 0644);
  #endif
  
@@@ -970,16 -970,20 +970,20 @@@ int omapfb_apply_changes(struct fb_inf
                                outh = var->yres;
                        }
                } else {
-                       outw = ovl->info.out_width;
-                       outh = ovl->info.out_height;
+                       struct omap_overlay_info info;
+                       ovl->get_overlay_info(ovl, &info);
+                       outw = info.out_width;
+                       outh = info.out_height;
                }
  
                if (init) {
                        posx = 0;
                        posy = 0;
                } else {
-                       posx = ovl->info.pos_x;
-                       posy = ovl->info.pos_y;
+                       struct omap_overlay_info info;
+                       ovl->get_overlay_info(ovl, &info);
+                       posx = info.pos_x;
+                       posy = info.pos_y;
                }
  
                r = omapfb_setup_overlay(fbi, ovl, posx, posy, outw, outh);
@@@ -2067,6 -2071,8 +2071,8 @@@ static int omapfb_create_framebuffers(s
                if (ofbi->num_overlays > 0) {
                        struct omap_overlay *ovl = ofbi->overlays[0];
  
+                       ovl->manager->apply(ovl->manager);
                        r = omapfb_overlay_enable(ovl, 1);
  
                        if (r) {
index e12d384ea5202b156d7bea3dd05340c3c83ed20c,b03fb1365ce2ba17250623c5d32b30af65d500e9..c0bdc9b54ecf77d1f22355ca956b6367d2ceac70
@@@ -32,7 -32,7 +32,7 @@@
  #include <video/omapdss.h>
  
  #ifdef DEBUG
 -extern unsigned int omapfb_debug;
 +extern bool omapfb_debug;
  #define DBG(format, ...) \
        do { \
                if (omapfb_debug) \
@@@ -181,13 -181,10 +181,10 @@@ static inline void omapfb_unlock(struc
  static inline int omapfb_overlay_enable(struct omap_overlay *ovl,
                int enable)
  {
-       struct omap_overlay_info info;
-       ovl->get_overlay_info(ovl, &info);
-       if (info.enabled == enable)
-               return 0;
-       info.enabled = enable;
-       return ovl->set_overlay_info(ovl, &info);
+       if (enable)
+               return ovl->enable(ovl);
+       else
+               return ovl->disable(ovl);
  }
  
  static inline struct omapfb2_mem_region *