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