From 9ebbe394e8018f12b1487e6e29b1a20c1c1a4d99 Mon Sep 17 00:00:00 2001
From: Robert Nelson <robertcnelson@gmail.com>
Date: Fri, 27 May 2011 13:47:55 -0500
Subject: [PATCH] merge to 2.6.39-git13

Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
---
 patch.sh                                      |  40 +-
 patches/defconfig                             |  17 +-
 patches/no_devtmps-defconfig                  |  17 +-
 patches/ref_omap2plus_defconfig               |   7 +-
 ...-support-for-beagleboard-xM-revision.patch | 123 +++++++
 ...agle-add-support-for-expansionboards.patch | 347 ++++++++++++++++++
 version.sh                                    |   2 +-
 7 files changed, 514 insertions(+), 39 deletions(-)
 create mode 100644 patches/sakoman/2.6.40/0031-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch
 create mode 100644 patches/sakoman/2.6.40/0032-OMAP3-beagle-add-support-for-expansionboards.patch

diff --git a/patch.sh b/patch.sh
index c2c182bfa..23c487d03 100644
--- a/patch.sh
+++ b/patch.sh
@@ -77,10 +77,11 @@ echo "for_next from tmlind's tree.."
 #patch -s -p1 < "${DIR}/patches/for_next_40/0007-OMAP3-smartreflex-fix-ioremap-leak-on-probe-error.patch"
 #patch -s -p1 < "${DIR}/patches/for_next_40/0008-OMAP3-smartreflex-delete-instance-from-sr_list-on-pr.patch"
 #patch -s -p1 < "${DIR}/patches/for_next_40/0009-OMAP3-smartreflex-delete-debugfs-entries-on-probe-er.patch"
-patch -s -p1 < "${DIR}/patches/for_next_40/0013-omap-gpmc-smsc911x-always-set-irq-flags-to-IORESOURC.patch"
-patch -s -p1 < "${DIR}/patches/for_next_40/0014-omap-convert-boards-that-use-SMSC911x-to-use-gpmc-sm.patch"
-patch -s -p1 < "${DIR}/patches/for_next_40/0015-OMAP3-4-l3-fix-omap3_l3_probe-error-path.patch"
-patch -s -p1 < "${DIR}/patches/for_next_40/0016-OMAP3-4-l3-minor-cleanup-for-parenthesis-and-extra-s.patch"
+#2.6.39-git13
+#patch -s -p1 < "${DIR}/patches/for_next_40/0013-omap-gpmc-smsc911x-always-set-irq-flags-to-IORESOURC.patch"
+#patch -s -p1 < "${DIR}/patches/for_next_40/0014-omap-convert-boards-that-use-SMSC911x-to-use-gpmc-sm.patch"
+#patch -s -p1 < "${DIR}/patches/for_next_40/0015-OMAP3-4-l3-fix-omap3_l3_probe-error-path.patch"
+#patch -s -p1 < "${DIR}/patches/for_next_40/0016-OMAP3-4-l3-minor-cleanup-for-parenthesis-and-extra-s.patch"
 }
 
 
@@ -126,7 +127,6 @@ echo "sakoman's patches"
 #patch -s -p1 < "${DIR}/patches/sakoman/2.6.40/0004-OMAP-DSS-DSI-Fix-DSI-PLL-power-bug.patch"
 #patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0005-OMAP-DSS2-fix-panel-Kconfig-dependencies.patch"
 
