aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoen Kooi <koen@openembedded.org>2011-01-06 12:20:27 +0100
committerKoen Kooi <koen@openembedded.org>2011-01-06 14:03:03 +0100
commit7fcfb4260803d2828b9b925effd1587782496913 (patch)
tree281e732e3eaaede4afba65e85489b212c8a01f93
parent7d83a24f8fdb62e1a034d3592b94db4bc810b9ac (diff)
downloadopenembedded-7fcfb4260803d2828b9b925effd1587782496913.tar.gz
linux-omap 2.6.37rc: add DVFS patches from Thara
Signed-off-by: Koen Kooi <koen@openembedded.org>
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0002-omap-Beagle-detect-new-xM-revision-B.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0002-omap-Beagle-detect-new-xM-revision-B.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0005-modedb.c-add-proper-720p60-mode.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0005-modedb.c-add-proper-720p60-mode.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0006-mmc-don-t-display-single-block-read-console-messages.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0006-mmc-don-t-display-single-block-read-console-messages.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0007-MTD-silence-ecc-errors-on-mtdblock0.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0007-MTD-silence-ecc-errors-on-mtdblock0.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0008-Miracle-patch.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0008-Miracle-patch.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0009-ARM-OMAP-add-omap_rev_-macros.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0009-ARM-OMAP-add-omap_rev_-macros.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0015-MFD-enable-madc-clock.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0015-MFD-enable-madc-clock.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0016-MFD-add-twl4030-madc-driver.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0016-MFD-add-twl4030-madc-driver.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0023-RTC-add-support-for-backup-battery-recharge.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0023-RTC-add-support-for-backup-battery-recharge.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/base/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch60
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0001-omap3-add-support-for-720MHz-MPU-OPP.patch38
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch27
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch90
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch31
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch62
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch103
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch269
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch32
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch199
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch82
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch182
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch120
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch134
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch195
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0012-OMAP-Introduce-device-scale.patch134
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch50
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch176
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch54
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch45
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch61
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch62
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch107
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0027-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0028-Add-functions-to-dma.c-to-set-address-and-length-for.patch)4
-rw-r--r--recipes/linux/linux-omap-2.6.37rc/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch (renamed from recipes/linux/linux-omap-2.6.37rc/0029-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch)4
-rw-r--r--recipes/linux/linux-omap_2.6.37rc.bb86
53 files changed, 2426 insertions, 89 deletions
diff --git a/recipes/linux/linux-omap-2.6.37rc/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch b/recipes/linux/linux-omap-2.6.37rc/base/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch
index ff2a1ce1d6..3455fa0395 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch
@@ -1,7 +1,7 @@
-From 71b7d633e566195b065e09e97164bec046ca7b6d Mon Sep 17 00:00:00 2001
+From d6d5641d45a971ebae2838b03fc6ed8cac095254 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@dominion.thruhere.net>
Date: Thu, 7 Oct 2010 09:25:45 +0200
-Subject: [PATCH 01/29] ARM: OMAP: Power on EHCI, serial, camera and DVI on beagleboard-xM
+Subject: [PATCH 01/48] ARM: OMAP: Power on EHCI, serial, camera and DVI on beagleboard-xM
Signed-off-by: Koen Kooi <koen@beagleboard.org>
---
diff --git a/recipes/linux/linux-omap-2.6.37rc/0002-omap-Beagle-detect-new-xM-revision-B.patch b/recipes/linux/linux-omap-2.6.37rc/base/0002-omap-Beagle-detect-new-xM-revision-B.patch
index 93a792a6a0..1ea76d26de 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0002-omap-Beagle-detect-new-xM-revision-B.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0002-omap-Beagle-detect-new-xM-revision-B.patch
@@ -1,7 +1,7 @@
-From 60e119550f5a782c512c19d86a08313ae2ffa876 Mon Sep 17 00:00:00 2001
+From cdcf48554a1691090c4d5383014d23405b5b2047 Mon Sep 17 00:00:00 2001
From: Robert Nelson <robertcnelson@gmail.com>
Date: Tue, 9 Nov 2010 08:34:55 -0600
-Subject: [PATCH 02/29] omap: Beagle: detect new xM revision B
+Subject: [PATCH 02/48] omap: 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.
diff --git a/recipes/linux/linux-omap-2.6.37rc/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch b/recipes/linux/linux-omap-2.6.37rc/base/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch
index e56e8dc3ef..e53553e48e 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch
@@ -1,7 +1,7 @@
-From 72657e1ec88da91b772c7158c4c987b29d274ece Mon Sep 17 00:00:00 2001
+From 8214dad3691e6a6b7bbcdc60095ba1ecd0dce6d8 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@dominion.thruhere.net>
Date: Wed, 6 Oct 2010 10:19:34 +0200
-Subject: [PATCH 03/29] ARM: OMAP: beagleboard: Add infrastructure to do fixups based on expansionboard name passed by u-boot
+Subject: [PATCH 03/48] ARM: OMAP: beagleboard: Add infrastructure to do fixups based on expansionboard name passed by u-boot
Add support for Tincantools Zippy and Zippy2 expansionboards as well
diff --git a/recipes/linux/linux-omap-2.6.37rc/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch b/recipes/linux/linux-omap-2.6.37rc/base/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch
index c4b6f4c11f..f0f8b10444 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch
@@ -1,7 +1,7 @@
-From 6f80e6f5205a429951244e690952f192b78d15a8 Mon Sep 17 00:00:00 2001
+From e7cd2f89a99dc1bc54dc8caf93134060641a3746 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@dominion.thruhere.net>
Date: Sun, 5 Dec 2010 13:25:00 +0100
-Subject: [PATCH 04/29] ARM: OMAP: beagleboard: pre-export GPIOs to userspace when using a Tincantools trainerboard
+Subject: [PATCH 04/48] ARM: OMAP: beagleboard: pre-export GPIOs to userspace when using a Tincantools trainerboard
This really needs a for loop, patches welcome
diff --git a/recipes/linux/linux-omap-2.6.37rc/0005-modedb.c-add-proper-720p60-mode.patch b/recipes/linux/linux-omap-2.6.37rc/base/0005-modedb.c-add-proper-720p60-mode.patch
index dae96714c3..a82fa3ef9a 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0005-modedb.c-add-proper-720p60-mode.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0005-modedb.c-add-proper-720p60-mode.patch
@@ -1,7 +1,7 @@
-From ea2b3d705162f8a1622e60da27b2b5b31ad3abe7 Mon Sep 17 00:00:00 2001
+From 10f3992d9dd3d12610c837d1cc7a71d0eba905e2 Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@dominion.thruhere.net>
Date: Mon, 8 Mar 2010 14:38:31 +0100
-Subject: [PATCH 05/29] modedb.c: add proper 720p60 mode
+Subject: [PATCH 05/48] modedb.c: add proper 720p60 mode
Signed-off-by: Koen Kooi <koen@beagleboard.org>
---
diff --git a/recipes/linux/linux-omap-2.6.37rc/0006-mmc-don-t-display-single-block-read-console-messages.patch b/recipes/linux/linux-omap-2.6.37rc/base/0006-mmc-don-t-display-single-block-read-console-messages.patch
index 0a2f0a181c..2731663a84 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0006-mmc-don-t-display-single-block-read-console-messages.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0006-mmc-don-t-display-single-block-read-console-messages.patch
@@ -1,7 +1,7 @@
-From 2036f80d16c1df22b00953f4d2e2457eef00a82d Mon Sep 17 00:00:00 2001
+From 0fa5b36359835190e97d4671387a57f9af8ab235 Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Mon, 4 Jan 2010 19:20:25 -0800
-Subject: [PATCH 06/29] mmc: don't display single block read console messages
+Subject: [PATCH 06/48] mmc: don't display single block read console messages
mmc: don't display single block read console messages
---
diff --git a/recipes/linux/linux-omap-2.6.37rc/0007-MTD-silence-ecc-errors-on-mtdblock0.patch b/recipes/linux/linux-omap-2.6.37rc/base/0007-MTD-silence-ecc-errors-on-mtdblock0.patch
index 04de4e725b..f7952cfa0f 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0007-MTD-silence-ecc-errors-on-mtdblock0.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0007-MTD-silence-ecc-errors-on-mtdblock0.patch
@@ -1,7 +1,7 @@
-From 793eb265af99817165bc03ae96adaaf6e4860dca Mon Sep 17 00:00:00 2001
+From cfdca2f7a22519047edf1c7c038f325da6d9672b Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Mon, 26 Apr 2010 11:17:26 -0700
-Subject: [PATCH 07/29] MTD: silence ecc errors on mtdblock0
+Subject: [PATCH 07/48] MTD: silence ecc errors on mtdblock0
mtdblock0 is the x-load partition, which uses hw ecc
this confuses linux, which uses sw ecc
diff --git a/recipes/linux/linux-omap-2.6.37rc/0008-Miracle-patch.patch b/recipes/linux/linux-omap-2.6.37rc/base/0008-Miracle-patch.patch
index b76eb27663..d035579ef3 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0008-Miracle-patch.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0008-Miracle-patch.patch
@@ -1,7 +1,7 @@
-From 31949867bace7945acd3ec10c822e6988613aed7 Mon Sep 17 00:00:00 2001
+From c5d05544833f27d0f54694134088f864b595ba01 Mon Sep 17 00:00:00 2001
From: Mike Galbraith <efault@gmx.de>
Date: Fri, 19 Nov 2010 12:52:42 +0100
-Subject: [PATCH 08/29] Miracle patch
+Subject: [PATCH 08/48] Miracle patch
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
diff --git a/recipes/linux/linux-omap-2.6.37rc/0009-ARM-OMAP-add-omap_rev_-macros.patch b/recipes/linux/linux-omap-2.6.37rc/base/0009-ARM-OMAP-add-omap_rev_-macros.patch
index 1c5d8dfd78..21e531dd24 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0009-ARM-OMAP-add-omap_rev_-macros.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0009-ARM-OMAP-add-omap_rev_-macros.patch
@@ -1,7 +1,7 @@
-From 1beed5ee3301a9756c8cd2672d487c568c562e81 Mon Sep 17 00:00:00 2001
+From 02e05895eeadaf265e4096d31598f5916dc075bf Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@dominion.thruhere.net>
Date: Tue, 23 Nov 2010 11:40:20 +0100
-Subject: [PATCH 09/29] ARM: OMAP: add omap_rev_* macros
+Subject: [PATCH 09/48] ARM: OMAP: add omap_rev_* macros
This is just to make the SGX modules build that depend on omap_rev_lt_3_0
diff --git a/recipes/linux/linux-omap-2.6.37rc/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch b/recipes/linux/linux-omap-2.6.37rc/base/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
index d292e2f641..175c7a9f0b 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
@@ -1,7 +1,7 @@
-From f051874f829ed2e2462c0e64c28e28bd6f942f2d Mon Sep 17 00:00:00 2001
+From 8c471fd98797978dbe7141a516f86b34c76218fd Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Mon, 10 May 2010 20:44:09 -0700
-Subject: [PATCH 10/29] OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
+Subject: [PATCH 10/48] OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
Signed-off-by: Koen Kooi <koen@beagleboard.org>
---
diff --git a/recipes/linux/linux-omap-2.6.37rc/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch b/recipes/linux/linux-omap-2.6.37rc/base/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch
index c80000313d..0c02dbedb6 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch
@@ -1,7 +1,7 @@
-From 18333339fe5e104c2ddfb2688989a15df0e0f94c Mon Sep 17 00:00:00 2001
+From fab0e0773974c1f8e9d9f3fedb231a6ead136ceb Mon Sep 17 00:00:00 2001
From: Koen Kooi <koen@beagleboard.org>
Date: Mon, 20 Dec 2010 11:57:56 +0100
-Subject: [PATCH 11/29] omap3: beagleboard: add WIP support for beagleboardtoys WL12xx board
+Subject: [PATCH 11/48] omap3: beagleboard: add WIP support for beagleboardtoys WL12xx board
Based on a patch by Luciano Coelho <luciano.coelho@nokia.com>
diff --git a/recipes/linux/linux-omap-2.6.37rc/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch b/recipes/linux/linux-omap-2.6.37rc/base/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch
index 1bb4ddaf77..e7abf32514 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch
@@ -1,7 +1,7 @@
-From 43b87f69e82217aff2a966559bdf28dcfedc2c8e Mon Sep 17 00:00:00 2001
+From b2d3dab78e0447a9e9b1f231f397f5a4661a8c0f Mon Sep 17 00:00:00 2001
From: Steve Sakoman <sakoman@gmail.com>
Date: Tue, 15 Dec 2009 15:17:44 -0800
-Subject: [PATCH 12/29] drivers: net: smsc911x: return ENODEV if device is not found
+Subject: [PATCH 12/48] drivers: net: smsc911x: return ENODEV if device is not found
Signed-off-by: Steve Sakoman <sakoman@gmail.com>
---
diff --git a/recipes/linux/linux-omap-2.6.37rc/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch b/recipes/linux/linux-omap-2.6.37rc/base/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch
index efefda5c2f..166a5bc597 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch
@@ -1,7 +1,7 @@
-From 43b7984021e30a9aa9b97c2cf9a9ceb806372709 Mon Sep 17 00:00:00 2001
+From ba056c5593760c687cd0e7e8b71aebea37744e11 Mon Sep 17 00:00:00 2001
From: Steve Sakoman <sakoman@gmail.com>
Date: Tue, 15 Dec 2009 15:24:10 -0800
-Subject: [PATCH 13/29] drivers: input: touchscreen: ads7846: return ENODEV if device is not found
+Subject: [PATCH 13/48] drivers: input: touchscreen: ads7846: return ENODEV if device is not found
Signed-off-by: Steve Sakoman <sakoman@gmail.com>
---
diff --git a/recipes/linux/linux-omap-2.6.37rc/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch b/recipes/linux/linux-omap-2.6.37rc/base/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch
index 4ef7dd4828..4547fe98ea 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch
@@ -1,7 +1,7 @@
-From ebb70888ec3601534601d7524212fbefa24d679e Mon Sep 17 00:00:00 2001
+From 7223af75a651593d131ec4d84cd2abde88c7d69f Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Thu, 17 Dec 2009 12:45:20 -0800
-Subject: [PATCH 14/29] ASoC: enable audio capture by default for twl4030
+Subject: [PATCH 14/48] ASoC: enable audio capture by default for twl4030
---
sound/soc/codecs/twl4030.c | 4 ++--
diff --git a/recipes/linux/linux-omap-2.6.37rc/0015-MFD-enable-madc-clock.patch b/recipes/linux/linux-omap-2.6.37rc/base/0015-MFD-enable-madc-clock.patch
index 725881cc04..ebf6bc423f 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0015-MFD-enable-madc-clock.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0015-MFD-enable-madc-clock.patch
@@ -1,7 +1,7 @@
-From 0bedf8e81896a69ba77e9066ad9545412fd53cf8 Mon Sep 17 00:00:00 2001
+From 403c50b666c184e66b50157eda5ab94ddf33cf0d Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Sat, 23 Jan 2010 06:26:54 -0800
-Subject: [PATCH 15/29] MFD: enable madc clock
+Subject: [PATCH 15/48] MFD: enable madc clock
---
drivers/mfd/twl-core.c | 8 ++++++++
diff --git a/recipes/linux/linux-omap-2.6.37rc/0016-MFD-add-twl4030-madc-driver.patch b/recipes/linux/linux-omap-2.6.37rc/base/0016-MFD-add-twl4030-madc-driver.patch
index ae25ba35bb..55556337f0 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0016-MFD-add-twl4030-madc-driver.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0016-MFD-add-twl4030-madc-driver.patch
@@ -1,7 +1,7 @@
-From ea45cc880d407e9747dafa0efe5ab17ffb5e42d5 Mon Sep 17 00:00:00 2001
+From 8f8e87e19cc494a5dff58f8dc59b6967c02cda1d Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Thu, 17 Dec 2009 14:19:34 -0800
-Subject: [PATCH 16/29] MFD: add twl4030 madc driver
+Subject: [PATCH 16/48] MFD: add twl4030 madc driver
---
drivers/mfd/Kconfig | 21 ++
diff --git a/recipes/linux/linux-omap-2.6.37rc/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch b/recipes/linux/linux-omap-2.6.37rc/base/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch
index 19eec1808a..d28e34de54 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch
@@ -1,7 +1,7 @@
-From 3bc70a68d2cfd1d41995bb7f33f2e4005542f62b Mon Sep 17 00:00:00 2001
+From b74561518fc3fd865fe6c288c9ceb7519407c3bf Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Thu, 17 Dec 2009 14:27:15 -0800
-Subject: [PATCH 17/29] ARM: OMAP: Add twl4030 madc support to Overo
+Subject: [PATCH 17/48] ARM: OMAP: Add twl4030 madc support to Overo
---
arch/arm/mach-omap2/board-overo.c | 5 +++++
diff --git a/recipes/linux/linux-omap-2.6.37rc/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch b/recipes/linux/linux-omap-2.6.37rc/base/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch
index aeb4146a0d..2e5bfa42fc 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch
@@ -1,7 +1,7 @@
-From afa4132d5e29ed90154fec8cd97f891c86ce748c Mon Sep 17 00:00:00 2001
+From cc86c2f6f472d78b7cb83c16659768ddb0103c39 Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Thu, 17 Dec 2009 14:32:36 -0800
-Subject: [PATCH 18/29] ARM: OMAP: Add twl4030 madc support to Beagle
+Subject: [PATCH 18/48] ARM: OMAP: Add twl4030 madc support to Beagle
---
arch/arm/mach-omap2/board-omap3beagle.c | 5 +++++
diff --git a/recipes/linux/linux-omap-2.6.37rc/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch b/recipes/linux/linux-omap-2.6.37rc/base/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
index 8607d713d1..cb40b8ec5c 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
@@ -1,7 +1,7 @@
-From e6b15754a20c0306fb20d061358da67b5dd218cd Mon Sep 17 00:00:00 2001
+From a23b9064217c6ea6f04e71063c2dc90d121269b8 Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Tue, 23 Feb 2010 14:40:27 -0800
-Subject: [PATCH 19/29] OMAP: DSS2: Add support for Samsung LTE430WQ-F0C panel
+Subject: [PATCH 19/48] OMAP: DSS2: Add support for Samsung LTE430WQ-F0C panel
---
.../omap2/displays/panel-samsung-lte430wq-f0c.c | 154 ++++++++++++++++++++
diff --git a/recipes/linux/linux-omap-2.6.37rc/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch b/recipes/linux/linux-omap-2.6.37rc/base/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
index ad148d0a7e..8529c2600a 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
@@ -1,7 +1,7 @@
-From 6861df53ce9212b348fba806f5a86404c1de8a95 Mon Sep 17 00:00:00 2001
+From ae9500a932f6e8d4f0d35b91231957727428c5cc Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Thu, 17 Dec 2009 15:05:30 -0800
-Subject: [PATCH 20/29] OMAP: DSS2: Add support for LG Philips LB035Q02 panel
+Subject: [PATCH 20/48] OMAP: DSS2: Add support for LG Philips LB035Q02 panel
---
drivers/video/omap2/displays/Kconfig | 12 +
diff --git a/recipes/linux/linux-omap-2.6.37rc/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch b/recipes/linux/linux-omap-2.6.37rc/base/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch
index 86e9c40369..d5606dcf35 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch
@@ -1,7 +1,7 @@
-From 9e206307dbd65d557a57563c086af5089e52b2c8 Mon Sep 17 00:00:00 2001
+From efb2df7456804141345eb16e81f9699e50d9790a Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Tue, 19 Jan 2010 21:19:15 -0800
-Subject: [PATCH 21/29] OMAP: DSS2: add bootarg for selecting svideo or composite for tv output
+Subject: [PATCH 21/48] OMAP: DSS2: add bootarg for selecting svideo or composite for tv output
also add pal-16 and ntsc-16 omapfb.mode settings for 16bpp
---
diff --git a/recipes/linux/linux-omap-2.6.37rc/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch b/recipes/linux/linux-omap-2.6.37rc/base/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch
index ffa0a0e838..6284725c6e 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch
@@ -1,7 +1,7 @@
-From 3924e990868742c19e5cd3e84191a01b55249079 Mon Sep 17 00:00:00 2001
+From 2ad52b20e2f1cdb591a7ed027a01e6825eb45548 Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Sun, 24 Jan 2010 09:33:56 -0800
-Subject: [PATCH 22/29] ARM: OMAP2: mmc-twl4030: move clock input selection prior to vcc test
+Subject: [PATCH 22/48] ARM: OMAP2: mmc-twl4030: move clock input selection prior to vcc test
otherwise it is not executed on systems that use non-twl regulators
---
diff --git a/recipes/linux/linux-omap-2.6.37rc/0023-RTC-add-support-for-backup-battery-recharge.patch b/recipes/linux/linux-omap-2.6.37rc/base/0023-RTC-add-support-for-backup-battery-recharge.patch
index a8153119b0..8e7b6d44a9 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0023-RTC-add-support-for-backup-battery-recharge.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0023-RTC-add-support-for-backup-battery-recharge.patch
@@ -1,7 +1,7 @@
-From ade216c2689a2dae645ca95fa443ee8eacfafb67 Mon Sep 17 00:00:00 2001
+From baf0a85e8458058ca0c508939b16337f8f385c78 Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Thu, 4 Feb 2010 12:26:22 -0800
-Subject: [PATCH 23/29] RTC: add support for backup battery recharge
+Subject: [PATCH 23/48] RTC: add support for backup battery recharge
---
drivers/rtc/rtc-twl.c | 25 +++++++++++++++++++++++++
diff --git a/recipes/linux/linux-omap-2.6.37rc/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch b/recipes/linux/linux-omap-2.6.37rc/base/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch
index bd7b0686b7..6b85d0754f 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch
@@ -1,7 +1,7 @@
-From 6a2f14bdd390695f5d88fb8ea18df8f80bddfc9d Mon Sep 17 00:00:00 2001
+From 684902cfd776bdaf46d302d63be1d52edeb11428 Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Wed, 24 Feb 2010 10:37:22 -0800
-Subject: [PATCH 24/29] ARM: OMAP: automatically set musb mode in platform data based on CONFIG options
+Subject: [PATCH 24/48] ARM: OMAP: automatically set musb mode in platform data based on CONFIG options
---
arch/arm/mach-omap2/board-omap3beagle.c | 6 ++++++
diff --git a/recipes/linux/linux-omap-2.6.37rc/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch b/recipes/linux/linux-omap-2.6.37rc/base/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch
index 1261c5b683..7adec6c700 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch
@@ -1,7 +1,7 @@
-From 6e383eb63993e011b6bdec84e3eb001e6b9e00a1 Mon Sep 17 00:00:00 2001
+From 786949054cbaf6698cc45bebf8802407932c3399 Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Mon, 10 May 2010 13:59:14 -0700
-Subject: [PATCH 25/29] OMAP: DSS2: check for both cpu type and revision, rather than just revision
+Subject: [PATCH 25/48] OMAP: DSS2: check for both cpu type and revision, rather than just revision
---
drivers/video/omap2/dss/dispc.c | 4 ++--
diff --git a/recipes/linux/linux-omap-2.6.37rc/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch b/recipes/linux/linux-omap-2.6.37rc/base/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
index b31165ccae..71bb32c3ab 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/base/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
@@ -1,7 +1,7 @@
-From 66db8210263893e9ffd4478c36a3a1a89bdaff37 Mon Sep 17 00:00:00 2001
+From db865112f6dc08f364675177eafd24ccffb3d4da Mon Sep 17 00:00:00 2001
From: Steve Sakoman <steve@sakoman.com>
Date: Fri, 18 Dec 2009 06:39:24 -0800
-Subject: [PATCH 26/29] OMAP: DSS2: Add DSS2 support for Overo
+Subject: [PATCH 26/48] OMAP: DSS2: Add DSS2 support for Overo
---
arch/arm/mach-omap2/board-overo.c | 238 +++++++++++++++++++++++++++++++------
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch
new file mode 100644
index 0000000000..216ab42569
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch
@@ -0,0 +1,60 @@
+From 5142c7c3afc5d77b451a10ff6e491c837fd57387 Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 31 Dec 2010 13:35:02 +0530
+Subject: [PATCH 01/19] OMAP3: PM: Adding T2 enabling of smartreflex
+
+The smartreflex bit on twl4030 needs to be enabled by default irrespective
+of whether smartreflex module is enabled on the OMAP side or not.
+This is because without this bit enabled the voltage scaling through
+vp forceupdate does not function properly on OMAP3.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/mach-omap2/omap_twl.c | 16 ++++++++++++++++
+ 1 files changed, 16 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/omap_twl.c b/arch/arm/mach-omap2/omap_twl.c
+index 15f8c6c..a59f36b 100644
+--- a/arch/arm/mach-omap2/omap_twl.c
++++ b/arch/arm/mach-omap2/omap_twl.c
+@@ -58,7 +58,9 @@
+ static bool is_offset_valid;
+ static u8 smps_offset;
+
++#define TWL4030_DCDC_GLOBAL_CFG 0x06
+ #define REG_SMPS_OFFSET 0xE0
++#define SMARTREFLEX_ENABLE BIT(3)
+
+ unsigned long twl4030_vsel_to_uv(const u8 vsel)
+ {
+@@ -256,6 +258,7 @@ int __init omap4_twl_init(void)
+ int __init omap3_twl_init(void)
+ {
+ struct voltagedomain *voltdm;
++ u8 temp;
+
+ if (!cpu_is_omap34xx())
+ return -ENODEV;
+@@ -267,6 +270,19 @@ int __init omap3_twl_init(void)
+ omap3_core_volt_info.vp_vddmax = OMAP3630_VP2_VLIMITTO_VDDMAX;
+ }
+
++ /*
++ * The smartreflex bit on twl4030 needs to be enabled by
++ * default irrespective of whether smartreflex module is
++ * enabled on the OMAP side or not. This is because without
++ * this bit enabled the voltage scaling through
++ * vp forceupdate does not function properly on OMAP3.
++ */
++ twl_i2c_read_u8(TWL4030_MODULE_PM_RECEIVER, &temp,
++ TWL4030_DCDC_GLOBAL_CFG);
++ temp |= SMARTREFLEX_ENABLE;
++ twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, temp,
++ TWL4030_DCDC_GLOBAL_CFG);
++
+ voltdm = omap_voltage_domain_lookup("mpu");
+ omap_voltage_register_pmic(voltdm, &omap3_mpu_volt_info);
+
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0001-omap3-add-support-for-720MHz-MPU-OPP.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0001-omap3-add-support-for-720MHz-MPU-OPP.patch
new file mode 100644
index 0000000000..f9236394a7
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0001-omap3-add-support-for-720MHz-MPU-OPP.patch
@@ -0,0 +1,38 @@
+From fe693a9d05c58aa7e5157f695b9af00688a2b91d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 6 Jan 2011 13:05:55 +0100
+Subject: [PATCH 1/4] omap3: add support for 720MHz MPU OPP
+
+The 720MHz capability can be probed run-time by reading the
+PRODID.SKUID[3:0] at 0x4830A20C.
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/opp3xxx_data.c | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c
+index fd3a1af..a861f5e 100644
+--- a/arch/arm/mach-omap2/opp3xxx_data.c
++++ b/arch/arm/mach-omap2/opp3xxx_data.c
+@@ -34,6 +34,8 @@ static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
+ OPP_INITIALIZER("mpu", true, 550000000, 1270000),
+ /* MPU OPP5 */
+ OPP_INITIALIZER("mpu", true, 600000000, 1350000),
++ /* MPU OPP6 */
++ OPP_INITIALIZER("mpu", false, 720000000, 1350000),
+
+ /*
+ * L3 OPP1 - 41.5 MHz is disabled because: The voltage for that OPP is
+@@ -59,6 +61,8 @@ static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
+ OPP_INITIALIZER("iva", true, 400000000, 1270000),
+ /* DSP OPP5 */
+ OPP_INITIALIZER("iva", true, 430000000, 1350000),
++ /* DSP OPP6 */
++ OPP_INITIALIZER("iva", false, 520000000, 1350000),
+ };
+
+ static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch
new file mode 100644
index 0000000000..99e8205d80
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch
@@ -0,0 +1,27 @@
+From dd8daed0e5ebb6fe97d519af14087e64badf99b3 Mon Sep 17 00:00:00 2001
+From: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
+Date: Wed, 11 Aug 2010 17:02:43 -0700
+Subject: [PATCH 02/19] OMAP: CPUfreq: ensure driver initializes after cpufreq framework and governors
+
+Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
+Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
+---
+ arch/arm/plat-omap/cpu-omap.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
+index 11c54ec..79d2155 100644
+--- a/arch/arm/plat-omap/cpu-omap.c
++++ b/arch/arm/plat-omap/cpu-omap.c
+@@ -160,7 +160,7 @@ static int __init omap_cpufreq_init(void)
+ return cpufreq_register_driver(&omap_driver);
+ }
+
+-arch_initcall(omap_cpufreq_init);
++late_initcall(omap_cpufreq_init);
+
+ /*
+ * if ever we want to remove this, upon cleanup call:
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch
new file mode 100644
index 0000000000..c771b09159
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch
@@ -0,0 +1,90 @@
+From 154571d1620731a3207da126eb4f139a1534f293 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 6 Jan 2011 13:13:18 +0100
+Subject: [PATCH 2/4] OMAP35x: Add support for 720MHz part
+
+This patch adds support for ARM running at 720MHz part.
+
+The 720MHz capability can be probed run-time by reading the
+PRODID.SKUID[3:0] at 0x4830A20C.
+
+ [1] http://focus.ti.com/lit/ug/spruff1d/spruff1d.pdf
+
+This is a forward port of https://patchwork.kernel.org/patch/53125/
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/control.h | 7 +++++++
+ arch/arm/mach-omap2/id.c | 10 ++++++++++
+ arch/arm/plat-omap/include/plat/cpu.h | 2 ++
+ 3 files changed, 19 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h
+index f0629ae..b9671d3 100644
+--- a/arch/arm/mach-omap2/control.h
++++ b/arch/arm/mach-omap2/control.h
+@@ -365,7 +365,14 @@
+ #define FEAT_NEON 0
+ #define FEAT_NEON_NONE 1
+
++/*
++ * Product ID register
++ */
++#define OMAP3_PRODID 0x020C
+
++#define OMAP3_SKUID_MASK 0x0f
++#define OMAP3_SKUID_720MHZ 0x08
++
+ #ifndef __ASSEMBLY__
+ #ifdef CONFIG_ARCH_OMAP2PLUS
+ extern void __iomem *omap_ctrl_base_get(void);
+diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
+index 5f9086c..53fbe01 100644
+--- a/arch/arm/mach-omap2/id.c
++++ b/arch/arm/mach-omap2/id.c
+@@ -195,6 +195,15 @@ static void __init omap3_check_features(void)
+ * TODO: Get additional info (where applicable)
+ * e.g. Size of L2 cache.
+ */
++
++ /*
++ * Does it support 720MHz?
++ */
++ status = (OMAP3_SKUID_MASK & read_tap_reg(OMAP3_PRODID));
++
++ if (status & OMAP3_SKUID_720MHZ) {
++ omap3_features |= OMAP3_HAS_720MHZ;
++ }
+ }
+
+ static void __init omap3_check_revision(void)
+@@ -445,6 +454,7 @@ static void __init omap3_cpuinfo(void)
+ OMAP3_SHOW_FEATURE(neon);
+ OMAP3_SHOW_FEATURE(isp);
+ OMAP3_SHOW_FEATURE(192mhz_clk);
++ OMAP3_SHOW_FEATURE(720mhz);
+
+ printk(")\n");
+ }
+diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
+index 1a8c347..7d24faa 100644
+--- a/arch/arm/plat-omap/include/plat/cpu.h
++++ b/arch/arm/plat-omap/include/plat/cpu.h
+@@ -510,6 +510,7 @@ extern u32 omap3_features;
+ #define OMAP3_HAS_ISP BIT(4)
+ #define OMAP3_HAS_192MHZ_CLK BIT(5)
+ #define OMAP3_HAS_IO_WAKEUP BIT(6)
++#define OMAP3_HAS_720MHZ BIT(7)
+
+ #define OMAP3_HAS_FEATURE(feat,flag) \
+ static inline unsigned int omap3_has_ ##feat(void) \
+@@ -524,5 +525,6 @@ OMAP3_HAS_FEATURE(neon, NEON)
+ OMAP3_HAS_FEATURE(isp, ISP)
+ OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK)
+ OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP)
++OMAP3_HAS_FEATURE(720mhz, 720MHZ)
+
+ #endif
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch
new file mode 100644
index 0000000000..0b298f290b
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch
@@ -0,0 +1,31 @@
+From f8a4f82bc912cbb223bdf40496c4c6e879339479 Mon Sep 17 00:00:00 2001
+From: Kevin Hilman <khilman@deeprootsystems.com>
+Date: Wed, 11 Aug 2010 17:05:38 -0700
+Subject: [PATCH 03/19] OMAP: CPUfreq: ensure policy is fully initialized
+
+Ensure policy min/max/cur values are initialized when OMAP
+CPUfreq driver starts.
+
+Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
+---
+ arch/arm/plat-omap/cpu-omap.c | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
+index 79d2155..bfa063b 100644
+--- a/arch/arm/plat-omap/cpu-omap.c
++++ b/arch/arm/plat-omap/cpu-omap.c
+@@ -126,6 +126,10 @@ static int __init omap_cpu_init(struct cpufreq_policy *policy)
+ VERY_HI_RATE) / 1000;
+ }
+
++ policy->min = policy->cpuinfo.min_freq;
++ policy->max = policy->cpuinfo.max_freq;
++ policy->cur = omap_getspeed(0);
++
+ /* FIXME: what's the actual transition time? */
+ policy->cpuinfo.transition_latency = 300 * 1000;
+
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch
new file mode 100644
index 0000000000..a2141bb841
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch
@@ -0,0 +1,62 @@
+From 1a97a3600227fd0b52ee3bfd67bac6dde034af0d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 6 Jan 2011 13:23:45 +0100
+Subject: [PATCH 3/4] OMAP3: beagle C4: enable upto 720MHz OPP
+
+Beagle C4 uses a recent 3530 and the board design allows enabling 720MHz
+OPP. tweak the default table to allow for higher OPP tables
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 35 +++++++++++++++++++++++++++++++
+ 1 files changed, 35 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 9393e75..a0462b9 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -829,6 +829,41 @@ static void __init beagle_opp_init(void)
+ pr_err("%s: turbo OPPs enabled!\n", __func__);
+ }
+ }
++ /* Custom OPP enabled for C4 */
++ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4) {
++ struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
++ struct omap_hwmod *dh = omap_hwmod_lookup("iva");
++ struct device *dev;
++
++ if (!mh || !dh) {
++ pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
++ __func__, mh, dh);
++ r = -EINVAL;
++ } else {
++ /* Enable MPU 720MHz */
++ dev = &mh->od->pdev.dev;
++ r = opp_enable(dev, 720000000);
++
++ /* Enable IVA 520MHz and lower opps */
++ dev = &dh->od->pdev.dev;
++ r |= opp_enable(dev, 520000000);
++ }
++ if (r) {
++ pr_err("%s: failed to enable higher opp %d\n",
++ __func__, r);
++ /*
++ * Cleanup - disable the higher freqs - we dont care
++ * about the results
++ */
++ dev = &mh->od->pdev.dev;
++ opp_disable(dev, 720000000);
++ dev = &dh->od->pdev.dev;
++ opp_disable(dev, 520000000);
++ } else {
++ pr_err("%s: 720MHz MPU OPPs enabled!\n", __func__);
++ }
++ }
++
+ }
+
+ static void __init omap3_beagle_init(void)
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch
new file mode 100644
index 0000000000..5061daac3e
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch
@@ -0,0 +1,103 @@
+From 02b008bc50c79aeaa666917bcd2a58049d1ab68c Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 6 Jan 2011 13:32:19 +0100
+Subject: [PATCH 4/4] OMAP3: Overo Tide: enable upto 720MHz OPP
+
+Overo Tide uses a recent 3530 and the board design allows enabling 720MHz
+OPP. tweak the default table to allow for higher OPP tables
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-overo.c | 51 +++++++++++++++++++++++++++++++++++++
+ 1 files changed, 51 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
+index 8686015..2fa0c96 100644
+--- a/arch/arm/mach-omap2/board-overo.c
++++ b/arch/arm/mach-omap2/board-overo.c
+@@ -29,6 +29,7 @@
+ #include <linux/i2c/twl.h>
+ #include <linux/regulator/machine.h>
+ #include <linux/spi/spi.h>
++#include <linux/opp.h>
+
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/nand.h>
+@@ -52,10 +53,12 @@
+ #include <plat/mcspi.h>
+ #include <plat/mux.h>
+ #include <plat/usb.h>
++#include <plat/omap_device.h>
+
+ #include "mux.h"
+ #include "sdram-micron-mt46h32m32lf-6.h"
+ #include "hsmmc.h"
++#include "pm.h"
+
+ #define OVERO_GPIO_BT_XGATE 15
+ #define OVERO_GPIO_W2W_NRESET 16
+@@ -788,6 +791,53 @@ static void __init usrp1_e_init(void)
+
+ }
+
++static void __init overo_opp_init(void)
++{
++ int r = 0;
++
++ /* Initialize the omap3 opp table */
++ if (omap3_opp_init()) {
++ pr_err("%s: opp default init failed\n", __func__);
++ return;
++ }
++
++ /* Custom OPP enabled for Tide */
++ if (omap3_has_720mhz()) {
++ struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
++ struct omap_hwmod *dh = omap_hwmod_lookup("iva");
++ struct device *dev;
++
++ if (!mh || !dh) {
++ pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
++ __func__, mh, dh);
++ r = -EINVAL;
++ } else {
++ /* Enable MPU 720MHz */
++ dev = &mh->od->pdev.dev;
++ r = opp_enable(dev, 720000000);
++
++ /* Enable IVA 520MHz and lower opps */
++ dev = &dh->od->pdev.dev;
++ r |= opp_enable(dev, 520000000);
++ }
++ if (r) {
++ pr_err("%s: failed to enable higher opp %d\n",
++ __func__, r);
++ /*
++ * Cleanup - disable the higher freqs - we dont care
++ * about the results
++ */
++ dev = &mh->od->pdev.dev;
++ opp_disable(dev, 720000000);
++ dev = &dh->od->pdev.dev;
++ opp_disable(dev, 520000000);
++ } else {
++ pr_err("%s: 720MHz MPU OPPs enabled!\n", __func__);
++ }
++ }
++
++}
++
+ static void __init overo_init(void)
+ {
+ omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+@@ -846,6 +896,7 @@ static void __init overo_init(void)
+ else
+ printk(KERN_ERR "could not obtain gpio for "
+ "OVERO_GPIO_USBH_CPEN\n");
++ overo_opp_init();
+ }
+
+ MACHINE_START(OVERO, "Gumstix Overo")
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch
new file mode 100644
index 0000000000..7ea106398b
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch
@@ -0,0 +1,269 @@
+From f096ac097f75fae48eb6c02e69ec9fee5acc7b70 Mon Sep 17 00:00:00 2001
+From: Rajendra Nayak <rnayak@ti.com>
+Date: Mon, 10 Nov 2008 17:00:25 +0530
+Subject: [PATCH 04/19] OMAP3 PM: CPUFreq driver for OMAP3
+
+CPUFreq driver for OMAP3
+
+With additional fixes and cleanups from Tero Kristo:
+- Fix rate calculation bug in omap3_select_table_rate
+- Refreshed DVFS VDD1 control against latest clock fw
+
+Signed-off-by: Tero Kristo <tero.kristo@nokia.com>
+Signed-off-by: Rajendra Nayak <rnayak@ti.com>
+
+OMAP3: PM: CPUFreq: Fix omap_getspeed.
+
+Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
+
+Make sure omap cpufreq driver initializes after cpufreq framework and governors
+
+Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
+
+merge: CPUFreq: remove obsolete funcs
+
+OMAP3 clock: Update cpufreq driver
+
+This patch removes all refrences to virtual clock
+nodes in CPUFreq driver.
+
+Signed-off-by: Rajendra Nayak <rnayak@ti.com>
+Signed-off-by: Tero Kristo <tero.kristo@nokia.com>
+Signed-off-by: Jean Pihet <jpihet@mvista.com>
+
+PM: Prevent direct cpufreq scaling during initialization
+
+It is seen that the OMAP specific cpufreq initialization code tries to
+scale the MPU frequency to the highest possible without taking care of
+the voltage level. On power on reset the power IC does not provide the
+necessary voltage for the highest available MPU frequency (that would
+satisfy all Si families). This potentially is an window of opportunity
+for things to go wrong.
+
+Signed-off-by: Romit Dasgupta <romit@ti.com>
+Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
+
+OMAP3: PM: enable 600MHz (overdrive) OPP
+
+Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
+
+omap3: introduce cpufreq
+
+OMAP OPP layer functions now have dependencies of CONFIG_CPU_FREQ only.
+
+With this patch, omap opp layer now has its compilation flags
+bound to CONFIG_CPU_FREQ. Also its code has been removed from pm34xx.c.
+
+A new file has been created to contain cpu freq code related to
+OMAP3: cpufreq34xx.c
+
+OMAP34xx and OMAP36xx family OPPs are made available
+
+Signed-off-by: Eduardo Valentin <eduardo.valentin@nokia.com>
+Signed-off-by: Paul Walmsley <paul@pwsan.com>
+Signed-off-by: Nishanth Menon <nm@ti.com>
+Signed-off-by: Vishwanath BS <vishwanath.bs@ti.com>
+Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
+Signed-off-by: Romit Dasgupta <romit@ti.com>
+Signed-off-by: Rajendra Nayak <rnayak@ti.com>
+
+omap3: cpufreq: allow default opp table init
+
+For board files which choose to override the defaults, the existing
+mechanism will work, for boards that would like to work with defaults,
+allow init_common_hw to call init_opp_table to initialize if not
+already initialized. this will allow all omap boards which have opp
+tables predefined for a silicon to use the same.
+
+Originally reported for overo:
+http://marc.info/?t=127265269400004&r=1&w=2
+
+Signed-off-by: Nishanth Menon <nm@ti.com>
+Reported-by: Peter Tseng <tsenpet09@gmail.com>
+Cc: Cliff Brake <cliff.brake@gmail.com>
+Cc: Kevin Hilman <khilman@deeprootsystems.com>
+
+OMAP2: update OPP data to be device based
+
+Cc: Nishanth Menon <nm@ti.com>
+Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
+
+OMAP3: CPUfreq: update to device-based OPP API
+
+Update usage of OPP API to use new device-based API. This requires
+getting the 'struct device' for the MPU and using that with the OPP
+API.
+
+Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
+
+omap3: opp: make independent of cpufreq
+
+Make opp3xx data which is registered with the opp layer
+dependent purely on CONFIG_PM as opp layer and pm.c users
+are CONFIG_PM dependent not cpufreq dependent.
+so we rename the data definition to opp3xxx_data.c (inline with what
+we have for omap2), also move the build definition to be under
+the existing CONFIG_PM build instead of CPUFREQ.
+
+Cc: Eduardo Valentin <eduardo.valentin@nokia.com>
+Cc: Kevin Hilman <khilman@deeprootsystems.com>
+Cc: Paul Walmsley <paul@pwsan.com>
+Cc: Rajendra Nayak <rnayak@ti.com>
+Cc: Sanjeev Premi <premi@ti.com>
+Cc: Thara Gopinath <thara@ti.com>
+Cc: Tony Lindgren <tony@atomide.com>
+
+Signed-off-by: Nishanth Menon <nm@ti.com>
+---
+ arch/arm/mach-omap2/clock.h | 14 +++++++++++++-
+ arch/arm/mach-omap2/clock34xx.c | 2 ++
+ arch/arm/plat-omap/cpu-omap.c | 35 ++++++++++++++++++++++++++++++++---
+ 3 files changed, 47 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h
+index 896584e..29b5cf0 100644
+--- a/arch/arm/mach-omap2/clock.h
++++ b/arch/arm/mach-omap2/clock.h
+@@ -137,7 +137,9 @@ extern const struct clksel_rate gpt_32k_rates[];
+ extern const struct clksel_rate gpt_sys_rates[];
+ extern const struct clksel_rate gfx_l3_rates[];
+
+-#if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_CPU_FREQ)
++#ifdef CONFIG_CPU_FREQ
++
++#ifdef CONFIG_ARCH_OMAP2
+ extern void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
+ extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table);
+ #else
+@@ -145,6 +147,16 @@ extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table)
+ #define omap2_clk_exit_cpufreq_table 0
+ #endif
+
++#ifdef CONFIG_ARCH_OMAP3
++extern void omap3_clk_init_cpufreq_table(struct cpufreq_frequency_table **table);
++extern void omap3_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table);
++#else
++#define omap3_clk_init_cpufreq_table 0
++#define omap3_clk_exit_cpufreq_table 0
++#endif
++
++#endif /* CONFIG_CPU_FREQ */
++
+ extern const struct clkops clkops_omap3_noncore_dpll_ops;
+
+ #endif
+diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c
+index 287abc4..85d3877 100644
+--- a/arch/arm/mach-omap2/clock34xx.c
++++ b/arch/arm/mach-omap2/clock34xx.c
+@@ -20,6 +20,8 @@
+ #include <linux/kernel.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
++#include <linux/err.h>
++#include <linux/cpufreq.h>
+
+ #include <plat/clock.h>
+
+diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
+index bfa063b..608216b 100644
+--- a/arch/arm/plat-omap/cpu-omap.c
++++ b/arch/arm/plat-omap/cpu-omap.c
+@@ -8,6 +8,10 @@
+ *
+ * Based on cpu-sa1110.c, Copyright (C) 2001 Russell King
+ *
++ * Copyright (C) 2007-2008 Texas Instruments, Inc.
++ * Updated to support OMAP3
++ * Rajendra Nayak <rnayak@ti.com>
++ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+@@ -21,17 +25,25 @@
+ #include <linux/err.h>
+ #include <linux/clk.h>
+ #include <linux/io.h>
++#include <linux/opp.h>
+
+ #include <mach/hardware.h>
+ #include <plat/clock.h>
++#include <plat/common.h>
+ #include <asm/system.h>
+
++#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
++#include <plat/omap-pm.h>
++#endif
++
+ #define VERY_HI_RATE 900000000
+
+ static struct cpufreq_frequency_table *freq_table;
+
+ #ifdef CONFIG_ARCH_OMAP1
+ #define MPU_CLK "mpu"
++#elif CONFIG_ARCH_OMAP3
++#define MPU_CLK "arm_fck"
+ #else
+ #define MPU_CLK "virt_prcm_set"
+ #endif
+@@ -73,7 +85,13 @@ static int omap_target(struct cpufreq_policy *policy,
+ unsigned int target_freq,
+ unsigned int relation)
+ {
++#ifdef CONFIG_ARCH_OMAP1
+ struct cpufreq_freqs freqs;
++#endif
++#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
++ unsigned long freq;
++ struct device *mpu_dev = omap2_get_mpuss_device();
++#endif
+ int ret = 0;
+
+ /* Ensure desired rate is within allowed range. Some govenors
+@@ -83,13 +101,13 @@ static int omap_target(struct cpufreq_policy *policy,
+ if (target_freq > policy->max)
+ target_freq = policy->max;
+
++#ifdef CONFIG_ARCH_OMAP1
+ freqs.old = omap_getspeed(0);
+ freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000;
+ freqs.cpu = 0;
+
+ if (freqs.old == freqs.new)
+ return ret;
+-
+ cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
+ #ifdef CONFIG_CPU_FREQ_DEBUG
+ printk(KERN_DEBUG "cpufreq-omap: transition: %u --> %u\n",
+@@ -97,7 +115,11 @@ static int omap_target(struct cpufreq_policy *policy,
+ #endif
+ ret = clk_set_rate(mpu_clk, freqs.new * 1000);
+ cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
+-
++#elif defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
++ freq = target_freq * 1000;
++ if (opp_find_freq_ceil(mpu_dev, &freq))
++ omap_pm_cpu_set_freq(freq);
++#endif
+ return ret;
+ }
+
+@@ -114,7 +136,14 @@ static int __init omap_cpu_init(struct cpufreq_policy *policy)
+
+ policy->cur = policy->min = policy->max = omap_getspeed(0);
+
+- clk_init_cpufreq_table(&freq_table);
++ if (!cpu_is_omap34xx()) {
++ clk_init_cpufreq_table(&freq_table);
++ } else {
++ struct device *mpu_dev = omap2_get_mpuss_device();
++
++ opp_init_cpufreq_table(mpu_dev, &freq_table);
++ }
++
+ if (freq_table) {
+ result = cpufreq_frequency_table_cpuinfo(policy, freq_table);
+ if (!result)
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch
new file mode 100644
index 0000000000..03d42c3fe4
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch
@@ -0,0 +1,32 @@
+From b0a84aba56da151763058c73d5b11b4424761421 Mon Sep 17 00:00:00 2001
+From: Silesh C V <silesh@ti.com>
+Date: Wed, 29 Sep 2010 14:52:54 +0530
+Subject: [PATCH 05/19] OMAP: PM: CPUFREQ: Fix conditional compilation
+
+Fix conditional compilation. A conditional expresiion
+should follow "#elif", in this case #elif clause should
+check whether CONFIG_ARCH_OMAP3 is defined or not
+(ie. defined(CONFIG_ARCH_OMAP3)) rather than checking for
+the value of the macro.
+
+Signed-off-by: Silesh C V <silesh@ti.com>
+---
+ arch/arm/plat-omap/cpu-omap.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
+index 608216b..671e4b9 100644
+--- a/arch/arm/plat-omap/cpu-omap.c
++++ b/arch/arm/plat-omap/cpu-omap.c
+@@ -42,7 +42,7 @@ static struct cpufreq_frequency_table *freq_table;
+
+ #ifdef CONFIG_ARCH_OMAP1
+ #define MPU_CLK "mpu"
+-#elif CONFIG_ARCH_OMAP3
++#elif defined(CONFIG_ARCH_OMAP3)
+ #define MPU_CLK "arm_fck"
+ #else
+ #define MPU_CLK "virt_prcm_set"
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch
new file mode 100644
index 0000000000..15f8a9b760
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch
@@ -0,0 +1,199 @@
+From 08c4a96fac60350914f42557b7d43cf3a49061ed Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 29 Oct 2010 20:43:07 +0530
+Subject: [PATCH 06/19] OMAP: Introduce a user list for each voltage domain instance in the voltage driver.
+
+This patch introduces a user list of devices associated with each
+voltage domain instance. The user list is implemented using plist
+structure with priority node populated with the voltage values.
+This patch also adds an API which will take in a device and
+requested voltage as parameters, adds the info to the user list
+and returns back the maximum voltage requested by all the user
+devices. This can be used anytime to get the voltage that the
+voltage domain instance can be transitioned into.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/mach-omap2/voltage.c | 97 +++++++++++++++++++++++++++++
+ arch/arm/plat-omap/include/plat/voltage.h | 8 +++
+ 2 files changed, 105 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
+index ed6079c..76c98c6 100644
+--- a/arch/arm/mach-omap2/voltage.c
++++ b/arch/arm/mach-omap2/voltage.c
+@@ -24,6 +24,9 @@
+ #include <linux/err.h>
+ #include <linux/debugfs.h>
+ #include <linux/slab.h>
++#include <linux/spinlock.h>
++#include <linux/plist.h>
++#include <linux/slab.h>
+
+ #include <plat/common.h>
+ #include <plat/voltage.h>
+@@ -118,6 +121,20 @@ struct vc_reg_info {
+ };
+
+ /**
++ * struct omap_vdd_user_list - The per vdd user list
++ *
++ * @dev: The device asking for the vdd to be set at a particular
++ * voltage
++ * @node: The list head entry
++ * @volt: The voltage requested by the device <dev>
++ */
++struct omap_vdd_user_list {
++ struct device *dev;
++ struct plist_node node;
++ u32 volt;
++};
++
++/**
+ * omap_vdd_info - Per Voltage Domain info
+ *
+ * @volt_data : voltage table having the distinct voltages supported
+@@ -132,6 +149,10 @@ struct vc_reg_info {
+ * shifts, masks etc.
+ * @voltdm : pointer to the voltage domain structure
+ * @debug_dir : debug directory for this voltage domain.
++ * @user_lock : the lock to be used by the plist user_list
++ * @user_list : the list head maintaining the various users.
++ * @scaling_mutex : the dvfs muutex.
++ * of this vdd with the voltage requested by each user.
+ * @curr_volt : current voltage for this vdd.
+ * @ocp_mod : The prm module for accessing the prm irqstatus reg.
+ * @prm_irqst_reg : prm irqstatus register.
+@@ -146,6 +167,9 @@ struct omap_vdd_info {
+ struct vc_reg_info vc_reg;
+ struct voltagedomain voltdm;
+ struct dentry *debug_dir;
++ spinlock_t user_lock;
++ struct plist_head user_list;
++ struct mutex scaling_mutex;
+ u32 curr_volt;
+ u16 ocp_mod;
+ u8 prm_irqst_reg;
+@@ -869,6 +893,11 @@ static int __init omap3_vdd_data_configure(struct omap_vdd_info *vdd)
+ vdd->write_reg = omap3_voltage_write_reg;
+ vdd->volt_scale = vp_forceupdate_scale_voltage;
+ vdd->vp_enabled = false;
++ /* Init the plist */
++ spin_lock_init(&vdd->user_lock);
++ plist_head_init(&vdd->user_list, &vdd->user_lock);
++ /* Init the DVFS mutex */
++ mutex_init(&vdd->scaling_mutex);
+
+ /* VC parameters */
+ vdd->vc_reg.prm_mod = OMAP3430_GR_MOD;
+@@ -1059,6 +1088,11 @@ static int __init omap4_vdd_data_configure(struct omap_vdd_info *vdd)
+ vdd->write_reg = omap4_voltage_write_reg;
+ vdd->volt_scale = vp_forceupdate_scale_voltage;
+ vdd->vp_enabled = false;
++ /* Init the plist */
++ spin_lock_init(&vdd->user_lock);
++ plist_head_init(&vdd->user_list, &vdd->user_lock);
++ /* Init the DVFS mutex */
++ mutex_init(&vdd->scaling_mutex);
+
+ /* VC parameters */
+ vdd->vc_reg.prm_mod = OMAP4430_PRM_DEVICE_INST;
+@@ -1171,6 +1205,69 @@ unsigned long omap_vp_get_curr_volt(struct voltagedomain *voltdm)
+
+ return vdd->pmic_info->vsel_to_uv(curr_vsel);
+ }
++/**
++ * omap_voltage_add_request() - API to keep track of various requests to
++ * scale the VDD and returns the best possible
++ * voltage the VDD can be put to.
++ * @volt_domain: pointer to the voltage domain.
++ * @dev: the device pointer.
++ * @volt: the voltage which is requested by the device.
++ *
++ * This API is to be called before the actual voltage scaling is
++ * done to determine what is the best possible voltage the VDD can
++ * be put to. This API adds the device <dev> in the user list of the
++ * vdd <volt_domain> with <volt> as the requested voltage. The user list
++ * is a plist with the priority element absolute voltage values.
++ * The API then finds the maximum of all the requested voltages for
++ * the VDD and returns it back through <volt> pointer itself.
++ * Returns error value in case of any errors.
++ */
++int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
++ unsigned long *volt)
++{
++ struct omap_vdd_info *vdd;
++ struct omap_vdd_user_list *user;
++ struct plist_node *node;
++ int found = 0;
++
++ if (!voltdm || IS_ERR(voltdm)) {
++ pr_warning("%s: VDD specified does not exist!\n", __func__);
++ return -EINVAL;
++ }
++
++ vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
++
++ mutex_lock(&vdd->scaling_mutex);
++
++ plist_for_each_entry(user, &vdd->user_list, node) {
++ if (user->dev == dev) {
++ found = 1;
++ break;
++ }
++ }
++
++ if (!found) {
++ user = kzalloc(sizeof(struct omap_vdd_user_list), GFP_KERNEL);
++ if (!user) {
++ pr_err("%s: Unable to creat a new user for vdd_%s\n",
++ __func__, voltdm->name);
++ mutex_unlock(&vdd->scaling_mutex);
++ return -ENOMEM;
++ }
++ user->dev = dev;
++ } else {
++ plist_del(&user->node, &vdd->user_list);
++ }
++
++ plist_node_init(&user->node, *volt);
++ plist_add(&user->node, &vdd->user_list);
++ node = plist_last(&vdd->user_list);
++ *volt = user->volt = node->prio;
++
++ mutex_unlock(&vdd->scaling_mutex);
++
++ return 0;
++}
+
+ /**
+ * omap_vp_enable() - API to enable a particular VP
+diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h
+index 0ff1233..bd07eca 100644
+--- a/arch/arm/plat-omap/include/plat/voltage.h
++++ b/arch/arm/plat-omap/include/plat/voltage.h
+@@ -132,6 +132,9 @@ int omap_voltage_register_pmic(struct voltagedomain *voltdm,
+ void omap_change_voltscale_method(struct voltagedomain *voltdm,
+ int voltscale_method);
+ int omap_voltage_late_init(void);
++int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
++ unsigned long *volt);
++
+ #else
+ static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm,
+ struct omap_volt_pmic_info *pmic_info) {}
+@@ -141,6 +144,11 @@ static inline int omap_voltage_late_init(void)
+ {
+ return -EINVAL;
+ }
++static inline int omap_voltage_add_request(struct voltagedomain *voltdm,
++ struct device *dev, unsigned long *volt)
++{
++ return -EINVAL;
++}
+ #endif
+
+ #endif
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch
new file mode 100644
index 0000000000..fd2a8c6516
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch
@@ -0,0 +1,82 @@
+From d11d1b439fd20557813154c6d8c92d1f7e21f975 Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 29 Oct 2010 20:43:10 +0530
+Subject: [PATCH 07/19] OMAP: Introduce API in the OPP layer to find the opp entry corresponding to a voltage.
+
+This patch adds an API in the opp layer to get the opp table entry
+corresponding to the voltage passed as the parameter.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ drivers/base/power/opp.c | 28 ++++++++++++++++++++++++++++
+ include/linux/opp.h | 8 ++++++++
+ 2 files changed, 36 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
+index 2bb9b4c..60b4478 100644
+--- a/drivers/base/power/opp.c
++++ b/drivers/base/power/opp.c
+@@ -354,6 +354,34 @@ struct opp *opp_find_freq_floor(struct device *dev, unsigned long *freq)
+ }
+
+ /**
++ * opp_find_voltage() - search for an exact voltage
++ * @dev: device pointer associated with the opp type
++ * @volt: voltage to search for
++ *
++ * Searches for exact match in the opp list and returns handle to the matching
++ * opp if found, else returns ERR_PTR in case of error and should be handled
++ * using IS_ERR.
++ */
++struct opp *opp_find_voltage(struct device *dev, unsigned long volt)
++{
++ struct device_opp *dev_opp;
++ struct opp *temp_opp, *opp = ERR_PTR(-ENODEV);
++
++ dev_opp = find_device_opp(dev);
++ if (IS_ERR(dev_opp))
++ return opp;
++
++ list_for_each_entry_rcu(temp_opp, &dev_opp->opp_list, node) {
++ if (temp_opp->available && temp_opp->u_volt == volt) {
++ opp = temp_opp;
++ break;
++ }
++ }
++
++ return opp;
++}
++
++/**
+ * opp_add() - Add an OPP table from a table definitions
+ * @dev: device for which we do this operation
+ * @freq: Frequency in Hz for this OPP
+diff --git a/include/linux/opp.h b/include/linux/opp.h
+index 5449945..4977d5c 100644
+--- a/include/linux/opp.h
++++ b/include/linux/opp.h
+@@ -34,6 +34,8 @@ struct opp *opp_find_freq_floor(struct device *dev, unsigned long *freq);
+
+ struct opp *opp_find_freq_ceil(struct device *dev, unsigned long *freq);
+
++struct opp *opp_find_voltage(struct device *dev, unsigned long volt);
++
+ int opp_add(struct device *dev, unsigned long freq, unsigned long u_volt);
+
+ int opp_enable(struct device *dev, unsigned long freq);
+@@ -74,6 +76,12 @@ static inline struct opp *opp_find_freq_ceil(struct device *dev,
+ return ERR_PTR(-EINVAL);
+ }
+
++static inline struct opp *opp_find_voltage(struct device *dev,
++ unsigned long volt)
++{
++ return ERR_PTR(-EINVAL);
++}
++
+ static inline int opp_add(struct device *dev, unsigned long freq,
+ unsigned long u_volt)
+ {
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch
new file mode 100644
index 0000000000..fe8f8ad4a3
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch
@@ -0,0 +1,182 @@
+From 5c54feed711491e187784004348b73bff75335c1 Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 29 Oct 2010 20:43:24 +0530
+Subject: [PATCH 08/19] OMAP: Introduce API to register a device with a voltagedomain
+
+This patch adds an API in the voltage layer that
+can be used during omap_device_build to register the built
+device with the voltage domain. This API is to be typically called
+only once per device during the device registeration. This approach
+makes it easy during dvfs to scale all the devices associated with
+a voltage domain and then scale the voltage domain.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/mach-omap2/voltage.c | 50 +++++++++++++++++++++++++++++
+ arch/arm/plat-omap/include/plat/voltage.h | 7 +++-
+ arch/arm/plat-omap/omap_device.c | 12 +++++++
+ 3 files changed, 68 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
+index 76c98c6..7381fa6 100644
+--- a/arch/arm/mach-omap2/voltage.c
++++ b/arch/arm/mach-omap2/voltage.c
+@@ -134,6 +134,11 @@ struct omap_vdd_user_list {
+ u32 volt;
+ };
+
++struct omap_vdd_dev_list {
++ struct device *dev;
++ struct list_head node;
++};
++
+ /**
+ * omap_vdd_info - Per Voltage Domain info
+ *
+@@ -153,6 +158,7 @@ struct omap_vdd_user_list {
+ * @user_list : the list head maintaining the various users.
+ * @scaling_mutex : the dvfs muutex.
+ * of this vdd with the voltage requested by each user.
++ * @dev_list : list of devices bwlonging to this voltage domain.
+ * @curr_volt : current voltage for this vdd.
+ * @ocp_mod : The prm module for accessing the prm irqstatus reg.
+ * @prm_irqst_reg : prm irqstatus register.
+@@ -170,6 +176,7 @@ struct omap_vdd_info {
+ spinlock_t user_lock;
+ struct plist_head user_list;
+ struct mutex scaling_mutex;
++ struct list_head dev_list;
+ u32 curr_volt;
+ u16 ocp_mod;
+ u8 prm_irqst_reg;
+@@ -1093,6 +1100,8 @@ static int __init omap4_vdd_data_configure(struct omap_vdd_info *vdd)
+ plist_head_init(&vdd->user_list, &vdd->user_lock);
+ /* Init the DVFS mutex */
+ mutex_init(&vdd->scaling_mutex);
++ /* Init the device list */
++ INIT_LIST_HEAD(&vdd->dev_list);
+
+ /* VC parameters */
+ vdd->vc_reg.prm_mod = OMAP4430_PRM_DEVICE_INST;
+@@ -1269,6 +1278,40 @@ int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
+ return 0;
+ }
+
++int omap_voltage_add_dev(struct voltagedomain *voltdm, struct device *dev)
++{
++ struct omap_vdd_info *vdd;
++ struct omap_vdd_dev_list *temp_dev;
++
++ if (!voltdm || IS_ERR(voltdm)) {
++ pr_warning("%s: VDD specified does not exist!\n", __func__);
++ return -EINVAL;
++ }
++
++ vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
++
++ list_for_each_entry(temp_dev, &vdd->dev_list, node) {
++ if (temp_dev->dev == dev) {
++ dev_warn(dev, "%s: Device already added to vdee_%s\n",
++ __func__, voltdm->name);
++ return -EINVAL;
++ }
++ }
++
++ temp_dev = kzalloc(sizeof(struct omap_vdd_dev_list), GFP_KERNEL);
++ if (!temp_dev) {
++ dev_err(dev, "%s: Unable to creat a new device for vdd_%s\n",
++ __func__, voltdm->name);
++ return -ENOMEM;
++ }
++
++ temp_dev->dev = dev;
++
++ list_add(&temp_dev->node, &vdd->dev_list);
++
++ return 0;
++}
++
+ /**
+ * omap_vp_enable() - API to enable a particular VP
+ * @voltdm: pointer to the VDD whose VP is to be enabled.
+@@ -1649,6 +1692,8 @@ int __init omap_voltage_late_init(void)
+ */
+ static int __init omap_voltage_early_init(void)
+ {
++ int i;
++
+ if (cpu_is_omap34xx()) {
+ vdd_info = omap3_vdd_info;
+ nr_scalable_vdd = OMAP3_NR_SCALABLE_VDD;
+@@ -1661,8 +1706,13 @@ static int __init omap_voltage_early_init(void)
+ vdd_data_configure = omap4_vdd_data_configure;
+ } else {
+ pr_warning("%s: voltage driver support not added\n", __func__);
++ return -EINVAL;
+ }
+
++ /* Init the device list */
++ for (i = 0; i < nr_scalable_vdd; i++)
++ INIT_LIST_HEAD(&(vdd_info[i].dev_list));
++
+ return 0;
+ }
+ core_initcall(omap_voltage_early_init);
+diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h
+index bd07eca..adbc6af 100644
+--- a/arch/arm/plat-omap/include/plat/voltage.h
++++ b/arch/arm/plat-omap/include/plat/voltage.h
+@@ -134,7 +134,7 @@ void omap_change_voltscale_method(struct voltagedomain *voltdm,
+ int omap_voltage_late_init(void);
+ int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
+ unsigned long *volt);
+-
++int omap_voltage_add_dev(struct voltagedomain *voltdm, struct device *dev);
+ #else
+ static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm,
+ struct omap_volt_pmic_info *pmic_info) {}
+@@ -149,6 +149,11 @@ static inline int omap_voltage_add_request(struct voltagedomain *voltdm,
+ {
+ return -EINVAL;
+ }
++static inline int omap_voltage_add_dev(struct voltagedomain *voltdm,
++ struct device *dev)
++{
++ return -EINVAL;
++}
+ #endif
+
+ #endif
+diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c
+index 57adb27..2c95e61 100644
+--- a/arch/arm/plat-omap/omap_device.c
++++ b/arch/arm/plat-omap/omap_device.c
+@@ -86,6 +86,7 @@
+
+ #include <plat/omap_device.h>
+ #include <plat/omap_hwmod.h>
++#include <plat/voltage.h>
+
+ /* These parameters are passed to _omap_device_{de,}activate() */
+ #define USE_WAKEUP_LAT 0
+@@ -481,6 +482,17 @@ struct omap_device *omap_device_build_ss(const char *pdev_name, int pdev_id,
+ for (i = 0; i < oh_cnt; i++) {
+ hwmods[i]->od = od;
+ _add_optional_clock_alias(od, hwmods[i]);
++ if (hwmods[i]->vdd_name) {
++ struct omap_hwmod *oh = hwmods[i];
++ struct voltagedomain *voltdm;
++
++ if (is_early_device)
++ continue;
++
++ voltdm = omap_voltage_domain_lookup(oh->vdd_name);
++ if (!omap_voltage_add_dev(voltdm, &od->pdev.dev))
++ oh->voltdm = voltdm;
++ }
+ }
+
+ if (ret)
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch
new file mode 100644
index 0000000000..8f40e0dcef
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch
@@ -0,0 +1,120 @@
+From 15e8b40fdbcc2b6037d8e13b146eb841fd582fbe Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 29 Oct 2010 20:43:29 +0530
+Subject: [PATCH 09/19] OMAP: Introduce device specific set rate and get rate in omap_device structure
+
+This patch extends the omap_device structure to contain
+pointers to scale the operating rate of the
+device and to retrieve the operating rate of the device.
+This patch also adds the three new APIs in the omap device layer
+namely omap_device_set_rate that can be called to set a new operating
+rate for a device, omap_device_get_rate that can be called to retrieve
+the operating frequency for a device and omap_device_populate_rate_fns
+to populte the device specific set_rate and get_rate API's.
+The omap_device_set_rate and omap_device_get_rate does some routine error
+checks and finally calls into the device specific set_rate
+and get_rate APIs populated through omap_device_populate_rate_fns.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/plat-omap/include/plat/omap_device.h | 9 +++++
+ arch/arm/plat-omap/omap_device.c | 49 +++++++++++++++++++++++++
+ 2 files changed, 58 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h
+index e4c349f..1178b86 100644
+--- a/arch/arm/plat-omap/include/plat/omap_device.h
++++ b/arch/arm/plat-omap/include/plat/omap_device.h
+@@ -50,6 +50,8 @@ extern struct device omap_device_parent;
+ * @hwmods: (one .. many per omap_device)
+ * @hwmods_cnt: ARRAY_SIZE() of @hwmods
+ * @pm_lats: ptr to an omap_device_pm_latency table
++ * @set_rate: fn ptr to change the operating rate.
++ * @get_rate: fn ptr to retrieve the current operating rate.
+ * @pm_lats_cnt: ARRAY_SIZE() of what is passed to @pm_lats
+ * @pm_lat_level: array index of the last odpl entry executed - -1 if never
+ * @dev_wakeup_lat: dev wakeup latency in nanoseconds
+@@ -67,6 +69,8 @@ struct omap_device {
+ struct platform_device pdev;
+ struct omap_hwmod **hwmods;
+ struct omap_device_pm_latency *pm_lats;
++ int (*set_rate)(struct device *dev, unsigned long rate);
++ unsigned long (*get_rate) (struct device *dev);
+ u32 dev_wakeup_lat;
+ u32 _dev_wakeup_lat_limit;
+ u8 pm_lats_cnt;
+@@ -108,6 +112,11 @@ int omap_device_align_pm_lat(struct platform_device *pdev,
+ u32 new_wakeup_lat_limit);
+ struct powerdomain *omap_device_get_pwrdm(struct omap_device *od);
+ u32 omap_device_get_context_loss_count(struct platform_device *pdev);
++int omap_device_set_rate(struct device *dev, unsigned long freq);
++unsigned long omap_device_get_rate(struct device *dev);
++void omap_device_populate_rate_fns(struct device *dev,
++ int (*set_rate)(struct device *dev, unsigned long rate),
++ unsigned long (*get_rate) (struct device *dev));
+
+ /* Other */
+
+diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c
+index 2c95e61..0d67af6 100644
+--- a/arch/arm/plat-omap/omap_device.c
++++ b/arch/arm/plat-omap/omap_device.c
+@@ -813,6 +813,55 @@ int omap_device_enable_clocks(struct omap_device *od)
+ return 0;
+ }
+
++int omap_device_set_rate(struct device *dev, unsigned long freq)
++{
++ struct platform_device *pdev;
++ struct omap_device *od;
++
++ pdev = container_of(dev, struct platform_device, dev);
++ od = _find_by_pdev(pdev);
++
++ if (!od->set_rate) {
++ dev_err(dev, "%s: No set_rate API for scaling device\n",
++ __func__);
++ return -ENODATA;
++ }
++
++ return od->set_rate(dev, freq);
++}
++
++unsigned long omap_device_get_rate(struct device *dev)
++{
++ struct platform_device *pdev;
++ struct omap_device *od;
++
++ pdev = container_of(dev, struct platform_device, dev);
++ od = _find_by_pdev(pdev);
++
++
++ if (!od->get_rate) {
++ dev_err(dev, "%s: No get rate API for the device\n",
++ __func__);
++ return 0;
++ }
++
++ return od->get_rate(dev);
++}
++
++void omap_device_populate_rate_fns(struct device *dev,
++ int (*set_rate)(struct device *dev, unsigned long rate),
++ unsigned long (*get_rate) (struct device *dev))
++{
++ struct platform_device *pdev;
++ struct omap_device *od;
++
++ pdev = container_of(dev, struct platform_device, dev);
++ od = _find_by_pdev(pdev);
++
++ od->set_rate = set_rate;
++ od->get_rate = get_rate;
++}
++
+ struct device omap_device_parent = {
+ .init_name = "omap",
+ .parent = &platform_bus,
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch
new file mode 100644
index 0000000000..97d36258e6
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch
@@ -0,0 +1,134 @@
+From 3ca22f6068d133ad1ddc578d7eaec6a3b08bd58a Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 29 Oct 2010 20:43:34 +0530
+Subject: [PATCH 10/19] OMAP: Voltage layer changes to support DVFS.
+
+This patch introduces an API to take in the voltage domain and the
+new voltage as parameter and to scale all the scalable devices
+associated with the the voltage domain to the rate corresponding to the
+new voltage and scale the voltage domain to the new voltage.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/mach-omap2/voltage.c | 69 +++++++++++++++++++++++++++++
+ arch/arm/plat-omap/include/plat/voltage.h | 7 +++
+ 2 files changed, 76 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
+index 7381fa6..9adf9d1 100644
+--- a/arch/arm/mach-omap2/voltage.c
++++ b/arch/arm/mach-omap2/voltage.c
+@@ -27,9 +27,11 @@
+ #include <linux/spinlock.h>
+ #include <linux/plist.h>
+ #include <linux/slab.h>
++#include <linux/opp.h>
+
+ #include <plat/common.h>
+ #include <plat/voltage.h>
++#include <plat/omap_device.h>
+
+ #include "prm-regbits-34xx.h"
+ #include "prm-regbits-44xx.h"
+@@ -1656,6 +1658,73 @@ struct voltagedomain *omap_voltage_domain_lookup(char *name)
+ }
+
+ /**
++ * omap_voltage_scale : API to scale the devices associated with a
++ * voltage domain vdd voltage.
++ * @volt_domain : the voltage domain to be scaled
++ * @volt : the new voltage for the voltage domain
++ *
++ * This API runs through the list of devices associated with the
++ * voltage domain and scales the device rates to those corresponding
++ * to the new voltage of the voltage domain. This API also scales
++ * the voltage domain voltage to the new value. Returns 0 on success
++ * else the error value.
++ */
++int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
++{
++ unsigned long curr_volt;
++ int is_volt_scaled = 0;
++ struct omap_vdd_info *vdd;
++ struct omap_vdd_dev_list *temp_dev;
++
++ if (!voltdm || IS_ERR(voltdm)) {
++ pr_warning("%s: VDD specified does not exist!\n", __func__);
++ return -EINVAL;
++ }
++
++ vdd = container_of(voltdm, struct omap_vdd_info, voltdm);
++
++ mutex_lock(&vdd->scaling_mutex);
++
++ curr_volt = omap_voltage_get_nom_volt(voltdm);
++
++ if (curr_volt == volt) {
++ is_volt_scaled = 1;
++ } else if (curr_volt < volt) {
++ omap_voltage_scale_vdd(voltdm, volt);
++ is_volt_scaled = 1;
++ }
++
++ list_for_each_entry(temp_dev, &vdd->dev_list, node) {
++ struct device *dev;
++ struct opp *opp;
++ unsigned long freq;
++
++ dev = temp_dev->dev;
++
++ opp = opp_find_voltage(dev, volt);
++ if (IS_ERR(opp))
++ continue;
++
++ freq = opp_get_freq(opp);
++
++ if (freq == omap_device_get_rate(dev)) {
++ dev_warn(dev, "%s: Already at the requested"
++ "rate %ld\n", __func__, freq);
++ continue;
++ }
++
++ omap_device_set_rate(dev, freq);
++ }
++
++ if (!is_volt_scaled)
++ omap_voltage_scale_vdd(voltdm, volt);
++
++ mutex_unlock(&vdd->scaling_mutex);
++
++ return 0;
++}
++
++/**
+ * omap_voltage_late_init() - Init the various voltage parameters
+ *
+ * This API is to be called in the later stages of the
+diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h
+index adbc6af..6782c5e 100644
+--- a/arch/arm/plat-omap/include/plat/voltage.h
++++ b/arch/arm/plat-omap/include/plat/voltage.h
+@@ -135,6 +135,7 @@ int omap_voltage_late_init(void);
+ int omap_voltage_add_request(struct voltagedomain *voltdm, struct device *dev,
+ unsigned long *volt);
+ int omap_voltage_add_dev(struct voltagedomain *voltdm, struct device *dev);
++int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt);
+ #else
+ static inline int omap_voltage_register_pmic(struct voltagedomain *voltdm,
+ struct omap_volt_pmic_info *pmic_info) {}
+@@ -154,6 +155,12 @@ static inline int omap_voltage_add_dev(struct voltagedomain *voltdm,
+ {
+ return -EINVAL;
+ }
++
++static inline int omap_voltage_scale(struct voltagedomain *voltdm,
++ unsigned long volt)
++{
++ return -EINVAL;
++}
+ #endif
+
+ #endif
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch
new file mode 100644
index 0000000000..5e39857342
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch
@@ -0,0 +1,195 @@
+From d9699d436927644fbe6567082703d9f3c733925c Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 2 Jul 2010 13:06:57 +0530
+Subject: [PATCH 11/19] OMAP: Introduce dependent voltage domain support.
+
+There could be dependencies between various voltage domains for
+maintaining system performance or hardware limitation reasons
+like VDD<X> should be at voltage v1 when VDD<Y> is at voltage v2.
+This patch introduce dependent vdd information structures in the
+voltage layer which can be used to populate these dependencies
+for a voltage domain. This patch also adds support to scale
+the dependent vdd and the scalable devices belonging to it
+during the scaling of a main vdd through omap_voltage_scale.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/mach-omap2/voltage.c | 122 +++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 122 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
+index 9adf9d1..c83d968 100644
+--- a/arch/arm/mach-omap2/voltage.c
++++ b/arch/arm/mach-omap2/voltage.c
+@@ -123,6 +123,36 @@ struct vc_reg_info {
+ };
+
+ /**
++ * omap_vdd_dep_volt - Table containing the parent vdd voltage and the
++ * dependent vdd voltage corresponding to it.
++ *
++ * @main_vdd_volt : The main vdd voltage
++ * @dep_vdd_volt : The voltage at which the dependent vdd should be
++ * when the main vdd is at <main_vdd_volt> voltage
++ */
++struct omap_vdd_dep_volt {
++ u32 main_vdd_volt;
++ u32 dep_vdd_volt;
++};
++
++/**
++ * omap_vdd_dep_info - Dependent vdd info
++ *
++ * @name : Dependent vdd name
++ * @voltdm : Dependent vdd pointer
++ * @dep_table : Table containing the dependent vdd voltage
++ * corresponding to every main vdd voltage.
++ * @cur_dep_volt : The voltage to which dependent vdd should be put
++ * to for the current main vdd voltage.
++ */
++struct omap_vdd_dep_info {
++ char *name;
++ struct voltagedomain *voltdm;
++ struct omap_vdd_dep_volt *dep_table;
++ unsigned long cur_dep_volt;
++};
++
++/**
+ * struct omap_vdd_user_list - The per vdd user list
+ *
+ * @dev: The device asking for the vdd to be set at a particular
+@@ -174,11 +204,13 @@ struct omap_vdd_info {
+ struct vp_reg_val vp_reg;
+ struct vc_reg_info vc_reg;
+ struct voltagedomain voltdm;
++ struct omap_vdd_dep_info *dep_vdd_info;
+ struct dentry *debug_dir;
+ spinlock_t user_lock;
+ struct plist_head user_list;
+ struct mutex scaling_mutex;
+ struct list_head dev_list;
++ int nr_dep_vdd;
+ u32 curr_volt;
+ u16 ocp_mod;
+ u8 prm_irqst_reg;
+@@ -1160,6 +1192,80 @@ static int __init omap4_vdd_data_configure(struct omap_vdd_info *vdd)
+ return 0;
+ }
+
++static int calc_dep_vdd_volt(struct device *dev,
++ struct omap_vdd_info *main_vdd, unsigned long main_volt)
++{
++ struct omap_vdd_dep_info *dep_vdds;
++ int i, ret = 0;
++
++ if (!main_vdd->dep_vdd_info) {
++ pr_debug("%s: No dependent VDD's for vdd_%s\n",
++ __func__, main_vdd->voltdm.name);
++ return 0;
++ }
++
++ dep_vdds = main_vdd->dep_vdd_info;
++
++ for (i = 0; i < main_vdd->nr_dep_vdd; i++) {
++ struct omap_vdd_dep_volt *volt_table = dep_vdds[i].dep_table;
++ int nr_volt = 0;
++ unsigned long dep_volt = 0, act_volt = 0;
++
++ while (volt_table[nr_volt].main_vdd_volt != 0) {
++ if (volt_table[nr_volt].main_vdd_volt == main_volt) {
++ dep_volt = volt_table[nr_volt].dep_vdd_volt;
++ break;
++ }
++ nr_volt++;
++ }
++ if (!dep_volt) {
++ pr_warning("%s: Not able to find a matching volt for"
++ "vdd_%s corresponding to vdd_%s %ld volt\n",
++ __func__, dep_vdds[i].name,
++ main_vdd->voltdm.name, main_volt);
++ ret = -EINVAL;
++ continue;
++ }
++
++ if (!dep_vdds[i].voltdm)
++ dep_vdds[i].voltdm =
++ omap_voltage_domain_lookup(dep_vdds[i].name);
++
++ act_volt = dep_volt;
++
++ /* See if dep_volt is possible for the vdd*/
++ ret = omap_voltage_add_request(dep_vdds[i].voltdm, dev,
++ &act_volt);
++
++ /*
++ * Currently we do not bother if the dep volt and act volt are
++ * different. We could add a check if needed.
++ */
++ dep_vdds[i].cur_dep_volt = act_volt;
++ }
++
++ return ret;
++}
++
++static int scale_dep_vdd(struct omap_vdd_info *main_vdd)
++{
++ struct omap_vdd_dep_info *dep_vdds;
++ int i;
++
++ if (!main_vdd->dep_vdd_info) {
++ pr_debug("%s: No dependent VDD's for vdd_%s\n",
++ __func__, main_vdd->voltdm.name);
++ return 0;
++ }
++
++ dep_vdds = main_vdd->dep_vdd_info;
++
++ for (i = 0; i < main_vdd->nr_dep_vdd; i++)
++ omap_voltage_scale(dep_vdds[i].voltdm,
++ dep_vdds[i].cur_dep_volt);
++ return 0;
++}
++
+ /* Public functions */
+ /**
+ * omap_voltage_get_nom_volt() - Gets the current non-auto-compensated voltage
+@@ -1675,6 +1781,8 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
+ int is_volt_scaled = 0;
+ struct omap_vdd_info *vdd;
+ struct omap_vdd_dev_list *temp_dev;
++ struct plist_node *node;
++ struct omap_vdd_user_list *user;
+
+ if (!voltdm || IS_ERR(voltdm)) {
+ pr_warning("%s: VDD specified does not exist!\n", __func__);
+@@ -1687,6 +1795,17 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
+
+ curr_volt = omap_voltage_get_nom_volt(voltdm);
+
++ /* Find the device requesting the voltage scaling */
++ node = plist_first(&vdd->user_list);
++ user = container_of(node, struct omap_vdd_user_list, node);
++
++ /* calculate the voltages for dependent vdd's */
++ if (calc_dep_vdd_volt(user->dev, vdd, volt)) {
++ pr_warning("%s: Error in calculating dependent vdd voltages"
++ "for vdd_%s\n", __func__, voltdm->name);
++ return -EINVAL;
++ }
++
+ if (curr_volt == volt) {
+ is_volt_scaled = 1;
+ } else if (curr_volt < volt) {
+@@ -1721,6 +1840,9 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
+
+ mutex_unlock(&vdd->scaling_mutex);
+
++ /* Scale dependent vdds */
++ scale_dep_vdd(vdd);
++
+ return 0;
+ }
+
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0012-OMAP-Introduce-device-scale.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0012-OMAP-Introduce-device-scale.patch
new file mode 100644
index 0000000000..348ef89e97
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0012-OMAP-Introduce-device-scale.patch
@@ -0,0 +1,134 @@
+From 9753d84bdd3903574e9be1c895dcc91524a70463 Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 2 Jul 2010 13:07:35 +0530
+Subject: [PATCH 12/19] OMAP: Introduce device scale
+
+This patch adds omap_device_scale API which can be used to generic
+device rate scaling.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/plat-omap/include/plat/omap_device.h | 3 +-
+ arch/arm/plat-omap/omap_device.c | 78 +++++++++++++++++++++++++
+ 2 files changed, 80 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h
+index 1178b86..e44a0f7 100644
+--- a/arch/arm/plat-omap/include/plat/omap_device.h
++++ b/arch/arm/plat-omap/include/plat/omap_device.h
+@@ -117,6 +117,8 @@ unsigned long omap_device_get_rate(struct device *dev);
+ void omap_device_populate_rate_fns(struct device *dev,
+ int (*set_rate)(struct device *dev, unsigned long rate),
+ unsigned long (*get_rate) (struct device *dev));
++int omap_device_scale(struct device *req_dev, struct device *dev,
++ unsigned long rate);
+
+ /* Other */
+
+@@ -126,7 +128,6 @@ int omap_device_enable_hwmods(struct omap_device *od);
+ int omap_device_disable_clocks(struct omap_device *od);
+ int omap_device_enable_clocks(struct omap_device *od);
+
+-
+ /*
+ * Entries should be kept in latency order ascending
+ *
+diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c
+index 0d67af6..458d648 100644
+--- a/arch/arm/plat-omap/omap_device.c
++++ b/arch/arm/plat-omap/omap_device.c
+@@ -83,6 +83,7 @@
+ #include <linux/err.h>
+ #include <linux/io.h>
+ #include <linux/clk.h>
++#include <linux/opp.h>
+
+ #include <plat/omap_device.h>
+ #include <plat/omap_hwmod.h>
+@@ -862,6 +863,83 @@ void omap_device_populate_rate_fns(struct device *dev,
+ od->get_rate = get_rate;
+ }
+
++/**
++ * omap_device_scale() - Set a new rate at which the device is to operate
++ * @req_dev: pointer to the device requesting the scaling.
++ * @dev: pointer to the device that is to be scaled
++ * @rate: the rnew rate for the device.
++ *
++ * This API gets the device opp table associated with this device and
++ * tries putting the device to the requested rate and the voltage domain
++ * associated with the device to the voltage corresponding to the
++ * requested rate. Since multiple devices can be assocciated with a
++ * voltage domain this API finds out the possible voltage the
++ * voltage domain can enter and then decides on the final device
++ * rate. Return 0 on success else the error value
++ */
++int omap_device_scale(struct device *req_dev, struct device *dev,
++ unsigned long rate)
++{
++ struct opp *opp;
++ unsigned long volt, freq, min_freq, max_freq;
++ struct voltagedomain *voltdm;
++ struct platform_device *pdev;
++ struct omap_device *od;
++ int ret;
++
++ pdev = container_of(dev, struct platform_device, dev);
++ od = _find_by_pdev(pdev);
++
++ /*
++ * Figure out if the desired frquency lies between the
++ * maximum and minimum possible for the particular device
++ */
++ min_freq = 0;
++ if (IS_ERR(opp_find_freq_ceil(dev, &min_freq))) {
++ dev_err(dev, "%s: Unable to find lowest opp\n", __func__);
++ return -ENODEV;
++ }
++
++ max_freq = ULONG_MAX;
++ if (IS_ERR(opp_find_freq_floor(dev, &max_freq))) {
++ dev_err(dev, "%s: Unable to find highest opp\n", __func__);
++ return -ENODEV;
++ }
++
++ if (rate < min_freq)
++ freq = min_freq;
++ else if (rate > max_freq)
++ freq = max_freq;
++ else
++ freq = rate;
++
++ opp = opp_find_freq_ceil(dev, &freq);
++ if (IS_ERR(opp)) {
++ dev_err(dev, "%s: Unable to find OPP for freq%ld\n",
++ __func__, rate);
++ return -ENODEV;
++ }
++
++ /* Get the voltage corresponding to the requested frequency */
++ volt = opp_get_voltage(opp);
++
++ /*
++ * Call into the voltage layer to get the final voltage possible
++ * for the voltage domain associated with the device.
++ */
++ voltdm = od->hwmods[0]->voltdm;
++ ret = omap_voltage_add_request(voltdm, req_dev, &volt);
++ if (ret) {
++ dev_err(dev, "%s: Unable to get the final volt for scaling\n",
++ __func__);
++ return ret;
++ }
++
++ /* Do the actual scaling */
++ return omap_voltage_scale(voltdm, volt);
++}
++EXPORT_SYMBOL(omap_device_scale);
++
+ struct device omap_device_parent = {
+ .init_name = "omap",
+ .parent = &platform_bus,
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch
new file mode 100644
index 0000000000..e7128239f8
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch
@@ -0,0 +1,50 @@
+From ef538867a4de14bfe5b6d7f2e7cdf1704c9e0bb4 Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 2 Jul 2010 13:06:57 +0530
+Subject: [PATCH 13/19] OMAP: Disable smartreflex across DVFS
+
+This patch disables smartreflex for a particular voltage
+domain when the the voltage domain and the devices belonging
+to it is being scaled and re-enables it back once the scaling
+is done.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/mach-omap2/voltage.c | 7 +++++++
+ 1 files changed, 7 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
+index c83d968..2f331de 100644
+--- a/arch/arm/mach-omap2/voltage.c
++++ b/arch/arm/mach-omap2/voltage.c
+@@ -32,6 +32,7 @@
+ #include <plat/common.h>
+ #include <plat/voltage.h>
+ #include <plat/omap_device.h>
++#include <plat/smartreflex.h>
+
+ #include "prm-regbits-34xx.h"
+ #include "prm-regbits-44xx.h"
+@@ -1806,6 +1807,9 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
+ return -EINVAL;
+ }
+
++ /* Disable smartreflex module across voltage and frequency scaling */
++ omap_sr_disable(voltdm);
++
+ if (curr_volt == volt) {
+ is_volt_scaled = 1;
+ } else if (curr_volt < volt) {
+@@ -1840,6 +1844,9 @@ int omap_voltage_scale(struct voltagedomain *voltdm, unsigned long volt)
+
+ mutex_unlock(&vdd->scaling_mutex);
+
++ /* Enable Smartreflex module */
++ omap_sr_enable(voltdm);
++
+ /* Scale dependent vdds */
+ scale_dep_vdd(vdd);
+
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch
new file mode 100644
index 0000000000..9321464149
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch
@@ -0,0 +1,176 @@
+From d3c60c04fac19bde2dd3b930fd659426557d9cae Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Wed, 18 Aug 2010 16:22:32 +0530
+Subject: [PATCH 14/19] OMAP3: Introduce custom set rate and get rate APIs for scalable devices
+
+This patch also introduces omap3_mpu_set_rate, omap3_iva_set_rate,
+omap3_l3_set_rate, omap3_mpu_get_rate, omap3_iva_get_rate,
+omap3_l3_get_rate as device specific set rate and get rate
+APIs for OMAP3 mpu, iva and l3_main devices. This patch also
+calls into omap_device_populate_rate_fns during system init to register
+various set_rate and get_rate APIs with the omap device layer
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/mach-omap2/pm.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++
+ 1 files changed, 110 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
+index d5a102c..94ab0dd 100644
+--- a/arch/arm/mach-omap2/pm.c
++++ b/arch/arm/mach-omap2/pm.c
+@@ -14,6 +14,7 @@
+ #include <linux/io.h>
+ #include <linux/err.h>
+ #include <linux/opp.h>
++#include <linux/delay.h>
+
+ #include <plat/omap-pm.h>
+ #include <plat/omap_device.h>
+@@ -22,6 +23,8 @@
+
+ #include "powerdomain.h"
+ #include "clockdomain.h"
++#include "cm-regbits-34xx.h"
++#include "cm2xxx_3xxx.h"
+ #include "pm.h"
+
+ static struct omap_device_pm_latency *pm_lats;
+@@ -31,6 +34,8 @@ static struct device *iva_dev;
+ static struct device *l3_dev;
+ static struct device *dsp_dev;
+
++static struct clk *dpll1_clk, *dpll2_clk, *dpll3_clk;
++
+ struct device *omap2_get_mpuss_device(void)
+ {
+ WARN_ON_ONCE(!mpu_dev);
+@@ -56,6 +61,26 @@ struct device *omap4_get_dsp_device(void)
+ }
+ EXPORT_SYMBOL(omap4_get_dsp_device);
+
++static unsigned long compute_lpj(unsigned long ref, u_int div, u_int mult)
++{
++ unsigned long new_jiffy_l, new_jiffy_h;
++
++ /*
++ * Recalculate loops_per_jiffy. We do it this way to
++ * avoid math overflow on 32-bit machines. Maybe we
++ * should make this architecture dependent? If you have
++ * a better way of doing this, please replace!
++ *
++ * new = old * mult / div
++ */
++ new_jiffy_h = ref / div;
++ new_jiffy_l = (ref % div) / 100;
++ new_jiffy_h *= mult;
++ new_jiffy_l = new_jiffy_l * mult / div;
++
++ return new_jiffy_h + new_jiffy_l * 100;
++}
++
+ /* static int _init_omap_device(struct omap_hwmod *oh, void *user) */
+ static int _init_omap_device(char *name, struct device **new_dev)
+ {
+@@ -77,6 +102,74 @@ static int _init_omap_device(char *name, struct device **new_dev)
+ return 0;
+ }
+
++static unsigned long omap3_mpu_get_rate(struct device *dev)
++{
++ return dpll1_clk->rate;
++}
++
++static int omap3_mpu_set_rate(struct device *dev, unsigned long rate)
++{
++ unsigned long cur_rate = omap3_mpu_get_rate(dev);
++ int ret;
++
++#ifdef CONFIG_CPU_FREQ
++ struct cpufreq_freqs freqs_notify;
++
++ freqs_notify.old = cur_rate / 1000;
++ freqs_notify.new = rate / 1000;
++ freqs_notify.cpu = 0;
++ /* Send pre notification to CPUFreq */
++ cpufreq_notify_transition(&freqs_notify, CPUFREQ_PRECHANGE);
++#endif
++ ret = clk_set_rate(dpll1_clk, rate);
++ if (ret) {
++ dev_warn(dev, "%s: Unable to set rate to %ld\n",
++ __func__, rate);
++ return ret;
++ }
++
++#ifdef CONFIG_CPU_FREQ
++ /* Send a post notification to CPUFreq */
++ cpufreq_notify_transition(&freqs_notify, CPUFREQ_POSTCHANGE);
++#endif
++
++#ifndef CONFIG_CPU_FREQ
++ /*Update loops_per_jiffy if processor speed is being changed*/
++ loops_per_jiffy = compute_lpj(loops_per_jiffy,
++ cur_rate / 1000, rate / 1000);
++#endif
++ return 0;
++}
++
++static int omap3_iva_set_rate(struct device *dev, unsigned long rate)
++{
++ return clk_set_rate(dpll2_clk, rate);
++}
++
++static unsigned long omap3_iva_get_rate(struct device *dev)
++{
++ return dpll2_clk->rate;
++}
++
++static int omap3_l3_set_rate(struct device *dev, unsigned long rate)
++{
++ int l3_div;
++
++ l3_div = omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL) &
++ OMAP3430_CLKSEL_L3_MASK;
++
++ return clk_set_rate(dpll3_clk, rate * l3_div);
++}
++
++static unsigned long omap3_l3_get_rate(struct device *dev)
++{
++ int l3_div;
++
++ l3_div = omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL) &
++ OMAP3430_CLKSEL_L3_MASK;
++ return dpll3_clk->rate / l3_div;
++}
++
+ /*
+ * Build omap_devices for processors and bus.
+ */
+@@ -90,6 +183,23 @@ static void omap2_init_processor_devices(void)
+ } else {
+ _init_omap_device("l3_main", &l3_dev);
+ }
++
++ if (cpu_is_omap34xx()) {
++ dpll1_clk = clk_get(NULL, "dpll1_ck");
++ dpll2_clk = clk_get(NULL, "dpll2_ck");
++ dpll3_clk = clk_get(NULL, "dpll3_m2_ck");
++
++ if (mpu_dev)
++ omap_device_populate_rate_fns(mpu_dev,
++ omap3_mpu_set_rate, omap3_mpu_get_rate);
++ if (iva_dev)
++ omap_device_populate_rate_fns(iva_dev,
++ omap3_iva_set_rate, omap3_iva_get_rate);
++ if (l3_dev)
++ omap_device_populate_rate_fns(l3_dev,
++ omap3_l3_set_rate, omap3_l3_get_rate);
++
++ }
+ }
+
+ /* Types of sleep_switch used in omap_set_pwrdm_state */
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch
new file mode 100644
index 0000000000..c3b5ba6899
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch
@@ -0,0 +1,54 @@
+From 7fbd0c4b60534401287ae4a0410e82853f7dc015 Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Fri, 2 Jul 2010 13:07:49 +0530
+Subject: [PATCH 15/19] OMAP3: Update cpufreq driver to use the new set_rate API
+
+This patch updates the cpufreq driver to use the device
+set rate API to scale the mpu frequency for OMAP3.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/plat-omap/cpu-omap.c | 11 ++++-------
+ 1 files changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
+index 671e4b9..71777db 100644
+--- a/arch/arm/plat-omap/cpu-omap.c
++++ b/arch/arm/plat-omap/cpu-omap.c
+@@ -31,10 +31,7 @@
+ #include <plat/clock.h>
+ #include <plat/common.h>
+ #include <asm/system.h>
+-
+-#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
+-#include <plat/omap-pm.h>
+-#endif
++#include <plat/omap_device.h>
+
+ #define VERY_HI_RATE 900000000
+
+@@ -88,7 +85,7 @@ static int omap_target(struct cpufreq_policy *policy,
+ #ifdef CONFIG_ARCH_OMAP1
+ struct cpufreq_freqs freqs;
+ #endif
+-#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
++#if defined(CONFIG_ARCH_OMAP3)
+ unsigned long freq;
+ struct device *mpu_dev = omap2_get_mpuss_device();
+ #endif
+@@ -115,10 +112,10 @@ static int omap_target(struct cpufreq_policy *policy,
+ #endif
+ ret = clk_set_rate(mpu_clk, freqs.new * 1000);
+ cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
+-#elif defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
++#elif defined(CONFIG_ARCH_OMAP3)
+ freq = target_freq * 1000;
+ if (opp_find_freq_ceil(mpu_dev, &freq))
+- omap_pm_cpu_set_freq(freq);
++ omap_device_scale(mpu_dev, mpu_dev, freq);
+ #endif
+ return ret;
+ }
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch
new file mode 100644
index 0000000000..304c05de39
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch
@@ -0,0 +1,45 @@
+From e6d31285f54a9ba2bd6b73f4562e2d28b06c8141 Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Wed, 18 Aug 2010 16:22:43 +0530
+Subject: [PATCH 16/19] OMAP3: Introduce voltage domain info in the hwmod structures.
+
+This patch adds voltage domain info in the relevant
+device hwmod structures so as to enable OMAP3 DVFS
+support.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+index 8d81813..c57f34d 100644
+--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
++++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+@@ -94,6 +94,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
+ static struct omap_hwmod omap3xxx_l3_main_hwmod = {
+ .name = "l3_main",
+ .class = &l3_hwmod_class,
++ .vdd_name = "core",
+ .masters = omap3xxx_l3_main_masters,
+ .masters_cnt = ARRAY_SIZE(omap3xxx_l3_main_masters),
+ .slaves = omap3xxx_l3_main_slaves,
+@@ -384,6 +385,7 @@ static struct omap_hwmod omap3xxx_mpu_hwmod = {
+ .name = "mpu",
+ .class = &mpu_hwmod_class,
+ .main_clk = "arm_fck",
++ .vdd_name = "mpu",
+ .masters = omap3xxx_mpu_masters,
+ .masters_cnt = ARRAY_SIZE(omap3xxx_mpu_masters),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+@@ -412,6 +414,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_iva_masters[] = {
+ static struct omap_hwmod omap3xxx_iva_hwmod = {
+ .name = "iva",
+ .class = &iva_hwmod_class,
++ .vdd_name = "mpu",
+ .masters = omap3xxx_iva_masters,
+ .masters_cnt = ARRAY_SIZE(omap3xxx_iva_masters),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430)
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch
new file mode 100644
index 0000000000..9d693738f3
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch
@@ -0,0 +1,61 @@
+From 355fc21a8cc5ba290bb5f2c0c059356cec84d3b0 Mon Sep 17 00:00:00 2001
+From: Thara Gopinath <thara@ti.com>
+Date: Wed, 18 Aug 2010 16:22:49 +0530
+Subject: [PATCH 17/19] OMAP3: Add voltage dependency table for VDD1.
+
+In OMAP3, for perfomrance reasons when VDD1 is at voltage above
+1.075V, VDD2 should be at 1.15V for perfomrance reasons. This
+patch introduce this cross VDD dependency for OMAP3 VDD1.
+
+Signed-off-by: Thara Gopinath <thara@ti.com>
+---
+ arch/arm/mach-omap2/voltage.c | 24 ++++++++++++++++++++++--
+ 1 files changed, 22 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
+index 2f331de..d10cb1b 100644
+--- a/arch/arm/mach-omap2/voltage.c
++++ b/arch/arm/mach-omap2/voltage.c
+@@ -374,6 +374,23 @@ static struct omap_volt_data omap44xx_vdd_core_volt_data[] = {
+ VOLT_DATA_DEFINE(0, 0, 0, 0),
+ };
+
++/* OMAP 3430 MPU Core VDD dependency table */
++static struct omap_vdd_dep_volt omap34xx_vdd1_vdd2_data[] = {
++ {.main_vdd_volt = 975000, .dep_vdd_volt = 1050000},
++ {.main_vdd_volt = 1075000, .dep_vdd_volt = 1050000},
++ {.main_vdd_volt = 1200000, .dep_vdd_volt = 1150000},
++ {.main_vdd_volt = 1270000, .dep_vdd_volt = 1150000},
++ {.main_vdd_volt = 1350000, .dep_vdd_volt = 1150000},
++ {.main_vdd_volt = 0, .dep_vdd_volt = 0},
++};
++
++static struct omap_vdd_dep_info omap34xx_vdd1_dep_info[] = {
++ {
++ .name = "core",
++ .dep_table = omap34xx_vdd1_vdd2_data,
++ },
++};
++
+ static struct dentry *voltage_dir;
+
+ /* Init function pointers */
+@@ -879,10 +896,13 @@ static int __init omap3_vdd_data_configure(struct omap_vdd_info *vdd)
+ }
+
+ if (!strcmp(vdd->voltdm.name, "mpu")) {
+- if (cpu_is_omap3630())
++ if (cpu_is_omap3630()) {
+ vdd->volt_data = omap36xx_vddmpu_volt_data;
+- else
++ } else {
+ vdd->volt_data = omap34xx_vddmpu_volt_data;
++ vdd->dep_vdd_info = omap34xx_vdd1_dep_info;
++ vdd->nr_dep_vdd = ARRAY_SIZE(omap34xx_vdd1_dep_info);
++ }
+
+ vdd->vp_reg.tranxdone_status = OMAP3430_VP1_TRANXDONE_ST_MASK;
+ vdd->vc_reg.cmdval_reg = OMAP3_PRM_VC_CMD_VAL_0_OFFSET;
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch
new file mode 100644
index 0000000000..b0a5aae233
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch
@@ -0,0 +1,62 @@
+From 68c0c6abf0d44bb8b04a52de25d46b943f144ee7 Mon Sep 17 00:00:00 2001
+From: Nishanth Menon <nm@ti.com>
+Date: Wed, 5 Jan 2011 14:14:55 -0600
+Subject: [PATCH 18/19] omap3|4: opp: make omapx_opp_init non-static
+
+omap3 and omap4 opp_init should be made non-static to allow
+for platform specific opp table tweaking. making these static
+conflicts with the definition in pm.h(global) as well.
+we include pm.h as well to ensure that there are no such prototype
+conflicts with actual implementation in the future.
+
+Signed-off-by: Nishanth Menon <nm@ti.com>
+---
+ arch/arm/mach-omap2/opp3xxx_data.c | 3 ++-
+ arch/arm/mach-omap2/opp4xxx_data.c | 3 ++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c
+index 0486fce..fd3a1af 100644
+--- a/arch/arm/mach-omap2/opp3xxx_data.c
++++ b/arch/arm/mach-omap2/opp3xxx_data.c
+@@ -21,6 +21,7 @@
+ #include <plat/cpu.h>
+
+ #include "omap_opp_data.h"
++#include "pm.h"
+
+ static struct omap_opp_def __initdata omap34xx_opp_def_list[] = {
+ /* MPU OPP1 */
+@@ -88,7 +89,7 @@ static struct omap_opp_def __initdata omap36xx_opp_def_list[] = {
+ /**
+ * omap3_opp_init() - initialize omap3 opp table
+ */
+-static int __init omap3_opp_init(void)
++int __init omap3_opp_init(void)
+ {
+ int r = -ENODEV;
+
+diff --git a/arch/arm/mach-omap2/opp4xxx_data.c b/arch/arm/mach-omap2/opp4xxx_data.c
+index a11fa56..f0e9939 100644
+--- a/arch/arm/mach-omap2/opp4xxx_data.c
++++ b/arch/arm/mach-omap2/opp4xxx_data.c
+@@ -22,6 +22,7 @@
+ #include <plat/cpu.h>
+
+ #include "omap_opp_data.h"
++#include "pm.h"
+
+ static struct omap_opp_def __initdata omap44xx_opp_def_list[] = {
+ /* MPU OPP1 - OPP50 */
+@@ -42,7 +43,7 @@ static struct omap_opp_def __initdata omap44xx_opp_def_list[] = {
+ /**
+ * omap4_opp_init() - initialize omap4 opp table
+ */
+-static int __init omap4_opp_init(void)
++int __init omap4_opp_init(void)
+ {
+ int r = -ENODEV;
+
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch b/recipes/linux/linux-omap-2.6.37rc/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch
new file mode 100644
index 0000000000..673aa5e2ba
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.37rc/dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch
@@ -0,0 +1,107 @@
+From bdb9ac28213f647a620f4df4a50d94953db5184f Mon Sep 17 00:00:00 2001
+From: Nishanth Menon <nm@ti.com>
+Date: Wed, 5 Jan 2011 14:16:59 -0600
+Subject: [PATCH 19/19] OMAP3: beagle xm: enable upto 1GHz OPP
+
+Beagle XM uses 3730 and the board design allows enabling 800MHz and 1GHz
+OPPs. tweak the default table to allow for higher OPP tables
+
+Reported-by: Koen Kooi <koen@beagleboard.org>
+Signed-off-by: Nishanth Menon <nm@ti.com>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 54 +++++++++++++++++++++++++++++++
+ 1 files changed, 54 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 006dc26..9393e75 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -24,6 +24,7 @@
+ #include <linux/irq.h>
+ #include <linux/input.h>
+ #include <linux/gpio_keys.h>
++#include <linux/opp.h>
+
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+@@ -45,10 +46,12 @@
+ #include <plat/gpmc.h>
+ #include <plat/nand.h>
+ #include <plat/usb.h>
++#include <plat/omap_device.h>
+
+ #include "mux.h"
+ #include "hsmmc.h"
+ #include "timer-gp.h"
++#include "pm.h"
+
+ #define NAND_BLOCK_SIZE SZ_128K
+
+@@ -778,6 +781,56 @@ static int __init expansionboard_setup(char *str)
+ return 0;
+ }
+
++static void __init beagle_opp_init(void)
++{
++ int r = 0;
++
++ /* Initialize the omap3 opp table */
++ if (omap3_opp_init()) {
++ pr_err("%s: opp default init failed\n", __func__);
++ return;
++ }
++
++ /* Custom OPP enabled for XM */
++ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
++ struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
++ struct omap_hwmod *dh = omap_hwmod_lookup("iva");
++ struct device *dev;
++
++ if (!mh || !dh) {
++ pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
++ __func__, mh, dh);
++ r = -EINVAL;
++ } else {
++ /* Enable MPU 1GHz and lower opps */
++ dev = &mh->od->pdev.dev;
++ r = opp_enable(dev, 800000000);
++ r |= opp_enable(dev, 1000000000);
++
++ /* Enable IVA 800MHz and lower opps */
++ dev = &dh->od->pdev.dev;
++ r |= opp_enable(dev, 660000000);
++ r |= opp_enable(dev, 800000000);
++ }
++ if (r) {
++ pr_err("%s: failed to enable higher opp %d\n",
++ __func__, r);
++ /*
++ * Cleanup - disable the higher freqs - we dont care
++ * about the results
++ */
++ dev = &mh->od->pdev.dev;
++ opp_disable(dev, 800000000);
++ opp_disable(dev, 1000000000);
++ dev = &dh->od->pdev.dev;
++ opp_disable(dev, 660000000);
++ opp_disable(dev, 800000000);
++ } else {
++ pr_err("%s: turbo OPPs enabled!\n", __func__);
++ }
++ }
++}
++
+ static void __init omap3_beagle_init(void)
+ {
+ omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+@@ -850,6 +903,7 @@ static void __init omap3_beagle_init(void)
+ omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
+
+ beagle_display_init();
++ beagle_opp_init();
+ }
+
+ early_param("buddy", expansionboard_setup);
+--
+1.6.6.1
+
diff --git a/recipes/linux/linux-omap-2.6.37rc/0027-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch b/recipes/linux/linux-omap-2.6.37rc/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch
index 6e9d3c09dd..2fcef66a91 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0027-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch
@@ -1,7 +1,7 @@
-From 98d0c3ce9209fe34699ec99aa90efab39fe05c36 Mon Sep 17 00:00:00 2001
+From a6e1f70eca0fcc9899e949f7ecb30b0fa483f590 Mon Sep 17 00:00:00 2001
From: Philip Balister <balister@nomad.(none)>
Date: Wed, 17 Feb 2010 14:51:39 -0800
-Subject: [PATCH 27/29] Add defines to set config options in GPMC per CS control registers.
+Subject: [PATCH 01/22] Add defines to set config options in GPMC per CS control registers.
---
arch/arm/plat-omap/include/plat/gpmc.h | 36 ++++++++++++++++++++++++++++++++
diff --git a/recipes/linux/linux-omap-2.6.37rc/0028-Add-functions-to-dma.c-to-set-address-and-length-for.patch b/recipes/linux/linux-omap-2.6.37rc/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch
index 0ae578dbe5..22305f3519 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0028-Add-functions-to-dma.c-to-set-address-and-length-for.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch
@@ -1,7 +1,7 @@
-From 5469329878e4bdb38fe39fc95676d9b752b1528f Mon Sep 17 00:00:00 2001
+From a734ac5eef1dd8ee8cba4eea5d2db568247c484c Mon Sep 17 00:00:00 2001
From: Philip Balister <philip@opensdr.com>
Date: Thu, 22 Apr 2010 19:41:58 -0700
-Subject: [PATCH 28/29] Add functions to dma.c to set address and length for src and dest.
+Subject: [PATCH 02/22] Add functions to dma.c to set address and length for src and dest.
---
arch/arm/plat-omap/dma.c | 30 ++++++++++++++++++++++++++++++
diff --git a/recipes/linux/linux-omap-2.6.37rc/0029-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch b/recipes/linux/linux-omap-2.6.37rc/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch
index 9a7133f649..98a6d3b711 100644
--- a/recipes/linux/linux-omap-2.6.37rc/0029-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch
+++ b/recipes/linux/linux-omap-2.6.37rc/usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch
@@ -1,7 +1,7 @@
-From 511a2c7822e68d081de3cefa8a2a82815da6ce78 Mon Sep 17 00:00:00 2001
+From 31d1ee0e615ad0fc84bd781d905f1cd56ae02909 Mon Sep 17 00:00:00 2001
From: Philip Balister <balister@moose.(none)>
Date: Wed, 13 Jan 2010 14:35:39 -0500
-Subject: [PATCH 29/29] usrp-embedded : Add driver for USRP Embedded FPGA interface.
+Subject: [PATCH 03/22] usrp-embedded : Add driver for USRP Embedded FPGA interface.
---
arch/arm/mach-omap2/board-overo.c | 176 +++++-
diff --git a/recipes/linux/linux-omap_2.6.37rc.bb b/recipes/linux/linux-omap_2.6.37rc.bb
index abdb94da9c..e0db191e07 100644
--- a/recipes/linux/linux-omap_2.6.37rc.bb
+++ b/recipes/linux/linux-omap_2.6.37rc.bb
@@ -16,42 +16,66 @@ SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.g
file://defconfig"
SRC_URI_append = " \
- file://0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch \
- file://0002-omap-Beagle-detect-new-xM-revision-B.patch \
- file://0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch \
- file://0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch \
- file://0005-modedb.c-add-proper-720p60-mode.patch \
- file://0006-mmc-don-t-display-single-block-read-console-messages.patch \
- file://0007-MTD-silence-ecc-errors-on-mtdblock0.patch \
- file://0008-Miracle-patch.patch \
- file://0009-ARM-OMAP-add-omap_rev_-macros.patch \
- file://0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch \
- file://0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch \
- file://0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch \
- file://0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch \
- file://0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch \
- file://0015-MFD-enable-madc-clock.patch \
- file://0016-MFD-add-twl4030-madc-driver.patch \
- file://0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch \
- file://0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch \
- file://0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch \
- file://0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch \
- file://0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch \
- file://0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch \
- file://0023-RTC-add-support-for-backup-battery-recharge.patch \
- file://0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch \
- file://0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch \
- file://0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch \
-"
+ file://base/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch \
+ file://base/0002-omap-Beagle-detect-new-xM-revision-B.patch \
+ file://base/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch \
+ file://base/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch \
+ file://base/0005-modedb.c-add-proper-720p60-mode.patch \
+ file://base/0006-mmc-don-t-display-single-block-read-console-messages.patch \
+ file://base/0007-MTD-silence-ecc-errors-on-mtdblock0.patch \
+ file://base/0008-Miracle-patch.patch \
+ file://base/0009-ARM-OMAP-add-omap_rev_-macros.patch \
+ file://base/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch \
+ file://base/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch \
+ file://base/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch \
+ file://base/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch \
+ file://base/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch \
+ file://base/0015-MFD-enable-madc-clock.patch \
+ file://base/0016-MFD-add-twl4030-madc-driver.patch \
+ file://base/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch \
+ file://base/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch \
+ file://base/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch \
+ file://base/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch \
+ file://base/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch \
+ file://base/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch \
+ file://base/0023-RTC-add-support-for-backup-battery-recharge.patch \
+ file://base/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch \
+ file://base/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch \
+ file://base/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch \
+ \
+ file://dvfs/0001-OMAP3-PM-Adding-T2-enabling-of-smartreflex.patch \
+ file://dvfs/0002-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch \
+ file://dvfs/0003-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch \
+ file://dvfs/0004-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch \
+ file://dvfs/0005-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch \
+ file://dvfs/0006-OMAP-Introduce-a-user-list-for-each-voltage-domain-i.patch \
+ file://dvfs/0007-OMAP-Introduce-API-in-the-OPP-layer-to-find-the-opp-.patch \
+ file://dvfs/0008-OMAP-Introduce-API-to-register-a-device-with-a-volta.patch \
+ file://dvfs/0009-OMAP-Introduce-device-specific-set-rate-and-get-rate.patch \
+ file://dvfs/0010-OMAP-Voltage-layer-changes-to-support-DVFS.patch \
+ file://dvfs/0011-OMAP-Introduce-dependent-voltage-domain-support.patch \
+ file://dvfs/0012-OMAP-Introduce-device-scale.patch \
+ file://dvfs/0013-OMAP-Disable-smartreflex-across-DVFS.patch \
+ file://dvfs/0014-OMAP3-Introduce-custom-set-rate-and-get-rate-APIs-fo.patch \
+ file://dvfs/0015-OMAP3-Update-cpufreq-driver-to-use-the-new-set_rate-.patch \
+ file://dvfs/0016-OMAP3-Introduce-voltage-domain-info-in-the-hwmod-str.patch \
+ file://dvfs/0017-OMAP3-Add-voltage-dependency-table-for-VDD1.patch \
+ file://dvfs/0018-omap3-4-opp-make-omapx_opp_init-non-static.patch \
+ file://dvfs/0019-OMAP3-beagle-xm-enable-upto-1GHz-OPP.patch \
+ \
+ file://dvfs/0001-omap3-add-support-for-720MHz-MPU-OPP.patch \
+ file://dvfs/0002-OMAP35x-Add-support-for-720MHz-part.patch \
+ file://dvfs/0003-OMAP3-beagle-C4-enable-upto-720MHz-OPP.patch \
+ file://dvfs/0004-OMAP3-Overo-Tide-enable-upto-720MHz-OPP.patch \
+ "
SRC_URI_append_usrp-e1xx = "\
- file://0027-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch \
- file://0028-Add-functions-to-dma.c-to-set-address-and-length-for.patch \
- file://0029-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch \
+ file://usrp/0001-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch \
+ file://usrp/0002-Add-functions-to-dma.c-to-set-address-and-length-for.patch \
+ file://usrp/0003-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch \
"
SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \
"
S = "${WORKDIR}/git"
-