From c6e246023cd1aeaa626368c8999066f16c74c47d Mon Sep 17 00:00:00 2001
From: Robert Nelson <robertcnelson@gmail.com>
Date: Sun, 13 Mar 2011 13:44:50 -0500
Subject: [PATCH] dss2, merge for-next changes

Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
---
 patch.sh                                      | 333 ++++---
 ...dd-infrastructure-to-do-fixups-fixup.patch | 157 ---
 ...-arm-omap-beagle-use-caps-over-wires.patch |  26 -
 .../0001-beaglexm-remove-extra-brace.patch    |  26 -
 ...430SDP-Remove-unused-vdda_dac-supply.patch |  30 +
 ...ove-forced-clk-disable-from-omap_dss.patch |  86 ++
 ...-Build-omap_device-for-each-DSS-HWIP.patch | 108 ++
 ...-create-platform_driver-move-init-ex.patch | 174 ++++
 ...e-clocks-from-core-driver-to-dss-dri.patch | 934 ++++++++++++++++++
 ...I-create-platform_driver-move-init-e.patch | 218 ++++
 ...PC-create-platform_driver-move-init-.patch | 199 ++++
 ...C-create-platform_driver-move-init-e.patch | 404 ++++++++
 ...-create-platform_driver-move-init-ex.patch | 398 ++++++++
 ...-replace-printk-with-dev_dbg-in-init.patch |  74 ++
 ...-Use-platform-device-to-get-baseaddr.patch | 198 ++++
 ...SS2-Get-DSS-IRQ-from-platform-device.patch |  79 ++
 ...ocks-Align-DSS-clock-names-and-roles.patch | 147 +++
 ...eneralize-naming-of-PRCM-related-clo.patch | 587 +++++++++++
 ...eneralize-external-clock-names-in-st.patch | 182 ++++
 ...4-DSS2-clocks-Add-ick-as-dummy-clock.patch |  37 +
 ...2PLUS-DSS2-Add-OMAP4-Kconfig-support.patch |  57 ++
 ...SS2-Add-hwmod-device-names-for-OMAP4.patch |  58 ++
 ...ix-def_disp-module-param-description.patch |  31 +
 ...-OMAP-DSS2-Delay-regulator_get-calls.patch | 228 +++++
 ...SS2-Support-for-Samsung-LTE430WQ-F0C.patch |  51 +
 ...-a-check-for-timings-in-set_def_mode.patch |  71 ++
 ...eparate-irq-handlers-for-DISPC-and-D.patch | 491 +++++++++
 ...INTAINERS-Update-OMAP-DSS-maintainer.patch |  34 +
 ...-Enable-Display-SubSystem-as-modules.patch |  40 +
 ...171-OMAP-DSS2-Clean-up-a-switch-case.patch |  62 ++
 ...ATURES-Remove-SDI-from-3630-displays.patch |  63 ++
 ...2-FEATURES-Remove-DSI-SDI-from-OMAP2.patch |  30 +
 ...for-SDI-HW-before-accessing-SDI-regi.patch |  80 ++
 ...ding-help-for-FB_OMAP_LCD_VGA-option.patch |  38 +
 .../0176-OMAP-DSS2-Remove-unused-list.patch   |  34 +
 ...OMAP-DSS2-DSI-remove-unused-function.patch |  42 +
 ...SS2-add-opt_clock_available-in-pdata.patch |  84 ++
 ...2-Use-opt_clock_available-from-pdata.patch | 113 +++
 ...r-error-in-drivers-video-omap-lcd_24.patch |  40 +
 ...-FEATURES-DISPC-overlay-code-cleanup.patch | 233 +++++
 ...EATURES-Function-to-Provide-the-max-.patch | 190 ++++
 ...ake-members-of-dss_clk_source-generi.patch | 204 ++++
 ...se-dss-features-to-get-clock-source-.patch | 308 ++++++
 ...-DSI-Generalize-DSI-PLL-Clock-Naming.patch | 503 ++++++++++
 ...move-FB_OMAP_BOOTLOADER_INIT-support.patch | 227 +++++
 ...2-Remove-pdev-argument-from-dpi_init.patch |  61 ++
 ...ve-DPI-SDI-init-into-DSS-plat-driver.patch | 110 +++
 ...S2-Remove-unneeded-cpu_is_xxx-checks.patch |  61 ++
 ...Functions-to-request-release-DSI-VCs.patch | 164 +++
 ...quest-release-calls-in-Taal-for-DSI-.patch | 461 +++++++++
 ...-OMAP-DSS2-Fix-OMAP2_DSS_USE_DSI_PLL.patch |  60 ++
 ...DSS2-add-delay-after-enabling-clocks.patch |  37 +
 ...-dss_features-for-independent-core-c.patch |  55 ++
 ...ming-register-macro-DISPC_DIVISOR-ch.patch | 151 +++
 ...-dss_features-to-set-independent-cor.patch |  93 ++
 ...ix-omap_dispc_register_isr-fail-path.patch |  31 +
 ...pport-for-LG-Philips-LB035Q02-panel.patch} | 279 +++---
 ...MAP-DSS2-Add-DSS2-support-for-Overo.patch} | 141 +--
 .../dss2_next/0200-cleanup-after-rebase.patch | 198 ++++
 ...-dont-load-i2c-on-boards-with-nozippy.diff |  20 -
 ...pport-for-Samsung-LTE430WQ-F0C-panel.patch |  33 +-
 ...e-hsclk-in-dsi_pll_init-for-OMAP36XX.patch |   9 +-
 ...-convert-printk-KERN_INFO-to-pr_info.patch |  73 ++
 ...le-convert-printk-KERN_ERR-to-pr_err.patch |  44 +
 ...ap3-beagle-detect-new-xM-revision-B.patch} |  18 +-
 ...ap3-beagle-detect-new-xM-revision-C.patch} |  51 +-
 ...-if-rev-unknown-assume-xM-revision-C.patch |  28 +
 .../0006-omap3-beagle-add-i2c-bus2.patch      |  25 +
 ...-initial-expansionboard-infrastructu.patch |  51 +
 ...8-omap3-beagle-expansionboard-zippy.patch} |  87 +-
 ...9-omap3-beagle-expansionboard-zippy2.patch |  92 ++
 version.sh                                    |   2 +-
 72 files changed, 9536 insertions(+), 608 deletions(-)
 delete mode 100644 patches/angstrom/0043-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups-fixup.patch
 delete mode 100644 patches/beagle/0001-arm-omap-beagle-use-caps-over-wires.patch
 delete mode 100644 patches/beagle/0001-beaglexm-remove-extra-brace.patch
 create mode 100644 patches/dss2_next/0146-OMAP-3430SDP-Remove-unused-vdda_dac-supply.patch
 create mode 100644 patches/dss2_next/0147-OMAP2-3-DSS2-remove-forced-clk-disable-from-omap_dss.patch
 create mode 100644 patches/dss2_next/0148-OMAP2-3-DSS2-Build-omap_device-for-each-DSS-HWIP.patch
 create mode 100644 patches/dss2_next/0149-OMAP2-3-DSS2-DSS-create-platform_driver-move-init-ex.patch
 create mode 100644 patches/dss2_next/0150-OMAP2-3-DSS2-Move-clocks-from-core-driver-to-dss-dri.patch
 create mode 100644 patches/dss2_next/0151-OMAP2-3-DSS2-RFBI-create-platform_driver-move-init-e.patch
 create mode 100644 patches/dss2_next/0152-OMAP2-3-DSS2-DISPC-create-platform_driver-move-init-.patch
 create mode 100644 patches/dss2_next/0153-OMAP2-3-DSS2-VENC-create-platform_driver-move-init-e.patch
 create mode 100644 patches/dss2_next/0154-OMAP2-3-DSS2-DSI-create-platform_driver-move-init-ex.patch
 create mode 100644 patches/dss2_next/0155-OMAP2-3-DSS2-replace-printk-with-dev_dbg-in-init.patch
 create mode 100644 patches/dss2_next/0156-OMAP2-3-DSS2-Use-platform-device-to-get-baseaddr.patch
 create mode 100644 patches/dss2_next/0157-OMAP2-3-DSS2-Get-DSS-IRQ-from-platform-device.patch
 create mode 100644 patches/dss2_next/0158-OMAP2PLUS-clocks-Align-DSS-clock-names-and-roles.patch
 create mode 100644 patches/dss2_next/0159-OMAP2PLUS-DSS2-Generalize-naming-of-PRCM-related-clo.patch
 create mode 100644 patches/dss2_next/0160-OMAP2PLUS-DSS2-Generalize-external-clock-names-in-st.patch
 create mode 100644 patches/dss2_next/0161-OMAP4-DSS2-clocks-Add-ick-as-dummy-clock.patch
 create mode 100644 patches/dss2_next/0162-OMAP2PLUS-DSS2-Add-OMAP4-Kconfig-support.patch
 create mode 100644 patches/dss2_next/0163-OMAP4-DSS2-Add-hwmod-device-names-for-OMAP4.patch
 create mode 100644 patches/dss2_next/0164-OMAP-DSS2-Fix-def_disp-module-param-description.patch
 create mode 100644 patches/dss2_next/0165-OMAP-DSS2-Delay-regulator_get-calls.patch
 create mode 100644 patches/dss2_next/0166-OMAP-DSS2-Support-for-Samsung-LTE430WQ-F0C.patch
 create mode 100644 patches/dss2_next/0167-OMAPFB-Adding-a-check-for-timings-in-set_def_mode.patch
 create mode 100644 patches/dss2_next/0168-OMAP-DSS2-Have-separate-irq-handlers-for-DISPC-and-D.patch
 create mode 100644 patches/dss2_next/0169-MAINTAINERS-Update-OMAP-DSS-maintainer.patch
 create mode 100644 patches/dss2_next/0170-OMAP2-3-4-DSS2-Enable-Display-SubSystem-as-modules.patch
 create mode 100644 patches/dss2_next/0171-OMAP-DSS2-Clean-up-a-switch-case.patch
 create mode 100644 patches/dss2_next/0172-OMAP-DSS2-FEATURES-Remove-SDI-from-3630-displays.patch
 create mode 100644 patches/dss2_next/0173-OMAP-DSS2-FEATURES-Remove-DSI-SDI-from-OMAP2.patch
 create mode 100644 patches/dss2_next/0174-OMAP-DSS2-Check-for-SDI-HW-before-accessing-SDI-regi.patch
 create mode 100644 patches/dss2_next/0175-OMAP-OMAPFB-Adding-help-for-FB_OMAP_LCD_VGA-option.patch
 create mode 100644 patches/dss2_next/0176-OMAP-DSS2-Remove-unused-list.patch
 create mode 100644 patches/dss2_next/0177-OMAP-DSS2-DSI-remove-unused-function.patch
 create mode 100644 patches/dss2_next/0178-OMAP2PLUS-DSS2-add-opt_clock_available-in-pdata.patch
 create mode 100644 patches/dss2_next/0179-OMAP2PLUS-DSS2-Use-opt_clock_available-from-pdata.patch
 create mode 100644 patches/dss2_next/0180-omapfb-Fix-linker-error-in-drivers-video-omap-lcd_24.patch
 create mode 100644 patches/dss2_next/0181-OMAP2PLUS-DSS2-FEATURES-DISPC-overlay-code-cleanup.patch
 create mode 100644 patches/dss2_next/0182-OMAP2PLUS-DSS2-FEATURES-Function-to-Provide-the-max-.patch
 create mode 100644 patches/dss2_next/0183-OMAP2PLUS-DSS2-Make-members-of-dss_clk_source-generi.patch
 create mode 100644 patches/dss2_next/0184-OMAP2PLUS-DSS2-Use-dss-features-to-get-clock-source-.patch
 create mode 100644 patches/dss2_next/0185-OMAP2PLUS-DSS2-DSI-Generalize-DSI-PLL-Clock-Naming.patch
 create mode 100644 patches/dss2_next/0186-OMAP-DSS2-Remove-FB_OMAP_BOOTLOADER_INIT-support.patch
 create mode 100644 patches/dss2_next/0187-OMAP-DSS2-Remove-pdev-argument-from-dpi_init.patch
 create mode 100644 patches/dss2_next/0188-OMAP-DSS2-Move-DPI-SDI-init-into-DSS-plat-driver.patch
 create mode 100644 patches/dss2_next/0189-OMAP-DSS2-Remove-unneeded-cpu_is_xxx-checks.patch
 create mode 100644 patches/dss2_next/0190-OMAP-DSS2-Functions-to-request-release-DSI-VCs.patch
 create mode 100644 patches/dss2_next/0191-OMAP-DSS2-Use-request-release-calls-in-Taal-for-DSI-.patch
 create mode 100644 patches/dss2_next/0192-HACK-OMAP-DSS2-Fix-OMAP2_DSS_USE_DSI_PLL.patch
 create mode 100644 patches/dss2_next/0193-HACK-OMAP-DSS2-add-delay-after-enabling-clocks.patch
 create mode 100644 patches/dss2_next/0194-OMAP-DSS2-Adding-dss_features-for-independent-core-c.patch
 create mode 100644 patches/dss2_next/0195-OMAP-DSS2-Renaming-register-macro-DISPC_DIVISOR-ch.patch
 create mode 100644 patches/dss2_next/0196-OMAP4-DSS2-Using-dss_features-to-set-independent-cor.patch
 create mode 100644 patches/dss2_next/0197-OMAP-DSS2-fix-omap_dispc_register_isr-fail-path.patch
 rename patches/{sakoman/2.6.38/0017-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch => dss2_next/0198-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch} (57%)
 rename patches/{sakoman/2.6.38/0018-OMAP-DSS2-Add-DSS2-support-for-Overo.patch => dss2_next/0199-OMAP-DSS2-Add-DSS2-support-for-Overo.patch} (75%)
 create mode 100644 patches/dss2_next/0200-cleanup-after-rebase.patch
 delete mode 100644 patches/rcn/beagle-zippy-dont-load-i2c-on-boards-with-nozippy.diff
 rename patches/sakoman/{2.6.35 => 2.6.39}/0028-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch (79%)
 create mode 100644 patches/wip_to_be_pushed/0001-omap3-beagle-convert-printk-KERN_INFO-to-pr_info.patch
 create mode 100644 patches/wip_to_be_pushed/0002-omap3-beagle-convert-printk-KERN_ERR-to-pr_err.patch
 rename patches/{beagle/0001-omap-Beagle-detect-new-xM-revision-B.patch => wip_to_be_pushed/0003-omap3-beagle-detect-new-xM-revision-B.patch} (70%)
 rename patches/{beagle/0001-beagleboard-hack-in-support-from-xM-rev-C-from-Koen.patch => wip_to_be_pushed/0004-omap3-beagle-detect-new-xM-revision-C.patch} (57%)
 create mode 100644 patches/wip_to_be_pushed/0005-omap3-beagle-if-rev-unknown-assume-xM-revision-C.patch
 create mode 100644 patches/wip_to_be_pushed/0006-omap3-beagle-add-i2c-bus2.patch
 create mode 100644 patches/wip_to_be_pushed/0007-omap3-beagle-add-initial-expansionboard-infrastructu.patch
 rename patches/{angstrom/0003-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board-fixup.patch => wip_to_be_pushed/0008-omap3-beagle-expansionboard-zippy.patch} (53%)
 create mode 100644 patches/wip_to_be_pushed/0009-omap3-beagle-expansionboard-zippy2.patch

diff --git a/patch.sh b/patch.sh
index 8818838aa..c13891248 100644
--- a/patch.sh
+++ b/patch.sh
@@ -5,7 +5,7 @@ echo "Starting patch.sh"
 
 function git_add {
 git add .
-git commit -a -m 'Testing patchset'
+git commit -a -m 'testing patchset'
 }
 
 function bugs_trivial {
@@ -283,6 +283,142 @@ patch -s -p1 < "${DIR}/patches/for_next/0001-merge-changes-missed-in-rebase.patc
 
 }
 
+function dss2_next {
+echo "dss2 from for-next"
+
+patch -s -p1 < "${DIR}/patches/dss2_next/0146-OMAP-3430SDP-Remove-unused-vdda_dac-supply.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0147-OMAP2-3-DSS2-remove-forced-clk-disable-from-omap_dss.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0148-OMAP2-3-DSS2-Build-omap_device-for-each-DSS-HWIP.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0149-OMAP2-3-DSS2-DSS-create-platform_driver-move-init-ex.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0150-OMAP2-3-DSS2-Move-clocks-from-core-driver-to-dss-dri.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0151-OMAP2-3-DSS2-RFBI-create-platform_driver-move-init-e.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0152-OMAP2-3-DSS2-DISPC-create-platform_driver-move-init-.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0153-OMAP2-3-DSS2-VENC-create-platform_driver-move-init-e.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0154-OMAP2-3-DSS2-DSI-create-platform_driver-move-init-ex.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0155-OMAP2-3-DSS2-replace-printk-with-dev_dbg-in-init.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0156-OMAP2-3-DSS2-Use-platform-device-to-get-baseaddr.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0157-OMAP2-3-DSS2-Get-DSS-IRQ-from-platform-device.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0158-OMAP2PLUS-clocks-Align-DSS-clock-names-and-roles.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0159-OMAP2PLUS-DSS2-Generalize-naming-of-PRCM-related-clo.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0160-OMAP2PLUS-DSS2-Generalize-external-clock-names-in-st.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0161-OMAP4-DSS2-clocks-Add-ick-as-dummy-clock.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0162-OMAP2PLUS-DSS2-Add-OMAP4-Kconfig-support.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0163-OMAP4-DSS2-Add-hwmod-device-names-for-OMAP4.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0164-OMAP-DSS2-Fix-def_disp-module-param-description.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0165-OMAP-DSS2-Delay-regulator_get-calls.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0166-OMAP-DSS2-Support-for-Samsung-LTE430WQ-F0C.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0167-OMAPFB-Adding-a-check-for-timings-in-set_def_mode.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0168-OMAP-DSS2-Have-separate-irq-handlers-for-DISPC-and-D.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0169-MAINTAINERS-Update-OMAP-DSS-maintainer.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0170-OMAP2-3-4-DSS2-Enable-Display-SubSystem-as-modules.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0171-OMAP-DSS2-Clean-up-a-switch-case.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0172-OMAP-DSS2-FEATURES-Remove-SDI-from-3630-displays.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0173-OMAP-DSS2-FEATURES-Remove-DSI-SDI-from-OMAP2.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0174-OMAP-DSS2-Check-for-SDI-HW-before-accessing-SDI-regi.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0175-OMAP-OMAPFB-Adding-help-for-FB_OMAP_LCD_VGA-option.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0176-OMAP-DSS2-Remove-unused-list.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0177-OMAP-DSS2-DSI-remove-unused-function.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0178-OMAP2PLUS-DSS2-add-opt_clock_available-in-pdata.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0179-OMAP2PLUS-DSS2-Use-opt_clock_available-from-pdata.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0180-omapfb-Fix-linker-error-in-drivers-video-omap-lcd_24.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0181-OMAP2PLUS-DSS2-FEATURES-DISPC-overlay-code-cleanup.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0182-OMAP2PLUS-DSS2-FEATURES-Function-to-Provide-the-max-.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0183-OMAP2PLUS-DSS2-Make-members-of-dss_clk_source-generi.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0184-OMAP2PLUS-DSS2-Use-dss-features-to-get-clock-source-.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0185-OMAP2PLUS-DSS2-DSI-Generalize-DSI-PLL-Clock-Naming.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0186-OMAP-DSS2-Remove-FB_OMAP_BOOTLOADER_INIT-support.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0187-OMAP-DSS2-Remove-pdev-argument-from-dpi_init.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0188-OMAP-DSS2-Move-DPI-SDI-init-into-DSS-plat-driver.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0189-OMAP-DSS2-Remove-unneeded-cpu_is_xxx-checks.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0190-OMAP-DSS2-Functions-to-request-release-DSI-VCs.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0191-OMAP-DSS2-Use-request-release-calls-in-Taal-for-DSI-.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0192-HACK-OMAP-DSS2-Fix-OMAP2_DSS_USE_DSI_PLL.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0193-HACK-OMAP-DSS2-add-delay-after-enabling-clocks.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0194-OMAP-DSS2-Adding-dss_features-for-independent-core-c.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0195-OMAP-DSS2-Renaming-register-macro-DISPC_DIVISOR-ch.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0196-OMAP4-DSS2-Using-dss_features-to-set-independent-cor.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0197-OMAP-DSS2-fix-omap_dispc_register_isr-fail-path.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0198-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch"
+patch -s -p1 < "${DIR}/patches/dss2_next/0199-OMAP-DSS2-Add-DSS2-support-for-Overo.patch"
+
+#patch -s -p1 < "${DIR}/patches/dss2_next/0200-cleanup-after-rebase.patch"
+
+}
+
+function dspbridge_next {
+echo "dspbridge from for-next"
+
+patch -s -p1 < "${DIR}/patches/dspbridge/0001-staging-tidspbridge-make-sync_wait_on_event-interrup.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0002-staging-tidspbridge-overwrite-DSP-error-codes.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0003-staging-tidspbridge-Eliminate-direct-manipulation-of.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0004-staging-tidspbridge-fix-mgr_enum_node_info.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0005-staging-tidspbridge-mgr_enum_node_info-cleanup.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0006-staging-tidspbridge-fix-kernel-oops-in-bridge_io_get.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0007-staging-tidspbridge-remove-gs-memory-allocator.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0008-staging-tidspbridge-remove-utildefs.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0009-staging-tidspbridge-switch-to-linux-bitmap-API.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0010-staging-tidspbridge-remove-gb-bitmap-implementation.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0011-staging-tidspbridge-convert-core-to-list_head.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0012-staging-tidspbridge-convert-pmgr-to-list_head.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0013-staging-tidspbridge-convert-rmgr-to-list_head.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0014-staging-tidspbridge-remove-custom-linked-list.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0015-staging-tidspbridge-core-code-cleanup.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0016-staging-tidspbridge-pmgr-code-cleanup.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0017-staging-tidspbridge-use-the-right-type-for-list_is_l.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0018-staging-tidspbridge-rmgr-node.c-code-cleanup.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0019-staging-tidspbridge-Fix-atoi-to-support-hexadecimal-.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0020-staging-tidspbridge-Remove-unused-defined-constants.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0021-staging-tidspbridge-Remove-unused-functions.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0022-staging-tidspbridge-Remove-unused-structs.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0023-staging-tidspbridge-Remove-unused-typedefs.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0024-staging-tidspbridge-Remove-trivial-header-files.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0025-staging-tidspbridge-remove-code-referred-by-OPT_ZERO.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0026-staging-tidspbridge-set1-remove-hungarian-from-struc.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0027-staging-tidspbridge-set2-remove-hungarian-from-struc.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0028-staging-tidspbridge-set3-remove-hungarian-from-struc.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0029-staging-tidspbridge-set4-remove-hungarian-from-struc.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0030-staging-tidspbridge-set5-remove-hungarian-from-struc.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0031-staging-tidspbridge-set6-remove-hungarian-from-struc.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0032-staging-tidspbridge-set7-remove-hungarian-from-struc.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0033-staging-tidspbridge-set8-remove-hungarian-from-struc.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0034-staging-tidspbridge-set9-remove-hungarian-from-struc.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0035-staging-tidspbridge-set10-remove-hungarian-from-stru.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0036-staging-tidspbridge-set11-remove-hungarian-from-stru.patch"
+patch -s -p1 < "${DIR}/patches/dspbridge/0037-staging-tidspbridge-set12-remove-hungarian-from-stru.patch"
+
+}
+
+function wip_to_be_pushed_git  {
+echo "wip patches for mainline"
+
+git_add
+git am "${DIR}/patches/wip_to_be_pushed/0001-omap3-beagle-convert-printk-KERN_INFO-to-pr_info.patch"
+git am "${DIR}/patches/wip_to_be_pushed/0002-omap3-beagle-convert-printk-KERN_ERR-to-pr_err.patch"
+git am "${DIR}/patches/wip_to_be_pushed/0003-omap3-beagle-detect-new-xM-revision-B.patch"
+git am "${DIR}/patches/wip_to_be_pushed/0004-omap3-beagle-detect-new-xM-revision-C.patch"
+git am "${DIR}/patches/wip_to_be_pushed/0005-omap3-beagle-if-rev-unknown-assume-xM-revision-C.patch"
+git am "${DIR}/patches/wip_to_be_pushed/0006-omap3-beagle-add-i2c-bus2.patch"
+git am "${DIR}/patches/wip_to_be_pushed/0007-omap3-beagle-add-initial-expansionboard-infrastructu.patch"
+git am "${DIR}/patches/wip_to_be_pushed/0008-omap3-beagle-expansionboard-zippy.patch"
+git am "${DIR}/patches/wip_to_be_pushed/0009-omap3-beagle-expansionboard-zippy2.patch"
+
+}
+
+function wip_to_be_pushed  {
+echo "wip patches for mainline"
+
+patch -s -p1 < "${DIR}/patches/wip_to_be_pushed/0001-omap3-beagle-convert-printk-KERN_INFO-to-pr_info.patch"
+patch -s -p1 < "${DIR}/patches/wip_to_be_pushed/0002-omap3-beagle-convert-printk-KERN_ERR-to-pr_err.patch"
+patch -s -p1 < "${DIR}/patches/wip_to_be_pushed/0003-omap3-beagle-detect-new-xM-revision-B.patch"
+patch -s -p1 < "${DIR}/patches/wip_to_be_pushed/0004-omap3-beagle-detect-new-xM-revision-C.patch"
+patch -s -p1 < "${DIR}/patches/wip_to_be_pushed/0005-omap3-beagle-if-rev-unknown-assume-xM-revision-C.patch"
+patch -s -p1 < "${DIR}/patches/wip_to_be_pushed/0006-omap3-beagle-add-i2c-bus2.patch"
+patch -s -p1 < "${DIR}/patches/wip_to_be_pushed/0007-omap3-beagle-add-initial-expansionboard-infrastructu.patch"
+patch -s -p1 < "${DIR}/patches/wip_to_be_pushed/0008-omap3-beagle-expansionboard-zippy.patch"
+patch -s -p1 < "${DIR}/patches/wip_to_be_pushed/0009-omap3-beagle-expansionboard-zippy2.patch"
+
+}
+
 function sakoman {
 echo "sakoman's patches"
 
@@ -299,16 +435,12 @@ patch -s -p1 < "${DIR}/patches/sakoman/2.6.38/0013-MFD-add-twl4030-madc-driver.p
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0014-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0015-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0016-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.38/0017-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch"
-
-#fixme pull in dss2 tree..
-#patch -s -p1 < "${DIR}/patches/sakoman/2.6.38/0018-OMAP-DSS2-Add-DSS2-support-for-Overo.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0019-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0020-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0021-RTC-add-support-for-backup-battery-recharge.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0026-ARM-OMAP-Add-macros-for-comparing-silicon-revision.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0027-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0028-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch"
+patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0028-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.38/0030-Revert-Input-ads7846-add-regulator-support.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.35/0031-Revert-omap2_mcspi-Flush-posted-writes.patch"
 
@@ -337,31 +469,27 @@ patch -s -p1 < "${DIR}/patches/micrel/linux-2.6.35/18_ksz8851_2.6.35.patch"
 
 }
 
-function zippy {
-echo "zippy support"
-patch -s -p1 < "${DIR}/patches/angstrom/0003-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board-fixup.patch"
-patch -s -p1 < "${DIR}/patches/angstrom/0043-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups-fixup.patch"
-patch -s -p1 < "${DIR}/patches/rcn/beagle-zippy-dont-load-i2c-on-boards-with-nozippy.diff"
-
-#needed for 2.6.36-git7 + local patchset
-patch -s -p1 < "${DIR}/patches/beagle/0001-arm-omap-beagle-use-caps-over-wires.patch"
-patch -s -p1 < "${DIR}/patches/beagle/0001-omap3-beaglexm-fix-DVI-initialization.patch"
-patch -s -p1 < "${DIR}/patches/beagle/0001-beaglexm-fix-DVI-updated-for-xMC.patch"
-patch -s -p1 < "${DIR}/patches/beagle/0001-beaglexm-remove-extra-brace.patch"
-
-}
-
 function beagle {
 echo "beagle patches"
-patch -s -p1 < "${DIR}/patches/beagle/0001-omap-Beagle-detect-new-xM-revision-B.patch"
 patch -s -p1 < "${DIR}/patches/arago-project/0001-omap3-Increase-limit-on-bootarg-mpurate.patch"
+patch -s -p1 < "${DIR}/patches/beagle/0001-omap-mmc-Adjust-dto-to-eliminate-timeout-errors.patch"
 
 #disabled in for_next merge
 #patch -s -p1 < "${DIR}/patches/beagle/0001-xM-audio-fix-from-Ashok.patch"
 
-patch -s -p1 < "${DIR}/patches/beagle/0001-omap-mmc-Adjust-dto-to-eliminate-timeout-errors.patch"
-patch -s -p1 < "${DIR}/patches/beagle/0001-beagleboard-hack-in-support-from-xM-rev-C-from-Koen.patch"
+#need more work
+#patch -s -p1 < "${DIR}/patches/beagle/0001-omap3-beaglexm-fix-DVI-initialization.patch"
+#patch -s -p1 < "${DIR}/patches/beagle/0001-beaglexm-fix-DVI-updated-for-xMC.patch"
+
+}
 
+function igepv2 {
+echo "igepv2 board related patches"
+}
+
+function devkit8000 {
+echo "devkit8000"
+patch -s -p1 < "${DIR}/patches/devkit8000/0001-arm-omap-devkit8000-for-lcd-use-samsung_lte_panel-2.6.37-git10.patch"
 }
 
 function touchbook {
@@ -370,6 +498,45 @@ patch -s -p1 < "${DIR}/patches/touchbook/0001-omap3-touchbook-remove-mmc-gpio_wp
 patch -s -p1 < "${DIR}/patches/touchbook/0002-omap3-touchbook-drop-u-boot-readonly.patch"
 patch -s -p1 < "${DIR}/patches/touchbook/0003-omap3-touchbook-fix-ehci.patch"
 #patch -s -p1 < "${DIR}/patches/touchbook/0004-omap3-touchbook-tesing-lcd-display.patch"
+}
+
+function omap4 {
+echo "omap4 related patches"
+
+#panda display from: http://dev.omapzoom.org/?p=anand/linux-omap-usb.git;a=shortlog;h=refs/heads/display-patches-for-v2.6.38-rc4
+patch -s -p1 < "${DIR}/patches/panda/0001-OMAP2-3-DSS2-remove-forced-clk-disable-from-omap_dss.patch"
+patch -s -p1 < "${DIR}/patches/panda/0005-OMAP2-3-DSS2-Change-driver-name-to-omap_display.patch"
+patch -s -p1 < "${DIR}/patches/panda/0006-OMAP2-3-DSS2-Use-Regulator-init-with-driver-name.patch"
+patch -s -p1 < "${DIR}/patches/panda/0007-OMAP2-3-DSS2-Create-new-file-display.c-for-central-d.patch"
+patch -s -p1 < "${DIR}/patches/panda/0009-OMAP2-3-DSS2-Build-omap_device-for-each-DSS-HWIP.patch"
+patch -s -p1 < "${DIR}/patches/panda/0010-OMAP2-3-DSS2-DSS-create-platform_driver-move-init-ex.patch"
+patch -s -p1 < "${DIR}/patches/panda/0011-OMAP2-3-DSS2-Move-clocks-from-core-driver-to-dss-dri.patch"
+patch -s -p1 < "${DIR}/patches/panda/0012-OMAP2-3-DSS2-RFBI-create-platform_driver-move-init-e.patch"
+patch -s -p1 < "${DIR}/patches/panda/0013-OMAP2-3-DSS2-DISPC-create-platform_driver-move-init-.patch"
+patch -s -p1 < "${DIR}/patches/panda/0014-OMAP2-3-DSS2-VENC-create-platform_driver-move-init-e.patch"
+patch -s -p1 < "${DIR}/patches/panda/0015-OMAP2-3-DSS2-DSI-create-platform_driver-move-init-ex.patch"
+patch -s -p1 < "${DIR}/patches/panda/0016-OMAP2-3-DSS2-replace-printk-with-dev_dbg-in-init.patch"
+patch -s -p1 < "${DIR}/patches/panda/0017-OMAP2-3-DSS2-Use-platform-device-to-get-baseaddr.patch"
+patch -s -p1 < "${DIR}/patches/panda/0018-OMAP2-3-DSS2-Get-DSS-IRQ-from-platform-device.patch"
+patch -s -p1 < "${DIR}/patches/panda/0019-OMAP2PLUS-clocks-Align-DSS-clock-names-and-roles.patch"
+
+#the omap36xx dpi.c change from steve really needs to upstream..
+patch -s -p1 < "${DIR}/patches/panda/0020-OMAP2PLUS-DSS2-Generalize-naming-of-PRCM-related-clo-fixup.patch"
+
+patch -s -p1 < "${DIR}/patches/panda/0021-OMAP2PLUS-DSS2-Generalize-external-clock-names-in-st.patch"
+patch -s -p1 < "${DIR}/patches/panda/0022-OMAP4-DSS2-clocks-Add-ick-as-dummy-clock.patch"
+patch -s -p1 < "${DIR}/patches/panda/0023-OMAP2PLUS-DSS2-Add-OMAP4-Kconfig-support.patch"
+patch -s -p1 < "${DIR}/patches/panda/0025-OMAP4-DSS2-Add-hwmod-device-names-for-OMAP4.patch"
+patch -s -p1 < "${DIR}/patches/panda/0026-OMAP-DSS2-Common-IRQ-handler-for-all-OMAPs.patch"
+patch -s -p1 < "${DIR}/patches/panda/0027-OMAP-DSS2-Add-dss_feature-for-variable-DPLL-fclk.patch"
+patch -s -p1 < "${DIR}/patches/panda/0028-OMAP-DSS-Renaming-the-dpll-clk-pointer-in-struct-dss.patch"
+patch -s -p1 < "${DIR}/patches/panda/0029-OMAP-DSS2-Using-dss_features-to-clean-cpu-checks-for.patch"
+patch -s -p1 < "${DIR}/patches/panda/0030-OMAP-DSS2-Get-OMAP4-DPLL-fclk-for-DPI-interface.patch"
+patch -s -p1 < "${DIR}/patches/panda/0031-OMAP-DSS2-Adding-dss_features-for-independent-core-c.patch"
+patch -s -p1 < "${DIR}/patches/panda/0032-OMAP-DSS2-Renaming-register-macro-DISPC_DIVISOR-ch.patch"
+patch -s -p1 < "${DIR}/patches/panda/0033-OMAP-DSS2-Adding-macro-for-DISPC_DIVISOR-register.patch"
+patch -s -p1 < "${DIR}/patches/panda/0034-OMAP4-DSS2-Using-dss_features-to-set-independent-cor.patch"
+patch -s -p1 < "${DIR}/patches/panda/0035-OMAP4-PandaBoard-Adding-DVI-support.patch"
 
 }
 
@@ -431,100 +598,6 @@ patch -s -p1 < "${DIR}/patches/sgx/0001-OMAP3-SGX-TI-4.00.00.01-2.6.38-rc3-_cons
 
 }
 
-function omap4 {
-echo "omap4 related patches"
-
-#panda display from: http://dev.omapzoom.org/?p=anand/linux-omap-usb.git;a=shortlog;h=refs/heads/display-patches-for-v2.6.38-rc4
-patch -s -p1 < "${DIR}/patches/panda/0001-OMAP2-3-DSS2-remove-forced-clk-disable-from-omap_dss.patch"
-patch -s -p1 < "${DIR}/patches/panda/0005-OMAP2-3-DSS2-Change-driver-name-to-omap_display.patch"
-patch -s -p1 < "${DIR}/patches/panda/0006-OMAP2-3-DSS2-Use-Regulator-init-with-driver-name.patch"
-patch -s -p1 < "${DIR}/patches/panda/0007-OMAP2-3-DSS2-Create-new-file-display.c-for-central-d.patch"
-patch -s -p1 < "${DIR}/patches/panda/0009-OMAP2-3-DSS2-Build-omap_device-for-each-DSS-HWIP.patch"
-patch -s -p1 < "${DIR}/patches/panda/0010-OMAP2-3-DSS2-DSS-create-platform_driver-move-init-ex.patch"
-patch -s -p1 < "${DIR}/patches/panda/0011-OMAP2-3-DSS2-Move-clocks-from-core-driver-to-dss-dri.patch"
-patch -s -p1 < "${DIR}/patches/panda/0012-OMAP2-3-DSS2-RFBI-create-platform_driver-move-init-e.patch"
-patch -s -p1 < "${DIR}/patches/panda/0013-OMAP2-3-DSS2-DISPC-create-platform_driver-move-init-.patch"
-patch -s -p1 < "${DIR}/patches/panda/0014-OMAP2-3-DSS2-VENC-create-platform_driver-move-init-e.patch"
-patch -s -p1 < "${DIR}/patches/panda/0015-OMAP2-3-DSS2-DSI-create-platform_driver-move-init-ex.patch"
-patch -s -p1 < "${DIR}/patches/panda/0016-OMAP2-3-DSS2-replace-printk-with-dev_dbg-in-init.patch"
-patch -s -p1 < "${DIR}/patches/panda/0017-OMAP2-3-DSS2-Use-platform-device-to-get-baseaddr.patch"
-patch -s -p1 < "${DIR}/patches/panda/0018-OMAP2-3-DSS2-Get-DSS-IRQ-from-platform-device.patch"
-patch -s -p1 < "${DIR}/patches/panda/0019-OMAP2PLUS-clocks-Align-DSS-clock-names-and-roles.patch"
-
-#the omap36xx dpi.c change from steve really needs to upstream..
-patch -s -p1 < "${DIR}/patches/panda/0020-OMAP2PLUS-DSS2-Generalize-naming-of-PRCM-related-clo-fixup.patch"
-
-patch -s -p1 < "${DIR}/patches/panda/0021-OMAP2PLUS-DSS2-Generalize-external-clock-names-in-st.patch"
-patch -s -p1 < "${DIR}/patches/panda/0022-OMAP4-DSS2-clocks-Add-ick-as-dummy-clock.patch"
-patch -s -p1 < "${DIR}/patches/panda/0023-OMAP2PLUS-DSS2-Add-OMAP4-Kconfig-support.patch"
-patch -s -p1 < "${DIR}/patches/panda/0025-OMAP4-DSS2-Add-hwmod-device-names-for-OMAP4.patch"
-patch -s -p1 < "${DIR}/patches/panda/0026-OMAP-DSS2-Common-IRQ-handler-for-all-OMAPs.patch"
-patch -s -p1 < "${DIR}/patches/panda/0027-OMAP-DSS2-Add-dss_feature-for-variable-DPLL-fclk.patch"
-patch -s -p1 < "${DIR}/patches/panda/0028-OMAP-DSS-Renaming-the-dpll-clk-pointer-in-struct-dss.patch"
-patch -s -p1 < "${DIR}/patches/panda/0029-OMAP-DSS2-Using-dss_features-to-clean-cpu-checks-for.patch"
-patch -s -p1 < "${DIR}/patches/panda/0030-OMAP-DSS2-Get-OMAP4-DPLL-fclk-for-DPI-interface.patch"
-patch -s -p1 < "${DIR}/patches/panda/0031-OMAP-DSS2-Adding-dss_features-for-independent-core-c.patch"
-patch -s -p1 < "${DIR}/patches/panda/0032-OMAP-DSS2-Renaming-register-macro-DISPC_DIVISOR-ch.patch"
-patch -s -p1 < "${DIR}/patches/panda/0033-OMAP-DSS2-Adding-macro-for-DISPC_DIVISOR-register.patch"
-patch -s -p1 < "${DIR}/patches/panda/0034-OMAP4-DSS2-Using-dss_features-to-set-independent-cor.patch"
-patch -s -p1 < "${DIR}/patches/panda/0035-OMAP4-PandaBoard-Adding-DVI-support.patch"
-
-}
-
-function igepv2 {
-echo "igepv2 board related patches"
-}
-
-function devkit8000 {
-echo "devkit8000"
-
-patch -s -p1 < "${DIR}/patches/devkit8000/0001-arm-omap-devkit8000-for-lcd-use-samsung_lte_panel-2.6.37-git10.patch"
-
-}
-
-function dspbridge {
-echo "dspbridge from staging"
-
-patch -s -p1 < "${DIR}/patches/dspbridge/0001-staging-tidspbridge-make-sync_wait_on_event-interrup.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0002-staging-tidspbridge-overwrite-DSP-error-codes.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0003-staging-tidspbridge-Eliminate-direct-manipulation-of.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0004-staging-tidspbridge-fix-mgr_enum_node_info.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0005-staging-tidspbridge-mgr_enum_node_info-cleanup.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0006-staging-tidspbridge-fix-kernel-oops-in-bridge_io_get.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0007-staging-tidspbridge-remove-gs-memory-allocator.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0008-staging-tidspbridge-remove-utildefs.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0009-staging-tidspbridge-switch-to-linux-bitmap-API.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0010-staging-tidspbridge-remove-gb-bitmap-implementation.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0011-staging-tidspbridge-convert-core-to-list_head.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0012-staging-tidspbridge-convert-pmgr-to-list_head.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0013-staging-tidspbridge-convert-rmgr-to-list_head.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0014-staging-tidspbridge-remove-custom-linked-list.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0015-staging-tidspbridge-core-code-cleanup.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0016-staging-tidspbridge-pmgr-code-cleanup.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0017-staging-tidspbridge-use-the-right-type-for-list_is_l.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0018-staging-tidspbridge-rmgr-node.c-code-cleanup.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0019-staging-tidspbridge-Fix-atoi-to-support-hexadecimal-.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0020-staging-tidspbridge-Remove-unused-defined-constants.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0021-staging-tidspbridge-Remove-unused-functions.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0022-staging-tidspbridge-Remove-unused-structs.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0023-staging-tidspbridge-Remove-unused-typedefs.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0024-staging-tidspbridge-Remove-trivial-header-files.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0025-staging-tidspbridge-remove-code-referred-by-OPT_ZERO.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0026-staging-tidspbridge-set1-remove-hungarian-from-struc.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0027-staging-tidspbridge-set2-remove-hungarian-from-struc.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0028-staging-tidspbridge-set3-remove-hungarian-from-struc.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0029-staging-tidspbridge-set4-remove-hungarian-from-struc.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0030-staging-tidspbridge-set5-remove-hungarian-from-struc.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0031-staging-tidspbridge-set6-remove-hungarian-from-struc.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0032-staging-tidspbridge-set7-remove-hungarian-from-struc.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0033-staging-tidspbridge-set8-remove-hungarian-from-struc.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0034-staging-tidspbridge-set9-remove-hungarian-from-struc.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0035-staging-tidspbridge-set10-remove-hungarian-from-stru.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0036-staging-tidspbridge-set11-remove-hungarian-from-stru.patch"
-patch -s -p1 < "${DIR}/patches/dspbridge/0037-staging-tidspbridge-set12-remove-hungarian-from-stru.patch"
-
-}
-
 function dvfs {
 echo "dvfs"
 
@@ -583,18 +656,32 @@ patch -s -p1 < "${DIR}/patches/dvfs/0001-omap3-Add-basic-support-for-720MHz-part
 }
 
 bugs_trivial
+
+#for_next tree's
 for_next
+dss2_next
+dspbridge_next
+
+#work in progress
+#wip_to_be_pushed_git
+wip_to_be_pushed
+
+#external tree's
 sakoman
-beagle
-touchbook
 musb
 micrel
-zippy
-sgx
+
+#random board patches
+beagle
 igepv2
-omap4
 devkit8000
-dspbridge
+touchbook
+
+#omap4
+
+#no chance of being pushed ever tree's
+sgx
+
 #dvfs
 
 echo "patch.sh ran successful"
diff --git a/patches/angstrom/0043-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups-fixup.patch b/patches/angstrom/0043-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups-fixup.patch
deleted file mode 100644
index a2564dbfe..000000000
--- a/patches/angstrom/0043-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups-fixup.patch
+++ /dev/null
@@ -1,157 +0,0 @@
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index c9c5bbb..435d067 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -54,6 +54,8 @@
- 
- #define NAND_BLOCK_SIZE		SZ_128K
- 
-+char expansionboard_name[16];
-+
- #if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE)
- 
- #include <plat/mcspi.h>
-@@ -66,7 +68,7 @@ static struct omap2_mcspi_device_config enc28j60_spi_chip_info = {
- 	.single_channel	= 1,	/* 0: slave, 1: master */
- };
- 
--static struct spi_board_info omap3beagle_spi_board_info[] __initdata = {
-+static struct spi_board_info omap3beagle_zippy_spi_board_info[] __initdata = {
- 	{
- 		.modalias		= "enc28j60",
- 		.bus_num		= 4,
-@@ -81,21 +83,62 @@ static void __init omap3beagle_enc28j60_init(void)
- 	if ((gpio_request(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, "ENC28J60_IRQ") == 0) &&
- 	    (gpio_direction_input(OMAP3BEAGLE_GPIO_ENC28J60_IRQ) == 0)) {
- 		gpio_export(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, 0);
--		omap3beagle_spi_board_info[0].irq	= OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
--		set_irq_type(omap3beagle_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
-+		omap3beagle_zippy_spi_board_info[0].irq	= OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
-+		set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
- 	} else {
- 		printk(KERN_ERR "could not obtain gpio for ENC28J60_IRQ\n");
- 		return;
- 	}
- 
--	spi_register_board_info(omap3beagle_spi_board_info,
--			ARRAY_SIZE(omap3beagle_spi_board_info));
-+	spi_register_board_info(omap3beagle_zippy_spi_board_info,
-+			ARRAY_SIZE(omap3beagle_zippy_spi_board_info));
- }
- 
- #else
- static inline void __init omap3beagle_enc28j60_init(void) { return; }
- #endif
- 
-+#if defined(CONFIG_KS8851) || defined(CONFIG_KS8851_MODULE)
-+
-+#include <plat/mcspi.h>
-+#include <linux/spi/spi.h>
-+
-+#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157
-+
-+static struct omap2_mcspi_device_config ks8851_spi_chip_info = {
-+	.turbo_mode	= 0,
-+	.single_channel	= 1,	/* 0: slave, 1: master */
-+};
-+
-+static struct spi_board_info omap3beagle_zippy2_spi_board_info[] __initdata = {
-+	{
-+		.modalias		= "ks8851",
-+		.bus_num		= 4,
-+		.chip_select		= 0,
-+		.max_speed_hz		= 36000000,
-+		.controller_data	= &ks8851_spi_chip_info,
-+	},
-+};
-+
-+static void __init omap3beagle_ks8851_init(void)
-+{
-+	if ((gpio_request(OMAP3BEAGLE_GPIO_KS8851_IRQ, "KS8851_IRQ") == 0) &&
-+	    (gpio_direction_input(OMAP3BEAGLE_GPIO_KS8851_IRQ) == 0)) {
-+		gpio_export(OMAP3BEAGLE_GPIO_KS8851_IRQ, 0);
-+		omap3beagle_zippy2_spi_board_info[0].irq	= OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_KS8851_IRQ);
-+		set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
-+	} else {
-+		printk(KERN_ERR "could not obtain gpio for KS8851_IRQ\n");
-+		return;
-+	}
-+	
-+	spi_register_board_info(omap3beagle_zippy2_spi_board_info,
-+							ARRAY_SIZE(omap3beagle_zippy2_spi_board_info));
-+}
-+
-+#else
-+static inline void __init omap3beagle_ks8851_init(void) { return; }
-+#endif
- 
- static struct mtd_partition omap3beagle_nand_partitions[] = {
- 	/* All the partition sizes are listed in terms of NAND block size */
-@@ -233,8 +276,6 @@ static struct omap2_hsmmc_info mmc[] = {
- 	{
- 		.mmc		= 2,
- 		.wires		= 4,
--		.gpio_wp	= 141,
--		.gpio_cd	= 162,
- 		.transceiver	= true,
- 		.ocr_mask	= 0x00100000,	/* 3.3V */
- 	},
-@@ -523,7 +564,7 @@ static void __init omap3beagle_flash_init(void)
- 	}
- }
- 
--static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
-+static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
- 
- 	.port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
- 	.port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
-@@ -549,6 +590,15 @@ static struct omap_musb_board_data musb_board_data = {
- 	.power			= 100,
- };
- 
-+static int __init expansionboard_setup(char *str)
-+{
-+	if (!str)
-+		return -EINVAL;
-+	strncpy(expansionboard_name, str, 16);
-+	printk(KERN_INFO "Beagle expansionboard: %s\n", expansionboard_name);
-+	return 0;
-+}
-+
- static void __init omap3_beagle_init(void)
- {
- 	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
-@@ -562,7 +612,23 @@ static void __init omap3_beagle_init(void)
- 	/* REVISIT leave DVI powered down until it's needed ... */
- 	gpio_direction_output(170, true);
- 
--	omap3beagle_enc28j60_init();
-+	if(!strcmp(expansionboard_name, "zippy")) 
-+	{
-+		printk(KERN_INFO "Beagle expansionboard: initializing enc28j60\n");
-+		omap3beagle_enc28j60_init();
-+		printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
-+		mmc[1].gpio_wp = 141;
-+		mmc[1].gpio_cd = 162;
-+	}
-+	
-+	if(!strcmp(expansionboard_name, "zippy2")) 
-+	{
-+		printk(KERN_INFO "Beagle expansionboard: initializing ks_8851\n");
-+		omap3beagle_ks8851_init();
-+		printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
-+		mmc[1].gpio_wp = 141;
-+		mmc[1].gpio_cd = 162;
-+	}
- 
- 	usb_musb_init(&musb_board_data);
- 	usb_ehci_init(&ehci_pdata);
-@@ -580,6 +646,8 @@ static void __init omap3_beagle_map_io(void)
- 	omap34xx_map_common_io();
- }
- 
-+early_param("buddy", expansionboard_setup);
-+
- MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
- 	/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
- 	.phys_io	= 0x48000000,
diff --git a/patches/beagle/0001-arm-omap-beagle-use-caps-over-wires.patch b/patches/beagle/0001-arm-omap-beagle-use-caps-over-wires.patch
deleted file mode 100644
index 92e78e7bc..000000000
--- a/patches/beagle/0001-arm-omap-beagle-use-caps-over-wires.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 5891be118955c7ad40be8c3ab3f163c3e9d706b7 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Sat, 30 Oct 2010 11:13:44 -0500
-Subject: [PATCH] arm omap beagle use caps over wires
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index f8f0d8a..6a5dffe 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -347,7 +347,7 @@ static struct omap2_hsmmc_info mmc[] = {
- 	},
- 	{
- 		.mmc		= 2,
--		.wires		= 4,
-+		.caps		= MMC_CAP_4_BIT_DATA,
- 		.transceiver	= true,
- 		.ocr_mask	= 0x00100000,	/* 3.3V */
- 	},
--- 
-1.7.1
-
diff --git a/patches/beagle/0001-beaglexm-remove-extra-brace.patch b/patches/beagle/0001-beaglexm-remove-extra-brace.patch
deleted file mode 100644
index 0cdc03ffa..000000000
--- a/patches/beagle/0001-beaglexm-remove-extra-brace.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From e52dbf2ca3e052d7a1d06a8d00dbc01988f4ff59 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Fri, 11 Mar 2011 09:26:57 -0600
-Subject: [PATCH] beaglexm: remove extra brace
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 310f116..73b3028 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -341,7 +341,7 @@ static void __init beagle_display_init(void)
- 	int r;
- 
- 	/* DVI reset GPIO is different between beagle revisions */
--	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC) {
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC)
- 		beagle_dvi_device.reset_gpio = 129;
- 	else
- 		beagle_dvi_device.reset_gpio = 170;
--- 
-1.7.1
-
diff --git a/patches/dss2_next/0146-OMAP-3430SDP-Remove-unused-vdda_dac-supply.patch b/patches/dss2_next/0146-OMAP-3430SDP-Remove-unused-vdda_dac-supply.patch
new file mode 100644
index 000000000..1f1d75dd0
--- /dev/null
+++ b/patches/dss2_next/0146-OMAP-3430SDP-Remove-unused-vdda_dac-supply.patch
@@ -0,0 +1,30 @@
+From 9774e589acf1adf4ef866bd9ce0281d0684282e2 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 24 Feb 2011 09:02:28 +0200
+Subject: [PATCH 146/200] OMAP: 3430SDP: Remove unused vdda_dac supply
+
+Remove extra vdda_dac supply definition. It was a leftover from conflict
+resolution.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/board-3430sdp.c |    3 ---
+ 1 files changed, 0 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
+index 85c0b5c..f6ff141 100644
+--- a/arch/arm/mach-omap2/board-3430sdp.c
++++ b/arch/arm/mach-omap2/board-3430sdp.c
+@@ -307,9 +307,6 @@ static struct omap_dss_board_info sdp3430_dss_data = {
+ 	.default_device	= &sdp3430_lcd_device,
+ };
+ 
+-static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss");
+-
+ static struct omap_board_config_kernel sdp3430_config[] __initdata = {
+ };
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0147-OMAP2-3-DSS2-remove-forced-clk-disable-from-omap_dss.patch b/patches/dss2_next/0147-OMAP2-3-DSS2-remove-forced-clk-disable-from-omap_dss.patch
new file mode 100644
index 000000000..dcd9b2ddb
--- /dev/null
+++ b/patches/dss2_next/0147-OMAP2-3-DSS2-remove-forced-clk-disable-from-omap_dss.patch
@@ -0,0 +1,86 @@
+From b936b0deb9ac49f62c185a98ffb427f67b7373df Mon Sep 17 00:00:00 2001
+From: Sumit Semwal <sumit.semwal@ti.com>
+Date: Mon, 24 Jan 2011 06:21:48 +0000
+Subject: [PATCH 147/200] OMAP2, 3: DSS2: remove forced clk-disable from omap_dss_remove
+
+As part of omap hwmod changes, DSS will not be the only controller of its
+clocks. hwmod initialization also enables the interface clocks, and
+manages them.
+So, when DSS is built as a module, omap_dss_remove doesn't try to disable
+all clocks that have a higher usecount.
+
+Reviewed-by: Kevin Hilman <khilman@ti.com>
+Tested-by: Kevin Hilman <khilman@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c |   46 ++++++---------------------------------
+ 1 files changed, 7 insertions(+), 39 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index 8e89f60..ee56859 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -623,7 +623,6 @@ static int omap_dss_remove(struct platform_device *pdev)
+ {
+ 	struct omap_dss_board_info *pdata = pdev->dev.platform_data;
+ 	int i;
+-	int c;
+ 
+ 	dss_uninitialize_debugfs();
+ 
+@@ -638,44 +637,13 @@ static int omap_dss_remove(struct platform_device *pdev)
+ 
+ 	dss_exit();
+ 
+-	/* these should be removed at some point */
+-	c = core.dss_ick->usecount;
+-	if (c > 0) {
+-		DSSERR("warning: dss_ick usecount %d, disabling\n", c);
+-		while (c-- > 0)
+-			clk_disable(core.dss_ick);
+-	}
+-
+-	c = core.dss1_fck->usecount;
+-	if (c > 0) {
+-		DSSERR("warning: dss1_fck usecount %d, disabling\n", c);
+-		while (c-- > 0)
+-			clk_disable(core.dss1_fck);
+-	}
+-
+-	c = core.dss2_fck->usecount;
+-	if (c > 0) {
+-		DSSERR("warning: dss2_fck usecount %d, disabling\n", c);
+-		while (c-- > 0)
+-			clk_disable(core.dss2_fck);
+-	}
+-
+-	c = core.dss_54m_fck->usecount;
+-	if (c > 0) {
+-		DSSERR("warning: dss_54m_fck usecount %d, disabling\n", c);
+-		while (c-- > 0)
+-			clk_disable(core.dss_54m_fck);
+-	}
+-
+-	if (core.dss_96m_fck) {
+-		c = core.dss_96m_fck->usecount;
+-		if (c > 0) {
+-			DSSERR("warning: dss_96m_fck usecount %d, disabling\n",
+-					c);
+-			while (c-- > 0)
+-				clk_disable(core.dss_96m_fck);
+-		}
+-	}
++	/*
++	 * As part of hwmod changes, DSS is not the only controller of dss
++	 * clocks; hwmod framework itself will also enable clocks during hwmod
++	 * init for dss, and autoidle is set in h/w for DSS. Hence, there's no
++	 * need to disable clocks if their usecounts > 1.
++	 */
++	WARN_ON(core.num_clks_enabled > 0);
+ 
+ 	dss_put_clocks();
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0148-OMAP2-3-DSS2-Build-omap_device-for-each-DSS-HWIP.patch b/patches/dss2_next/0148-OMAP2-3-DSS2-Build-omap_device-for-each-DSS-HWIP.patch
new file mode 100644
index 000000000..9a8e79717
--- /dev/null
+++ b/patches/dss2_next/0148-OMAP2-3-DSS2-Build-omap_device-for-each-DSS-HWIP.patch
@@ -0,0 +1,108 @@
+From 1dedcc62737170298f55bdbf8c33148b38171a4d Mon Sep 17 00:00:00 2001
+From: Senthilvadivu Guruswamy <svadivu@ti.com>
+Date: Mon, 24 Jan 2011 06:21:56 +0000
+Subject: [PATCH 148/200] OMAP2,3: DSS2: Build omap_device for each DSS HWIP
+
+Looks up the hwmod database for each of the given DSS HW IP and builds
+omap_device which inturn does the platform device register for each of DSS HW IP
+
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/display.c             |   52 +++++++++++++++++++++++++++++
+ arch/arm/plat-omap/include/plat/display.h |    5 +++
+ 2 files changed, 57 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
+index b18db84..ee83030 100644
+--- a/arch/arm/mach-omap2/display.c
++++ b/arch/arm/mach-omap2/display.c
+@@ -23,6 +23,8 @@
+ #include <linux/err.h>
+ 
+ #include <plat/display.h>
++#include <plat/omap_hwmod.h>
++#include <plat/omap_device.h>
+ 
+ static struct platform_device omap_display_device = {
+ 	.name          = "omapdss",
+@@ -32,9 +34,59 @@ static struct platform_device omap_display_device = {
+ 	},
+ };
+ 
++static struct omap_device_pm_latency omap_dss_latency[] = {
++	[0] = {
++		.deactivate_func        = omap_device_idle_hwmods,
++		.activate_func          = omap_device_enable_hwmods,
++		.flags			= OMAP_DEVICE_LATENCY_AUTO_ADJUST,
++	},
++};
++
+ int __init omap_display_init(struct omap_dss_board_info *board_data)
+ {
+ 	int r = 0;
++	struct omap_hwmod *oh;
++	struct omap_device *od;
++	int i;
++	struct omap_display_platform_data pdata;
++
++	/*
++	 * omap: valid DSS hwmod names
++	 * omap2,3: dss_core, dss_dispc, dss_rfbi, dss_venc
++	 * omap3: dss_dsi1
++	 */
++	char *oh_name[] = { "dss_core", "dss_dispc", "dss_rfbi", "dss_venc",
++		"dss_dsi1" };
++	char *dev_name[] = { "omapdss_dss", "omapdss_dispc", "omapdss_rfbi",
++		"omapdss_venc", "omapdss_dsi1" };
++	int oh_count;
++
++	memset(&pdata, 0, sizeof(pdata));
++
++	if (cpu_is_omap24xx())
++		oh_count = ARRAY_SIZE(oh_name) - 1;
++		/* last hwmod dev in oh_name is not available for omap2 */
++	else
++		oh_count = ARRAY_SIZE(oh_name);
++
++	pdata.board_data = board_data;
++	pdata.board_data->get_last_off_on_transaction_id = NULL;
++
++	for (i = 0; i < oh_count; i++) {
++		oh = omap_hwmod_lookup(oh_name[i]);
++		if (!oh) {
++			pr_err("Could not look up %s\n", oh_name[i]);
++			return -ENODEV;
++		}
++		od = omap_device_build(dev_name[i], -1, oh, &pdata,
++				sizeof(struct omap_display_platform_data),
++				omap_dss_latency,
++				ARRAY_SIZE(omap_dss_latency), 0);
++
++		if (WARN((IS_ERR(od)), "Could not build omap_device for %s\n",
++				oh_name[i]))
++			return -ENODEV;
++	}
+ 	omap_display_device.dev.platform_data = board_data;
+ 
+ 	r = platform_device_register(&omap_display_device);
+diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
+index 0f140ec..2fb057e 100644
+--- a/arch/arm/plat-omap/include/plat/display.h
++++ b/arch/arm/plat-omap/include/plat/display.h
+@@ -237,6 +237,11 @@ static inline int omap_display_init(struct omap_dss_board_info *board_data)
+ }
+ #endif
+ 
++struct omap_display_platform_data {
++	struct omap_dss_board_info *board_data;
++	/* TODO: Additional members to be added when PM is considered */
++};
++
+ struct omap_video_timings {
+ 	/* Unit: pixels */
+ 	u16 x_res;
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0149-OMAP2-3-DSS2-DSS-create-platform_driver-move-init-ex.patch b/patches/dss2_next/0149-OMAP2-3-DSS2-DSS-create-platform_driver-move-init-ex.patch
new file mode 100644
index 000000000..1e1e4c947
--- /dev/null
+++ b/patches/dss2_next/0149-OMAP2-3-DSS2-DSS-create-platform_driver-move-init-ex.patch
@@ -0,0 +1,174 @@
+From 39621ff71b1b16c047f35feb5ea4caa6795b277a Mon Sep 17 00:00:00 2001
+From: Senthilvadivu Guruswamy <svadivu@ti.com>
+Date: Mon, 24 Jan 2011 06:21:57 +0000
+Subject: [PATCH 149/200] OMAP2, 3: DSS2: DSS: create platform_driver, move init, exit to driver
+
+Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
+So a platform_driver of DSS is created and init exit methods are moved from core.c
+to its driver probe,remove. pdev member has to be maintained by its own drivers.
+
+DSS platform driver is registered from inside omap_dss_probe, in the order desired.
+
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c |   19 ++++++-------
+ drivers/video/omap2/dss/dss.c  |   55 ++++++++++++++++++++++++++++++++++++++-
+ drivers/video/omap2/dss/dss.h  |    4 +-
+ 3 files changed, 64 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index ee56859..e399ca2 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -517,15 +517,9 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 	core.ctx_id = dss_get_ctx_id();
+ 	DSSDBG("initial ctx id %u\n", core.ctx_id);
+ 
+-#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
+-	/* DISPC_CONTROL */
+-	if (omap_readl(0x48050440) & 1)	/* LCD enabled? */
+-		skip_init = 1;
+-#endif
+-
+-	r = dss_init(skip_init);
++	r = dss_init_platform_driver();
+ 	if (r) {
+-		DSSERR("Failed to initialize DSS\n");
++		DSSERR("Failed to initialize DSS platform driver\n");
+ 		goto err_dss;
+ 	}
+ 
+@@ -553,6 +547,11 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 		goto err_venc;
+ 	}
+ 
++#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
++	/* DISPC_CONTROL */
++	if (omap_readl(0x48050440) & 1)	/* LCD enabled? */
++		skip_init = 1;
++#endif
+ 	if (cpu_is_omap34xx()) {
+ 		r = sdi_init(skip_init);
+ 		if (r) {
+@@ -610,7 +609,7 @@ err_dispc:
+ err_dpi:
+ 	rfbi_exit();
+ err_rfbi:
+-	dss_exit();
++	dss_uninit_platform_driver();
+ err_dss:
+ 	dss_clk_disable_all_no_ctx();
+ 	dss_put_clocks();
+@@ -635,7 +634,7 @@ static int omap_dss_remove(struct platform_device *pdev)
+ 		sdi_exit();
+ 	}
+ 
+-	dss_exit();
++	dss_uninit_platform_driver();
+ 
+ 	/*
+ 	 * As part of hwmod changes, DSS is not the only controller of dss
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 77c3621..01406f4 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -59,6 +59,7 @@ struct dss_reg {
+ 	dss_write_reg(idx, FLD_MOD(dss_read_reg(idx), val, start, end))
+ 
+ static struct {
++	struct platform_device *pdev;
+ 	void __iomem    *base;
+ 
+ 	struct clk	*dpll4_m4_ck;
+@@ -549,7 +550,7 @@ void dss_set_dac_pwrdn_bgz(bool enable)
+ 	REG_FLD_MOD(DSS_CONTROL, enable, 5, 5);	/* DAC Power-Down Control */
+ }
+ 
+-int dss_init(bool skip_init)
++static int dss_init(bool skip_init)
+ {
+ 	int r;
+ 	u32 rev;
+@@ -629,7 +630,7 @@ fail0:
+ 	return r;
+ }
+ 
+-void dss_exit(void)
++static void dss_exit(void)
+ {
+ 	if (cpu_is_omap34xx())
+ 		clk_put(dss.dpll4_m4_ck);
+@@ -639,3 +640,53 @@ void dss_exit(void)
+ 	iounmap(dss.base);
+ }
+ 
++/* DSS HW IP initialisation */
++static int omap_dsshw_probe(struct platform_device *pdev)
++{
++	int r;
++	int skip_init = 0;
++
++	dss.pdev = pdev;
++
++#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
++	/* DISPC_CONTROL */
++	if (omap_readl(0x48050440) & 1)	/* LCD enabled? */
++		skip_init = 1;
++#endif
++
++	r = dss_init(skip_init);
++	if (r) {
++		DSSERR("Failed to initialize DSS\n");
++		goto err_dss;
++	}
++
++err_dss:
++
++	return r;
++}
++
++static int omap_dsshw_remove(struct platform_device *pdev)
++{
++	dss_exit();
++
++	return 0;
++}
++
++static struct platform_driver omap_dsshw_driver = {
++	.probe          = omap_dsshw_probe,
++	.remove         = omap_dsshw_remove,
++	.driver         = {
++		.name   = "omapdss_dss",
++		.owner  = THIS_MODULE,
++	},
++};
++
++int dss_init_platform_driver(void)
++{
++	return platform_driver_register(&omap_dsshw_driver);
++}
++
++void dss_uninit_platform_driver(void)
++{
++	return platform_driver_unregister(&omap_dsshw_driver);
++}
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index b394951..37c4544 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -214,8 +214,8 @@ void dss_overlay_setup_l4_manager(struct omap_overlay_manager *mgr);
+ void dss_recheck_connections(struct omap_dss_device *dssdev, bool force);
+ 
+ /* DSS */
+-int dss_init(bool skip_init);
+-void dss_exit(void);
++int dss_init_platform_driver(void);
++void dss_uninit_platform_driver(void);
+ 
+ void dss_save_context(void);
+ void dss_restore_context(void);
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0150-OMAP2-3-DSS2-Move-clocks-from-core-driver-to-dss-dri.patch b/patches/dss2_next/0150-OMAP2-3-DSS2-Move-clocks-from-core-driver-to-dss-dri.patch
new file mode 100644
index 000000000..7a00dc437
--- /dev/null
+++ b/patches/dss2_next/0150-OMAP2-3-DSS2-Move-clocks-from-core-driver-to-dss-dri.patch
@@ -0,0 +1,934 @@
+From 2a36329f5f9762f84644ff53fbf7efb43194e9cb Mon Sep 17 00:00:00 2001
+From: Senthilvadivu Guruswamy <svadivu@ti.com>
+Date: Mon, 24 Jan 2011 06:21:58 +0000
+Subject: [PATCH 150/200] OMAP2, 3: DSS2: Move clocks from core driver to dss driver
+
+All clock management is moved to dss platform driver. clk_get/put APIs use
+dss device instead of core platform device.
+
+Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
+So the device name is changed from omapdss to omapdss_dss in 2420, 2430,
+3xxx clock database files. Now the core driver "omapdss" only takes care
+of panel registration with the custom bus.
+core driver also uses the clk_enable() / clk_disable() APIs exposed by DSS for
+clock management.
+DSS driver would do clock management of clocks needed by DISPC, RFBI, DSI, VENC
+
+TODO:  The clock content would be adapted to omap_hwmod in a seperate series.
+
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/clock2420_data.c |    8 +-
+ arch/arm/mach-omap2/clock2430_data.c |    8 +-
+ arch/arm/mach-omap2/clock3xxx_data.c |   14 +-
+ drivers/video/omap2/dss/core.c       |  343 +---------------------------------
+ drivers/video/omap2/dss/dss.c        |  334 +++++++++++++++++++++++++++++++++-
+ drivers/video/omap2/dss/dss.h        |   13 +-
+ 6 files changed, 360 insertions(+), 360 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
+index 0a992bc..9ece62a 100644
+--- a/arch/arm/mach-omap2/clock2420_data.c
++++ b/arch/arm/mach-omap2/clock2420_data.c
+@@ -1786,10 +1786,10 @@ static struct omap_clk omap2420_clks[] = {
+ 	CLK(NULL,	"gfx_2d_fck",	&gfx_2d_fck,	CK_242X),
+ 	CLK(NULL,	"gfx_ick",	&gfx_ick,	CK_242X),
+ 	/* DSS domain clocks */
+-	CLK("omapdss",	"ick",		&dss_ick,	CK_242X),
+-	CLK("omapdss",	"dss1_fck",	&dss1_fck,	CK_242X),
+-	CLK("omapdss",	"dss2_fck",	&dss2_fck,	CK_242X),
+-	CLK("omapdss",	"tv_fck",	&dss_54m_fck,	CK_242X),
++	CLK("omapdss_dss",	"ick",		&dss_ick,	CK_242X),
++	CLK("omapdss_dss",	"dss1_fck",	&dss1_fck,	CK_242X),
++	CLK("omapdss_dss",	"dss2_fck",	&dss2_fck,	CK_242X),
++	CLK("omapdss_dss",	"tv_fck",	&dss_54m_fck,	CK_242X),
+ 	/* L3 domain clocks */
+ 	CLK(NULL,	"core_l3_ck",	&core_l3_ck,	CK_242X),
+ 	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck, CK_242X),
+diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c
+index 5c647ce..61006ae 100644
+--- a/arch/arm/mach-omap2/clock2430_data.c
++++ b/arch/arm/mach-omap2/clock2430_data.c
+@@ -1890,10 +1890,10 @@ static struct omap_clk omap2430_clks[] = {
+ 	CLK(NULL,	"mdm_ick",	&mdm_ick,	CK_243X),
+ 	CLK(NULL,	"mdm_osc_ck",	&mdm_osc_ck,	CK_243X),
+ 	/* DSS domain clocks */
+-	CLK("omapdss",	"ick",		&dss_ick,	CK_243X),
+-	CLK("omapdss",	"dss1_fck",	&dss1_fck,	CK_243X),
+-	CLK("omapdss",	"dss2_fck",	&dss2_fck,	CK_243X),
+-	CLK("omapdss",	"tv_fck",	&dss_54m_fck,	CK_243X),
++	CLK("omapdss_dss",	"ick",		&dss_ick,	CK_243X),
++	CLK("omapdss_dss",	"dss1_fck",	&dss1_fck,	CK_243X),
++	CLK("omapdss_dss",	"dss2_fck",	&dss2_fck,	CK_243X),
++	CLK("omapdss_dss",	"tv_fck",	&dss_54m_fck,	CK_243X),
+ 	/* L3 domain clocks */
+ 	CLK(NULL,	"core_l3_ck",	&core_l3_ck,	CK_243X),
+ 	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck, CK_243X),
+diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
+index 052ac32..2e47d16 100644
+--- a/arch/arm/mach-omap2/clock3xxx_data.c
++++ b/arch/arm/mach-omap2/clock3xxx_data.c
+@@ -3357,13 +3357,13 @@ static struct omap_clk omap3xxx_clks[] = {
+ 	CLK("omap_rng",	"ick",		&rng_ick,	CK_34XX | CK_36XX),
+ 	CLK(NULL,	"sha11_ick",	&sha11_ick,	CK_34XX | CK_36XX),
+ 	CLK(NULL,	"des1_ick",	&des1_ick,	CK_34XX | CK_36XX),
+-	CLK("omapdss",	"dss1_fck",	&dss1_alwon_fck_3430es1, CK_3430ES1),
+-	CLK("omapdss",	"dss1_fck",	&dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+-	CLK("omapdss",	"tv_fck",	&dss_tv_fck,	CK_3XXX),
+-	CLK("omapdss",	"video_fck",	&dss_96m_fck,	CK_3XXX),
+-	CLK("omapdss",	"dss2_fck",	&dss2_alwon_fck, CK_3XXX),
+-	CLK("omapdss",	"ick",		&dss_ick_3430es1,	CK_3430ES1),
+-	CLK("omapdss",	"ick",		&dss_ick_3430es2,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
++	CLK("omapdss_dss",	"dss1_fck",	&dss1_alwon_fck_3430es1, CK_3430ES1),
++	CLK("omapdss_dss",	"dss1_fck",	&dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
++	CLK("omapdss_dss",	"tv_fck",	&dss_tv_fck,	CK_3XXX),
++	CLK("omapdss_dss",	"video_fck",	&dss_96m_fck,	CK_3XXX),
++	CLK("omapdss_dss",	"dss2_fck",	&dss2_alwon_fck, CK_3XXX),
++	CLK("omapdss_dss",	"ick",		&dss_ick_3430es1,	CK_3430ES1),
++	CLK("omapdss_dss",	"ick",		&dss_ick_3430es2,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+ 	CLK(NULL,	"cam_mclk",	&cam_mclk,	CK_34XX | CK_36XX),
+ 	CLK(NULL,	"cam_ick",	&cam_ick,	CK_34XX | CK_36XX),
+ 	CLK(NULL,	"csi2_96m_fck",	&csi2_96m_fck,	CK_34XX | CK_36XX),
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index e399ca2..2559355 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -34,32 +34,18 @@
+ #include <linux/regulator/consumer.h>
+ 
+ #include <plat/display.h>
+-#include <plat/clock.h>
+ 
+ #include "dss.h"
+ #include "dss_features.h"
+ 
+ static struct {
+ 	struct platform_device *pdev;
+-	int		ctx_id;
+-
+-	struct clk      *dss_ick;
+-	struct clk	*dss1_fck;
+-	struct clk	*dss2_fck;
+-	struct clk      *dss_54m_fck;
+-	struct clk	*dss_96m_fck;
+-	unsigned	num_clks_enabled;
+ 
+ 	struct regulator *vdds_dsi_reg;
+ 	struct regulator *vdds_sdi_reg;
+ 	struct regulator *vdda_dac_reg;
+ } core;
+ 
+-static void dss_clk_enable_all_no_ctx(void);
+-static void dss_clk_disable_all_no_ctx(void);
+-static void dss_clk_enable_no_ctx(enum dss_clock clks);
+-static void dss_clk_disable_no_ctx(enum dss_clock clks);
+-
+ static char *def_disp_name;
+ module_param_named(def_disp, def_disp_name, charp, 0);
+ MODULE_PARM_DESC(def_disp_name, "default display name");
+@@ -69,297 +55,6 @@ unsigned int dss_debug;
+ module_param_named(debug, dss_debug, bool, 0644);
+ #endif
+ 
+-/* CONTEXT */
+-static int dss_get_ctx_id(void)
+-{
+-	struct omap_dss_board_info *pdata = core.pdev->dev.platform_data;
+-	int r;
+-
+-	if (!pdata->get_last_off_on_transaction_id)
+-		return 0;
+-	r = pdata->get_last_off_on_transaction_id(&core.pdev->dev);
+-	if (r < 0) {
+-		dev_err(&core.pdev->dev, "getting transaction ID failed, "
+-				"will force context restore\n");
+-		r = -1;
+-	}
+-	return r;
+-}
+-
+-int dss_need_ctx_restore(void)
+-{
+-	int id = dss_get_ctx_id();
+-
+-	if (id < 0 || id != core.ctx_id) {
+-		DSSDBG("ctx id %d -> id %d\n",
+-				core.ctx_id, id);
+-		core.ctx_id = id;
+-		return 1;
+-	} else {
+-		return 0;
+-	}
+-}
+-
+-static void save_all_ctx(void)
+-{
+-	DSSDBG("save context\n");
+-
+-	dss_clk_enable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
+-
+-	dss_save_context();
+-	dispc_save_context();
+-#ifdef CONFIG_OMAP2_DSS_DSI
+-	dsi_save_context();
+-#endif
+-
+-	dss_clk_disable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
+-}
+-
+-static void restore_all_ctx(void)
+-{
+-	DSSDBG("restore context\n");
+-
+-	dss_clk_enable_all_no_ctx();
+-
+-	dss_restore_context();
+-	dispc_restore_context();
+-#ifdef CONFIG_OMAP2_DSS_DSI
+-	dsi_restore_context();
+-#endif
+-
+-	dss_clk_disable_all_no_ctx();
+-}
+-
+-#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
+-/* CLOCKS */
+-static void core_dump_clocks(struct seq_file *s)
+-{
+-	int i;
+-	struct clk *clocks[5] = {
+-		core.dss_ick,
+-		core.dss1_fck,
+-		core.dss2_fck,
+-		core.dss_54m_fck,
+-		core.dss_96m_fck
+-	};
+-
+-	seq_printf(s, "- CORE -\n");
+-
+-	seq_printf(s, "internal clk count\t\t%u\n", core.num_clks_enabled);
+-
+-	for (i = 0; i < 5; i++) {
+-		if (!clocks[i])
+-			continue;
+-		seq_printf(s, "%-15s\t%lu\t%d\n",
+-				clocks[i]->name,
+-				clk_get_rate(clocks[i]),
+-				clocks[i]->usecount);
+-	}
+-}
+-#endif /* defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT) */
+-
+-static int dss_get_clock(struct clk **clock, const char *clk_name)
+-{
+-	struct clk *clk;
+-
+-	clk = clk_get(&core.pdev->dev, clk_name);
+-
+-	if (IS_ERR(clk)) {
+-		DSSERR("can't get clock %s", clk_name);
+-		return PTR_ERR(clk);
+-	}
+-
+-	*clock = clk;
+-
+-	DSSDBG("clk %s, rate %ld\n", clk_name, clk_get_rate(clk));
+-
+-	return 0;
+-}
+-
+-static int dss_get_clocks(void)
+-{
+-	int r;
+-
+-	core.dss_ick = NULL;
+-	core.dss1_fck = NULL;
+-	core.dss2_fck = NULL;
+-	core.dss_54m_fck = NULL;
+-	core.dss_96m_fck = NULL;
+-
+-	r = dss_get_clock(&core.dss_ick, "ick");
+-	if (r)
+-		goto err;
+-
+-	r = dss_get_clock(&core.dss1_fck, "dss1_fck");
+-	if (r)
+-		goto err;
+-
+-	r = dss_get_clock(&core.dss2_fck, "dss2_fck");
+-	if (r)
+-		goto err;
+-
+-	r = dss_get_clock(&core.dss_54m_fck, "tv_fck");
+-	if (r)
+-		goto err;
+-
+-	r = dss_get_clock(&core.dss_96m_fck, "video_fck");
+-	if (r)
+-		goto err;
+-
+-	return 0;
+-
+-err:
+-	if (core.dss_ick)
+-		clk_put(core.dss_ick);
+-	if (core.dss1_fck)
+-		clk_put(core.dss1_fck);
+-	if (core.dss2_fck)
+-		clk_put(core.dss2_fck);
+-	if (core.dss_54m_fck)
+-		clk_put(core.dss_54m_fck);
+-	if (core.dss_96m_fck)
+-		clk_put(core.dss_96m_fck);
+-
+-	return r;
+-}
+-
+-static void dss_put_clocks(void)
+-{
+-	if (core.dss_96m_fck)
+-		clk_put(core.dss_96m_fck);
+-	clk_put(core.dss_54m_fck);
+-	clk_put(core.dss1_fck);
+-	clk_put(core.dss2_fck);
+-	clk_put(core.dss_ick);
+-}
+-
+-unsigned long dss_clk_get_rate(enum dss_clock clk)
+-{
+-	switch (clk) {
+-	case DSS_CLK_ICK:
+-		return clk_get_rate(core.dss_ick);
+-	case DSS_CLK_FCK1:
+-		return clk_get_rate(core.dss1_fck);
+-	case DSS_CLK_FCK2:
+-		return clk_get_rate(core.dss2_fck);
+-	case DSS_CLK_54M:
+-		return clk_get_rate(core.dss_54m_fck);
+-	case DSS_CLK_96M:
+-		return clk_get_rate(core.dss_96m_fck);
+-	}
+-
+-	BUG();
+-	return 0;
+-}
+-
+-static unsigned count_clk_bits(enum dss_clock clks)
+-{
+-	unsigned num_clks = 0;
+-
+-	if (clks & DSS_CLK_ICK)
+-		++num_clks;
+-	if (clks & DSS_CLK_FCK1)
+-		++num_clks;
+-	if (clks & DSS_CLK_FCK2)
+-		++num_clks;
+-	if (clks & DSS_CLK_54M)
+-		++num_clks;
+-	if (clks & DSS_CLK_96M)
+-		++num_clks;
+-
+-	return num_clks;
+-}
+-
+-static void dss_clk_enable_no_ctx(enum dss_clock clks)
+-{
+-	unsigned num_clks = count_clk_bits(clks);
+-
+-	if (clks & DSS_CLK_ICK)
+-		clk_enable(core.dss_ick);
+-	if (clks & DSS_CLK_FCK1)
+-		clk_enable(core.dss1_fck);
+-	if (clks & DSS_CLK_FCK2)
+-		clk_enable(core.dss2_fck);
+-	if (clks & DSS_CLK_54M)
+-		clk_enable(core.dss_54m_fck);
+-	if (clks & DSS_CLK_96M)
+-		clk_enable(core.dss_96m_fck);
+-
+-	core.num_clks_enabled += num_clks;
+-}
+-
+-void dss_clk_enable(enum dss_clock clks)
+-{
+-	bool check_ctx = core.num_clks_enabled == 0;
+-
+-	dss_clk_enable_no_ctx(clks);
+-
+-	if (check_ctx && cpu_is_omap34xx() && dss_need_ctx_restore())
+-		restore_all_ctx();
+-}
+-
+-static void dss_clk_disable_no_ctx(enum dss_clock clks)
+-{
+-	unsigned num_clks = count_clk_bits(clks);
+-
+-	if (clks & DSS_CLK_ICK)
+-		clk_disable(core.dss_ick);
+-	if (clks & DSS_CLK_FCK1)
+-		clk_disable(core.dss1_fck);
+-	if (clks & DSS_CLK_FCK2)
+-		clk_disable(core.dss2_fck);
+-	if (clks & DSS_CLK_54M)
+-		clk_disable(core.dss_54m_fck);
+-	if (clks & DSS_CLK_96M)
+-		clk_disable(core.dss_96m_fck);
+-
+-	core.num_clks_enabled -= num_clks;
+-}
+-
+-void dss_clk_disable(enum dss_clock clks)
+-{
+-	if (cpu_is_omap34xx()) {
+-		unsigned num_clks = count_clk_bits(clks);
+-
+-		BUG_ON(core.num_clks_enabled < num_clks);
+-
+-		if (core.num_clks_enabled == num_clks)
+-			save_all_ctx();
+-	}
+-
+-	dss_clk_disable_no_ctx(clks);
+-}
+-
+-static void dss_clk_enable_all_no_ctx(void)
+-{
+-	enum dss_clock clks;
+-
+-	clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
+-	if (cpu_is_omap34xx())
+-		clks |= DSS_CLK_96M;
+-	dss_clk_enable_no_ctx(clks);
+-}
+-
+-static void dss_clk_disable_all_no_ctx(void)
+-{
+-	enum dss_clock clks;
+-
+-	clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
+-	if (cpu_is_omap34xx())
+-		clks |= DSS_CLK_96M;
+-	dss_clk_disable_no_ctx(clks);
+-}
+-
+-static void dss_clk_disable_all(void)
+-{
+-	enum dss_clock clks;
+-
+-	clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
+-	if (cpu_is_omap34xx())
+-		clks |= DSS_CLK_96M;
+-	dss_clk_disable(clks);
+-}
+-
+ /* REGULATORS */
+ 
+ struct regulator *dss_get_vdds_dsi(void)
+@@ -404,18 +99,7 @@ struct regulator *dss_get_vdda_dac(void)
+ 	return reg;
+ }
+ 
+-/* DEBUGFS */
+ #if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
+-static void dss_debug_dump_clocks(struct seq_file *s)
+-{
+-	core_dump_clocks(s);
+-	dss_dump_clocks(s);
+-	dispc_dump_clocks(s);
+-#ifdef CONFIG_OMAP2_DSS_DSI
+-	dsi_dump_clocks(s);
+-#endif
+-}
+-
+ static int dss_debug_show(struct seq_file *s, void *unused)
+ {
+ 	void (*func)(struct seq_file *) = s->private;
+@@ -508,21 +192,15 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 	dss_init_overlay_managers(pdev);
+ 	dss_init_overlays(pdev);
+ 
+-	r = dss_get_clocks();
+-	if (r)
+-		goto err_clocks;
+-
+-	dss_clk_enable_all_no_ctx();
+-
+-	core.ctx_id = dss_get_ctx_id();
+-	DSSDBG("initial ctx id %u\n", core.ctx_id);
+-
+ 	r = dss_init_platform_driver();
+ 	if (r) {
+ 		DSSERR("Failed to initialize DSS platform driver\n");
+ 		goto err_dss;
+ 	}
+ 
++	/* keep clocks enabled to prevent context saves/restores during init */
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++
+ 	r = rfbi_init();
+ 	if (r) {
+ 		DSSERR("Failed to initialize rfbi\n");
+@@ -588,7 +266,7 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 			pdata->default_device = dssdev;
+ 	}
+ 
+-	dss_clk_disable_all();
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
+ 
+ 	return 0;
+ 
+@@ -611,9 +289,6 @@ err_dpi:
+ err_rfbi:
+ 	dss_uninit_platform_driver();
+ err_dss:
+-	dss_clk_disable_all_no_ctx();
+-	dss_put_clocks();
+-err_clocks:
+ 
+ 	return r;
+ }
+@@ -636,16 +311,6 @@ static int omap_dss_remove(struct platform_device *pdev)
+ 
+ 	dss_uninit_platform_driver();
+ 
+-	/*
+-	 * As part of hwmod changes, DSS is not the only controller of dss
+-	 * clocks; hwmod framework itself will also enable clocks during hwmod
+-	 * init for dss, and autoidle is set in h/w for DSS. Hence, there's no
+-	 * need to disable clocks if their usecounts > 1.
+-	 */
+-	WARN_ON(core.num_clks_enabled > 0);
+-
+-	dss_put_clocks();
+-
+ 	dss_uninit_overlays(pdev);
+ 	dss_uninit_overlay_managers(pdev);
+ 
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 01406f4..72b395d 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -31,6 +31,7 @@
+ #include <linux/clk.h>
+ 
+ #include <plat/display.h>
++#include <plat/clock.h>
+ #include "dss.h"
+ 
+ #define DSS_BASE			0x48050000
+@@ -61,8 +62,15 @@ struct dss_reg {
+ static struct {
+ 	struct platform_device *pdev;
+ 	void __iomem    *base;
++	int             ctx_id;
+ 
+ 	struct clk	*dpll4_m4_ck;
++	struct clk	*dss_ick;
++	struct clk	*dss1_fck;
++	struct clk	*dss2_fck;
++	struct clk	*dss_54m_fck;
++	struct clk	*dss_96m_fck;
++	unsigned	num_clks_enabled;
+ 
+ 	unsigned long	cache_req_pck;
+ 	unsigned long	cache_prate;
+@@ -75,6 +83,11 @@ static struct {
+ 	u32		ctx[DSS_SZ_REGS / sizeof(u32)];
+ } dss;
+ 
++static void dss_clk_enable_all_no_ctx(void);
++static void dss_clk_disable_all_no_ctx(void);
++static void dss_clk_enable_no_ctx(enum dss_clock clks);
++static void dss_clk_disable_no_ctx(enum dss_clock clks);
++
+ static int _omap_dss_wait_reset(void);
+ 
+ static inline void dss_write_reg(const struct dss_reg idx, u32 val)
+@@ -640,6 +653,301 @@ static void dss_exit(void)
+ 	iounmap(dss.base);
+ }
+ 
++/* CONTEXT */
++static int dss_get_ctx_id(void)
++{
++	struct omap_display_platform_data *pdata = dss.pdev->dev.platform_data;
++	int r;
++
++	if (!pdata->board_data->get_last_off_on_transaction_id)
++		return 0;
++	r = pdata->board_data->get_last_off_on_transaction_id(&dss.pdev->dev);
++	if (r < 0) {
++		dev_err(&dss.pdev->dev, "getting transaction ID failed, "
++				"will force context restore\n");
++		r = -1;
++	}
++	return r;
++}
++
++int dss_need_ctx_restore(void)
++{
++	int id = dss_get_ctx_id();
++
++	if (id < 0 || id != dss.ctx_id) {
++		DSSDBG("ctx id %d -> id %d\n",
++				dss.ctx_id, id);
++		dss.ctx_id = id;
++		return 1;
++	} else {
++		return 0;
++	}
++}
++
++static void save_all_ctx(void)
++{
++	DSSDBG("save context\n");
++
++	dss_clk_enable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
++
++	dss_save_context();
++	dispc_save_context();
++#ifdef CONFIG_OMAP2_DSS_DSI
++	dsi_save_context();
++#endif
++
++	dss_clk_disable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
++}
++
++static void restore_all_ctx(void)
++{
++	DSSDBG("restore context\n");
++
++	dss_clk_enable_all_no_ctx();
++
++	dss_restore_context();
++	dispc_restore_context();
++#ifdef CONFIG_OMAP2_DSS_DSI
++	dsi_restore_context();
++#endif
++
++	dss_clk_disable_all_no_ctx();
++}
++
++static int dss_get_clock(struct clk **clock, const char *clk_name)
++{
++	struct clk *clk;
++
++	clk = clk_get(&dss.pdev->dev, clk_name);
++
++	if (IS_ERR(clk)) {
++		DSSERR("can't get clock %s", clk_name);
++		return PTR_ERR(clk);
++	}
++
++	*clock = clk;
++
++	DSSDBG("clk %s, rate %ld\n", clk_name, clk_get_rate(clk));
++
++	return 0;
++}
++
++static int dss_get_clocks(void)
++{
++	int r;
++
++	dss.dss_ick = NULL;
++	dss.dss1_fck = NULL;
++	dss.dss2_fck = NULL;
++	dss.dss_54m_fck = NULL;
++	dss.dss_96m_fck = NULL;
++
++	r = dss_get_clock(&dss.dss_ick, "ick");
++	if (r)
++		goto err;
++
++	r = dss_get_clock(&dss.dss1_fck, "dss1_fck");
++	if (r)
++		goto err;
++
++	r = dss_get_clock(&dss.dss2_fck, "dss2_fck");
++	if (r)
++		goto err;
++
++	r = dss_get_clock(&dss.dss_54m_fck, "tv_fck");
++	if (r)
++		goto err;
++
++	r = dss_get_clock(&dss.dss_96m_fck, "video_fck");
++	if (r)
++		goto err;
++
++	return 0;
++
++err:
++	if (dss.dss_ick)
++		clk_put(dss.dss_ick);
++	if (dss.dss1_fck)
++		clk_put(dss.dss1_fck);
++	if (dss.dss2_fck)
++		clk_put(dss.dss2_fck);
++	if (dss.dss_54m_fck)
++		clk_put(dss.dss_54m_fck);
++	if (dss.dss_96m_fck)
++		clk_put(dss.dss_96m_fck);
++
++	return r;
++}
++
++static void dss_put_clocks(void)
++{
++	if (dss.dss_96m_fck)
++		clk_put(dss.dss_96m_fck);
++	clk_put(dss.dss_54m_fck);
++	clk_put(dss.dss1_fck);
++	clk_put(dss.dss2_fck);
++	clk_put(dss.dss_ick);
++}
++
++unsigned long dss_clk_get_rate(enum dss_clock clk)
++{
++	switch (clk) {
++	case DSS_CLK_ICK:
++		return clk_get_rate(dss.dss_ick);
++	case DSS_CLK_FCK1:
++		return clk_get_rate(dss.dss1_fck);
++	case DSS_CLK_FCK2:
++		return clk_get_rate(dss.dss2_fck);
++	case DSS_CLK_54M:
++		return clk_get_rate(dss.dss_54m_fck);
++	case DSS_CLK_96M:
++		return clk_get_rate(dss.dss_96m_fck);
++	}
++
++	BUG();
++	return 0;
++}
++
++static unsigned count_clk_bits(enum dss_clock clks)
++{
++	unsigned num_clks = 0;
++
++	if (clks & DSS_CLK_ICK)
++		++num_clks;
++	if (clks & DSS_CLK_FCK1)
++		++num_clks;
++	if (clks & DSS_CLK_FCK2)
++		++num_clks;
++	if (clks & DSS_CLK_54M)
++		++num_clks;
++	if (clks & DSS_CLK_96M)
++		++num_clks;
++
++	return num_clks;
++}
++
++static void dss_clk_enable_no_ctx(enum dss_clock clks)
++{
++	unsigned num_clks = count_clk_bits(clks);
++
++	if (clks & DSS_CLK_ICK)
++		clk_enable(dss.dss_ick);
++	if (clks & DSS_CLK_FCK1)
++		clk_enable(dss.dss1_fck);
++	if (clks & DSS_CLK_FCK2)
++		clk_enable(dss.dss2_fck);
++	if (clks & DSS_CLK_54M)
++		clk_enable(dss.dss_54m_fck);
++	if (clks & DSS_CLK_96M)
++		clk_enable(dss.dss_96m_fck);
++
++	dss.num_clks_enabled += num_clks;
++}
++
++void dss_clk_enable(enum dss_clock clks)
++{
++	bool check_ctx = dss.num_clks_enabled == 0;
++
++	dss_clk_enable_no_ctx(clks);
++
++	if (check_ctx && cpu_is_omap34xx() && dss_need_ctx_restore())
++		restore_all_ctx();
++}
++
++static void dss_clk_disable_no_ctx(enum dss_clock clks)
++{
++	unsigned num_clks = count_clk_bits(clks);
++
++	if (clks & DSS_CLK_ICK)
++		clk_disable(dss.dss_ick);
++	if (clks & DSS_CLK_FCK1)
++		clk_disable(dss.dss1_fck);
++	if (clks & DSS_CLK_FCK2)
++		clk_disable(dss.dss2_fck);
++	if (clks & DSS_CLK_54M)
++		clk_disable(dss.dss_54m_fck);
++	if (clks & DSS_CLK_96M)
++		clk_disable(dss.dss_96m_fck);
++
++	dss.num_clks_enabled -= num_clks;
++}
++
++void dss_clk_disable(enum dss_clock clks)
++{
++	if (cpu_is_omap34xx()) {
++		unsigned num_clks = count_clk_bits(clks);
++
++		BUG_ON(dss.num_clks_enabled < num_clks);
++
++		if (dss.num_clks_enabled == num_clks)
++			save_all_ctx();
++	}
++
++	dss_clk_disable_no_ctx(clks);
++}
++
++static void dss_clk_enable_all_no_ctx(void)
++{
++	enum dss_clock clks;
++
++	clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
++	if (cpu_is_omap34xx())
++		clks |= DSS_CLK_96M;
++	dss_clk_enable_no_ctx(clks);
++}
++
++static void dss_clk_disable_all_no_ctx(void)
++{
++	enum dss_clock clks;
++
++	clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
++	if (cpu_is_omap34xx())
++		clks |= DSS_CLK_96M;
++	dss_clk_disable_no_ctx(clks);
++}
++
++#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
++/* CLOCKS */
++static void core_dump_clocks(struct seq_file *s)
++{
++	int i;
++	struct clk *clocks[5] = {
++		dss.dss_ick,
++		dss.dss1_fck,
++		dss.dss2_fck,
++		dss.dss_54m_fck,
++		dss.dss_96m_fck
++	};
++
++	seq_printf(s, "- CORE -\n");
++
++	seq_printf(s, "internal clk count\t\t%u\n", dss.num_clks_enabled);
++
++	for (i = 0; i < 5; i++) {
++		if (!clocks[i])
++			continue;
++		seq_printf(s, "%-15s\t%lu\t%d\n",
++				clocks[i]->name,
++				clk_get_rate(clocks[i]),
++				clocks[i]->usecount);
++	}
++}
++#endif /* defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT) */
++
++/* DEBUGFS */
++#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
++void dss_debug_dump_clocks(struct seq_file *s)
++{
++	core_dump_clocks(s);
++	dss_dump_clocks(s);
++	dispc_dump_clocks(s);
++#ifdef CONFIG_OMAP2_DSS_DSI
++	dsi_dump_clocks(s);
++#endif
++}
++#endif
++
++
+ /* DSS HW IP initialisation */
+ static int omap_dsshw_probe(struct platform_device *pdev)
+ {
+@@ -648,6 +956,15 @@ static int omap_dsshw_probe(struct platform_device *pdev)
+ 
+ 	dss.pdev = pdev;
+ 
++	r = dss_get_clocks();
++	if (r)
++		goto err_clocks;
++
++	dss_clk_enable_all_no_ctx();
++
++	dss.ctx_id = dss_get_ctx_id();
++	DSSDBG("initial ctx id %u\n", dss.ctx_id);
++
+ #ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
+ 	/* DISPC_CONTROL */
+ 	if (omap_readl(0x48050440) & 1)	/* LCD enabled? */
+@@ -660,15 +977,30 @@ static int omap_dsshw_probe(struct platform_device *pdev)
+ 		goto err_dss;
+ 	}
+ 
+-err_dss:
++	dss_clk_disable_all_no_ctx();
++	return 0;
+ 
++err_dss:
++	dss_clk_disable_all_no_ctx();
++	dss_put_clocks();
++err_clocks:
+ 	return r;
+ }
+ 
+ static int omap_dsshw_remove(struct platform_device *pdev)
+ {
++
+ 	dss_exit();
+ 
++	/*
++	 * As part of hwmod changes, DSS is not the only controller of dss
++	 * clocks; hwmod framework itself will also enable clocks during hwmod
++	 * init for dss, and autoidle is set in h/w for DSS. Hence, there's no
++	 * need to disable clocks if their usecounts > 1.
++	 */
++	WARN_ON(dss.num_clks_enabled > 0);
++
++	dss_put_clocks();
+ 	return 0;
+ }
+ 
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index 37c4544..c535ee1 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -169,11 +169,6 @@ struct seq_file;
+ struct platform_device;
+ 
+ /* core */
+-void dss_clk_enable(enum dss_clock clks);
+-void dss_clk_disable(enum dss_clock clks);
+-unsigned long dss_clk_get_rate(enum dss_clock clk);
+-int dss_need_ctx_restore(void);
+-void dss_dump_clocks(struct seq_file *s);
+ struct bus_type *dss_get_bus(void);
+ struct regulator *dss_get_vdds_dsi(void);
+ struct regulator *dss_get_vdds_sdi(void);
+@@ -219,8 +214,16 @@ void dss_uninit_platform_driver(void);
+ 
+ void dss_save_context(void);
+ void dss_restore_context(void);
++void dss_clk_enable(enum dss_clock clks);
++void dss_clk_disable(enum dss_clock clks);
++unsigned long dss_clk_get_rate(enum dss_clock clk);
++int dss_need_ctx_restore(void);
++void dss_dump_clocks(struct seq_file *s);
+ 
+ void dss_dump_regs(struct seq_file *s);
++#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
++void dss_debug_dump_clocks(struct seq_file *s);
++#endif
+ 
+ void dss_sdi_init(u8 datapairs);
+ int dss_sdi_enable(void);
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0151-OMAP2-3-DSS2-RFBI-create-platform_driver-move-init-e.patch b/patches/dss2_next/0151-OMAP2-3-DSS2-RFBI-create-platform_driver-move-init-e.patch
new file mode 100644
index 000000000..29e3d973d
--- /dev/null
+++ b/patches/dss2_next/0151-OMAP2-3-DSS2-RFBI-create-platform_driver-move-init-e.patch
@@ -0,0 +1,218 @@
+From 0b0d54b97c620e16e0edd1eb7f19b971b6d6de9c Mon Sep 17 00:00:00 2001
+From: Senthilvadivu Guruswamy <svadivu@ti.com>
+Date: Mon, 24 Jan 2011 06:21:59 +0000
+Subject: [PATCH 151/200] OMAP2, 3: DSS2: RFBI: create platform_driver, move init, exit to driver
+
+Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
+So a platform_driver for RFBI is created and init exit methods are moved from core.c
+to its driver probe,remove. pdev member has to be maintained by its own drivers.
+
+RFBI platform driver is registered from inside omap_dss_probe, in the order desired.
+
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c |    8 ++--
+ drivers/video/omap2/dss/dss.h  |    8 ++--
+ drivers/video/omap2/dss/rfbi.c |  110 ++++++++++++++++++++++++----------------
+ 3 files changed, 74 insertions(+), 52 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index 2559355..8eef616 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -201,9 +201,9 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 	/* keep clocks enabled to prevent context saves/restores during init */
+ 	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
+ 
+-	r = rfbi_init();
++	r = rfbi_init_platform_driver();
+ 	if (r) {
+-		DSSERR("Failed to initialize rfbi\n");
++		DSSERR("Failed to initialize rfbi platform driver\n");
+ 		goto err_rfbi;
+ 	}
+ 
+@@ -285,7 +285,7 @@ err_venc:
+ err_dispc:
+ 	dpi_exit();
+ err_dpi:
+-	rfbi_exit();
++	rfbi_uninit_platform_driver();
+ err_rfbi:
+ 	dss_uninit_platform_driver();
+ err_dss:
+@@ -303,7 +303,7 @@ static int omap_dss_remove(struct platform_device *pdev)
+ 	venc_exit();
+ 	dispc_exit();
+ 	dpi_exit();
+-	rfbi_exit();
++	rfbi_uninit_platform_driver();
+ 	if (cpu_is_omap34xx()) {
+ 		dsi_exit();
+ 		sdi_exit();
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index c535ee1..0ba4bdb 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -428,8 +428,8 @@ static inline void venc_exit(void)
+ 
+ /* RFBI */
+ #ifdef CONFIG_OMAP2_DSS_RFBI
+-int rfbi_init(void);
+-void rfbi_exit(void);
++int rfbi_init_platform_driver(void);
++void rfbi_uninit_platform_driver(void);
+ void rfbi_dump_regs(struct seq_file *s);
+ 
+ int rfbi_configure(int rfbi_module, int bpp, int lines);
+@@ -440,11 +440,11 @@ void rfbi_set_timings(int rfbi_module, struct rfbi_timings *t);
+ unsigned long rfbi_get_max_tx_rate(void);
+ int rfbi_init_display(struct omap_dss_device *display);
+ #else
+-static inline int rfbi_init(void)
++static inline int rfbi_init_platform_driver(void)
+ {
+ 	return 0;
+ }
+-static inline void rfbi_exit(void)
++static inline void rfbi_uninit_platform_driver(void)
+ {
+ }
+ #endif
+diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
+index 10a2ffe..153f963 100644
+--- a/drivers/video/omap2/dss/rfbi.c
++++ b/drivers/video/omap2/dss/rfbi.c
+@@ -100,6 +100,7 @@ static int rfbi_convert_timings(struct rfbi_timings *t);
+ static void rfbi_get_clk_info(u32 *clk_period, u32 *max_clk_div);
+ 
+ static struct {
++	struct platform_device *pdev;
+ 	void __iomem	*base;
+ 
+ 	unsigned long	l4_khz;
+@@ -957,50 +958,6 @@ void rfbi_dump_regs(struct seq_file *s)
+ #undef DUMPREG
+ }
+ 
+-int rfbi_init(void)
+-{
+-	u32 rev;
+-	u32 l;
+-
+-	spin_lock_init(&rfbi.cmd_lock);
+-
+-	init_completion(&rfbi.cmd_done);
+-	atomic_set(&rfbi.cmd_fifo_full, 0);
+-	atomic_set(&rfbi.cmd_pending, 0);
+-
+-	rfbi.base = ioremap(RFBI_BASE, SZ_256);
+-	if (!rfbi.base) {
+-		DSSERR("can't ioremap RFBI\n");
+-		return -ENOMEM;
+-	}
+-
+-	rfbi_enable_clocks(1);
+-
+-	msleep(10);
+-
+-	rfbi.l4_khz = dss_clk_get_rate(DSS_CLK_ICK) / 1000;
+-
+-	/* Enable autoidle and smart-idle */
+-	l = rfbi_read_reg(RFBI_SYSCONFIG);
+-	l |= (1 << 0) | (2 << 3);
+-	rfbi_write_reg(RFBI_SYSCONFIG, l);
+-
+-	rev = rfbi_read_reg(RFBI_REVISION);
+-	printk(KERN_INFO "OMAP RFBI rev %d.%d\n",
+-	       FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
+-
+-	rfbi_enable_clocks(0);
+-
+-	return 0;
+-}
+-
+-void rfbi_exit(void)
+-{
+-	DSSDBG("rfbi_exit\n");
+-
+-	iounmap(rfbi.base);
+-}
+-
+ int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev)
+ {
+ 	int r;
+@@ -1056,3 +1013,68 @@ int rfbi_init_display(struct omap_dss_device *dssdev)
+ 	dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE;
+ 	return 0;
+ }
++
++/* RFBI HW IP initialisation */
++static int omap_rfbihw_probe(struct platform_device *pdev)
++{
++	u32 rev;
++	u32 l;
++
++	rfbi.pdev = pdev;
++
++	spin_lock_init(&rfbi.cmd_lock);
++
++	init_completion(&rfbi.cmd_done);
++	atomic_set(&rfbi.cmd_fifo_full, 0);
++	atomic_set(&rfbi.cmd_pending, 0);
++
++	rfbi.base = ioremap(RFBI_BASE, SZ_256);
++	if (!rfbi.base) {
++		DSSERR("can't ioremap RFBI\n");
++		return -ENOMEM;
++	}
++
++	rfbi_enable_clocks(1);
++
++	msleep(10);
++
++	rfbi.l4_khz = dss_clk_get_rate(DSS_CLK_ICK) / 1000;
++
++	/* Enable autoidle and smart-idle */
++	l = rfbi_read_reg(RFBI_SYSCONFIG);
++	l |= (1 << 0) | (2 << 3);
++	rfbi_write_reg(RFBI_SYSCONFIG, l);
++
++	rev = rfbi_read_reg(RFBI_REVISION);
++	printk(KERN_INFO "OMAP RFBI rev %d.%d\n",
++	       FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
++
++	rfbi_enable_clocks(0);
++
++	return 0;
++}
++
++static int omap_rfbihw_remove(struct platform_device *pdev)
++{
++	iounmap(rfbi.base);
++	return 0;
++}
++
++static struct platform_driver omap_rfbihw_driver = {
++	.probe          = omap_rfbihw_probe,
++	.remove         = omap_rfbihw_remove,
++	.driver         = {
++		.name   = "omapdss_rfbi",
++		.owner  = THIS_MODULE,
++	},
++};
++
++int rfbi_init_platform_driver(void)
++{
++	return platform_driver_register(&omap_rfbihw_driver);
++}
++
++void rfbi_uninit_platform_driver(void)
++{
++	return platform_driver_unregister(&omap_rfbihw_driver);
++}
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0152-OMAP2-3-DSS2-DISPC-create-platform_driver-move-init-.patch b/patches/dss2_next/0152-OMAP2-3-DSS2-DISPC-create-platform_driver-move-init-.patch
new file mode 100644
index 000000000..b8c3dd190
--- /dev/null
+++ b/patches/dss2_next/0152-OMAP2-3-DSS2-DISPC-create-platform_driver-move-init-.patch
@@ -0,0 +1,199 @@
+From 6ca532a3c91233a06949ec16653383745e516940 Mon Sep 17 00:00:00 2001
+From: Senthilvadivu Guruswamy <svadivu@ti.com>
+Date: Mon, 24 Jan 2011 06:22:00 +0000
+Subject: [PATCH 152/200] OMAP2, 3: DSS2: DISPC: create platform_driver, move init, exit to driver
+
+Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
+So a platform_driver for DISPC is created and init exit methods are moved from core.c
+to its driver probe,remove. pdev member has to be maintained by its own drivers.
+
+DISPC platform driver is registered from inside omap_dss_probe, in the order desired.
+
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c  |    8 ++--
+ drivers/video/omap2/dss/dispc.c |  105 ++++++++++++++++++++++++---------------
+ drivers/video/omap2/dss/dss.h   |    4 +-
+ 3 files changed, 70 insertions(+), 47 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index 8eef616..8b7eab8 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -213,9 +213,9 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 		goto err_dpi;
+ 	}
+ 
+-	r = dispc_init();
++	r = dispc_init_platform_driver();
+ 	if (r) {
+-		DSSERR("Failed to initialize dispc\n");
++		DSSERR("Failed to initialize dispc platform driver\n");
+ 		goto err_dispc;
+ 	}
+ 
+@@ -281,7 +281,7 @@ err_dsi:
+ err_sdi:
+ 	venc_exit();
+ err_venc:
+-	dispc_exit();
++	dispc_uninit_platform_driver();
+ err_dispc:
+ 	dpi_exit();
+ err_dpi:
+@@ -301,7 +301,7 @@ static int omap_dss_remove(struct platform_device *pdev)
+ 	dss_uninitialize_debugfs();
+ 
+ 	venc_exit();
+-	dispc_exit();
++	dispc_uninit_platform_driver();
+ 	dpi_exit();
+ 	rfbi_uninit_platform_driver();
+ 	if (cpu_is_omap34xx()) {
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index 9f8c69f..28ad68b 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -178,6 +178,7 @@ struct dispc_irq_stats {
+ };
+ 
+ static struct {
++	struct platform_device *pdev;
+ 	void __iomem    *base;
+ 
+ 	u32	fifo_size[3];
+@@ -3269,47 +3270,6 @@ static void _omap_dispc_initial_config(void)
+ 	dispc_read_plane_fifo_sizes();
+ }
+ 
+-int dispc_init(void)
+-{
+-	u32 rev;
+-
+-	spin_lock_init(&dispc.irq_lock);
+-
+-#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
+-	spin_lock_init(&dispc.irq_stats_lock);
+-	dispc.irq_stats.last_reset = jiffies;
+-#endif
+-
+-	INIT_WORK(&dispc.error_work, dispc_error_worker);
+-
+-	dispc.base = ioremap(DISPC_BASE, DISPC_SZ_REGS);
+-	if (!dispc.base) {
+-		DSSERR("can't ioremap DISPC\n");
+-		return -ENOMEM;
+-	}
+-
+-	enable_clocks(1);
+-
+-	_omap_dispc_initial_config();
+-
+-	_omap_dispc_initialize_irq();
+-
+-	dispc_save_context();
+-
+-	rev = dispc_read_reg(DISPC_REVISION);
+-	printk(KERN_INFO "OMAP DISPC rev %d.%d\n",
+-	       FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
+-
+-	enable_clocks(0);
+-
+-	return 0;
+-}
+-
+-void dispc_exit(void)
+-{
+-	iounmap(dispc.base);
+-}
+-
+ int dispc_enable_plane(enum omap_plane plane, bool enable)
+ {
+ 	DSSDBG("dispc_enable_plane %d, %d\n", plane, enable);
+@@ -3359,3 +3319,66 @@ int dispc_setup_plane(enum omap_plane plane,
+ 
+ 	return r;
+ }
++
++/* DISPC HW IP initialisation */
++static int omap_dispchw_probe(struct platform_device *pdev)
++{
++	u32 rev;
++	dispc.pdev = pdev;
++
++	spin_lock_init(&dispc.irq_lock);
++
++#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
++	spin_lock_init(&dispc.irq_stats_lock);
++	dispc.irq_stats.last_reset = jiffies;
++#endif
++
++	INIT_WORK(&dispc.error_work, dispc_error_worker);
++
++	dispc.base = ioremap(DISPC_BASE, DISPC_SZ_REGS);
++	if (!dispc.base) {
++		DSSERR("can't ioremap DISPC\n");
++		return -ENOMEM;
++	}
++
++	enable_clocks(1);
++
++	_omap_dispc_initial_config();
++
++	_omap_dispc_initialize_irq();
++
++	dispc_save_context();
++
++	rev = dispc_read_reg(DISPC_REVISION);
++	printk(KERN_INFO "OMAP DISPC rev %d.%d\n",
++	       FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
++
++	enable_clocks(0);
++
++	return 0;
++}
++
++static int omap_dispchw_remove(struct platform_device *pdev)
++{
++	iounmap(dispc.base);
++	return 0;
++}
++
++static struct platform_driver omap_dispchw_driver = {
++	.probe          = omap_dispchw_probe,
++	.remove         = omap_dispchw_remove,
++	.driver         = {
++		.name   = "omapdss_dispc",
++		.owner  = THIS_MODULE,
++	},
++};
++
++int dispc_init_platform_driver(void)
++{
++	return platform_driver_register(&omap_dispchw_driver);
++}
++
++void dispc_uninit_platform_driver(void)
++{
++	return platform_driver_unregister(&omap_dispchw_driver);
++}
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index 0ba4bdb..f4835c8 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -319,8 +319,8 @@ static inline void dpi_exit(void)
+ #endif
+ 
+ /* DISPC */
+-int dispc_init(void);
+-void dispc_exit(void);
++int dispc_init_platform_driver(void);
++void dispc_uninit_platform_driver(void);
+ void dispc_dump_clocks(struct seq_file *s);
+ void dispc_dump_irqs(struct seq_file *s);
+ void dispc_dump_regs(struct seq_file *s);
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0153-OMAP2-3-DSS2-VENC-create-platform_driver-move-init-e.patch b/patches/dss2_next/0153-OMAP2-3-DSS2-VENC-create-platform_driver-move-init-e.patch
new file mode 100644
index 000000000..418903fac
--- /dev/null
+++ b/patches/dss2_next/0153-OMAP2-3-DSS2-VENC-create-platform_driver-move-init-e.patch
@@ -0,0 +1,404 @@
+From fbc316b42ccac419060811f29843908e40b8ab58 Mon Sep 17 00:00:00 2001
+From: Senthilvadivu Guruswamy <svadivu@ti.com>
+Date: Mon, 24 Jan 2011 06:22:01 +0000
+Subject: [PATCH 153/200] OMAP2, 3: DSS2: VENC: create platform_driver, move init, exit to driver
+
+Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
+So a platform_driver for VENC is created and init exit methods are moved from core.c
+to its driver probe,remove. pdev member has to be maintained by its own drivers.
+
+Also, venc_vdda_dac reading is moved to venc.c.
+
+VENC platform driver is registered from inside omap_dss_probe, in the order desired.
+
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/board-3430sdp.c          |    2 +-
+ arch/arm/mach-omap2/board-cm-t35.c           |    2 +-
+ arch/arm/mach-omap2/board-devkit8000.c       |    2 +-
+ arch/arm/mach-omap2/board-omap3beagle.c      |    2 +-
+ arch/arm/mach-omap2/board-omap3evm.c         |    2 +-
+ arch/arm/mach-omap2/board-omap3pandora.c     |    2 +-
+ arch/arm/mach-omap2/board-omap3stalker.c     |    2 +-
+ arch/arm/mach-omap2/board-rx51-peripherals.c |    2 +-
+ arch/arm/mach-omap2/board-zoom-peripherals.c |    2 +-
+ drivers/video/omap2/dss/core.c               |   28 +------
+ drivers/video/omap2/dss/dss.h                |    9 +-
+ drivers/video/omap2/dss/venc.c               |  116 +++++++++++++++++---------
+ 12 files changed, 93 insertions(+), 78 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
+index f6ff141..89ffe84 100644
+--- a/arch/arm/mach-omap2/board-3430sdp.c
++++ b/arch/arm/mach-omap2/board-3430sdp.c
+@@ -395,7 +395,7 @@ static struct regulator_consumer_supply sdp3430_vaux3_supplies[] = {
+ };
+ 
+ static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = {
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss"),
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
+ };
+ 
+ /* VPLL2 for digital video outputs */
+diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
+index 27bea54..e55fde0 100644
+--- a/arch/arm/mach-omap2/board-cm-t35.c
++++ b/arch/arm/mach-omap2/board-cm-t35.c
+@@ -488,7 +488,7 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = {
+ };
+ 
+ static struct regulator_consumer_supply cm_t35_vdac_supply =
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss");
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
+ 
+ static struct regulator_consumer_supply cm_t35_vdvi_supply =
+ 	REGULATOR_SUPPLY("vdvi", "omapdss");
+diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
+index 728f27c..b64774b 100644
+--- a/arch/arm/mach-omap2/board-devkit8000.c
++++ b/arch/arm/mach-omap2/board-devkit8000.c
+@@ -196,7 +196,7 @@ static struct omap_dss_board_info devkit8000_dss_data = {
+ };
+ 
+ static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss");
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
+ 
+ static uint32_t board_keymap[] = {
+ 	KEY(0, 0, KEY_1),
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index b6752ac..23dde69 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -229,7 +229,7 @@ static struct omap_dss_board_info beagle_dss_data = {
+ };
+ 
+ static struct regulator_consumer_supply beagle_vdac_supply =
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss");
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
+ 
+ static struct regulator_consumer_supply beagle_vdvi_supply =
+ 	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
+diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
+index b65848c..a6564b4 100644
+--- a/arch/arm/mach-omap2/board-omap3evm.c
++++ b/arch/arm/mach-omap2/board-omap3evm.c
+@@ -542,7 +542,7 @@ static struct twl4030_codec_data omap3evm_codec_data = {
+ };
+ 
+ static struct regulator_consumer_supply omap3_evm_vdda_dac_supply =
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss");
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
+ 
+ /* VDAC for DSS driving S-Video */
+ static struct regulator_init_data omap3_evm_vdac = {
+diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
+index 5386a81..37de418 100644
+--- a/arch/arm/mach-omap2/board-omap3pandora.c
++++ b/arch/arm/mach-omap2/board-omap3pandora.c
+@@ -342,7 +342,7 @@ static struct regulator_consumer_supply pandora_vmmc3_supply =
+ 	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2");
+ 
+ static struct regulator_consumer_supply pandora_vdda_dac_supply =
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss");
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
+ 
+ static struct regulator_consumer_supply pandora_vdds_supplies[] = {
+ 	REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
+diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
+index 15ede8b..bd0eed8 100644
+--- a/arch/arm/mach-omap2/board-omap3stalker.c
++++ b/arch/arm/mach-omap2/board-omap3stalker.c
+@@ -439,7 +439,7 @@ static struct twl4030_codec_data omap3stalker_codec_data = {
+ };
+ 
+ static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply =
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss");
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
+ 
+ /* VDAC for DSS driving S-Video */
+ static struct regulator_init_data omap3_stalker_vdac = {
+diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
+index 5f1900c..bbcb677 100644
+--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
++++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
+@@ -372,7 +372,7 @@ static struct regulator_consumer_supply rx51_vaux1_consumers[] = {
+ };
+ 
+ static struct regulator_consumer_supply rx51_vdac_supply[] = {
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss"),
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
+ };
+ 
+ static struct regulator_init_data rx51_vaux1 = {
+diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c
+index 448ab60..405400c 100644
+--- a/arch/arm/mach-omap2/board-zoom-peripherals.c
++++ b/arch/arm/mach-omap2/board-zoom-peripherals.c
+@@ -230,7 +230,7 @@ static struct regulator_consumer_supply zoom_vpll2_supply =
+ 	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
+ 
+ static struct regulator_consumer_supply zoom_vdda_dac_supply =
+-	REGULATOR_SUPPLY("vdda_dac", "omapdss");
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
+ 
+ static struct regulator_init_data zoom_vpll2 = {
+ 	.constraints = {
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index 8b7eab8..57c6303 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -43,7 +43,6 @@ static struct {
+ 
+ 	struct regulator *vdds_dsi_reg;
+ 	struct regulator *vdds_sdi_reg;
+-	struct regulator *vdda_dac_reg;
+ } core;
+ 
+ static char *def_disp_name;
+@@ -85,20 +84,6 @@ struct regulator *dss_get_vdds_sdi(void)
+ 	return reg;
+ }
+ 
+-struct regulator *dss_get_vdda_dac(void)
+-{
+-	struct regulator *reg;
+-
+-	if (core.vdda_dac_reg != NULL)
+-		return core.vdda_dac_reg;
+-
+-	reg = regulator_get(&core.pdev->dev, "vdda_dac");
+-	if (!IS_ERR(reg))
+-		core.vdda_dac_reg = reg;
+-
+-	return reg;
+-}
+-
+ #if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
+ static int dss_debug_show(struct seq_file *s, void *unused)
+ {
+@@ -219,9 +204,9 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 		goto err_dispc;
+ 	}
+ 
+-	r = venc_init(pdev);
++	r = venc_init_platform_driver();
+ 	if (r) {
+-		DSSERR("Failed to initialize venc\n");
++		DSSERR("Failed to initialize venc platform driver\n");
+ 		goto err_venc;
+ 	}
+ 
+@@ -279,7 +264,7 @@ err_dsi:
+ 	if (cpu_is_omap34xx())
+ 		sdi_exit();
+ err_sdi:
+-	venc_exit();
++	venc_uninit_platform_driver();
+ err_venc:
+ 	dispc_uninit_platform_driver();
+ err_dispc:
+@@ -300,7 +285,7 @@ static int omap_dss_remove(struct platform_device *pdev)
+ 
+ 	dss_uninitialize_debugfs();
+ 
+-	venc_exit();
++	venc_uninit_platform_driver();
+ 	dispc_uninit_platform_driver();
+ 	dpi_exit();
+ 	rfbi_uninit_platform_driver();
+@@ -597,11 +582,6 @@ static void __exit omap_dss_exit(void)
+ 		core.vdds_sdi_reg = NULL;
+ 	}
+ 
+-	if (core.vdda_dac_reg != NULL) {
+-		regulator_put(core.vdda_dac_reg);
+-		core.vdda_dac_reg = NULL;
+-	}
+-
+ 	platform_driver_unregister(&omap_dss_driver);
+ 
+ 	omap_dss_bus_unregister();
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index f4835c8..9313851 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -172,7 +172,6 @@ struct platform_device;
+ struct bus_type *dss_get_bus(void);
+ struct regulator *dss_get_vdds_dsi(void);
+ struct regulator *dss_get_vdds_sdi(void);
+-struct regulator *dss_get_vdda_dac(void);
+ 
+ /* display */
+ int dss_suspend_all_devices(void);
+@@ -412,16 +411,16 @@ int dispc_get_clock_div(enum omap_channel channel,
+ 
+ /* VENC */
+ #ifdef CONFIG_OMAP2_DSS_VENC
+-int venc_init(struct platform_device *pdev);
+-void venc_exit(void);
++int venc_init_platform_driver(void);
++void venc_uninit_platform_driver(void);
+ void venc_dump_regs(struct seq_file *s);
+ int venc_init_display(struct omap_dss_device *display);
+ #else
+-static inline int venc_init(struct platform_device *pdev)
++static inline int venc_init_platform_driver(void)
+ {
+ 	return 0;
+ }
+-static inline void venc_exit(void)
++static inline void venc_uninit_platform_driver(void)
+ {
+ }
+ #endif
+diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
+index eff3505..765a4ac 100644
+--- a/drivers/video/omap2/dss/venc.c
++++ b/drivers/video/omap2/dss/venc.c
+@@ -289,6 +289,7 @@ const struct omap_video_timings omap_dss_ntsc_timings = {
+ EXPORT_SYMBOL(omap_dss_ntsc_timings);
+ 
+ static struct {
++	struct platform_device *pdev;
+ 	void __iomem *base;
+ 	struct mutex venc_lock;
+ 	u32 wss_data;
+@@ -306,6 +307,17 @@ static inline u32 venc_read_reg(int idx)
+ 	return l;
+ }
+ 
++static struct regulator *venc_get_vdda_dac(void)
++{
++	struct regulator *reg;
++
++	reg = regulator_get(&venc.pdev->dev, "vdda_dac");
++	if (!IS_ERR(reg))
++		venc.vdda_dac_reg = reg;
++
++	return reg;
++}
++
+ static void venc_write_config(const struct venc_config *config)
+ {
+ 	DSSDBG("write venc conf\n");
+@@ -641,46 +653,6 @@ static struct omap_dss_driver venc_driver = {
+ };
+ /* driver end */
+ 
+-
+-
+-int venc_init(struct platform_device *pdev)
+-{
+-	u8 rev_id;
+-
+-	mutex_init(&venc.venc_lock);
+-
+-	venc.wss_data = 0;
+-
+-	venc.base = ioremap(VENC_BASE, SZ_1K);
+-	if (!venc.base) {
+-		DSSERR("can't ioremap VENC\n");
+-		return -ENOMEM;
+-	}
+-
+-	venc.vdda_dac_reg = dss_get_vdda_dac();
+-	if (IS_ERR(venc.vdda_dac_reg)) {
+-		iounmap(venc.base);
+-		DSSERR("can't get VDDA_DAC regulator\n");
+-		return PTR_ERR(venc.vdda_dac_reg);
+-	}
+-
+-	venc_enable_clocks(1);
+-
+-	rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
+-	printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
+-
+-	venc_enable_clocks(0);
+-
+-	return omap_dss_register_driver(&venc_driver);
+-}
+-
+-void venc_exit(void)
+-{
+-	omap_dss_unregister_driver(&venc_driver);
+-
+-	iounmap(venc.base);
+-}
+-
+ int venc_init_display(struct omap_dss_device *dssdev)
+ {
+ 	DSSDBG("init_display\n");
+@@ -740,3 +712,67 @@ void venc_dump_regs(struct seq_file *s)
+ 
+ #undef DUMPREG
+ }
++
++/* VENC HW IP initialisation */
++static int omap_venchw_probe(struct platform_device *pdev)
++{
++	u8 rev_id;
++	venc.pdev = pdev;
++
++	mutex_init(&venc.venc_lock);
++
++	venc.wss_data = 0;
++
++	venc.base = ioremap(VENC_BASE, SZ_1K);
++	if (!venc.base) {
++		DSSERR("can't ioremap VENC\n");
++		return -ENOMEM;
++	}
++
++	venc.vdda_dac_reg = venc_get_vdda_dac();
++	if (IS_ERR(venc.vdda_dac_reg)) {
++		iounmap(venc.base);
++		DSSERR("can't get VDDA_DAC regulator\n");
++		return PTR_ERR(venc.vdda_dac_reg);
++	}
++
++	venc_enable_clocks(1);
++
++	rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
++	printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
++
++	venc_enable_clocks(0);
++
++	return omap_dss_register_driver(&venc_driver);
++}
++
++static int omap_venchw_remove(struct platform_device *pdev)
++{
++	if (venc.vdda_dac_reg != NULL) {
++		regulator_put(venc.vdda_dac_reg);
++		venc.vdda_dac_reg = NULL;
++	}
++	omap_dss_unregister_driver(&venc_driver);
++
++	iounmap(venc.base);
++	return 0;
++}
++
++static struct platform_driver omap_venchw_driver = {
++	.probe          = omap_venchw_probe,
++	.remove         = omap_venchw_remove,
++	.driver         = {
++		.name   = "omapdss_venc",
++		.owner  = THIS_MODULE,
++	},
++};
++
++int venc_init_platform_driver(void)
++{
++	return platform_driver_register(&omap_venchw_driver);
++}
++
++void venc_uninit_platform_driver(void)
++{
++	return platform_driver_unregister(&omap_venchw_driver);
++}
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0154-OMAP2-3-DSS2-DSI-create-platform_driver-move-init-ex.patch b/patches/dss2_next/0154-OMAP2-3-DSS2-DSI-create-platform_driver-move-init-ex.patch
new file mode 100644
index 000000000..5fac8973b
--- /dev/null
+++ b/patches/dss2_next/0154-OMAP2-3-DSS2-DSI-create-platform_driver-move-init-ex.patch
@@ -0,0 +1,398 @@
+From f1925411e98c5cecdfbb9395047d545337e733ae Mon Sep 17 00:00:00 2001
+From: Senthilvadivu Guruswamy <svadivu@ti.com>
+Date: Mon, 24 Jan 2011 06:22:02 +0000
+Subject: [PATCH 154/200] OMAP2, 3: DSS2: DSI: create platform_driver, move init, exit to driver
+
+Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
+So a platform_driver for DSI is created and init exit methods are moved from core.c
+to its driver probe,remove. pdev member has to be maintained by its own drivers.
+
+Also, vdds_dsi regulator handling is copied to dsi.c, since vdds_dsi regulator is
+needed by dpi_init() too. Board files are updated accordingly to add 2 instances of
+vdds_dsi regulator.
+
+DSI platform driver is registered from inside omap_dss_probe, in the order desired.
+
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/board-3430sdp.c          |    1 +
+ arch/arm/mach-omap2/board-devkit8000.c       |   10 ++--
+ arch/arm/mach-omap2/board-igep0020.c         |   10 ++--
+ arch/arm/mach-omap2/board-omap3beagle.c      |   10 ++--
+ arch/arm/mach-omap2/board-omap3evm.c         |   10 ++--
+ arch/arm/mach-omap2/board-omap3pandora.c     |    1 +
+ arch/arm/mach-omap2/board-omap3stalker.c     |   10 ++--
+ arch/arm/mach-omap2/board-zoom-peripherals.c |   10 ++--
+ drivers/video/omap2/dss/core.c               |    8 ++--
+ drivers/video/omap2/dss/dsi.c                |   64 ++++++++++++++++++++++++-
+ drivers/video/omap2/dss/dss.h                |    8 ++--
+ 11 files changed, 107 insertions(+), 35 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
+index 89ffe84..91e3514 100644
+--- a/arch/arm/mach-omap2/board-3430sdp.c
++++ b/arch/arm/mach-omap2/board-3430sdp.c
+@@ -401,6 +401,7 @@ static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = {
+ /* VPLL2 for digital video outputs */
+ static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
+ 	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
+ };
+ 
+ static struct regulator_consumer_supply sdp3430_vmmc1_supplies[] = {
+diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
+index b64774b..e102e14 100644
+--- a/arch/arm/mach-omap2/board-devkit8000.c
++++ b/arch/arm/mach-omap2/board-devkit8000.c
+@@ -277,8 +277,10 @@ static struct twl4030_gpio_platform_data devkit8000_gpio_data = {
+ 	.setup		= devkit8000_twl_gpio_setup,
+ };
+ 
+-static struct regulator_consumer_supply devkit8000_vpll1_supply =
+-	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
++static struct regulator_consumer_supply devkit8000_vpll1_supplies[] = {
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
++};
+ 
+ /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
+ static struct regulator_init_data devkit8000_vmmc1 = {
+@@ -319,8 +321,8 @@ static struct regulator_init_data devkit8000_vpll1 = {
+ 		.valid_ops_mask		= REGULATOR_CHANGE_MODE
+ 					| REGULATOR_CHANGE_STATUS,
+ 	},
+-	.num_consumer_supplies	= 1,
+-	.consumer_supplies	= &devkit8000_vpll1_supply,
++	.num_consumer_supplies	= ARRAY_SIZE(devkit8000_vpll1_supplies),
++	.consumer_supplies	= devkit8000_vpll1_supplies,
+ };
+ 
+ /* VAUX4 for ads7846 and nubs */
+diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
+index c4b3c1c..12b3e41 100644
+--- a/arch/arm/mach-omap2/board-igep0020.c
++++ b/arch/arm/mach-omap2/board-igep0020.c
+@@ -485,8 +485,10 @@ static struct omap_dss_board_info igep2_dss_data = {
+ 	.default_device	= &igep2_dvi_device,
+ };
+ 
+-static struct regulator_consumer_supply igep2_vpll2_supply =
+-	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
++static struct regulator_consumer_supply igep2_vpll2_supplies[] = {
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
++};
+ 
+ static struct regulator_init_data igep2_vpll2 = {
+ 	.constraints = {
+@@ -499,8 +501,8 @@ static struct regulator_init_data igep2_vpll2 = {
+ 		.valid_ops_mask		= REGULATOR_CHANGE_MODE
+ 					| REGULATOR_CHANGE_STATUS,
+ 	},
+-	.num_consumer_supplies	= 1,
+-	.consumer_supplies	= &igep2_vpll2_supply,
++	.num_consumer_supplies	= ARRAY_SIZE(igep2_vpll2_supplies),
++	.consumer_supplies	= igep2_vpll2_supplies,
+ };
+ 
+ static void __init igep2_display_init(void)
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 23dde69..f52232d 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -231,8 +231,10 @@ static struct omap_dss_board_info beagle_dss_data = {
+ static struct regulator_consumer_supply beagle_vdac_supply =
+ 	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
+ 
+-static struct regulator_consumer_supply beagle_vdvi_supply =
+-	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
++static struct regulator_consumer_supply beagle_vdvi_supplies[] = {
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
++};
+ 
+ static void __init beagle_display_init(void)
+ {
+@@ -419,8 +421,8 @@ static struct regulator_init_data beagle_vpll2 = {
+ 		.valid_ops_mask		= REGULATOR_CHANGE_MODE
+ 					| REGULATOR_CHANGE_STATUS,
+ 	},
+-	.num_consumer_supplies	= 1,
+-	.consumer_supplies	= &beagle_vdvi_supply,
++	.num_consumer_supplies	= ARRAY_SIZE(beagle_vdvi_supplies),
++	.consumer_supplies	= beagle_vdvi_supplies,
+ };
+ 
+ static struct twl4030_usb_data beagle_usb_data = {
+diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
+index a6564b4..5800db3 100644
+--- a/arch/arm/mach-omap2/board-omap3evm.c
++++ b/arch/arm/mach-omap2/board-omap3evm.c
+@@ -560,8 +560,10 @@ static struct regulator_init_data omap3_evm_vdac = {
+ };
+ 
+ /* VPLL2 for digital video outputs */
+-static struct regulator_consumer_supply omap3_evm_vpll2_supply =
+-	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
++static struct regulator_consumer_supply omap3_evm_vpll2_supplies[] = {
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
++};
+ 
+ static struct regulator_init_data omap3_evm_vpll2 = {
+ 	.constraints = {
+@@ -573,8 +575,8 @@ static struct regulator_init_data omap3_evm_vpll2 = {
+ 		.valid_ops_mask		= REGULATOR_CHANGE_MODE
+ 					| REGULATOR_CHANGE_STATUS,
+ 	},
+-	.num_consumer_supplies	= 1,
+-	.consumer_supplies	= &omap3_evm_vpll2_supply,
++	.num_consumer_supplies	= ARRAY_SIZE(omap3_evm_vpll2_supplies),
++	.consumer_supplies	= omap3_evm_vpll2_supplies,
+ };
+ 
+ /* ads7846 on SPI */
+diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
+index 37de418..131a58d 100644
+--- a/arch/arm/mach-omap2/board-omap3pandora.c
++++ b/arch/arm/mach-omap2/board-omap3pandora.c
+@@ -347,6 +347,7 @@ static struct regulator_consumer_supply pandora_vdda_dac_supply =
+ static struct regulator_consumer_supply pandora_vdds_supplies[] = {
+ 	REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
+ 	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
+ };
+ 
+ static struct regulator_consumer_supply pandora_vcc_lcd_supply =
+diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
+index bd0eed8..d1163a8 100644
+--- a/arch/arm/mach-omap2/board-omap3stalker.c
++++ b/arch/arm/mach-omap2/board-omap3stalker.c
+@@ -457,8 +457,10 @@ static struct regulator_init_data omap3_stalker_vdac = {
+ };
+ 
+ /* VPLL2 for digital video outputs */
+-static struct regulator_consumer_supply omap3_stalker_vpll2_supply =
+-	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
++static struct regulator_consumer_supply omap3_stalker_vpll2_supplies[] = {
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
++};
+ 
+ static struct regulator_init_data omap3_stalker_vpll2 = {
+ 	.constraints		= {
+@@ -471,8 +473,8 @@ static struct regulator_init_data omap3_stalker_vpll2 = {
+ 		.valid_ops_mask		= REGULATOR_CHANGE_MODE
+ 		| REGULATOR_CHANGE_STATUS,
+ 	},
+-	.num_consumer_supplies	= 1,
+-	.consumer_supplies	= &omap3_stalker_vpll2_supply,
++	.num_consumer_supplies	= ARRAY_SIZE(omap3_stalker_vpll2_supplies),
++	.consumer_supplies	= omap3_stalker_vpll2_supplies,
+ };
+ 
+ static struct twl4030_platform_data omap3stalker_twldata = {
+diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c
+index 405400c..8dee754 100644
+--- a/arch/arm/mach-omap2/board-zoom-peripherals.c
++++ b/arch/arm/mach-omap2/board-zoom-peripherals.c
+@@ -226,8 +226,10 @@ static struct omap2_hsmmc_info mmc[] = {
+ 	{}      /* Terminator */
+ };
+ 
+-static struct regulator_consumer_supply zoom_vpll2_supply =
+-	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
++static struct regulator_consumer_supply zoom_vpll2_supplies[] = {
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
++};
+ 
+ static struct regulator_consumer_supply zoom_vdda_dac_supply =
+ 	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
+@@ -241,8 +243,8 @@ static struct regulator_init_data zoom_vpll2 = {
+ 		.valid_ops_mask         = REGULATOR_CHANGE_MODE
+ 					| REGULATOR_CHANGE_STATUS,
+ 	},
+-	.num_consumer_supplies		= 1,
+-	.consumer_supplies		= &zoom_vpll2_supply,
++	.num_consumer_supplies		= ARRAY_SIZE(zoom_vpll2_supplies),
++	.consumer_supplies		= zoom_vpll2_supplies,
+ };
+ 
+ static struct regulator_init_data zoom_vdac = {
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index 57c6303..3f7a5fc 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -222,9 +222,9 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 			goto err_sdi;
+ 		}
+ 
+-		r = dsi_init(pdev);
++		r = dsi_init_platform_driver();
+ 		if (r) {
+-			DSSERR("Failed to initialize DSI\n");
++			DSSERR("Failed to initialize DSI platform driver\n");
+ 			goto err_dsi;
+ 		}
+ 	}
+@@ -259,7 +259,7 @@ err_register:
+ 	dss_uninitialize_debugfs();
+ err_debugfs:
+ 	if (cpu_is_omap34xx())
+-		dsi_exit();
++		dsi_uninit_platform_driver();
+ err_dsi:
+ 	if (cpu_is_omap34xx())
+ 		sdi_exit();
+@@ -290,7 +290,7 @@ static int omap_dss_remove(struct platform_device *pdev)
+ 	dpi_exit();
+ 	rfbi_uninit_platform_driver();
+ 	if (cpu_is_omap34xx()) {
+-		dsi_exit();
++		dsi_uninit_platform_driver();
+ 		sdi_exit();
+ 	}
+ 
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index ddf3a05..fa85f1a 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -222,6 +222,7 @@ struct dsi_irq_stats {
+ 
+ static struct
+ {
++	struct platform_device *pdev;
+ 	void __iomem	*base;
+ 
+ 	struct dsi_clock_info current_cinfo;
+@@ -292,6 +293,20 @@ static inline u32 dsi_read_reg(const struct dsi_reg idx)
+ 	return __raw_readl(dsi.base + idx.idx);
+ }
+ 
++static struct regulator *dsi_get_vdds_dsi(void)
++{
++	struct regulator *reg;
++
++	if (dsi.vdds_dsi_reg != NULL)
++		return dsi.vdds_dsi_reg;
++
++	reg = regulator_get(&dsi.pdev->dev, "vdds_dsi");
++	if (!IS_ERR(reg))
++		dsi.vdds_dsi_reg = reg;
++
++	return reg;
++}
++
+ 
+ void dsi_save_context(void)
+ {
+@@ -3238,7 +3253,7 @@ void dsi_wait_dsi2_pll_active(void)
+ 		DSSERR("DSI2 PLL clock not active\n");
+ }
+ 
+-int dsi_init(struct platform_device *pdev)
++static int dsi_init(struct platform_device *pdev)
+ {
+ 	u32 rev;
+ 	int r;
+@@ -3275,7 +3290,7 @@ int dsi_init(struct platform_device *pdev)
+ 		goto err1;
+ 	}
+ 
+-	dsi.vdds_dsi_reg = dss_get_vdds_dsi();
++	dsi.vdds_dsi_reg = dsi_get_vdds_dsi();
+ 	if (IS_ERR(dsi.vdds_dsi_reg)) {
+ 		DSSERR("can't get VDDS_DSI regulator\n");
+ 		r = PTR_ERR(dsi.vdds_dsi_reg);
+@@ -3298,8 +3313,13 @@ err1:
+ 	return r;
+ }
+ 
+-void dsi_exit(void)
++static void dsi_exit(void)
+ {
++	if (dsi.vdds_dsi_reg != NULL) {
++		regulator_put(dsi.vdds_dsi_reg);
++		dsi.vdds_dsi_reg = NULL;
++	}
++
+ 	iounmap(dsi.base);
+ 
+ 	destroy_workqueue(dsi.workqueue);
+@@ -3307,3 +3327,41 @@ void dsi_exit(void)
+ 	DSSDBG("omap_dsi_exit\n");
+ }
+ 
++/* DSI1 HW IP initialisation */
++static int omap_dsi1hw_probe(struct platform_device *pdev)
++{
++	int r;
++	dsi.pdev = pdev;
++	r = dsi_init(pdev);
++	if (r) {
++		DSSERR("Failed to initialize DSI\n");
++		goto err_dsi;
++	}
++err_dsi:
++	return r;
++}
++
++static int omap_dsi1hw_remove(struct platform_device *pdev)
++{
++	dsi_exit();
++	return 0;
++}
++
++static struct platform_driver omap_dsi1hw_driver = {
++	.probe          = omap_dsi1hw_probe,
++	.remove         = omap_dsi1hw_remove,
++	.driver         = {
++		.name   = "omapdss_dsi1",
++		.owner  = THIS_MODULE,
++	},
++};
++
++int dsi_init_platform_driver(void)
++{
++	return platform_driver_register(&omap_dsi1hw_driver);
++}
++
++void dsi_uninit_platform_driver(void)
++{
++	return platform_driver_unregister(&omap_dsi1hw_driver);
++}
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index 9313851..981d247 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -261,8 +261,8 @@ static inline void sdi_exit(void)
+ 
+ /* DSI */
+ #ifdef CONFIG_OMAP2_DSS_DSI
+-int dsi_init(struct platform_device *pdev);
+-void dsi_exit(void);
++int dsi_init_platform_driver(void);
++void dsi_uninit_platform_driver(void);
+ 
+ void dsi_dump_clocks(struct seq_file *s);
+ void dsi_dump_irqs(struct seq_file *s);
+@@ -287,11 +287,11 @@ void dsi_get_overlay_fifo_thresholds(enum omap_plane plane,
+ void dsi_wait_dsi1_pll_active(void);
+ void dsi_wait_dsi2_pll_active(void);
+ #else
+-static inline int dsi_init(struct platform_device *pdev)
++static inline int dsi_init_platform_driver(void)
+ {
+ 	return 0;
+ }
+-static inline void dsi_exit(void)
++static inline void dsi_uninit_platform_driver(void)
+ {
+ }
+ static inline void dsi_wait_dsi1_pll_active(void)
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0155-OMAP2-3-DSS2-replace-printk-with-dev_dbg-in-init.patch b/patches/dss2_next/0155-OMAP2-3-DSS2-replace-printk-with-dev_dbg-in-init.patch
new file mode 100644
index 000000000..245e77441
--- /dev/null
+++ b/patches/dss2_next/0155-OMAP2-3-DSS2-replace-printk-with-dev_dbg-in-init.patch
@@ -0,0 +1,74 @@
+From 0f522348395fd82bab73cb9606a1eec7061b729c Mon Sep 17 00:00:00 2001
+From: Sumit Semwal <sumit.semwal@ti.com>
+Date: Mon, 24 Jan 2011 06:22:03 +0000
+Subject: [PATCH 155/200] OMAP2,3: DSS2: replace printk with dev_dbg in init
+
+This patch replaces printk's in the init/probe functions to dev_dbg
+for boot time optimization.
+
+Reviewed-by: Kevin Hilman <khilman@ti.com>
+Tested-by: Kevin Hilman <khilman@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dispc.c |    2 +-
+ drivers/video/omap2/dss/dsi.c   |    2 +-
+ drivers/video/omap2/dss/rfbi.c  |    2 +-
+ drivers/video/omap2/dss/venc.c  |    2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index 28ad68b..032e5dd 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -3350,7 +3350,7 @@ static int omap_dispchw_probe(struct platform_device *pdev)
+ 	dispc_save_context();
+ 
+ 	rev = dispc_read_reg(DISPC_REVISION);
+-	printk(KERN_INFO "OMAP DISPC rev %d.%d\n",
++	dev_dbg(&pdev->dev, "OMAP DISPC rev %d.%d\n",
+ 	       FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
+ 
+ 	enable_clocks(0);
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index fa85f1a..df24603 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -3300,7 +3300,7 @@ static int dsi_init(struct platform_device *pdev)
+ 	enable_clocks(1);
+ 
+ 	rev = dsi_read_reg(DSI_REVISION);
+-	printk(KERN_INFO "OMAP DSI rev %d.%d\n",
++	dev_dbg(&pdev->dev, "OMAP DSI rev %d.%d\n",
+ 	       FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
+ 
+ 	enable_clocks(0);
+diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
+index 153f963..5f18648 100644
+--- a/drivers/video/omap2/dss/rfbi.c
++++ b/drivers/video/omap2/dss/rfbi.c
+@@ -1046,7 +1046,7 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
+ 	rfbi_write_reg(RFBI_SYSCONFIG, l);
+ 
+ 	rev = rfbi_read_reg(RFBI_REVISION);
+-	printk(KERN_INFO "OMAP RFBI rev %d.%d\n",
++	dev_dbg(&pdev->dev, "OMAP RFBI rev %d.%d\n",
+ 	       FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
+ 
+ 	rfbi_enable_clocks(0);
+diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
+index 765a4ac..4a02f8e 100644
+--- a/drivers/video/omap2/dss/venc.c
++++ b/drivers/video/omap2/dss/venc.c
+@@ -739,7 +739,7 @@ static int omap_venchw_probe(struct platform_device *pdev)
+ 	venc_enable_clocks(1);
+ 
+ 	rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
+-	printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
++	dev_dbg(&pdev->dev, "OMAP VENC rev %d\n", rev_id);
+ 
+ 	venc_enable_clocks(0);
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0156-OMAP2-3-DSS2-Use-platform-device-to-get-baseaddr.patch b/patches/dss2_next/0156-OMAP2-3-DSS2-Use-platform-device-to-get-baseaddr.patch
new file mode 100644
index 000000000..f2afc6794
--- /dev/null
+++ b/patches/dss2_next/0156-OMAP2-3-DSS2-Use-platform-device-to-get-baseaddr.patch
@@ -0,0 +1,198 @@
+From 102fb11de769b62b9230dd2ec91b6581b6f09d75 Mon Sep 17 00:00:00 2001
+From: Senthilvadivu Guruswamy <svadivu@ti.com>
+Date: Mon, 24 Jan 2011 06:22:04 +0000
+Subject: [PATCH 156/200] OMAP2,3: DSS2: Use platform device to get baseaddr
+
+DSS, DISPC, DSI, RFBI, VENC baseaddr can be obtained from platform_get_resource().
+This API in turn picks the right silicon baseaddr from the hwmod database.
+So hardcoding of base addr could be removed.
+
+Reviewed-by: Paul Walmsley <paul@pwsan.com>
+Reviewed-by: Kevin Hilman <khilman@ti.com>
+Tested-by: Kevin Hilman <khilman@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dispc.c |   11 ++++++++---
+ drivers/video/omap2/dss/dsi.c   |   11 ++++++++---
+ drivers/video/omap2/dss/dss.c   |   11 ++++++++---
+ drivers/video/omap2/dss/rfbi.c  |   10 +++++++---
+ drivers/video/omap2/dss/venc.c  |   11 ++++++++---
+ 5 files changed, 39 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index 032e5dd..96e37f8 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -42,8 +42,6 @@
+ #include "dss_features.h"
+ 
+ /* DISPC */
+-#define DISPC_BASE			0x48050400
+-
+ #define DISPC_SZ_REGS			SZ_4K
+ 
+ struct dispc_reg { u16 idx; };
+@@ -3324,6 +3322,8 @@ int dispc_setup_plane(enum omap_plane plane,
+ static int omap_dispchw_probe(struct platform_device *pdev)
+ {
+ 	u32 rev;
++	struct resource *dispc_mem;
++
+ 	dispc.pdev = pdev;
+ 
+ 	spin_lock_init(&dispc.irq_lock);
+@@ -3335,7 +3335,12 @@ static int omap_dispchw_probe(struct platform_device *pdev)
+ 
+ 	INIT_WORK(&dispc.error_work, dispc_error_worker);
+ 
+-	dispc.base = ioremap(DISPC_BASE, DISPC_SZ_REGS);
++	dispc_mem = platform_get_resource(dispc.pdev, IORESOURCE_MEM, 0);
++	if (!dispc_mem) {
++		DSSERR("can't get IORESOURCE_MEM DISPC\n");
++		return -EINVAL;
++	}
++	dispc.base = ioremap(dispc_mem->start, resource_size(dispc_mem));
+ 	if (!dispc.base) {
+ 		DSSERR("can't ioremap DISPC\n");
+ 		return -ENOMEM;
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index df24603..c42acae 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -42,8 +42,6 @@
+ /*#define VERBOSE_IRQ*/
+ #define DSI_CATCH_MISSING_TE
+ 
+-#define DSI_BASE		0x4804FC00
+-
+ struct dsi_reg { u16 idx; };
+ 
+ #define DSI_REG(idx)		((const struct dsi_reg) { idx })
+@@ -3257,6 +3255,7 @@ static int dsi_init(struct platform_device *pdev)
+ {
+ 	u32 rev;
+ 	int r;
++	struct resource *dsi_mem;
+ 
+ 	spin_lock_init(&dsi.errors_lock);
+ 	dsi.errors = 0;
+@@ -3283,7 +3282,13 @@ static int dsi_init(struct platform_device *pdev)
+ 	dsi.te_timer.function = dsi_te_timeout;
+ 	dsi.te_timer.data = 0;
+ #endif
+-	dsi.base = ioremap(DSI_BASE, DSI_SZ_REGS);
++	dsi_mem = platform_get_resource(dsi.pdev, IORESOURCE_MEM, 0);
++	if (!dsi_mem) {
++		DSSERR("can't get IORESOURCE_MEM DSI\n");
++		r = -EINVAL;
++		goto err1;
++	}
++	dsi.base = ioremap(dsi_mem->start, resource_size(dsi_mem));
+ 	if (!dsi.base) {
+ 		DSSERR("can't ioremap DSI\n");
+ 		r = -ENOMEM;
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 72b395d..ee9ce4a 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -34,8 +34,6 @@
+ #include <plat/clock.h>
+ #include "dss.h"
+ 
+-#define DSS_BASE			0x48050000
+-
+ #define DSS_SZ_REGS			SZ_512
+ 
+ struct dss_reg {
+@@ -567,8 +565,15 @@ static int dss_init(bool skip_init)
+ {
+ 	int r;
+ 	u32 rev;
++	struct resource *dss_mem;
+ 
+-	dss.base = ioremap(DSS_BASE, DSS_SZ_REGS);
++	dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
++	if (!dss_mem) {
++		DSSERR("can't get IORESOURCE_MEM DSS\n");
++		r = -EINVAL;
++		goto fail0;
++	}
++	dss.base = ioremap(dss_mem->start, resource_size(dss_mem));
+ 	if (!dss.base) {
+ 		DSSERR("can't ioremap DSS\n");
+ 		r = -ENOMEM;
+diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
+index 5f18648..6dbb95d 100644
+--- a/drivers/video/omap2/dss/rfbi.c
++++ b/drivers/video/omap2/dss/rfbi.c
+@@ -36,8 +36,6 @@
+ #include <plat/display.h>
+ #include "dss.h"
+ 
+-#define RFBI_BASE               0x48050800
+-
+ struct rfbi_reg { u16 idx; };
+ 
+ #define RFBI_REG(idx)		((const struct rfbi_reg) { idx })
+@@ -1019,6 +1017,7 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
+ {
+ 	u32 rev;
+ 	u32 l;
++	struct resource *rfbi_mem;
+ 
+ 	rfbi.pdev = pdev;
+ 
+@@ -1028,7 +1027,12 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
+ 	atomic_set(&rfbi.cmd_fifo_full, 0);
+ 	atomic_set(&rfbi.cmd_pending, 0);
+ 
+-	rfbi.base = ioremap(RFBI_BASE, SZ_256);
++	rfbi_mem = platform_get_resource(rfbi.pdev, IORESOURCE_MEM, 0);
++	if (!rfbi_mem) {
++		DSSERR("can't get IORESOURCE_MEM RFBI\n");
++		return -EINVAL;
++	}
++	rfbi.base = ioremap(rfbi_mem->start, resource_size(rfbi_mem));
+ 	if (!rfbi.base) {
+ 		DSSERR("can't ioremap RFBI\n");
+ 		return -ENOMEM;
+diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
+index 4a02f8e..ef36811 100644
+--- a/drivers/video/omap2/dss/venc.c
++++ b/drivers/video/omap2/dss/venc.c
+@@ -39,8 +39,6 @@
+ 
+ #include "dss.h"
+ 
+-#define VENC_BASE	0x48050C00
+-
+ /* Venc registers */
+ #define VENC_REV_ID				0x00
+ #define VENC_STATUS				0x04
+@@ -717,13 +715,20 @@ void venc_dump_regs(struct seq_file *s)
+ static int omap_venchw_probe(struct platform_device *pdev)
+ {
+ 	u8 rev_id;
++	struct resource *venc_mem;
++
+ 	venc.pdev = pdev;
+ 
+ 	mutex_init(&venc.venc_lock);
+ 
+ 	venc.wss_data = 0;
+ 
+-	venc.base = ioremap(VENC_BASE, SZ_1K);
++	venc_mem = platform_get_resource(venc.pdev, IORESOURCE_MEM, 0);
++	if (!venc_mem) {
++		DSSERR("can't get IORESOURCE_MEM VENC\n");
++		return -EINVAL;
++	}
++	venc.base = ioremap(venc_mem->start, resource_size(venc_mem));
+ 	if (!venc.base) {
+ 		DSSERR("can't ioremap VENC\n");
+ 		return -ENOMEM;
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0157-OMAP2-3-DSS2-Get-DSS-IRQ-from-platform-device.patch b/patches/dss2_next/0157-OMAP2-3-DSS2-Get-DSS-IRQ-from-platform-device.patch
new file mode 100644
index 000000000..431d991f2
--- /dev/null
+++ b/patches/dss2_next/0157-OMAP2-3-DSS2-Get-DSS-IRQ-from-platform-device.patch
@@ -0,0 +1,79 @@
+From 0b8e4fe3f4a25a6d73730ee2b66d1f1ecb3a512c Mon Sep 17 00:00:00 2001
+From: Senthilvadivu Guruswamy <svadivu@ti.com>
+Date: Tue, 15 Feb 2011 23:14:00 -0600
+Subject: [PATCH 157/200] OMAP2,3: DSS2: Get DSS IRQ from platform device
+
+DSS IRQ number can be obtained from platform_get_irq().  This API in turn
+picks the right IRQ number belonging to HW IP from the hwmod database.
+So hardcoding of IRQ number could be removed.
+
+This IRQ is stored in dss_irq as part of dss structure, and freed it in
+dss_exit().
+
+Reviewed-by: Paul Walmsley <paul@pwsan.com>
+Reviewed-by: Kevin Hilman <khilman@ti.com>
+Tested-by: Kevin Hilman <khilman@ti.com>
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dss.c |   22 +++++++++++++++-------
+ 1 files changed, 15 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index ee9ce4a..a00733d 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -79,6 +79,7 @@ static struct {
+ 	enum dss_clk_source dispc_clk_source;
+ 
+ 	u32		ctx[DSS_SZ_REGS / sizeof(u32)];
++	int		dss_irq;
+ } dss;
+ 
+ static void dss_clk_enable_all_no_ctx(void);
+@@ -609,11 +610,18 @@ static int dss_init(bool skip_init)
+ 	REG_FLD_MOD(DSS_CONTROL, 0, 2, 2);	/* venc clock mode = normal */
+ #endif
+ 
+-	r = request_irq(INT_24XX_DSS_IRQ,
+-			cpu_is_omap24xx()
+-			? dss_irq_handler_omap2
+-			: dss_irq_handler_omap3,
+-			0, "OMAP DSS", NULL);
++	dss.dss_irq = platform_get_irq(dss.pdev, 0);
++	if (dss.dss_irq < 0) {
++		DSSERR("omap2 dss: platform_get_irq failed\n");
++		r = -ENODEV;
++		goto fail1;
++	}
++
++	r = request_irq(dss.dss_irq,
++		cpu_is_omap24xx()
++		? dss_irq_handler_omap2
++		: dss_irq_handler_omap3,
++		0, "OMAP DSS", NULL);
+ 
+ 	if (r < 0) {
+ 		DSSERR("omap2 dss: request_irq failed\n");
+@@ -641,7 +649,7 @@ static int dss_init(bool skip_init)
+ 	return 0;
+ 
+ fail2:
+-	free_irq(INT_24XX_DSS_IRQ, NULL);
++	free_irq(dss.dss_irq, NULL);
+ fail1:
+ 	iounmap(dss.base);
+ fail0:
+@@ -653,7 +661,7 @@ static void dss_exit(void)
+ 	if (cpu_is_omap34xx())
+ 		clk_put(dss.dpll4_m4_ck);
+ 
+-	free_irq(INT_24XX_DSS_IRQ, NULL);
++	free_irq(dss.dss_irq, NULL);
+ 
+ 	iounmap(dss.base);
+ }
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0158-OMAP2PLUS-clocks-Align-DSS-clock-names-and-roles.patch b/patches/dss2_next/0158-OMAP2PLUS-clocks-Align-DSS-clock-names-and-roles.patch
new file mode 100644
index 000000000..c3d55e4de
--- /dev/null
+++ b/patches/dss2_next/0158-OMAP2PLUS-clocks-Align-DSS-clock-names-and-roles.patch
@@ -0,0 +1,147 @@
+From 8ebc8e65d559584af4ca696a18f4dd64774f7bf5 Mon Sep 17 00:00:00 2001
+From: Sumit Semwal <sumit.semwal@ti.com>
+Date: Mon, 31 Jan 2011 16:27:43 +0000
+Subject: [PATCH 158/200] OMAP2PLUS: clocks: Align DSS clock names and roles
+
+Currently, clock database has <dev, clock-name> tuples for DSS2. Because of
+this, the clock names are different across different OMAP platforms.
+
+This patch aligns the DSS2 clock names and roles across OMAP 2420, 2430, 3xxx,
+44xx platforms in the clock databases, hwmod databases for opt-clocks, and DSS
+clock handling.
+
+This ensures that clk_get/put/enable/disable APIs in DSS can use uniform role
+names.
+
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Acked-by: Paul Walmsley <paul@pwsan.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/clock2420_data.c       |    6 +++---
+ arch/arm/mach-omap2/clock2430_data.c       |    6 +++---
+ arch/arm/mach-omap2/clock3xxx_data.c       |   10 +++++-----
+ arch/arm/mach-omap2/clock44xx_data.c       |   10 +++++-----
+ arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |    2 +-
+ drivers/video/omap2/dss/dss.c              |    8 ++++----
+ 6 files changed, 21 insertions(+), 21 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
+index 9ece62a..26d89d5 100644
+--- a/arch/arm/mach-omap2/clock2420_data.c
++++ b/arch/arm/mach-omap2/clock2420_data.c
+@@ -1787,9 +1787,9 @@ static struct omap_clk omap2420_clks[] = {
+ 	CLK(NULL,	"gfx_ick",	&gfx_ick,	CK_242X),
+ 	/* DSS domain clocks */
+ 	CLK("omapdss_dss",	"ick",		&dss_ick,	CK_242X),
+-	CLK("omapdss_dss",	"dss1_fck",	&dss1_fck,	CK_242X),
+-	CLK("omapdss_dss",	"dss2_fck",	&dss2_fck,	CK_242X),
+-	CLK("omapdss_dss",	"tv_fck",	&dss_54m_fck,	CK_242X),
++	CLK("omapdss_dss",	"fck",		&dss1_fck,	CK_242X),
++	CLK("omapdss_dss",	"sys_clk",	&dss2_fck,	CK_242X),
++	CLK("omapdss_dss",	"tv_clk",	&dss_54m_fck,	CK_242X),
+ 	/* L3 domain clocks */
+ 	CLK(NULL,	"core_l3_ck",	&core_l3_ck,	CK_242X),
+ 	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck, CK_242X),
+diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c
+index 61006ae..0bfe487 100644
+--- a/arch/arm/mach-omap2/clock2430_data.c
++++ b/arch/arm/mach-omap2/clock2430_data.c
+@@ -1891,9 +1891,9 @@ static struct omap_clk omap2430_clks[] = {
+ 	CLK(NULL,	"mdm_osc_ck",	&mdm_osc_ck,	CK_243X),
+ 	/* DSS domain clocks */
+ 	CLK("omapdss_dss",	"ick",		&dss_ick,	CK_243X),
+-	CLK("omapdss_dss",	"dss1_fck",	&dss1_fck,	CK_243X),
+-	CLK("omapdss_dss",	"dss2_fck",	&dss2_fck,	CK_243X),
+-	CLK("omapdss_dss",	"tv_fck",	&dss_54m_fck,	CK_243X),
++	CLK("omapdss_dss",	"fck",		&dss1_fck,	CK_243X),
++	CLK("omapdss_dss",	"sys_clk",	&dss2_fck,	CK_243X),
++	CLK("omapdss_dss",	"tv_clk",	&dss_54m_fck,	CK_243X),
+ 	/* L3 domain clocks */
+ 	CLK(NULL,	"core_l3_ck",	&core_l3_ck,	CK_243X),
+ 	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck, CK_243X),
+diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
+index 2e47d16..427f6c8 100644
+--- a/arch/arm/mach-omap2/clock3xxx_data.c
++++ b/arch/arm/mach-omap2/clock3xxx_data.c
+@@ -3357,11 +3357,11 @@ static struct omap_clk omap3xxx_clks[] = {
+ 	CLK("omap_rng",	"ick",		&rng_ick,	CK_34XX | CK_36XX),
+ 	CLK(NULL,	"sha11_ick",	&sha11_ick,	CK_34XX | CK_36XX),
+ 	CLK(NULL,	"des1_ick",	&des1_ick,	CK_34XX | CK_36XX),
+-	CLK("omapdss_dss",	"dss1_fck",	&dss1_alwon_fck_3430es1, CK_3430ES1),
+-	CLK("omapdss_dss",	"dss1_fck",	&dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+-	CLK("omapdss_dss",	"tv_fck",	&dss_tv_fck,	CK_3XXX),
+-	CLK("omapdss_dss",	"video_fck",	&dss_96m_fck,	CK_3XXX),
+-	CLK("omapdss_dss",	"dss2_fck",	&dss2_alwon_fck, CK_3XXX),
++	CLK("omapdss_dss",	"fck",		&dss1_alwon_fck_3430es1, CK_3430ES1),
++	CLK("omapdss_dss",	"fck",		&dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
++	CLK("omapdss_dss",	"tv_clk",	&dss_tv_fck,	CK_3XXX),
++	CLK("omapdss_dss",	"video_clk",	&dss_96m_fck,	CK_3XXX),
++	CLK("omapdss_dss",	"sys_clk",	&dss2_alwon_fck, CK_3XXX),
+ 	CLK("omapdss_dss",	"ick",		&dss_ick_3430es1,	CK_3430ES1),
+ 	CLK("omapdss_dss",	"ick",		&dss_ick_3430es2,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+ 	CLK(NULL,	"cam_mclk",	&cam_mclk,	CK_34XX | CK_36XX),
+diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
+index fdbc042..6ba69b1 100644
+--- a/arch/arm/mach-omap2/clock44xx_data.c
++++ b/arch/arm/mach-omap2/clock44xx_data.c
+@@ -3106,11 +3106,11 @@ static struct omap_clk omap44xx_clks[] = {
+ 	CLK(NULL,	"dmic_sync_mux_ck",		&dmic_sync_mux_ck,	CK_443X),
+ 	CLK(NULL,	"dmic_fck",			&dmic_fck,	CK_443X),
+ 	CLK(NULL,	"dsp_fck",			&dsp_fck,	CK_443X),
+-	CLK(NULL,	"dss_sys_clk",			&dss_sys_clk,	CK_443X),
+-	CLK(NULL,	"dss_tv_clk",			&dss_tv_clk,	CK_443X),
+-	CLK(NULL,	"dss_dss_clk",			&dss_dss_clk,	CK_443X),
+-	CLK(NULL,	"dss_48mhz_clk",		&dss_48mhz_clk,	CK_443X),
+-	CLK(NULL,	"dss_fck",			&dss_fck,	CK_443X),
++	CLK("omapdss_dss",	"sys_clk",			&dss_sys_clk,	CK_443X),
++	CLK("omapdss_dss",	"tv_clk",			&dss_tv_clk,	CK_443X),
++	CLK("omapdss_dss",	"dss_clk",			&dss_dss_clk,	CK_443X),
++	CLK("omapdss_dss",	"video_clk",			&dss_48mhz_clk,	CK_443X),
++	CLK("omapdss_dss",	"fck",				&dss_fck,	CK_443X),
+ 	CLK(NULL,	"efuse_ctrl_cust_fck",		&efuse_ctrl_cust_fck,	CK_443X),
+ 	CLK(NULL,	"emif1_fck",			&emif1_fck,	CK_443X),
+ 	CLK(NULL,	"emif2_fck",			&emif2_fck,	CK_443X),
+diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+index 05c8305..d9ef3b8 100644
+--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
++++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+@@ -1553,7 +1553,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] = {
+ 
+ static struct omap_hwmod_opt_clk dss_opt_clks[] = {
+ 	{ .role = "tv_clk", .clk = "dss_tv_fck" },
+-	{ .role = "dssclk", .clk = "dss_96m_fck" },
++	{ .role = "video_clk", .clk = "dss_96m_fck" },
+ 	{ .role = "sys_clk", .clk = "dss2_alwon_fck" },
+ };
+ 
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index a00733d..56d37bf 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -759,19 +759,19 @@ static int dss_get_clocks(void)
+ 	if (r)
+ 		goto err;
+ 
+-	r = dss_get_clock(&dss.dss1_fck, "dss1_fck");
++	r = dss_get_clock(&dss.dss1_fck, "fck");
+ 	if (r)
+ 		goto err;
+ 
+-	r = dss_get_clock(&dss.dss2_fck, "dss2_fck");
++	r = dss_get_clock(&dss.dss2_fck, "sys_clk");
+ 	if (r)
+ 		goto err;
+ 
+-	r = dss_get_clock(&dss.dss_54m_fck, "tv_fck");
++	r = dss_get_clock(&dss.dss_54m_fck, "tv_clk");
+ 	if (r)
+ 		goto err;
+ 
+-	r = dss_get_clock(&dss.dss_96m_fck, "video_fck");
++	r = dss_get_clock(&dss.dss_96m_fck, "video_clk");
+ 	if (r)
+ 		goto err;
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0159-OMAP2PLUS-DSS2-Generalize-naming-of-PRCM-related-clo.patch b/patches/dss2_next/0159-OMAP2PLUS-DSS2-Generalize-naming-of-PRCM-related-clo.patch
new file mode 100644
index 000000000..8c19d4d98
--- /dev/null
+++ b/patches/dss2_next/0159-OMAP2PLUS-DSS2-Generalize-naming-of-PRCM-related-clo.patch
@@ -0,0 +1,587 @@
+From 65e233c7b3459485f521d00cfac696fedf6118be Mon Sep 17 00:00:00 2001
+From: Archit Taneja <archit@ti.com>
+Date: Mon, 31 Jan 2011 16:27:44 +0000
+Subject: [PATCH 159/200] OMAP2PLUS: DSS2: Generalize naming of PRCM related clock enums in DSS driver
+
+enum dss_clock structure is replaced with generic names that
+could be used across OMAP2420, 2430, 3xxx, 44xx platforms.
+
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c    |    4 +-
+ drivers/video/omap2/dss/dispc.c   |   10 +++---
+ drivers/video/omap2/dss/dpi.c     |   16 +++++-----
+ drivers/video/omap2/dss/dsi.c     |   18 +++++-----
+ drivers/video/omap2/dss/dss.c     |   62 ++++++++++++++++++------------------
+ drivers/video/omap2/dss/dss.h     |   10 +++---
+ drivers/video/omap2/dss/manager.c |    4 +-
+ drivers/video/omap2/dss/overlay.c |    4 +-
+ drivers/video/omap2/dss/rfbi.c    |   10 +++---
+ drivers/video/omap2/dss/sdi.c     |    8 ++--
+ drivers/video/omap2/dss/venc.c    |    8 ++--
+ 11 files changed, 77 insertions(+), 77 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index 3f7a5fc..f56ee64 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -184,7 +184,7 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 	}
+ 
+ 	/* keep clocks enabled to prevent context saves/restores during init */
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	r = rfbi_init_platform_driver();
+ 	if (r) {
+@@ -251,7 +251,7 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 			pdata->default_device = dssdev;
+ 	}
+ 
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	return 0;
+ 
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index 96e37f8..dc4518c 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -551,9 +551,9 @@ void dispc_restore_context(void)
+ static inline void enable_clocks(bool enable)
+ {
+ 	if (enable)
+-		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	else
+-		dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++		dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ }
+ 
+ bool dispc_go_busy(enum omap_channel channel)
+@@ -2311,7 +2311,7 @@ unsigned long dispc_fclk_rate(void)
+ 	unsigned long r = 0;
+ 
+ 	if (dss_get_dispc_clk_source() == DSS_SRC_DSS1_ALWON_FCLK)
+-		r = dss_clk_get_rate(DSS_CLK_FCK1);
++		r = dss_clk_get_rate(DSS_CLK_FCK);
+ 	else
+ #ifdef CONFIG_OMAP2_DSS_DSI
+ 		r = dsi_get_dsi1_pll_rate();
+@@ -2439,7 +2439,7 @@ void dispc_dump_regs(struct seq_file *s)
+ {
+ #define DUMPREG(r) seq_printf(s, "%-35s %08x\n", #r, dispc_read_reg(r))
+ 
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	DUMPREG(DISPC_REVISION);
+ 	DUMPREG(DISPC_SYSCONFIG);
+@@ -2596,7 +2596,7 @@ void dispc_dump_regs(struct seq_file *s)
+ 	DUMPREG(DISPC_VID_PRELOAD(0));
+ 	DUMPREG(DISPC_VID_PRELOAD(1));
+ 
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ #undef DUMPREG
+ }
+ 
+diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
+index 75fb0a5..746f1b6 100644
+--- a/drivers/video/omap2/dss/dpi.c
++++ b/drivers/video/omap2/dss/dpi.c
+@@ -107,7 +107,7 @@ static int dpi_set_mode(struct omap_dss_device *dssdev)
+ 	bool is_tft;
+ 	int r = 0;
+ 
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	dispc_set_pol_freq(dssdev->manager->id, dssdev->panel.config,
+ 			dssdev->panel.acbi, dssdev->panel.acb);
+@@ -137,7 +137,7 @@ static int dpi_set_mode(struct omap_dss_device *dssdev)
+ 	dispc_set_lcd_timings(dssdev->manager->id, t);
+ 
+ err0:
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	return r;
+ }
+ 
+@@ -173,14 +173,14 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
+ 			goto err1;
+ 	}
+ 
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	r = dpi_basic_init(dssdev);
+ 	if (r)
+ 		goto err2;
+ 
+ #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
+-	dss_clk_enable(DSS_CLK_FCK2);
++	dss_clk_enable(DSS_CLK_SYSCK);
+ 	r = dsi_pll_init(dssdev, 0, 1);
+ 	if (r)
+ 		goto err3;
+@@ -199,10 +199,10 @@ err4:
+ #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
+ 	dsi_pll_uninit();
+ err3:
+-	dss_clk_disable(DSS_CLK_FCK2);
++	dss_clk_disable(DSS_CLK_SYSCK);
+ #endif
+ err2:
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	if (cpu_is_omap34xx())
+ 		regulator_disable(dpi.vdds_dsi_reg);
+ err1:
+@@ -219,10 +219,10 @@ void omapdss_dpi_display_disable(struct omap_dss_device *dssdev)
+ #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
+ 	dss_select_dispc_clk_source(DSS_SRC_DSS1_ALWON_FCLK);
+ 	dsi_pll_uninit();
+-	dss_clk_disable(DSS_CLK_FCK2);
++	dss_clk_disable(DSS_CLK_SYSCK);
+ #endif
+ 
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	if (cpu_is_omap34xx())
+ 		regulator_disable(dpi.vdds_dsi_reg);
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index c42acae..c7b5382 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -654,18 +654,18 @@ static void dsi_vc_disable_bta_irq(int channel)
+ static inline void enable_clocks(bool enable)
+ {
+ 	if (enable)
+-		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	else
+-		dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++		dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ }
+ 
+ /* source clock for DSI PLL. this could also be PCLKFREE */
+ static inline void dsi_enable_pll_clock(bool enable)
+ {
+ 	if (enable)
+-		dss_clk_enable(DSS_CLK_FCK2);
++		dss_clk_enable(DSS_CLK_SYSCK);
+ 	else
+-		dss_clk_disable(DSS_CLK_FCK2);
++		dss_clk_disable(DSS_CLK_SYSCK);
+ 
+ 	if (enable && dsi.pll_locked) {
+ 		if (wait_for_bit_change(DSI_PLL_STATUS, 1, 1) != 1)
+@@ -741,7 +741,7 @@ static unsigned long dsi_fclk_rate(void)
+ 
+ 	if (dss_get_dsi_clk_source() == DSS_SRC_DSS1_ALWON_FCLK) {
+ 		/* DSI FCLK source is DSS1_ALWON_FCK, which is dss1_fck */
+-		r = dss_clk_get_rate(DSS_CLK_FCK1);
++		r = dss_clk_get_rate(DSS_CLK_FCK);
+ 	} else {
+ 		/* DSI FCLK source is DSI2_PLL_FCLK */
+ 		r = dsi_get_dsi2_pll_rate();
+@@ -821,7 +821,7 @@ static int dsi_calc_clock_rates(struct omap_dss_device *dssdev,
+ 		return -EINVAL;
+ 
+ 	if (cinfo->use_dss2_fck) {
+-		cinfo->clkin = dss_clk_get_rate(DSS_CLK_FCK2);
++		cinfo->clkin = dss_clk_get_rate(DSS_CLK_SYSCK);
+ 		/* XXX it is unclear if highfreq should be used
+ 		 * with DSS2_FCK source also */
+ 		cinfo->highfreq = 0;
+@@ -867,7 +867,7 @@ int dsi_pll_calc_clock_div_pck(bool is_tft, unsigned long req_pck,
+ 	int match = 0;
+ 	unsigned long dss_clk_fck2;
+ 
+-	dss_clk_fck2 = dss_clk_get_rate(DSS_CLK_FCK2);
++	dss_clk_fck2 = dss_clk_get_rate(DSS_CLK_SYSCK);
+ 
+ 	if (req_pck == dsi.cache_req_pck &&
+ 			dsi.cache_cinfo.clkin == dss_clk_fck2) {
+@@ -1319,7 +1319,7 @@ void dsi_dump_regs(struct seq_file *s)
+ {
+ #define DUMPREG(r) seq_printf(s, "%-35s %08x\n", #r, dsi_read_reg(r))
+ 
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	DUMPREG(DSI_REVISION);
+ 	DUMPREG(DSI_SYSCONFIG);
+@@ -1391,7 +1391,7 @@ void dsi_dump_regs(struct seq_file *s)
+ 	DUMPREG(DSI_PLL_CONFIGURATION1);
+ 	DUMPREG(DSI_PLL_CONFIGURATION2);
+ 
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ #undef DUMPREG
+ }
+ 
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 56d37bf..0372bef 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -227,7 +227,7 @@ void dss_dump_clocks(struct seq_file *s)
+ 	unsigned long dpll4_ck_rate;
+ 	unsigned long dpll4_m4_ck_rate;
+ 
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	dpll4_ck_rate = clk_get_rate(clk_get_parent(dss.dpll4_m4_ck));
+ 	dpll4_m4_ck_rate = clk_get_rate(dss.dpll4_m4_ck);
+@@ -240,21 +240,21 @@ void dss_dump_clocks(struct seq_file *s)
+ 		seq_printf(s, "dss1_alwon_fclk = %lu / %lu  = %lu\n",
+ 			dpll4_ck_rate,
+ 			dpll4_ck_rate / dpll4_m4_ck_rate,
+-			dss_clk_get_rate(DSS_CLK_FCK1));
++			dss_clk_get_rate(DSS_CLK_FCK));
+ 	else
+ 		seq_printf(s, "dss1_alwon_fclk = %lu / %lu * 2 = %lu\n",
+ 			dpll4_ck_rate,
+ 			dpll4_ck_rate / dpll4_m4_ck_rate,
+-			dss_clk_get_rate(DSS_CLK_FCK1));
++			dss_clk_get_rate(DSS_CLK_FCK));
+ 
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ }
+ 
+ void dss_dump_regs(struct seq_file *s)
+ {
+ #define DUMPREG(r) seq_printf(s, "%-35s %08x\n", #r, dss_read_reg(r))
+ 
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	DUMPREG(DSS_REVISION);
+ 	DUMPREG(DSS_SYSCONFIG);
+@@ -265,7 +265,7 @@ void dss_dump_regs(struct seq_file *s)
+ 	DUMPREG(DSS_PLL_CONTROL);
+ 	DUMPREG(DSS_SDI_STATUS);
+ 
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ #undef DUMPREG
+ }
+ 
+@@ -350,7 +350,7 @@ int dss_set_clock_div(struct dss_clock_info *cinfo)
+ 
+ int dss_get_clock_div(struct dss_clock_info *cinfo)
+ {
+-	cinfo->fck = dss_clk_get_rate(DSS_CLK_FCK1);
++	cinfo->fck = dss_clk_get_rate(DSS_CLK_FCK);
+ 
+ 	if (cpu_is_omap34xx()) {
+ 		unsigned long prate;
+@@ -391,7 +391,7 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck,
+ 
+ 	prate = dss_get_dpll4_rate();
+ 
+-	fck = dss_clk_get_rate(DSS_CLK_FCK1);
++	fck = dss_clk_get_rate(DSS_CLK_FCK);
+ 	if (req_pck == dss.cache_req_pck &&
+ 			((cpu_is_omap34xx() && prate == dss.cache_prate) ||
+ 			 dss.cache_dss_cinfo.fck == fck)) {
+@@ -418,7 +418,7 @@ retry:
+ 	if (cpu_is_omap24xx()) {
+ 		struct dispc_clock_info cur_dispc;
+ 		/* XXX can we change the clock on omap2? */
+-		fck = dss_clk_get_rate(DSS_CLK_FCK1);
++		fck = dss_clk_get_rate(DSS_CLK_FCK);
+ 		fck_div = 1;
+ 
+ 		dispc_find_clk_divs(is_tft, req_pck, fck, &cur_dispc);
+@@ -701,7 +701,7 @@ static void save_all_ctx(void)
+ {
+ 	DSSDBG("save context\n");
+ 
+-	dss_clk_enable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	dss_save_context();
+ 	dispc_save_context();
+@@ -709,7 +709,7 @@ static void save_all_ctx(void)
+ 	dsi_save_context();
+ #endif
+ 
+-	dss_clk_disable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK);
+ }
+ 
+ static void restore_all_ctx(void)
+@@ -807,13 +807,13 @@ unsigned long dss_clk_get_rate(enum dss_clock clk)
+ 	switch (clk) {
+ 	case DSS_CLK_ICK:
+ 		return clk_get_rate(dss.dss_ick);
+-	case DSS_CLK_FCK1:
++	case DSS_CLK_FCK:
+ 		return clk_get_rate(dss.dss1_fck);
+-	case DSS_CLK_FCK2:
++	case DSS_CLK_SYSCK:
+ 		return clk_get_rate(dss.dss2_fck);
+-	case DSS_CLK_54M:
++	case DSS_CLK_TVFCK:
+ 		return clk_get_rate(dss.dss_54m_fck);
+-	case DSS_CLK_96M:
++	case DSS_CLK_VIDFCK:
+ 		return clk_get_rate(dss.dss_96m_fck);
+ 	}
+ 
+@@ -827,13 +827,13 @@ static unsigned count_clk_bits(enum dss_clock clks)
+ 
+ 	if (clks & DSS_CLK_ICK)
+ 		++num_clks;
+-	if (clks & DSS_CLK_FCK1)
++	if (clks & DSS_CLK_FCK)
+ 		++num_clks;
+-	if (clks & DSS_CLK_FCK2)
++	if (clks & DSS_CLK_SYSCK)
+ 		++num_clks;
+-	if (clks & DSS_CLK_54M)
++	if (clks & DSS_CLK_TVFCK)
+ 		++num_clks;
+-	if (clks & DSS_CLK_96M)
++	if (clks & DSS_CLK_VIDFCK)
+ 		++num_clks;
+ 
+ 	return num_clks;
+@@ -845,13 +845,13 @@ static void dss_clk_enable_no_ctx(enum dss_clock clks)
+ 
+ 	if (clks & DSS_CLK_ICK)
+ 		clk_enable(dss.dss_ick);
+-	if (clks & DSS_CLK_FCK1)
++	if (clks & DSS_CLK_FCK)
+ 		clk_enable(dss.dss1_fck);
+-	if (clks & DSS_CLK_FCK2)
++	if (clks & DSS_CLK_SYSCK)
+ 		clk_enable(dss.dss2_fck);
+-	if (clks & DSS_CLK_54M)
++	if (clks & DSS_CLK_TVFCK)
+ 		clk_enable(dss.dss_54m_fck);
+-	if (clks & DSS_CLK_96M)
++	if (clks & DSS_CLK_VIDFCK)
+ 		clk_enable(dss.dss_96m_fck);
+ 
+ 	dss.num_clks_enabled += num_clks;
+@@ -873,13 +873,13 @@ static void dss_clk_disable_no_ctx(enum dss_clock clks)
+ 
+ 	if (clks & DSS_CLK_ICK)
+ 		clk_disable(dss.dss_ick);
+-	if (clks & DSS_CLK_FCK1)
++	if (clks & DSS_CLK_FCK)
+ 		clk_disable(dss.dss1_fck);
+-	if (clks & DSS_CLK_FCK2)
++	if (clks & DSS_CLK_SYSCK)
+ 		clk_disable(dss.dss2_fck);
+-	if (clks & DSS_CLK_54M)
++	if (clks & DSS_CLK_TVFCK)
+ 		clk_disable(dss.dss_54m_fck);
+-	if (clks & DSS_CLK_96M)
++	if (clks & DSS_CLK_VIDFCK)
+ 		clk_disable(dss.dss_96m_fck);
+ 
+ 	dss.num_clks_enabled -= num_clks;
+@@ -903,9 +903,9 @@ static void dss_clk_enable_all_no_ctx(void)
+ {
+ 	enum dss_clock clks;
+ 
+-	clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
++	clks = DSS_CLK_ICK | DSS_CLK_FCK | DSS_CLK_SYSCK | DSS_CLK_TVFCK;
+ 	if (cpu_is_omap34xx())
+-		clks |= DSS_CLK_96M;
++		clks |= DSS_CLK_VIDFCK;
+ 	dss_clk_enable_no_ctx(clks);
+ }
+ 
+@@ -913,9 +913,9 @@ static void dss_clk_disable_all_no_ctx(void)
+ {
+ 	enum dss_clock clks;
+ 
+-	clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
++	clks = DSS_CLK_ICK | DSS_CLK_FCK | DSS_CLK_SYSCK | DSS_CLK_TVFCK;
+ 	if (cpu_is_omap34xx())
+-		clks |= DSS_CLK_96M;
++		clks |= DSS_CLK_VIDFCK;
+ 	dss_clk_disable_no_ctx(clks);
+ }
+ 
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index 981d247..4b02e07 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -112,11 +112,11 @@ enum omap_parallel_interface_mode {
+ };
+ 
+ enum dss_clock {
+-	DSS_CLK_ICK	= 1 << 0,
+-	DSS_CLK_FCK1	= 1 << 1,
+-	DSS_CLK_FCK2	= 1 << 2,
+-	DSS_CLK_54M	= 1 << 3,
+-	DSS_CLK_96M	= 1 << 4,
++	DSS_CLK_ICK	= 1 << 0,	/* DSS_L3_ICLK and DSS_L4_ICLK */
++	DSS_CLK_FCK	= 1 << 1,	/* DSS1_ALWON_FCLK */
++	DSS_CLK_SYSCK	= 1 << 2,	/* DSS2_ALWON_FCLK */
++	DSS_CLK_TVFCK	= 1 << 3,	/* DSS_TV_FCLK */
++	DSS_CLK_VIDFCK	= 1 << 4,	/* DSS_96M_FCLK*/
+ };
+ 
+ enum dss_clk_source {
+diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c
+index 172d4e6..1f53bf2 100644
+--- a/drivers/video/omap2/dss/manager.c
++++ b/drivers/video/omap2/dss/manager.c
+@@ -1394,7 +1394,7 @@ static int omap_dss_mgr_apply(struct omap_overlay_manager *mgr)
+ 	}
+ 
+ 	r = 0;
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	if (!dss_cache.irq_enabled) {
+ 		u32 mask;
+ 
+@@ -1407,7 +1407,7 @@ static int omap_dss_mgr_apply(struct omap_overlay_manager *mgr)
+ 		dss_cache.irq_enabled = true;
+ 	}
+ 	configure_dispc();
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	spin_unlock_irqrestore(&dss_cache.lock, flags);
+ 
+diff --git a/drivers/video/omap2/dss/overlay.c b/drivers/video/omap2/dss/overlay.c
+index 456efef..996e9a4 100644
+--- a/drivers/video/omap2/dss/overlay.c
++++ b/drivers/video/omap2/dss/overlay.c
+@@ -490,7 +490,7 @@ static int omap_dss_set_manager(struct omap_overlay *ovl,
+ 
+ 	ovl->manager = mgr;
+ 
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	/* XXX: on manual update display, in auto update mode, a bug happens
+ 	 * here. When an overlay is first enabled on LCD, then it's disabled,
+ 	 * and the manager is changed to TV, we sometimes get SYNC_LOST_DIGIT
+@@ -499,7 +499,7 @@ static int omap_dss_set_manager(struct omap_overlay *ovl,
+ 	 * but I don't understand how or why. */
+ 	msleep(40);
+ 	dispc_set_channel_out(ovl->id, mgr->id);
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	return 0;
+ }
+diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
+index 6dbb95d..5ea17f4 100644
+--- a/drivers/video/omap2/dss/rfbi.c
++++ b/drivers/video/omap2/dss/rfbi.c
+@@ -141,9 +141,9 @@ static inline u32 rfbi_read_reg(const struct rfbi_reg idx)
+ static void rfbi_enable_clocks(bool enable)
+ {
+ 	if (enable)
+-		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	else
+-		dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++		dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ }
+ 
+ void omap_rfbi_write_command(const void *buf, u32 len)
+@@ -496,7 +496,7 @@ unsigned long rfbi_get_max_tx_rate(void)
+ 	};
+ 
+ 	l4_rate = rfbi.l4_khz / 1000;
+-	dss1_rate = dss_clk_get_rate(DSS_CLK_FCK1) / 1000000;
++	dss1_rate = dss_clk_get_rate(DSS_CLK_FCK) / 1000000;
+ 
+ 	for (i = 0; i < ARRAY_SIZE(ftab); i++) {
+ 		/* Use a window instead of an exact match, to account
+@@ -921,7 +921,7 @@ void rfbi_dump_regs(struct seq_file *s)
+ {
+ #define DUMPREG(r) seq_printf(s, "%-35s %08x\n", #r, rfbi_read_reg(r))
+ 
+-	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	DUMPREG(RFBI_REVISION);
+ 	DUMPREG(RFBI_SYSCONFIG);
+@@ -952,7 +952,7 @@ void rfbi_dump_regs(struct seq_file *s)
+ 	DUMPREG(RFBI_VSYNC_WIDTH);
+ 	DUMPREG(RFBI_HSYNC_WIDTH);
+ 
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ #undef DUMPREG
+ }
+ 
+diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
+index b64adf7..8272fc1 100644
+--- a/drivers/video/omap2/dss/sdi.c
++++ b/drivers/video/omap2/dss/sdi.c
+@@ -70,7 +70,7 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
+ 
+ 	/* In case of skip_init sdi_init has already enabled the clocks */
+ 	if (!sdi.skip_init)
+-		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	sdi_basic_init(dssdev);
+ 
+@@ -130,7 +130,7 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
+ 
+ 	return 0;
+ err2:
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	regulator_disable(sdi.vdds_sdi_reg);
+ err1:
+ 	omap_dss_stop_device(dssdev);
+@@ -145,7 +145,7 @@ void omapdss_sdi_display_disable(struct omap_dss_device *dssdev)
+ 
+ 	dss_sdi_disable();
+ 
+-	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
++	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	regulator_disable(sdi.vdds_sdi_reg);
+ 
+@@ -175,7 +175,7 @@ int sdi_init(bool skip_init)
+ 	 * of them until sdi_display_enable is called.
+ 	 */
+ 	if (skip_init)
+-		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
++		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	return 0;
+ }
+ 
+diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
+index ef36811..1aadceb 100644
+--- a/drivers/video/omap2/dss/venc.c
++++ b/drivers/video/omap2/dss/venc.c
+@@ -391,11 +391,11 @@ static void venc_reset(void)
+ static void venc_enable_clocks(int enable)
+ {
+ 	if (enable)
+-		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_54M |
+-				DSS_CLK_96M);
++		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK | DSS_CLK_TVFCK |
++				DSS_CLK_VIDFCK);
+ 	else
+-		dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_54M |
+-				DSS_CLK_96M);
++		dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK | DSS_CLK_TVFCK |
++				DSS_CLK_VIDFCK);
+ }
+ 
+ static const struct venc_config *venc_timings_to_config(
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0160-OMAP2PLUS-DSS2-Generalize-external-clock-names-in-st.patch b/patches/dss2_next/0160-OMAP2PLUS-DSS2-Generalize-external-clock-names-in-st.patch
new file mode 100644
index 000000000..f017c454b
--- /dev/null
+++ b/patches/dss2_next/0160-OMAP2PLUS-DSS2-Generalize-external-clock-names-in-st.patch
@@ -0,0 +1,182 @@
+From beb5e3a580bfab26aa97f26426dc257f7043a850 Mon Sep 17 00:00:00 2001
+From: Archit Taneja <archit@ti.com>
+Date: Mon, 31 Jan 2011 16:27:45 +0000
+Subject: [PATCH 160/200] OMAP2PLUS: DSS2: Generalize external clock names in struct dss of dss.c
+
+The dss struct in dss.c has omap2/3 specific clock names. Making them generic,
+to increase readability and extendability.
+
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dss.c |   82 ++++++++++++++++++++--------------------
+ 1 files changed, 41 insertions(+), 41 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 0372bef..ab82f79 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -64,10 +64,10 @@ static struct {
+ 
+ 	struct clk	*dpll4_m4_ck;
+ 	struct clk	*dss_ick;
+-	struct clk	*dss1_fck;
+-	struct clk	*dss2_fck;
+-	struct clk	*dss_54m_fck;
+-	struct clk	*dss_96m_fck;
++	struct clk	*dss_fck;
++	struct clk	*dss_sys_clk;
++	struct clk	*dss_tv_fck;
++	struct clk	*dss_video_fck;
+ 	unsigned	num_clks_enabled;
+ 
+ 	unsigned long	cache_req_pck;
+@@ -750,28 +750,28 @@ static int dss_get_clocks(void)
+ 	int r;
+ 
+ 	dss.dss_ick = NULL;
+-	dss.dss1_fck = NULL;
+-	dss.dss2_fck = NULL;
+-	dss.dss_54m_fck = NULL;
+-	dss.dss_96m_fck = NULL;
++	dss.dss_fck = NULL;
++	dss.dss_sys_clk = NULL;
++	dss.dss_tv_fck = NULL;
++	dss.dss_video_fck = NULL;
+ 
+ 	r = dss_get_clock(&dss.dss_ick, "ick");
+ 	if (r)
+ 		goto err;
+ 
+-	r = dss_get_clock(&dss.dss1_fck, "fck");
++	r = dss_get_clock(&dss.dss_fck, "fck");
+ 	if (r)
+ 		goto err;
+ 
+-	r = dss_get_clock(&dss.dss2_fck, "sys_clk");
++	r = dss_get_clock(&dss.dss_sys_clk, "sys_clk");
+ 	if (r)
+ 		goto err;
+ 
+-	r = dss_get_clock(&dss.dss_54m_fck, "tv_clk");
++	r = dss_get_clock(&dss.dss_tv_fck, "tv_clk");
+ 	if (r)
+ 		goto err;
+ 
+-	r = dss_get_clock(&dss.dss_96m_fck, "video_clk");
++	r = dss_get_clock(&dss.dss_video_fck, "video_clk");
+ 	if (r)
+ 		goto err;
+ 
+@@ -780,25 +780,25 @@ static int dss_get_clocks(void)
+ err:
+ 	if (dss.dss_ick)
+ 		clk_put(dss.dss_ick);
+-	if (dss.dss1_fck)
+-		clk_put(dss.dss1_fck);
+-	if (dss.dss2_fck)
+-		clk_put(dss.dss2_fck);
+-	if (dss.dss_54m_fck)
+-		clk_put(dss.dss_54m_fck);
+-	if (dss.dss_96m_fck)
+-		clk_put(dss.dss_96m_fck);
++	if (dss.dss_fck)
++		clk_put(dss.dss_fck);
++	if (dss.dss_sys_clk)
++		clk_put(dss.dss_sys_clk);
++	if (dss.dss_tv_fck)
++		clk_put(dss.dss_tv_fck);
++	if (dss.dss_video_fck)
++		clk_put(dss.dss_video_fck);
+ 
+ 	return r;
+ }
+ 
+ static void dss_put_clocks(void)
+ {
+-	if (dss.dss_96m_fck)
+-		clk_put(dss.dss_96m_fck);
+-	clk_put(dss.dss_54m_fck);
+-	clk_put(dss.dss1_fck);
+-	clk_put(dss.dss2_fck);
++	if (dss.dss_video_fck)
++		clk_put(dss.dss_video_fck);
++	clk_put(dss.dss_tv_fck);
++	clk_put(dss.dss_fck);
++	clk_put(dss.dss_sys_clk);
+ 	clk_put(dss.dss_ick);
+ }
+ 
+@@ -808,13 +808,13 @@ unsigned long dss_clk_get_rate(enum dss_clock clk)
+ 	case DSS_CLK_ICK:
+ 		return clk_get_rate(dss.dss_ick);
+ 	case DSS_CLK_FCK:
+-		return clk_get_rate(dss.dss1_fck);
++		return clk_get_rate(dss.dss_fck);
+ 	case DSS_CLK_SYSCK:
+-		return clk_get_rate(dss.dss2_fck);
++		return clk_get_rate(dss.dss_sys_clk);
+ 	case DSS_CLK_TVFCK:
+-		return clk_get_rate(dss.dss_54m_fck);
++		return clk_get_rate(dss.dss_tv_fck);
+ 	case DSS_CLK_VIDFCK:
+-		return clk_get_rate(dss.dss_96m_fck);
++		return clk_get_rate(dss.dss_video_fck);
+ 	}
+ 
+ 	BUG();
+@@ -846,13 +846,13 @@ static void dss_clk_enable_no_ctx(enum dss_clock clks)
+ 	if (clks & DSS_CLK_ICK)
+ 		clk_enable(dss.dss_ick);
+ 	if (clks & DSS_CLK_FCK)
+-		clk_enable(dss.dss1_fck);
++		clk_enable(dss.dss_fck);
+ 	if (clks & DSS_CLK_SYSCK)
+-		clk_enable(dss.dss2_fck);
++		clk_enable(dss.dss_sys_clk);
+ 	if (clks & DSS_CLK_TVFCK)
+-		clk_enable(dss.dss_54m_fck);
++		clk_enable(dss.dss_tv_fck);
+ 	if (clks & DSS_CLK_VIDFCK)
+-		clk_enable(dss.dss_96m_fck);
++		clk_enable(dss.dss_video_fck);
+ 
+ 	dss.num_clks_enabled += num_clks;
+ }
+@@ -874,13 +874,13 @@ static void dss_clk_disable_no_ctx(enum dss_clock clks)
+ 	if (clks & DSS_CLK_ICK)
+ 		clk_disable(dss.dss_ick);
+ 	if (clks & DSS_CLK_FCK)
+-		clk_disable(dss.dss1_fck);
++		clk_disable(dss.dss_fck);
+ 	if (clks & DSS_CLK_SYSCK)
+-		clk_disable(dss.dss2_fck);
++		clk_disable(dss.dss_sys_clk);
+ 	if (clks & DSS_CLK_TVFCK)
+-		clk_disable(dss.dss_54m_fck);
++		clk_disable(dss.dss_tv_fck);
+ 	if (clks & DSS_CLK_VIDFCK)
+-		clk_disable(dss.dss_96m_fck);
++		clk_disable(dss.dss_video_fck);
+ 
+ 	dss.num_clks_enabled -= num_clks;
+ }
+@@ -926,10 +926,10 @@ static void core_dump_clocks(struct seq_file *s)
+ 	int i;
+ 	struct clk *clocks[5] = {
+ 		dss.dss_ick,
+-		dss.dss1_fck,
+-		dss.dss2_fck,
+-		dss.dss_54m_fck,
+-		dss.dss_96m_fck
++		dss.dss_fck,
++		dss.dss_sys_clk,
++		dss.dss_tv_fck,
++		dss.dss_video_fck
+ 	};
+ 
+ 	seq_printf(s, "- CORE -\n");
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0161-OMAP4-DSS2-clocks-Add-ick-as-dummy-clock.patch b/patches/dss2_next/0161-OMAP4-DSS2-clocks-Add-ick-as-dummy-clock.patch
new file mode 100644
index 000000000..cb32c8948
--- /dev/null
+++ b/patches/dss2_next/0161-OMAP4-DSS2-clocks-Add-ick-as-dummy-clock.patch
@@ -0,0 +1,37 @@
+From 39f4181a5e1cfdd1626f225ec8067c31c9caaa2c Mon Sep 17 00:00:00 2001
+From: Sumit Semwal <sumit.semwal@ti.com>
+Date: Mon, 31 Jan 2011 16:27:46 +0000
+Subject: [PATCH 161/200] OMAP4: DSS2: clocks: Add ick as dummy clock
+
+DSS code uses ick as one of the clocks in clk_get/clk_put. OMAP4 clock database
+doesn't have ick for DSS, so adding ick as dummy clock.
+
+This is needed for backward compatibility with OMAP2/3.
+
+Once pm_runtime* APIs get introduced in DSS, this will be revisited.
+
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/clock44xx_data.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
+index 6ba69b1..5551013 100644
+--- a/arch/arm/mach-omap2/clock44xx_data.c
++++ b/arch/arm/mach-omap2/clock44xx_data.c
+@@ -3111,6 +3111,11 @@ static struct omap_clk omap44xx_clks[] = {
+ 	CLK("omapdss_dss",	"dss_clk",			&dss_dss_clk,	CK_443X),
+ 	CLK("omapdss_dss",	"video_clk",			&dss_48mhz_clk,	CK_443X),
+ 	CLK("omapdss_dss",	"fck",				&dss_fck,	CK_443X),
++	/*
++	 * On OMAP4, DSS ick is a dummy clock; this is needed for compatibility
++	 * with OMAP2/3.
++	 */
++	CLK("omapdss_dss",	"ick",				&dummy_ck,	CK_443X),
+ 	CLK(NULL,	"efuse_ctrl_cust_fck",		&efuse_ctrl_cust_fck,	CK_443X),
+ 	CLK(NULL,	"emif1_fck",			&emif1_fck,	CK_443X),
+ 	CLK(NULL,	"emif2_fck",			&emif2_fck,	CK_443X),
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0162-OMAP2PLUS-DSS2-Add-OMAP4-Kconfig-support.patch b/patches/dss2_next/0162-OMAP2PLUS-DSS2-Add-OMAP4-Kconfig-support.patch
new file mode 100644
index 000000000..5da245b36
--- /dev/null
+++ b/patches/dss2_next/0162-OMAP2PLUS-DSS2-Add-OMAP4-Kconfig-support.patch
@@ -0,0 +1,57 @@
+From 59e5ee25e271ca672fea79d8a82cba3461e5c62f Mon Sep 17 00:00:00 2001
+From: Mayuresh Janorkar <mayur@ti.com>
+Date: Tue, 15 Feb 2011 22:54:29 -0600
+Subject: [PATCH 162/200] OMAP2PLUS: DSS2: Add OMAP4 Kconfig support
+
+Enable DSS2 and OMAPFB for OMAP4 in Kconfig
+
+Signed-off-by: Mayuresh Janorkar <mayur@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/Kconfig    |    6 +++---
+ drivers/video/omap2/omapfb/Kconfig |    6 +++---
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/Kconfig b/drivers/video/omap2/dss/Kconfig
+index 43b6440..db01473 100644
+--- a/drivers/video/omap2/dss/Kconfig
++++ b/drivers/video/omap2/dss/Kconfig
+@@ -1,8 +1,8 @@
+ menuconfig OMAP2_DSS
+-        tristate "OMAP2/3 Display Subsystem support (EXPERIMENTAL)"
+-        depends on ARCH_OMAP2 || ARCH_OMAP3
++        tristate "OMAP2+ Display Subsystem support (EXPERIMENTAL)"
++        depends on ARCH_OMAP2PLUS
+         help
+-          OMAP2/3 Display Subsystem support.
++	  OMAP2+ Display Subsystem support.
+ 
+ if OMAP2_DSS
+ 
+diff --git a/drivers/video/omap2/omapfb/Kconfig b/drivers/video/omap2/omapfb/Kconfig
+index 65149b2..aa33386 100644
+--- a/drivers/video/omap2/omapfb/Kconfig
++++ b/drivers/video/omap2/omapfb/Kconfig
+@@ -1,5 +1,5 @@
+ menuconfig FB_OMAP2
+-        tristate "OMAP2/3 frame buffer support (EXPERIMENTAL)"
++        tristate "OMAP2+ frame buffer support (EXPERIMENTAL)"
+         depends on FB && OMAP2_DSS
+ 
+ 	select OMAP2_VRAM
+@@ -8,10 +8,10 @@ menuconfig FB_OMAP2
+         select FB_CFB_COPYAREA
+         select FB_CFB_IMAGEBLIT
+         help
+-          Frame buffer driver for OMAP2/3 based boards.
++	  Frame buffer driver for OMAP2+ based boards.
+ 
+ config FB_OMAP2_DEBUG_SUPPORT
+-	bool "Debug support for OMAP2/3 FB"
++        bool "Debug support for OMAP2+ FB"
+ 	default y
+ 	depends on FB_OMAP2
+ 	help
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0163-OMAP4-DSS2-Add-hwmod-device-names-for-OMAP4.patch b/patches/dss2_next/0163-OMAP4-DSS2-Add-hwmod-device-names-for-OMAP4.patch
new file mode 100644
index 000000000..fa0d13a84
--- /dev/null
+++ b/patches/dss2_next/0163-OMAP4-DSS2-Add-hwmod-device-names-for-OMAP4.patch
@@ -0,0 +1,58 @@
+From c6ea79314fc86ac7f2023b5a660efcb43107e3fd Mon Sep 17 00:00:00 2001
+From: Mayuresh Janorkar <mayur@ti.com>
+Date: Thu, 27 Jan 2011 11:17:04 +0000
+Subject: [PATCH 163/200] OMAP4: DSS2: Add hwmod device names for OMAP4.
+
+Add hwmod device names for OMAP4; this enables device build for omap4 dss
+hwmod IPs.
+
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Mayuresh Janorkar <mayur@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/display.c |   20 +++++++++++++-------
+ 1 files changed, 13 insertions(+), 7 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
+index ee83030..16d0db6 100644
+--- a/arch/arm/mach-omap2/display.c
++++ b/arch/arm/mach-omap2/display.c
+@@ -52,22 +52,28 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
+ 
+ 	/*
+ 	 * omap: valid DSS hwmod names
+-	 * omap2,3: dss_core, dss_dispc, dss_rfbi, dss_venc
+-	 * omap3: dss_dsi1
++	 * omap2,3,4: dss_core, dss_dispc, dss_rfbi, dss_venc
++	 * omap3,4: dss_dsi1
++	 * omap4: dss_dsi2, dss_hdmi
+ 	 */
+ 	char *oh_name[] = { "dss_core", "dss_dispc", "dss_rfbi", "dss_venc",
+-		"dss_dsi1" };
++		"dss_dsi1", "dss_dsi2", "dss_hdmi" };
+ 	char *dev_name[] = { "omapdss_dss", "omapdss_dispc", "omapdss_rfbi",
+-		"omapdss_venc", "omapdss_dsi1" };
++		"omapdss_venc", "omapdss_dsi1", "omapdss_dsi2",
++		"omapdss_hdmi" };
+ 	int oh_count;
+ 
+ 	memset(&pdata, 0, sizeof(pdata));
+ 
+ 	if (cpu_is_omap24xx())
+-		oh_count = ARRAY_SIZE(oh_name) - 1;
+-		/* last hwmod dev in oh_name is not available for omap2 */
+-	else
++		oh_count = ARRAY_SIZE(oh_name) - 3;
++		/* last 3 hwmod dev in oh_name are not available for omap2 */
++	else if (cpu_is_omap44xx())
+ 		oh_count = ARRAY_SIZE(oh_name);
++	else
++		oh_count = ARRAY_SIZE(oh_name) - 2;
++		/* last 2 hwmod dev in oh_name are not available for omap3 */
++
+ 
+ 	pdata.board_data = board_data;
+ 	pdata.board_data->get_last_off_on_transaction_id = NULL;
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0164-OMAP-DSS2-Fix-def_disp-module-param-description.patch b/patches/dss2_next/0164-OMAP-DSS2-Fix-def_disp-module-param-description.patch
new file mode 100644
index 000000000..0f57e93b8
--- /dev/null
+++ b/patches/dss2_next/0164-OMAP-DSS2-Fix-def_disp-module-param-description.patch
@@ -0,0 +1,31 @@
+From 53b4a292142994fac26a235262e2ae396510c3ff Mon Sep 17 00:00:00 2001
+From: Jani Nikula <jani@nikula.org>
+Date: Wed, 16 Feb 2011 04:53:44 -0600
+Subject: [PATCH 164/200] OMAP: DSS2: Fix def_disp module param description
+
+MODULE_PARM_DESC() takes the name of the actual module parameter, not the
+name of the variable, as input. Fix the module parameter description for
+def_disp.
+
+Signed-off-by: Jani Nikula <jani@nikula.org>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index f56ee64..bcf69a4 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -47,7 +47,7 @@ static struct {
+ 
+ static char *def_disp_name;
+ module_param_named(def_disp, def_disp_name, charp, 0);
+-MODULE_PARM_DESC(def_disp_name, "default display name");
++MODULE_PARM_DESC(def_disp, "default display name");
+ 
+ #ifdef DEBUG
+ unsigned int dss_debug;
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0165-OMAP-DSS2-Delay-regulator_get-calls.patch b/patches/dss2_next/0165-OMAP-DSS2-Delay-regulator_get-calls.patch
new file mode 100644
index 000000000..0c649a958
--- /dev/null
+++ b/patches/dss2_next/0165-OMAP-DSS2-Delay-regulator_get-calls.patch
@@ -0,0 +1,228 @@
+From 3bf5ba264cce4ddb5f3384c25781d521778565cc Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Tue, 22 Feb 2011 15:53:46 +0200
+Subject: [PATCH 165/200] OMAP: DSS2: Delay regulator_get() calls
+
+DSS submodules DPI/SDI/DSI/VENC require a regulator to function.
+However, if the board doesn't use, say, SDI, the board shouldn't need to
+configure vdds_sdi regulator required by the SDI module.
+
+Currently the regulators are acquired when the DSS driver is loaded.
+This means that if the kernel is configured with SDI, vdds_sdi regulator
+is needed for all boards.
+
+This patch changes the DSS driver to acquire the regulators only when a
+display of particular type is initialized. For example, vdds_sdi is
+acquired when sdi_init_display() is called.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dpi.c  |   21 +++++++++++++--------
+ drivers/video/omap2/dss/dsi.c  |   36 +++++++++++++-----------------------
+ drivers/video/omap2/dss/sdi.c  |   18 +++++++++++++-----
+ drivers/video/omap2/dss/venc.c |   31 +++++++++++++------------------
+ 4 files changed, 52 insertions(+), 54 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
+index 746f1b6..026702b 100644
+--- a/drivers/video/omap2/dss/dpi.c
++++ b/drivers/video/omap2/dss/dpi.c
+@@ -303,22 +303,27 @@ int dpi_init_display(struct omap_dss_device *dssdev)
+ {
+ 	DSSDBG("init_display\n");
+ 
+-	return 0;
+-}
++	if (cpu_is_omap34xx() && dpi.vdds_dsi_reg == NULL) {
++		struct regulator *vdds_dsi;
+ 
+-int dpi_init(struct platform_device *pdev)
+-{
+-	if (cpu_is_omap34xx()) {
+-		dpi.vdds_dsi_reg = dss_get_vdds_dsi();
+-		if (IS_ERR(dpi.vdds_dsi_reg)) {
++		vdds_dsi = dss_get_vdds_dsi();
++
++		if (IS_ERR(vdds_dsi)) {
+ 			DSSERR("can't get VDDS_DSI regulator\n");
+-			return PTR_ERR(dpi.vdds_dsi_reg);
++			return PTR_ERR(vdds_dsi);
+ 		}
++
++		dpi.vdds_dsi_reg = vdds_dsi;
+ 	}
+ 
+ 	return 0;
+ }
+ 
++int dpi_init(struct platform_device *pdev)
++{
++	return 0;
++}
++
+ void dpi_exit(void)
+ {
+ }
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index c7b5382..2928cdd 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -291,20 +291,6 @@ static inline u32 dsi_read_reg(const struct dsi_reg idx)
+ 	return __raw_readl(dsi.base + idx.idx);
+ }
+ 
+-static struct regulator *dsi_get_vdds_dsi(void)
+-{
+-	struct regulator *reg;
+-
+-	if (dsi.vdds_dsi_reg != NULL)
+-		return dsi.vdds_dsi_reg;
+-
+-	reg = regulator_get(&dsi.pdev->dev, "vdds_dsi");
+-	if (!IS_ERR(reg))
+-		dsi.vdds_dsi_reg = reg;
+-
+-	return reg;
+-}
+-
+ 
+ void dsi_save_context(void)
+ {
+@@ -3236,6 +3222,19 @@ int dsi_init_display(struct omap_dss_device *dssdev)
+ 	dsi.vc[0].dssdev = dssdev;
+ 	dsi.vc[1].dssdev = dssdev;
+ 
++	if (dsi.vdds_dsi_reg == NULL) {
++		struct regulator *vdds_dsi;
++
++		vdds_dsi = regulator_get(&dsi.pdev->dev, "vdds_dsi");
++
++		if (IS_ERR(vdds_dsi)) {
++			DSSERR("can't get VDDS_DSI regulator\n");
++			return PTR_ERR(vdds_dsi);
++		}
++
++		dsi.vdds_dsi_reg = vdds_dsi;
++	}
++
+ 	return 0;
+ }
+ 
+@@ -3295,13 +3294,6 @@ static int dsi_init(struct platform_device *pdev)
+ 		goto err1;
+ 	}
+ 
+-	dsi.vdds_dsi_reg = dsi_get_vdds_dsi();
+-	if (IS_ERR(dsi.vdds_dsi_reg)) {
+-		DSSERR("can't get VDDS_DSI regulator\n");
+-		r = PTR_ERR(dsi.vdds_dsi_reg);
+-		goto err2;
+-	}
+-
+ 	enable_clocks(1);
+ 
+ 	rev = dsi_read_reg(DSI_REVISION);
+@@ -3311,8 +3303,6 @@ static int dsi_init(struct platform_device *pdev)
+ 	enable_clocks(0);
+ 
+ 	return 0;
+-err2:
+-	iounmap(dsi.base);
+ err1:
+ 	destroy_workqueue(dsi.workqueue);
+ 	return r;
+diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
+index 8272fc1..9f10a0d 100644
+--- a/drivers/video/omap2/dss/sdi.c
++++ b/drivers/video/omap2/dss/sdi.c
+@@ -157,6 +157,19 @@ int sdi_init_display(struct omap_dss_device *dssdev)
+ {
+ 	DSSDBG("SDI init\n");
+ 
++	if (sdi.vdds_sdi_reg == NULL) {
++		struct regulator *vdds_sdi;
++
++		vdds_sdi = dss_get_vdds_sdi();
++
++		if (IS_ERR(vdds_sdi)) {
++			DSSERR("can't get VDDS_SDI regulator\n");
++			return PTR_ERR(vdds_sdi);
++		}
++
++		sdi.vdds_sdi_reg = vdds_sdi;
++	}
++
+ 	return 0;
+ }
+ 
+@@ -165,11 +178,6 @@ int sdi_init(bool skip_init)
+ 	/* we store this for first display enable, then clear it */
+ 	sdi.skip_init = skip_init;
+ 
+-	sdi.vdds_sdi_reg = dss_get_vdds_sdi();
+-	if (IS_ERR(sdi.vdds_sdi_reg)) {
+-		DSSERR("can't get VDDS_SDI regulator\n");
+-		return PTR_ERR(sdi.vdds_sdi_reg);
+-	}
+ 	/*
+ 	 * Enable clocks already here, otherwise there would be a toggle
+ 	 * of them until sdi_display_enable is called.
+diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
+index 1aadceb..43009e5 100644
+--- a/drivers/video/omap2/dss/venc.c
++++ b/drivers/video/omap2/dss/venc.c
+@@ -305,17 +305,6 @@ static inline u32 venc_read_reg(int idx)
+ 	return l;
+ }
+ 
+-static struct regulator *venc_get_vdda_dac(void)
+-{
+-	struct regulator *reg;
+-
+-	reg = regulator_get(&venc.pdev->dev, "vdda_dac");
+-	if (!IS_ERR(reg))
+-		venc.vdda_dac_reg = reg;
+-
+-	return reg;
+-}
+-
+ static void venc_write_config(const struct venc_config *config)
+ {
+ 	DSSDBG("write venc conf\n");
+@@ -655,6 +644,19 @@ int venc_init_display(struct omap_dss_device *dssdev)
+ {
+ 	DSSDBG("init_display\n");
+ 
++	if (venc.vdda_dac_reg == NULL) {
++		struct regulator *vdda_dac;
++
++		vdda_dac = regulator_get(&venc.pdev->dev, "vdda_dac");
++
++		if (IS_ERR(vdda_dac)) {
++			DSSERR("can't get VDDA_DAC regulator\n");
++			return PTR_ERR(vdda_dac);
++		}
++
++		venc.vdda_dac_reg = vdda_dac;
++	}
++
+ 	return 0;
+ }
+ 
+@@ -734,13 +736,6 @@ static int omap_venchw_probe(struct platform_device *pdev)
+ 		return -ENOMEM;
+ 	}
+ 
+-	venc.vdda_dac_reg = venc_get_vdda_dac();
+-	if (IS_ERR(venc.vdda_dac_reg)) {
+-		iounmap(venc.base);
+-		DSSERR("can't get VDDA_DAC regulator\n");
+-		return PTR_ERR(venc.vdda_dac_reg);
+-	}
+-
+ 	venc_enable_clocks(1);
+ 
+ 	rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0166-OMAP-DSS2-Support-for-Samsung-LTE430WQ-F0C.patch b/patches/dss2_next/0166-OMAP-DSS2-Support-for-Samsung-LTE430WQ-F0C.patch
new file mode 100644
index 000000000..55ba91643
--- /dev/null
+++ b/patches/dss2_next/0166-OMAP-DSS2-Support-for-Samsung-LTE430WQ-F0C.patch
@@ -0,0 +1,51 @@
+From 3b7cb6ac37a7d3282ba11adbc6ae29d7d74cfbe0 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Tue, 22 Feb 2011 16:39:47 +0200
+Subject: [PATCH 166/200] OMAP: DSS2: Support for Samsung LTE430WQ-F0C
+
+Add support for Samsung LTE430WQ-F0C to panel-generic-dpi.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/displays/panel-generic-dpi.c |   25 ++++++++++++++++++++++
+ 1 files changed, 25 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c
+index 07eb30e..4a9b9ff 100644
+--- a/drivers/video/omap2/displays/panel-generic-dpi.c
++++ b/drivers/video/omap2/displays/panel-generic-dpi.c
+@@ -156,6 +156,31 @@ static struct panel_config generic_dpi_panels[] = {
+ 		.power_off_delay	= 0,
+ 		.name			= "toppoly_tdo35s",
+ 	},
++
++	/* Samsung LTE430WQ-F0C */
++	{
++		{
++			.x_res		= 480,
++			.y_res		= 272,
++
++			.pixel_clock	= 9200,
++
++			.hfp		= 8,
++			.hsw		= 41,
++			.hbp		= 45 - 41,
++
++			.vfp		= 4,
++			.vsw		= 10,
++			.vbp		= 12 - 10,
++		},
++		.acbi			= 0x0,
++		.acb			= 0x0,
++		.config			= OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
++						OMAP_DSS_LCD_IHS,
++		.power_on_delay		= 0,
++		.power_off_delay	= 0,
++		.name			= "samsung_lte430wq_f0c",
++	},
+ };
+ 
+ struct panel_drv_data {
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0167-OMAPFB-Adding-a-check-for-timings-in-set_def_mode.patch b/patches/dss2_next/0167-OMAPFB-Adding-a-check-for-timings-in-set_def_mode.patch
new file mode 100644
index 000000000..8e1348f3f
--- /dev/null
+++ b/patches/dss2_next/0167-OMAPFB-Adding-a-check-for-timings-in-set_def_mode.patch
@@ -0,0 +1,71 @@
+From 8765e56d69781c3c2a74c6fb07f3bcc700590e65 Mon Sep 17 00:00:00 2001
+From: Janorkar, Mayuresh <mayur@ti.com>
+Date: Tue, 22 Feb 2011 07:35:13 -0600
+Subject: [PATCH 167/200] OMAPFB: Adding a check for timings in set_def_mode
+
+When omapfb.mode is passed through bootargs, when omapfb is setting mode,
+it would check if timings passed are fine for panel attached to it.
+It makes use of check_timing API provided by the panel.
+
+In current code if check_timing API is not available for attached panel,
+OMAPFB would return -EINVAL and BPP sent via bootargs will not have any effect.
+
+In case of panels like TAAL panel, omapfb or any other driver should not be allowed to
+change the timings. So bpps sent via bootargs will not have an effect.
+
+In such case we can check only the x_res and y_res with the panels resolution
+and if they match go ahead and set the bpps.
+The bpp value sent via bootarg would have an effect.
+
+Signed-off-by: Mayuresh Janorkar <mayur@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/omapfb/omapfb-main.c |   23 ++++++++++++++++-------
+ 1 files changed, 16 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c
+index 4fdab8e..505ec66 100644
+--- a/drivers/video/omap2/omapfb/omapfb-main.c
++++ b/drivers/video/omap2/omapfb/omapfb-main.c
+@@ -2090,7 +2090,7 @@ static int omapfb_set_def_mode(struct omapfb2_device *fbdev,
+ {
+ 	int r;
+ 	u8 bpp;
+-	struct omap_video_timings timings;
++	struct omap_video_timings timings, temp_timings;
+ 
+ 	r = omapfb_mode_to_timings(mode_str, &timings, &bpp);
+ 	if (r)
+@@ -2100,14 +2100,23 @@ static int omapfb_set_def_mode(struct omapfb2_device *fbdev,
+ 	fbdev->bpp_overrides[fbdev->num_bpp_overrides].bpp = bpp;
+ 	++fbdev->num_bpp_overrides;
+ 
+-	if (!display->driver->check_timings || !display->driver->set_timings)
+-		return -EINVAL;
++	if (display->driver->check_timings) {
++		r = display->driver->check_timings(display, &timings);
++		if (r)
++			return r;
++	} else {
++		/* If check_timings is not present compare xres and yres */
++		if (display->driver->get_timings) {
++			display->driver->get_timings(display, &temp_timings);
+ 
+-	r = display->driver->check_timings(display, &timings);
+-	if (r)
+-		return r;
++			if (temp_timings.x_res != timings.x_res ||
++				temp_timings.y_res != timings.y_res)
++				return -EINVAL;
++		}
++	}
+ 
+-	display->driver->set_timings(display, &timings);
++	if (display->driver->set_timings)
++			display->driver->set_timings(display, &timings);
+ 
+ 	return 0;
+ }
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0168-OMAP-DSS2-Have-separate-irq-handlers-for-DISPC-and-D.patch b/patches/dss2_next/0168-OMAP-DSS2-Have-separate-irq-handlers-for-DISPC-and-D.patch
new file mode 100644
index 000000000..85259979e
--- /dev/null
+++ b/patches/dss2_next/0168-OMAP-DSS2-Have-separate-irq-handlers-for-DISPC-and-D.patch
@@ -0,0 +1,491 @@
+From f0a6b830db9465d040a2821f7f4db5948ac1ab00 Mon Sep 17 00:00:00 2001
+From: archit taneja <archit@ti.com>
+Date: Wed, 23 Feb 2011 08:41:03 +0000
+Subject: [PATCH 168/200] OMAP: DSS2: Have separate irq handlers for DISPC and DSI
+
+Currently, the core DSS platform device requests for an irq line for OMAP2 and
+OMAP3. Make DISPC and DSI platform devices request for a shared IRQ line.
+
+On OMAP3, the logical OR of DSI and DISPC interrupt lines goes to the MPU. There
+is a register DSS_IRQSTATUS which tells if the interrupt came from DISPC or DSI.
+
+On OMAP2, there is no DSI, only DISPC interrupts goto the MPU. There is no
+DSS_IRQSTATUS register.
+
+Hence, it makes more sense to have separate irq handlers corresponding to the
+DSS sub modules instead of having a common handler.
+
+Since on OMAP3 the logical OR of the lines goes to MPU, the irq line is shared
+among the IRQ handlers.
+
+The hwmod irq info has been removed for DSS to DISPC and DSI for OMAP2 and OMAP3
+hwmod databases. The Probes of DISPC and DSI now request for irq handlers.
+
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/omap_hwmod_2420_data.c |   13 +++----
+ arch/arm/mach-omap2/omap_hwmod_2430_data.c |   12 +++---
+ arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |   21 ++++++-----
+ drivers/video/omap2/dss/dispc.c            |   40 +++++++++++++++++++--
+ drivers/video/omap2/dss/dsi.c              |   25 ++++++++++++-
+ drivers/video/omap2/dss/dss.c              |   51 +---------------------------
+ 6 files changed, 84 insertions(+), 78 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+index e0bc2c7..76f2f9d 100644
+--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
++++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+@@ -1168,11 +1168,6 @@ static struct omap_hwmod_class omap2420_dss_hwmod_class = {
+ 	.sysc = &omap2420_dss_sysc,
+ };
+ 
+-/* dss */
+-static struct omap_hwmod_irq_info omap2420_dss_irqs[] = {
+-	{ .irq = 25 },
+-};
+-
+ static struct omap_hwmod_dma_info omap2420_dss_sdma_chs[] = {
+ 	{ .name = "dispc", .dma_req = 5 },
+ };
+@@ -1221,8 +1216,6 @@ static struct omap_hwmod omap2420_dss_core_hwmod = {
+ 	.name		= "dss_core",
+ 	.class		= &omap2420_dss_hwmod_class,
+ 	.main_clk	= "dss1_fck", /* instead of dss_fck */
+-	.mpu_irqs	= omap2420_dss_irqs,
+-	.mpu_irqs_cnt	= ARRAY_SIZE(omap2420_dss_irqs),
+ 	.sdma_reqs	= omap2420_dss_sdma_chs,
+ 	.sdma_reqs_cnt	= ARRAY_SIZE(omap2420_dss_sdma_chs),
+ 	.prcm		= {
+@@ -1265,6 +1258,10 @@ static struct omap_hwmod_class omap2420_dispc_hwmod_class = {
+ 	.sysc = &omap2420_dispc_sysc,
+ };
+ 
++static struct omap_hwmod_irq_info omap2420_dispc_irqs[] = {
++	{ .irq = 25 },
++};
++
+ static struct omap_hwmod_addr_space omap2420_dss_dispc_addrs[] = {
+ 	{
+ 		.pa_start	= 0x48050400,
+@@ -1297,6 +1294,8 @@ static struct omap_hwmod_ocp_if *omap2420_dss_dispc_slaves[] = {
+ static struct omap_hwmod omap2420_dss_dispc_hwmod = {
+ 	.name		= "dss_dispc",
+ 	.class		= &omap2420_dispc_hwmod_class,
++	.mpu_irqs	= omap2420_dispc_irqs,
++	.mpu_irqs_cnt	= ARRAY_SIZE(omap2420_dispc_irqs),
+ 	.main_clk	= "dss1_fck",
+ 	.prcm		= {
+ 		.omap2 = {
+diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+index abb3574..e31fd11 100644
+--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
++++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+@@ -1268,10 +1268,6 @@ static struct omap_hwmod_class omap2430_dss_hwmod_class = {
+ 	.sysc = &omap2430_dss_sysc,
+ };
+ 
+-/* dss */
+-static struct omap_hwmod_irq_info omap2430_dss_irqs[] = {
+-	{ .irq = 25 },
+-};
+ static struct omap_hwmod_dma_info omap2430_dss_sdma_chs[] = {
+ 	{ .name = "dispc", .dma_req = 5 },
+ };
+@@ -1314,8 +1310,6 @@ static struct omap_hwmod omap2430_dss_core_hwmod = {
+ 	.name		= "dss_core",
+ 	.class		= &omap2430_dss_hwmod_class,
+ 	.main_clk	= "dss1_fck", /* instead of dss_fck */
+-	.mpu_irqs	= omap2430_dss_irqs,
+-	.mpu_irqs_cnt	= ARRAY_SIZE(omap2430_dss_irqs),
+ 	.sdma_reqs	= omap2430_dss_sdma_chs,
+ 	.sdma_reqs_cnt	= ARRAY_SIZE(omap2430_dss_sdma_chs),
+ 	.prcm		= {
+@@ -1358,6 +1352,10 @@ static struct omap_hwmod_class omap2430_dispc_hwmod_class = {
+ 	.sysc = &omap2430_dispc_sysc,
+ };
+ 
++static struct omap_hwmod_irq_info omap2430_dispc_irqs[] = {
++	{ .irq = 25 },
++};
++
+ static struct omap_hwmod_addr_space omap2430_dss_dispc_addrs[] = {
+ 	{
+ 		.pa_start	= 0x48050400,
+@@ -1384,6 +1382,8 @@ static struct omap_hwmod_ocp_if *omap2430_dss_dispc_slaves[] = {
+ static struct omap_hwmod omap2430_dss_dispc_hwmod = {
+ 	.name		= "dss_dispc",
+ 	.class		= &omap2430_dispc_hwmod_class,
++	.mpu_irqs	= omap2430_dispc_irqs,
++	.mpu_irqs_cnt	= ARRAY_SIZE(omap2430_dispc_irqs),
+ 	.main_clk	= "dss1_fck",
+ 	.prcm		= {
+ 		.omap2 = {
+diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+index d9ef3b8..5bb5c87 100644
+--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
++++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+@@ -1485,11 +1485,6 @@ static struct omap_hwmod_class omap3xxx_dss_hwmod_class = {
+ 	.sysc = &omap3xxx_dss_sysc,
+ };
+ 
+-/* dss */
+-static struct omap_hwmod_irq_info omap3xxx_dss_irqs[] = {
+-	{ .irq = 25 },
+-};
+-
+ static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = {
+ 	{ .name = "dispc", .dma_req = 5 },
+ 	{ .name = "dsi1", .dma_req = 74 },
+@@ -1561,8 +1556,6 @@ static struct omap_hwmod omap3430es1_dss_core_hwmod = {
+ 	.name		= "dss_core",
+ 	.class		= &omap3xxx_dss_hwmod_class,
+ 	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */
+-	.mpu_irqs	= omap3xxx_dss_irqs,
+-	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_dss_irqs),
+ 	.sdma_reqs	= omap3xxx_dss_sdma_chs,
+ 	.sdma_reqs_cnt	= ARRAY_SIZE(omap3xxx_dss_sdma_chs),
+ 
+@@ -1589,8 +1582,6 @@ static struct omap_hwmod omap3xxx_dss_core_hwmod = {
+ 	.name		= "dss_core",
+ 	.class		= &omap3xxx_dss_hwmod_class,
+ 	.main_clk	= "dss1_alwon_fck", /* instead of dss_fck */
+-	.mpu_irqs	= omap3xxx_dss_irqs,
+-	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_dss_irqs),
+ 	.sdma_reqs	= omap3xxx_dss_sdma_chs,
+ 	.sdma_reqs_cnt	= ARRAY_SIZE(omap3xxx_dss_sdma_chs),
+ 
+@@ -1636,6 +1627,10 @@ static struct omap_hwmod_class omap3xxx_dispc_hwmod_class = {
+ 	.sysc = &omap3xxx_dispc_sysc,
+ };
+ 
++static struct omap_hwmod_irq_info omap3xxx_dispc_irqs[] = {
++	{ .irq = 25 },
++};
++
+ static struct omap_hwmod_addr_space omap3xxx_dss_dispc_addrs[] = {
+ 	{
+ 		.pa_start	= 0x48050400,
+@@ -1669,6 +1664,8 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_dispc_slaves[] = {
+ static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
+ 	.name		= "dss_dispc",
+ 	.class		= &omap3xxx_dispc_hwmod_class,
++	.mpu_irqs	= omap3xxx_dispc_irqs,
++	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_dispc_irqs),
+ 	.main_clk	= "dss1_alwon_fck",
+ 	.prcm		= {
+ 		.omap2 = {
+@@ -1694,6 +1691,10 @@ static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
+ 	.name = "dsi",
+ };
+ 
++static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = {
++	{ .irq = 25 },
++};
++
+ /* dss_dsi1 */
+ static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = {
+ 	{
+@@ -1727,6 +1728,8 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_dsi1_slaves[] = {
+ static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
+ 	.name		= "dss_dsi1",
+ 	.class		= &omap3xxx_dsi_hwmod_class,
++	.mpu_irqs	= omap3xxx_dsi1_irqs,
++	.mpu_irqs_cnt	= ARRAY_SIZE(omap3xxx_dsi1_irqs),
+ 	.main_clk	= "dss1_alwon_fck",
+ 	.prcm		= {
+ 		.omap2 = {
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index dc4518c..43f7091 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -32,6 +32,7 @@
+ #include <linux/delay.h>
+ #include <linux/workqueue.h>
+ #include <linux/hardirq.h>
++#include <linux/interrupt.h>
+ 
+ #include <plat/sram.h>
+ #include <plat/clock.h>
+@@ -178,6 +179,7 @@ struct dispc_irq_stats {
+ static struct {
+ 	struct platform_device *pdev;
+ 	void __iomem    *base;
++	int irq;
+ 
+ 	u32	fifo_size[3];
+ 
+@@ -2865,10 +2867,10 @@ static void print_irq_status(u32 status)
+  * but we presume they are on because we got an IRQ. However,
+  * an irq handler may turn the clocks off, so we may not have
+  * clock later in the function. */
+-void dispc_irq_handler(void)
++static irqreturn_t omap_dispc_irq_handler(int irq, void *arg)
+ {
+ 	int i;
+-	u32 irqstatus;
++	u32 irqstatus, irqenable;
+ 	u32 handledirqs = 0;
+ 	u32 unhandled_errors;
+ 	struct omap_dispc_isr_data *isr_data;
+@@ -2877,6 +2879,13 @@ void dispc_irq_handler(void)
+ 	spin_lock(&dispc.irq_lock);
+ 
+ 	irqstatus = dispc_read_reg(DISPC_IRQSTATUS);
++	irqenable = dispc_read_reg(DISPC_IRQENABLE);
++
++	/* IRQ is not for us */
++	if (!(irqstatus & irqenable)) {
++		spin_unlock(&dispc.irq_lock);
++		return IRQ_NONE;
++	}
+ 
+ #ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
+ 	spin_lock(&dispc.irq_stats_lock);
+@@ -2928,6 +2937,8 @@ void dispc_irq_handler(void)
+ 	}
+ 
+ 	spin_unlock(&dispc.irq_lock);
++
++	return IRQ_HANDLED;
+ }
+ 
+ static void dispc_error_worker(struct work_struct *work)
+@@ -3322,6 +3333,7 @@ int dispc_setup_plane(enum omap_plane plane,
+ static int omap_dispchw_probe(struct platform_device *pdev)
+ {
+ 	u32 rev;
++	int r = 0;
+ 	struct resource *dispc_mem;
+ 
+ 	dispc.pdev = pdev;
+@@ -3338,12 +3350,27 @@ static int omap_dispchw_probe(struct platform_device *pdev)
+ 	dispc_mem = platform_get_resource(dispc.pdev, IORESOURCE_MEM, 0);
+ 	if (!dispc_mem) {
+ 		DSSERR("can't get IORESOURCE_MEM DISPC\n");
+-		return -EINVAL;
++		r = -EINVAL;
++		goto fail0;
+ 	}
+ 	dispc.base = ioremap(dispc_mem->start, resource_size(dispc_mem));
+ 	if (!dispc.base) {
+ 		DSSERR("can't ioremap DISPC\n");
+-		return -ENOMEM;
++		r = -ENOMEM;
++		goto fail0;
++	}
++	dispc.irq = platform_get_irq(dispc.pdev, 0);
++	if (dispc.irq < 0) {
++		DSSERR("platform_get_irq failed\n");
++		r = -ENODEV;
++		goto fail1;
++	}
++
++	r = request_irq(dispc.irq, omap_dispc_irq_handler, IRQF_SHARED,
++		"OMAP DISPC", dispc.pdev);
++	if (r < 0) {
++		DSSERR("request_irq failed\n");
++		goto fail1;
+ 	}
+ 
+ 	enable_clocks(1);
+@@ -3361,10 +3388,15 @@ static int omap_dispchw_probe(struct platform_device *pdev)
+ 	enable_clocks(0);
+ 
+ 	return 0;
++fail1:
++	iounmap(dispc.base);
++fail0:
++	return r;
+ }
+ 
+ static int omap_dispchw_remove(struct platform_device *pdev)
+ {
++	free_irq(dispc.irq, dispc.pdev);
+ 	iounmap(dispc.base);
+ 	return 0;
+ }
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index 2928cdd..2f7d949 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -222,6 +222,7 @@ static struct
+ {
+ 	struct platform_device *pdev;
+ 	void __iomem	*base;
++	int irq;
+ 
+ 	struct dsi_clock_info current_cinfo;
+ 
+@@ -480,13 +481,17 @@ static void print_irq_status_cio(u32 status)
+ static int debug_irq;
+ 
+ /* called from dss */
+-void dsi_irq_handler(void)
++static irqreturn_t omap_dsi_irq_handler(int irq, void *arg)
+ {
+ 	u32 irqstatus, vcstatus, ciostatus;
+ 	int i;
+ 
+ 	irqstatus = dsi_read_reg(DSI_IRQSTATUS);
+ 
++	/* IRQ is not for us */
++	if (!irqstatus)
++		return IRQ_NONE;
++
+ #ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
+ 	spin_lock(&dsi.irq_stats_lock);
+ 	dsi.irq_stats.irq_count++;
+@@ -564,9 +569,9 @@ void dsi_irq_handler(void)
+ #ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
+ 	spin_unlock(&dsi.irq_stats_lock);
+ #endif
++	return IRQ_HANDLED;
+ }
+ 
+-
+ static void _dsi_initialize_irq(void)
+ {
+ 	u32 l;
+@@ -3293,6 +3298,19 @@ static int dsi_init(struct platform_device *pdev)
+ 		r = -ENOMEM;
+ 		goto err1;
+ 	}
++	dsi.irq	= platform_get_irq(dsi.pdev, 0);
++	if (dsi.irq < 0) {
++		DSSERR("platform_get_irq failed\n");
++		r = -ENODEV;
++		goto err2;
++	}
++
++	r = request_irq(dsi.irq, omap_dsi_irq_handler, IRQF_SHARED,
++		"OMAP DSI1", dsi.pdev);
++	if (r < 0) {
++		DSSERR("request_irq failed\n");
++		goto err2;
++	}
+ 
+ 	enable_clocks(1);
+ 
+@@ -3303,6 +3321,8 @@ static int dsi_init(struct platform_device *pdev)
+ 	enable_clocks(0);
+ 
+ 	return 0;
++err2:
++	iounmap(dsi.base);
+ err1:
+ 	destroy_workqueue(dsi.workqueue);
+ 	return r;
+@@ -3315,6 +3335,7 @@ static void dsi_exit(void)
+ 		dsi.vdds_dsi_reg = NULL;
+ 	}
+ 
++	free_irq(dsi.irq, dsi.pdev);
+ 	iounmap(dsi.base);
+ 
+ 	destroy_workqueue(dsi.workqueue);
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index ab82f79..dc57100 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -26,7 +26,6 @@
+ #include <linux/io.h>
+ #include <linux/err.h>
+ #include <linux/delay.h>
+-#include <linux/interrupt.h>
+ #include <linux/seq_file.h>
+ #include <linux/clk.h>
+ 
+@@ -79,7 +78,6 @@ static struct {
+ 	enum dss_clk_source dispc_clk_source;
+ 
+ 	u32		ctx[DSS_SZ_REGS / sizeof(u32)];
+-	int		dss_irq;
+ } dss;
+ 
+ static void dss_clk_enable_all_no_ctx(void);
+@@ -495,31 +493,6 @@ found:
+ 	return 0;
+ }
+ 
+-
+-
+-static irqreturn_t dss_irq_handler_omap2(int irq, void *arg)
+-{
+-	dispc_irq_handler();
+-
+-	return IRQ_HANDLED;
+-}
+-
+-static irqreturn_t dss_irq_handler_omap3(int irq, void *arg)
+-{
+-	u32 irqstatus;
+-
+-	irqstatus = dss_read_reg(DSS_IRQSTATUS);
+-
+-	if (irqstatus & (1<<0))	/* DISPC_IRQ */
+-		dispc_irq_handler();
+-#ifdef CONFIG_OMAP2_DSS_DSI
+-	if (irqstatus & (1<<1))	/* DSI_IRQ */
+-		dsi_irq_handler();
+-#endif
+-
+-	return IRQ_HANDLED;
+-}
+-
+ static int _omap_dss_wait_reset(void)
+ {
+ 	int t = 0;
+@@ -610,30 +583,12 @@ static int dss_init(bool skip_init)
+ 	REG_FLD_MOD(DSS_CONTROL, 0, 2, 2);	/* venc clock mode = normal */
+ #endif
+ 
+-	dss.dss_irq = platform_get_irq(dss.pdev, 0);
+-	if (dss.dss_irq < 0) {
+-		DSSERR("omap2 dss: platform_get_irq failed\n");
+-		r = -ENODEV;
+-		goto fail1;
+-	}
+-
+-	r = request_irq(dss.dss_irq,
+-		cpu_is_omap24xx()
+-		? dss_irq_handler_omap2
+-		: dss_irq_handler_omap3,
+-		0, "OMAP DSS", NULL);
+-
+-	if (r < 0) {
+-		DSSERR("omap2 dss: request_irq failed\n");
+-		goto fail1;
+-	}
+-
+ 	if (cpu_is_omap34xx()) {
+ 		dss.dpll4_m4_ck = clk_get(NULL, "dpll4_m4_ck");
+ 		if (IS_ERR(dss.dpll4_m4_ck)) {
+ 			DSSERR("Failed to get dpll4_m4_ck\n");
+ 			r = PTR_ERR(dss.dpll4_m4_ck);
+-			goto fail2;
++			goto fail1;
+ 		}
+ 	}
+ 
+@@ -648,8 +603,6 @@ static int dss_init(bool skip_init)
+ 
+ 	return 0;
+ 
+-fail2:
+-	free_irq(dss.dss_irq, NULL);
+ fail1:
+ 	iounmap(dss.base);
+ fail0:
+@@ -661,8 +614,6 @@ static void dss_exit(void)
+ 	if (cpu_is_omap34xx())
+ 		clk_put(dss.dpll4_m4_ck);
+ 
+-	free_irq(dss.dss_irq, NULL);
+-
+ 	iounmap(dss.base);
+ }
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0169-MAINTAINERS-Update-OMAP-DSS-maintainer.patch b/patches/dss2_next/0169-MAINTAINERS-Update-OMAP-DSS-maintainer.patch
new file mode 100644
index 000000000..448ee9c6c
--- /dev/null
+++ b/patches/dss2_next/0169-MAINTAINERS-Update-OMAP-DSS-maintainer.patch
@@ -0,0 +1,34 @@
+From 52b8eb486b79c64634adf2cde10551f1b89dcb86 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Wed, 23 Feb 2011 16:34:17 +0200
+Subject: [PATCH 169/200] MAINTAINERS: Update OMAP DSS maintainer
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ MAINTAINERS |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/MAINTAINERS b/MAINTAINERS
+index 560ecce..0cc34d7 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -4514,14 +4514,14 @@ S:	Maintained
+ F:	sound/soc/omap/
+ 
+ OMAP FRAMEBUFFER SUPPORT
+-M:	Tomi Valkeinen <tomi.valkeinen@nokia.com>
++M:	Tomi Valkeinen <tomi.valkeinen@ti.com>
+ L:	linux-fbdev@vger.kernel.org
+ L:	linux-omap@vger.kernel.org
+ S:	Maintained
+ F:	drivers/video/omap/
+ 
+ OMAP DISPLAY SUBSYSTEM and FRAMEBUFFER SUPPORT (DSS2)
+-M:	Tomi Valkeinen <tomi.valkeinen@nokia.com>
++M:	Tomi Valkeinen <tomi.valkeinen@ti.com>
+ L:	linux-omap@vger.kernel.org
+ L:	linux-fbdev@vger.kernel.org
+ S:	Maintained
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0170-OMAP2-3-4-DSS2-Enable-Display-SubSystem-as-modules.patch b/patches/dss2_next/0170-OMAP2-3-4-DSS2-Enable-Display-SubSystem-as-modules.patch
new file mode 100644
index 000000000..0a90623f6
--- /dev/null
+++ b/patches/dss2_next/0170-OMAP2-3-4-DSS2-Enable-Display-SubSystem-as-modules.patch
@@ -0,0 +1,40 @@
+From 4638684b953f60fa37ea0664fa54f9fba14fa8bc Mon Sep 17 00:00:00 2001
+From: Samreen <samreen@ti.com>
+Date: Thu, 24 Feb 2011 06:26:40 +0000
+Subject: [PATCH 170/200] OMAP2/3/4: DSS2: Enable Display SubSystem as modules
+
+Enabling all the display interface options to be built as module
+And enabling all the display panels to be built as modules.
+
+Signed-off-by: Samreen <samreen@ti.com>
+Acked-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/configs/omap2plus_defconfig |   11 +++++++++++
+ 1 files changed, 11 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
+index 019fb7c..076db52 100644
+--- a/arch/arm/configs/omap2plus_defconfig
++++ b/arch/arm/configs/omap2plus_defconfig
+@@ -193,6 +193,17 @@ CONFIG_FIRMWARE_EDID=y
+ CONFIG_FB_MODE_HELPERS=y
+ CONFIG_FB_TILEBLITTING=y
+ CONFIG_FB_OMAP_LCD_VGA=y
++CONFIG_OMAP2_DSS=m
++CONFIG_OMAP2_DSS_RFBI=y
++CONFIG_OMAP2_DSS_SDI=y
++CONFIG_OMAP2_DSS_DSI=y
++CONFIG_FB_OMAP2=m
++CONFIG_PANEL_GENERIC_DPI=m
++CONFIG_PANEL_SHARP_LS037V7DW01=m
++CONFIG_PANEL_NEC_NL8048HL11_01B=m
++CONFIG_PANEL_TAAL=m
++CONFIG_PANEL_TPO_TD043MTEA1=m
++CONFIG_PANEL_ACX565AKM=m
+ CONFIG_BACKLIGHT_LCD_SUPPORT=y
+ CONFIG_LCD_CLASS_DEVICE=y
+ CONFIG_LCD_PLATFORM=y
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0171-OMAP-DSS2-Clean-up-a-switch-case.patch b/patches/dss2_next/0171-OMAP-DSS2-Clean-up-a-switch-case.patch
new file mode 100644
index 000000000..e7835bd4e
--- /dev/null
+++ b/patches/dss2_next/0171-OMAP-DSS2-Clean-up-a-switch-case.patch
@@ -0,0 +1,62 @@
+From ba403930de7751688acf744edf3ea986dba92b44 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 24 Feb 2011 13:59:13 +0200
+Subject: [PATCH 171/200] OMAP: DSS2: Clean up a switch-case
+
+Support for the display interface was checked in a separate switch-case.
+There's no reason for that, and this patch handles the fail code path in
+the same switch-case where the display initialization is done.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/display.c |   27 +++------------------------
+ 1 files changed, 3 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
+index 22dd7a4..3f4fa0b 100644
+--- a/drivers/video/omap2/dss/display.c
++++ b/drivers/video/omap2/dss/display.c
+@@ -396,29 +396,6 @@ void dss_init_device(struct platform_device *pdev,
+ 	switch (dssdev->type) {
+ #ifdef CONFIG_OMAP2_DSS_DPI
+ 	case OMAP_DISPLAY_TYPE_DPI:
+-#endif
+-#ifdef CONFIG_OMAP2_DSS_RFBI
+-	case OMAP_DISPLAY_TYPE_DBI:
+-#endif
+-#ifdef CONFIG_OMAP2_DSS_SDI
+-	case OMAP_DISPLAY_TYPE_SDI:
+-#endif
+-#ifdef CONFIG_OMAP2_DSS_DSI
+-	case OMAP_DISPLAY_TYPE_DSI:
+-#endif
+-#ifdef CONFIG_OMAP2_DSS_VENC
+-	case OMAP_DISPLAY_TYPE_VENC:
+-#endif
+-		break;
+-	default:
+-		DSSERR("Support for display '%s' not compiled in.\n",
+-				dssdev->name);
+-		return;
+-	}
+-
+-	switch (dssdev->type) {
+-#ifdef CONFIG_OMAP2_DSS_DPI
+-	case OMAP_DISPLAY_TYPE_DPI:
+ 		r = dpi_init_display(dssdev);
+ 		break;
+ #endif
+@@ -443,7 +420,9 @@ void dss_init_device(struct platform_device *pdev,
+ 		break;
+ #endif
+ 	default:
+-		BUG();
++		DSSERR("Support for display '%s' not compiled in.\n",
++				dssdev->name);
++		return;
+ 	}
+ 
+ 	if (r) {
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0172-OMAP-DSS2-FEATURES-Remove-SDI-from-3630-displays.patch b/patches/dss2_next/0172-OMAP-DSS2-FEATURES-Remove-SDI-from-3630-displays.patch
new file mode 100644
index 000000000..7155accb1
--- /dev/null
+++ b/patches/dss2_next/0172-OMAP-DSS2-FEATURES-Remove-SDI-from-3630-displays.patch
@@ -0,0 +1,63 @@
+From 0dcb8077ccad7fff85f44f2f42af86870dc42b47 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 24 Feb 2011 14:20:31 +0200
+Subject: [PATCH 172/200] OMAP: DSS2: FEATURES: Remove SDI from 3630 displays
+
+OMAP 3630 does not support SDI. Split omap3_dss_supported_displays into
+3430 and 3630 entries, and remove the SDI from 3630 entry.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dss_features.c |   15 ++++++++++++---
+ 1 files changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
+index cf3ef69..f4367f6 100644
+--- a/drivers/video/omap2/dss/dss_features.c
++++ b/drivers/video/omap2/dss/dss_features.c
+@@ -73,7 +73,7 @@ static const enum omap_display_type omap2_dss_supported_displays[] = {
+ 	OMAP_DISPLAY_TYPE_VENC,
+ };
+ 
+-static const enum omap_display_type omap3_dss_supported_displays[] = {
++static const enum omap_display_type omap3430_dss_supported_displays[] = {
+ 	/* OMAP_DSS_CHANNEL_LCD */
+ 	OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI |
+ 	OMAP_DISPLAY_TYPE_SDI | OMAP_DISPLAY_TYPE_DSI,
+@@ -82,6 +82,15 @@ static const enum omap_display_type omap3_dss_supported_displays[] = {
+ 	OMAP_DISPLAY_TYPE_VENC,
+ };
+ 
++static const enum omap_display_type omap3630_dss_supported_displays[] = {
++	/* OMAP_DSS_CHANNEL_LCD */
++	OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI |
++	OMAP_DISPLAY_TYPE_DSI,
++
++	/* OMAP_DSS_CHANNEL_DIGIT */
++	OMAP_DISPLAY_TYPE_VENC,
++};
++
+ static const enum omap_display_type omap4_dss_supported_displays[] = {
+ 	/* OMAP_DSS_CHANNEL_LCD */
+ 	OMAP_DISPLAY_TYPE_DBI | OMAP_DISPLAY_TYPE_DSI,
+@@ -161,7 +170,7 @@ static struct omap_dss_features omap3430_dss_features = {
+ 
+ 	.num_mgrs = 2,
+ 	.num_ovls = 3,
+-	.supported_displays = omap3_dss_supported_displays,
++	.supported_displays = omap3430_dss_supported_displays,
+ 	.supported_color_modes = omap3_dss_supported_color_modes,
+ };
+ 
+@@ -176,7 +185,7 @@ static struct omap_dss_features omap3630_dss_features = {
+ 
+ 	.num_mgrs = 2,
+ 	.num_ovls = 3,
+-	.supported_displays = omap3_dss_supported_displays,
++	.supported_displays = omap3630_dss_supported_displays,
+ 	.supported_color_modes = omap3_dss_supported_color_modes,
+ };
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0173-OMAP-DSS2-FEATURES-Remove-DSI-SDI-from-OMAP2.patch b/patches/dss2_next/0173-OMAP-DSS2-FEATURES-Remove-DSI-SDI-from-OMAP2.patch
new file mode 100644
index 000000000..3aac00ac3
--- /dev/null
+++ b/patches/dss2_next/0173-OMAP-DSS2-FEATURES-Remove-DSI-SDI-from-OMAP2.patch
@@ -0,0 +1,30 @@
+From ae9cd0c7dfc0c9b5f55d0a6daf99aa4730ed994b Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 24 Feb 2011 14:21:25 +0200
+Subject: [PATCH 173/200] OMAP: DSS2: FEATURES: Remove DSI & SDI from OMAP2
+
+OMAP2 doesn't support SDI or DSI. Remove them from
+omap2_dss_supported_displays.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dss_features.c |    3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
+index f4367f6..fe22d11 100644
+--- a/drivers/video/omap2/dss/dss_features.c
++++ b/drivers/video/omap2/dss/dss_features.c
+@@ -66,8 +66,7 @@ static const struct dss_reg_field omap3_dss_reg_fields[] = {
+ 
+ static const enum omap_display_type omap2_dss_supported_displays[] = {
+ 	/* OMAP_DSS_CHANNEL_LCD */
+-	OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI |
+-	OMAP_DISPLAY_TYPE_SDI | OMAP_DISPLAY_TYPE_DSI,
++	OMAP_DISPLAY_TYPE_DPI | OMAP_DISPLAY_TYPE_DBI,
+ 
+ 	/* OMAP_DSS_CHANNEL_DIGIT */
+ 	OMAP_DISPLAY_TYPE_VENC,
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0174-OMAP-DSS2-Check-for-SDI-HW-before-accessing-SDI-regi.patch b/patches/dss2_next/0174-OMAP-DSS2-Check-for-SDI-HW-before-accessing-SDI-regi.patch
new file mode 100644
index 000000000..31f8105b6
--- /dev/null
+++ b/patches/dss2_next/0174-OMAP-DSS2-Check-for-SDI-HW-before-accessing-SDI-regi.patch
@@ -0,0 +1,80 @@
+From 5ef87bb6f21459da7e19ca5b89012ded3cd6e577 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 24 Feb 2011 14:18:50 +0200
+Subject: [PATCH 174/200] OMAP: DSS2: Check for SDI HW before accessing SDI registers
+
+Only OMAP 3430 hardware has SDI support. The availability of SDI HW can
+be found out by checking if the LCD channel supports SDI displays.
+
+This patch checks for SDI HW support before accessing SDI registers,
+which fixes a crash on OMAP4 when SDI SW support is compiled in.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dss.c |   29 ++++++++++++++++++-----------
+ 1 files changed, 18 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index dc57100..50c1867 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -32,6 +32,7 @@
+ #include <plat/display.h>
+ #include <plat/clock.h>
+ #include "dss.h"
++#include "dss_features.h"
+ 
+ #define DSS_SZ_REGS			SZ_512
+ 
+@@ -110,10 +111,11 @@ void dss_save_context(void)
+ 	SR(SYSCONFIG);
+ 	SR(CONTROL);
+ 
+-#ifdef CONFIG_OMAP2_DSS_SDI
+-	SR(SDI_CONTROL);
+-	SR(PLL_CONTROL);
+-#endif
++	if (dss_feat_get_supported_displays(OMAP_DSS_CHANNEL_LCD) &
++			OMAP_DISPLAY_TYPE_SDI) {
++		SR(SDI_CONTROL);
++		SR(PLL_CONTROL);
++	}
+ }
+ 
+ void dss_restore_context(void)
+@@ -124,10 +126,11 @@ void dss_restore_context(void)
+ 	RR(SYSCONFIG);
+ 	RR(CONTROL);
+ 
+-#ifdef CONFIG_OMAP2_DSS_SDI
+-	RR(SDI_CONTROL);
+-	RR(PLL_CONTROL);
+-#endif
++	if (dss_feat_get_supported_displays(OMAP_DSS_CHANNEL_LCD) &
++			OMAP_DISPLAY_TYPE_SDI) {
++		RR(SDI_CONTROL);
++		RR(PLL_CONTROL);
++	}
+ }
+ 
+ #undef SR
+@@ -259,9 +262,13 @@ void dss_dump_regs(struct seq_file *s)
+ 	DUMPREG(DSS_SYSSTATUS);
+ 	DUMPREG(DSS_IRQSTATUS);
+ 	DUMPREG(DSS_CONTROL);
+-	DUMPREG(DSS_SDI_CONTROL);
+-	DUMPREG(DSS_PLL_CONTROL);
+-	DUMPREG(DSS_SDI_STATUS);
++
++	if (dss_feat_get_supported_displays(OMAP_DSS_CHANNEL_LCD) &
++			OMAP_DISPLAY_TYPE_SDI) {
++		DUMPREG(DSS_SDI_CONTROL);
++		DUMPREG(DSS_PLL_CONTROL);
++		DUMPREG(DSS_SDI_STATUS);
++	}
+ 
+ 	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+ #undef DUMPREG
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0175-OMAP-OMAPFB-Adding-help-for-FB_OMAP_LCD_VGA-option.patch b/patches/dss2_next/0175-OMAP-OMAPFB-Adding-help-for-FB_OMAP_LCD_VGA-option.patch
new file mode 100644
index 000000000..7b1cc27a9
--- /dev/null
+++ b/patches/dss2_next/0175-OMAP-OMAPFB-Adding-help-for-FB_OMAP_LCD_VGA-option.patch
@@ -0,0 +1,38 @@
+From fc55f109d79e36d332adc571805d396fef2dc378 Mon Sep 17 00:00:00 2001
+From: Janorkar, Mayuresh <mayur@ti.com>
+Date: Thu, 24 Feb 2011 03:39:17 -0600
+Subject: [PATCH 175/200] OMAP: OMAPFB: Adding help for FB_OMAP_LCD_VGA option
+
+CONFIG_FB_OMAP_LCD_VGA option is present in drivers/video/omap
+There is no explaination about what this flag does.
+Lets add information about it.
+
+FB_OMAP_LCD_VGA flag sets resolution of display to VGA (640 X 480).
+The default resolution of 3430 LDP is 320 X 240.
+
+Signed-off-by: Mayuresh Janorkar <mayur@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap/Kconfig |    6 +++++-
+ 1 files changed, 5 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/video/omap/Kconfig b/drivers/video/omap/Kconfig
+index 083c8fe..ff7049b 100644
+--- a/drivers/video/omap/Kconfig
++++ b/drivers/video/omap/Kconfig
+@@ -11,7 +11,11 @@ config FB_OMAP
+ config FB_OMAP_LCD_VGA
+         bool "Use LCD in VGA mode"
+ 	        depends on MACH_OMAP_3430SDP || MACH_OMAP_LDP
+-
++		help
++		  Set LCD resolution as VGA (640 X 480).
++		  Default resolution without this option is QVGA(320 X 240).
++		  Please take a look at drivers/video/omap/lcd_ldp.c file
++		  for lcd driver code.
+ choice
+ 	depends on FB_OMAP && MACH_OVERO
+ 	prompt "Screen resolution"
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0176-OMAP-DSS2-Remove-unused-list.patch b/patches/dss2_next/0176-OMAP-DSS2-Remove-unused-list.patch
new file mode 100644
index 000000000..37396cf6d
--- /dev/null
+++ b/patches/dss2_next/0176-OMAP-DSS2-Remove-unused-list.patch
@@ -0,0 +1,34 @@
+From ea8cd57d15d319d88c152c629b450bd1dbcb4509 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 28 Oct 2010 15:29:33 +0300
+Subject: [PATCH 176/200] OMAP: DSS2: Remove unused list
+
+There was an unused list defined in display.c. Remove it.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/display.c |    3 ---
+ 1 files changed, 0 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
+index 3f4fa0b..7d96b72 100644
+--- a/drivers/video/omap2/dss/display.c
++++ b/drivers/video/omap2/dss/display.c
+@@ -25,14 +25,11 @@
+ #include <linux/kernel.h>
+ #include <linux/module.h>
+ #include <linux/jiffies.h>
+-#include <linux/list.h>
+ #include <linux/platform_device.h>
+ 
+ #include <plat/display.h>
+ #include "dss.h"
+ 
+-static LIST_HEAD(display_list);
+-
+ static ssize_t display_enabled_show(struct device *dev,
+ 		struct device_attribute *attr, char *buf)
+ {
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0177-OMAP-DSS2-DSI-remove-unused-function.patch b/patches/dss2_next/0177-OMAP-DSS2-DSI-remove-unused-function.patch
new file mode 100644
index 000000000..98196af4d
--- /dev/null
+++ b/patches/dss2_next/0177-OMAP-DSS2-DSI-remove-unused-function.patch
@@ -0,0 +1,42 @@
+From 96a83e10d89e76dc9f5cadf96eaab221d3991939 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Wed, 2 Jun 2010 15:09:37 +0300
+Subject: [PATCH 177/200] OMAP: DSS2: DSI: remove unused function
+
+dsi_reset_tx_fifo() was not used. Furthermore, OMAP errata states that
+TX FIFO flush is not functional, so the function wouldn't even have
+worked.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dsi.c |   14 --------------
+ 1 files changed, 0 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index 2f7d949..c3019d9 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -1626,20 +1626,6 @@ static int _dsi_reset(void)
+ 	return _dsi_wait_reset();
+ }
+ 
+-static void dsi_reset_tx_fifo(int channel)
+-{
+-	u32 mask;
+-	u32 l;
+-
+-	/* set fifosize of the channel to 0, then return the old size */
+-	l = dsi_read_reg(DSI_TX_FIFO_VC_SIZE);
+-
+-	mask = FLD_MASK((8 * channel) + 7, (8 * channel) + 4);
+-	dsi_write_reg(DSI_TX_FIFO_VC_SIZE, l & ~mask);
+-
+-	dsi_write_reg(DSI_TX_FIFO_VC_SIZE, l);
+-}
+-
+ static void dsi_config_tx_fifo(enum fifo_size size1, enum fifo_size size2,
+ 		enum fifo_size size3, enum fifo_size size4)
+ {
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0178-OMAP2PLUS-DSS2-add-opt_clock_available-in-pdata.patch b/patches/dss2_next/0178-OMAP2PLUS-DSS2-add-opt_clock_available-in-pdata.patch
new file mode 100644
index 000000000..7ed6c7192
--- /dev/null
+++ b/patches/dss2_next/0178-OMAP2PLUS-DSS2-add-opt_clock_available-in-pdata.patch
@@ -0,0 +1,84 @@
+From 84136ea5322b1587774db233007d63a3d4806884 Mon Sep 17 00:00:00 2001
+From: Semwal, Sumit <sumit.semwal@ti.com>
+Date: Tue, 1 Mar 2011 02:42:13 -0600
+Subject: [PATCH 178/200] OMAP2PLUS:DSS2: add opt_clock_available in pdata
+
+Provide a function in pdata to allow dss submodules to check if a given
+clock is available on a platform as an optional clock.
+
+Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
+(based on implementation from Senthil)
+
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/mach-omap2/display.c             |   22 ++++++++++++++++++++++
+ arch/arm/plat-omap/include/plat/display.h |    2 ++
+ 2 files changed, 24 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
+index 16d0db6..256d23f 100644
+--- a/arch/arm/mach-omap2/display.c
++++ b/arch/arm/mach-omap2/display.c
+@@ -42,6 +42,20 @@ static struct omap_device_pm_latency omap_dss_latency[] = {
+ 	},
+ };
+ 
++/* oh_core is used for getting opt-clocks */
++static struct omap_hwmod	*oh_core;
++
++static bool opt_clock_available(const char *clk_role)
++{
++	int i;
++
++	for (i = 0; i < oh_core->opt_clks_cnt; i++) {
++		if (!strcmp(oh_core->opt_clks[i].role, clk_role))
++			return true;
++	}
++	return false;
++}
++
+ int __init omap_display_init(struct omap_dss_board_info *board_data)
+ {
+ 	int r = 0;
+@@ -74,9 +88,16 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
+ 		oh_count = ARRAY_SIZE(oh_name) - 2;
+ 		/* last 2 hwmod dev in oh_name are not available for omap3 */
+ 
++	/* opt_clks are always associated with dss hwmod */
++	oh_core = omap_hwmod_lookup("dss_core");
++	if (!oh_core) {
++		pr_err("Could not look up dss_core.\n");
++		return -ENODEV;
++	}
+ 
+ 	pdata.board_data = board_data;
+ 	pdata.board_data->get_last_off_on_transaction_id = NULL;
++	pdata.opt_clock_available = opt_clock_available;
+ 
+ 	for (i = 0; i < oh_count; i++) {
+ 		oh = omap_hwmod_lookup(oh_name[i]);
+@@ -84,6 +105,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
+ 			pr_err("Could not look up %s\n", oh_name[i]);
+ 			return -ENODEV;
+ 		}
++
+ 		od = omap_device_build(dev_name[i], -1, oh, &pdata,
+ 				sizeof(struct omap_display_platform_data),
+ 				omap_dss_latency,
+diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
+index 2fb057e..4101bcd 100644
+--- a/arch/arm/plat-omap/include/plat/display.h
++++ b/arch/arm/plat-omap/include/plat/display.h
+@@ -240,6 +240,8 @@ static inline int omap_display_init(struct omap_dss_board_info *board_data)
+ struct omap_display_platform_data {
+ 	struct omap_dss_board_info *board_data;
+ 	/* TODO: Additional members to be added when PM is considered */
++
++	bool (*opt_clock_available)(const char *clk_role);
+ };
+ 
+ struct omap_video_timings {
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0179-OMAP2PLUS-DSS2-Use-opt_clock_available-from-pdata.patch b/patches/dss2_next/0179-OMAP2PLUS-DSS2-Use-opt_clock_available-from-pdata.patch
new file mode 100644
index 000000000..d255ec7fe
--- /dev/null
+++ b/patches/dss2_next/0179-OMAP2PLUS-DSS2-Use-opt_clock_available-from-pdata.patch
@@ -0,0 +1,113 @@
+From 3eafdb6dcb4420e23fca03a68525a184889996c3 Mon Sep 17 00:00:00 2001
+From: Semwal, Sumit <sumit.semwal@ti.com>
+Date: Tue, 1 Mar 2011 02:42:14 -0600
+Subject: [PATCH 179/200] OMAP2PLUS:DSS2: Use opt_clock_available from pdata
+
+hwmod databases provide information about which optional clocks are available
+for a given platform. This is available via a function pointer opt_clock_enable
+in pdata.
+
+Use this information during get/enable/disable/put of clocks.
+
+Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dss.c |   46 ++++++++++++++++++++++++++--------------
+ 1 files changed, 30 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 50c1867..0cf5f8b 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -706,6 +706,7 @@ static int dss_get_clock(struct clk **clock, const char *clk_name)
+ static int dss_get_clocks(void)
+ {
+ 	int r;
++	struct omap_display_platform_data *pdata = dss.pdev->dev.platform_data;
+ 
+ 	dss.dss_ick = NULL;
+ 	dss.dss_fck = NULL;
+@@ -721,17 +722,28 @@ static int dss_get_clocks(void)
+ 	if (r)
+ 		goto err;
+ 
+-	r = dss_get_clock(&dss.dss_sys_clk, "sys_clk");
+-	if (r)
++	if (!pdata->opt_clock_available) {
++		r = -ENODEV;
+ 		goto err;
++	}
+ 
+-	r = dss_get_clock(&dss.dss_tv_fck, "tv_clk");
+-	if (r)
+-		goto err;
++	if (pdata->opt_clock_available("sys_clk")) {
++		r = dss_get_clock(&dss.dss_sys_clk, "sys_clk");
++		if (r)
++			goto err;
++	}
+ 
+-	r = dss_get_clock(&dss.dss_video_fck, "video_clk");
+-	if (r)
+-		goto err;
++	if (pdata->opt_clock_available("tv_clk")) {
++		r = dss_get_clock(&dss.dss_tv_fck, "tv_clk");
++		if (r)
++			goto err;
++	}
++
++	if (pdata->opt_clock_available("video_clk")) {
++		r = dss_get_clock(&dss.dss_video_fck, "video_clk");
++		if (r)
++			goto err;
++	}
+ 
+ 	return 0;
+ 
+@@ -754,9 +766,11 @@ static void dss_put_clocks(void)
+ {
+ 	if (dss.dss_video_fck)
+ 		clk_put(dss.dss_video_fck);
+-	clk_put(dss.dss_tv_fck);
++	if (dss.dss_tv_fck)
++		clk_put(dss.dss_tv_fck);
++	if (dss.dss_sys_clk)
++		clk_put(dss.dss_sys_clk);
+ 	clk_put(dss.dss_fck);
+-	clk_put(dss.dss_sys_clk);
+ 	clk_put(dss.dss_ick);
+ }
+ 
+@@ -805,11 +819,11 @@ static void dss_clk_enable_no_ctx(enum dss_clock clks)
+ 		clk_enable(dss.dss_ick);
+ 	if (clks & DSS_CLK_FCK)
+ 		clk_enable(dss.dss_fck);
+-	if (clks & DSS_CLK_SYSCK)
++	if ((clks & DSS_CLK_SYSCK) && dss.dss_sys_clk)
+ 		clk_enable(dss.dss_sys_clk);
+-	if (clks & DSS_CLK_TVFCK)
++	if ((clks & DSS_CLK_TVFCK) && dss.dss_tv_fck)
+ 		clk_enable(dss.dss_tv_fck);
+-	if (clks & DSS_CLK_VIDFCK)
++	if ((clks & DSS_CLK_VIDFCK) && dss.dss_video_fck)
+ 		clk_enable(dss.dss_video_fck);
+ 
+ 	dss.num_clks_enabled += num_clks;
+@@ -833,11 +847,11 @@ static void dss_clk_disable_no_ctx(enum dss_clock clks)
+ 		clk_disable(dss.dss_ick);
+ 	if (clks & DSS_CLK_FCK)
+ 		clk_disable(dss.dss_fck);
+-	if (clks & DSS_CLK_SYSCK)
++	if ((clks & DSS_CLK_SYSCK) && dss.dss_sys_clk)
+ 		clk_disable(dss.dss_sys_clk);
+-	if (clks & DSS_CLK_TVFCK)
++	if ((clks & DSS_CLK_TVFCK) && dss.dss_tv_fck)
+ 		clk_disable(dss.dss_tv_fck);
+-	if (clks & DSS_CLK_VIDFCK)
++	if ((clks & DSS_CLK_VIDFCK) && dss.dss_video_fck)
+ 		clk_disable(dss.dss_video_fck);
+ 
+ 	dss.num_clks_enabled -= num_clks;
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0180-omapfb-Fix-linker-error-in-drivers-video-omap-lcd_24.patch b/patches/dss2_next/0180-omapfb-Fix-linker-error-in-drivers-video-omap-lcd_24.patch
new file mode 100644
index 000000000..227291925
--- /dev/null
+++ b/patches/dss2_next/0180-omapfb-Fix-linker-error-in-drivers-video-omap-lcd_24.patch
@@ -0,0 +1,40 @@
+From 21f5f4add96f5bf0b9a138f13cccb276112500f9 Mon Sep 17 00:00:00 2001
+From: Jarkko Nikula <jhnikula@gmail.com>
+Date: Tue, 1 Mar 2011 02:40:37 -0600
+Subject: [PATCH 180/200] omapfb: Fix linker error in drivers/video/omap/lcd_2430sdp.c
+
+There is a linker error from lcd_2430sdp.c if CONFIG_TWL4030_CORE is not
+set. This can be triggered on OMAP2 builds when OMAP3 or OMAP4 are not set.
+
+drivers/built-in.o: In function `sdp2430_panel_disable':
+drivers/video/omap/lcd_2430sdp.c:123: undefined reference to `twl_i2c_write_u8'
+drivers/video/omap/lcd_2430sdp.c:124: undefined reference to `twl_i2c_write_u8'
+drivers/built-in.o: In function `sdp2430_panel_enable':
+drivers/video/omap/lcd_2430sdp.c:110: undefined reference to `twl_i2c_write_u8'
+drivers/video/omap/lcd_2430sdp.c:112: undefined reference to `twl_i2c_write_u8'
+
+Fix this by selecting the TWL4030_CORE for MACH_OMAP_2430SDP when building
+with CONFIG_FB_OMAP as there is no own Kconfig entry for lcd_2430 and it is
+compiled always when both MACH_OMAP_2430SDP and FB_OMAP are set.
+
+Signed-off-by: Jarkko Nikula <jhnikula@gmail.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap/Kconfig |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/omap/Kconfig b/drivers/video/omap/Kconfig
+index ff7049b..15e7f19 100644
+--- a/drivers/video/omap/Kconfig
++++ b/drivers/video/omap/Kconfig
+@@ -5,6 +5,7 @@ config FB_OMAP
+ 	select FB_CFB_FILLRECT
+ 	select FB_CFB_COPYAREA
+ 	select FB_CFB_IMAGEBLIT
++	select TWL4030_CORE if MACH_OMAP_2430SDP
+ 	help
+           Frame buffer driver for OMAP based boards.
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0181-OMAP2PLUS-DSS2-FEATURES-DISPC-overlay-code-cleanup.patch b/patches/dss2_next/0181-OMAP2PLUS-DSS2-FEATURES-DISPC-overlay-code-cleanup.patch
new file mode 100644
index 000000000..36eb7c23d
--- /dev/null
+++ b/patches/dss2_next/0181-OMAP2PLUS-DSS2-FEATURES-DISPC-overlay-code-cleanup.patch
@@ -0,0 +1,233 @@
+From 4d448a44ca2523f8281f4769affccedb2c85f6ac Mon Sep 17 00:00:00 2001
+From: Archit Taneja <archit@ti.com>
+Date: Wed, 2 Mar 2011 11:19:50 +0530
+Subject: [PATCH 181/200] OMAP2PLUS: DSS2: FEATURES: DISPC overlay code cleanup
+
+Add dss_features and register fields to incorporate changes in DISPC pipelines
+between OMAP3 and OMAP4.
+
+Register fields added: FEAT_REG_HORIZONTALACCU, FEAT_REG_VERTICALACCU
+DSS Features added: FEAT_LINEBUFFERSPLIT, FEAT_ROWREPEATENABLE, FEAT_RESIZECONF
+
+_dispc_set_scaling() and _dispc_set_rotation_attrs() have been cleaned up.
+
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dispc.c        |   52 ++++++++++++++++++++++---------
+ drivers/video/omap2/dss/dss_features.c |   30 ++++++++++++++----
+ drivers/video/omap2/dss/dss_features.h |    5 +++
+ 3 files changed, 66 insertions(+), 21 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index 43f7091..aa64797 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -1130,10 +1130,16 @@ static void _dispc_set_vid_accu0(enum omap_plane plane, int haccu, int vaccu)
+ 	u32 val;
+ 	const struct dispc_reg ac0_reg[] = { DISPC_VID_ACCU0(0),
+ 				      DISPC_VID_ACCU0(1) };
++	u8 hor_start, hor_end, vert_start, vert_end;
+ 
+ 	BUG_ON(plane == OMAP_DSS_GFX);
+ 
+-	val = FLD_VAL(vaccu, 25, 16) | FLD_VAL(haccu, 9, 0);
++	dss_feat_get_reg_field(FEAT_REG_HORIZONTALACCU, &hor_start, &hor_end);
++	dss_feat_get_reg_field(FEAT_REG_VERTICALACCU, &vert_start, &vert_end);
++
++	val = FLD_VAL(vaccu, vert_start, vert_end) |
++			FLD_VAL(haccu, hor_start, hor_end);
++
+ 	dispc_write_reg(ac0_reg[plane-1], val);
+ }
+ 
+@@ -1142,10 +1148,16 @@ static void _dispc_set_vid_accu1(enum omap_plane plane, int haccu, int vaccu)
+ 	u32 val;
+ 	const struct dispc_reg ac1_reg[] = { DISPC_VID_ACCU1(0),
+ 				      DISPC_VID_ACCU1(1) };
++	u8 hor_start, hor_end, vert_start, vert_end;
+ 
+ 	BUG_ON(plane == OMAP_DSS_GFX);
+ 
+-	val = FLD_VAL(vaccu, 25, 16) | FLD_VAL(haccu, 9, 0);
++	dss_feat_get_reg_field(FEAT_REG_HORIZONTALACCU, &hor_start, &hor_end);
++	dss_feat_get_reg_field(FEAT_REG_VERTICALACCU, &vert_start, &vert_end);
++
++	val = FLD_VAL(vaccu, vert_start, vert_end) |
++			FLD_VAL(haccu, hor_start, hor_end);
++
+ 	dispc_write_reg(ac1_reg[plane-1], val);
+ }
+ 
+@@ -1183,16 +1195,25 @@ static void _dispc_set_scaling(enum omap_plane plane,
+ 	_dispc_set_fir(plane, fir_hinc, fir_vinc);
+ 
+ 	l = dispc_read_reg(dispc_reg_att[plane]);
+-	l &= ~((0x0f << 5) | (0x3 << 21));
+ 
++	/* RESIZEENABLE and VERTICALTAPS */
++	l &= ~((0x3 << 5) | (0x1 << 21));
+ 	l |= fir_hinc ? (1 << 5) : 0;
+ 	l |= fir_vinc ? (1 << 6) : 0;
++	l |= five_taps ? (1 << 21) : 0;
+ 
+-	l |= hscaleup ? 0 : (1 << 7);
+-	l |= vscaleup ? 0 : (1 << 8);
++	/* VRESIZECONF and HRESIZECONF */
++	if (dss_has_feature(FEAT_RESIZECONF)) {
++		l &= ~(0x3 << 7);
++		l |= hscaleup ? 0 : (1 << 7);
++		l |= vscaleup ? 0 : (1 << 8);
++	}
+ 
+-	l |= five_taps ? (1 << 21) : 0;
+-	l |= five_taps ? (1 << 22) : 0;
++	/* LINEBUFFERSPLIT */
++	if (dss_has_feature(FEAT_LINEBUFFERSPLIT)) {
++		l &= ~(0x1 << 22);
++		l |= five_taps ? (1 << 22) : 0;
++	}
+ 
+ 	dispc_write_reg(dispc_reg_att[plane], l);
+ 
+@@ -1216,9 +1237,11 @@ static void _dispc_set_scaling(enum omap_plane plane,
+ static void _dispc_set_rotation_attrs(enum omap_plane plane, u8 rotation,
+ 		bool mirroring, enum omap_color_mode color_mode)
+ {
++	bool row_repeat = false;
++	int vidrot = 0;
++
+ 	if (color_mode == OMAP_DSS_COLOR_YUV2 ||
+ 			color_mode == OMAP_DSS_COLOR_UYVY) {
+-		int vidrot = 0;
+ 
+ 		if (mirroring) {
+ 			switch (rotation) {
+@@ -1252,16 +1275,15 @@ static void _dispc_set_rotation_attrs(enum omap_plane plane, u8 rotation,
+ 			}
+ 		}
+ 
+-		REG_FLD_MOD(dispc_reg_att[plane], vidrot, 13, 12);
+-
+ 		if (rotation == OMAP_DSS_ROT_90 || rotation == OMAP_DSS_ROT_270)
+-			REG_FLD_MOD(dispc_reg_att[plane], 0x1, 18, 18);
++			row_repeat = true;
+ 		else
+-			REG_FLD_MOD(dispc_reg_att[plane], 0x0, 18, 18);
+-	} else {
+-		REG_FLD_MOD(dispc_reg_att[plane], 0, 13, 12);
+-		REG_FLD_MOD(dispc_reg_att[plane], 0, 18, 18);
++			row_repeat = false;
+ 	}
++
++	REG_FLD_MOD(dispc_reg_att[plane], vidrot, 13, 12);
++	if (dss_has_feature(FEAT_ROWREPEATENABLE))
++		REG_FLD_MOD(dispc_reg_att[plane], row_repeat ? 1 : 0, 18, 18);
+ }
+ 
+ static int color_mode_to_bpp(enum omap_color_mode color_mode)
+diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
+index fe22d11..679be14 100644
+--- a/drivers/video/omap2/dss/dss_features.c
++++ b/drivers/video/omap2/dss/dss_features.c
+@@ -54,6 +54,8 @@ static const struct dss_reg_field omap2_dss_reg_fields[] = {
+ 	{ FEAT_REG_FIFOLOWTHRESHOLD, 8, 0 },
+ 	{ FEAT_REG_FIFOHIGHTHRESHOLD, 24, 16 },
+ 	{ FEAT_REG_FIFOSIZE, 8, 0 },
++	{ FEAT_REG_HORIZONTALACCU, 9, 0 },
++	{ FEAT_REG_VERTICALACCU, 25, 16 },
+ };
+ 
+ static const struct dss_reg_field omap3_dss_reg_fields[] = {
+@@ -62,6 +64,18 @@ static const struct dss_reg_field omap3_dss_reg_fields[] = {
+ 	{ FEAT_REG_FIFOLOWTHRESHOLD, 11, 0 },
+ 	{ FEAT_REG_FIFOHIGHTHRESHOLD, 27, 16 },
+ 	{ FEAT_REG_FIFOSIZE, 10, 0 },
++	{ FEAT_REG_HORIZONTALACCU, 9, 0 },
++	{ FEAT_REG_VERTICALACCU, 25, 16 },
++};
++
++static const struct dss_reg_field omap4_dss_reg_fields[] = {
++	{ FEAT_REG_FIRHINC, 12, 0 },
++	{ FEAT_REG_FIRVINC, 28, 16 },
++	{ FEAT_REG_FIFOLOWTHRESHOLD, 15, 0 },
++	{ FEAT_REG_FIFOHIGHTHRESHOLD, 31, 16 },
++	{ FEAT_REG_FIFOSIZE, 15, 0 },
++	{ FEAT_REG_HORIZONTALACCU, 10, 0 },
++	{ FEAT_REG_VERTICALACCU, 26, 16 },
+ };
+ 
+ static const enum omap_display_type omap2_dss_supported_displays[] = {
+@@ -149,7 +163,8 @@ static struct omap_dss_features omap2_dss_features = {
+ 
+ 	.has_feature	=
+ 		FEAT_LCDENABLEPOL | FEAT_LCDENABLESIGNAL |
+-		FEAT_PCKFREEENABLE | FEAT_FUNCGATED,
++		FEAT_PCKFREEENABLE | FEAT_FUNCGATED |
++		FEAT_ROWREPEATENABLE | FEAT_RESIZECONF,
+ 
+ 	.num_mgrs = 2,
+ 	.num_ovls = 3,
+@@ -165,7 +180,8 @@ static struct omap_dss_features omap3430_dss_features = {
+ 	.has_feature	=
+ 		FEAT_GLOBAL_ALPHA | FEAT_LCDENABLEPOL |
+ 		FEAT_LCDENABLESIGNAL | FEAT_PCKFREEENABLE |
+-		FEAT_FUNCGATED,
++		FEAT_FUNCGATED | FEAT_ROWREPEATENABLE |
++		FEAT_LINEBUFFERSPLIT | FEAT_RESIZECONF,
+ 
+ 	.num_mgrs = 2,
+ 	.num_ovls = 3,
+@@ -180,7 +196,9 @@ static struct omap_dss_features omap3630_dss_features = {
+ 	.has_feature    =
+ 		FEAT_GLOBAL_ALPHA | FEAT_LCDENABLEPOL |
+ 		FEAT_LCDENABLESIGNAL | FEAT_PCKFREEENABLE |
+-		FEAT_PRE_MULT_ALPHA | FEAT_FUNCGATED,
++		FEAT_PRE_MULT_ALPHA | FEAT_FUNCGATED |
++		FEAT_ROWREPEATENABLE | FEAT_LINEBUFFERSPLIT |
++		FEAT_RESIZECONF,
+ 
+ 	.num_mgrs = 2,
+ 	.num_ovls = 3,
+@@ -190,12 +208,12 @@ static struct omap_dss_features omap3630_dss_features = {
+ 
+ /* OMAP4 DSS Features */
+ static struct omap_dss_features omap4_dss_features = {
+-	.reg_fields = omap3_dss_reg_fields,
+-	.num_reg_fields = ARRAY_SIZE(omap3_dss_reg_fields),
++	.reg_fields = omap4_dss_reg_fields,
++	.num_reg_fields = ARRAY_SIZE(omap4_dss_reg_fields),
+ 
+ 	.has_feature	=
+ 		FEAT_GLOBAL_ALPHA | FEAT_PRE_MULT_ALPHA |
+-		FEAT_MGR_LCD2,
++		FEAT_MGR_LCD2 | FEAT_GLOBAL_ALPHA_VID1,
+ 
+ 	.num_mgrs = 3,
+ 	.num_ovls = 3,
+diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h
+index b9c70be..b3f8141 100644
+--- a/drivers/video/omap2/dss/dss_features.h
++++ b/drivers/video/omap2/dss/dss_features.h
+@@ -33,6 +33,9 @@ enum dss_feat_id {
+ 	FEAT_PCKFREEENABLE	= 1 << 5,
+ 	FEAT_FUNCGATED		= 1 << 6,
+ 	FEAT_MGR_LCD2		= 1 << 7,
++	FEAT_LINEBUFFERSPLIT	= 1 << 8,
++	FEAT_ROWREPEATENABLE	= 1 << 9,
++	FEAT_RESIZECONF		= 1 << 10,
+ };
+ 
+ /* DSS register field id */
+@@ -42,6 +45,8 @@ enum dss_feat_reg_field {
+ 	FEAT_REG_FIFOHIGHTHRESHOLD,
+ 	FEAT_REG_FIFOLOWTHRESHOLD,
+ 	FEAT_REG_FIFOSIZE,
++	FEAT_REG_HORIZONTALACCU,
++	FEAT_REG_VERTICALACCU,
+ };
+ 
+ /* DSS Feature Functions */
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0182-OMAP2PLUS-DSS2-FEATURES-Function-to-Provide-the-max-.patch b/patches/dss2_next/0182-OMAP2PLUS-DSS2-FEATURES-Function-to-Provide-the-max-.patch
new file mode 100644
index 000000000..c12628958
--- /dev/null
+++ b/patches/dss2_next/0182-OMAP2PLUS-DSS2-FEATURES-Function-to-Provide-the-max-.patch
@@ -0,0 +1,190 @@
+From 5cb4ee15bd2fe25e5fca303b9123dc31e7b9de40 Mon Sep 17 00:00:00 2001
+From: Archit Taneja <archit@ti.com>
+Date: Tue, 1 Mar 2011 11:54:00 +0530
+Subject: [PATCH 182/200] OMAP2PLUS: DSS2: FEATURES: Function to Provide the max fck supported
+
+The maximum supported frequency for DSS has increased from 173 to 186 Mhz on
+OMAP4.
+
+Introduce a dss feature function to get the max_fck to replace DISPC_MAX_FCK
+macro.
+
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dsi.c          |    9 ++++++---
+ drivers/video/omap2/dss/dss.c          |    8 +++++---
+ drivers/video/omap2/dss/dss.h          |    2 --
+ drivers/video/omap2/dss/dss_features.c |   11 +++++++++++
+ drivers/video/omap2/dss/dss_features.h |    1 +
+ 5 files changed, 23 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index c3019d9..705599a 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -38,6 +38,7 @@
+ #include <plat/clock.h>
+ 
+ #include "dss.h"
++#include "dss_features.h"
+ 
+ /*#define VERBOSE_IRQ*/
+ #define DSI_CATCH_MISSING_TE
+@@ -856,10 +857,12 @@ int dsi_pll_calc_clock_div_pck(bool is_tft, unsigned long req_pck,
+ 	struct dispc_clock_info best_dispc;
+ 	int min_fck_per_pck;
+ 	int match = 0;
+-	unsigned long dss_clk_fck2;
++	unsigned long dss_clk_fck2, max_dss_fck;
+ 
+ 	dss_clk_fck2 = dss_clk_get_rate(DSS_CLK_SYSCK);
+ 
++	max_dss_fck = dss_feat_get_max_dss_fck();
++
+ 	if (req_pck == dsi.cache_req_pck &&
+ 			dsi.cache_cinfo.clkin == dss_clk_fck2) {
+ 		DSSDBG("DSI clock info found from cache\n");
+@@ -872,7 +875,7 @@ int dsi_pll_calc_clock_div_pck(bool is_tft, unsigned long req_pck,
+ 	min_fck_per_pck = CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK;
+ 
+ 	if (min_fck_per_pck &&
+-		req_pck * min_fck_per_pck > DISPC_MAX_FCK) {
++		req_pck * min_fck_per_pck > max_dss_fck) {
+ 		DSSERR("Requested pixel clock not possible with the current "
+ 				"OMAP2_DSS_MIN_FCK_PER_PCK setting. Turning "
+ 				"the constraint off.\n");
+@@ -925,7 +928,7 @@ retry:
+ 				if (cur.dsi1_pll_fclk  < req_pck)
+ 					break;
+ 
+-				if (cur.dsi1_pll_fclk > DISPC_MAX_FCK)
++				if (cur.dsi1_pll_fclk > max_dss_fck)
+ 					continue;
+ 
+ 				if (min_fck_per_pck &&
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 0cf5f8b..01be82a 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -387,7 +387,7 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck,
+ 	struct dss_clock_info best_dss;
+ 	struct dispc_clock_info best_dispc;
+ 
+-	unsigned long fck;
++	unsigned long fck, max_dss_fck;
+ 
+ 	u16 fck_div;
+ 
+@@ -396,6 +396,8 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck,
+ 
+ 	prate = dss_get_dpll4_rate();
+ 
++	max_dss_fck = dss_feat_get_max_dss_fck();
++
+ 	fck = dss_clk_get_rate(DSS_CLK_FCK);
+ 	if (req_pck == dss.cache_req_pck &&
+ 			((cpu_is_omap34xx() && prate == dss.cache_prate) ||
+@@ -409,7 +411,7 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck,
+ 	min_fck_per_pck = CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK;
+ 
+ 	if (min_fck_per_pck &&
+-		req_pck * min_fck_per_pck > DISPC_MAX_FCK) {
++		req_pck * min_fck_per_pck > max_dss_fck) {
+ 		DSSERR("Requested pixel clock not possible with the current "
+ 				"OMAP2_DSS_MIN_FCK_PER_PCK setting. Turning "
+ 				"the constraint off.\n");
+@@ -445,7 +447,7 @@ retry:
+ 			else
+ 				fck = prate / fck_div * 2;
+ 
+-			if (fck > DISPC_MAX_FCK)
++			if (fck > max_dss_fck)
+ 				continue;
+ 
+ 			if (min_fck_per_pck &&
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index 4b02e07..7fe32d1 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -97,8 +97,6 @@ extern unsigned int dss_debug;
+ #define FLD_MOD(orig, val, start, end) \
+ 	(((orig) & ~FLD_MASK(start, end)) | FLD_VAL(val, start, end))
+ 
+-#define DISPC_MAX_FCK 173000000
+-
+ enum omap_burst_size {
+ 	OMAP_DSS_BURST_4x32 = 0,
+ 	OMAP_DSS_BURST_8x32 = 1,
+diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
+index 679be14..3ebe0d9 100644
+--- a/drivers/video/omap2/dss/dss_features.c
++++ b/drivers/video/omap2/dss/dss_features.c
+@@ -41,6 +41,7 @@ struct omap_dss_features {
+ 
+ 	const int num_mgrs;
+ 	const int num_ovls;
++	const unsigned long max_dss_fck;
+ 	const enum omap_display_type *supported_displays;
+ 	const enum omap_color_mode *supported_color_modes;
+ };
+@@ -168,6 +169,7 @@ static struct omap_dss_features omap2_dss_features = {
+ 
+ 	.num_mgrs = 2,
+ 	.num_ovls = 3,
++	.max_dss_fck = 173000000,
+ 	.supported_displays = omap2_dss_supported_displays,
+ 	.supported_color_modes = omap2_dss_supported_color_modes,
+ };
+@@ -185,6 +187,7 @@ static struct omap_dss_features omap3430_dss_features = {
+ 
+ 	.num_mgrs = 2,
+ 	.num_ovls = 3,
++	.max_dss_fck = 173000000,
+ 	.supported_displays = omap3430_dss_supported_displays,
+ 	.supported_color_modes = omap3_dss_supported_color_modes,
+ };
+@@ -202,6 +205,7 @@ static struct omap_dss_features omap3630_dss_features = {
+ 
+ 	.num_mgrs = 2,
+ 	.num_ovls = 3,
++	.max_dss_fck = 173000000,
+ 	.supported_displays = omap3630_dss_supported_displays,
+ 	.supported_color_modes = omap3_dss_supported_color_modes,
+ };
+@@ -217,6 +221,7 @@ static struct omap_dss_features omap4_dss_features = {
+ 
+ 	.num_mgrs = 3,
+ 	.num_ovls = 3,
++	.max_dss_fck = 186000000,
+ 	.supported_displays = omap4_dss_supported_displays,
+ 	.supported_color_modes = omap3_dss_supported_color_modes,
+ };
+@@ -232,6 +237,12 @@ int dss_feat_get_num_ovls(void)
+ 	return omap_current_dss_features->num_ovls;
+ }
+ 
++/* Max supported DSS FCK in Hz */
++unsigned long dss_feat_get_max_dss_fck(void)
++{
++	return omap_current_dss_features->max_dss_fck;
++}
++
+ enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel)
+ {
+ 	return omap_current_dss_features->supported_displays[channel];
+diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h
+index b3f8141..18ab195 100644
+--- a/drivers/video/omap2/dss/dss_features.h
++++ b/drivers/video/omap2/dss/dss_features.h
+@@ -52,6 +52,7 @@ enum dss_feat_reg_field {
+ /* DSS Feature Functions */
+ int dss_feat_get_num_mgrs(void);
+ int dss_feat_get_num_ovls(void);
++unsigned long dss_feat_get_max_dss_fck(void);
+ enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel);
+ enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane plane);
+ bool dss_feat_color_mode_supported(enum omap_plane plane,
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0183-OMAP2PLUS-DSS2-Make-members-of-dss_clk_source-generi.patch b/patches/dss2_next/0183-OMAP2PLUS-DSS2-Make-members-of-dss_clk_source-generi.patch
new file mode 100644
index 000000000..ae561c2a9
--- /dev/null
+++ b/patches/dss2_next/0183-OMAP2PLUS-DSS2-Make-members-of-dss_clk_source-generi.patch
@@ -0,0 +1,204 @@
+From 077b28010ac83b81d4b9bb97a4ebeb81924a55c9 Mon Sep 17 00:00:00 2001
+From: Archit Taneja <archit@ti.com>
+Date: Thu, 6 Jan 2011 10:44:10 +0530
+Subject: [PATCH 183/200] OMAP2PLUS: DSS2: Make members of dss_clk_source generic
+
+The enum members of 'dss_clk_source' have clock source names specific to
+OMAP2/3. Change the names to more generic terms such that they now describe
+where the clocks come from and what they are used for.
+
+Also, change the enum member names to have "DSS_CLK_SRC" instead of "DSS_SRC"
+for more clarity.
+
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dispc.c |    4 ++--
+ drivers/video/omap2/dss/dpi.c   |    4 ++--
+ drivers/video/omap2/dss/dsi.c   |   20 ++++++++++----------
+ drivers/video/omap2/dss/dss.c   |   20 ++++++++++----------
+ drivers/video/omap2/dss/dss.h   |    6 +++---
+ 5 files changed, 27 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index aa64797..a06b2ea 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -2334,7 +2334,7 @@ unsigned long dispc_fclk_rate(void)
+ {
+ 	unsigned long r = 0;
+ 
+-	if (dss_get_dispc_clk_source() == DSS_SRC_DSS1_ALWON_FCLK)
++	if (dss_get_dispc_clk_source() == DSS_CLK_SRC_FCK)
+ 		r = dss_clk_get_rate(DSS_CLK_FCK);
+ 	else
+ #ifdef CONFIG_OMAP2_DSS_DSI
+@@ -2385,7 +2385,7 @@ void dispc_dump_clocks(struct seq_file *s)
+ 	seq_printf(s, "- DISPC -\n");
+ 
+ 	seq_printf(s, "dispc fclk source = %s\n",
+-			dss_get_dispc_clk_source() == DSS_SRC_DSS1_ALWON_FCLK ?
++			dss_get_dispc_clk_source() == DSS_CLK_SRC_FCK ?
+ 			"dss1_alwon_fclk" : "dsi1_pll_fclk");
+ 
+ 	seq_printf(s, "fck\t\t%-16lu\n", dispc_fclk_rate());
+diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
+index 026702b..1b2867d 100644
+--- a/drivers/video/omap2/dss/dpi.c
++++ b/drivers/video/omap2/dss/dpi.c
+@@ -57,7 +57,7 @@ static int dpi_set_dsi_clk(struct omap_dss_device *dssdev, bool is_tft,
+ 	if (r)
+ 		return r;
+ 
+-	dss_select_dispc_clk_source(DSS_SRC_DSI1_PLL_FCLK);
++	dss_select_dispc_clk_source(DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC);
+ 
+ 	r = dispc_set_clock_div(dssdev->manager->id, &dispc_cinfo);
+ 	if (r)
+@@ -217,7 +217,7 @@ void omapdss_dpi_display_disable(struct omap_dss_device *dssdev)
+ 	dssdev->manager->disable(dssdev->manager);
+ 
+ #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
+-	dss_select_dispc_clk_source(DSS_SRC_DSS1_ALWON_FCLK);
++	dss_select_dispc_clk_source(DSS_CLK_SRC_FCK);
+ 	dsi_pll_uninit();
+ 	dss_clk_disable(DSS_CLK_SYSCK);
+ #endif
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index 705599a..df35aed 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -731,7 +731,7 @@ static unsigned long dsi_fclk_rate(void)
+ {
+ 	unsigned long r;
+ 
+-	if (dss_get_dsi_clk_source() == DSS_SRC_DSS1_ALWON_FCLK) {
++	if (dss_get_dsi_clk_source() == DSS_CLK_SRC_FCK) {
+ 		/* DSI FCLK source is DSS1_ALWON_FCK, which is dss1_fck */
+ 		r = dss_clk_get_rate(DSS_CLK_FCK);
+ 	} else {
+@@ -1188,19 +1188,19 @@ void dsi_dump_clocks(struct seq_file *s)
+ 	seq_printf(s,	"dsi1_pll_fck\t%-16luregm3 %u\t(%s)\n",
+ 			cinfo->dsi1_pll_fclk,
+ 			cinfo->regm3,
+-			dss_get_dispc_clk_source() == DSS_SRC_DSS1_ALWON_FCLK ?
++			dss_get_dispc_clk_source() == DSS_CLK_SRC_FCK ?
+ 			"off" : "on");
+ 
+ 	seq_printf(s,	"dsi2_pll_fck\t%-16luregm4 %u\t(%s)\n",
+ 			cinfo->dsi2_pll_fclk,
+ 			cinfo->regm4,
+-			dss_get_dsi_clk_source() == DSS_SRC_DSS1_ALWON_FCLK ?
++			dss_get_dsi_clk_source() == DSS_CLK_SRC_FCK ?
+ 			"off" : "on");
+ 
+ 	seq_printf(s,	"- DSI -\n");
+ 
+ 	seq_printf(s,	"dsi fclk source = %s\n",
+-			dss_get_dsi_clk_source() == DSS_SRC_DSS1_ALWON_FCLK ?
++			dss_get_dsi_clk_source() == DSS_CLK_SRC_FCK ?
+ 			"dss1_alwon_fclk" : "dsi2_pll_fclk");
+ 
+ 	seq_printf(s,	"DSI_FCLK\t%lu\n", dsi_fclk_rate());
+@@ -3038,8 +3038,8 @@ static int dsi_display_init_dsi(struct omap_dss_device *dssdev)
+ 	if (r)
+ 		goto err1;
+ 
+-	dss_select_dispc_clk_source(DSS_SRC_DSI1_PLL_FCLK);
+-	dss_select_dsi_clk_source(DSS_SRC_DSI2_PLL_FCLK);
++	dss_select_dispc_clk_source(DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC);
++	dss_select_dsi_clk_source(DSS_CLK_SRC_DSI_PLL_HSDIV_DSI);
+ 
+ 	DSSDBG("PLL OK\n");
+ 
+@@ -3075,8 +3075,8 @@ static int dsi_display_init_dsi(struct omap_dss_device *dssdev)
+ err3:
+ 	dsi_complexio_uninit();
+ err2:
+-	dss_select_dispc_clk_source(DSS_SRC_DSS1_ALWON_FCLK);
+-	dss_select_dsi_clk_source(DSS_SRC_DSS1_ALWON_FCLK);
++	dss_select_dispc_clk_source(DSS_CLK_SRC_FCK);
++	dss_select_dsi_clk_source(DSS_CLK_SRC_FCK);
+ err1:
+ 	dsi_pll_uninit();
+ err0:
+@@ -3092,8 +3092,8 @@ static void dsi_display_uninit_dsi(struct omap_dss_device *dssdev)
+ 	dsi_vc_enable(2, 0);
+ 	dsi_vc_enable(3, 0);
+ 
+-	dss_select_dispc_clk_source(DSS_SRC_DSS1_ALWON_FCLK);
+-	dss_select_dsi_clk_source(DSS_SRC_DSS1_ALWON_FCLK);
++	dss_select_dispc_clk_source(DSS_CLK_SRC_FCK);
++	dss_select_dsi_clk_source(DSS_CLK_SRC_FCK);
+ 	dsi_complexio_uninit();
+ 	dsi_pll_uninit();
+ }
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 01be82a..998c188 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -278,12 +278,12 @@ void dss_select_dispc_clk_source(enum dss_clk_source clk_src)
+ {
+ 	int b;
+ 
+-	BUG_ON(clk_src != DSS_SRC_DSI1_PLL_FCLK &&
+-			clk_src != DSS_SRC_DSS1_ALWON_FCLK);
++	BUG_ON(clk_src != DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC &&
++			clk_src != DSS_CLK_SRC_FCK);
+ 
+-	b = clk_src == DSS_SRC_DSS1_ALWON_FCLK ? 0 : 1;
++	b = clk_src == DSS_CLK_SRC_FCK ? 0 : 1;
+ 
+-	if (clk_src == DSS_SRC_DSI1_PLL_FCLK)
++	if (clk_src == DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC)
+ 		dsi_wait_dsi1_pll_active();
+ 
+ 	REG_FLD_MOD(DSS_CONTROL, b, 0, 0);	/* DISPC_CLK_SWITCH */
+@@ -295,12 +295,12 @@ void dss_select_dsi_clk_source(enum dss_clk_source clk_src)
+ {
+ 	int b;
+ 
+-	BUG_ON(clk_src != DSS_SRC_DSI2_PLL_FCLK &&
+-			clk_src != DSS_SRC_DSS1_ALWON_FCLK);
++	BUG_ON(clk_src != DSS_CLK_SRC_DSI_PLL_HSDIV_DSI &&
++			clk_src != DSS_CLK_SRC_FCK);
+ 
+-	b = clk_src == DSS_SRC_DSS1_ALWON_FCLK ? 0 : 1;
++	b = clk_src == DSS_CLK_SRC_FCK ? 0 : 1;
+ 
+-	if (clk_src == DSS_SRC_DSI2_PLL_FCLK)
++	if (clk_src == DSS_CLK_SRC_DSI_PLL_HSDIV_DSI)
+ 		dsi_wait_dsi2_pll_active();
+ 
+ 	REG_FLD_MOD(DSS_CONTROL, b, 1, 1);	/* DSI_CLK_SWITCH */
+@@ -601,8 +601,8 @@ static int dss_init(bool skip_init)
+ 		}
+ 	}
+ 
+-	dss.dsi_clk_source = DSS_SRC_DSS1_ALWON_FCLK;
+-	dss.dispc_clk_source = DSS_SRC_DSS1_ALWON_FCLK;
++	dss.dsi_clk_source = DSS_CLK_SRC_FCK;
++	dss.dispc_clk_source = DSS_CLK_SRC_FCK;
+ 
+ 	dss_save_context();
+ 
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index 7fe32d1..a166ff3 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -118,9 +118,9 @@ enum dss_clock {
+ };
+ 
+ enum dss_clk_source {
+-	DSS_SRC_DSI1_PLL_FCLK,
+-	DSS_SRC_DSI2_PLL_FCLK,
+-	DSS_SRC_DSS1_ALWON_FCLK,
++	DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC,	/* DSI1_PLL_FCLK */
++	DSS_CLK_SRC_DSI_PLL_HSDIV_DSI,		/* DSI2_PLL_FCLK */
++	DSS_CLK_SRC_FCK,			/* DSS1_ALWON_FCLK */
+ };
+ 
+ struct dss_clock_info {
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0184-OMAP2PLUS-DSS2-Use-dss-features-to-get-clock-source-.patch b/patches/dss2_next/0184-OMAP2PLUS-DSS2-Use-dss-features-to-get-clock-source-.patch
new file mode 100644
index 000000000..c27123858
--- /dev/null
+++ b/patches/dss2_next/0184-OMAP2PLUS-DSS2-Use-dss-features-to-get-clock-source-.patch
@@ -0,0 +1,308 @@
+From cc0809a84a34b2914c136184593638426b6716ea Mon Sep 17 00:00:00 2001
+From: Archit Taneja <archit@ti.com>
+Date: Wed, 2 Mar 2011 11:57:25 +0530
+Subject: [PATCH 184/200] OMAP2PLUS: DSS2: Use dss features to get clock source names of current OMAP
+
+Clock source names vary across OMAP2/3 and OMAP4, the clock source enum
+names have been made generic in the driver, but for purposes of debugging
+and dumping clock sources, it is better to preserve the actual TRM name of
+the clock.
+
+Introduce a dss feature function 'dss_feat_get_clk_source_name()' which
+returns a string with the TRM clock name for the current OMAP in use. The OMAP
+specific name is printed along the generic name within brackets.
+
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dispc.c        |    7 +++--
+ drivers/video/omap2/dss/dsi.c          |   42 ++++++++++++++++++++++----------
+ drivers/video/omap2/dss/dss.c          |   19 +++++++++++++-
+ drivers/video/omap2/dss/dss.h          |    7 +++++
+ drivers/video/omap2/dss/dss_features.c |   23 +++++++++++++++++
+ drivers/video/omap2/dss/dss_features.h |    1 +
+ 6 files changed, 81 insertions(+), 18 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index a06b2ea..2c82d9a 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -2379,14 +2379,15 @@ unsigned long dispc_pclk_rate(enum omap_channel channel)
+ void dispc_dump_clocks(struct seq_file *s)
+ {
+ 	int lcd, pcd;
++	enum dss_clk_source dispc_clk_src = dss_get_dispc_clk_source();
+ 
+ 	enable_clocks(1);
+ 
+ 	seq_printf(s, "- DISPC -\n");
+ 
+-	seq_printf(s, "dispc fclk source = %s\n",
+-			dss_get_dispc_clk_source() == DSS_CLK_SRC_FCK ?
+-			"dss1_alwon_fclk" : "dsi1_pll_fclk");
++	seq_printf(s, "dispc fclk source = %s (%s)\n",
++			dss_get_generic_clk_source_name(dispc_clk_src),
++			dss_feat_get_clk_source_name(dispc_clk_src));
+ 
+ 	seq_printf(s, "fck\t\t%-16lu\n", dispc_fclk_rate());
+ 
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index df35aed..3ef9422 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -1022,10 +1022,14 @@ int dsi_pll_set_clock_div(struct dsi_clock_info *cinfo)
+ 
+ 	DSSDBG("Clock lane freq %ld Hz\n", cinfo->clkin4ddr / 4);
+ 
+-	DSSDBG("regm3 = %d, dsi1_pll_fclk = %lu\n",
+-			cinfo->regm3, cinfo->dsi1_pll_fclk);
+-	DSSDBG("regm4 = %d, dsi2_pll_fclk = %lu\n",
+-			cinfo->regm4, cinfo->dsi2_pll_fclk);
++	DSSDBG("regm3 = %d, %s (%s) = %lu\n", cinfo->regm3,
++		dss_get_generic_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC),
++		dss_feat_get_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC),
++		cinfo->dsi1_pll_fclk);
++	DSSDBG("regm4 = %d, %s (%s) = %lu\n", cinfo->regm4,
++		dss_get_generic_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DSI),
++		dss_feat_get_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DSI),
++		cinfo->dsi2_pll_fclk);
+ 
+ 	REG_FLD_MOD(DSI_PLL_CONTROL, 0, 0, 0); /* DSI_PLL_AUTOMODE = manual */
+ 
+@@ -1169,6 +1173,10 @@ void dsi_dump_clocks(struct seq_file *s)
+ {
+ 	int clksel;
+ 	struct dsi_clock_info *cinfo = &dsi.current_cinfo;
++	enum dss_clk_source dispc_clk_src, dsi_clk_src;
++
++	dispc_clk_src = dss_get_dispc_clk_source();
++	dsi_clk_src = dss_get_dsi_clk_source();
+ 
+ 	enable_clocks(1);
+ 
+@@ -1185,23 +1193,27 @@ void dsi_dump_clocks(struct seq_file *s)
+ 	seq_printf(s,	"CLKIN4DDR\t%-16luregm %u\n",
+ 			cinfo->clkin4ddr, cinfo->regm);
+ 
+-	seq_printf(s,	"dsi1_pll_fck\t%-16luregm3 %u\t(%s)\n",
++	seq_printf(s,	"%s (%s)\t%-16luregm3 %u\t(%s)\n",
++			dss_get_generic_clk_source_name(dispc_clk_src),
++			dss_feat_get_clk_source_name(dispc_clk_src),
+ 			cinfo->dsi1_pll_fclk,
+ 			cinfo->regm3,
+-			dss_get_dispc_clk_source() == DSS_CLK_SRC_FCK ?
++			dispc_clk_src == DSS_CLK_SRC_FCK ?
+ 			"off" : "on");
+ 
+-	seq_printf(s,	"dsi2_pll_fck\t%-16luregm4 %u\t(%s)\n",
++	seq_printf(s,	"%s (%s)\t%-16luregm4 %u\t(%s)\n",
++			dss_get_generic_clk_source_name(dsi_clk_src),
++			dss_feat_get_clk_source_name(dsi_clk_src),
+ 			cinfo->dsi2_pll_fclk,
+ 			cinfo->regm4,
+-			dss_get_dsi_clk_source() == DSS_CLK_SRC_FCK ?
++			dsi_clk_src == DSS_CLK_SRC_FCK ?
+ 			"off" : "on");
+ 
+ 	seq_printf(s,	"- DSI -\n");
+ 
+-	seq_printf(s,	"dsi fclk source = %s\n",
+-			dss_get_dsi_clk_source() == DSS_CLK_SRC_FCK ?
+-			"dss1_alwon_fclk" : "dsi2_pll_fclk");
++	seq_printf(s,	"dsi fclk source = %s (%s)\n",
++			dss_get_generic_clk_source_name(dsi_clk_src),
++			dss_feat_get_clk_source_name(dsi_clk_src));
+ 
+ 	seq_printf(s,	"DSI_FCLK\t%lu\n", dsi_fclk_rate());
+ 
+@@ -3235,13 +3247,17 @@ int dsi_init_display(struct omap_dss_device *dssdev)
+ void dsi_wait_dsi1_pll_active(void)
+ {
+ 	if (wait_for_bit_change(DSI_PLL_STATUS, 7, 1) != 1)
+-		DSSERR("DSI1 PLL clock not active\n");
++		DSSERR("%s (%s) not active\n",
++			dss_get_generic_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC),
++			dss_feat_get_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC));
+ }
+ 
+ void dsi_wait_dsi2_pll_active(void)
+ {
+ 	if (wait_for_bit_change(DSI_PLL_STATUS, 8, 1) != 1)
+-		DSSERR("DSI2 PLL clock not active\n");
++		DSSERR("%s (%s) not active\n",
++			dss_get_generic_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DSI),
++			dss_feat_get_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DSI));
+ }
+ 
+ static int dsi_init(struct platform_device *pdev)
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 998c188..d049598 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -81,6 +81,12 @@ static struct {
+ 	u32		ctx[DSS_SZ_REGS / sizeof(u32)];
+ } dss;
+ 
++static const struct dss_clk_source_name dss_generic_clk_source_names[] = {
++	{ DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC, "DSI_PLL_HSDIV_DISPC" },
++	{ DSS_CLK_SRC_DSI_PLL_HSDIV_DSI, "DSI_PLL_HSDIV_DSI" },
++	{ DSS_CLK_SRC_FCK, "DSS_FCK" },
++};
++
+ static void dss_clk_enable_all_no_ctx(void);
+ static void dss_clk_disable_all_no_ctx(void);
+ static void dss_clk_enable_no_ctx(enum dss_clock clks);
+@@ -223,6 +229,11 @@ void dss_sdi_disable(void)
+ 	REG_FLD_MOD(DSS_PLL_CONTROL, 0, 18, 18); /* SDI_PLL_SYSRESET */
+ }
+ 
++const char *dss_get_generic_clk_source_name(enum dss_clk_source clk_src)
++{
++	return dss_generic_clk_source_names[clk_src].clksrc_name;
++}
++
+ void dss_dump_clocks(struct seq_file *s)
+ {
+ 	unsigned long dpll4_ck_rate;
+@@ -238,12 +249,16 @@ void dss_dump_clocks(struct seq_file *s)
+ 	seq_printf(s, "dpll4_ck %lu\n", dpll4_ck_rate);
+ 
+ 	if (cpu_is_omap3630())
+-		seq_printf(s, "dss1_alwon_fclk = %lu / %lu  = %lu\n",
++		seq_printf(s, "%s (%s) = %lu / %lu  = %lu\n",
++			dss_get_generic_clk_source_name(DSS_CLK_SRC_FCK),
++			dss_feat_get_clk_source_name(DSS_CLK_SRC_FCK),
+ 			dpll4_ck_rate,
+ 			dpll4_ck_rate / dpll4_m4_ck_rate,
+ 			dss_clk_get_rate(DSS_CLK_FCK));
+ 	else
+-		seq_printf(s, "dss1_alwon_fclk = %lu / %lu * 2 = %lu\n",
++		seq_printf(s, "%s (%s) = %lu / %lu * 2 = %lu\n",
++			dss_get_generic_clk_source_name(DSS_CLK_SRC_FCK),
++			dss_feat_get_clk_source_name(DSS_CLK_SRC_FCK),
+ 			dpll4_ck_rate,
+ 			dpll4_ck_rate / dpll4_m4_ck_rate,
+ 			dss_clk_get_rate(DSS_CLK_FCK));
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index a166ff3..42ca70f 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -123,6 +123,12 @@ enum dss_clk_source {
+ 	DSS_CLK_SRC_FCK,			/* DSS1_ALWON_FCLK */
+ };
+ 
++/* Correlates clock source name and dss_clk_source member */
++struct dss_clk_source_name {
++	enum dss_clk_source clksrc;
++	const char *clksrc_name;
++};
++
+ struct dss_clock_info {
+ 	/* rates that we get with dividers below */
+ 	unsigned long fck;
+@@ -215,6 +221,7 @@ void dss_clk_enable(enum dss_clock clks);
+ void dss_clk_disable(enum dss_clock clks);
+ unsigned long dss_clk_get_rate(enum dss_clock clk);
+ int dss_need_ctx_restore(void);
++const char *dss_get_generic_clk_source_name(enum dss_clk_source clk_src);
+ void dss_dump_clocks(struct seq_file *s);
+ 
+ void dss_dump_regs(struct seq_file *s);
+diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
+index 3ebe0d9..ccae57b 100644
+--- a/drivers/video/omap2/dss/dss_features.c
++++ b/drivers/video/omap2/dss/dss_features.c
+@@ -25,6 +25,7 @@
+ #include <plat/display.h>
+ #include <plat/cpu.h>
+ 
++#include "dss.h"
+ #include "dss_features.h"
+ 
+ /* Defines a generic omap register field */
+@@ -44,6 +45,7 @@ struct omap_dss_features {
+ 	const unsigned long max_dss_fck;
+ 	const enum omap_display_type *supported_displays;
+ 	const enum omap_color_mode *supported_color_modes;
++	const struct dss_clk_source_name *clksrc_names;
+ };
+ 
+ /* This struct is assigned to one of the below during initialization */
+@@ -157,6 +159,18 @@ static const enum omap_color_mode omap3_dss_supported_color_modes[] = {
+ 	OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_RGBX32,
+ };
+ 
++static const struct dss_clk_source_name omap2_dss_clk_source_names[] = {
++	{ DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC, "N/A" },
++	{ DSS_CLK_SRC_DSI_PLL_HSDIV_DSI, "N/A" },
++	{ DSS_CLK_SRC_FCK, "DSS_FCLK1" },
++};
++
++static const struct dss_clk_source_name omap3_dss_clk_source_names[] = {
++	{ DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC, "DSI1_PLL_FCLK" },
++	{ DSS_CLK_SRC_DSI_PLL_HSDIV_DSI, "DSI2_PLL_FCLK" },
++	{ DSS_CLK_SRC_FCK, "DSS1_ALWON_FCLK" },
++};
++
+ /* OMAP2 DSS Features */
+ static struct omap_dss_features omap2_dss_features = {
+ 	.reg_fields = omap2_dss_reg_fields,
+@@ -172,6 +186,7 @@ static struct omap_dss_features omap2_dss_features = {
+ 	.max_dss_fck = 173000000,
+ 	.supported_displays = omap2_dss_supported_displays,
+ 	.supported_color_modes = omap2_dss_supported_color_modes,
++	.clksrc_names = omap2_dss_clk_source_names,
+ };
+ 
+ /* OMAP3 DSS Features */
+@@ -190,6 +205,7 @@ static struct omap_dss_features omap3430_dss_features = {
+ 	.max_dss_fck = 173000000,
+ 	.supported_displays = omap3430_dss_supported_displays,
+ 	.supported_color_modes = omap3_dss_supported_color_modes,
++	.clksrc_names = omap3_dss_clk_source_names,
+ };
+ 
+ static struct omap_dss_features omap3630_dss_features = {
+@@ -208,6 +224,7 @@ static struct omap_dss_features omap3630_dss_features = {
+ 	.max_dss_fck = 173000000,
+ 	.supported_displays = omap3630_dss_supported_displays,
+ 	.supported_color_modes = omap3_dss_supported_color_modes,
++	.clksrc_names = omap3_dss_clk_source_names,
+ };
+ 
+ /* OMAP4 DSS Features */
+@@ -224,6 +241,7 @@ static struct omap_dss_features omap4_dss_features = {
+ 	.max_dss_fck = 186000000,
+ 	.supported_displays = omap4_dss_supported_displays,
+ 	.supported_color_modes = omap3_dss_supported_color_modes,
++	.clksrc_names = omap3_dss_clk_source_names,
+ };
+ 
+ /* Functions returning values related to a DSS feature */
+@@ -260,6 +278,11 @@ bool dss_feat_color_mode_supported(enum omap_plane plane,
+ 			color_mode;
+ }
+ 
++const char *dss_feat_get_clk_source_name(enum dss_clk_source id)
++{
++	return omap_current_dss_features->clksrc_names[id].clksrc_name;
++}
++
+ /* DSS has_feature check */
+ bool dss_has_feature(enum dss_feat_id id)
+ {
+diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h
+index 18ab195..65d6de7 100644
+--- a/drivers/video/omap2/dss/dss_features.h
++++ b/drivers/video/omap2/dss/dss_features.h
+@@ -57,6 +57,7 @@ enum omap_display_type dss_feat_get_supported_displays(enum omap_channel channel
+ enum omap_color_mode dss_feat_get_supported_color_modes(enum omap_plane plane);
+ bool dss_feat_color_mode_supported(enum omap_plane plane,
+ 		enum omap_color_mode color_mode);
++const char *dss_feat_get_clk_source_name(enum dss_clk_source id);
+ 
+ bool dss_has_feature(enum dss_feat_id id);
+ void dss_feat_get_reg_field(enum dss_feat_reg_field id, u8 *start, u8 *end);
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0185-OMAP2PLUS-DSS2-DSI-Generalize-DSI-PLL-Clock-Naming.patch b/patches/dss2_next/0185-OMAP2PLUS-DSS2-DSI-Generalize-DSI-PLL-Clock-Naming.patch
new file mode 100644
index 000000000..8898d21ee
--- /dev/null
+++ b/patches/dss2_next/0185-OMAP2PLUS-DSS2-DSI-Generalize-DSI-PLL-Clock-Naming.patch
@@ -0,0 +1,503 @@
+From 9dc12138ee08a766257ccfe2ac7243dd8b51e57c Mon Sep 17 00:00:00 2001
+From: Archit Taneja <archit@ti.com>
+Date: Thu, 24 Feb 2011 14:17:30 +0530
+Subject: [PATCH 185/200] OMAP2PLUS: DSS2: DSI: Generalize DSI PLL Clock Naming
+
+DSI PLL output clock names have been made more generic. The clock name
+describes what the source of the clock and what clock is used for. Some of
+DSI PLL parameters like dividers and DSI PLL source have also been made more
+generic.
+
+dsi1_pll_fclk and dsi2_pll_fclk have been changed as dsi_pll_hsdiv_dispc_clk
+and dsi_pll_hsdiv_dsi_clk respectively. Also, the hsdividers are now named
+regm_dispc and regm_dsi instead of regm3 and regm4.
+
+Functions and macros named on the basis of these clock names have also been
+made generic.
+
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/plat-omap/include/plat/display.h |    4 +-
+ drivers/video/omap2/dss/dispc.c           |    2 +-
+ drivers/video/omap2/dss/dpi.c             |    4 +-
+ drivers/video/omap2/dss/dsi.c             |  134 +++++++++++++++--------------
+ drivers/video/omap2/dss/dss.c             |    4 +-
+ drivers/video/omap2/dss/dss.h             |   20 ++--
+ 6 files changed, 87 insertions(+), 81 deletions(-)
+
+diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
+index 4101bcd..3765824 100644
+--- a/arch/arm/plat-omap/include/plat/display.h
++++ b/arch/arm/plat-omap/include/plat/display.h
+@@ -403,8 +403,8 @@ struct omap_dss_device {
+ 			struct {
+ 				u16 regn;
+ 				u16 regm;
+-				u16 regm3;
+-				u16 regm4;
++				u16 regm_dispc;
++				u16 regm_dsi;
+ 
+ 				u16 lp_clk_div;
+ 
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index 2c82d9a..9fb11c1 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -2338,7 +2338,7 @@ unsigned long dispc_fclk_rate(void)
+ 		r = dss_clk_get_rate(DSS_CLK_FCK);
+ 	else
+ #ifdef CONFIG_OMAP2_DSS_DSI
+-		r = dsi_get_dsi1_pll_rate();
++		r = dsi_get_pll_hsdiv_dispc_rate();
+ #else
+ 	BUG();
+ #endif
+diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
+index 1b2867d..08fed30 100644
+--- a/drivers/video/omap2/dss/dpi.c
++++ b/drivers/video/omap2/dss/dpi.c
+@@ -63,7 +63,7 @@ static int dpi_set_dsi_clk(struct omap_dss_device *dssdev, bool is_tft,
+ 	if (r)
+ 		return r;
+ 
+-	*fck = dsi_cinfo.dsi1_pll_fclk;
++	*fck = dsi_cinfo.dsi_pll_hsdiv_dispc_clk;
+ 	*lck_div = dispc_cinfo.lck_div;
+ 	*pck_div = dispc_cinfo.pck_div;
+ 
+@@ -271,7 +271,7 @@ int dpi_check_timings(struct omap_dss_device *dssdev,
+ 		if (r)
+ 			return r;
+ 
+-		fck = dsi_cinfo.dsi1_pll_fclk;
++		fck = dsi_cinfo.dsi_pll_hsdiv_dispc_clk;
+ 		lck_div = dispc_cinfo.lck_div;
+ 		pck_div = dispc_cinfo.pck_div;
+ 	}
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index 3ef9422..37ffbb6 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -189,8 +189,8 @@ struct dsi_reg { u16 idx; };
+ #define FINT_MIN 750000
+ #define REGN_MAX (1 << 7)
+ #define REGM_MAX ((1 << 11) - 1)
+-#define REGM3_MAX (1 << 4)
+-#define REGM4_MAX (1 << 4)
++#define REGM_DISPC_MAX (1 << 4)
++#define REGM_DSI_MAX (1 << 4)
+ #define LP_DIV_MAX ((1 << 13) - 1)
+ 
+ enum fifo_size {
+@@ -642,7 +642,7 @@ static void dsi_vc_disable_bta_irq(int channel)
+ 	dsi_write_reg(DSI_VC_IRQENABLE(channel), l);
+ }
+ 
+-/* DSI func clock. this could also be DSI2_PLL_FCLK */
++/* DSI func clock. this could also be dsi_pll_hsdiv_dsi_clk */
+ static inline void enable_clocks(bool enable)
+ {
+ 	if (enable)
+@@ -712,14 +712,14 @@ static inline int dsi_if_enable(bool enable)
+ 	return 0;
+ }
+ 
+-unsigned long dsi_get_dsi1_pll_rate(void)
++unsigned long dsi_get_pll_hsdiv_dispc_rate(void)
+ {
+-	return dsi.current_cinfo.dsi1_pll_fclk;
++	return dsi.current_cinfo.dsi_pll_hsdiv_dispc_clk;
+ }
+ 
+-static unsigned long dsi_get_dsi2_pll_rate(void)
++static unsigned long dsi_get_pll_hsdiv_dsi_rate(void)
+ {
+-	return dsi.current_cinfo.dsi2_pll_fclk;
++	return dsi.current_cinfo.dsi_pll_hsdiv_dsi_clk;
+ }
+ 
+ static unsigned long dsi_get_txbyteclkhs(void)
+@@ -732,11 +732,11 @@ static unsigned long dsi_fclk_rate(void)
+ 	unsigned long r;
+ 
+ 	if (dss_get_dsi_clk_source() == DSS_CLK_SRC_FCK) {
+-		/* DSI FCLK source is DSS1_ALWON_FCK, which is dss1_fck */
++		/* DSI FCLK source is DSS_CLK_FCK */
+ 		r = dss_clk_get_rate(DSS_CLK_FCK);
+ 	} else {
+-		/* DSI FCLK source is DSI2_PLL_FCLK */
+-		r = dsi_get_dsi2_pll_rate();
++		/* DSI FCLK source is dsi_pll_hsdiv_dsi_clk */
++		r = dsi_get_pll_hsdiv_dsi_rate();
+ 	}
+ 
+ 	return r;
+@@ -806,16 +806,16 @@ static int dsi_calc_clock_rates(struct omap_dss_device *dssdev,
+ 	if (cinfo->regm == 0 || cinfo->regm > REGM_MAX)
+ 		return -EINVAL;
+ 
+-	if (cinfo->regm3 > REGM3_MAX)
++	if (cinfo->regm_dispc > REGM_DISPC_MAX)
+ 		return -EINVAL;
+ 
+-	if (cinfo->regm4 > REGM4_MAX)
++	if (cinfo->regm_dsi > REGM_DSI_MAX)
+ 		return -EINVAL;
+ 
+-	if (cinfo->use_dss2_fck) {
++	if (cinfo->use_sys_clk) {
+ 		cinfo->clkin = dss_clk_get_rate(DSS_CLK_SYSCK);
+ 		/* XXX it is unclear if highfreq should be used
+-		 * with DSS2_FCK source also */
++		 * with DSS_SYS_CLK source also */
+ 		cinfo->highfreq = 0;
+ 	} else {
+ 		cinfo->clkin = dispc_pclk_rate(dssdev->manager->id);
+@@ -836,15 +836,17 @@ static int dsi_calc_clock_rates(struct omap_dss_device *dssdev,
+ 	if (cinfo->clkin4ddr > 1800 * 1000 * 1000)
+ 		return -EINVAL;
+ 
+-	if (cinfo->regm3 > 0)
+-		cinfo->dsi1_pll_fclk = cinfo->clkin4ddr / cinfo->regm3;
++	if (cinfo->regm_dispc > 0)
++		cinfo->dsi_pll_hsdiv_dispc_clk =
++			cinfo->clkin4ddr / cinfo->regm_dispc;
+ 	else
+-		cinfo->dsi1_pll_fclk = 0;
++		cinfo->dsi_pll_hsdiv_dispc_clk = 0;
+ 
+-	if (cinfo->regm4 > 0)
+-		cinfo->dsi2_pll_fclk = cinfo->clkin4ddr / cinfo->regm4;
++	if (cinfo->regm_dsi > 0)
++		cinfo->dsi_pll_hsdiv_dsi_clk =
++			cinfo->clkin4ddr / cinfo->regm_dsi;
+ 	else
+-		cinfo->dsi2_pll_fclk = 0;
++		cinfo->dsi_pll_hsdiv_dsi_clk = 0;
+ 
+ 	return 0;
+ }
+@@ -857,18 +859,18 @@ int dsi_pll_calc_clock_div_pck(bool is_tft, unsigned long req_pck,
+ 	struct dispc_clock_info best_dispc;
+ 	int min_fck_per_pck;
+ 	int match = 0;
+-	unsigned long dss_clk_fck2, max_dss_fck;
++	unsigned long dss_sys_clk, max_dss_fck;
+ 
+-	dss_clk_fck2 = dss_clk_get_rate(DSS_CLK_SYSCK);
++	dss_sys_clk = dss_clk_get_rate(DSS_CLK_SYSCK);
+ 
+ 	max_dss_fck = dss_feat_get_max_dss_fck();
+ 
+ 	if (req_pck == dsi.cache_req_pck &&
+-			dsi.cache_cinfo.clkin == dss_clk_fck2) {
++			dsi.cache_cinfo.clkin == dss_sys_clk) {
+ 		DSSDBG("DSI clock info found from cache\n");
+ 		*dsi_cinfo = dsi.cache_cinfo;
+-		dispc_find_clk_divs(is_tft, req_pck, dsi_cinfo->dsi1_pll_fclk,
+-				dispc_cinfo);
++		dispc_find_clk_divs(is_tft, req_pck,
++			dsi_cinfo->dsi_pll_hsdiv_dispc_clk, dispc_cinfo);
+ 		return 0;
+ 	}
+ 
+@@ -889,8 +891,8 @@ retry:
+ 	memset(&best_dispc, 0, sizeof(best_dispc));
+ 
+ 	memset(&cur, 0, sizeof(cur));
+-	cur.clkin = dss_clk_fck2;
+-	cur.use_dss2_fck = 1;
++	cur.clkin = dss_sys_clk;
++	cur.use_sys_clk = 1;
+ 	cur.highfreq = 0;
+ 
+ 	/* no highfreq: 0.75MHz < Fint = clkin / regn < 2.1MHz */
+@@ -916,30 +918,32 @@ retry:
+ 			if (cur.clkin4ddr > 1800 * 1000 * 1000)
+ 				break;
+ 
+-			/* DSI1_PLL_FCLK(MHz) = DSIPHY(MHz) / regm3  < 173MHz */
+-			for (cur.regm3 = 1; cur.regm3 < REGM3_MAX;
+-					++cur.regm3) {
++			/* dsi_pll_hsdiv_dispc_clk(MHz) =
++			 * DSIPHY(MHz) / regm_dispc  < 173MHz/186Mhz */
++			for (cur.regm_dispc = 1; cur.regm_dispc < REGM_DISPC_MAX;
++					++cur.regm_dispc) {
+ 				struct dispc_clock_info cur_dispc;
+-				cur.dsi1_pll_fclk = cur.clkin4ddr / cur.regm3;
++				cur.dsi_pll_hsdiv_dispc_clk =
++					cur.clkin4ddr / cur.regm_dispc;
+ 
+ 				/* this will narrow down the search a bit,
+ 				 * but still give pixclocks below what was
+ 				 * requested */
+-				if (cur.dsi1_pll_fclk  < req_pck)
++				if (cur.dsi_pll_hsdiv_dispc_clk  < req_pck)
+ 					break;
+ 
+-				if (cur.dsi1_pll_fclk > max_dss_fck)
++				if (cur.dsi_pll_hsdiv_dispc_clk > max_dss_fck)
+ 					continue;
+ 
+ 				if (min_fck_per_pck &&
+-					cur.dsi1_pll_fclk <
++					cur.dsi_pll_hsdiv_dispc_clk <
+ 						req_pck * min_fck_per_pck)
+ 					continue;
+ 
+ 				match = 1;
+ 
+ 				dispc_find_clk_divs(is_tft, req_pck,
+-						cur.dsi1_pll_fclk,
++						cur.dsi_pll_hsdiv_dispc_clk,
+ 						&cur_dispc);
+ 
+ 				if (abs(cur_dispc.pck - req_pck) <
+@@ -968,9 +972,9 @@ found:
+ 		return -EINVAL;
+ 	}
+ 
+-	/* DSI2_PLL_FCLK (regm4) is not used */
+-	best.regm4 = 0;
+-	best.dsi2_pll_fclk = 0;
++	/* dsi_pll_hsdiv_dsi_clk (regm_dsi) is not used */
++	best.regm_dsi = 0;
++	best.dsi_pll_hsdiv_dsi_clk = 0;
+ 
+ 	if (dsi_cinfo)
+ 		*dsi_cinfo = best;
+@@ -994,18 +998,20 @@ int dsi_pll_set_clock_div(struct dsi_clock_info *cinfo)
+ 
+ 	dsi.current_cinfo.fint = cinfo->fint;
+ 	dsi.current_cinfo.clkin4ddr = cinfo->clkin4ddr;
+-	dsi.current_cinfo.dsi1_pll_fclk = cinfo->dsi1_pll_fclk;
+-	dsi.current_cinfo.dsi2_pll_fclk = cinfo->dsi2_pll_fclk;
++	dsi.current_cinfo.dsi_pll_hsdiv_dispc_clk =
++			cinfo->dsi_pll_hsdiv_dispc_clk;
++	dsi.current_cinfo.dsi_pll_hsdiv_dsi_clk =
++			cinfo->dsi_pll_hsdiv_dsi_clk;
+ 
+ 	dsi.current_cinfo.regn = cinfo->regn;
+ 	dsi.current_cinfo.regm = cinfo->regm;
+-	dsi.current_cinfo.regm3 = cinfo->regm3;
+-	dsi.current_cinfo.regm4 = cinfo->regm4;
++	dsi.current_cinfo.regm_dispc = cinfo->regm_dispc;
++	dsi.current_cinfo.regm_dsi = cinfo->regm_dsi;
+ 
+ 	DSSDBG("DSI Fint %ld\n", cinfo->fint);
+ 
+ 	DSSDBG("clkin (%s) rate %ld, highfreq %d\n",
+-			cinfo->use_dss2_fck ? "dss2_fck" : "pclkfree",
++			cinfo->use_sys_clk ? "dss_sys_clk" : "pclkfree",
+ 			cinfo->clkin,
+ 			cinfo->highfreq);
+ 
+@@ -1022,14 +1028,14 @@ int dsi_pll_set_clock_div(struct dsi_clock_info *cinfo)
+ 
+ 	DSSDBG("Clock lane freq %ld Hz\n", cinfo->clkin4ddr / 4);
+ 
+-	DSSDBG("regm3 = %d, %s (%s) = %lu\n", cinfo->regm3,
++	DSSDBG("regm_dispc = %d, %s (%s) = %lu\n", cinfo->regm_dispc,
+ 		dss_get_generic_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC),
+ 		dss_feat_get_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC),
+-		cinfo->dsi1_pll_fclk);
+-	DSSDBG("regm4 = %d, %s (%s) = %lu\n", cinfo->regm4,
++		cinfo->dsi_pll_hsdiv_dispc_clk);
++	DSSDBG("regm_dsi = %d, %s (%s) = %lu\n", cinfo->regm_dsi,
+ 		dss_get_generic_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DSI),
+ 		dss_feat_get_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DSI),
+-		cinfo->dsi2_pll_fclk);
++		cinfo->dsi_pll_hsdiv_dsi_clk);
+ 
+ 	REG_FLD_MOD(DSI_PLL_CONTROL, 0, 0, 0); /* DSI_PLL_AUTOMODE = manual */
+ 
+@@ -1037,9 +1043,9 @@ int dsi_pll_set_clock_div(struct dsi_clock_info *cinfo)
+ 	l = FLD_MOD(l, 1, 0, 0);		/* DSI_PLL_STOPMODE */
+ 	l = FLD_MOD(l, cinfo->regn - 1, 7, 1);	/* DSI_PLL_REGN */
+ 	l = FLD_MOD(l, cinfo->regm, 18, 8);	/* DSI_PLL_REGM */
+-	l = FLD_MOD(l, cinfo->regm3 > 0 ? cinfo->regm3 - 1 : 0,
++	l = FLD_MOD(l, cinfo->regm_dispc > 0 ? cinfo->regm_dispc - 1 : 0,
+ 			22, 19);		/* DSI_CLOCK_DIV */
+-	l = FLD_MOD(l, cinfo->regm4 > 0 ? cinfo->regm4 - 1 : 0,
++	l = FLD_MOD(l, cinfo->regm_dsi > 0 ? cinfo->regm_dsi - 1 : 0,
+ 			26, 23);		/* DSIPROTO_CLOCK_DIV */
+ 	dsi_write_reg(DSI_PLL_CONFIGURATION1, l);
+ 
+@@ -1057,7 +1063,7 @@ int dsi_pll_set_clock_div(struct dsi_clock_info *cinfo)
+ 
+ 	l = dsi_read_reg(DSI_PLL_CONFIGURATION2);
+ 	l = FLD_MOD(l, f, 4, 1);		/* DSI_PLL_FREQSEL */
+-	l = FLD_MOD(l, cinfo->use_dss2_fck ? 0 : 1,
++	l = FLD_MOD(l, cinfo->use_sys_clk ? 0 : 1,
+ 			11, 11);		/* DSI_PLL_CLKSEL */
+ 	l = FLD_MOD(l, cinfo->highfreq,
+ 			12, 12);		/* DSI_PLL_HIGHFREQ */
+@@ -1186,26 +1192,26 @@ void dsi_dump_clocks(struct seq_file *s)
+ 
+ 	seq_printf(s,	"dsi pll source = %s\n",
+ 			clksel == 0 ?
+-			"dss2_alwon_fclk" : "pclkfree");
++			"dss_sys_clk" : "pclkfree");
+ 
+ 	seq_printf(s,	"Fint\t\t%-16luregn %u\n", cinfo->fint, cinfo->regn);
+ 
+ 	seq_printf(s,	"CLKIN4DDR\t%-16luregm %u\n",
+ 			cinfo->clkin4ddr, cinfo->regm);
+ 
+-	seq_printf(s,	"%s (%s)\t%-16luregm3 %u\t(%s)\n",
++	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),
+-			cinfo->dsi1_pll_fclk,
+-			cinfo->regm3,
++			cinfo->dsi_pll_hsdiv_dispc_clk,
++			cinfo->regm_dispc,
+ 			dispc_clk_src == DSS_CLK_SRC_FCK ?
+ 			"off" : "on");
+ 
+-	seq_printf(s,	"%s (%s)\t%-16luregm4 %u\t(%s)\n",
++	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),
+-			cinfo->dsi2_pll_fclk,
+-			cinfo->regm4,
++			cinfo->dsi_pll_hsdiv_dsi_clk,
++			cinfo->regm_dsi,
+ 			dsi_clk_src == DSS_CLK_SRC_FCK ?
+ 			"off" : "on");
+ 
+@@ -2989,12 +2995,12 @@ static int dsi_configure_dsi_clocks(struct omap_dss_device *dssdev)
+ 	struct dsi_clock_info cinfo;
+ 	int r;
+ 
+-	/* we always use DSS2_FCK as input clock */
+-	cinfo.use_dss2_fck = true;
++	/* we always use DSS_CLK_SYSCK as input clock */
++	cinfo.use_sys_clk = true;
+ 	cinfo.regn  = dssdev->phy.dsi.div.regn;
+ 	cinfo.regm  = dssdev->phy.dsi.div.regm;
+-	cinfo.regm3 = dssdev->phy.dsi.div.regm3;
+-	cinfo.regm4 = dssdev->phy.dsi.div.regm4;
++	cinfo.regm_dispc = dssdev->phy.dsi.div.regm_dispc;
++	cinfo.regm_dsi = dssdev->phy.dsi.div.regm_dsi;
+ 	r = dsi_calc_clock_rates(dssdev, &cinfo);
+ 	if (r) {
+ 		DSSERR("Failed to calc dsi clocks\n");
+@@ -3016,7 +3022,7 @@ static int dsi_configure_dispc_clocks(struct omap_dss_device *dssdev)
+ 	int r;
+ 	unsigned long long fck;
+ 
+-	fck = dsi_get_dsi1_pll_rate();
++	fck = dsi_get_pll_hsdiv_dispc_rate();
+ 
+ 	dispc_cinfo.lck_div = dssdev->phy.dsi.div.lck_div;
+ 	dispc_cinfo.pck_div = dssdev->phy.dsi.div.pck_div;
+@@ -3244,7 +3250,7 @@ int dsi_init_display(struct omap_dss_device *dssdev)
+ 	return 0;
+ }
+ 
+-void dsi_wait_dsi1_pll_active(void)
++void dsi_wait_pll_hsdiv_dispc_active(void)
+ {
+ 	if (wait_for_bit_change(DSI_PLL_STATUS, 7, 1) != 1)
+ 		DSSERR("%s (%s) not active\n",
+@@ -3252,7 +3258,7 @@ void dsi_wait_dsi1_pll_active(void)
+ 			dss_feat_get_clk_source_name(DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC));
+ }
+ 
+-void dsi_wait_dsi2_pll_active(void)
++void dsi_wait_pll_hsdiv_dsi_active(void)
+ {
+ 	if (wait_for_bit_change(DSI_PLL_STATUS, 8, 1) != 1)
+ 		DSSERR("%s (%s) not active\n",
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index d049598..5c6805b 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -299,7 +299,7 @@ void dss_select_dispc_clk_source(enum dss_clk_source clk_src)
+ 	b = clk_src == DSS_CLK_SRC_FCK ? 0 : 1;
+ 
+ 	if (clk_src == DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC)
+-		dsi_wait_dsi1_pll_active();
++		dsi_wait_pll_hsdiv_dispc_active();
+ 
+ 	REG_FLD_MOD(DSS_CONTROL, b, 0, 0);	/* DISPC_CLK_SWITCH */
+ 
+@@ -316,7 +316,7 @@ void dss_select_dsi_clk_source(enum dss_clk_source clk_src)
+ 	b = clk_src == DSS_CLK_SRC_FCK ? 0 : 1;
+ 
+ 	if (clk_src == DSS_CLK_SRC_DSI_PLL_HSDIV_DSI)
+-		dsi_wait_dsi2_pll_active();
++		dsi_wait_pll_hsdiv_dsi_active();
+ 
+ 	REG_FLD_MOD(DSS_CONTROL, b, 1, 1);	/* DSI_CLK_SWITCH */
+ 
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index 42ca70f..20590fb 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -152,21 +152,21 @@ struct dsi_clock_info {
+ 	unsigned long fint;
+ 	unsigned long clkin4ddr;
+ 	unsigned long clkin;
+-	unsigned long dsi1_pll_fclk;
+-	unsigned long dsi2_pll_fclk;
++	unsigned long dsi_pll_hsdiv_dispc_clk;	/* DSI1_PLL_CLK */
++	unsigned long dsi_pll_hsdiv_dsi_clk;	/* DSI2_PLL_CLK */
+ 
+ 	unsigned long lp_clk;
+ 
+ 	/* dividers */
+ 	u16 regn;
+ 	u16 regm;
+-	u16 regm3;
+-	u16 regm4;
++	u16 regm_dispc;	/* REGM3 */
++	u16 regm_dsi;	/* REGM4 */
+ 
+ 	u16 lp_clk_div;
+ 
+ 	u8 highfreq;
+-	bool use_dss2_fck;
++	bool use_sys_clk;
+ };
+ 
+ struct seq_file;
+@@ -278,7 +278,7 @@ void dsi_restore_context(void);
+ 
+ int dsi_init_display(struct omap_dss_device *display);
+ void dsi_irq_handler(void);
+-unsigned long dsi_get_dsi1_pll_rate(void);
++unsigned long dsi_get_pll_hsdiv_dispc_rate(void);
+ int dsi_pll_set_clock_div(struct dsi_clock_info *cinfo);
+ int dsi_pll_calc_clock_div_pck(bool is_tft, unsigned long req_pck,
+ 		struct dsi_clock_info *cinfo,
+@@ -289,8 +289,8 @@ void dsi_pll_uninit(void);
+ void dsi_get_overlay_fifo_thresholds(enum omap_plane plane,
+ 		u32 fifo_size, enum omap_burst_size *burst_size,
+ 		u32 *fifo_low, u32 *fifo_high);
+-void dsi_wait_dsi1_pll_active(void);
+-void dsi_wait_dsi2_pll_active(void);
++void dsi_wait_pll_hsdiv_dispc_active(void);
++void dsi_wait_pll_hsdiv_dsi_active(void);
+ #else
+ static inline int dsi_init_platform_driver(void)
+ {
+@@ -299,10 +299,10 @@ static inline int dsi_init_platform_driver(void)
+ static inline void dsi_uninit_platform_driver(void)
+ {
+ }
+-static inline void dsi_wait_dsi1_pll_active(void)
++static inline void dsi_wait_pll_hsdiv_dispc_active(void)
+ {
+ }
+-static inline void dsi_wait_dsi2_pll_active(void)
++static inline void dsi_wait_pll_hsdiv_dsi_active(void)
+ {
+ }
+ #endif
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0186-OMAP-DSS2-Remove-FB_OMAP_BOOTLOADER_INIT-support.patch b/patches/dss2_next/0186-OMAP-DSS2-Remove-FB_OMAP_BOOTLOADER_INIT-support.patch
new file mode 100644
index 000000000..dcf4c44d3
--- /dev/null
+++ b/patches/dss2_next/0186-OMAP-DSS2-Remove-FB_OMAP_BOOTLOADER_INIT-support.patch
@@ -0,0 +1,227 @@
+From b8d918b8904a4185678c3cecee2cf41d30dc648f Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Wed, 2 Mar 2011 12:29:27 +0200
+Subject: [PATCH 186/200] OMAP: DSS2: Remove FB_OMAP_BOOTLOADER_INIT support
+
+FB_OMAP_BOOTLOADER_INIT does not work, and it was only partially
+implemented for SDI.
+
+This patch removes support for FB_OMAP_BOOTLOADER_INIT to clean up the
+code and to remove any assumptions that FB_OMAP_BOOTLOADER_INIT would
+work.
+
+Proper implementation is much more complex, requiring early boot time
+register and clock handling to keep the DSS running.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c |    8 +------
+ drivers/video/omap2/dss/dss.c  |   41 +++++++++++++++------------------------
+ drivers/video/omap2/dss/dss.h  |    4 +-
+ drivers/video/omap2/dss/sdi.c  |   40 ++++++++------------------------------
+ 4 files changed, 28 insertions(+), 65 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index bcf69a4..02db5f1 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -166,7 +166,6 @@ static inline void dss_uninitialize_debugfs(void)
+ static int omap_dss_probe(struct platform_device *pdev)
+ {
+ 	struct omap_dss_board_info *pdata = pdev->dev.platform_data;
+-	int skip_init = 0;
+ 	int r;
+ 	int i;
+ 
+@@ -210,13 +209,8 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 		goto err_venc;
+ 	}
+ 
+-#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
+-	/* DISPC_CONTROL */
+-	if (omap_readl(0x48050440) & 1)	/* LCD enabled? */
+-		skip_init = 1;
+-#endif
+ 	if (cpu_is_omap34xx()) {
+-		r = sdi_init(skip_init);
++		r = sdi_init();
+ 		if (r) {
+ 			DSSERR("Failed to initialize SDI\n");
+ 			goto err_sdi;
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 5c6805b..4025a14 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -559,7 +559,7 @@ void dss_set_dac_pwrdn_bgz(bool enable)
+ 	REG_FLD_MOD(DSS_CONTROL, enable, 5, 5);	/* DAC Power-Down Control */
+ }
+ 
+-static int dss_init(bool skip_init)
++static int dss_init(void)
+ {
+ 	int r;
+ 	u32 rev;
+@@ -578,22 +578,20 @@ static int dss_init(bool skip_init)
+ 		goto fail0;
+ 	}
+ 
+-	if (!skip_init) {
+-		/* disable LCD and DIGIT output. This seems to fix the synclost
+-		 * problem that we get, if the bootloader starts the DSS and
+-		 * the kernel resets it */
+-		omap_writel(omap_readl(0x48050440) & ~0x3, 0x48050440);
+-
+-		/* We need to wait here a bit, otherwise we sometimes start to
+-		 * get synclost errors, and after that only power cycle will
+-		 * restore DSS functionality. I have no idea why this happens.
+-		 * And we have to wait _before_ resetting the DSS, but after
+-		 * enabling clocks.
+-		 */
+-		msleep(50);
+-
+-		_omap_dss_reset();
+-	}
++	/* disable LCD and DIGIT output. This seems to fix the synclost
++	 * problem that we get, if the bootloader starts the DSS and
++	 * the kernel resets it */
++	omap_writel(omap_readl(0x48050440) & ~0x3, 0x48050440);
++
++	/* We need to wait here a bit, otherwise we sometimes start to
++	 * get synclost errors, and after that only power cycle will
++	 * restore DSS functionality. I have no idea why this happens.
++	 * And we have to wait _before_ resetting the DSS, but after
++	 * enabling clocks.
++	 */
++	msleep(50);
++
++	_omap_dss_reset();
+ 
+ 	/* autoidle */
+ 	REG_FLD_MOD(DSS_SYSCONFIG, 1, 0, 0);
+@@ -954,7 +952,6 @@ void dss_debug_dump_clocks(struct seq_file *s)
+ static int omap_dsshw_probe(struct platform_device *pdev)
+ {
+ 	int r;
+-	int skip_init = 0;
+ 
+ 	dss.pdev = pdev;
+ 
+@@ -967,13 +964,7 @@ static int omap_dsshw_probe(struct platform_device *pdev)
+ 	dss.ctx_id = dss_get_ctx_id();
+ 	DSSDBG("initial ctx id %u\n", dss.ctx_id);
+ 
+-#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
+-	/* DISPC_CONTROL */
+-	if (omap_readl(0x48050440) & 1)	/* LCD enabled? */
+-		skip_init = 1;
+-#endif
+-
+-	r = dss_init(skip_init);
++	r = dss_init();
+ 	if (r) {
+ 		DSSERR("Failed to initialize DSS\n");
+ 		goto err_dss;
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index 20590fb..069fcc7 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -251,11 +251,11 @@ int dss_calc_clock_div(bool is_tft, unsigned long req_pck,
+ 
+ /* SDI */
+ #ifdef CONFIG_OMAP2_DSS_SDI
+-int sdi_init(bool skip_init);
++int sdi_init(void);
+ void sdi_exit(void);
+ int sdi_init_display(struct omap_dss_device *display);
+ #else
+-static inline int sdi_init(bool skip_init)
++static inline int sdi_init(void)
+ {
+ 	return 0;
+ }
+diff --git a/drivers/video/omap2/dss/sdi.c b/drivers/video/omap2/dss/sdi.c
+index 9f10a0d..54a53e6 100644
+--- a/drivers/video/omap2/dss/sdi.c
++++ b/drivers/video/omap2/dss/sdi.c
+@@ -30,7 +30,6 @@
+ #include "dss.h"
+ 
+ static struct {
+-	bool skip_init;
+ 	bool update_enabled;
+ 	struct regulator *vdds_sdi_reg;
+ } sdi;
+@@ -68,9 +67,7 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
+ 	if (r)
+ 		goto err1;
+ 
+-	/* In case of skip_init sdi_init has already enabled the clocks */
+-	if (!sdi.skip_init)
+-		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
++	dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 
+ 	sdi_basic_init(dssdev);
+ 
+@@ -80,14 +77,8 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
+ 	dispc_set_pol_freq(dssdev->manager->id, dssdev->panel.config,
+ 			dssdev->panel.acbi, dssdev->panel.acb);
+ 
+-	if (!sdi.skip_init) {
+-		r = dss_calc_clock_div(1, t->pixel_clock * 1000,
+-				&dss_cinfo, &dispc_cinfo);
+-	} else {
+-		r = dss_get_clock_div(&dss_cinfo);
+-		r = dispc_get_clock_div(dssdev->manager->id, &dispc_cinfo);
+-	}
+-
++	r = dss_calc_clock_div(1, t->pixel_clock * 1000,
++			&dss_cinfo, &dispc_cinfo);
+ 	if (r)
+ 		goto err2;
+ 
+@@ -116,18 +107,14 @@ int omapdss_sdi_display_enable(struct omap_dss_device *dssdev)
+ 	if (r)
+ 		goto err2;
+ 
+-	if (!sdi.skip_init) {
+-		dss_sdi_init(dssdev->phy.sdi.datapairs);
+-		r = dss_sdi_enable();
+-		if (r)
+-			goto err1;
+-		mdelay(2);
+-	}
++	dss_sdi_init(dssdev->phy.sdi.datapairs);
++	r = dss_sdi_enable();
++	if (r)
++		goto err1;
++	mdelay(2);
+ 
+ 	dssdev->manager->enable(dssdev->manager);
+ 
+-	sdi.skip_init = 0;
+-
+ 	return 0;
+ err2:
+ 	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
+@@ -173,17 +160,8 @@ int sdi_init_display(struct omap_dss_device *dssdev)
+ 	return 0;
+ }
+ 
+-int sdi_init(bool skip_init)
++int sdi_init(void)
+ {
+-	/* we store this for first display enable, then clear it */
+-	sdi.skip_init = skip_init;
+-
+-	/*
+-	 * Enable clocks already here, otherwise there would be a toggle
+-	 * of them until sdi_display_enable is called.
+-	 */
+-	if (skip_init)
+-		dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK);
+ 	return 0;
+ }
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0187-OMAP-DSS2-Remove-pdev-argument-from-dpi_init.patch b/patches/dss2_next/0187-OMAP-DSS2-Remove-pdev-argument-from-dpi_init.patch
new file mode 100644
index 000000000..eca896474
--- /dev/null
+++ b/patches/dss2_next/0187-OMAP-DSS2-Remove-pdev-argument-from-dpi_init.patch
@@ -0,0 +1,61 @@
+From 1195e81a624223ddbdc505593d45a0df68981c07 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Wed, 2 Mar 2011 12:32:48 +0200
+Subject: [PATCH 187/200] OMAP: DSS2: Remove pdev argument from dpi_init
+
+dpi_init() does not use the pdev argument for anything. Remove it.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c |    2 +-
+ drivers/video/omap2/dss/dpi.c  |    2 +-
+ drivers/video/omap2/dss/dss.h  |    4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index 02db5f1..acefe50 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -191,7 +191,7 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 		goto err_rfbi;
+ 	}
+ 
+-	r = dpi_init(pdev);
++	r = dpi_init();
+ 	if (r) {
+ 		DSSERR("Failed to initialize dpi\n");
+ 		goto err_dpi;
+diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
+index 08fed30..2d3ca4c 100644
+--- a/drivers/video/omap2/dss/dpi.c
++++ b/drivers/video/omap2/dss/dpi.c
+@@ -319,7 +319,7 @@ int dpi_init_display(struct omap_dss_device *dssdev)
+ 	return 0;
+ }
+ 
+-int dpi_init(struct platform_device *pdev)
++int dpi_init(void)
+ {
+ 	return 0;
+ }
+diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
+index 069fcc7..85d4141 100644
+--- a/drivers/video/omap2/dss/dss.h
++++ b/drivers/video/omap2/dss/dss.h
+@@ -309,11 +309,11 @@ static inline void dsi_wait_pll_hsdiv_dsi_active(void)
+ 
+ /* DPI */
+ #ifdef CONFIG_OMAP2_DSS_DPI
+-int dpi_init(struct platform_device *pdev);
++int dpi_init(void);
+ void dpi_exit(void);
+ int dpi_init_display(struct omap_dss_device *dssdev);
+ #else
+-static inline int dpi_init(struct platform_device *pdev)
++static inline int dpi_init(void)
+ {
+ 	return 0;
+ }
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0188-OMAP-DSS2-Move-DPI-SDI-init-into-DSS-plat-driver.patch b/patches/dss2_next/0188-OMAP-DSS2-Move-DPI-SDI-init-into-DSS-plat-driver.patch
new file mode 100644
index 000000000..8310393b4
--- /dev/null
+++ b/patches/dss2_next/0188-OMAP-DSS2-Move-DPI-SDI-init-into-DSS-plat-driver.patch
@@ -0,0 +1,110 @@
+From 8456bc2c7bdfe5084eb46012bb84f9aca42805a2 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Wed, 2 Mar 2011 12:47:54 +0200
+Subject: [PATCH 188/200] OMAP: DSS2: Move DPI & SDI init into DSS plat driver
+
+DPI and SDI are different from the other interfaces as they are not
+hwmods and there is not platform driver for them. They could be said to
+be a part of DSS or DISPC modules, although it's not a clear definition.
+
+This patch moves DPI and SDI initialization into DSS platform driver,
+making the code more consistent: omap_dss_probe() only initializes
+platform drivers now.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c |   19 -------------------
+ drivers/video/omap2/dss/dss.c  |   17 ++++++++++++++++-
+ 2 files changed, 16 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index acefe50..8cfedae 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -191,12 +191,6 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 		goto err_rfbi;
+ 	}
+ 
+-	r = dpi_init();
+-	if (r) {
+-		DSSERR("Failed to initialize dpi\n");
+-		goto err_dpi;
+-	}
+-
+ 	r = dispc_init_platform_driver();
+ 	if (r) {
+ 		DSSERR("Failed to initialize dispc platform driver\n");
+@@ -210,12 +204,6 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 	}
+ 
+ 	if (cpu_is_omap34xx()) {
+-		r = sdi_init();
+-		if (r) {
+-			DSSERR("Failed to initialize SDI\n");
+-			goto err_sdi;
+-		}
+-
+ 		r = dsi_init_platform_driver();
+ 		if (r) {
+ 			DSSERR("Failed to initialize DSI platform driver\n");
+@@ -255,15 +243,10 @@ err_debugfs:
+ 	if (cpu_is_omap34xx())
+ 		dsi_uninit_platform_driver();
+ err_dsi:
+-	if (cpu_is_omap34xx())
+-		sdi_exit();
+-err_sdi:
+ 	venc_uninit_platform_driver();
+ err_venc:
+ 	dispc_uninit_platform_driver();
+ err_dispc:
+-	dpi_exit();
+-err_dpi:
+ 	rfbi_uninit_platform_driver();
+ err_rfbi:
+ 	dss_uninit_platform_driver();
+@@ -281,11 +264,9 @@ static int omap_dss_remove(struct platform_device *pdev)
+ 
+ 	venc_uninit_platform_driver();
+ 	dispc_uninit_platform_driver();
+-	dpi_exit();
+ 	rfbi_uninit_platform_driver();
+ 	if (cpu_is_omap34xx()) {
+ 		dsi_uninit_platform_driver();
+-		sdi_exit();
+ 	}
+ 
+ 	dss_uninit_platform_driver();
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index 4025a14..e5da050 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -970,9 +970,24 @@ static int omap_dsshw_probe(struct platform_device *pdev)
+ 		goto err_dss;
+ 	}
+ 
++	r = dpi_init();
++	if (r) {
++		DSSERR("Failed to initialize DPI\n");
++		goto err_dpi;
++	}
++
++	r = sdi_init();
++	if (r) {
++		DSSERR("Failed to initialize SDI\n");
++		goto err_sdi;
++	}
++
+ 	dss_clk_disable_all_no_ctx();
+ 	return 0;
+-
++err_sdi:
++	dpi_exit();
++err_dpi:
++	dss_exit();
+ err_dss:
+ 	dss_clk_disable_all_no_ctx();
+ 	dss_put_clocks();
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0189-OMAP-DSS2-Remove-unneeded-cpu_is_xxx-checks.patch b/patches/dss2_next/0189-OMAP-DSS2-Remove-unneeded-cpu_is_xxx-checks.patch
new file mode 100644
index 000000000..eda429c0b
--- /dev/null
+++ b/patches/dss2_next/0189-OMAP-DSS2-Remove-unneeded-cpu_is_xxx-checks.patch
@@ -0,0 +1,61 @@
+From 9a2b0a10e19d4c0ef002ef401ddb261469f7f8f1 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Wed, 2 Mar 2011 12:48:35 +0200
+Subject: [PATCH 189/200] OMAP: DSS2: Remove unneeded cpu_is_xxx checks
+
+cpu_is_omapxxx() was used previously to select the supported interfaces.
+Now that the interfaces are platform devices, we no longer need to do
+the check when registering the driver. Thus we can just remove the
+checks.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/core.c |   18 ++++++------------
+ 1 files changed, 6 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
+index 8cfedae..c2f930b 100644
+--- a/drivers/video/omap2/dss/core.c
++++ b/drivers/video/omap2/dss/core.c
+@@ -203,12 +203,10 @@ static int omap_dss_probe(struct platform_device *pdev)
+ 		goto err_venc;
+ 	}
+ 
+-	if (cpu_is_omap34xx()) {
+-		r = dsi_init_platform_driver();
+-		if (r) {
+-			DSSERR("Failed to initialize DSI platform driver\n");
+-			goto err_dsi;
+-		}
++	r = dsi_init_platform_driver();
++	if (r) {
++		DSSERR("Failed to initialize DSI platform driver\n");
++		goto err_dsi;
+ 	}
+ 
+ 	r = dss_initialize_debugfs();
+@@ -240,8 +238,7 @@ static int omap_dss_probe(struct platform_device *pdev)
+ err_register:
+ 	dss_uninitialize_debugfs();
+ err_debugfs:
+-	if (cpu_is_omap34xx())
+-		dsi_uninit_platform_driver();
++	dsi_uninit_platform_driver();
+ err_dsi:
+ 	venc_uninit_platform_driver();
+ err_venc:
+@@ -265,10 +262,7 @@ static int omap_dss_remove(struct platform_device *pdev)
+ 	venc_uninit_platform_driver();
+ 	dispc_uninit_platform_driver();
+ 	rfbi_uninit_platform_driver();
+-	if (cpu_is_omap34xx()) {
+-		dsi_uninit_platform_driver();
+-	}
+-
++	dsi_uninit_platform_driver();
+ 	dss_uninit_platform_driver();
+ 
+ 	dss_uninit_overlays(pdev);
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0190-OMAP-DSS2-Functions-to-request-release-DSI-VCs.patch b/patches/dss2_next/0190-OMAP-DSS2-Functions-to-request-release-DSI-VCs.patch
new file mode 100644
index 000000000..7fbf3dc20
--- /dev/null
+++ b/patches/dss2_next/0190-OMAP-DSS2-Functions-to-request-release-DSI-VCs.patch
@@ -0,0 +1,164 @@
+From 999c5742794ac1d036291a653f86797cfe9d3af6 Mon Sep 17 00:00:00 2001
+From: Archit Taneja <archit@ti.com>
+Date: Wed, 2 Mar 2011 12:35:53 +0530
+Subject: [PATCH 190/200] OMAP: DSS2: Functions to request/release DSI VCs
+
+Introduce functions which request and release VC's. This will be used in panel
+drivers in their probes.
+
+omap_dsi_request_vc() takes in the pointer to the omap_dss_device, the VC_ID
+parameter which goes into the header of the DSI packets, and returns a Virtual
+channel number (or virtual channel register set) which it can use.
+
+omap_dsi_set_vc_id() takes the omap_dss_device pointer, the Virtual Channel
+number and the VC_ID that needs to be set for the specifed Virtual Channel.
+
+omap_dsi_release_vc() takes the omap_dss_device pointer and the Virtual Channel
+number that needs to be made free.
+
+Initialisation of VC parameters is done in dsi_init().
+
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ arch/arm/plat-omap/include/plat/display.h |    3 +
+ drivers/video/omap2/dss/dsi.c             |   67 ++++++++++++++++++++++++++--
+ 2 files changed, 65 insertions(+), 5 deletions(-)
+
+diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
+index 3765824..e81ca66 100644
+--- a/arch/arm/plat-omap/include/plat/display.h
++++ b/arch/arm/plat-omap/include/plat/display.h
+@@ -562,6 +562,9 @@ 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);
++int omap_dsi_request_vc(struct omap_dss_device *dssdev, int *channel);
++int omap_dsi_set_vc_id(struct omap_dss_device *dssdev, int channel, int vc_id);
++void omap_dsi_release_vc(struct omap_dss_device *dssdev, int channel);
+ 
+ int omapdss_dsi_display_enable(struct omap_dss_device *dssdev);
+ void omapdss_dsi_display_disable(struct omap_dss_device *dssdev);
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index 37ffbb6..fe3578b 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -233,6 +233,7 @@ static struct
+ 		enum dsi_vc_mode mode;
+ 		struct omap_dss_device *dssdev;
+ 		enum fifo_size fifo_size;
++		int vc_id;
+ 	} vc[4];
+ 
+ 	struct mutex lock;
+@@ -1764,8 +1765,6 @@ static void dsi_vc_initial_config(int channel)
+ 	r = FLD_MOD(r, 4, 23, 21); /* DMA_TX_REQ_NB = no dma */
+ 
+ 	dsi_write_reg(DSI_VC_CTRL(channel), r);
+-
+-	dsi.vc[channel].mode = DSI_VC_MODE_L4;
+ }
+ 
+ static int dsi_vc_config_l4(int channel)
+@@ -1972,7 +1971,7 @@ static inline void dsi_vc_write_long_header(int channel, u8 data_type,
+ 
+ 	WARN_ON(!dsi_bus_is_locked());
+ 
+-	data_id = data_type | channel << 6;
++	data_id = data_type | dsi.vc[channel].vc_id << 6;
+ 
+ 	val = FLD_VAL(data_id, 7, 0) | FLD_VAL(len, 23, 8) |
+ 		FLD_VAL(ecc, 31, 24);
+@@ -2075,7 +2074,7 @@ static int dsi_vc_send_short(int channel, u8 data_type, u16 data, u8 ecc)
+ 		return -EINVAL;
+ 	}
+ 
+-	data_id = data_type | channel << 6;
++	data_id = data_type | dsi.vc[channel].vc_id << 6;
+ 
+ 	r = (data_id << 0) | (data << 8) | (ecc << 24);
+ 
+@@ -3250,6 +3249,57 @@ int dsi_init_display(struct omap_dss_device *dssdev)
+ 	return 0;
+ }
+ 
++int omap_dsi_request_vc(struct omap_dss_device *dssdev, int *channel)
++{
++	int i;
++
++	for (i = 0; i < ARRAY_SIZE(dsi.vc); i++) {
++		if (!dsi.vc[i].dssdev) {
++			dsi.vc[i].dssdev = dssdev;
++			*channel = i;
++			return 0;
++		}
++	}
++
++	DSSERR("cannot get VC for display %s", dssdev->name);
++	return -ENOSPC;
++}
++EXPORT_SYMBOL(omap_dsi_request_vc);
++
++int omap_dsi_set_vc_id(struct omap_dss_device *dssdev, int channel, int vc_id)
++{
++	if (vc_id < 0 || vc_id > 3) {
++		DSSERR("VC ID out of range\n");
++		return -EINVAL;
++	}
++
++	if (channel < 0 || channel > 3) {
++		DSSERR("Virtual Channel out of range\n");
++		return -EINVAL;
++	}
++
++	if (dsi.vc[channel].dssdev != dssdev) {
++		DSSERR("Virtual Channel not allocated to display %s\n",
++			dssdev->name);
++		return -EINVAL;
++	}
++
++	dsi.vc[channel].vc_id = vc_id;
++
++	return 0;
++}
++EXPORT_SYMBOL(omap_dsi_set_vc_id);
++
++void omap_dsi_release_vc(struct omap_dss_device *dssdev, int channel)
++{
++	if ((channel >= 0 && channel <= 3) &&
++		dsi.vc[channel].dssdev == dssdev) {
++		dsi.vc[channel].dssdev = NULL;
++		dsi.vc[channel].vc_id = 0;
++	}
++}
++EXPORT_SYMBOL(omap_dsi_release_vc);
++
+ void dsi_wait_pll_hsdiv_dispc_active(void)
+ {
+ 	if (wait_for_bit_change(DSI_PLL_STATUS, 7, 1) != 1)
+@@ -3269,7 +3319,7 @@ void dsi_wait_pll_hsdiv_dsi_active(void)
+ static int dsi_init(struct platform_device *pdev)
+ {
+ 	u32 rev;
+-	int r;
++	int r, i;
+ 	struct resource *dsi_mem;
+ 
+ 	spin_lock_init(&dsi.errors_lock);
+@@ -3323,6 +3373,13 @@ static int dsi_init(struct platform_device *pdev)
+ 		goto err2;
+ 	}
+ 
++	/* DSI VCs initialization */
++	for (i = 0; i < ARRAY_SIZE(dsi.vc); i++) {
++		dsi.vc[i].mode = DSI_VC_MODE_L4;
++		dsi.vc[i].dssdev = NULL;
++		dsi.vc[i].vc_id = 0;
++	}
++
+ 	enable_clocks(1);
+ 
+ 	rev = dsi_read_reg(DSI_REVISION);
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0191-OMAP-DSS2-Use-request-release-calls-in-Taal-for-DSI-.patch b/patches/dss2_next/0191-OMAP-DSS2-Use-request-release-calls-in-Taal-for-DSI-.patch
new file mode 100644
index 000000000..08040b0a2
--- /dev/null
+++ b/patches/dss2_next/0191-OMAP-DSS2-Use-request-release-calls-in-Taal-for-DSI-.patch
@@ -0,0 +1,461 @@
+From 009f30de0cf29c0dc0606915bd5517abeb15cbf4 Mon Sep 17 00:00:00 2001
+From: Archit Taneja <archit@ti.com>
+Date: Tue, 1 Mar 2011 13:59:46 +0530
+Subject: [PATCH 191/200] OMAP: DSS2: Use request / release calls in Taal for DSI Virtual Channels.
+
+Taal driver used to take a hard coded Macro for Virtual Channel and the VC_ID.
+The Taal panel driver now requests for a Virtual channel through the
+omap_dsi_request_vc() call in taal_probe().
+
+The channel number returned by the request_vc() call is used for sending command
+and data to the Panel. The DSI driver automatically configures the Virtual
+Channel's source to either Video Port or L4 Slave port based on what the panel
+driver is using it for.
+
+The driver uses omap_dsi_release_vc() to free the VC specified by the panel.
+taal_remove() or when a request_vc() call fails.
+
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/displays/panel-taal.c |  123 +++++++++++++++++------------
+ drivers/video/omap2/dss/dsi.c             |    3 -
+ 2 files changed, 71 insertions(+), 55 deletions(-)
+
+diff --git a/drivers/video/omap2/displays/panel-taal.c b/drivers/video/omap2/displays/panel-taal.c
+index 61026f9..abdfdd8 100644
+--- a/drivers/video/omap2/displays/panel-taal.c
++++ b/drivers/video/omap2/displays/panel-taal.c
+@@ -218,6 +218,8 @@ struct taal_data {
+ 		u16 w;
+ 		u16 h;
+ 	} update_region;
++	int channel;
++
+ 	struct delayed_work te_timeout_work;
+ 
+ 	bool use_dsi_bl;
+@@ -257,12 +259,12 @@ static void hw_guard_wait(struct taal_data *td)
+ 	}
+ }
+ 
+-static int taal_dcs_read_1(u8 dcs_cmd, u8 *data)
++static int taal_dcs_read_1(struct taal_data *td, u8 dcs_cmd, u8 *data)
+ {
+ 	int r;
+ 	u8 buf[1];
+ 
+-	r = dsi_vc_dcs_read(TCH, dcs_cmd, buf, 1);
++	r = dsi_vc_dcs_read(td->channel, dcs_cmd, buf, 1);
+ 
+ 	if (r < 0)
+ 		return r;
+@@ -272,17 +274,17 @@ static int taal_dcs_read_1(u8 dcs_cmd, u8 *data)
+ 	return 0;
+ }
+ 
+-static int taal_dcs_write_0(u8 dcs_cmd)
++static int taal_dcs_write_0(struct taal_data *td, u8 dcs_cmd)
+ {
+-	return dsi_vc_dcs_write(TCH, &dcs_cmd, 1);
++	return dsi_vc_dcs_write(td->channel, &dcs_cmd, 1);
+ }
+ 
+-static int taal_dcs_write_1(u8 dcs_cmd, u8 param)
++static int taal_dcs_write_1(struct taal_data *td, u8 dcs_cmd, u8 param)
+ {
+ 	u8 buf[2];
+ 	buf[0] = dcs_cmd;
+ 	buf[1] = param;
+-	return dsi_vc_dcs_write(TCH, buf, 2);
++	return dsi_vc_dcs_write(td->channel, buf, 2);
+ }
+ 
+ static int taal_sleep_in(struct taal_data *td)
+@@ -294,7 +296,7 @@ static int taal_sleep_in(struct taal_data *td)
+ 	hw_guard_wait(td);
+ 
+ 	cmd = DCS_SLEEP_IN;
+-	r = dsi_vc_dcs_write_nosync(TCH, &cmd, 1);
++	r = dsi_vc_dcs_write_nosync(td->channel, &cmd, 1);
+ 	if (r)
+ 		return r;
+ 
+@@ -312,7 +314,7 @@ static int taal_sleep_out(struct taal_data *td)
+ 
+ 	hw_guard_wait(td);
+ 
+-	r = taal_dcs_write_0(DCS_SLEEP_OUT);
++	r = taal_dcs_write_0(td, DCS_SLEEP_OUT);
+ 	if (r)
+ 		return r;
+ 
+@@ -324,30 +326,30 @@ static int taal_sleep_out(struct taal_data *td)
+ 	return 0;
+ }
+ 
+-static int taal_get_id(u8 *id1, u8 *id2, u8 *id3)
++static int taal_get_id(struct taal_data *td, u8 *id1, u8 *id2, u8 *id3)
+ {
+ 	int r;
+ 
+-	r = taal_dcs_read_1(DCS_GET_ID1, id1);
++	r = taal_dcs_read_1(td, DCS_GET_ID1, id1);
+ 	if (r)
+ 		return r;
+-	r = taal_dcs_read_1(DCS_GET_ID2, id2);
++	r = taal_dcs_read_1(td, DCS_GET_ID2, id2);
+ 	if (r)
+ 		return r;
+-	r = taal_dcs_read_1(DCS_GET_ID3, id3);
++	r = taal_dcs_read_1(td, DCS_GET_ID3, id3);
+ 	if (r)
+ 		return r;
+ 
+ 	return 0;
+ }
+ 
+-static int taal_set_addr_mode(u8 rotate, bool mirror)
++static int taal_set_addr_mode(struct taal_data *td, u8 rotate, bool mirror)
+ {
+ 	int r;
+ 	u8 mode;
+ 	int b5, b6, b7;
+ 
+-	r = taal_dcs_read_1(DCS_READ_MADCTL, &mode);
++	r = taal_dcs_read_1(td, DCS_READ_MADCTL, &mode);
+ 	if (r)
+ 		return r;
+ 
+@@ -381,10 +383,11 @@ static int taal_set_addr_mode(u8 rotate, bool mirror)
+ 	mode &= ~((1<<7) | (1<<6) | (1<<5));
+ 	mode |= (b7 << 7) | (b6 << 6) | (b5 << 5);
+ 
+-	return taal_dcs_write_1(DCS_MEM_ACC_CTRL, mode);
++	return taal_dcs_write_1(td, DCS_MEM_ACC_CTRL, mode);
+ }
+ 
+-static int taal_set_update_window(u16 x, u16 y, u16 w, u16 h)
++static int taal_set_update_window(struct taal_data *td,
++		u16 x, u16 y, u16 w, u16 h)
+ {
+ 	int r;
+ 	u16 x1 = x;
+@@ -399,7 +402,7 @@ static int taal_set_update_window(u16 x, u16 y, u16 w, u16 h)
+ 	buf[3] = (x2 >> 8) & 0xff;
+ 	buf[4] = (x2 >> 0) & 0xff;
+ 
+-	r = dsi_vc_dcs_write_nosync(TCH, buf, sizeof(buf));
++	r = dsi_vc_dcs_write_nosync(td->channel, buf, sizeof(buf));
+ 	if (r)
+ 		return r;
+ 
+@@ -409,11 +412,11 @@ static int taal_set_update_window(u16 x, u16 y, u16 w, u16 h)
+ 	buf[3] = (y2 >> 8) & 0xff;
+ 	buf[4] = (y2 >> 0) & 0xff;
+ 
+-	r = dsi_vc_dcs_write_nosync(TCH, buf, sizeof(buf));
++	r = dsi_vc_dcs_write_nosync(td->channel, buf, sizeof(buf));
+ 	if (r)
+ 		return r;
+ 
+-	dsi_vc_send_bta_sync(TCH);
++	dsi_vc_send_bta_sync(td->channel);
+ 
+ 	return r;
+ }
+@@ -439,7 +442,7 @@ static int taal_bl_update_status(struct backlight_device *dev)
+ 	if (td->use_dsi_bl) {
+ 		if (td->enabled) {
+ 			dsi_bus_lock();
+-			r = taal_dcs_write_1(DCS_BRIGHTNESS, level);
++			r = taal_dcs_write_1(td, DCS_BRIGHTNESS, level);
+ 			dsi_bus_unlock();
+ 		} else {
+ 			r = 0;
+@@ -502,7 +505,7 @@ static ssize_t taal_num_errors_show(struct device *dev,
+ 
+ 	if (td->enabled) {
+ 		dsi_bus_lock();
+-		r = taal_dcs_read_1(DCS_READ_NUM_ERRORS, &errors);
++		r = taal_dcs_read_1(td, DCS_READ_NUM_ERRORS, &errors);
+ 		dsi_bus_unlock();
+ 	} else {
+ 		r = -ENODEV;
+@@ -528,7 +531,7 @@ static ssize_t taal_hw_revision_show(struct device *dev,
+ 
+ 	if (td->enabled) {
+ 		dsi_bus_lock();
+-		r = taal_get_id(&id1, &id2, &id3);
++		r = taal_get_id(td, &id1, &id2, &id3);
+ 		dsi_bus_unlock();
+ 	} else {
+ 		r = -ENODEV;
+@@ -590,7 +593,7 @@ static ssize_t store_cabc_mode(struct device *dev,
+ 	if (td->enabled) {
+ 		dsi_bus_lock();
+ 		if (!td->cabc_broken)
+-			taal_dcs_write_1(DCS_WRITE_CABC, i);
++			taal_dcs_write_1(td, DCS_WRITE_CABC, i);
+ 		dsi_bus_unlock();
+ 	}
+ 
+@@ -774,14 +777,29 @@ static int taal_probe(struct omap_dss_device *dssdev)
+ 		dev_dbg(&dssdev->dev, "Using GPIO TE\n");
+ 	}
+ 
++	r = omap_dsi_request_vc(dssdev, &td->channel);
++	if (r) {
++		dev_err(&dssdev->dev, "failed to get virtual channel\n");
++		goto err_req_vc;
++	}
++
++	r = omap_dsi_set_vc_id(dssdev, td->channel, TCH);
++	if (r) {
++		dev_err(&dssdev->dev, "failed to set VC_ID\n");
++		goto err_vc_id;
++	}
++
+ 	r = sysfs_create_group(&dssdev->dev.kobj, &taal_attr_group);
+ 	if (r) {
+ 		dev_err(&dssdev->dev, "failed to create sysfs files\n");
+-		goto err_sysfs;
++		goto err_vc_id;
+ 	}
+ 
+ 	return 0;
+-err_sysfs:
++
++err_vc_id:
++	omap_dsi_release_vc(dssdev, td->channel);
++err_req_vc:
+ 	if (panel_data->use_ext_te)
+ 		free_irq(gpio_to_irq(panel_data->ext_te_gpio), dssdev);
+ err_irq:
+@@ -808,6 +826,7 @@ static void taal_remove(struct omap_dss_device *dssdev)
+ 	dev_dbg(&dssdev->dev, "remove\n");
+ 
+ 	sysfs_remove_group(&dssdev->dev.kobj, &taal_attr_group);
++	omap_dsi_release_vc(dssdev, td->channel);
+ 
+ 	if (panel_data->use_ext_te) {
+ 		int gpio = panel_data->ext_te_gpio;
+@@ -846,13 +865,13 @@ static int taal_power_on(struct omap_dss_device *dssdev)
+ 
+ 	taal_hw_reset(dssdev);
+ 
+-	omapdss_dsi_vc_enable_hs(TCH, false);
++	omapdss_dsi_vc_enable_hs(td->channel, false);
+ 
+ 	r = taal_sleep_out(td);
+ 	if (r)
+ 		goto err;
+ 
+-	r = taal_get_id(&id1, &id2, &id3);
++	r = taal_get_id(td, &id1, &id2, &id3);
+ 	if (r)
+ 		goto err;
+ 
+@@ -861,30 +880,30 @@ static int taal_power_on(struct omap_dss_device *dssdev)
+ 		(id2 == 0x00 || id2 == 0xff || id2 == 0x81))
+ 		td->cabc_broken = true;
+ 
+-	r = taal_dcs_write_1(DCS_BRIGHTNESS, 0xff);
++	r = taal_dcs_write_1(td, DCS_BRIGHTNESS, 0xff);
+ 	if (r)
+ 		goto err;
+ 
+-	r = taal_dcs_write_1(DCS_CTRL_DISPLAY,
++	r = taal_dcs_write_1(td, DCS_CTRL_DISPLAY,
+ 			(1<<2) | (1<<5));	/* BL | BCTRL */
+ 	if (r)
+ 		goto err;
+ 
+-	r = taal_dcs_write_1(DCS_PIXEL_FORMAT, 0x7); /* 24bit/pixel */
++	r = taal_dcs_write_1(td, DCS_PIXEL_FORMAT, 0x7); /* 24bit/pixel */
+ 	if (r)
+ 		goto err;
+ 
+-	r = taal_set_addr_mode(td->rotate, td->mirror);
++	r = taal_set_addr_mode(td, td->rotate, td->mirror);
+ 	if (r)
+ 		goto err;
+ 
+ 	if (!td->cabc_broken) {
+-		r = taal_dcs_write_1(DCS_WRITE_CABC, td->cabc_mode);
++		r = taal_dcs_write_1(td, DCS_WRITE_CABC, td->cabc_mode);
+ 		if (r)
+ 			goto err;
+ 	}
+ 
+-	r = taal_dcs_write_0(DCS_DISPLAY_ON);
++	r = taal_dcs_write_0(td, DCS_DISPLAY_ON);
+ 	if (r)
+ 		goto err;
+ 
+@@ -903,7 +922,7 @@ static int taal_power_on(struct omap_dss_device *dssdev)
+ 		td->intro_printed = true;
+ 	}
+ 
+-	omapdss_dsi_vc_enable_hs(TCH, true);
++	omapdss_dsi_vc_enable_hs(td->channel, true);
+ 
+ 	return 0;
+ err:
+@@ -921,7 +940,7 @@ static void taal_power_off(struct omap_dss_device *dssdev)
+ 	struct taal_data *td = dev_get_drvdata(&dssdev->dev);
+ 	int r;
+ 
+-	r = taal_dcs_write_0(DCS_DISPLAY_OFF);
++	r = taal_dcs_write_0(td, DCS_DISPLAY_OFF);
+ 	if (!r) {
+ 		r = taal_sleep_in(td);
+ 		/* HACK: wait a bit so that the message goes through */
+@@ -1089,7 +1108,7 @@ static irqreturn_t taal_te_isr(int irq, void *data)
+ 	if (old) {
+ 		cancel_delayed_work(&td->te_timeout_work);
+ 
+-		r = omap_dsi_update(dssdev, TCH,
++		r = omap_dsi_update(dssdev, td->channel,
+ 				td->update_region.x,
+ 				td->update_region.y,
+ 				td->update_region.w,
+@@ -1139,7 +1158,7 @@ static int taal_update(struct omap_dss_device *dssdev,
+ 	if (r)
+ 		goto err;
+ 
+-	r = taal_set_update_window(x, y, w, h);
++	r = taal_set_update_window(td, x, y, w, h);
+ 	if (r)
+ 		goto err;
+ 
+@@ -1153,7 +1172,7 @@ static int taal_update(struct omap_dss_device *dssdev,
+ 				msecs_to_jiffies(250));
+ 		atomic_set(&td->do_update, 1);
+ 	} else {
+-		r = omap_dsi_update(dssdev, TCH, x, y, w, h,
++		r = omap_dsi_update(dssdev, td->channel, x, y, w, h,
+ 				taal_framedone_cb, dssdev);
+ 		if (r)
+ 			goto err;
+@@ -1191,9 +1210,9 @@ static int _taal_enable_te(struct omap_dss_device *dssdev, bool enable)
+ 	int r;
+ 
+ 	if (enable)
+-		r = taal_dcs_write_1(DCS_TEAR_ON, 0);
++		r = taal_dcs_write_1(td, DCS_TEAR_ON, 0);
+ 	else
+-		r = taal_dcs_write_0(DCS_TEAR_OFF);
++		r = taal_dcs_write_0(td, DCS_TEAR_OFF);
+ 
+ 	if (!panel_data->use_ext_te)
+ 		omapdss_dsi_enable_te(dssdev, enable);
+@@ -1263,7 +1282,7 @@ static int taal_rotate(struct omap_dss_device *dssdev, u8 rotate)
+ 	dsi_bus_lock();
+ 
+ 	if (td->enabled) {
+-		r = taal_set_addr_mode(rotate, td->mirror);
++		r = taal_set_addr_mode(td, rotate, td->mirror);
+ 		if (r)
+ 			goto err;
+ 	}
+@@ -1306,7 +1325,7 @@ static int taal_mirror(struct omap_dss_device *dssdev, bool enable)
+ 
+ 	dsi_bus_lock();
+ 	if (td->enabled) {
+-		r = taal_set_addr_mode(td->rotate, enable);
++		r = taal_set_addr_mode(td, td->rotate, enable);
+ 		if (r)
+ 			goto err;
+ 	}
+@@ -1350,13 +1369,13 @@ static int taal_run_test(struct omap_dss_device *dssdev, int test_num)
+ 
+ 	dsi_bus_lock();
+ 
+-	r = taal_dcs_read_1(DCS_GET_ID1, &id1);
++	r = taal_dcs_read_1(td, DCS_GET_ID1, &id1);
+ 	if (r)
+ 		goto err2;
+-	r = taal_dcs_read_1(DCS_GET_ID2, &id2);
++	r = taal_dcs_read_1(td, DCS_GET_ID2, &id2);
+ 	if (r)
+ 		goto err2;
+-	r = taal_dcs_read_1(DCS_GET_ID3, &id3);
++	r = taal_dcs_read_1(td, DCS_GET_ID3, &id3);
+ 	if (r)
+ 		goto err2;
+ 
+@@ -1404,9 +1423,9 @@ static int taal_memory_read(struct omap_dss_device *dssdev,
+ 	else
+ 		plen = 2;
+ 
+-	taal_set_update_window(x, y, w, h);
++	taal_set_update_window(td, x, y, w, h);
+ 
+-	r = dsi_vc_set_max_rx_packet_size(TCH, plen);
++	r = dsi_vc_set_max_rx_packet_size(td->channel, plen);
+ 	if (r)
+ 		goto err2;
+ 
+@@ -1414,7 +1433,7 @@ static int taal_memory_read(struct omap_dss_device *dssdev,
+ 		u8 dcs_cmd = first ? 0x2e : 0x3e;
+ 		first = 0;
+ 
+-		r = dsi_vc_dcs_read(TCH, dcs_cmd,
++		r = dsi_vc_dcs_read(td->channel, dcs_cmd,
+ 				buf + buf_used, size - buf_used);
+ 
+ 		if (r < 0) {
+@@ -1440,7 +1459,7 @@ static int taal_memory_read(struct omap_dss_device *dssdev,
+ 	r = buf_used;
+ 
+ err3:
+-	dsi_vc_set_max_rx_packet_size(TCH, 1);
++	dsi_vc_set_max_rx_packet_size(td->channel, 1);
+ err2:
+ 	dsi_bus_unlock();
+ err1:
+@@ -1466,7 +1485,7 @@ static void taal_esd_work(struct work_struct *work)
+ 
+ 	dsi_bus_lock();
+ 
+-	r = taal_dcs_read_1(DCS_RDDSDR, &state1);
++	r = taal_dcs_read_1(td, DCS_RDDSDR, &state1);
+ 	if (r) {
+ 		dev_err(&dssdev->dev, "failed to read Taal status\n");
+ 		goto err;
+@@ -1479,7 +1498,7 @@ static void taal_esd_work(struct work_struct *work)
+ 		goto err;
+ 	}
+ 
+-	r = taal_dcs_read_1(DCS_RDDSDR, &state2);
++	r = taal_dcs_read_1(td, DCS_RDDSDR, &state2);
+ 	if (r) {
+ 		dev_err(&dssdev->dev, "failed to read Taal status\n");
+ 		goto err;
+@@ -1495,7 +1514,7 @@ static void taal_esd_work(struct work_struct *work)
+ 	/* Self-diagnostics result is also shown on TE GPIO line. We need
+ 	 * to re-enable TE after self diagnostics */
+ 	if (td->te_enabled && panel_data->use_ext_te) {
+-		r = taal_dcs_write_1(DCS_TEAR_ON, 0);
++		r = taal_dcs_write_1(td, DCS_TEAR_ON, 0);
+ 		if (r)
+ 			goto err;
+ 	}
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index fe3578b..44b667b 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -3230,9 +3230,6 @@ int dsi_init_display(struct omap_dss_device *dssdev)
+ 	dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE |
+ 		OMAP_DSS_DISPLAY_CAP_TEAR_ELIM;
+ 
+-	dsi.vc[0].dssdev = dssdev;
+-	dsi.vc[1].dssdev = dssdev;
+-
+ 	if (dsi.vdds_dsi_reg == NULL) {
+ 		struct regulator *vdds_dsi;
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0192-HACK-OMAP-DSS2-Fix-OMAP2_DSS_USE_DSI_PLL.patch b/patches/dss2_next/0192-HACK-OMAP-DSS2-Fix-OMAP2_DSS_USE_DSI_PLL.patch
new file mode 100644
index 000000000..8de69a208
--- /dev/null
+++ b/patches/dss2_next/0192-HACK-OMAP-DSS2-Fix-OMAP2_DSS_USE_DSI_PLL.patch
@@ -0,0 +1,60 @@
+From 18bb0244828d6059afcaa808ce0e71b42f23342e Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Wed, 2 Mar 2011 10:06:48 +0200
+Subject: [PATCH 192/200] HACK: OMAP: DSS2: Fix OMAP2_DSS_USE_DSI_PLL
+
+When using OMAP2_DSS_USE_DSI_PLL, which selects DSI PLL as source clock
+for DISPC, the DSI needs the vdds_dsi regulator. Latest regulator
+changes broke this, causing the the code to not acquire the regulator
+when using OMAP2_DSS_USE_DSI_PLL.
+
+This patch acquires the vdds_dsi regulator in dsi_pll_init(), fixing the
+issue. This is is just a quick hack to get the OMAP2_DSS_USE_DSI_PLL
+option working. There shouldn't be any other downside in this solution
+than some extra lines of code.
+
+OMAP2_DSS_USE_DSI_PLL is itself a big hack, and should be removed, and
+the feature itself should be implemented in a more sane way. However,
+the solution is not trivial, and people are using DSI PLL to get more
+exact pixel clocks, so this hack is an acceptable temporary solution for
+the time being.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dsi.c |   20 ++++++++++++++++++++
+ 1 files changed, 20 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
+index 44b667b..be7694f 100644
+--- a/drivers/video/omap2/dss/dsi.c
++++ b/drivers/video/omap2/dss/dsi.c
+@@ -1119,6 +1119,26 @@ int dsi_pll_init(struct omap_dss_device *dssdev, bool enable_hsclk,
+ 
+ 	DSSDBG("PLL init\n");
+ 
++#ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
++	/*
++	 * HACK: this is just a quick hack to get the USE_DSI_PLL
++	 * option working. USE_DSI_PLL is itself a big hack, and
++	 * should be removed.
++	 */
++	if (dsi.vdds_dsi_reg == NULL) {
++		struct regulator *vdds_dsi;
++
++		vdds_dsi = regulator_get(&dsi.pdev->dev, "vdds_dsi");
++
++		if (IS_ERR(vdds_dsi)) {
++			DSSERR("can't get VDDS_DSI regulator\n");
++			return PTR_ERR(vdds_dsi);
++		}
++
++		dsi.vdds_dsi_reg = vdds_dsi;
++	}
++#endif
++
+ 	enable_clocks(1);
+ 	dsi_enable_pll_clock(1);
+ 
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0193-HACK-OMAP-DSS2-add-delay-after-enabling-clocks.patch b/patches/dss2_next/0193-HACK-OMAP-DSS2-add-delay-after-enabling-clocks.patch
new file mode 100644
index 000000000..924cdbf0f
--- /dev/null
+++ b/patches/dss2_next/0193-HACK-OMAP-DSS2-add-delay-after-enabling-clocks.patch
@@ -0,0 +1,37 @@
+From 66c8f771b04b7ede68a865cdede403991796b0f4 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Thu, 3 Mar 2011 13:16:23 +0200
+Subject: [PATCH 193/200] HACK: OMAP: DSS2: add delay after enabling clocks
+
+On omap4 the registers may not be accessible right after enabling the
+clocks. At some point this will be handled by pm_runtime, but, for the
+time begin, adding a small delay after clk_enable() should make things
+work.
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dss.c |    8 ++++++++
+ 1 files changed, 8 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
+index e5da050..2be4d03 100644
+--- a/drivers/video/omap2/dss/dss.c
++++ b/drivers/video/omap2/dss/dss.c
+@@ -850,6 +850,14 @@ void dss_clk_enable(enum dss_clock clks)
+ 
+ 	dss_clk_enable_no_ctx(clks);
+ 
++	/*
++	 * HACK: On omap4 the registers may not be accessible right after
++	 * enabling the clocks. At some point this will be handled by
++	 * pm_runtime, but for the time begin this should make things work.
++	 */
++	if (cpu_is_omap44xx() && check_ctx)
++		udelay(10);
++
+ 	if (check_ctx && cpu_is_omap34xx() && dss_need_ctx_restore())
+ 		restore_all_ctx();
+ }
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0194-OMAP-DSS2-Adding-dss_features-for-independent-core-c.patch b/patches/dss2_next/0194-OMAP-DSS2-Adding-dss_features-for-independent-core-c.patch
new file mode 100644
index 000000000..a2152f7e7
--- /dev/null
+++ b/patches/dss2_next/0194-OMAP-DSS2-Adding-dss_features-for-independent-core-c.patch
@@ -0,0 +1,55 @@
+From fe0970c930ab6474033cb27f0049f0b06dfc92f6 Mon Sep 17 00:00:00 2001
+From: Murthy, Raghuveer <raghuveer.murthy@ti.com>
+Date: Thu, 3 Mar 2011 09:27:58 -0600
+Subject: [PATCH 194/200] OMAP: DSS2: Adding dss_features for independent core clk divider
+
+In OMAP3xxx DISPC_DIVISOR register has a logical clock divisor (lcd_div)
+field. The lcd_div is common, for deciding the DISPC core functional clock
+frequency, and the final pixel clock frequency for LCD display.
+
+In OMAP4, there are 2 LCD channels, hence two divisor registers, DISPC_DIVISOR1
+and DISPC_DIVISOR2. Also, there is a third register DISPC_DIVISOR.
+
+The DISPC_DIVISOR in OMAP4 is used to configure lcd_div exclusively for core
+functional clock configuration. For pixel clock configuration of primary and
+secondary LCDs, lcd_div of DISPC_DIVISOR1 and DISPC_DIVISOR2 are used
+respectively
+
+Signed-off-by: Archit Taneja <archit@ti.com>
+Signed-off-by: Raghuveer Murthy <raghuveer.murthy@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dss_features.c |    3 ++-
+ drivers/video/omap2/dss/dss_features.h |    2 ++
+ 2 files changed, 4 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
+index ccae57b..dc170ad 100644
+--- a/drivers/video/omap2/dss/dss_features.c
++++ b/drivers/video/omap2/dss/dss_features.c
+@@ -234,7 +234,8 @@ static struct omap_dss_features omap4_dss_features = {
+ 
+ 	.has_feature	=
+ 		FEAT_GLOBAL_ALPHA | FEAT_PRE_MULT_ALPHA |
+-		FEAT_MGR_LCD2 | FEAT_GLOBAL_ALPHA_VID1,
++		FEAT_MGR_LCD2 | FEAT_GLOBAL_ALPHA_VID1 |
++		FEAT_CORE_CLK_DIV,
+ 
+ 	.num_mgrs = 3,
+ 	.num_ovls = 3,
+diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h
+index 65d6de7..569d1b2 100644
+--- a/drivers/video/omap2/dss/dss_features.h
++++ b/drivers/video/omap2/dss/dss_features.h
+@@ -36,6 +36,8 @@ enum dss_feat_id {
+ 	FEAT_LINEBUFFERSPLIT	= 1 << 8,
+ 	FEAT_ROWREPEATENABLE	= 1 << 9,
+ 	FEAT_RESIZECONF		= 1 << 10,
++	/* Independent core clk divider */
++	FEAT_CORE_CLK_DIV	= 1 << 11,
+ };
+ 
+ /* DSS register field id */
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0195-OMAP-DSS2-Renaming-register-macro-DISPC_DIVISOR-ch.patch b/patches/dss2_next/0195-OMAP-DSS2-Renaming-register-macro-DISPC_DIVISOR-ch.patch
new file mode 100644
index 000000000..b7440f84e
--- /dev/null
+++ b/patches/dss2_next/0195-OMAP-DSS2-Renaming-register-macro-DISPC_DIVISOR-ch.patch
@@ -0,0 +1,151 @@
+From e6bd5a78b573ef8ec4a9199bf414d04719ad4b7d Mon Sep 17 00:00:00 2001
+From: Murthy, Raghuveer <raghuveer.murthy@ti.com>
+Date: Thu, 3 Mar 2011 09:27:59 -0600
+Subject: [PATCH 195/200] OMAP: DSS2: Renaming register macro DISPC_DIVISOR(ch)
+
+The OMAP4 DISPC_DIVISOR1 is backward compatible to OMAP3xxx DISPC_DIVISOR.
+However DISPC_DIVISOR is also provided in OMAP4, to control DISPC_CORE_CLK
+independent of Primary and Secondary display clocks.
+
+Renamed DISPC_DIVISOR(ch) to DISPC_DIVISORo(ch), to facilitate introduction
+of DISPC_DIVISOR register, which is specific for OMAP4. OMAP4 has 3 registers
+DISPC_DIVISOR, DISPC_DIVISOR1 and DISPC_DIVISOR2.
+
+Also updated, all the usages of DISPC_DIVISOR(ch) to DISPC_DIVISORo(ch).
+Use DISPC_DIVISORo(ch) when DISPC_DIVISOR1 or DISPC_DIVISOR2 has to be
+configured
+
+OMAP4 TRM uses DISPC_DIVISORo generically to refer to DISPC_DIVISOR1 and
+DISPC_DIVISOR2
+
+Signed-off-by: Raghuveer Murthy <raghuveer.murthy@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dispc.c |   27 ++++++++++++++-------------
+ 1 files changed, 14 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index 9fb11c1..a3dff5f 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -73,7 +73,7 @@ struct dispc_reg { u16 idx; };
+ #define DISPC_TIMING_H(ch)		DISPC_REG(ch != 2 ? 0x0064 : 0x0400)
+ #define DISPC_TIMING_V(ch)		DISPC_REG(ch != 2 ? 0x0068 : 0x0404)
+ #define DISPC_POL_FREQ(ch)		DISPC_REG(ch != 2 ? 0x006C : 0x0408)
+-#define DISPC_DIVISOR(ch)		DISPC_REG(ch != 2 ? 0x0070 : 0x040C)
++#define DISPC_DIVISORo(ch)		DISPC_REG(ch != 2 ? 0x0070 : 0x040C)
+ #define DISPC_GLOBAL_ALPHA		DISPC_REG(0x0074)
+ #define DISPC_SIZE_DIG			DISPC_REG(0x0078)
+ #define DISPC_SIZE_LCD(ch)		DISPC_REG(ch != 2 ? 0x007C : 0x03CC)
+@@ -128,6 +128,7 @@ struct dispc_reg { u16 idx; };
+ 
+ #define DISPC_VID_PRELOAD(n)		DISPC_REG(0x230 + (n)*0x04)
+ 
++#define DISPC_DIVISOR			DISPC_REG(0x0804)
+ 
+ #define DISPC_IRQ_MASK_ERROR            (DISPC_IRQ_GFX_FIFO_UNDERFLOW | \
+ 					 DISPC_IRQ_OCP_ERR | \
+@@ -231,7 +232,7 @@ void dispc_save_context(void)
+ 	SR(TIMING_H(0));
+ 	SR(TIMING_V(0));
+ 	SR(POL_FREQ(0));
+-	SR(DIVISOR(0));
++	SR(DIVISORo(0));
+ 	SR(GLOBAL_ALPHA);
+ 	SR(SIZE_DIG);
+ 	SR(SIZE_LCD(0));
+@@ -243,7 +244,7 @@ void dispc_save_context(void)
+ 		SR(TIMING_H(2));
+ 		SR(TIMING_V(2));
+ 		SR(POL_FREQ(2));
+-		SR(DIVISOR(2));
++		SR(DIVISORo(2));
+ 		SR(CONFIG2);
+ 	}
+ 
+@@ -390,7 +391,7 @@ void dispc_restore_context(void)
+ 	RR(TIMING_H(0));
+ 	RR(TIMING_V(0));
+ 	RR(POL_FREQ(0));
+-	RR(DIVISOR(0));
++	RR(DIVISORo(0));
+ 	RR(GLOBAL_ALPHA);
+ 	RR(SIZE_DIG);
+ 	RR(SIZE_LCD(0));
+@@ -401,7 +402,7 @@ void dispc_restore_context(void)
+ 		RR(TIMING_H(2));
+ 		RR(TIMING_V(2));
+ 		RR(POL_FREQ(2));
+-		RR(DIVISOR(2));
++		RR(DIVISORo(2));
+ 		RR(CONFIG2);
+ 	}
+ 
+@@ -2316,7 +2317,7 @@ static void dispc_set_lcd_divisor(enum omap_channel channel, u16 lck_div,
+ 	BUG_ON(pck_div < 2);
+ 
+ 	enable_clocks(1);
+-	dispc_write_reg(DISPC_DIVISOR(channel),
++	dispc_write_reg(DISPC_DIVISORo(channel),
+ 			FLD_VAL(lck_div, 23, 16) | FLD_VAL(pck_div, 7, 0));
+ 	enable_clocks(0);
+ }
+@@ -2325,7 +2326,7 @@ static void dispc_get_lcd_divisor(enum omap_channel channel, int *lck_div,
+ 		int *pck_div)
+ {
+ 	u32 l;
+-	l = dispc_read_reg(DISPC_DIVISOR(channel));
++	l = dispc_read_reg(DISPC_DIVISORo(channel));
+ 	*lck_div = FLD_GET(l, 23, 16);
+ 	*pck_div = FLD_GET(l, 7, 0);
+ }
+@@ -2351,7 +2352,7 @@ unsigned long dispc_lclk_rate(enum omap_channel channel)
+ 	unsigned long r;
+ 	u32 l;
+ 
+-	l = dispc_read_reg(DISPC_DIVISOR(channel));
++	l = dispc_read_reg(DISPC_DIVISORo(channel));
+ 
+ 	lcd = FLD_GET(l, 23, 16);
+ 
+@@ -2366,7 +2367,7 @@ unsigned long dispc_pclk_rate(enum omap_channel channel)
+ 	unsigned long r;
+ 	u32 l;
+ 
+-	l = dispc_read_reg(DISPC_DIVISOR(channel));
++	l = dispc_read_reg(DISPC_DIVISORo(channel));
+ 
+ 	lcd = FLD_GET(l, 23, 16);
+ 	pcd = FLD_GET(l, 7, 0);
+@@ -2483,7 +2484,7 @@ void dispc_dump_regs(struct seq_file *s)
+ 	DUMPREG(DISPC_TIMING_H(0));
+ 	DUMPREG(DISPC_TIMING_V(0));
+ 	DUMPREG(DISPC_POL_FREQ(0));
+-	DUMPREG(DISPC_DIVISOR(0));
++	DUMPREG(DISPC_DIVISORo(0));
+ 	DUMPREG(DISPC_GLOBAL_ALPHA);
+ 	DUMPREG(DISPC_SIZE_DIG);
+ 	DUMPREG(DISPC_SIZE_LCD(0));
+@@ -2495,7 +2496,7 @@ void dispc_dump_regs(struct seq_file *s)
+ 		DUMPREG(DISPC_TIMING_H(2));
+ 		DUMPREG(DISPC_TIMING_V(2));
+ 		DUMPREG(DISPC_POL_FREQ(2));
+-		DUMPREG(DISPC_DIVISOR(2));
++		DUMPREG(DISPC_DIVISORo(2));
+ 		DUMPREG(DISPC_SIZE_LCD(2));
+ 	}
+ 
+@@ -2737,8 +2738,8 @@ int dispc_get_clock_div(enum omap_channel channel,
+ 
+ 	fck = dispc_fclk_rate();
+ 
+-	cinfo->lck_div = REG_GET(DISPC_DIVISOR(channel), 23, 16);
+-	cinfo->pck_div = REG_GET(DISPC_DIVISOR(channel), 7, 0);
++	cinfo->lck_div = REG_GET(DISPC_DIVISORo(channel), 23, 16);
++	cinfo->pck_div = REG_GET(DISPC_DIVISORo(channel), 7, 0);
+ 
+ 	cinfo->lck = fck / cinfo->lck_div;
+ 	cinfo->pck = cinfo->lck / cinfo->pck_div;
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0196-OMAP4-DSS2-Using-dss_features-to-set-independent-cor.patch b/patches/dss2_next/0196-OMAP4-DSS2-Using-dss_features-to-set-independent-cor.patch
new file mode 100644
index 000000000..011387e3c
--- /dev/null
+++ b/patches/dss2_next/0196-OMAP4-DSS2-Using-dss_features-to-set-independent-cor.patch
@@ -0,0 +1,93 @@
+From 4c27779500b113cf3d5d8c8393618fb88f7d257d Mon Sep 17 00:00:00 2001
+From: Murthy, Raghuveer <raghuveer.murthy@ti.com>
+Date: Thu, 3 Mar 2011 09:28:00 -0600
+Subject: [PATCH 196/200] OMAP4: DSS2: Using dss_features to set independent core clock divider
+
+Using dss_features to select independent core clock divider and setting
+it. Added the register used, to DISPC context save and restore group
+
+-----------------------------------------------------------------------
+In OMAP4, the minimum DISPC_CORE_CLK required can be expressed as:
+
+	DISPC_CORE_CLK >= max(PCLK1*HSCALE1, PCLK2*HSCALE2, ...)
+
+Where PCLKi is the pixel clock generated by MANAGERi and HSCALEi is the
+maximum horizontal downscaling done through MANAGERi
+
+Based on the usecase, core clk can be increased or decreased at runtime
+to save power. Such mechanism are not yet implemented. Hence, we set the
+core clock divisor to 1, to support maximum range of resolutions
+------------------------------------------------------------------------
+
+Signed-off-by: Raghuveer Murthy <raghuveer.murthy@ti.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dispc.c |   24 ++++++++++++++++++++++++
+ 1 files changed, 24 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index a3dff5f..dae9686 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -375,6 +375,9 @@ void dispc_save_context(void)
+ 	SR(VID_FIR_COEF_V(1, 7));
+ 
+ 	SR(VID_PRELOAD(1));
++
++	if (dss_has_feature(FEAT_CORE_CLK_DIV))
++		SR(DIVISOR);
+ }
+ 
+ void dispc_restore_context(void)
+@@ -534,6 +537,9 @@ void dispc_restore_context(void)
+ 
+ 	RR(VID_PRELOAD(1));
+ 
++	if (dss_has_feature(FEAT_CORE_CLK_DIV))
++		RR(DIVISOR);
++
+ 	/* enable last, because LCD & DIGIT enable are here */
+ 	RR(CONTROL);
+ 	if (dss_has_feature(FEAT_MGR_LCD2))
+@@ -2380,6 +2386,7 @@ unsigned long dispc_pclk_rate(enum omap_channel channel)
+ void dispc_dump_clocks(struct seq_file *s)
+ {
+ 	int lcd, pcd;
++	u32 l;
+ 	enum dss_clk_source dispc_clk_src = dss_get_dispc_clk_source();
+ 
+ 	enable_clocks(1);
+@@ -2392,6 +2399,14 @@ void dispc_dump_clocks(struct seq_file *s)
+ 
+ 	seq_printf(s, "fck\t\t%-16lu\n", dispc_fclk_rate());
+ 
++	if (dss_has_feature(FEAT_CORE_CLK_DIV)) {
++		seq_printf(s, "- DISPC-CORE-CLK -\n");
++		l = dispc_read_reg(DISPC_DIVISOR);
++		lcd = FLD_GET(l, 23, 16);
++
++		seq_printf(s, "lck\t\t%-16lulck div\t%u\n",
++				(dispc_fclk_rate()/lcd), lcd);
++	}
+ 	seq_printf(s, "- LCD1 -\n");
+ 
+ 	dispc_get_lcd_divisor(OMAP_DSS_CHANNEL_LCD, &lcd, &pcd);
+@@ -3287,6 +3302,15 @@ static void _omap_dispc_initial_config(void)
+ 	l = FLD_MOD(l, 1, 0, 0);	/* AUTOIDLE */
+ 	dispc_write_reg(DISPC_SYSCONFIG, l);
+ 
++	/* Exclusively enable DISPC_CORE_CLK and set divider to 1 */
++	if (dss_has_feature(FEAT_CORE_CLK_DIV)) {
++		l = dispc_read_reg(DISPC_DIVISOR);
++		/* Use DISPC_DIVISOR.LCD, instead of DISPC_DIVISOR1.LCD */
++		l = FLD_MOD(l, 1, 0, 0);
++		l = FLD_MOD(l, 1, 23, 16);
++		dispc_write_reg(DISPC_DIVISOR, l);
++	}
++
+ 	/* FUNCGATED */
+ 	if (dss_has_feature(FEAT_FUNCGATED))
+ 		REG_FLD_MOD(DISPC_CONFIG, 1, 9, 9);
+-- 
+1.7.1
+
diff --git a/patches/dss2_next/0197-OMAP-DSS2-fix-omap_dispc_register_isr-fail-path.patch b/patches/dss2_next/0197-OMAP-DSS2-fix-omap_dispc_register_isr-fail-path.patch
new file mode 100644
index 000000000..225166ff7
--- /dev/null
+++ b/patches/dss2_next/0197-OMAP-DSS2-fix-omap_dispc_register_isr-fail-path.patch
@@ -0,0 +1,31 @@
+From 100add4b1e36673b4f63ef817de2439fcc4309ca Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@ti.com>
+Date: Fri, 4 Mar 2011 18:19:54 +0200
+Subject: [PATCH 197/200] OMAP: DSS2: fix omap_dispc_register_isr() fail path
+
+Fix handling of error in omap_dispc_register_isr() in case there are no
+free isr slots available.
+
+Reported-by: Ben Tucker <btucker@mpcdata.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
+---
+ drivers/video/omap2/dss/dispc.c |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index dae9686..4a368c4 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -2831,6 +2831,9 @@ int omap_dispc_register_isr(omap_dispc_isr_t isr, void *arg, u32 mask)
+ 		break;
+ 	}
+ 
++	if (ret)
++		goto err;
++
+ 	_omap_dispc_set_irqs();
+ 
+ 	spin_unlock_irqrestore(&dispc.irq_lock, flags);
+-- 
+1.7.1
+
diff --git a/patches/sakoman/2.6.38/0017-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch b/patches/dss2_next/0198-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
similarity index 57%
rename from patches/sakoman/2.6.38/0017-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
rename to patches/dss2_next/0198-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
index dcf292172..8a54c9d01 100644
--- a/patches/sakoman/2.6.38/0017-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
+++ b/patches/dss2_next/0198-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
@@ -1,56 +1,53 @@
-From bad2baa348f515bea9f529faa411509f18cb20c4 Mon Sep 17 00:00:00 2001
+From 3a5e42f833a32f188a25dc6f0803c80a226ffc00 Mon Sep 17 00:00:00 2001
 From: Steve Sakoman <steve@sakoman.com>
-Date: Thu, 17 Dec 2009 15:05:30 -0800
-Subject: [PATCH 17/31] OMAP: DSS2: Add support for LG Philips LB035Q02 panel
+Date: Sat, 5 Mar 2011 07:58:38 -0600
+Subject: [PATCH 198/200] OMAP: DSS2: Add support for LG Philips LB035Q02 panel
 
-Merged-to-2.6.37-git10-by: Robert Nelson <robertcnelson@gmail.com>
+This patch adds support for the Gumstix Palo35 expansion board
+which utilizes the 320 x 240 pixel LG.Philips LB035Q02 LCD Panel
+
+Signed-off-by: Steve Sakoman <steve@sakoman.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
 ---
- drivers/video/omap2/displays/Kconfig               |   12 +
- drivers/video/omap2/displays/Makefile              |    2 +
- .../omap2/displays/panel-lgphilips-lb035q02.c      |  219 ++++++++++++++++++++
- 3 files changed, 233 insertions(+), 0 deletions(-)
+ drivers/video/omap2/displays/Kconfig               |    6 +
+ drivers/video/omap2/displays/Makefile              |    1 +
+ .../omap2/displays/panel-lgphilips-lb035q02.c      |  279 ++++++++++++++++++++
+ 3 files changed, 286 insertions(+), 0 deletions(-)
  create mode 100644 drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
 
 diff --git a/drivers/video/omap2/displays/Kconfig b/drivers/video/omap2/displays/Kconfig
-index 940cab3..797e2f8 100644
+index 940cab3..d18ad6b 100644
 --- a/drivers/video/omap2/displays/Kconfig
 +++ b/drivers/video/omap2/displays/Kconfig
-@@ -9,6 +9,18 @@ config PANEL_GENERIC_DPI
+@@ -9,6 +9,12 @@ config PANEL_GENERIC_DPI
  	  Supports LCD Panel used in TI SDP3430 and EVM boards,
  	  OMAP3517 EVM boards and CM-T35.
  
 +config PANEL_LGPHILIPS_LB035Q02
 +	tristate "LG.Philips LB035Q02 LCD Panel"
-+	depends on OMAP2_DSS
++	depends on OMAP2_DSS && SPI
 +	help
-+	  LCD Panel used on Overo Palo35
-+
-+config PANEL_SAMSUNG_LTE430WQ_F0C
-+        tristate "Samsung LTE430WQ-F0C LCD Panel"
-+        depends on OMAP2_DSS
-+        help
-+          LCD Panel used on Overo Palo43
++	  LCD Panel used on the Gumstix Overo Palo35
 +
  config PANEL_SHARP_LS037V7DW01
          tristate "Sharp LS037V7DW01 LCD Panel"
          depends on OMAP2_DSS
 diff --git a/drivers/video/omap2/displays/Makefile b/drivers/video/omap2/displays/Makefile
-index 861f025..bd566e5 100644
+index 861f025..0f601ab 100644
 --- a/drivers/video/omap2/displays/Makefile
 +++ b/drivers/video/omap2/displays/Makefile
-@@ -1,4 +1,6 @@
+@@ -1,4 +1,5 @@
  obj-$(CONFIG_PANEL_GENERIC_DPI) += panel-generic-dpi.o
 +obj-$(CONFIG_PANEL_LGPHILIPS_LB035Q02) += panel-lgphilips-lb035q02.o
-+obj-$(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) += panel-samsung-lte430wq-f0c.o
  obj-$(CONFIG_PANEL_SHARP_LS037V7DW01) += panel-sharp-ls037v7dw01.o
  obj-$(CONFIG_PANEL_NEC_NL8048HL11_01B) += panel-nec-nl8048hl11-01b.o
  
 diff --git a/drivers/video/omap2/displays/panel-lgphilips-lb035q02.c b/drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
 new file mode 100644
-index 0000000..17e748b
+index 0000000..271324d
 --- /dev/null
 +++ b/drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
-@@ -0,0 +1,219 @@
+@@ -0,0 +1,279 @@
 +/*
 + * LCD panel driver for LG.Philips LB035Q02
 + *
@@ -72,10 +69,13 @@ index 0000000..17e748b
 +#include <linux/module.h>
 +#include <linux/delay.h>
 +#include <linux/spi/spi.h>
++#include <linux/mutex.h>
 +
 +#include <plat/display.h>
 +
-+static struct spi_device	*spidev;
++struct lb035q02_data {
++	struct mutex lock;
++};
 +
 +static struct omap_video_timings lb035q02_timings = {
 +	.x_res = 320,
@@ -92,124 +92,130 @@ index 0000000..17e748b
 +	.vbp		= 18,
 +};
 +
-+static int lb035q02_panel_probe(struct omap_dss_device *dssdev)
++static int lb035q02_panel_power_on(struct omap_dss_device *dssdev)
 +{
-+	dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
-+		OMAP_DSS_LCD_IHS;
-+	dssdev->panel.timings = lb035q02_timings;
++	int r;
++
++	if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
++		return 0;
++
++	r = omapdss_dpi_display_enable(dssdev);
++	if (r)
++		goto err0;
++
++	if (dssdev->platform_enable) {
++		r = dssdev->platform_enable(dssdev);
++		if (r)
++			goto err1;
++	}
 +
 +	return 0;
++err1:
++	omapdss_dpi_display_disable(dssdev);
++err0:
++	return r;
 +}
 +
-+static void lb035q02_panel_remove(struct omap_dss_device *dssdev)
++static void lb035q02_panel_power_off(struct omap_dss_device *dssdev)
 +{
++	if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
++		return;
++
++	if (dssdev->platform_disable)
++		dssdev->platform_disable(dssdev);
++
++	omapdss_dpi_display_disable(dssdev);
 +}
 +
-+static int lb035q02_write_reg(u8 reg, u16 val)
++static int lb035q02_panel_probe(struct omap_dss_device *dssdev)
 +{
-+	struct spi_message msg;
-+	struct spi_transfer index_xfer = {
-+		.len		= 3,
-+		.cs_change	= 1,
-+	};
-+	struct spi_transfer value_xfer = {
-+		.len		= 3,
-+	};
-+	u8	buffer[16];
++	struct lb035q02_data *ld;
++	int r;
 +
-+	spi_message_init(&msg);
++	dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
++		OMAP_DSS_LCD_IHS;
++	dssdev->panel.timings = lb035q02_timings;
 +
-+	/* register index */
-+	buffer[0] = 0x70;
-+	buffer[1] = 0x00;
-+	buffer[2] = reg & 0x7f;
-+	index_xfer.tx_buf = buffer;
-+	spi_message_add_tail(&index_xfer, &msg);
++	ld = kzalloc(sizeof(*ld), GFP_KERNEL);
++	if (!ld) {
++		r = -ENOMEM;
++		goto err;
++	}
++	mutex_init(&ld->lock);
++	dev_set_drvdata(&dssdev->dev, ld);
++	return 0;
++err:
++	return r;
++}
 +
-+	/* register value */
-+	buffer[4] = 0x72;
-+	buffer[5] = val >> 8;
-+	buffer[6] = val;
-+	value_xfer.tx_buf = buffer + 4;
-+	spi_message_add_tail(&value_xfer, &msg);
++static void lb035q02_panel_remove(struct omap_dss_device *dssdev)
++{
++	struct lb035q02_data *ld = dev_get_drvdata(&dssdev->dev);
 +
-+	return spi_sync(spidev, &msg);
++	kfree(ld);
 +}
 +
 +static int lb035q02_panel_enable(struct omap_dss_device *dssdev)
 +{
++	struct lb035q02_data *ld = dev_get_drvdata(&dssdev->dev);
 +	int r;
 +
-+	r = omapdss_dpi_display_enable(dssdev);
-+	if (r)
-+		goto err0;
-+
-+	if (dssdev->platform_enable) {
-+		r = dssdev->platform_enable(dssdev);
-+		if (r)
-+			goto err1;
-+	}
-+
-+	/* Panel init sequence from page 28 of the spec */
-+	lb035q02_write_reg(0x01, 0x6300);
-+	lb035q02_write_reg(0x02, 0x0200);
-+	lb035q02_write_reg(0x03, 0x0177);
-+	lb035q02_write_reg(0x04, 0x04c7);
-+	lb035q02_write_reg(0x05, 0xffc0);
-+	lb035q02_write_reg(0x06, 0xe806);
-+	lb035q02_write_reg(0x0a, 0x4008);
-+	lb035q02_write_reg(0x0b, 0x0000);
-+	lb035q02_write_reg(0x0d, 0x0030);
-+	lb035q02_write_reg(0x0e, 0x2800);
-+	lb035q02_write_reg(0x0f, 0x0000);
-+	lb035q02_write_reg(0x16, 0x9f80);
-+	lb035q02_write_reg(0x17, 0x0a0f);
-+	lb035q02_write_reg(0x1e, 0x00c1);
-+	lb035q02_write_reg(0x30, 0x0300);
-+	lb035q02_write_reg(0x31, 0x0007);
-+	lb035q02_write_reg(0x32, 0x0000);
-+	lb035q02_write_reg(0x33, 0x0000);
-+	lb035q02_write_reg(0x34, 0x0707);
-+	lb035q02_write_reg(0x35, 0x0004);
-+	lb035q02_write_reg(0x36, 0x0302);
-+	lb035q02_write_reg(0x37, 0x0202);
-+	lb035q02_write_reg(0x3a, 0x0a0d);
-+	lb035q02_write_reg(0x3b, 0x0806);
++	mutex_lock(&ld->lock);
 +
++	r = lb035q02_panel_power_on(dssdev);
++	if (r)
++		goto err;
 +	dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
++
++	mutex_unlock(&ld->lock);
 +	return 0;
-+err1:
-+	omapdss_dpi_display_disable(dssdev);
-+err0:
++err:
++	mutex_unlock(&ld->lock);
 +	return r;
 +}
 +
 +static void lb035q02_panel_disable(struct omap_dss_device *dssdev)
 +{
-+	if (dssdev->platform_disable)
-+		dssdev->platform_disable(dssdev);
++	struct lb035q02_data *ld = dev_get_drvdata(&dssdev->dev);
 +
++	mutex_lock(&ld->lock);
++
++	lb035q02_panel_power_off(dssdev);
 +	dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
++
++	mutex_unlock(&ld->lock);
 +}
 +
 +static int lb035q02_panel_suspend(struct omap_dss_device *dssdev)
 +{
-+	lb035q02_panel_disable(dssdev);
++	struct lb035q02_data *ld = dev_get_drvdata(&dssdev->dev);
++
++	mutex_lock(&ld->lock);
++
++	lb035q02_panel_power_off(dssdev);
 +	dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
++
++	mutex_unlock(&ld->lock);
 +	return 0;
 +}
 +
 +static int lb035q02_panel_resume(struct omap_dss_device *dssdev)
 +{
++	struct lb035q02_data *ld = dev_get_drvdata(&dssdev->dev);
 +	int r;
 +
-+	r = lb035q02_panel_enable(dssdev);
-+	if (r)
-+		return r;
++	mutex_lock(&ld->lock);
 +
++	r = lb035q02_panel_power_on(dssdev);
++	if (r)
++		goto err;
 +	dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
 +
++	mutex_unlock(&ld->lock);
 +	return 0;
++err:
++	mutex_unlock(&ld->lock);
++	return r;
 +}
 +
 +static struct omap_dss_driver lb035q02_driver = {
@@ -227,14 +233,75 @@ index 0000000..17e748b
 +	},
 +};
 +
++static int lb035q02_write_reg(struct spi_device *spi, u8 reg, u16 val)
++{
++	struct spi_message msg;
++	struct spi_transfer index_xfer = {
++		.len		= 3,
++		.cs_change	= 1,
++	};
++	struct spi_transfer value_xfer = {
++		.len		= 3,
++	};
++	u8	buffer[16];
++
++	spi_message_init(&msg);
++
++	/* register index */
++	buffer[0] = 0x70;
++	buffer[1] = 0x00;
++	buffer[2] = reg & 0x7f;
++	index_xfer.tx_buf = buffer;
++	spi_message_add_tail(&index_xfer, &msg);
++
++	/* register value */
++	buffer[4] = 0x72;
++	buffer[5] = val >> 8;
++	buffer[6] = val;
++	value_xfer.tx_buf = buffer + 4;
++	spi_message_add_tail(&value_xfer, &msg);
++
++	return spi_sync(spi, &msg);
++}
++
++static void init_lb035q02_panel(struct spi_device *spi)
++{
++	/* Init sequence from page 28 of the lb035q02 spec */
++	lb035q02_write_reg(spi, 0x01, 0x6300);
++	lb035q02_write_reg(spi, 0x02, 0x0200);
++	lb035q02_write_reg(spi, 0x03, 0x0177);
++	lb035q02_write_reg(spi, 0x04, 0x04c7);
++	lb035q02_write_reg(spi, 0x05, 0xffc0);
++	lb035q02_write_reg(spi, 0x06, 0xe806);
++	lb035q02_write_reg(spi, 0x0a, 0x4008);
++	lb035q02_write_reg(spi, 0x0b, 0x0000);
++	lb035q02_write_reg(spi, 0x0d, 0x0030);
++	lb035q02_write_reg(spi, 0x0e, 0x2800);
++	lb035q02_write_reg(spi, 0x0f, 0x0000);
++	lb035q02_write_reg(spi, 0x16, 0x9f80);
++	lb035q02_write_reg(spi, 0x17, 0x0a0f);
++	lb035q02_write_reg(spi, 0x1e, 0x00c1);
++	lb035q02_write_reg(spi, 0x30, 0x0300);
++	lb035q02_write_reg(spi, 0x31, 0x0007);
++	lb035q02_write_reg(spi, 0x32, 0x0000);
++	lb035q02_write_reg(spi, 0x33, 0x0000);
++	lb035q02_write_reg(spi, 0x34, 0x0707);
++	lb035q02_write_reg(spi, 0x35, 0x0004);
++	lb035q02_write_reg(spi, 0x36, 0x0302);
++	lb035q02_write_reg(spi, 0x37, 0x0202);
++	lb035q02_write_reg(spi, 0x3a, 0x0a0d);
++	lb035q02_write_reg(spi, 0x3b, 0x0806);
++}
++
 +static int __devinit lb035q02_panel_spi_probe(struct spi_device *spi)
 +{
-+	spidev = spi;
-+	return 0;
++	init_lb035q02_panel(spi);
++	return omap_dss_register_driver(&lb035q02_driver);
 +}
 +
 +static int __devexit lb035q02_panel_spi_remove(struct spi_device *spi)
 +{
++	omap_dss_unregister_driver(&lb035q02_driver);
 +	return 0;
 +}
 +
@@ -244,27 +311,17 @@ index 0000000..17e748b
 +		.owner	= THIS_MODULE,
 +	},
 +	.probe		= lb035q02_panel_spi_probe,
-+	.remove		= __devexit_p (lb035q02_panel_spi_remove),
++	.remove		= __devexit_p(lb035q02_panel_spi_remove),
 +};
 +
 +static int __init lb035q02_panel_drv_init(void)
 +{
-+	int r;
-+	r = spi_register_driver(&lb035q02_spi_driver);
-+	if (r != 0)
-+		pr_err("lgphilips_lb035q02: Unable to register SPI driver: %d\n", r);
-+
-+	r = omap_dss_register_driver(&lb035q02_driver);
-+	if (r != 0)
-+		pr_err("lgphilips_lb035q02: Unable to register panel driver: %d\n", r);
-+
-+	return r;
++	return spi_register_driver(&lb035q02_spi_driver);
 +}
 +
 +static void __exit lb035q02_panel_drv_exit(void)
 +{
 +	spi_unregister_driver(&lb035q02_spi_driver);
-+	omap_dss_unregister_driver(&lb035q02_driver);
 +}
 +
 +module_init(lb035q02_panel_drv_init);
diff --git a/patches/sakoman/2.6.38/0018-OMAP-DSS2-Add-DSS2-support-for-Overo.patch b/patches/dss2_next/0199-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
similarity index 75%
rename from patches/sakoman/2.6.38/0018-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
rename to patches/dss2_next/0199-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
index 3f67e60f4..11d32e4d2 100644
--- a/patches/sakoman/2.6.38/0018-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
+++ b/patches/dss2_next/0199-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
@@ -1,15 +1,19 @@
-From f842d27c44ead80a6fd6c3cc7b14d61fe8456cf8 Mon Sep 17 00:00:00 2001
+From 43eeb83ed994a477091988721fa0ef4b787b103a Mon Sep 17 00:00:00 2001
 From: Steve Sakoman <steve@sakoman.com>
-Date: Fri, 18 Dec 2009 06:39:24 -0800
-Subject: [PATCH 18/31] OMAP: DSS2: Add DSS2 support for Overo
+Date: Sat, 5 Mar 2011 07:58:39 -0600
+Subject: [PATCH 199/200] OMAP: DSS2: Add DSS2 support for Overo
 
-Merged to 2.6.38 by: Robert Nelson <robertcnelson@gmail.com>
+This patch adds DSS2 support for DVI, S-video, the 480x272 Samsung
+LTE430WQ-F0C panel, and the 320x240 LG.Philips LB035Q02 panel.
+
+Signed-off-by: Steve Sakoman <steve@sakoman.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
 ---
- arch/arm/mach-omap2/board-overo.c |  236 +++++++++++++++++++++++++++++++-----
- 1 files changed, 203 insertions(+), 33 deletions(-)
+ arch/arm/mach-omap2/board-overo.c |  237 +++++++++++++++++++++++++++++++------
+ 1 files changed, 200 insertions(+), 37 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
-index 17f066a..a435cc4 100644
+index 60f8db3..d621ee8 100644
 --- a/arch/arm/mach-omap2/board-overo.c
 +++ b/arch/arm/mach-omap2/board-overo.c
 @@ -28,6 +28,7 @@
@@ -20,11 +24,12 @@ index 17f066a..a435cc4 100644
  
  #include <linux/mtd/mtd.h>
  #include <linux/mtd/nand.h>
-@@ -41,10 +42,13 @@
+@@ -41,10 +42,14 @@
  
  #include <plat/board.h>
  #include <plat/common.h>
 +#include <plat/display.h>
++#include <plat/panel-generic-dpi.h>
  #include <mach/gpio.h>
  #include <plat/gpmc.h>
  #include <mach/hardware.h>
@@ -34,7 +39,7 @@ index 17f066a..a435cc4 100644
  #include <plat/usb.h>
  
  #include "mux.h"
-@@ -68,8 +72,6 @@
+@@ -68,8 +73,6 @@
  #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
  	defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
  
@@ -43,7 +48,7 @@ index 17f066a..a435cc4 100644
  #include <linux/spi/ads7846.h>
  
  static struct omap2_mcspi_device_config ads7846_mcspi_config = {
-@@ -94,18 +96,6 @@ static struct ads7846_platform_data ads7846_config = {
+@@ -94,18 +97,6 @@ static struct ads7846_platform_data ads7846_config = {
  	.keep_vref_on		= 1,
  };
  
@@ -62,7 +67,7 @@ index 17f066a..a435cc4 100644
  static void __init overo_ads7846_init(void)
  {
  	if ((gpio_request(OVERO_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) &&
-@@ -115,9 +105,6 @@ static void __init overo_ads7846_init(void)
+@@ -115,9 +106,6 @@ static void __init overo_ads7846_init(void)
  		printk(KERN_ERR "could not obtain gpio for ADS7846_PENDOWN\n");
  		return;
  	}
@@ -72,7 +77,7 @@ index 17f066a..a435cc4 100644
  }
  
  #else
-@@ -233,6 +220,139 @@ static inline void __init overo_init_smsc911x(void)
+@@ -233,6 +221,137 @@ static inline void __init overo_init_smsc911x(void)
  static inline void __init overo_init_smsc911x(void) { return; }
  #endif
  
@@ -116,13 +121,18 @@ index 17f066a..a435cc4 100644
 +	dvi_enabled = 0;
 +}
 +
++static struct panel_generic_dpi_data dvi_panel = {
++	.name			= "generic",
++	.platform_enable	= overo_panel_enable_dvi,
++	.platform_disable	= overo_panel_disable_dvi,
++};
++
 +static struct omap_dss_device overo_dvi_device = {
-+	.type			= OMAP_DISPLAY_TYPE_DPI,
 +	.name			= "dvi",
-+	.driver_name		= "generic_panel",
++	.type			= OMAP_DISPLAY_TYPE_DPI,
++	.driver_name		= "generic_dpi_panel",
++	.data			= &dvi_panel,
 +	.phy.dpi.data_lines	= 24,
-+	.platform_enable	= overo_panel_enable_dvi,
-+	.platform_disable	= overo_panel_disable_dvi,
 +};
 +
 +static struct omap_dss_device overo_tv_device = {
@@ -152,24 +162,26 @@ index 17f066a..a435cc4 100644
 +	lcd_enabled = 0;
 +}
 +
-+#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \
-+	defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE)
-+static struct omap_dss_device overo_lcd35_device = {
-+	.type			= OMAP_DISPLAY_TYPE_DPI,
-+	.name			= "lcd35",
-+	.driver_name		= "lgphilips_lb035q02_panel",
-+	.phy.dpi.data_lines	= 24,
++static struct panel_generic_dpi_data lcd43_panel = {
++	.name			= "samsung_lte430wq_f0c",
 +	.platform_enable	= overo_panel_enable_lcd,
 +	.platform_disable	= overo_panel_disable_lcd,
 +};
-+#endif
 +
-+#if defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) || \
-+	defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C_MODULE)
 +static struct omap_dss_device overo_lcd43_device = {
-+	.type			= OMAP_DISPLAY_TYPE_DPI,
 +	.name			= "lcd43",
-+	.driver_name		= "samsung_lte_panel",
++	.type			= OMAP_DISPLAY_TYPE_DPI,
++	.driver_name		= "generic_dpi_panel",
++	.data			= &lcd43_panel,
++	.phy.dpi.data_lines	= 24,
++};
++
++#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \
++	defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE)
++static struct omap_dss_device overo_lcd35_device = {
++	.type			= OMAP_DISPLAY_TYPE_DPI,
++	.name			= "lcd35",
++	.driver_name		= "lgphilips_lb035q02_panel",
 +	.phy.dpi.data_lines	= 24,
 +	.platform_enable	= overo_panel_enable_lcd,
 +	.platform_disable	= overo_panel_disable_lcd,
@@ -183,10 +195,7 @@ index 17f066a..a435cc4 100644
 +	defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE)
 +	&overo_lcd35_device,
 +#endif
-+#if defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) || \
-+	defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C_MODULE)
 +	&overo_lcd43_device,
-+#endif
 +};
 +
 +static struct omap_dss_board_info overo_dss_data = {
@@ -195,24 +204,18 @@ index 17f066a..a435cc4 100644
 +	.default_device	= &overo_dvi_device,
 +};
 +
-+static struct platform_device overo_dss_device = {
-+	.name          = "omapdss",
-+	.id            = -1,
-+	.dev            = {
-+		.platform_data = &overo_dss_data,
-+	},
-+};
-+
 +static struct regulator_consumer_supply overo_vdda_dac_supply =
-+	REGULATOR_SUPPLY("vdda_dac", "omapdss");
++	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
 +
-+static struct regulator_consumer_supply overo_vdds_dsi_supply =
-+	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
++static struct regulator_consumer_supply overo_vdds_dsi_supply[] = {
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi1"),
++};
 +
  static struct mtd_partition overo_nand_partitions[] = {
  	{
  		.name           = "xloader",
-@@ -358,6 +478,37 @@ static struct regulator_init_data overo_vmmc1 = {
+@@ -358,6 +477,35 @@ static struct regulator_init_data overo_vmmc1 = {
  	.consumer_supplies	= &overo_vmmc1_supply,
  };
  
@@ -241,25 +244,23 @@ index 17f066a..a435cc4 100644
 +		.valid_ops_mask		= REGULATOR_CHANGE_MODE
 +					| REGULATOR_CHANGE_STATUS,
 +	},
-+	.num_consumer_supplies	= 1,
-+	.consumer_supplies	= &overo_vdds_dsi_supply,
++	.num_consumer_supplies	= ARRAY_SIZE(overo_vdds_dsi_supply),
++	.consumer_supplies	= overo_vdds_dsi_supply,
 +};
 +
-+/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */
-+
- static struct twl4030_codec_audio_data overo_audio_data = {
- 	.audio_mclk = 26000000,
- };
-@@ -367,8 +518,6 @@ static struct twl4030_codec_data overo_codec_data = {
+ static struct twl4030_codec_audio_data overo_audio_data;
+ 
+ static struct twl4030_codec_data overo_codec_data = {
+@@ -365,8 +513,6 @@ static struct twl4030_codec_data overo_codec_data = {
  	.audio = &overo_audio_data,
  };
  
 -/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */
 -
- static struct twl4030_madc_platform_data overo_madc_data = {
- 	.irq_line	= 1,
- };
-@@ -381,6 +530,8 @@ static struct twl4030_platform_data overo_twldata = {
+ static struct twl4030_platform_data overo_twldata = {
+ 	.irq_base	= TWL4030_IRQ_BASE,
+ 	.irq_end	= TWL4030_IRQ_END,
+@@ -374,6 +520,8 @@ static struct twl4030_platform_data overo_twldata = {
  	.usb		= &overo_usb_data,
  	.codec		= &overo_codec_data,
  	.vmmc1		= &overo_vmmc1,
@@ -268,7 +269,7 @@ index 17f066a..a435cc4 100644
  };
  
  static struct i2c_board_info __initdata overo_i2c_boardinfo[] = {
-@@ -401,23 +552,41 @@ static int __init overo_i2c_init(void)
+@@ -394,18 +542,38 @@ static int __init overo_i2c_init(void)
  	return 0;
  }
  
@@ -315,23 +316,29 @@ index 17f066a..a435cc4 100644
 +	return 0;
 +}
  
- static void __init overo_init_irq(void)
+ static void __init overo_init_early(void)
  {
--	omap_board_config = overo_config;
--	omap_board_config_size = ARRAY_SIZE(overo_config);
- 	omap2_init_common_infrastructure();
- 	omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
+@@ -414,10 +582,6 @@ static void __init overo_init_early(void)
  				  mt46h32m32lf6_sdrc_params);
-@@ -425,7 +594,7 @@ static void __init overo_init_irq(void)
  }
  
- static struct platform_device *overo_devices[] __initdata = {
+-static struct platform_device *overo_devices[] __initdata = {
 -	&overo_lcd_device,
-+	&overo_dss_device,
- };
- 
+-};
+-
  static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
-@@ -460,8 +629,9 @@ static void __init overo_init(void)
+ 	.port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
+ 	.port_mode[1] = EHCI_HCD_OMAP_MODE_PHY,
+@@ -444,16 +608,15 @@ static struct omap_musb_board_data musb_board_data = {
+ static void __init overo_init(void)
+ {
+ 	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+-	omap_board_config = overo_config;
+-	omap_board_config_size = ARRAY_SIZE(overo_config);
+ 	overo_i2c_init();
+-	platform_add_devices(overo_devices, ARRAY_SIZE(overo_devices));
++	omap_display_init(&overo_dss_data);
+ 	omap_serial_init();
  	overo_flash_init();
  	usb_musb_init(&musb_board_data);
  	usb_ehci_init(&ehci_pdata);
diff --git a/patches/dss2_next/0200-cleanup-after-rebase.patch b/patches/dss2_next/0200-cleanup-after-rebase.patch
new file mode 100644
index 000000000..63f46c891
--- /dev/null
+++ b/patches/dss2_next/0200-cleanup-after-rebase.patch
@@ -0,0 +1,198 @@
+From 1737913022787f7c707765a52b2679346d778c30 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Sun, 13 Mar 2011 10:26:26 -0500
+Subject: [PATCH 200/200] cleanup after rebase
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/mach-omap2/board-3430sdp.c        |    9 +------
+ arch/arm/mach-omap2/mailbox.c              |   10 +++-----
+ arch/arm/mach-omap2/omap_hwmod_2430_data.c |    4 +++
+ arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |    7 ++++++
+ arch/arm/mach-omap2/omap_hwmod_44xx_data.c |    1 +
+ arch/arm/mach-omap2/smartreflex.c          |   33 +++++++++++++++------------
+ arch/arm/mach-omap2/timer-gp.c             |    1 +
+ 7 files changed, 37 insertions(+), 28 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
+index 91e3514..75814ae 100644
+--- a/arch/arm/mach-omap2/board-3430sdp.c
++++ b/arch/arm/mach-omap2/board-3430sdp.c
+@@ -531,13 +531,8 @@ static struct regulator_init_data sdp3430_vdac = {
+ 		.valid_ops_mask		= REGULATOR_CHANGE_MODE
+ 					| REGULATOR_CHANGE_STATUS,
+ 	},
+-	.num_consumer_supplies	= 1,
+-	.consumer_supplies	= &sdp3430_vdda_dac_supply,
+-};
+-
+-/* VPLL2 for digital video outputs */
+-static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
+-	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
++	.num_consumer_supplies	= ARRAY_SIZE(sdp3430_vdda_dac_supplies),
++	.consumer_supplies	= sdp3430_vdda_dac_supplies,
+ };
+ 
+ static struct regulator_init_data sdp3430_vpll2 = {
+diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c
+index 86d564a..6e15e3d 100644
+--- a/arch/arm/mach-omap2/mailbox.c
++++ b/arch/arm/mach-omap2/mailbox.c
+@@ -138,12 +138,10 @@ static void omap2_mbox_disable_irq(struct omap_mbox *mbox,
+ 		omap_mbox_type_t irq)
+ {
+ 	struct omap_mbox2_priv *p = mbox->priv;
+-	u32 bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit;
+-
+-	if (!cpu_is_omap44xx())
+-		bit = mbox_read_reg(p->irqdisable) & ~bit;
+-
+-	mbox_write_reg(bit, p->irqdisable);
++	u32 l, bit = (irq == IRQ_TX) ? p->notfull_bit : p->newmsg_bit;
++	l = mbox_read_reg(p->irqdisable);
++	l &= ~bit;
++	mbox_write_reg(l, p->irqdisable);
+ }
+ 
+ static void omap2_mbox_ack_irq(struct omap_mbox *mbox,
+diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+index e31fd11..1c89404 100644
+--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
++++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+@@ -2720,6 +2720,10 @@ static __initdata struct omap_hwmod *omap2430_hwmods[] = {
+ 	&omap2430_mcspi1_hwmod,
+ 	&omap2430_mcspi2_hwmod,
+ 	&omap2430_mcspi3_hwmod,
++
++	/* usbotg class*/
++	&omap2430_usbhsotg_hwmod,
++
+ 	NULL,
+ };
+ 
+diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+index 5bb5c87..086d727 100644
+--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
++++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+@@ -3645,6 +3645,13 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
+ 	&omap34xx_mcspi2,
+ 	&omap34xx_mcspi3,
+ 	&omap34xx_mcspi4,
++
++	/* usbotg class */
++	&omap3xxx_usbhsotg_hwmod,
++
++	/* usbotg for am35x */
++	&am35xx_usbhsotg_hwmod,
++
+ 	NULL,
+ };
+ 
+diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+index ee60325..7b72316 100644
+--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
++++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+@@ -25,6 +25,7 @@
+ #include <plat/gpio.h>
+ #include <plat/dma.h>
+ #include <plat/mcspi.h>
++#include <plat/mcbsp.h>
+ #include <plat/mmc.h>
+ 
+ #include "omap_hwmod_common_data.h"
+diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c
+index 1a777e3..95ac336 100644
+--- a/arch/arm/mach-omap2/smartreflex.c
++++ b/arch/arm/mach-omap2/smartreflex.c
+@@ -282,7 +282,6 @@ error:
+ 		dev_err(&sr_info->pdev->dev, "%s: ERROR in registering"
+ 			"interrupt handler. Smartreflex will"
+ 			"not function as desired\n", __func__);
+-		kfree(name);
+ 		kfree(sr_info);
+ 		return ret;
+ }
+@@ -880,7 +879,7 @@ static int __init omap_sr_probe(struct platform_device *pdev)
+ 		ret = sr_late_init(sr_info);
+ 		if (ret) {
+ 			pr_warning("%s: Error in SR late init\n", __func__);
+-			goto err_release_region;
++			return ret;
+ 		}
+ 	}
+ 
+@@ -891,17 +890,14 @@ static int __init omap_sr_probe(struct platform_device *pdev)
+ 	 * not try to create rest of the debugfs entries.
+ 	 */
+ 	vdd_dbg_dir = omap_voltage_get_dbgdir(sr_info->voltdm);
+-	if (!vdd_dbg_dir) {
+-		ret = -EINVAL;
+-		goto err_release_region;
+-	}
++	if (!vdd_dbg_dir)
++		return -EINVAL;
+ 
+ 	dbg_dir = debugfs_create_dir("smartreflex", vdd_dbg_dir);
+ 	if (IS_ERR(dbg_dir)) {
+ 		dev_err(&pdev->dev, "%s: Unable to create debugfs directory\n",
+ 			__func__);
+-		ret = PTR_ERR(dbg_dir);
+-		goto err_release_region;
++		return PTR_ERR(dbg_dir);
+ 	}
+ 
+ 	(void) debugfs_create_file("autocomp", S_IRUGO | S_IWUSR, dbg_dir,
+@@ -917,8 +913,7 @@ static int __init omap_sr_probe(struct platform_device *pdev)
+ 	if (IS_ERR(nvalue_dir)) {
+ 		dev_err(&pdev->dev, "%s: Unable to create debugfs directory"
+ 			"for n-values\n", __func__);
+-		ret = PTR_ERR(nvalue_dir);
+-		goto err_release_region;
++		return PTR_ERR(nvalue_dir);
+ 	}
+ 
+ 	omap_voltage_get_volttable(sr_info->voltdm, &volt_data);
+@@ -927,15 +922,23 @@ static int __init omap_sr_probe(struct platform_device *pdev)
+ 			" corresponding vdd vdd_%s. Cannot create debugfs"
+ 			"entries for n-values\n",
+ 			__func__, sr_info->voltdm->name);
+-		ret = -ENODATA;
+-		goto err_release_region;
++		return -ENODATA;
+ 	}
+ 
+ 	for (i = 0; i < sr_info->nvalue_count; i++) {
+-		char name[NVALUE_NAME_LEN + 1];
++		char *name;
++		char volt_name[32];
++
++		name = kzalloc(NVALUE_NAME_LEN + 1, GFP_KERNEL);
++		if (!name) {
++			dev_err(&pdev->dev, "%s: Unable to allocate memory"
++				" for n-value directory name\n",  __func__);
++			return -ENOMEM;
++		}
+ 
+-		snprintf(name, sizeof(name), "volt_%d",
+-			 volt_data[i].volt_nominal);
++		strcpy(name, "volt_");
++		sprintf(volt_name, "%d", volt_data[i].volt_nominal);
++		strcat(name, volt_name);
+ 		(void) debugfs_create_x32(name, S_IRUGO | S_IWUSR, nvalue_dir,
+ 				&(sr_info->nvalue_table[i].nvalue));
+ 	}
+diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
+index 1887dd0..3b9cf85 100644
+--- a/arch/arm/mach-omap2/timer-gp.c
++++ b/arch/arm/mach-omap2/timer-gp.c
+@@ -39,6 +39,7 @@
+ #include <asm/mach/time.h>
+ #include <plat/dmtimer.h>
+ #include <asm/localtimer.h>
++#include <asm/sched_clock.h>
+ #include <plat/common.h>
+ #include <plat/omap_hwmod.h>
+ 
+-- 
+1.7.1
+
diff --git a/patches/rcn/beagle-zippy-dont-load-i2c-on-boards-with-nozippy.diff b/patches/rcn/beagle-zippy-dont-load-i2c-on-boards-with-nozippy.diff
deleted file mode 100644
index b808e8f82..000000000
--- a/patches/rcn/beagle-zippy-dont-load-i2c-on-boards-with-nozippy.diff
+++ /dev/null
@@ -1,20 +0,0 @@
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 4a27e1e..2c35946 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -448,8 +448,15 @@ static int __init omap3_beagle_i2c_init(void)
- {
- 	omap_register_i2c_bus(1, 2600, beagle_i2c1_boardinfo,
- 			ARRAY_SIZE(beagle_i2c1_boardinfo));
-+	if(!strcmp(expansionboard_name, "zippy2") || !strcmp(expansionboard_name, "zippy")) 
-+	{
- 	omap_register_i2c_bus(2, 400,  beagle_i2c2_boardinfo,
- 			ARRAY_SIZE(beagle_i2c2_boardinfo));
-+	}
-+	else
-+	{
-+	omap_register_i2c_bus(2, 400, NULL, 0);
-+	}
- 	/* Bus 3 is attached to the DVI port where devices like the pico DLP
- 	 * projector don't work reliably with 400kHz */
- 	omap_register_i2c_bus(3, 100, NULL, 0);
diff --git a/patches/sakoman/2.6.35/0016-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch b/patches/sakoman/2.6.35/0016-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
index 1bcecf3fb..4fc5890f3 100644
--- a/patches/sakoman/2.6.35/0016-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
+++ b/patches/sakoman/2.6.35/0016-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
@@ -3,11 +3,42 @@ From: Steve Sakoman <steve@sakoman.com>
 Date: Tue, 23 Feb 2010 14:40:27 -0800
 Subject: [PATCH 16/31] OMAP: DSS2: Add support for Samsung LTE430WQ-F0C panel
 
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
 ---
+ drivers/video/omap2/displays/Kconfig               |    6 +
+ drivers/video/omap2/displays/Makefile              |    1 +
  .../omap2/displays/panel-samsung-lte430wq-f0c.c    |  129 ++++++++++++++++++++
- 1 files changed, 129 insertions(+), 0 deletions(-)
+ 3 files changed, 136 insertions(+), 0 deletions(-)
  create mode 100644 drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c
 
+diff --git a/drivers/video/omap2/displays/Kconfig b/drivers/video/omap2/displays/Kconfig
+index d18ad6b..e249a40 100644
+--- a/drivers/video/omap2/displays/Kconfig
++++ b/drivers/video/omap2/displays/Kconfig
+@@ -15,6 +15,12 @@ config PANEL_LGPHILIPS_LB035Q02
+ 	help
+ 	  LCD Panel used on the Gumstix Overo Palo35
+ 
++config PANEL_SAMSUNG_LTE430WQ_F0C
++        tristate "Samsung LTE430WQ-F0C LCD Panel"
++        depends on OMAP2_DSS
++        help
++          LCD Panel used on Overo Palo43
++
+ config PANEL_SHARP_LS037V7DW01
+         tristate "Sharp LS037V7DW01 LCD Panel"
+         depends on OMAP2_DSS
+diff --git a/drivers/video/omap2/displays/Makefile b/drivers/video/omap2/displays/Makefile
+index 0f601ab..bd566e5 100644
+--- a/drivers/video/omap2/displays/Makefile
++++ b/drivers/video/omap2/displays/Makefile
+@@ -1,5 +1,6 @@
+ obj-$(CONFIG_PANEL_GENERIC_DPI) += panel-generic-dpi.o
+ obj-$(CONFIG_PANEL_LGPHILIPS_LB035Q02) += panel-lgphilips-lb035q02.o
++obj-$(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) += panel-samsung-lte430wq-f0c.o
+ obj-$(CONFIG_PANEL_SHARP_LS037V7DW01) += panel-sharp-ls037v7dw01.o
+ obj-$(CONFIG_PANEL_NEC_NL8048HL11_01B) += panel-nec-nl8048hl11-01b.o
+ 
 diff --git a/drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c b/drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c
 new file mode 100644
 index 0000000..7a7a5ff
diff --git a/patches/sakoman/2.6.35/0028-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch b/patches/sakoman/2.6.39/0028-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
similarity index 79%
rename from patches/sakoman/2.6.35/0028-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
rename to patches/sakoman/2.6.39/0028-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
index 7920c6c9d..a7a943f6e 100644
--- a/patches/sakoman/2.6.35/0028-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
+++ b/patches/sakoman/2.6.39/0028-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
@@ -3,25 +3,26 @@ From: Steve Sakoman <steve@sakoman.com>
 Date: Mon, 10 May 2010 20:44:09 -0700
 Subject: [PATCH 28/31] OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
 
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
 ---
  drivers/video/omap2/dss/dpi.c |    7 ++++++-
  1 files changed, 6 insertions(+), 1 deletions(-)
 
 diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
-index 960e977..23047b6 100644
+index 2d3ca4c..8703ea6 100644
 --- a/drivers/video/omap2/dss/dpi.c
 +++ b/drivers/video/omap2/dss/dpi.c
-@@ -177,7 +177,12 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
+@@ -181,7 +181,12 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
  
  #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
- 	dss_clk_enable(DSS_CLK_FCK2);
+ 	dss_clk_enable(DSS_CLK_SYSCK);
 -	r = dsi_pll_init(dssdev, 0, 1);
 +
 +	if (cpu_is_omap3630())
 +		r = dsi_pll_init(dssdev, 1, 1);
 +	else
 +		r = dsi_pll_init(dssdev, 0, 1);
-+
++	
  	if (r)
  		goto err3;
  #endif
diff --git a/patches/wip_to_be_pushed/0001-omap3-beagle-convert-printk-KERN_INFO-to-pr_info.patch b/patches/wip_to_be_pushed/0001-omap3-beagle-convert-printk-KERN_INFO-to-pr_info.patch
new file mode 100644
index 000000000..479ead83c
--- /dev/null
+++ b/patches/wip_to_be_pushed/0001-omap3-beagle-convert-printk-KERN_INFO-to-pr_info.patch
@@ -0,0 +1,73 @@
+From b839727d3a684fccd9a754a74af1302b30db2c89 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Sun, 13 Mar 2011 11:42:51 -0500
+Subject: [PATCH 1/9] omap3: beagle: convert printk(KERN_INFO to pr_info(
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |   16 ++++++++--------
+ 1 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index e663c43..c8f99e7 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -109,23 +109,23 @@ static void __init omap3_beagle_init_rev(void)
+ 
+ 	switch (beagle_rev) {
+ 	case 7:
+-		printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
++		pr_info("OMAP3 Beagle Rev: Ax/Bx\n");
+ 		omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
+ 		break;
+ 	case 6:
+-		printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
++		pr_info("OMAP3 Beagle Rev: C1/C2/C3\n");
+ 		omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
+ 		break;
+ 	case 5:
+-		printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
++		pr_info("OMAP3 Beagle Rev: C4\n");
+ 		omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
+ 		break;
+ 	case 0:
+-		printk(KERN_INFO "OMAP3 Beagle Rev: xM\n");
++		pr_info("OMAP3 Beagle Rev: xM\n");
+ 		omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
+ 		break;
+ 	default:
+-		printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
++		pr_info("OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
+ 		omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
+ 	}
+ 
+@@ -562,7 +562,7 @@ static void __init omap3beagle_flash_init(void)
+ 		ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
+ 
+ 		if ((ret & 0xC00) == 0x800) {
+-			printk(KERN_INFO "Found NAND on CS%d\n", cs);
++			pr_info("Found NAND on CS%d\n", cs);
+ 			if (nandcs > GPMC_CS_NUM)
+ 				nandcs = cs;
+ 		}
+@@ -570,7 +570,7 @@ static void __init omap3beagle_flash_init(void)
+ 	}
+ 
+ 	if (nandcs > GPMC_CS_NUM) {
+-		printk(KERN_INFO "NAND: Unable to find configuration "
++		pr_info("NAND: Unable to find configuration "
+ 				 "in GPMC\n ");
+ 		return;
+ 	}
+@@ -578,7 +578,7 @@ static void __init omap3beagle_flash_init(void)
+ 	if (nandcs < GPMC_CS_NUM) {
+ 		omap3beagle_nand_data.cs = nandcs;
+ 
+-		printk(KERN_INFO "Registering NAND on CS%d\n", nandcs);
++		pr_info("Registering NAND on CS%d\n", nandcs);
+ 		if (gpmc_nand_init(&omap3beagle_nand_data) < 0)
+ 			printk(KERN_ERR "Unable to register NAND device\n");
+ 	}
+-- 
+1.7.1
+
diff --git a/patches/wip_to_be_pushed/0002-omap3-beagle-convert-printk-KERN_ERR-to-pr_err.patch b/patches/wip_to_be_pushed/0002-omap3-beagle-convert-printk-KERN_ERR-to-pr_err.patch
new file mode 100644
index 000000000..58e10c938
--- /dev/null
+++ b/patches/wip_to_be_pushed/0002-omap3-beagle-convert-printk-KERN_ERR-to-pr_err.patch
@@ -0,0 +1,44 @@
+From ce2dbb09e6bb77abab7831fdb6f60ea18e585302 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Sun, 13 Mar 2011 11:44:30 -0500
+Subject: [PATCH 2/9] omap3: beagle: convert printk(KERN_ERR to pr_err(
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index c8f99e7..8672dc9 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -136,7 +136,7 @@ fail2:
+ fail1:
+ 	gpio_free(171);
+ fail0:
+-	printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
++	pr_err("Unable to get revision detection GPIO pins\n");
+ 	omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
+ 
+ 	return;
+@@ -245,7 +245,7 @@ static void __init beagle_display_init(void)
+ 
+ 	r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset");
+ 	if (r < 0) {
+-		printk(KERN_ERR "Unable to get DVI reset GPIO\n");
++		pr_err("Unable to get DVI reset GPIO\n");
+ 		return;
+ 	}
+ 
+@@ -580,7 +580,7 @@ static void __init omap3beagle_flash_init(void)
+ 
+ 		pr_info("Registering NAND on CS%d\n", nandcs);
+ 		if (gpmc_nand_init(&omap3beagle_nand_data) < 0)
+-			printk(KERN_ERR "Unable to register NAND device\n");
++			pr_err("Unable to register NAND device\n");
+ 	}
+ }
+ 
+-- 
+1.7.1
+
diff --git a/patches/beagle/0001-omap-Beagle-detect-new-xM-revision-B.patch b/patches/wip_to_be_pushed/0003-omap3-beagle-detect-new-xM-revision-B.patch
similarity index 70%
rename from patches/beagle/0001-omap-Beagle-detect-new-xM-revision-B.patch
rename to patches/wip_to_be_pushed/0003-omap3-beagle-detect-new-xM-revision-B.patch
index 11f290dad..4ef174768 100644
--- a/patches/beagle/0001-omap-Beagle-detect-new-xM-revision-B.patch
+++ b/patches/wip_to_be_pushed/0003-omap3-beagle-detect-new-xM-revision-B.patch
@@ -1,7 +1,7 @@
-From ce3e77cc8891839100460bd08bb90cc9111d467b Mon Sep 17 00:00:00 2001
+From b26500db37933d9f97d599dcaa4a02a477df6e9b Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 9 Nov 2010 08:34:55 -0600
-Subject: [PATCH] omap: Beagle: detect new xM revision B
+Date: Sun, 13 Mar 2011 11:47:37 -0500
+Subject: [PATCH 3/9] omap3: beagle: detect new xM revision B
 
 The xM B uses a DM3730 ES1.1 over the ES1.0 on xM A's, no other board changes.
 
@@ -11,10 +11,10 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
  1 files changed, 7 insertions(+), 2 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 77fb404..e981bb8 100644
+index 8672dc9..ebb90dc 100644
 --- a/arch/arm/mach-omap2/board-omap3beagle.c
 +++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -61,7 +61,8 @@
+@@ -62,7 +62,8 @@
   *	AXBX	= GPIO173, GPIO172, GPIO171: 1 1 1
   *	C1_3	= GPIO173, GPIO172, GPIO171: 1 1 0
   *	C4	= GPIO173, GPIO172, GPIO171: 1 0 1
@@ -24,16 +24,16 @@ index 77fb404..e981bb8 100644
   */
  enum {
  	OMAP3BEAGLE_BOARD_UNKN = 0,
-@@ -120,7 +121,11 @@ static void __init omap3_beagle_init_rev(void)
+@@ -121,7 +122,11 @@ static void __init omap3_beagle_init_rev(void)
  		omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
  		break;
  	case 0:
--		printk(KERN_INFO "OMAP3 Beagle Rev: xM\n");
-+		printk(KERN_INFO "OMAP3 Beagle Rev: xM A\n");
+-		pr_info("OMAP3 Beagle Rev: xM\n");
++		pr_info("OMAP3 Beagle Rev: xM A\n");
 +		omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
 +		break;
 +	case 1:
-+		printk(KERN_INFO "OMAP3 Beagle Rev: xM B\n");
++		pr_info("OMAP3 Beagle Rev: xM B\n");
  		omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
  		break;
  	default:
diff --git a/patches/beagle/0001-beagleboard-hack-in-support-from-xM-rev-C-from-Koen.patch b/patches/wip_to_be_pushed/0004-omap3-beagle-detect-new-xM-revision-C.patch
similarity index 57%
rename from patches/beagle/0001-beagleboard-hack-in-support-from-xM-rev-C-from-Koen.patch
rename to patches/wip_to_be_pushed/0004-omap3-beagle-detect-new-xM-revision-C.patch
index 7551e317a..6707cebb7 100644
--- a/patches/beagle/0001-beagleboard-hack-in-support-from-xM-rev-C-from-Koen.patch
+++ b/patches/wip_to_be_pushed/0004-omap3-beagle-detect-new-xM-revision-C.patch
@@ -1,18 +1,18 @@
-From adf37815f1cf5130ec093ab79ad278b84c8ebdaa Mon Sep 17 00:00:00 2001
+From 63adecd24f76bcb0afad0d8ee82b45ad79dc6c24 Mon Sep 17 00:00:00 2001
 From: Robert Nelson <robertcnelson@gmail.com>
-Date: Thu, 10 Mar 2011 11:42:09 -0600
-Subject: [PATCH] beagleboard: hack in support from xM rev C from Koen
+Date: Sun, 13 Mar 2011 12:00:29 -0500
+Subject: [PATCH 4/9] omap3: beagle: detect new xM revision C
 
 Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
 ---
- arch/arm/mach-omap2/board-omap3beagle.c |   18 ++++++++++++------
- 1 files changed, 12 insertions(+), 6 deletions(-)
+ arch/arm/mach-omap2/board-omap3beagle.c |   18 ++++++++++++++----
+ 1 files changed, 14 insertions(+), 4 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 02c4b0a..22a1483 100644
+index ebb90dc..4dc7685 100644
 --- a/arch/arm/mach-omap2/board-omap3beagle.c
 +++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -61,6 +61,7 @@
+@@ -64,6 +64,7 @@
   *	C4	= GPIO173, GPIO172, GPIO171: 1 0 1
   *	XMA	= GPIO173, GPIO172, GPIO171: 0 0 0
   *	XMB	= GPIO173, GPIO172, GPIO171: 0 0 1
@@ -20,7 +20,7 @@ index 02c4b0a..22a1483 100644
   */
  enum {
  	OMAP3BEAGLE_BOARD_UNKN = 0,
-@@ -68,6 +69,7 @@ enum {
+@@ -71,6 +72,7 @@ enum {
  	OMAP3BEAGLE_BOARD_C1_3,
  	OMAP3BEAGLE_BOARD_C4,
  	OMAP3BEAGLE_BOARD_XM,
@@ -28,55 +28,54 @@ index 02c4b0a..22a1483 100644
  };
  
  static u8 omap3_beagle_version;
-@@ -126,9 +128,13 @@ static void __init omap3_beagle_init_rev(void)
- 		printk(KERN_INFO "OMAP3 Beagle Rev: xM B\n");
+@@ -129,6 +131,10 @@ static void __init omap3_beagle_init_rev(void)
+ 		pr_info("OMAP3 Beagle Rev: xM B\n");
  		omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
  		break;
 +	case 2:
-+		printk(KERN_INFO "OMAP3 Beagle Rev: xM C\n");
++		pr_info("OMAP3 Beagle Rev: xM C\n");
 +		omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
 +		break;
  	default:
--		printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
--		omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
-+		printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd, assuming xM C or newer\n", beagle_rev);
-+		omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
- 	}
- 
- 	return;
-@@ -285,7 +291,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
+ 		pr_info("OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
+ 		omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
+@@ -283,7 +289,8 @@ static int beagle_twl_gpio_setup(struct device *dev,
  {
  	int r;
  
 -	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC) {
++	if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) ||
++		(omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)) {
  		mmc[0].gpio_wp = -EINVAL;
  	} else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) ||
  		(omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) {
-@@ -305,7 +311,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
+@@ -303,7 +310,8 @@ static int beagle_twl_gpio_setup(struct device *dev,
  	/* REVISIT: need ehci-omap hooks for external VBUS
  	 * power switch and overcurrent detect
  	 */
 -	if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) {
-+	if (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM && omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XMC) {
++	if ((omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) &&
++		(omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XMC)) {
  		r = gpio_request(gpio + 1, "EHCI_nOC");
  		if (!r) {
  			r = gpio_direction_input(gpio + 1);
-@@ -327,7 +333,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
+@@ -325,7 +333,8 @@ static int beagle_twl_gpio_setup(struct device *dev,
  		gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
  
  	/* DVI reset GPIO is different between beagle revisions */
 -	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC)
++	if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) ||
++		(omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC))
  		beagle_dvi_device.reset_gpio = 129;
  	else
  		beagle_dvi_device.reset_gpio = 170;
-@@ -341,7 +347,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
+@@ -339,7 +348,8 @@ static int beagle_twl_gpio_setup(struct device *dev,
  	 * P7/P8 revisions(prototype): Camera EN
  	 * A2+ revisions (production): LDO (supplies DVI, serial, led blocks)
  	 */
 -	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
-+	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC) {
++	if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) ||
++		(omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC)) {
  		r = gpio_request(gpio + 1, "nDVI_PWR_EN");
  		if (!r) {
  			r = gpio_direction_output(gpio + 1, 0);
diff --git a/patches/wip_to_be_pushed/0005-omap3-beagle-if-rev-unknown-assume-xM-revision-C.patch b/patches/wip_to_be_pushed/0005-omap3-beagle-if-rev-unknown-assume-xM-revision-C.patch
new file mode 100644
index 000000000..8d8024e56
--- /dev/null
+++ b/patches/wip_to_be_pushed/0005-omap3-beagle-if-rev-unknown-assume-xM-revision-C.patch
@@ -0,0 +1,28 @@
+From d5737713dd61498b8a678c852e1879d5b32bea1e Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Sun, 13 Mar 2011 12:02:55 -0500
+Subject: [PATCH 5/9] omap3: beagle: if rev unknown, assume xM revision C
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 4dc7685..76d2ac2 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -136,8 +136,8 @@ static void __init omap3_beagle_init_rev(void)
+ 		omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
+ 		break;
+ 	default:
+-		pr_info("OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
+-		omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
++		pr_info("OMAP3 Beagle Rev: unknown %hd, assuming xM C or newer\n", beagle_rev);
++		omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
+ 	}
+ 
+ 	return;
+-- 
+1.7.1
+
diff --git a/patches/wip_to_be_pushed/0006-omap3-beagle-add-i2c-bus2.patch b/patches/wip_to_be_pushed/0006-omap3-beagle-add-i2c-bus2.patch
new file mode 100644
index 000000000..878468878
--- /dev/null
+++ b/patches/wip_to_be_pushed/0006-omap3-beagle-add-i2c-bus2.patch
@@ -0,0 +1,25 @@
+From 0482a7a15976ef562fd54e527dc09c51977b3981 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Sun, 13 Mar 2011 12:29:53 -0500
+Subject: [PATCH 6/9] omap3: beagle: add i2c bus2
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |    1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 76d2ac2..d5c46a5 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -487,6 +487,7 @@ static int __init omap3_beagle_i2c_init(void)
+ {
+ 	omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
+ 			ARRAY_SIZE(beagle_i2c_boardinfo));
++	omap_register_i2c_bus(2, 400, NULL, 0);
+ 	/* Bus 3 is attached to the DVI port where devices like the pico DLP
+ 	 * projector don't work reliably with 400kHz */
+ 	omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
+-- 
+1.7.1
+
diff --git a/patches/wip_to_be_pushed/0007-omap3-beagle-add-initial-expansionboard-infrastructu.patch b/patches/wip_to_be_pushed/0007-omap3-beagle-add-initial-expansionboard-infrastructu.patch
new file mode 100644
index 000000000..fa38de36e
--- /dev/null
+++ b/patches/wip_to_be_pushed/0007-omap3-beagle-add-initial-expansionboard-infrastructu.patch
@@ -0,0 +1,51 @@
+From 07bd8fe1526f2df2eda42221d0680c9267a7c1c4 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Sun, 13 Mar 2011 12:26:41 -0500
+Subject: [PATCH 7/9] omap3: beagle: add initial expansionboard infrastructure
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |   13 +++++++++++++
+ 1 files changed, 13 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index d5c46a5..cda6813 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -153,6 +153,8 @@ fail0:
+ 	return;
+ }
+ 
++char expansionboard_name[16];
++
+ static struct mtd_partition omap3beagle_nand_partitions[] = {
+ 	/* All the partition sizes are listed in terms of NAND block size */
+ 	{
+@@ -670,6 +672,15 @@ static void __init beagle_opp_init(void)
+ 	return;
+ }
+ 
++static int __init expansionboard_setup(char *str)
++{
++	if (!str)
++		return -EINVAL;
++	strncpy(expansionboard_name, str, 16);
++	pr_info("Beagle expansionboard: %s\n", expansionboard_name);
++	return 0;
++}
++
+ static void __init omap3_beagle_init(void)
+ {
+ 	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+@@ -697,6 +708,8 @@ static void __init omap3_beagle_init(void)
+ 	beagle_opp_init();
+ }
+ 
++early_param("buddy", expansionboard_setup);
++
+ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
+ 	/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
+ 	.boot_params	= 0x80000100,
+-- 
+1.7.1
+
diff --git a/patches/angstrom/0003-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board-fixup.patch b/patches/wip_to_be_pushed/0008-omap3-beagle-expansionboard-zippy.patch
similarity index 53%
rename from patches/angstrom/0003-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board-fixup.patch
rename to patches/wip_to_be_pushed/0008-omap3-beagle-expansionboard-zippy.patch
index 284b30da2..bf6ce142f 100644
--- a/patches/angstrom/0003-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board-fixup.patch
+++ b/patches/wip_to_be_pushed/0008-omap3-beagle-expansionboard-zippy.patch
@@ -1,5 +1,15 @@
+From 97fb928b63108bf1f79974c344be0c62bea71182 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Sun, 13 Mar 2011 12:34:29 -0500
+Subject: [PATCH 8/9] omap3: beagle: expansionboard zippy
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |   78 +++++++++++++++++++++++++++++++
+ 1 files changed, 78 insertions(+), 0 deletions(-)
+
 diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index e20fc76..c9c5bbb 100644
+index cda6813..feacc5e 100644
 --- a/arch/arm/mach-omap2/board-omap3beagle.c
 +++ b/arch/arm/mach-omap2/board-omap3beagle.c
 @@ -21,6 +21,7 @@
@@ -9,10 +19,10 @@ index e20fc76..c9c5bbb 100644
 +#include <linux/irq.h>
  #include <linux/input.h>
  #include <linux/gpio_keys.h>
+ #include <linux/opp.h>
+@@ -155,6 +156,48 @@ fail0:
  
-@@ -53,6 +54,49 @@
- 
- #define NAND_BLOCK_SIZE		SZ_128K
+ char expansionboard_name[16];
  
 +#if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE)
 +
@@ -26,7 +36,7 @@ index e20fc76..c9c5bbb 100644
 +	.single_channel	= 1,	/* 0: slave, 1: master */
 +};
 +
-+static struct spi_board_info omap3beagle_spi_board_info[] __initdata = {
++static struct spi_board_info omap3beagle_zippy_spi_board_info[] __initdata = {
 +	{
 +		.modalias		= "enc28j60",
 +		.bus_num		= 4,
@@ -41,60 +51,48 @@ index e20fc76..c9c5bbb 100644
 +	if ((gpio_request(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, "ENC28J60_IRQ") == 0) &&
 +	    (gpio_direction_input(OMAP3BEAGLE_GPIO_ENC28J60_IRQ) == 0)) {
 +		gpio_export(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, 0);
-+		omap3beagle_spi_board_info[0].irq	= OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
-+		set_irq_type(omap3beagle_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
++		omap3beagle_zippy_spi_board_info[0].irq = OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
++		set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
 +	} else {
-+		printk(KERN_ERR "could not obtain gpio for ENC28J60_IRQ\n");
++		pr_err("could not obtain gpio for ENC28J60_IRQ\n");
 +		return;
 +	}
 +
-+	spi_register_board_info(omap3beagle_spi_board_info,
-+			ARRAY_SIZE(omap3beagle_spi_board_info));
++	spi_register_board_info(omap3beagle_zippy_spi_board_info,
++			ARRAY_SIZE(omap3beagle_zippy_spi_board_info));
 +}
 +
 +#else
 +static inline void __init omap3beagle_enc28j60_init(void) { return; }
 +#endif
-+
 +
  static struct mtd_partition omap3beagle_nand_partitions[] = {
  	/* All the partition sizes are listed in terms of NAND block size */
  	{
-@@ -186,6 +230,14 @@ static struct omap2_hsmmc_info mmc[] = {
- 		.wires		= 8,
+@@ -273,6 +316,12 @@ static struct omap2_hsmmc_info mmc[] = {
+ 		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
  		.gpio_wp	= 29,
  	},
 +	{
 +		.mmc		= 2,
-+		.wires		= 4,
-+		.gpio_wp	= 141,
-+		.gpio_cd	= 162,
++		.caps		= MMC_CAP_4_BIT_DATA,
 +		.transceiver	= true,
 +		.ocr_mask	= 0x00100000,	/* 3.3V */
 +	},
  	{}	/* Terminator */
  };
  
-@@ -330,7 +382,7 @@ static struct twl4030_platform_data beagle_twldata = {
- 	.vpll2		= &beagle_vpll2,
- };
- 
--static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
-+static struct i2c_board_info __initdata beagle_i2c1_boardinfo[] = {
- 	{
- 		I2C_BOARD_INFO("twl4030", 0x48),
- 		.flags = I2C_CLIENT_WAKE,
-@@ -339,10 +391,24 @@ static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
- 	},
+@@ -485,11 +534,31 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
+        },
  };
  
 +#if defined(CONFIG_RTC_DRV_DS1307) || \
 +	defined(CONFIG_RTC_DRV_DS1307_MODULE)
 +
 +static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {
-+	{
-+		I2C_BOARD_INFO("ds1307", 0x68),
-+	},
++       {
++               I2C_BOARD_INFO("ds1307", 0x68),
++       },
 +};
 +#else
 +static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {};
@@ -102,21 +100,36 @@ index e20fc76..c9c5bbb 100644
 +
  static int __init omap3_beagle_i2c_init(void)
  {
--	omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
--			ARRAY_SIZE(beagle_i2c_boardinfo));
-+	omap_register_i2c_bus(1, 2600, beagle_i2c1_boardinfo,
-+			ARRAY_SIZE(beagle_i2c1_boardinfo));
+ 	omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
+ 			ARRAY_SIZE(beagle_i2c_boardinfo));
++	if(!strcmp(expansionboard_name, "zippy"))
++	{
 +	omap_register_i2c_bus(2, 400,  beagle_i2c2_boardinfo,
 +			ARRAY_SIZE(beagle_i2c2_boardinfo));
++	}
++	else
++	{
+ 	omap_register_i2c_bus(2, 400, NULL, 0);
++	}
  	/* Bus 3 is attached to the DVI port where devices like the pico DLP
  	 * projector don't work reliably with 400kHz */
- 	omap_register_i2c_bus(3, 100, NULL, 0);
-@@ -496,6 +562,8 @@ static void __init omap3_beagle_init(void)
+ 	omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
+@@ -696,6 +765,15 @@ static void __init omap3_beagle_init(void)
  	/* REVISIT leave DVI powered down until it's needed ... */
  	gpio_direction_output(170, true);
  
-+	omap3beagle_enc28j60_init();
++	if(!strcmp(expansionboard_name, "zippy"))
++	{
++		pr_info("Beagle expansionboard: initializing enc28j60\n");
++		omap3beagle_enc28j60_init();
++		pr_info("Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
++		mmc[1].gpio_wp = 141;
++		mmc[1].gpio_cd = 162;
++	}
 +
  	usb_musb_init(&musb_board_data);
  	usb_ehci_init(&ehci_pdata);
  	omap3beagle_flash_init();
+-- 
+1.7.1
+
diff --git a/patches/wip_to_be_pushed/0009-omap3-beagle-expansionboard-zippy2.patch b/patches/wip_to_be_pushed/0009-omap3-beagle-expansionboard-zippy2.patch
new file mode 100644
index 000000000..a1d99f5f8
--- /dev/null
+++ b/patches/wip_to_be_pushed/0009-omap3-beagle-expansionboard-zippy2.patch
@@ -0,0 +1,92 @@
+From 50a2b551e2fa4eef87fa396307cacc07b8712c31 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Sun, 13 Mar 2011 12:36:31 -0500
+Subject: [PATCH 9/9] omap3: beagle: expansionboard zippy2
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |   54 ++++++++++++++++++++++++++++++-
+ 1 files changed, 53 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index feacc5e..e1aab93 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -198,6 +198,48 @@ static void __init omap3beagle_enc28j60_init(void)
+ static inline void __init omap3beagle_enc28j60_init(void) { return; }
+ #endif
+ 
++#if defined(CONFIG_KS8851) || defined(CONFIG_KS8851_MODULE)
++
++#include <plat/mcspi.h>
++#include <linux/spi/spi.h>
++
++#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157
++
++static struct omap2_mcspi_device_config ks8851_spi_chip_info = {
++	.turbo_mode	= 0,
++	.single_channel	= 1,	/* 0: slave, 1: master */
++};
++
++static struct spi_board_info omap3beagle_zippy2_spi_board_info[] __initdata = {
++	{
++		.modalias		= "ks8851",
++		.bus_num		= 4,
++		.chip_select		= 0,
++		.max_speed_hz		= 36000000,
++		.controller_data	= &ks8851_spi_chip_info,
++	},
++};
++
++static void __init omap3beagle_ks8851_init(void)
++{
++	if ((gpio_request(OMAP3BEAGLE_GPIO_KS8851_IRQ, "KS8851_IRQ") == 0) &&
++	    (gpio_direction_input(OMAP3BEAGLE_GPIO_KS8851_IRQ) == 0)) {
++		gpio_export(OMAP3BEAGLE_GPIO_KS8851_IRQ, 0);
++		omap3beagle_zippy2_spi_board_info[0].irq = OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_KS8851_IRQ);
++		set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
++	} else {
++		pr_err("could not obtain gpio for KS8851_IRQ\n");
++		return;
++	}
++
++	spi_register_board_info(omap3beagle_zippy2_spi_board_info,
++							ARRAY_SIZE(omap3beagle_zippy2_spi_board_info));
++}
++
++#else
++static inline void __init omap3beagle_ks8851_init(void) { return; }
++#endif
++
+ static struct mtd_partition omap3beagle_nand_partitions[] = {
+ 	/* All the partition sizes are listed in terms of NAND block size */
+ 	{
+@@ -550,7 +592,8 @@ static int __init omap3_beagle_i2c_init(void)
+ {
+ 	omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
+ 			ARRAY_SIZE(beagle_i2c_boardinfo));
+-	if(!strcmp(expansionboard_name, "zippy"))
++	if(!strcmp(expansionboard_name, "zippy")
++	|| !strcmp(expansionboard_name, "zippy2"))
+ 	{
+ 	omap_register_i2c_bus(2, 400,  beagle_i2c2_boardinfo,
+ 			ARRAY_SIZE(beagle_i2c2_boardinfo));
+@@ -774,6 +817,15 @@ static void __init omap3_beagle_init(void)
+ 		mmc[1].gpio_cd = 162;
+ 	}
+ 
++	if(!strcmp(expansionboard_name, "zippy2"))
++	{
++		pr_info("Beagle expansionboard: initializing ks_8851\n");
++		omap3beagle_ks8851_init();
++		pr_info("Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
++		mmc[1].gpio_wp = 141;
++		mmc[1].gpio_cd = 162;
++	}
++
+ 	usb_musb_init(&musb_board_data);
+ 	usb_ehci_init(&ehci_pdata);
+ 	omap3beagle_flash_init();
+-- 
+1.7.1
+
diff --git a/version.sh b/version.sh
index 06c7212c8..b88328769 100644
--- a/version.sh
+++ b/version.sh
@@ -7,7 +7,7 @@ KERNEL_REL=2.6.37
 #PRE_RC=2.6.37-git18
 RC_KERNEL=2.6.38
 RC_PATCH=-rc8
-ABI=5.1
+ABI=5.2
 
 if [ "${NO_DEVTMPS}" ] ; then
 BUILD=dold${ABI}
-- 
GitLab