-
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0006-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0007-video-add-timings-for-hd720.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0008-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch"
@@ -147,28 +147,38 @@ patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0020-ARM-OMAP-Add-twl4030-madc-sup
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0021-Enabling-Hwmon-driver-for-twl4030-madc.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0022-mfd-twl-core-enable-madc-clock.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0023-rtc-twl-Switch-to-using-threaded-irq.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch"
+
+#in 2.6.39-git13
+#patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch"
+
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0025-omap-mmc-Adjust-dto-to-eliminate-timeout-errors.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0026-omap-Fix-mtd-subpage-read-alignment.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0027-mtd-nand-omap2-Force-all-buffer-reads-to-u32-alignme.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0028-omap-nand-fix-subpage-ecc-issue-with-prefetch.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0029-OMAP-Overo-Add-support-for-spidev.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0030-unionfs-Add-support-for-unionfs-2.5.9.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0031-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0032-OMAP3-beagle-add-support-for-expansionboards.patch"
+
+patch -s -p1 < "${DIR}/patches/sakoman/2.6.40/0031-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch"
+patch -s -p1 < "${DIR}/patches/sakoman/2.6.40/0032-OMAP3-beagle-add-support-for-expansionboards.patch"
+
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0033-omap-Change-omap_device-activate-dectivate-latency-m.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0034-omap-Add-omap3_defconfig.patch"
 
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.40/0035-omap-overo-Add-opp-init.patch"
 
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0036-OMAP3-voltage-remove-spurious-pr_notice-for-debugfs.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0037-OMAP4-PM-remove-redundant-ifdef-CONFIG_PM.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0038-OMAP3-smartreflex-fix-sr_late_init-error-path-in-pro.patch"
+#in 2.6.39-git13
+#patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0036-OMAP3-voltage-remove-spurious-pr_notice-for-debugfs.patch"
+#patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0037-OMAP4-PM-remove-redundant-ifdef-CONFIG_PM.patch"
+#patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0038-OMAP3-smartreflex-fix-sr_late_init-error-path-in-pro.patch"
+
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0039-OMAP3-smartreflex-request-the-memory-region.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0040-OMAP3-smartreflex-fix-ioremap-leak-on-probe-error.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0041-OMAP3-smartreflex-delete-instance-from-sr_list-on-pr.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0042-OMAP3-smartreflex-delete-debugfs-entries-on-probe-er.patch"
-patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0043-OMAP3-cpuidle-remove-useless-SDP-specific-timings.patch"
+
+#in 2.6.39-git13
+#patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0040-OMAP3-smartreflex-fix-ioremap-leak-on-probe-error.patch"
+#patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0041-OMAP3-smartreflex-delete-instance-from-sr_list-on-pr.patch"
+#patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0042-OMAP3-smartreflex-delete-debugfs-entries-on-probe-er.patch"
+#patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0043-OMAP3-cpuidle-remove-useless-SDP-specific-timings.patch"
+
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0044-OMAP3-SR-make-notify-independent-of-class.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0045-OMAP3-SR-disable-interrupt-by-default.patch"
 patch -s -p1 < "${DIR}/patches/sakoman/2.6.39/0046-OMAP3-SR-enable-disable-SR-only-on-need.patch"
diff --git a/patches/defconfig b/patches/defconfig
index b07886051..b9240ee1a 100644
--- a/patches/defconfig
+++ b/patches/defconfig
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux/arm 2.6.39-git12 Kernel Configuration
+# Linux/arm 2.6.39-git13 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -461,6 +461,7 @@ CONFIG_BOUNCE=y
 CONFIG_VIRT_TO_BUS=y
 # CONFIG_KSM is not set
 CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_CLEANCACHE=y
 CONFIG_FORCE_MAX_ZONEORDER=11
 CONFIG_LEDS=y
 CONFIG_ALIGNMENT_TRAP=y
@@ -2003,7 +2004,7 @@ CONFIG_GPIOLIB=y
 CONFIG_GPIO_SYSFS=y
 
 #
-# Memory mapped GPIO expanders:
+# Memory mapped GPIO drivers:
 #
 # CONFIG_GPIO_BASIC_MMIO is not set
 # CONFIG_GPIO_IT8761E is not set
@@ -2189,6 +2190,7 @@ CONFIG_MFD_CORE=y
 # CONFIG_TPS6105X is not set
 # CONFIG_TPS65010 is not set
 # CONFIG_TPS6507X is not set
+# CONFIG_MFD_TPS6586X is not set
 CONFIG_TWL4030_CORE=y
 CONFIG_TWL4030_MADC=y
 CONFIG_TWL4030_POWER=y
@@ -2215,7 +2217,6 @@ CONFIG_TWL4030_POWEROFF=y
 # CONFIG_MFD_MC13XXX is not set
 # CONFIG_ABX500_CORE is not set
 # CONFIG_EZX_PCAP is not set
-# CONFIG_MFD_TPS6586X is not set
 CONFIG_MFD_WL1273_CORE=m
 CONFIG_MFD_OMAP_USB_HOST=y
 CONFIG_REGULATOR=y
@@ -3300,6 +3301,7 @@ CONFIG_R8712_AP=y
 CONFIG_XVMALLOC=y
 CONFIG_ZRAM=m
 # CONFIG_ZRAM_DEBUG is not set
+CONFIG_ZCACHE=y
 # CONFIG_FB_SM7XX is not set
 # CONFIG_LIRC_STAGING is not set
 # CONFIG_EASYCAP is not set
@@ -3377,17 +3379,12 @@ CONFIG_XFS_RT=y
 # CONFIG_XFS_DEBUG is not set
 CONFIG_GFS2_FS=m
 CONFIG_GFS2_FS_LOCKING_DLM=y
-CONFIG_OCFS2_FS=m
-CONFIG_OCFS2_FS_O2CB=m
-CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
-CONFIG_OCFS2_FS_STATS=y
-CONFIG_OCFS2_DEBUG_MASKLOG=y
-# CONFIG_OCFS2_DEBUG_FS is not set
+# CONFIG_OCFS2_FS is not set
 CONFIG_BTRFS_FS=y
 CONFIG_BTRFS_FS_POSIX_ACL=y
 CONFIG_NILFS2_FS=m
 CONFIG_FS_POSIX_ACL=y
-CONFIG_EXPORTFS=y
+CONFIG_EXPORTFS=m
 CONFIG_FILE_LOCKING=y
 CONFIG_FSNOTIFY=y
 CONFIG_DNOTIFY=y
diff --git a/patches/no_devtmps-defconfig b/patches/no_devtmps-defconfig
index 1b8bec1f1..77d2a298e 100644
--- a/patches/no_devtmps-defconfig
+++ b/patches/no_devtmps-defconfig
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux/arm 2.6.39-git12 Kernel Configuration
+# Linux/arm 2.6.39-git13 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -461,6 +461,7 @@ CONFIG_BOUNCE=y
 CONFIG_VIRT_TO_BUS=y
 # CONFIG_KSM is not set
 CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_CLEANCACHE=y
 CONFIG_FORCE_MAX_ZONEORDER=11
 CONFIG_LEDS=y
 CONFIG_ALIGNMENT_TRAP=y
@@ -2002,7 +2003,7 @@ CONFIG_GPIOLIB=y
 CONFIG_GPIO_SYSFS=y
 
 #
-# Memory mapped GPIO expanders:
+# Memory mapped GPIO drivers:
 #
 # CONFIG_GPIO_BASIC_MMIO is not set
 # CONFIG_GPIO_IT8761E is not set
@@ -2188,6 +2189,7 @@ CONFIG_MFD_CORE=y
 # CONFIG_TPS6105X is not set
 # CONFIG_TPS65010 is not set
 # CONFIG_TPS6507X is not set
+# CONFIG_MFD_TPS6586X is not set
 CONFIG_TWL4030_CORE=y
 CONFIG_TWL4030_MADC=y
 CONFIG_TWL4030_POWER=y
@@ -2214,7 +2216,6 @@ CONFIG_TWL4030_POWEROFF=y
 # CONFIG_MFD_MC13XXX is not set
 # CONFIG_ABX500_CORE is not set
 # CONFIG_EZX_PCAP is not set
-# CONFIG_MFD_TPS6586X is not set
 CONFIG_MFD_WL1273_CORE=m
 CONFIG_MFD_OMAP_USB_HOST=y
 CONFIG_REGULATOR=y
@@ -3299,6 +3300,7 @@ CONFIG_R8712_AP=y
 CONFIG_XVMALLOC=y
 CONFIG_ZRAM=m
 # CONFIG_ZRAM_DEBUG is not set
+CONFIG_ZCACHE=y
 # CONFIG_FB_SM7XX is not set
 # CONFIG_LIRC_STAGING is not set
 # CONFIG_EASYCAP is not set
@@ -3376,17 +3378,12 @@ CONFIG_XFS_RT=y
 # CONFIG_XFS_DEBUG is not set
 CONFIG_GFS2_FS=m
 CONFIG_GFS2_FS_LOCKING_DLM=y
-CONFIG_OCFS2_FS=m
-CONFIG_OCFS2_FS_O2CB=m
-CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
-CONFIG_OCFS2_FS_STATS=y
-CONFIG_OCFS2_DEBUG_MASKLOG=y
-# CONFIG_OCFS2_DEBUG_FS is not set
+# CONFIG_OCFS2_FS is not set
 CONFIG_BTRFS_FS=y
 CONFIG_BTRFS_FS_POSIX_ACL=y
 CONFIG_NILFS2_FS=m
 CONFIG_FS_POSIX_ACL=y
-CONFIG_EXPORTFS=y
+CONFIG_EXPORTFS=m
 CONFIG_FILE_LOCKING=y
 CONFIG_FSNOTIFY=y
 CONFIG_DNOTIFY=y
diff --git a/patches/ref_omap2plus_defconfig b/patches/ref_omap2plus_defconfig
index 1fb28d458..ac8711550 100644
--- a/patches/ref_omap2plus_defconfig
+++ b/patches/ref_omap2plus_defconfig
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux/arm 2.6.39-git12 Kernel Configuration
+# Linux/arm 2.6.39-git13 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -452,6 +452,7 @@ CONFIG_ZONE_DMA_FLAG=0
 CONFIG_VIRT_TO_BUS=y
 # CONFIG_KSM is not set
 CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+# CONFIG_CLEANCACHE is not set
 CONFIG_FORCE_MAX_ZONEORDER=11
 CONFIG_LEDS=y
 CONFIG_ALIGNMENT_TRAP=y
@@ -1260,7 +1261,7 @@ CONFIG_DEBUG_GPIO=y
 CONFIG_GPIO_SYSFS=y
 
 #
-# Memory mapped GPIO expanders:
+# Memory mapped GPIO drivers:
 #
 # CONFIG_GPIO_BASIC_MMIO is not set
 # CONFIG_GPIO_IT8761E is not set
@@ -1458,6 +1459,7 @@ CONFIG_MFD_CORE=y
 # CONFIG_TPS6105X is not set
 # CONFIG_TPS65010 is not set
 # CONFIG_TPS6507X is not set
+# CONFIG_MFD_TPS6586X is not set
 CONFIG_MENELAUS=y
 CONFIG_TWL4030_CORE=y
 # CONFIG_TWL4030_MADC is not set
@@ -1485,7 +1487,6 @@ CONFIG_TWL4030_CODEC=y
 # CONFIG_MFD_MC13XXX is not set
 # CONFIG_ABX500_CORE is not set
 # CONFIG_EZX_PCAP is not set
-# CONFIG_MFD_TPS6586X is not set
 # CONFIG_MFD_WL1273_CORE is not set
 CONFIG_REGULATOR=y
 # CONFIG_REGULATOR_DEBUG is not set
diff --git a/patches/sakoman/2.6.40/0031-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch b/patches/sakoman/2.6.40/0031-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch
new file mode 100644
index 000000000..0364582f7
--- /dev/null
+++ b/patches/sakoman/2.6.40/0031-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch
@@ -0,0 +1,123 @@
+From 8c8071d97b2b810125cc003b4e2781c5b696fe2f Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 20 May 2011 10:48:37 +0000
+Subject: [PATCH 31/63] OMAP3: beagle: add support for beagleboard xM revision C
+
+The USB enable GPIO has been inverted and the USER button moved.
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |   38 +++++++++++++++++++++++-------
+ 1 files changed, 29 insertions(+), 9 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 77d18e2..ce86465 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -63,7 +63,9 @@
+  *	AXBX	= GPIO173, GPIO172, GPIO171: 1 1 1
+  *	C1_3	= GPIO173, GPIO172, GPIO171: 1 1 0
+  *	C4	= GPIO173, GPIO172, GPIO171: 1 0 1
+- *	XM	= GPIO173, GPIO172, GPIO171: 0 0 0
++ *	XMA	= GPIO173, GPIO172, GPIO171: 0 0 0
++ *	XMB	= GPIO173, GPIO172, GPIO171: 0 0 1
++ *  XMC = GPIO173, GPIO172, GPIO171: 0 1 0
+  */
+ enum {
+ 	OMAP3BEAGLE_BOARD_UNKN = 0,
+@@ -71,6 +73,7 @@ enum {
+ 	OMAP3BEAGLE_BOARD_C1_3,
+ 	OMAP3BEAGLE_BOARD_C4,
+ 	OMAP3BEAGLE_BOARD_XM,
++	OMAP3BEAGLE_BOARD_XMC,
+ };
+ 
+ static u8 omap3_beagle_version;
+@@ -123,9 +126,17 @@ static void __init omap3_beagle_init_rev(void)
+ 		printk(KERN_INFO "OMAP3 Beagle Rev: xM\n");
+ 		omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
+ 		break;
++	case 1:
++		printk(KERN_INFO "OMAP3 Beagle Rev: xM B\n");
++		omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
++		break;
++	case 2:
++		printk(KERN_INFO "OMAP3 Beagle Rev: xM C\n");
++		omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
++		break;
+ 	default:
+-		printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
+-		omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
++		printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd, assuming xM C or newer\n", beagle_rev);
++		omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
+ 	}
+ }
+ 
+@@ -253,7 +264,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
+ {
+ 	int r, usb_pwr_level;
+ 
+-	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
++	if (cpu_is_omap3630()) {
+ 		mmc[0].gpio_wp = -EINVAL;
+ 	} else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) ||
+ 		(omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) {
+@@ -275,11 +286,10 @@ static int beagle_twl_gpio_setup(struct device *dev,
+ 	 * high / others active low)
+ 	 * DVI reset GPIO is different between beagle revisions
+ 	 */
+-	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
+-		usb_pwr_level = GPIOF_OUT_INIT_HIGH;
++	if (cpu_is_omap3630()) {
+ 		beagle_dvi_device.reset_gpio = 129;
+ 		/*
+-		 * gpio + 1 on Xm controls the TFP410's enable line (active low)
++		 * gpio + 1 on xM controls the TFP410's enable line (active low)
+ 		 * gpio + 2 control varies depending on the board rev as below:
+ 		 * P7/P8 revisions(prototype): Camera EN
+ 		 * A2+ revisions (production): LDO (DVI, serial, led blocks)
+@@ -295,7 +305,6 @@ static int beagle_twl_gpio_setup(struct device *dev,
+ 			pr_err("%s: unable to configure DVI_LDO_EN\n",
+ 				__func__);
+ 	} else {
+-		usb_pwr_level = GPIOF_OUT_INIT_LOW;
+ 		beagle_dvi_device.reset_gpio = 170;
+ 		/*
+ 		 * REVISIT: need ehci-omap hooks for external VBUS
+@@ -305,6 +314,12 @@ static int beagle_twl_gpio_setup(struct device *dev,
+ 			pr_err("%s: unable to configure EHCI_nOC\n", __func__);
+ 	}
+ 
++       /* Only xM rev A and xM rev B use active high */
++       if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
++               usb_pwr_level = GPIOF_OUT_INIT_HIGH;
++       else
++               usb_pwr_level = GPIOF_OUT_INIT_LOW;
++
+ 	gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR");
+ 
+ 	/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
+@@ -530,7 +545,7 @@ static void __init beagle_opp_init(void)
+ 	}
+ 
+ 	/* Custom OPP enabled for XM */
+-	if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
++	if (cpu_is_omap3630()) {
+ 		struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
+ 		struct omap_hwmod *dh = omap_hwmod_lookup("iva");
+ 		struct device *dev;
+@@ -570,6 +585,11 @@ static void __init omap3_beagle_init(void)
+ 	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+ 	omap3_beagle_init_rev();
+ 	omap3_beagle_i2c_init();
++
++	if (cpu_is_omap3630()) {
++		gpio_buttons[0].gpio = 4;
++	}
++
+ 	platform_add_devices(omap3_beagle_devices,
+ 			ARRAY_SIZE(omap3_beagle_devices));
+ 	omap_display_init(&beagle_dss_data);
+-- 
+1.7.4.1
+
diff --git a/patches/sakoman/2.6.40/0032-OMAP3-beagle-add-support-for-expansionboards.patch b/patches/sakoman/2.6.40/0032-OMAP3-beagle-add-support-for-expansionboards.patch
new file mode 100644
index 000000000..7d360d83e
--- /dev/null
+++ b/patches/sakoman/2.6.40/0032-OMAP3-beagle-add-support-for-expansionboards.patch
@@ -0,0 +1,347 @@
+From 7129629dc0636097d486dedae2c6422aa0f01b86 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 20 May 2011 13:06:24 +0200
+Subject: [PATCH 32/63] OMAP3: beagle: add support for expansionboards
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |  266 +++++++++++++++++++++++++++++++
+ 1 files changed, 266 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index ce86465..77f7e7f 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -21,6 +21,7 @@
+ #include <linux/io.h>
+ #include <linux/leds.h>
+ #include <linux/gpio.h>
++#include <linux/irq.h>
+ #include <linux/input.h>
+ #include <linux/gpio_keys.h>
+ #include <linux/opp.h>
+@@ -140,6 +141,167 @@ static void __init omap3_beagle_init_rev(void)
+ 	}
+ }
+ 
++char expansionboard_name[16];
++
++#if defined(CONFIG_WL12XX) || defined(CONFIG_WL12XX_MODULE)
++#include <linux/regulator/fixed.h>
++#include <linux/wl12xx.h>
++
++#define OMAP_BEAGLE_WLAN_EN_GPIO    (139)
++#define OMAP_BEAGLE_BT_EN_GPIO      (138)
++#define OMAP_BEAGLE_WLAN_IRQ_GPIO   (137)
++#define OMAP_BEAGLE_FM_EN_BT_WU     (136)
++
++struct wl12xx_platform_data omap_beagle_wlan_data __initdata = {
++	.irq = OMAP_GPIO_IRQ(OMAP_BEAGLE_WLAN_IRQ_GPIO),
++	.board_ref_clock = 2, /* 38.4 MHz */
++};
++
++static int gpios[] = {OMAP_BEAGLE_BT_EN_GPIO, OMAP_BEAGLE_FM_EN_BT_WU, -1};
++static struct platform_device wl12xx_device = {
++		.name		= "kim",
++		.id			= -1,
++		.dev.platform_data = &gpios,
++};
++
++static struct omap2_hsmmc_info mmcbbt[] = {
++ 	{
++ 		.mmc		= 1,
++ 		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
++ 		.gpio_wp	= 29,
++ 	},
++	{
++		.name		= "wl1271",
++		.mmc		= 2,
++		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
++		.gpio_wp	= -EINVAL,
++		.gpio_cd	= -EINVAL,
++		.ocr_mask	= MMC_VDD_165_195,
++		.nonremovable	= true,
++	},
++ 	{}	/* Terminator */
++ };
++
++static struct regulator_consumer_supply beagle_vmmc2_supply = 
++	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
++
++static struct regulator_init_data beagle_vmmc2 = {
++	.constraints = {
++		.min_uV			= 1850000,
++		.max_uV			= 1850000,
++		.apply_uV		= true,
++		.valid_modes_mask	= REGULATOR_MODE_NORMAL
++					| REGULATOR_MODE_STANDBY,
++		.valid_ops_mask		= REGULATOR_CHANGE_MODE
++					| REGULATOR_CHANGE_STATUS,
++	},
++	.num_consumer_supplies = 1,
++	.consumer_supplies = &beagle_vmmc2_supply,
++};
++
++static struct fixed_voltage_config beagle_vwlan = {
++	.supply_name = "vwl1271",
++	.microvolts = 1800000,  /* 1.8V */
++	.gpio = OMAP_BEAGLE_WLAN_EN_GPIO,
++	.startup_delay = 70000, /* 70ms */
++	.enable_high = 1,
++	.enabled_at_boot = 0,
++	.init_data = &beagle_vmmc2,
++};
++
++static struct platform_device omap_vwlan_device = {
++	.name           = "reg-fixed-voltage",
++	.id             = 1,
++	.dev = {
++		.platform_data = &beagle_vwlan,
++	},
++};
++#endif
++
++#if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE)
++
++#include <plat/mcspi.h>
++#include <linux/spi/spi.h>
++
++#define OMAP3BEAGLE_GPIO_ENC28J60_IRQ 157
++
++static struct omap2_mcspi_device_config enc28j60_spi_chip_info = {
++	.turbo_mode	= 0,
++	.single_channel	= 1,	/* 0: slave, 1: master */
++};
++
++static struct spi_board_info omap3beagle_zippy_spi_board_info[] __initdata = {
++	{
++		.modalias		= "enc28j60",
++		.bus_num		= 4,
++		.chip_select		= 0,
++		.max_speed_hz		= 20000000,
++		.controller_data	= &enc28j60_spi_chip_info,
++	},
++};
++
++static void __init omap3beagle_enc28j60_init(void)
++{
++	if ((gpio_request(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, "ENC28J60_IRQ") == 0) &&
++	    (gpio_direction_input(OMAP3BEAGLE_GPIO_ENC28J60_IRQ) == 0)) {
++		gpio_export(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, 0);
++		omap3beagle_zippy_spi_board_info[0].irq	= OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
++		irq_set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
++	} else {
++		printk(KERN_ERR "could not obtain gpio for ENC28J60_IRQ\n");
++		return;
++	}
++
++	spi_register_board_info(omap3beagle_zippy_spi_board_info,
++			ARRAY_SIZE(omap3beagle_zippy_spi_board_info));
++}
++
++#else
++static inline void __init omap3beagle_enc28j60_init(void) { return; }
++#endif
++
++#if defined(CONFIG_KS8851) || defined(CONFIG_KS8851_MODULE)
++
++#include <plat/mcspi.h>
++#include <linux/spi/spi.h>
++
++#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157
++
++static struct omap2_mcspi_device_config ks8851_spi_chip_info = {
++	.turbo_mode	= 0,
++	.single_channel	= 1,	/* 0: slave, 1: master */
++};
++
++static struct spi_board_info omap3beagle_zippy2_spi_board_info[] __initdata = {
++	{
++		.modalias		= "ks8851",
++		.bus_num		= 4,
++		.chip_select		= 0,
++		.max_speed_hz		= 36000000,
++		.controller_data	= &ks8851_spi_chip_info,
++	},
++};
++
++static void __init omap3beagle_ks8851_init(void)
++{
++	if ((gpio_request(OMAP3BEAGLE_GPIO_KS8851_IRQ, "KS8851_IRQ") == 0) &&
++	    (gpio_direction_input(OMAP3BEAGLE_GPIO_KS8851_IRQ) == 0)) {
++		gpio_export(OMAP3BEAGLE_GPIO_KS8851_IRQ, 0);
++		omap3beagle_zippy2_spi_board_info[0].irq = OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_KS8851_IRQ);
++		irq_set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
++	} else {
++		printk(KERN_ERR "could not obtain gpio for KS8851_IRQ\n");
++		return;
++	}
++	
++	spi_register_board_info(omap3beagle_zippy2_spi_board_info,
++							ARRAY_SIZE(omap3beagle_zippy2_spi_board_info));
++}
++
++#else
++static inline void __init omap3beagle_ks8851_init(void) { return; }
++#endif
++
+ static struct mtd_partition omap3beagle_nand_partitions[] = {
+ 	/* All the partition sizes are listed in terms of NAND block size */
+ 	{
+@@ -246,6 +408,12 @@ static struct omap2_hsmmc_info mmc[] = {
+ 		.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
+ 		.gpio_wp	= 29,
+ 	},
++	{
++		.mmc		= 2,
++		.caps       = MMC_CAP_4_BIT_DATA,
++		.transceiver	= true,
++		.ocr_mask	= 0x00100000,	/* 3.3V */
++	},
+ 	{}	/* Terminator */
+ };
+ 
+@@ -275,11 +443,25 @@ static int beagle_twl_gpio_setup(struct device *dev,
+ 	}
+ 	/* gpio + 0 is "mmc0_cd" (input/IRQ) */
+ 	mmc[0].gpio_cd = gpio + 0;
++#if defined(CONFIG_WL12XX) || defined(CONFIG_WL12XX_MODULE)
++	if(!strcmp(expansionboard_name, "bbtoys-wifi")) { 
++		omap2_hsmmc_init(mmcbbt);
++		/* link regulators to MMC adapters */
++		beagle_vmmc1_supply.dev = mmcbbt[0].dev;
++		beagle_vsim_supply.dev = mmcbbt[0].dev;
++	} else {
++		omap2_hsmmc_init(mmc);
++		/* link regulators to MMC adapters */
++		beagle_vmmc1_supply.dev = mmc[0].dev;
++		beagle_vsim_supply.dev = mmc[0].dev;
++	}
++#else
+ 	omap2_hsmmc_init(mmc);
+ 
+ 	/* link regulators to MMC adapters */
+ 	beagle_vmmc1_supply.dev = mmc[0].dev;
+ 	beagle_vsim_supply.dev = mmc[0].dev;
++#endif
+ 
+ 	/*
+ 	 * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
+@@ -434,9 +616,23 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
+        },
+ };
+ 
++#if defined(CONFIG_RTC_DRV_DS1307) || \
++	defined(CONFIG_RTC_DRV_DS1307_MODULE)
++
++static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {
++	{
++		I2C_BOARD_INFO("ds1307", 0x68),
++	},
++};
++#else
++static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {};
++#endif
++
+ static int __init omap3_beagle_i2c_init(void)
+ {
+ 	omap3_pmic_init("twl4030", &beagle_twldata);
++	omap_register_i2c_bus(2, 400,  beagle_i2c2_boardinfo,
++			ARRAY_SIZE(beagle_i2c2_boardinfo));
+ 	/* Bus 3 is attached to the DVI port where devices like the pico DLP
+ 	 * projector don't work reliably with 400kHz */
+ 	omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
+@@ -534,6 +730,15 @@ static struct omap_board_mux board_mux[] __initdata = {
+ };
+ #endif
+ 
++static int __init expansionboard_setup(char *str)
++{
++	if (!str)
++		return -EINVAL;
++	strncpy(expansionboard_name, str, 16);
++	printk(KERN_INFO "Beagle expansionboard: %s\n", expansionboard_name);
++	return 0;
++}
++
+ static void __init beagle_opp_init(void)
+ {
+ 	int r = 0;
+@@ -599,6 +804,65 @@ static void __init omap3_beagle_init(void)
+ 	/* REVISIT leave DVI powered down until it's needed ... */
+ 	gpio_request_one(170, GPIOF_OUT_INIT_HIGH, "DVI_nPD");
+ 
++	if(!strcmp(expansionboard_name, "zippy")) 
++	{
++		printk(KERN_INFO "Beagle expansionboard: initializing enc28j60\n");
++		omap3beagle_enc28j60_init();
++		printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
++		mmc[1].gpio_wp = 141;
++		mmc[1].gpio_cd = 162;
++	}
++	
++	if(!strcmp(expansionboard_name, "zippy2")) 
++	{
++		printk(KERN_INFO "Beagle expansionboard: initializing ks_8851\n");
++		omap3beagle_ks8851_init();
++		printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
++		mmc[1].gpio_wp = 141;
++		mmc[1].gpio_cd = 162;
++	}
++
++	if(!strcmp(expansionboard_name, "trainer"))
++	{
++		printk(KERN_INFO "Beagle expansionboard: exporting GPIOs 130-141,162 to userspace\n");
++		gpio_request(130, "sysfs");
++		gpio_export(130, 1);
++		gpio_request(131, "sysfs");
++		gpio_export(131, 1);
++		gpio_request(132, "sysfs");
++		gpio_export(132, 1);
++		gpio_request(133, "sysfs");
++		gpio_export(133, 1);
++		gpio_request(134, "sysfs");
++		gpio_export(134, 1);
++		gpio_request(135, "sysfs");
++		gpio_export(135, 1);
++		gpio_request(136, "sysfs");
++		gpio_export(136, 1);
++		gpio_request(137, "sysfs");
++		gpio_export(137, 1);
++		gpio_request(138, "sysfs");
++		gpio_export(138, 1);
++		gpio_request(139, "sysfs");
++		gpio_export(139, 1);
++		gpio_request(140, "sysfs");
++		gpio_export(140, 1);
++		gpio_request(141, "sysfs");
++		gpio_export(141, 1);
++		gpio_request(162, "sysfs");
++		gpio_export(162, 1);
++	}
++
++	if(!strcmp(expansionboard_name, "bbtoys-wifi"))
++	{
++		if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
++			pr_err("error setting wl12xx data\n");
++		printk(KERN_INFO "Beagle expansionboard: registering wl12xx bt platform device\n");
++		platform_device_register(&wl12xx_device);
++		printk(KERN_INFO "Beagle expansionboard: registering wl12xx wifi platform device\n");
++		platform_device_register(&omap_vwlan_device);
++	}
++
+ 	usb_musb_init(NULL);
+ 	usbhs_init(&usbhs_bdata);
+ 	omap_nand_flash_init(NAND_BUSWIDTH_16, omap3beagle_nand_partitions,
+@@ -612,6 +876,8 @@ static void __init omap3_beagle_init(void)
+ 	beagle_opp_init();
+ }
+ 
++early_param("buddy", expansionboard_setup);
++
+ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
+ 	/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
+ 	.boot_params	= 0x80000100,
+-- 
+1.7.4.1
+
diff --git a/version.sh b/version.sh
index b383b59f7..22e0d7dd8 100644
--- a/version.sh
+++ b/version.sh
@@ -4,7 +4,7 @@ unset BUILD
 
 KERNEL_REL=2.6.39
 #STABLE_PATCH=1
-PRE_RC=2.6.39-git12
+PRE_RC=2.6.39-git13
 #RC_KERNEL=2.6.39
 #RC_PATCH=-rc7
 ABI=0
-- 
GitLab