diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi
index 128742d46..d35e569d8 100644
--- a/config/kernel/kernel.config.armv5tel-ipfire-multi
+++ b/config/kernel/kernel.config.armv5tel-ipfire-multi
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.10.27-ipfire-multi Kernel Configuration
+# Linux/arm 3.10.29-ipfire-multi Kernel Configuration
#
CONFIG_ARM=y
CONFIG_MIGHT_HAVE_PCI=y
@@ -649,7 +649,7 @@ CONFIG_GENERIC_CPUFREQ_CPU0=y
CONFIG_ARM_IMX6Q_CPUFREQ=m
# CONFIG_ARM_KIRKWOOD_CPUFREQ is not set
CONFIG_ARM_OMAP2PLUS_CPUFREQ=y
-CONFIG_CPU_IDLE=y
+# CONFIG_CPU_IDLE is not set
CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
@@ -3631,6 +3631,7 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_BACKLIGHT_LM3639 is not set
# CONFIG_BACKLIGHT_LP855X is not set
# CONFIG_BACKLIGHT_PANDORA is not set
+# CONFIG_BACKLIGHT_TLC59108 is not set
#
# Console display driver support
@@ -4926,35 +4927,10 @@ CONFIG_STRICT_DEVMEM=y
CONFIG_ARM_UNWIND=y
CONFIG_OLD_MCOUNT=y
# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ZYNQ_UART0 is not set
-# CONFIG_DEBUG_ZYNQ_UART1 is not set
-# CONFIG_DEBUG_IMX51_UART is not set
-# CONFIG_DEBUG_IMX53_UART is not set
-# CONFIG_DEBUG_IMX6Q_UART is not set
-CONFIG_DEBUG_OMAP2PLUS_UART=y
-# CONFIG_DEBUG_VEXPRESS_UART0_DETECT is not set
-# CONFIG_DEBUG_VEXPRESS_UART0_CA9 is not set
-# CONFIG_DEBUG_VEXPRESS_UART0_RS1 is not set
-# CONFIG_DEBUG_VT8500_UART0 is not set
-# CONFIG_DEBUG_ICEDCC is not set
-# CONFIG_DEBUG_SEMIHOSTING is not set
+# CONFIG_DEBUG_LL is not set
CONFIG_DEBUG_IMX_UART_PORT=1
-# CONFIG_DEBUG_OMAP2UART1 is not set
-# CONFIG_DEBUG_OMAP2UART2 is not set
-# CONFIG_DEBUG_OMAP2UART3 is not set
-# CONFIG_DEBUG_OMAP3UART3 is not set
-CONFIG_DEBUG_OMAP4UART3=y
-# CONFIG_DEBUG_OMAP3UART4 is not set
-# CONFIG_DEBUG_OMAP4UART4 is not set
-# CONFIG_DEBUG_TI81XXUART1 is not set
-# CONFIG_DEBUG_TI81XXUART2 is not set
-# CONFIG_DEBUG_TI81XXUART3 is not set
-# CONFIG_DEBUG_AM33XXUART1 is not set
-# CONFIG_DEBUG_ZOOM_UART is not set
-CONFIG_DEBUG_LL_INCLUDE="debug/omap2plus.S"
+CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
-CONFIG_EARLY_PRINTK=y
CONFIG_OC_ETM=y
# CONFIG_PID_IN_CONTEXTIDR is not set
diff --git a/config/kernel/kernel.config.i586-ipfire b/config/kernel/kernel.config.i586-ipfire
index 925b0e0e2..8ac3bd246 100644
--- a/config/kernel/kernel.config.i586-ipfire
+++ b/config/kernel/kernel.config.i586-ipfire
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.10.11-ipfire Kernel Configuration
+# Linux/x86 3.10.30-ipfire Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -1093,7 +1093,7 @@ CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=m
CONFIG_L2TP_ETH=m
CONFIG_STP=y
-CONFIG_GARP=y
+CONFIG_GARP=m
CONFIG_BRIDGE=y
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
@@ -1524,6 +1524,7 @@ CONFIG_SCSI_HPTIOP=m
CONFIG_SCSI_BUSLOGIC=m
# CONFIG_SCSI_FLASHPOINT is not set
CONFIG_VMWARE_PVSCSI=m
+CONFIG_HYPERV_STORAGE=m
CONFIG_LIBFC=m
CONFIG_LIBFCOE=m
CONFIG_FCOE=m
@@ -1715,6 +1716,7 @@ CONFIG_BCACHE=m
# CONFIG_BCACHE_DEBUG is not set
# CONFIG_BCACHE_EDEBUG is not set
# CONFIG_BCACHE_CLOSURES_DEBUG is not set
+CONFIG_BLK_DEV_DM_BUILTIN=y
CONFIG_BLK_DEV_DM=y
# CONFIG_DM_DEBUG is not set
CONFIG_DM_BUFIO=m
@@ -2297,6 +2299,7 @@ CONFIG_MWIFIEX_USB=m
#
# CONFIG_WAN is not set
CONFIG_VMXNET3=m
+CONFIG_HYPERV_NET=m
CONFIG_ISDN=y
CONFIG_ISDN_I4L=m
CONFIG_ISDN_PPP=y
@@ -2818,7 +2821,7 @@ CONFIG_GPIO_ICH=m
#
# PCI GPIO expanders:
#
-# CONFIG_GPIO_CS5535 is not set
+CONFIG_GPIO_CS5535=m
# CONFIG_GPIO_AMD8111 is not set
# CONFIG_GPIO_LANGWELL is not set
# CONFIG_GPIO_PCH is not set
@@ -3890,6 +3893,7 @@ CONFIG_FB_UDL=m
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_BROADSHEET is not set
# CONFIG_FB_AUO_K190X is not set
+CONFIG_FB_HYPERV=m
# CONFIG_EXYNOS_VIDEO is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
@@ -3905,6 +3909,7 @@ CONFIG_BACKLIGHT_APPLE=m
# CONFIG_BACKLIGHT_LM3630 is not set
# CONFIG_BACKLIGHT_LM3639 is not set
# CONFIG_BACKLIGHT_LP855X is not set
+# CONFIG_BACKLIGHT_OT200 is not set
#
# Console display driver support
@@ -4196,6 +4201,7 @@ CONFIG_HID_SPEEDLINK=m
# CONFIG_HID_STEELSERIES is not set
CONFIG_HID_SUNPLUS=m
# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_HYPERV_MOUSE is not set
# CONFIG_HID_SMARTJOYPLUS is not set
CONFIG_HID_TIVO=m
CONFIG_HID_TOPSEED=m
@@ -4473,17 +4479,18 @@ CONFIG_LEDS_CLASS=y
CONFIG_LEDS_LM3530=m
CONFIG_LEDS_LM3533=m
CONFIG_LEDS_LM3642=m
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_GPIO is not set
+CONFIG_LEDS_PCA9532=m
+CONFIG_LEDS_PCA9532_GPIO=y
+CONFIG_LEDS_GPIO=m
CONFIG_LEDS_LP3944=m
CONFIG_LEDS_LP55XX_COMMON=m
CONFIG_LEDS_LP5521=m
CONFIG_LEDS_LP5523=m
CONFIG_LEDS_LP5562=m
CONFIG_LEDS_CLEVO_MAIL=m
-# CONFIG_LEDS_PCA955X is not set
+CONFIG_LEDS_PCA955X=m
CONFIG_LEDS_PCA9633=m
-# CONFIG_LEDS_BD2802 is not set
+CONFIG_LEDS_BD2802=m
CONFIG_LEDS_INTEL_SS4200=m
CONFIG_LEDS_LT3593=m
CONFIG_LEDS_DELL_NETBOOKS=m
@@ -4623,7 +4630,6 @@ CONFIG_DMA_ACPI=y
#
# DMA Clients
#
-CONFIG_NET_DMA=y
CONFIG_ASYNC_TX_DMA=y
# CONFIG_DMATEST is not set
CONFIG_DCA=m
@@ -4652,7 +4658,9 @@ CONFIG_VIRTIO_MMIO=m
#
# Microsoft Hyper-V guest support
#
-# CONFIG_HYPERV is not set
+CONFIG_HYPERV=m
+CONFIG_HYPERV_UTILS=m
+CONFIG_HYPERV_BALLOON=m
CONFIG_STAGING=y
CONFIG_ET131X=m
CONFIG_SLICOSS=m
diff --git a/config/kernel/kernel.config.i586-ipfire-pae b/config/kernel/kernel.config.i586-ipfire-pae
index fc619b804..44b521369 100644
--- a/config/kernel/kernel.config.i586-ipfire-pae
+++ b/config/kernel/kernel.config.i586-ipfire-pae
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.10.11-ipfire Kernel Configuration
+# Linux/x86 3.10.30-ipfire Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -1105,7 +1105,7 @@ CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=m
CONFIG_L2TP_ETH=m
CONFIG_STP=y
-CONFIG_GARP=y
+CONFIG_GARP=m
CONFIG_BRIDGE=y
CONFIG_BRIDGE_IGMP_SNOOPING=y
CONFIG_BRIDGE_VLAN_FILTERING=y
@@ -1537,6 +1537,7 @@ CONFIG_SCSI_HPTIOP=m
CONFIG_SCSI_BUSLOGIC=m
# CONFIG_SCSI_FLASHPOINT is not set
CONFIG_VMWARE_PVSCSI=m
+CONFIG_HYPERV_STORAGE=m
CONFIG_LIBFC=m
CONFIG_LIBFCOE=m
CONFIG_FCOE=m
@@ -1728,6 +1729,7 @@ CONFIG_BCACHE=m
# CONFIG_BCACHE_DEBUG is not set
# CONFIG_BCACHE_EDEBUG is not set
# CONFIG_BCACHE_CLOSURES_DEBUG is not set
+CONFIG_BLK_DEV_DM_BUILTIN=y
CONFIG_BLK_DEV_DM=y
# CONFIG_DM_DEBUG is not set
CONFIG_DM_BUFIO=m
@@ -2313,6 +2315,7 @@ CONFIG_MWIFIEX_USB=m
CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_VMXNET3=m
+CONFIG_HYPERV_NET=m
CONFIG_ISDN=y
CONFIG_ISDN_I4L=m
CONFIG_ISDN_PPP=y
@@ -3910,6 +3913,7 @@ CONFIG_XEN_FBDEV_FRONTEND=m
# CONFIG_FB_MB862XX is not set
# CONFIG_FB_BROADSHEET is not set
# CONFIG_FB_AUO_K190X is not set
+CONFIG_FB_HYPERV=m
# CONFIG_EXYNOS_VIDEO is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=m
@@ -4216,6 +4220,7 @@ CONFIG_HID_SPEEDLINK=m
# CONFIG_HID_STEELSERIES is not set
CONFIG_HID_SUNPLUS=m
# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_HYPERV_MOUSE is not set
# CONFIG_HID_SMARTJOYPLUS is not set
CONFIG_HID_TIVO=m
CONFIG_HID_TOPSEED=m
@@ -4493,17 +4498,18 @@ CONFIG_LEDS_CLASS=y
CONFIG_LEDS_LM3530=m
CONFIG_LEDS_LM3533=m
CONFIG_LEDS_LM3642=m
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_GPIO is not set
+CONFIG_LEDS_PCA9532=m
+CONFIG_LEDS_PCA9532_GPIO=y
+CONFIG_LEDS_GPIO=m
CONFIG_LEDS_LP3944=m
CONFIG_LEDS_LP55XX_COMMON=m
CONFIG_LEDS_LP5521=m
CONFIG_LEDS_LP5523=m
CONFIG_LEDS_LP5562=m
CONFIG_LEDS_CLEVO_MAIL=m
-# CONFIG_LEDS_PCA955X is not set
+CONFIG_LEDS_PCA955X=m
CONFIG_LEDS_PCA9633=m
-# CONFIG_LEDS_BD2802 is not set
+CONFIG_LEDS_BD2802=m
CONFIG_LEDS_INTEL_SS4200=m
CONFIG_LEDS_LT3593=m
CONFIG_LEDS_DELL_NETBOOKS=m
@@ -4643,7 +4649,6 @@ CONFIG_DMA_ACPI=y
#
# DMA Clients
#
-CONFIG_NET_DMA=y
CONFIG_ASYNC_TX_DMA=y
# CONFIG_DMATEST is not set
CONFIG_DCA=m
@@ -4672,7 +4677,9 @@ CONFIG_VIRTIO_MMIO=m
#
# Microsoft Hyper-V guest support
#
-# CONFIG_HYPERV is not set
+CONFIG_HYPERV=m
+CONFIG_HYPERV_UTILS=m
+CONFIG_HYPERV_BALLOON=m
#
# Xen driver support
diff --git a/config/rootfiles/common/i586/linux b/config/rootfiles/common/i586/linux
index d6625169c..3ec81ec95 100644
--- a/config/rootfiles/common/i586/linux
+++ b/config/rootfiles/common/i586/linux
@@ -281,6 +281,7 @@ lib/modules/KVER-ipfire
#lib/modules/KVER-ipfire/kernel/drivers/firmware/edd.ko
#lib/modules/KVER-ipfire/kernel/drivers/firmware/iscsi_ibft.ko
#lib/modules/KVER-ipfire/kernel/drivers/gpio
+#lib/modules/KVER-ipfire/kernel/drivers/gpio/gpio-cs5535.ko
#lib/modules/KVER-ipfire/kernel/drivers/gpio/gpio-ich.ko
#lib/modules/KVER-ipfire/kernel/drivers/gpio/gpio-sch.ko
#lib/modules/KVER-ipfire/kernel/drivers/gpio/gpio-ts5500.ko
@@ -367,6 +368,10 @@ lib/modules/KVER-ipfire
#lib/modules/KVER-ipfire/kernel/drivers/hsi/clients
#lib/modules/KVER-ipfire/kernel/drivers/hsi/clients/hsi_char.ko
#lib/modules/KVER-ipfire/kernel/drivers/hsi/hsi.ko
+#lib/modules/KVER-ipfire/kernel/drivers/hv
+#lib/modules/KVER-ipfire/kernel/drivers/hv/hv_balloon.ko
+#lib/modules/KVER-ipfire/kernel/drivers/hv/hv_utils.ko
+#lib/modules/KVER-ipfire/kernel/drivers/hv/hv_vmbus.ko
#lib/modules/KVER-ipfire/kernel/drivers/hwmon
#lib/modules/KVER-ipfire/kernel/drivers/hwmon/abituguru.ko
#lib/modules/KVER-ipfire/kernel/drivers/hwmon/abituguru3.ko
@@ -619,8 +624,10 @@ lib/modules/KVER-ipfire
#lib/modules/KVER-ipfire/kernel/drivers/isdn/mISDN/mISDN_dsp.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds
#lib/modules/KVER-ipfire/kernel/drivers/leds/dell-led.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-bd2802.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-blinkm.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-clevo-mail.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-gpio.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lm3530.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lm3533.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lm355x.ko
@@ -632,6 +639,8 @@ lib/modules/KVER-ipfire
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp55xx-common.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lt3593.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-ot200.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9532.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca955x.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9633.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-ss4200.ko
#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-tca6507.ko
@@ -1505,6 +1514,8 @@ lib/modules/KVER-ipfire
#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/wiznet/w5300.ko
#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/xircom
#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/xircom/xirc2ps_cs.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/hyperv
+#lib/modules/KVER-ipfire/kernel/drivers/net/hyperv/hv_netvsc.ko
#lib/modules/KVER-ipfire/kernel/drivers/net/ifb.ko
#lib/modules/KVER-ipfire/kernel/drivers/net/imq.ko
#lib/modules/KVER-ipfire/kernel/drivers/net/macvlan.ko
@@ -1867,7 +1878,7 @@ lib/modules/KVER-ipfire
#lib/modules/KVER-ipfire/kernel/drivers/scsi/gdth.ko
#lib/modules/KVER-ipfire/kernel/drivers/scsi/hpsa.ko
#lib/modules/KVER-ipfire/kernel/drivers/scsi/hptiop.ko
-#lib/modules/KVER-ipfire/kernel/drivers/scsi/imm.ko
+#lib/modules/KVER-ipfire/kernel/drivers/scsi/hv_storvsc.ko
#lib/modules/KVER-ipfire/kernel/drivers/scsi/in2000.ko
#lib/modules/KVER-ipfire/kernel/drivers/scsi/initio.ko
#lib/modules/KVER-ipfire/kernel/drivers/scsi/ipr.ko
@@ -2118,6 +2129,7 @@ lib/modules/KVER-ipfire
#lib/modules/KVER-ipfire/kernel/drivers/video/geode/gxfb.ko
#lib/modules/KVER-ipfire/kernel/drivers/video/geode/lxfb.ko
#lib/modules/KVER-ipfire/kernel/drivers/video/hgafb.ko
+#lib/modules/KVER-ipfire/kernel/drivers/video/hyperv_fb.ko
#lib/modules/KVER-ipfire/kernel/drivers/video/i740fb.ko
#lib/modules/KVER-ipfire/kernel/drivers/video/kyro
#lib/modules/KVER-ipfire/kernel/drivers/video/kyro/kyrofb.ko
diff --git a/config/rootfiles/packages/linux-pae b/config/rootfiles/packages/linux-pae
index a7eaf4000..00677aa02 100644
--- a/config/rootfiles/packages/linux-pae
+++ b/config/rootfiles/packages/linux-pae
@@ -364,6 +364,10 @@ lib/modules/KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/kernel/drivers/hsi/clients
#lib/modules/KVER-ipfire-pae/kernel/drivers/hsi/clients/hsi_char.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/hsi/hsi.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hv
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hv/hv_balloon.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hv/hv_utils.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hv/hv_vmbus.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon
#lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/abituguru.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/abituguru3.ko
@@ -616,8 +620,10 @@ lib/modules/KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/kernel/drivers/isdn/mISDN/mISDN_dsp.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/dell-led.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-bd2802.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-blinkm.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-clevo-mail.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-gpio.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lm3530.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lm3533.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lm355x.ko
@@ -629,6 +635,8 @@ lib/modules/KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp55xx-common.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lt3593.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-ot200.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9532.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca955x.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9633.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-ss4200.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-tca6507.ko
@@ -1502,6 +1510,8 @@ lib/modules/KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/wiznet/w5300.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/xircom
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/xircom/xirc2ps_cs.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/hyperv
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/hyperv/hv_netvsc.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ifb.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/imq.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/net/macvlan.ko
@@ -1868,6 +1878,7 @@ lib/modules/KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/gdth.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/hpsa.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/hptiop.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/hv_storvsc.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/imm.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/in2000.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/initio.ko
@@ -2119,6 +2130,7 @@ lib/modules/KVER-ipfire-pae
#lib/modules/KVER-ipfire-pae/kernel/drivers/video/geode/gxfb.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/video/geode/lxfb.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/video/hgafb.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/video/hyperv_fb.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/video/i740fb.ko
#lib/modules/KVER-ipfire-pae/kernel/drivers/video/kyro
#lib/modules/KVER-ipfire-pae/kernel/drivers/video/kyro/kyrofb.ko
diff --git a/config/u-boot/boot.scr b/config/u-boot/boot.scr
index 0d36a6baa..672b15277 100755
Binary files a/config/u-boot/boot.scr and b/config/u-boot/boot.scr differ
diff --git a/config/u-boot/boot.script b/config/u-boot/boot.script
index 49e6c9c50..66d76282f 100755
--- a/config/u-boot/boot.script
+++ b/config/u-boot/boot.script
@@ -1,7 +1,7 @@
fatload mmc 0:1 0x82000000 zImage-ipfire-multi
fatload mmc 0:1 0x85000000 uInit-ipfire-multi
#fatload mmc 0:1 ${fdtaddr} omap4-${board_name}.dtb
-setenv bootargs vram=32M earlyprintk console=tty1 rootwait smsc95xx.macaddr=$usbethaddr root=/dev/mmcblk0p3 ro
+setenv bootargs video=800x600 console=tty1 rootwait smsc95xx.macaddr=$usbethaddr root=/dev/mmcblk0p3 ro
# Pandaboard has serious Problems in dt mode with kernel 3.10.x
#bootz 0x82000000 0x85000000 ${fdtaddr}
bootz 0x82000000 0x85000000
diff --git a/html/cgi-bin/atm-status.cgi b/html/cgi-bin/atm-status.cgi
index 5c0fa8be9..c2a9914f7 100644
--- a/html/cgi-bin/atm-status.cgi
+++ b/html/cgi-bin/atm-status.cgi
@@ -46,6 +46,27 @@ foreach (@modems){
my $lines=0;
print "
";
my $modem=$_;
+ my @pfile = `grep . /sys/class/atm/$modem/parameters/* 2>/dev/null`;
+ foreach (@pfile){
+ chomp($_);
+ my $param= `echo $_ | cut -d'/' -f7 | cut -d':' -f1`;
+ my $value= `cat /sys/class/atm/$modem/parameters/$param`;
+ chomp($param);
+ chomp($value);
+ if (!($param =~"uevent")
+ && !($param =~"resource")
+ && !($param eq "")
+ ) {
+
+ $lines++;
+ if ($lines % 2){
+ print "";
+ }else{
+ print "
";
+ }
+ print "| $param | $value | ";
+ }
+ }
my @pfile = `grep . /sys/class/atm/$modem/device/* 2>/dev/null`;
foreach (@pfile){
chomp($_);
@@ -58,6 +79,8 @@ foreach (@modems){
&& !($param =~"bInterface")
&& !($param =~"bAlternateSetting")
&& !($param =~"bNumEndpoints")
+ && !($param =~"config matches")
+ && !($param =~"resource")
&& !($param eq "")
) {
diff --git a/lfs/linux b/lfs/linux
index 08fa9a3c8..d4607085d 100644
--- a/lfs/linux
+++ b/lfs/linux
@@ -24,10 +24,10 @@
include Config
-VER = 3.10.29
+VER = 3.10.30
RPI_PATCHES = linux-3.10.27-grsec-943b563
-GRS_PATCHES = grsecurity-2.9.1-3.10.29-ipfire1.patch.xz
+GRS_PATCHES = grsecurity-2.9.1-3.10.30-ipfire1.patch.xz
THISAPP = linux-$(VER)
DL_FILE = linux-$(VER).tar.xz
@@ -36,7 +36,7 @@ DIR_APP = $(DIR_SRC)/$(THISAPP)
CFLAGS =
CXXFLAGS =
-PAK_VER = 34
+PAK_VER = 35
DEPS = ""
VERSUFIX=ipfire$(KCFG)
@@ -74,9 +74,9 @@ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE)
rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz
$(GRS_PATCHES) = $(URL_IPFIRE)/$(GRS_PATCHES)
-$(DL_FILE)_MD5 = 59e4f495b1302f2bca0e72d204c5fd0b
+$(DL_FILE)_MD5 = f48ca7dd9f2eb14a2903cb6a4fbe07ed
rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 8cf81f48408306d93ccee59b58af2e92
-$(GRS_PATCHES)_MD5 = b39b69eb7439141621ecf0221b3bd29e
+$(GRS_PATCHES)_MD5 = 044e29280d4717441e89e8d80abba563
install : $(TARGET)
@@ -112,7 +112,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
ln -svf linux-$(VER) $(DIR_SRC)/linux
# Linux Intermediate Queueing Device
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.25-imq.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.30-imq.patch
# ipp2p 0.8.2-ipfire
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-ipp2p-0.8.2-ipfire.patch
@@ -124,7 +124,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
ifneq "$(KCFG)" "-headers"
cd $(DIR_APP) && xz -c -d $(DIR_DL)/$(GRS_PATCHES) | patch -Np1
cd $(DIR_APP) && rm localversion-grsec
- cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grsecurity-haswell-32bit-fix.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.7-disable-compat_vdso.patch
endif
@@ -148,6 +147,9 @@ endif
# Add LED trigger
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.9-ledtrig-netdev-1.patch
+ # cs5535audio spams syslog if no ac97 was present (geos router)
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.30_cs5535audio_fix_logspam_on_geos.patch
+
# Fix uevent PHYSDEVDRIVER
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2.33_ipg-fix-driver-name.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.32.27_mcs7830-fix-driver-name.patch
@@ -161,11 +163,41 @@ endif
ifeq "$(KCFG)" "-multi"
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.27-fs-exec-atomic64-operand-requires-impossible-reload.patch
-# cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-0001-panda-wlan-fix.patch
-# cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-0002-panda-i2c.patch
-# cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-panda-reboot.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-smsc95xx-add_mac_addr_param.patch
+ # Patchset for Omap (beagle/panda).
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch
+ cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch
+
# Patchset for Wandboard.
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0001-imx6qdl-wandboard-dts-backport.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0002-ARM-dts-imx6qdl-wandboard-add-gpio-lines-to-wandboar.patch
diff --git a/src/initscripts/init.d/leds b/src/initscripts/init.d/leds
index 3bd27a473..52ef2705d 100644
--- a/src/initscripts/init.d/leds
+++ b/src/initscripts/init.d/leds
@@ -50,6 +50,14 @@ disable_led_trigger ()
fi
}
+# enable LED
+enable_led ()
+{
+ if [ -d "/sys/class/leds/$1" ]; then
+ echo "1" > /sys/class/leds/$1/brightness
+ fi
+}
+
case "${1}" in
start)
# Alix LED start
@@ -57,6 +65,11 @@ case "${1}" in
setup_netdev_trigger alix:2 ${RED_DEV} rx
setup_netdev_trigger alix:3 ${RED_DEV} tx
+ # Geos LED start
+ setup_heartbeat_trigger geos:1
+ setup_netdev_trigger geos:2 ${RED_DEV} rx
+ setup_netdev_trigger geos:3 ${RED_DEV} tx
+
# Dreamplug
setup_netdev_trigger dreamplug:green:wlan ${GREEN_DEV} tx rx
setup_netdev_trigger dreamplug:blue:wlanap ${BLUE_DEV} tx rx
@@ -80,9 +93,16 @@ case "${1}" in
stop)
# Alix LED stop
disable_led_trigger alix:1
+ enable_led alix:1
disable_led_trigger alix:2
disable_led_trigger alix:3
+ # Geos LED stop
+ disable_led_trigger geos:1
+ enable_led geos:1
+ disable_led_trigger geos:2
+ disable_led_trigger geos:3
+
# Dreamplug
disable_led_trigger dreamplug:green:wlan
disable_led_trigger dreamplug:blue:wlanap
diff --git a/src/patches/grsecurity-haswell-32bit-fix.patch b/src/patches/grsecurity-haswell-32bit-fix.patch
deleted file mode 100644
index abff2b02d..000000000
--- a/src/patches/grsecurity-haswell-32bit-fix.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
-index 7430027..2124e35 100644
---- a/arch/x86/include/asm/mmu_context.h
-+++ b/arch/x86/include/asm/mmu_context.h
-@@ -80,7 +80,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
- #if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
- if (static_cpu_has(X86_FEATURE_PCID)) {
- if (static_cpu_has(X86_FEATURE_INVPCID)) {
-- unsigned long descriptor[2];
-+ u64 descriptor[2];
- descriptor[0] = PCID_USER;
- asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_SINGLE_CONTEXT) : "memory");
- } else {
-@@ -144,7 +144,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
- #if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF)
- if (static_cpu_has(X86_FEATURE_PCID)) {
- if (static_cpu_has(X86_FEATURE_INVPCID)) {
-- unsigned long descriptor[2];
-+ u64 descriptor[2];
- descriptor[0] = PCID_USER;
- asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_SINGLE_CONTEXT) : "memory");
- } else {
-diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
-index 45844c0..ada2172 100644
---- a/arch/x86/include/asm/tlbflush.h
-+++ b/arch/x86/include/asm/tlbflush.h
-@@ -18,7 +18,7 @@
- static inline void __native_flush_tlb(void)
- {
- if (static_cpu_has(X86_FEATURE_INVPCID)) {
-- unsigned long descriptor[2];
-+ u64 descriptor[2];
-
- descriptor[0] = PCID_KERNEL;
- asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_ALL_MONGLOBAL) : "memory");
-@@ -42,7 +42,7 @@ static inline void __native_flush_tlb(void)
- static inline void __native_flush_tlb_global_irq_disabled(void)
- {
- if (static_cpu_has(X86_FEATURE_INVPCID)) {
-- unsigned long descriptor[2];
-+ u64 descriptor[2];
-
- descriptor[0] = PCID_KERNEL;
- asm volatile(__ASM_INVPCID : : "d"(&descriptor), "a"(INVPCID_ALL_GLOBAL) : "memory");
-@@ -77,7 +77,7 @@ static inline void __native_flush_tlb_single(unsigned long addr)
- {
-
- if (static_cpu_has(X86_FEATURE_INVPCID)) {
-- unsigned long descriptor[2];
-+ u64 descriptor[2];
-
- descriptor[0] = PCID_KERNEL;
- descriptor[1] = addr;
diff --git a/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch b/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch
new file mode 100644
index 000000000..d27ad54ea
--- /dev/null
+++ b/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch
@@ -0,0 +1,88 @@
+From 2e908aeebd6804296e7d14a96de6be1e2de38e93 Mon Sep 17 00:00:00 2001
+From: Matthias Brugger
+Date: Wed, 23 Jan 2013 19:50:38 +0100
+Subject: [PATCH 2/2] omap2: twl-common: Add default power configuration
+
+This patch adds a generic power script configuration.
+When rebooting an OMAP3530 at 125 MHz, the reboot hangs.
+With the generic power script, TWL4030 will be reset
+when a warm reset occures. This way the OMAP3530 does not
+hang on reboot.
+
+Signed-off-by: Matthias Brugger
+---
+ arch/arm/mach-omap2/twl-common.c | 38 ++++++++++++++++++++++++++++++++++++++
+ arch/arm/mach-omap2/twl-common.h | 1 +
+ 2 files changed, 39 insertions(+)
+
+diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c
+index e49b40b..f096beb 100644
+--- a/arch/arm/mach-omap2/twl-common.c
++++ b/arch/arm/mach-omap2/twl-common.c
+@@ -120,6 +120,41 @@ static struct twl4030_audio_data omap3_audio_pdata = {
+ .codec = &omap3_codec,
+ };
+
++static struct twl4030_ins wrst_seq[] __initdata = {
++ {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_OFF), 2},
++ {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_WRST), 15},
++ {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_WRST), 15},
++ {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_WRST), 0x60},
++ {MSG_SINGULAR(DEV_GRP_P1, 0x19, RES_STATE_ACTIVE), 2},
++ {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_ACTIVE), 2},
++};
++
++static struct twl4030_script wrst_script __initdata = {
++ .script = wrst_seq,
++ .size = ARRAY_SIZE(wrst_seq),
++ .flags = TWL4030_WRST_SCRIPT,
++};
++
++static struct twl4030_script *omap3_power_scripts[] __initdata = {
++ &wrst_script,
++};
++
++static struct twl4030_resconfig omap3_rconfig[] = {
++ { .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P3, .type = -1,
++ .type2 = -1 },
++ { .resource = RES_VDD1, .devgroup = DEV_GRP_P1, .type = -1,
++ .type2 = -1 },
++ { .resource = RES_VDD2, .devgroup = DEV_GRP_P1, .type = -1,
++ .type2 = -1 },
++ { 0, 0},
++};
++
++static struct twl4030_power_data omap3_power_pdata = {
++ .scripts = omap3_power_scripts,
++ .num = ARRAY_SIZE(omap3_power_scripts),
++ .resource_config = omap3_rconfig,
++};
++
+ static struct regulator_consumer_supply omap3_vdda_dac_supplies[] = {
+ REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
+ };
+@@ -224,6 +259,9 @@ void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data,
+ if (pdata_flags & TWL_COMMON_PDATA_AUDIO && !pmic_data->audio)
+ pmic_data->audio = &omap3_audio_pdata;
+
++ if (pdata_flags & TWL_COMMON_PDATA_POWER && !pmic_data->power)
++ pmic_data->power = &omap3_power_pdata;
++
+ /* Common regulator configurations */
+ if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac)
+ pmic_data->vdac = &omap3_vdac_idata;
+diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h
+index dcfbad5..dbeb905 100644
+--- a/arch/arm/mach-omap2/twl-common.h
++++ b/arch/arm/mach-omap2/twl-common.h
+@@ -7,6 +7,7 @@
+ #define TWL_COMMON_PDATA_BCI (1 << 1)
+ #define TWL_COMMON_PDATA_MADC (1 << 2)
+ #define TWL_COMMON_PDATA_AUDIO (1 << 3)
++#define TWL_COMMON_PDATA_POWER (1 << 4)
+
+ /* Common LDO regulators for TWL4030/TWL6030 */
+ #define TWL_COMMON_REGULATOR_VDAC (1 << 0)
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch b/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch
new file mode 100644
index 000000000..a61d5b811
--- /dev/null
+++ b/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch
@@ -0,0 +1,444 @@
+From 369b60c157f67a71a6f302ab9843ae2de1805a2a Mon Sep 17 00:00:00 2001
+From: Laurent Pinchart
+Date: Mon, 22 Oct 2012 15:43:00 +0200
+Subject: [PATCH 1/6] omap3isp: Use the common clock framework
+
+Expose the two ISP external clocks XCLKA and XCLKB as common clocks for
+subdev drivers.
+
+Signed-off-by: Laurent Pinchart
+Acked-by: Mike Turquette
+---
+ drivers/media/platform/omap3isp/isp.c | 277 ++++++++++++++++++++++++---------
+ drivers/media/platform/omap3isp/isp.h | 22 ++-
+ include/media/omap3isp.h | 10 +-
+ 3 files changed, 225 insertions(+), 84 deletions(-)
+
+diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
+index 6e5ad8e..1d7dbd5 100644
+--- a/drivers/media/platform/omap3isp/isp.c
++++ b/drivers/media/platform/omap3isp/isp.c
+@@ -55,6 +55,7 @@
+ #include
+
+ #include
++#include
+ #include
+ #include
+ #include
+@@ -148,6 +149,201 @@ void omap3isp_flush(struct isp_device *isp)
+ isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION);
+ }
+
++/* -----------------------------------------------------------------------------
++ * XCLK
++ */
++
++#define to_isp_xclk(_hw) container_of(_hw, struct isp_xclk, hw)
++
++static void isp_xclk_update(struct isp_xclk *xclk, u32 divider)
++{
++ switch (xclk->id) {
++ case ISP_XCLK_A:
++ isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
++ ISPTCTRL_CTRL_DIVA_MASK,
++ divider << ISPTCTRL_CTRL_DIVA_SHIFT);
++ break;
++ case ISP_XCLK_B:
++ isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
++ ISPTCTRL_CTRL_DIVB_MASK,
++ divider << ISPTCTRL_CTRL_DIVB_SHIFT);
++ break;
++ }
++}
++
++static int isp_xclk_prepare(struct clk_hw *hw)
++{
++ struct isp_xclk *xclk = to_isp_xclk(hw);
++
++ omap3isp_get(xclk->isp);
++
++ return 0;
++}
++
++static void isp_xclk_unprepare(struct clk_hw *hw)
++{
++ struct isp_xclk *xclk = to_isp_xclk(hw);
++
++ omap3isp_put(xclk->isp);
++}
++
++static int isp_xclk_enable(struct clk_hw *hw)
++{
++ struct isp_xclk *xclk = to_isp_xclk(hw);
++ unsigned long flags;
++
++ spin_lock_irqsave(&xclk->lock, flags);
++ isp_xclk_update(xclk, xclk->divider);
++ xclk->enabled = true;
++ spin_unlock_irqrestore(&xclk->lock, flags);
++
++ return 0;
++}
++
++static void isp_xclk_disable(struct clk_hw *hw)
++{
++ struct isp_xclk *xclk = to_isp_xclk(hw);
++ unsigned long flags;
++
++ spin_lock_irqsave(&xclk->lock, flags);
++ isp_xclk_update(xclk, 0);
++ xclk->enabled = false;
++ spin_unlock_irqrestore(&xclk->lock, flags);
++}
++
++static unsigned long isp_xclk_recalc_rate(struct clk_hw *hw,
++ unsigned long parent_rate)
++{
++ struct isp_xclk *xclk = to_isp_xclk(hw);
++
++ return parent_rate / xclk->divider;
++}
++
++static u32 isp_xclk_calc_divider(unsigned long *rate, unsigned long parent_rate)
++{
++ u32 divider;
++
++ if (*rate >= parent_rate) {
++ *rate = parent_rate;
++ return ISPTCTRL_CTRL_DIV_BYPASS;
++ }
++
++ divider = DIV_ROUND_CLOSEST(parent_rate, *rate);
++ if (divider >= ISPTCTRL_CTRL_DIV_BYPASS)
++ divider = ISPTCTRL_CTRL_DIV_BYPASS - 1;
++
++ *rate = parent_rate / divider;
++ return divider;
++}
++
++static long isp_xclk_round_rate(struct clk_hw *hw, unsigned long rate,
++ unsigned long *parent_rate)
++{
++ isp_xclk_calc_divider(&rate, *parent_rate);
++ return rate;
++}
++
++static int isp_xclk_set_rate(struct clk_hw *hw, unsigned long rate,
++ unsigned long parent_rate)
++{
++ struct isp_xclk *xclk = to_isp_xclk(hw);
++ unsigned long flags;
++ u32 divider;
++
++ divider = isp_xclk_calc_divider(&rate, parent_rate);
++
++ spin_lock_irqsave(&xclk->lock, flags);
++
++ xclk->divider = divider;
++ if (xclk->enabled)
++ isp_xclk_update(xclk, divider);
++
++ spin_unlock_irqrestore(&xclk->lock, flags);
++
++ dev_dbg(xclk->isp->dev, "%s: cam_xclk%c set to %lu Hz (div %u)\n",
++ __func__, xclk->id == ISP_XCLK_A ? 'a' : 'b', rate, divider);
++ return 0;
++}
++
++static const struct clk_ops isp_xclk_ops = {
++ .prepare = isp_xclk_prepare,
++ .unprepare = isp_xclk_unprepare,
++ .enable = isp_xclk_enable,
++ .disable = isp_xclk_disable,
++ .recalc_rate = isp_xclk_recalc_rate,
++ .round_rate = isp_xclk_round_rate,
++ .set_rate = isp_xclk_set_rate,
++};
++
++static const char *isp_xclk_parent_name = "cam_mclk";
++
++static const struct clk_init_data isp_xclk_init_data = {
++ .name = "cam_xclk",
++ .ops = &isp_xclk_ops,
++ .parent_names = &isp_xclk_parent_name,
++ .num_parents = 1,
++};
++
++static int isp_xclk_init(struct isp_device *isp)
++{
++ struct isp_platform_data *pdata = isp->pdata;
++ struct clk_init_data init;
++ unsigned int i;
++
++ for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) {
++ struct isp_xclk *xclk = &isp->xclks[i];
++ struct clk *clk;
++
++ xclk->isp = isp;
++ xclk->id = i == 0 ? ISP_XCLK_A : ISP_XCLK_B;
++ xclk->divider = 1;
++ spin_lock_init(&xclk->lock);
++
++ init.name = i == 0 ? "cam_xclka" : "cam_xclkb";
++ init.ops = &isp_xclk_ops;
++ init.parent_names = &isp_xclk_parent_name;
++ init.num_parents = 1;
++
++ xclk->hw.init = &init;
++
++ clk = devm_clk_register(isp->dev, &xclk->hw);
++ if (IS_ERR(clk))
++ return PTR_ERR(clk);
++
++ if (pdata->xclks[i].con_id == NULL &&
++ pdata->xclks[i].dev_id == NULL)
++ continue;
++
++ xclk->lookup = kzalloc(sizeof(*xclk->lookup), GFP_KERNEL);
++ if (xclk->lookup == NULL)
++ return -ENOMEM;
++
++ xclk->lookup->con_id = pdata->xclks[i].con_id;
++ xclk->lookup->dev_id = pdata->xclks[i].dev_id;
++ xclk->lookup->clk = clk;
++
++ clkdev_add(xclk->lookup);
++ }
++
++ return 0;
++}
++
++static void isp_xclk_cleanup(struct isp_device *isp)
++{
++ unsigned int i;
++
++ for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) {
++ struct isp_xclk *xclk = &isp->xclks[i];
++
++ if (xclk->lookup)
++ clkdev_drop(xclk->lookup);
++ }
++}
++
++/* -----------------------------------------------------------------------------
++ * Interrupts
++ */
++
+ /*
+ * isp_enable_interrupts - Enable ISP interrupts.
+ * @isp: OMAP3 ISP device
+@@ -180,80 +376,6 @@ static void isp_disable_interrupts(struct isp_device *isp)
+ isp_reg_writel(isp, 0, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0ENABLE);
+ }
+
+-/**
+- * isp_set_xclk - Configures the specified cam_xclk to the desired frequency.
+- * @isp: OMAP3 ISP device
+- * @xclk: Desired frequency of the clock in Hz. 0 = stable low, 1 is stable high
+- * @xclksel: XCLK to configure (0 = A, 1 = B).
+- *
+- * Configures the specified MCLK divisor in the ISP timing control register
+- * (TCTRL_CTRL) to generate the desired xclk clock value.
+- *
+- * Divisor = cam_mclk_hz / xclk
+- *
+- * Returns the final frequency that is actually being generated
+- **/
+-static u32 isp_set_xclk(struct isp_device *isp, u32 xclk, u8 xclksel)
+-{
+- u32 divisor;
+- u32 currentxclk;
+- unsigned long mclk_hz;
+-
+- if (!omap3isp_get(isp))
+- return 0;
+-
+- mclk_hz = clk_get_rate(isp->clock[ISP_CLK_CAM_MCLK]);
+-
+- if (xclk >= mclk_hz) {
+- divisor = ISPTCTRL_CTRL_DIV_BYPASS;
+- currentxclk = mclk_hz;
+- } else if (xclk >= 2) {
+- divisor = mclk_hz / xclk;
+- if (divisor >= ISPTCTRL_CTRL_DIV_BYPASS)
+- divisor = ISPTCTRL_CTRL_DIV_BYPASS - 1;
+- currentxclk = mclk_hz / divisor;
+- } else {
+- divisor = xclk;
+- currentxclk = 0;
+- }
+-
+- switch (xclksel) {
+- case ISP_XCLK_A:
+- isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
+- ISPTCTRL_CTRL_DIVA_MASK,
+- divisor << ISPTCTRL_CTRL_DIVA_SHIFT);
+- dev_dbg(isp->dev, "isp_set_xclk(): cam_xclka set to %d Hz\n",
+- currentxclk);
+- break;
+- case ISP_XCLK_B:
+- isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
+- ISPTCTRL_CTRL_DIVB_MASK,
+- divisor << ISPTCTRL_CTRL_DIVB_SHIFT);
+- dev_dbg(isp->dev, "isp_set_xclk(): cam_xclkb set to %d Hz\n",
+- currentxclk);
+- break;
+- case ISP_XCLK_NONE:
+- default:
+- omap3isp_put(isp);
+- dev_dbg(isp->dev, "ISP_ERR: isp_set_xclk(): Invalid requested "
+- "xclk. Must be 0 (A) or 1 (B).\n");
+- return -EINVAL;
+- }
+-
+- /* Do we go from stable whatever to clock? */
+- if (divisor >= 2 && isp->xclk_divisor[xclksel - 1] < 2)
+- omap3isp_get(isp);
+- /* Stopping the clock. */
+- else if (divisor < 2 && isp->xclk_divisor[xclksel - 1] >= 2)
+- omap3isp_put(isp);
+-
+- isp->xclk_divisor[xclksel - 1] = divisor;
+-
+- omap3isp_put(isp);
+-
+- return currentxclk;
+-}
+-
+ /*
+ * isp_core_init - ISP core settings
+ * @isp: OMAP3 ISP device
+@@ -1969,6 +2091,7 @@ static int isp_remove(struct platform_device *pdev)
+
+ isp_unregister_entities(isp);
+ isp_cleanup_modules(isp);
++ isp_xclk_cleanup(isp);
+
+ __omap3isp_get(isp, false);
+ iommu_detach_device(isp->domain, &pdev->dev);
+@@ -2042,7 +2165,6 @@ static int isp_probe(struct platform_device *pdev)
+ }
+
+ isp->autoidle = autoidle;
+- isp->platform_cb.set_xclk = isp_set_xclk;
+
+ mutex_init(&isp->isp_mutex);
+ spin_lock_init(&isp->stat_lock);
+@@ -2093,6 +2215,10 @@ static int isp_probe(struct platform_device *pdev)
+ if (ret < 0)
+ goto error_isp;
+
++ ret = isp_xclk_init(isp);
++ if (ret < 0)
++ goto error_isp;
++
+ /* Memory resources */
+ for (m = 0; m < ARRAY_SIZE(isp_res_maps); m++)
+ if (isp->revision == isp_res_maps[m].isp_rev)
+@@ -2162,6 +2288,7 @@ detach_dev:
+ free_domain:
+ iommu_domain_free(isp->domain);
+ error_isp:
++ isp_xclk_cleanup(isp);
+ omap3isp_put(isp);
+ error:
+ platform_set_drvdata(pdev, NULL);
+diff --git a/drivers/media/platform/omap3isp/isp.h b/drivers/media/platform/omap3isp/isp.h
+index c77e1f2..cd3eff4 100644
+--- a/drivers/media/platform/omap3isp/isp.h
++++ b/drivers/media/platform/omap3isp/isp.h
+@@ -29,6 +29,7 @@
+
+ #include
+ #include
++#include
+ #include
+ #include
+ #include
+@@ -125,8 +126,20 @@ struct isp_reg {
+ u32 val;
+ };
+
+-struct isp_platform_callback {
+- u32 (*set_xclk)(struct isp_device *isp, u32 xclk, u8 xclksel);
++enum isp_xclk_id {
++ ISP_XCLK_A,
++ ISP_XCLK_B,
++};
++
++struct isp_xclk {
++ struct isp_device *isp;
++ struct clk_hw hw;
++ struct clk_lookup *lookup;
++ enum isp_xclk_id id;
++
++ spinlock_t lock; /* Protects enabled and divider */
++ bool enabled;
++ unsigned int divider;
+ };
+
+ /*
+@@ -149,6 +162,7 @@ struct isp_platform_callback {
+ * @cam_mclk: Pointer to camera functional clock structure.
+ * @csi2_fck: Pointer to camera CSI2 complexIO clock structure.
+ * @l3_ick: Pointer to OMAP3 L3 bus interface clock.
++ * @xclks: External clocks provided by the ISP
+ * @irq: Currently attached ISP ISR callbacks information structure.
+ * @isp_af: Pointer to current settings for ISP AutoFocus SCM.
+ * @isp_hist: Pointer to current settings for ISP Histogram SCM.
+@@ -185,12 +199,12 @@ struct isp_device {
+ int has_context;
+ int ref_count;
+ unsigned int autoidle;
+- u32 xclk_divisor[2]; /* Two clocks, a and b. */
+ #define ISP_CLK_CAM_ICK 0
+ #define ISP_CLK_CAM_MCLK 1
+ #define ISP_CLK_CSI2_FCK 2
+ #define ISP_CLK_L3_ICK 3
+ struct clk *clock[4];
++ struct isp_xclk xclks[2];
+
+ /* ISP modules */
+ struct ispstat isp_af;
+@@ -209,8 +223,6 @@ struct isp_device {
+ unsigned int subclk_resources;
+
+ struct iommu_domain *domain;
+-
+- struct isp_platform_callback platform_cb;
+ };
+
+ #define v4l2_dev_to_isp_device(dev) \
+diff --git a/include/media/omap3isp.h b/include/media/omap3isp.h
+index 9584269..c9d06d9 100644
+--- a/include/media/omap3isp.h
++++ b/include/media/omap3isp.h
+@@ -29,10 +29,6 @@
+ struct i2c_board_info;
+ struct isp_device;
+
+-#define ISP_XCLK_NONE 0
+-#define ISP_XCLK_A 1
+-#define ISP_XCLK_B 2
+-
+ enum isp_interface_type {
+ ISP_INTERFACE_PARALLEL,
+ ISP_INTERFACE_CSI2A_PHY2,
+@@ -153,7 +149,13 @@ struct isp_v4l2_subdevs_group {
+ } bus; /* gcc < 4.6.0 chokes on anonymous union initializers */
+ };
+
++struct isp_platform_xclk {
++ const char *dev_id;
++ const char *con_id;
++};
++
+ struct isp_platform_data {
++ struct isp_platform_xclk xclks[2];
+ struct isp_v4l2_subdevs_group *subdevs;
+ void (*set_constraints)(struct isp_device *isp, bool enable);
+ };
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch b/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch
new file mode 100644
index 000000000..9d2b19caf
--- /dev/null
+++ b/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch
@@ -0,0 +1,91 @@
+From 7c44c8a989ad01bd7cd02370d4ca4a742db218be Mon Sep 17 00:00:00 2001
+From: Laurent Pinchart
+Date: Tue, 25 Sep 2012 15:46:34 +0200
+Subject: [PATCH 2/6] mt9m032: Fix PLL setup
+
+The MT9M032 PLL was assumed to be identical to the MT9P031 PLL but
+differs significantly. Update the registers definitions and PLL limits
+according to the datasheet.
+
+Signed-off-by: Laurent Pinchart
+---
+ drivers/media/i2c/mt9m032.c | 24 +++++++++++++-----------
+ 1 file changed, 13 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c
+index f80c1d7e..30d755a 100644
+--- a/drivers/media/i2c/mt9m032.c
++++ b/drivers/media/i2c/mt9m032.c
+@@ -87,7 +87,7 @@
+ #define MT9M032_RESTART 0x0b
+ #define MT9M032_RESET 0x0d
+ #define MT9M032_PLL_CONFIG1 0x11
+-#define MT9M032_PLL_CONFIG1_OUTDIV_MASK 0x3f
++#define MT9M032_PLL_CONFIG1_PREDIV_MASK 0x3f
+ #define MT9M032_PLL_CONFIG1_MUL_SHIFT 8
+ #define MT9M032_READ_MODE1 0x1e
+ #define MT9M032_READ_MODE2 0x20
+@@ -106,6 +106,8 @@
+ #define MT9M032_GAIN_AMUL_SHIFT 6
+ #define MT9M032_GAIN_ANALOG_MASK 0x3f
+ #define MT9M032_FORMATTER1 0x9e
++#define MT9M032_FORMATTER1_PLL_P1_6 (1 << 8)
++#define MT9M032_FORMATTER1_PARALLEL (1 << 12)
+ #define MT9M032_FORMATTER2 0x9f
+ #define MT9M032_FORMATTER2_DOUT_EN 0x1000
+ #define MT9M032_FORMATTER2_PIXCLK_EN 0x2000
+@@ -121,8 +123,6 @@
+ #define MT9P031_PLL_CONTROL_PWROFF 0x0050
+ #define MT9P031_PLL_CONTROL_PWRON 0x0051
+ #define MT9P031_PLL_CONTROL_USEPLL 0x0052
+-#define MT9P031_PLL_CONFIG2 0x11
+-#define MT9P031_PLL_CONFIG2_P1_DIV_MASK 0x1f
+
+ struct mt9m032 {
+ struct v4l2_subdev subdev;
+@@ -255,13 +255,14 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
+ .n_max = 64,
+ .m_min = 16,
+ .m_max = 255,
+- .p1_min = 1,
+- .p1_max = 128,
++ .p1_min = 6,
++ .p1_max = 7,
+ };
+
+ struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
+ struct mt9m032_platform_data *pdata = sensor->pdata;
+ struct aptina_pll pll;
++ u16 reg_val;
+ int ret;
+
+ pll.ext_clock = pdata->ext_clock;
+@@ -274,18 +275,19 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
+ sensor->pix_clock = pdata->pix_clock;
+
+ ret = mt9m032_write(client, MT9M032_PLL_CONFIG1,
+- (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT)
+- | (pll.p1 - 1));
+- if (!ret)
+- ret = mt9m032_write(client, MT9P031_PLL_CONFIG2, pll.n - 1);
++ (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT) |
++ ((pll.n - 1) & MT9M032_PLL_CONFIG1_PREDIV_MASK));
+ if (!ret)
+ ret = mt9m032_write(client, MT9P031_PLL_CONTROL,
+ MT9P031_PLL_CONTROL_PWRON |
+ MT9P031_PLL_CONTROL_USEPLL);
+ if (!ret) /* more reserved, Continuous, Master Mode */
+ ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006);
+- if (!ret) /* Set 14-bit mode, select 7 divider */
+- ret = mt9m032_write(client, MT9M032_FORMATTER1, 0x111e);
++ if (!ret) {
++ reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0)
++ | MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */
++ ret = mt9m032_write(client, MT9M032_FORMATTER1, reg_val);
++ }
+
+ return ret;
+ }
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch b/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch
new file mode 100644
index 000000000..c80e87641
--- /dev/null
+++ b/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch
@@ -0,0 +1,55 @@
+From 1115becbb4875d62abb10f94a9510c81f376606f Mon Sep 17 00:00:00 2001
+From: Laurent Pinchart
+Date: Wed, 26 Sep 2012 10:54:17 +0200
+Subject: [PATCH 3/6] mt9m032: Define MT9M032_READ_MODE1 bits
+
+Replace hardcoded values with #define's.
+
+Signed-off-by: Laurent Pinchart
+---
+ drivers/media/i2c/mt9m032.c | 22 +++++++++++++++++++++-
+ 1 file changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c
+index 30d755a..de150d3 100644
+--- a/drivers/media/i2c/mt9m032.c
++++ b/drivers/media/i2c/mt9m032.c
+@@ -90,6 +90,24 @@
+ #define MT9M032_PLL_CONFIG1_PREDIV_MASK 0x3f
+ #define MT9M032_PLL_CONFIG1_MUL_SHIFT 8
+ #define MT9M032_READ_MODE1 0x1e
++#define MT9M032_READ_MODE1_OUTPUT_BAD_FRAMES (1 << 13)
++#define MT9M032_READ_MODE1_MAINTAIN_FRAME_RATE (1 << 12)
++#define MT9M032_READ_MODE1_XOR_LINE_VALID (1 << 11)
++#define MT9M032_READ_MODE1_CONT_LINE_VALID (1 << 10)
++#define MT9M032_READ_MODE1_INVERT_TRIGGER (1 << 9)
++#define MT9M032_READ_MODE1_SNAPSHOT (1 << 8)
++#define MT9M032_READ_MODE1_GLOBAL_RESET (1 << 7)
++#define MT9M032_READ_MODE1_BULB_EXPOSURE (1 << 6)
++#define MT9M032_READ_MODE1_INVERT_STROBE (1 << 5)
++#define MT9M032_READ_MODE1_STROBE_ENABLE (1 << 4)
++#define MT9M032_READ_MODE1_STROBE_START_TRIG1 (0 << 2)
++#define MT9M032_READ_MODE1_STROBE_START_EXP (1 << 2)
++#define MT9M032_READ_MODE1_STROBE_START_SHUTTER (2 << 2)
++#define MT9M032_READ_MODE1_STROBE_START_TRIG2 (3 << 2)
++#define MT9M032_READ_MODE1_STROBE_END_TRIG1 (0 << 0)
++#define MT9M032_READ_MODE1_STROBE_END_EXP (1 << 0)
++#define MT9M032_READ_MODE1_STROBE_END_SHUTTER (2 << 0)
++#define MT9M032_READ_MODE1_STROBE_END_TRIG2 (3 << 0)
+ #define MT9M032_READ_MODE2 0x20
+ #define MT9M032_READ_MODE2_VFLIP_SHIFT 15
+ #define MT9M032_READ_MODE2_HFLIP_SHIFT 14
+@@ -282,7 +300,9 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
+ MT9P031_PLL_CONTROL_PWRON |
+ MT9P031_PLL_CONTROL_USEPLL);
+ if (!ret) /* more reserved, Continuous, Master Mode */
+- ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006);
++ ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8000 |
++ MT9M032_READ_MODE1_STROBE_START_EXP |
++ MT9M032_READ_MODE1_STROBE_END_SHUTTER);
+ if (!ret) {
+ reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0)
+ | MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch b/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch
new file mode 100644
index 000000000..bcc436014
--- /dev/null
+++ b/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch
@@ -0,0 +1,62 @@
+From d3f188f38eaa34acf6375d5d88fe27971aae1170 Mon Sep 17 00:00:00 2001
+From: Laurent Pinchart
+Date: Fri, 21 Dec 2012 20:34:06 +0100
+Subject: [PATCH 4/6] mt9p031: Use devm_* managed helpers
+
+Replace kzalloc and gpio_request_one by their managed equivalents.
+
+Signed-off-by: Laurent Pinchart
+---
+ drivers/media/i2c/mt9p031.c | 13 +++----------
+ 1 file changed, 3 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
+index e328332..e0bad59 100644
+--- a/drivers/media/i2c/mt9p031.c
++++ b/drivers/media/i2c/mt9p031.c
+@@ -927,7 +927,7 @@ static int mt9p031_probe(struct i2c_client *client,
+ return -EIO;
+ }
+
+- mt9p031 = kzalloc(sizeof(*mt9p031), GFP_KERNEL);
++ mt9p031 = devm_kzalloc(&client->dev, sizeof(*mt9p031), GFP_KERNEL);
+ if (mt9p031 == NULL)
+ return -ENOMEM;
+
+@@ -1001,8 +1001,8 @@ static int mt9p031_probe(struct i2c_client *client,
+ mt9p031->format.colorspace = V4L2_COLORSPACE_SRGB;
+
+ if (pdata->reset != -1) {
+- ret = gpio_request_one(pdata->reset, GPIOF_OUT_INIT_LOW,
+- "mt9p031_rst");
++ ret = devm_gpio_request_one(&client->dev, pdata->reset,
++ GPIOF_OUT_INIT_LOW, "mt9p031_rst");
+ if (ret < 0)
+ goto done;
+
+@@ -1013,12 +1013,8 @@ static int mt9p031_probe(struct i2c_client *client,
+
+ done:
+ if (ret < 0) {
+- if (mt9p031->reset != -1)
+- gpio_free(mt9p031->reset);
+-
+ v4l2_ctrl_handler_free(&mt9p031->ctrls);
+ media_entity_cleanup(&mt9p031->subdev.entity);
+- kfree(mt9p031);
+ }
+
+ return ret;
+@@ -1032,9 +1028,6 @@ static int mt9p031_remove(struct i2c_client *client)
+ v4l2_ctrl_handler_free(&mt9p031->ctrls);
+ v4l2_device_unregister_subdev(subdev);
+ media_entity_cleanup(&subdev->entity);
+- if (mt9p031->reset != -1)
+- gpio_free(mt9p031->reset);
+- kfree(mt9p031);
+
+ return 0;
+ }
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch b/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch
new file mode 100644
index 000000000..57c80fd0e
--- /dev/null
+++ b/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch
@@ -0,0 +1,82 @@
+From 9ff2bc0c9458f0eecde6d9b52a899fd2bb1dd3a3 Mon Sep 17 00:00:00 2001
+From: Laurent Pinchart
+Date: Tue, 8 May 2012 15:10:36 +0200
+Subject: [PATCH 5/6] mt9p031: Add support for regulators
+
+Enable the regulators when powering the sensor up, and disable them when
+powering it down.
+
+The regulators are mandatory. Boards that don't allow controlling the
+sensor power lines must provide fixed voltage regulators.
+
+Signed-off-by: Laurent Pinchart
+---
+ drivers/media/i2c/mt9p031.c | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
+index e0bad59..ecf4492 100644
+--- a/drivers/media/i2c/mt9p031.c
++++ b/drivers/media/i2c/mt9p031.c
+@@ -19,6 +19,7 @@
+ #include
+ #include
+ #include
++#include
+ #include
+ #include
+
+@@ -121,6 +122,10 @@ struct mt9p031 {
+ struct mutex power_lock; /* lock to protect power_count */
+ int power_count;
+
++ struct regulator *vaa;
++ struct regulator *vdd;
++ struct regulator *vdd_io;
++
+ enum mt9p031_model model;
+ struct aptina_pll pll;
+ int reset;
+@@ -264,6 +269,11 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031)
+ usleep_range(1000, 2000);
+ }
+
++ /* Bring up the supplies */
++ regulator_enable(mt9p031->vdd);
++ regulator_enable(mt9p031->vdd_io);
++ regulator_enable(mt9p031->vaa);
++
+ /* Emable clock */
+ if (mt9p031->pdata->set_xclk)
+ mt9p031->pdata->set_xclk(&mt9p031->subdev,
+@@ -285,6 +295,10 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031)
+ usleep_range(1000, 2000);
+ }
+
++ regulator_disable(mt9p031->vaa);
++ regulator_disable(mt9p031->vdd_io);
++ regulator_disable(mt9p031->vdd);
++
+ if (mt9p031->pdata->set_xclk)
+ mt9p031->pdata->set_xclk(&mt9p031->subdev, 0);
+ }
+@@ -937,6 +951,16 @@ static int mt9p031_probe(struct i2c_client *client,
+ mt9p031->model = did->driver_data;
+ mt9p031->reset = -1;
+
++ mt9p031->vaa = devm_regulator_get(&client->dev, "vaa");
++ mt9p031->vdd = devm_regulator_get(&client->dev, "vdd");
++ mt9p031->vdd_io = devm_regulator_get(&client->dev, "vdd_io");
++
++ if (IS_ERR(mt9p031->vaa) || IS_ERR(mt9p031->vdd) ||
++ IS_ERR(mt9p031->vdd_io)) {
++ dev_err(&client->dev, "Unable to get regulators\n");
++ return -ENODEV;
++ }
++
+ v4l2_ctrl_handler_init(&mt9p031->ctrls, ARRAY_SIZE(mt9p031_ctrls) + 6);
+
+ v4l2_ctrl_new_std(&mt9p031->ctrls, &mt9p031_ctrl_ops,
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch b/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch
new file mode 100644
index 000000000..fc8d583e8
--- /dev/null
+++ b/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch
@@ -0,0 +1,110 @@
+From 6cd62f5ae305142c0490e80caa04f99f00029b68 Mon Sep 17 00:00:00 2001
+From: Laurent Pinchart
+Date: Fri, 21 Dec 2012 20:11:55 +0100
+Subject: [PATCH 6/6] mt9p031: Use the common clock framework
+
+Configure the device external clock using the common clock framework
+instead of a board code callback function.
+
+Signed-off-by: Laurent Pinchart
+Acked-by: Sakari Ailus
+---
+ drivers/media/i2c/mt9p031.c | 21 ++++++++++++++-------
+ include/media/mt9p031.h | 2 --
+ 2 files changed, 14 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
+index ecf4492..28cf95b 100644
+--- a/drivers/media/i2c/mt9p031.c
++++ b/drivers/media/i2c/mt9p031.c
+@@ -12,6 +12,7 @@
+ * published by the Free Software Foundation.
+ */
+
++#include
+ #include
+ #include
+ #include
+@@ -122,6 +123,7 @@ struct mt9p031 {
+ struct mutex power_lock; /* lock to protect power_count */
+ int power_count;
+
++ struct clk *clk;
+ struct regulator *vaa;
+ struct regulator *vdd;
+ struct regulator *vdd_io;
+@@ -200,7 +202,7 @@ static int mt9p031_reset(struct mt9p031 *mt9p031)
+ 0);
+ }
+
+-static int mt9p031_pll_setup(struct mt9p031 *mt9p031)
++static int mt9p031_clk_setup(struct mt9p031 *mt9p031)
+ {
+ static const struct aptina_pll_limits limits = {
+ .ext_clock_min = 6000000,
+@@ -221,6 +223,12 @@ static int mt9p031_pll_setup(struct mt9p031 *mt9p031)
+ struct i2c_client *client = v4l2_get_subdevdata(&mt9p031->subdev);
+ struct mt9p031_platform_data *pdata = mt9p031->pdata;
+
++ mt9p031->clk = devm_clk_get(&client->dev, NULL);
++ if (IS_ERR(mt9p031->clk))
++ return PTR_ERR(mt9p031->clk);
++
++ clk_set_rate(mt9p031->clk, pdata->ext_freq);
++
+ mt9p031->pll.ext_clock = pdata->ext_freq;
+ mt9p031->pll.pix_clock = pdata->target_freq;
+
+@@ -275,9 +283,8 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031)
+ regulator_enable(mt9p031->vaa);
+
+ /* Emable clock */
+- if (mt9p031->pdata->set_xclk)
+- mt9p031->pdata->set_xclk(&mt9p031->subdev,
+- mt9p031->pdata->ext_freq);
++ if (mt9p031->clk)
++ clk_prepare_enable(mt9p031->clk);
+
+ /* Now RESET_BAR must be high */
+ if (mt9p031->reset != -1) {
+@@ -299,8 +306,8 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031)
+ regulator_disable(mt9p031->vdd_io);
+ regulator_disable(mt9p031->vdd);
+
+- if (mt9p031->pdata->set_xclk)
+- mt9p031->pdata->set_xclk(&mt9p031->subdev, 0);
++ if (mt9p031->clk)
++ clk_disable_unprepare(mt9p031->clk);
+ }
+
+ static int __mt9p031_set_power(struct mt9p031 *mt9p031, bool on)
+@@ -1033,7 +1040,7 @@ static int mt9p031_probe(struct i2c_client *client,
+ mt9p031->reset = pdata->reset;
+ }
+
+- ret = mt9p031_pll_setup(mt9p031);
++ ret = mt9p031_clk_setup(mt9p031);
+
+ done:
+ if (ret < 0) {
+diff --git a/include/media/mt9p031.h b/include/media/mt9p031.h
+index 0c97b19..b1e63f2 100644
+--- a/include/media/mt9p031.h
++++ b/include/media/mt9p031.h
+@@ -5,13 +5,11 @@ struct v4l2_subdev;
+
+ /*
+ * struct mt9p031_platform_data - MT9P031 platform data
+- * @set_xclk: Clock frequency set callback
+ * @reset: Chip reset GPIO (set to -1 if not used)
+ * @ext_freq: Input clock frequency
+ * @target_freq: Pixel clock frequency
+ */
+ struct mt9p031_platform_data {
+- int (*set_xclk)(struct v4l2_subdev *subdev, int hz);
+ int reset;
+ int ext_freq;
+ int target_freq;
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch b/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch
new file mode 100644
index 000000000..34d60349b
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch
@@ -0,0 +1,30 @@
+From 6ac98647956cbff190954b4cac6bd71fdbb8647b Mon Sep 17 00:00:00 2001
+From: Robert Nelson
+Date: Wed, 23 Mar 2011 08:37:54 -0500
+Subject: [PATCH 1/5] meego: modedb add Toshiba LTA070B220F 800x480 support
+
+ from http://wiki.meego.com/ARM/Meego_on_Beagleboard_from_scratch
+
+Signed-off-by: Robert Nelson
+---
+ drivers/video/modedb.c | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
+index 5b686de..69ad1ec 100644
+--- a/drivers/video/modedb.c
++++ b/drivers/video/modedb.c
+@@ -293,6 +293,10 @@ static const struct fb_videomode modedb[] = {
+ /* 864x480 @ 60 Hz, 35.15 kHz hsync */
+ { NULL, 60, 864, 480, 27777, 1, 1, 1, 1, 0, 0,
+ 0, FB_VMODE_NONINTERLACED },
++
++ /* 800x480 @ 60 Hz, Toshiba LTA070B220F 7 inch LCD */
++ { NULL, 60, 800, 480, 32787, 48, 80, 33, 31, 32, 2,
++ FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED },
+ };
+
+ #ifdef CONFIG_FB_MODE_HELPERS
+--
+1.7.7.6
+
diff --git a/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch b/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch
new file mode 100644
index 000000000..ce4df825b
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch
@@ -0,0 +1,217 @@
+From e989473bea15beef8d480b822a619e7b8fca860c Mon Sep 17 00:00:00 2001
+From: "Manjunathappa, Prakash"
+Date: Mon, 1 Aug 2011 18:25:11 +0530
+Subject: [PATCH 2/5] backlight: Add TLC59108 backlight control driver
+
+This patch adds support for I2C configurable TLC59108 backlight
+control driver.
+
+Signed-off-by: Manjunathappa, Prakash
+Signed-off-by: Vaibhav Hiremath
+---
+ drivers/video/backlight/Kconfig | 8 ++
+ drivers/video/backlight/Makefile | 1 +
+ drivers/video/backlight/tlc59108.c | 160 ++++++++++++++++++++++++++++++++++++
+ 3 files changed, 169 insertions(+)
+ create mode 100644 drivers/video/backlight/tlc59108.c
+
+diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
+index db10d01..04a2275 100644
+--- a/drivers/video/backlight/Kconfig
++++ b/drivers/video/backlight/Kconfig
+@@ -418,6 +418,14 @@ config BACKLIGHT_AS3711
+ If you have an Austrian Microsystems AS3711 say Y to enable the
+ backlight driver.
+
++config BACKLIGHT_TLC59108
++ tristate "TLC59108 LCD Backlight Driver"
++ depends on I2C && BACKLIGHT_CLASS_DEVICE
++ default n
++ help
++ If you have an LCD Panel with backlight control via TLC59108,
++ say Y to enable its LCD control driver.
++
+ endif # BACKLIGHT_CLASS_DEVICE
+
+ endif # BACKLIGHT_LCD_SUPPORT
+diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
+index 96c4d62..3687852 100644
+--- a/drivers/video/backlight/Makefile
++++ b/drivers/video/backlight/Makefile
+@@ -41,6 +41,7 @@ obj-$(CONFIG_BACKLIGHT_LP855X) += lp855x_bl.o
+ obj-$(CONFIG_BACKLIGHT_LP8788) += lp8788_bl.o
+ obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o
+ obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o
++obj-$(CONFIG_BACKLIGHT_TLC59108) += tlc59108.o
+ obj-$(CONFIG_BACKLIGHT_OT200) += ot200_bl.o
+ obj-$(CONFIG_BACKLIGHT_PANDORA) += pandora_bl.o
+ obj-$(CONFIG_BACKLIGHT_PCF50633) += pcf50633-backlight.o
+diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c
+new file mode 100644
+index 0000000..4f4ea34
+--- /dev/null
++++ b/drivers/video/backlight/tlc59108.c
+@@ -0,0 +1,160 @@
++/*
++ * ti81xxhdmi_tlc59108.c
++ *
++ * Copyright (C) 2011 Texas Instruments
++ * Author: Senthil Natarajan
++ *
++ * tlc59108 HDMI Driver
++ *
++ * 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.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program. If not, see .
++ * History:
++ *
++ * Senthil Natarajan July 2011 I2C driver for tlc59108
++ * backlight control
++ */
++
++#include
++#include
++#include
++#include
++#include
++
++#define tlc59108_MODULE_NAME "tlc59108"
++#define TLC59108_MODE1 0x00
++#define TLC59108_PWM2 0x04
++#define TLC59108_LEDOUT0 0x0c
++#define TLC59108_LEDOUT1 0x0d
++#define TLC59108_MAX_BRIGHTNESS 0xFF
++
++struct tlc59108_bl {
++ struct i2c_client *client;
++ struct backlight_device *bl;
++};
++
++static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness)
++{
++ /* Set Mode1 Register */
++ i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00);
++
++ /* Set LEDOUT0 Register */
++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21);
++
++ /* Set Backlight Duty Cycle*/
++ i2c_smbus_write_byte_data(data->client, TLC59108_PWM2,
++ brightness & 0xff);
++}
++
++static int tlc59108_bl_get_brightness(struct backlight_device *dev)
++{
++ struct backlight_properties *props = &dev->props;
++
++ return props->brightness;
++}
++
++static int tlc59108_bl_update_status(struct backlight_device *dev)
++{
++ struct backlight_properties *props = &dev->props;
++ struct tlc59108_bl *data = dev_get_drvdata(&dev->dev);
++ int brightness = props->brightness;
++
++ tlc59108_bl_set_backlight(data, brightness);
++
++ return 0;
++}
++
++static const struct backlight_ops bl_ops = {
++ .get_brightness = tlc59108_bl_get_brightness,
++ .update_status = tlc59108_bl_update_status,
++};
++
++static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
++{
++ struct backlight_properties props;
++ struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl),
++ GFP_KERNEL);
++ int ret = 0;
++
++ if (!data)
++ return -ENOMEM;
++
++ i2c_set_clientdata(c, data);
++ data->client = c;
++
++ memset(&props, 0, sizeof(struct backlight_properties));
++ props.max_brightness = TLC59108_MAX_BRIGHTNESS;
++ props.type = BACKLIGHT_RAW;
++ data->bl = backlight_device_register("tlc59108-bl", &c->dev, data,
++ &bl_ops, &props);
++ if (IS_ERR(data->bl)) {
++ ret = PTR_ERR(data->bl);
++ goto err_reg;
++ }
++
++ data->bl->props.brightness = TLC59108_MAX_BRIGHTNESS;
++
++ backlight_update_status(data->bl);
++
++ return 0;
++
++err_reg:
++ data->bl = NULL;
++ kfree(data);
++ return ret;
++}
++
++static int tlc59108_remove(struct i2c_client *c)
++{
++ struct tlc59108_bl *data = i2c_get_clientdata(c);
++
++ backlight_device_unregister(data->bl);
++ data->bl = NULL;
++
++ kfree(data);
++
++ return 0;
++}
++
++/* I2C Device ID table */
++static const struct i2c_device_id tlc59108_id[] = {
++ { "tlc59108", 0 },
++ { }
++};
++MODULE_DEVICE_TABLE(i2c, tlc59108_id);
++
++/* I2C driver data */
++static struct i2c_driver tlc59108_driver = {
++ .driver = {
++ .owner = THIS_MODULE,
++ .name = tlc59108_MODULE_NAME,
++ },
++ .probe = tlc59108_probe,
++ .remove = tlc59108_remove,
++ .id_table = tlc59108_id,
++};
++
++static int __init tlc59108_init(void)
++{
++ return i2c_add_driver(&tlc59108_driver);
++}
++
++static void __exit tlc59108_exit(void)
++{
++ i2c_del_driver(&tlc59108_driver);
++}
++
++module_init(tlc59108_init);
++module_exit(tlc59108_exit);
++
++MODULE_DESCRIPTION("LCD/Backlight control for TLC59108");
++MODULE_AUTHOR("Senthil Natarajan ");
++MODULE_LICENSE("GPL v2");
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch b/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch
new file mode 100644
index 000000000..5c9659b6b
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch
@@ -0,0 +1,124 @@
+From 40cbddde06a9f0e1845810b904502f922fc3288f Mon Sep 17 00:00:00 2001
+From: Koen Kooi
+Date: Fri, 27 Apr 2012 21:30:00 +0200
+Subject: [PATCH 3/5] tlc59108: adjust for beagleboard+uLCD7
+
+Signed-off-by: Koen Kooi
+---
+ drivers/video/backlight/tlc59108.c | 46 ++++++++++++++++++++++++-----------
+ 1 files changed, 31 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c
+index 4f4ea34..40a21e7 100644
+--- a/drivers/video/backlight/tlc59108.c
++++ b/drivers/video/backlight/tlc59108.c
+@@ -29,9 +29,16 @@
+ #include
+ #include
+
+-#define tlc59108_MODULE_NAME "tlc59108"
+ #define TLC59108_MODE1 0x00
+-#define TLC59108_PWM2 0x04
++#define TLC59108_MODE2 0x01
++#define TLC59108_PWM0 0x02
++#define TLC59108_PWM1 0x03
++#define TLC59108_PWM2 0x04
++#define TLC59108_PWM3 0x05
++#define TLC59108_PWM4 0x06
++#define TLC59108_PWM5 0x07
++#define TLC59108_PWM6 0x08
++#define TLC59108_PWM7 0x09
+ #define TLC59108_LEDOUT0 0x0c
+ #define TLC59108_LEDOUT1 0x0d
+ #define TLC59108_MAX_BRIGHTNESS 0xFF
+@@ -43,15 +50,9 @@ struct tlc59108_bl {
+
+ static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness)
+ {
+- /* Set Mode1 Register */
+- i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00);
+-
+- /* Set LEDOUT0 Register */
+- i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21);
+-
+ /* Set Backlight Duty Cycle*/
+ i2c_smbus_write_byte_data(data->client, TLC59108_PWM2,
+- brightness & 0xff);
++ 0xff - brightness );
+ }
+
+ static int tlc59108_bl_get_brightness(struct backlight_device *dev)
+@@ -65,8 +66,18 @@ static int tlc59108_bl_update_status(struct backlight_device *dev)
+ {
+ struct backlight_properties *props = &dev->props;
+ struct tlc59108_bl *data = dev_get_drvdata(&dev->dev);
++
+ int brightness = props->brightness;
+
++ if (dev->props.state & BL_CORE_FBBLANK) {
++ brightness = 0;
++ /* Set LEDOUT0 Register */
++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x10);
++ } else {
++ /* Set LEDOUT0 Register */
++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x30);
++ }
++
+ tlc59108_bl_set_backlight(data, brightness);
+
+ return 0;
+@@ -77,7 +88,7 @@ static const struct backlight_ops bl_ops = {
+ .update_status = tlc59108_bl_update_status,
+ };
+
+-static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
++static int __devinit tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
+ {
+ struct backlight_properties props;
+ struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl),
+@@ -104,6 +115,11 @@ static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
+
+ backlight_update_status(data->bl);
+
++ i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00);
++ i2c_smbus_write_byte_data(data->client, TLC59108_PWM2, 0x80);
++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x05);
++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x15);
++
+ return 0;
+
+ err_reg:
+@@ -125,7 +141,7 @@ static int tlc59108_remove(struct i2c_client *c)
+ }
+
+ /* I2C Device ID table */
+-static const struct i2c_device_id tlc59108_id[] = {
++static struct i2c_device_id tlc59108_id[] = {
+ { "tlc59108", 0 },
+ { }
+ };
+@@ -134,12 +150,12 @@ MODULE_DEVICE_TABLE(i2c, tlc59108_id);
+ /* I2C driver data */
+ static struct i2c_driver tlc59108_driver = {
+ .driver = {
+- .owner = THIS_MODULE,
+- .name = tlc59108_MODULE_NAME,
++ .owner = THIS_MODULE,
++ .name = "tlc59108"
+ },
++ .id_table = tlc59108_id,
+ .probe = tlc59108_probe,
+ .remove = tlc59108_remove,
+- .id_table = tlc59108_id,
+ };
+
+ static int __init tlc59108_init(void)
+@@ -157,4 +173,4 @@ module_exit(tlc59108_exit);
+
+ MODULE_DESCRIPTION("LCD/Backlight control for TLC59108");
+ MODULE_AUTHOR("Senthil Natarajan ");
+-MODULE_LICENSE("GPL v2");
++MODULE_LICENSE("GPL");
+--
+1.7.7.6
+
diff --git a/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch b/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch
new file mode 100644
index 000000000..d17942081
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch
@@ -0,0 +1,31 @@
+From 81ff7627ad0d958a5c156cb7d880af8707e14f47 Mon Sep 17 00:00:00 2001
+From: Alexander Holler
+Date: Wed, 4 Jul 2012 00:03:04 +0200
+Subject: [PATCH 4/5] zeroMAP: Open your eyes!
+
+Signed-off-by: Alexander Holler
+---
+ kernel/printk.c | 7 +++++++
+ 1 files changed, 7 insertions(+), 0 deletions(-)
+
+diff --git a/kernel/printk.c b/kernel/printk.c
+index 22e070f..3678740 100644
+--- a/kernel/printk.c
++++ b/kernel/printk.c
+@@ -1759,6 +1759,13 @@ static int __init console_setup(char *str)
+ char *s, *options, *brl_options = NULL;
+ int idx;
+
++#ifdef CONFIG_SERIAL_OMAP
++ if (!strncmp(str, "tty0", 4) && '0' <= str[4] && '9' >= str[4]) {
++ str[3] = 'O';
++ pr_warn("We are opening your eyes, assuming you want to use an OMAP based serial driver and not a zeroMAP based one! ;)\n");
++ pr_warn("Which means 'tty0%s' was changed to 'ttyO%s' automagically for your pleasure.\n", str+4, str+4);
++ }
++#endif
+ #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
+ if (!memcmp(str, "brl,", 4)) {
+ brl_options = "";
+--
+1.7.7.6
+
diff --git a/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch b/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch
new file mode 100644
index 000000000..ffb5ffb57
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch
@@ -0,0 +1,29 @@
+From f2ec859cb99e6137d78b457f8a6693e69e3b1f33 Mon Sep 17 00:00:00 2001
+From: Robert Nelson
+Date: Thu, 24 Jan 2013 09:43:51 -0600
+Subject: [PATCH 5/5] ARM: OMAP: Beagle: use TWL4030 generic reset script
+
+Enable TWL_COMMON_PDATA_POWER such that OMAP3530 revisions of the
+Beagle (Bx/Cx) will not hang on reboot when running at 125 Mhz.
+
+Signed-off-by: Robert Nelson
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 5b57885..9a2c80b 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -831,7 +831,7 @@ static int __init omap3_beagle_i2c_init(void)
+ {
+ omap3_pmic_get_config(&beagle_twldata,
+ TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_MADC |
+- TWL_COMMON_PDATA_AUDIO,
++ TWL_COMMON_PDATA_AUDIO | TWL_COMMON_PDATA_POWER,
+ TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2);
+
+ beagle_twldata.vpll2->constraints.name = "VDVI";
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch b/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch
new file mode 100644
index 000000000..56879cbaf
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch
@@ -0,0 +1,28 @@
+From 40d889a09a05765138f3b737becadfe927c9b004 Mon Sep 17 00:00:00 2001
+From: Robert Nelson
+Date: Tue, 19 Mar 2013 13:40:50 -0500
+Subject: [PATCH 6/6] DSS2: use DSI PLL for DPI with OMAP3
+
+Signed-off-by: Robert Nelson
+---
+ drivers/video/omap2/dss/dpi.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
+index 757b57f..12ed14f 100644
+--- a/drivers/video/omap2/dss/dpi.c
++++ b/drivers/video/omap2/dss/dpi.c
+@@ -58,10 +58,6 @@ static struct platform_device *dpi_get_dsidev(enum omap_channel channel)
+ */
+ switch (omapdss_get_version()) {
+ case OMAPDSS_VER_OMAP24xx:
+- case OMAPDSS_VER_OMAP34xx_ES1:
+- case OMAPDSS_VER_OMAP34xx_ES3:
+- case OMAPDSS_VER_OMAP3630:
+- case OMAPDSS_VER_AM35xx:
+ return NULL;
+
+ case OMAPDSS_VER_OMAP4430_ES1:
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch b/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch
new file mode 100644
index 000000000..44a1ae367
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch
@@ -0,0 +1,63 @@
+From c070885eaf883884f89a77e2f71def5b447f914b Mon Sep 17 00:00:00 2001
+From: Robert Nelson
+Date: Tue, 11 Dec 2012 06:25:27 -0600
+Subject: [PATCH 01/10] Beagle: expansion: add buddy param for expansionboard
+ names
+
+Signed-off-by: Robert Nelson
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index c3558f9..29d549c 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -23,6 +23,7 @@
+ #include
+ #include
+ #include
++#include
+ #include
+ #include
+ #include
+@@ -191,6 +192,8 @@ static void __init omap3_beagle_init_rev(void)
+ }
+ }
+
++char expansionboard_name[16];
++
+ static struct mtd_partition omap3beagle_nand_partitions[] = {
+ /* All the partition sizes are listed in terms of NAND block size */
+ {
+@@ -470,6 +473,18 @@ static struct omap_board_mux board_mux[] __initdata = {
+ };
+ #endif
+
++static int __init expansionboard_setup(char *str)
++{
++ if (!machine_is_omap3_beagle())
++ return 0;
++
++ if (!str)
++ return -EINVAL;
++ strncpy(expansionboard_name, str, 16);
++ pr_info("Beagle expansionboard: %s\n", expansionboard_name);
++ return 0;
++}
++
+ static int __init beagle_opp_init(void)
+ {
+ int r = 0;
+@@ -559,6 +574,8 @@ static void __init omap3_beagle_init(void)
+ pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup));
+ }
+
++early_param("buddy", expansionboard_setup);
++
+ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
+ /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
+ .atag_offset = 0x100,
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch b/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch
new file mode 100644
index 000000000..fff62431e
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch
@@ -0,0 +1,242 @@
+From e71075202707e044a28604bd929fd6f7a89adeae Mon Sep 17 00:00:00 2001
+From: Robert Nelson
+Date: Mon, 21 Jan 2013 11:47:02 -0600
+Subject: [PATCH 02/10] Beagle: expansion: add zippy
+
+v2: add #include
+build fix from Pantelis Antoniou
+
+Signed-off-by: Robert Nelson
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 164 +++++++++++++++++++++++++++++--
+ 1 file changed, 158 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 4e6e767..b3685ed 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -37,6 +37,7 @@
+ #include
+
+ #include
++#include
+ #include
+
+ #include
+@@ -195,6 +196,86 @@ static void __init omap3_beagle_init_rev(void)
+
+ char expansionboard_name[16];
+
++enum {
++ EXPANSION_MMC_NONE = 0,
++ EXPANSION_MMC_ZIPPY,
++ EXPANSION_MMC_WIFI,
++};
++
++enum {
++ EXPANSION_I2C_NONE = 0,
++ EXPANSION_I2C_ZIPPY,
++};
++
++static struct {
++ int mmc_settings;
++ int i2c_settings;
++} expansion_config = {
++ .mmc_settings = EXPANSION_MMC_NONE,
++ .i2c_settings = EXPANSION_I2C_NONE,
++};
++
++//rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper..
++static struct fixed_voltage_config beagle_vzippy = {
++ .supply_name = "vzippy",
++ .microvolts = 3300000, /* 3.3V */
++ .startup_delay = 70000, /* 70ms */
++ .enable_high = 1,
++ .enabled_at_boot = 0,
++ .init_data = &beagle_vmmc2,
++};
++
++static struct platform_device omap_zippy_device = {
++ .name = "reg-fixed-voltage",
++ .id = 1,
++ .dev = {
++ .platform_data = &beagle_vzippy,
++ },
++};
++
++#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP 141
++#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD 162
++
++#if IS_ENABLED(CONFIG_ENC28J60)
++#include
++#include
++
++#define OMAP3BEAGLE_GPIO_ENC28J60_IRQ 157
++
++static struct omap2_mcspi_device_config enc28j60_spi_chip_info = {
++ .turbo_mode = 0,
++};
++
++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 = gpio_to_irq(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
++ irq_set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
++ } else {
++ pr_err("Beagle expansionboard: 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
++
+ static struct mtd_partition omap3beagle_nand_partitions[] = {
+ /* All the partition sizes are listed in terms of NAND block size */
+ {
+@@ -271,6 +352,23 @@ static struct omap2_hsmmc_info mmc[] = {
+ {} /* Terminator */
+ };
+
++static struct omap2_hsmmc_info mmc_zippy[] = {
++ {
++ .mmc = 1,
++ .caps = MMC_CAP_4_BIT_DATA,
++ .gpio_wp = -EINVAL,
++ .deferred = true,
++ },
++ {
++ .mmc = 2,
++ .caps = MMC_CAP_4_BIT_DATA,
++ .gpio_wp = OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP,
++ .gpio_cd = OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD,
++ .transceiver = true,
++ .deferred = true,
++ },
++ {} /* Terminator */
++};
+ static struct regulator_consumer_supply beagle_vmmc1_supply[] = {
+ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
+ };
+@@ -301,10 +399,21 @@ static int beagle_twl_gpio_setup(struct device *dev,
+ {
+ int r;
+
+- mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
+- /* gpio + 0 is "mmc0_cd" (input/IRQ) */
+- mmc[0].gpio_cd = gpio + 0;
+- omap_hsmmc_late_init(mmc);
++ switch (expansion_config.mmc_settings) {
++ case EXPANSION_MMC_ZIPPY:
++ mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp;
++ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
++ mmc_zippy[0].gpio_cd = gpio + 0;
++
++ omap_hsmmc_late_init(mmc_zippy);
++ break;
++ default:
++ mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
++ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
++ mmc[0].gpio_cd = gpio + 0;
++
++ omap_hsmmc_late_init(mmc);
++ }
+
+ /*
+ * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
+@@ -396,6 +505,14 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
+ },
+ };
+
++static struct i2c_board_info __initdata zippy_i2c2_rtc[] = {
++#if defined(CONFIG_RTC_DRV_DS1307) || defined(CONFIG_RTC_DRV_DS1307_MODULE)
++ {
++ I2C_BOARD_INFO("ds1307", 0x68),
++ },
++#endif
++};
++
+ static int __init omap3_beagle_i2c_init(void)
+ {
+ omap3_pmic_get_config(&beagle_twldata,
+@@ -406,6 +523,15 @@ static int __init omap3_beagle_i2c_init(void)
+ beagle_twldata.vpll2->constraints.name = "VDVI";
+
+ omap3_pmic_init("twl4030", &beagle_twldata);
++
++ switch (expansion_config.i2c_settings) {
++ case EXPANSION_I2C_ZIPPY:
++ omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc));
++ break;
++ default:
++ omap_register_i2c_bus(2, 400, NULL, 0);
++ }
++
+ /* Bus 3 is attached to the DVI port where devices like the pico DLP
+ * projector don't work reliably with 400kHz */
+ omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
+@@ -548,10 +674,30 @@ static void __init omap3_beagle_init(void)
+ omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+ omap3_beagle_init_rev();
+
++ if (!strcmp(expansionboard_name, "zippy"))
++ {
++ pr_info("Beagle expansionboard: initializing zippy mmc\n");
++ platform_device_register(&omap_zippy_device);
++
++ expansion_config.i2c_settings = EXPANSION_I2C_ZIPPY;
++ expansion_config.mmc_settings = EXPANSION_MMC_ZIPPY;
++
++ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP, OMAP_PIN_INPUT);
++ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
++ }
++
+ if (gpio_is_valid(beagle_config.mmc1_gpio_wp))
+ omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
+- mmc[0].caps = beagle_config.mmc_caps;
+- omap_hsmmc_init(mmc);
++
++ switch (expansion_config.mmc_settings) {
++ case EXPANSION_MMC_ZIPPY:
++ mmc_zippy[0].caps = beagle_config.mmc_caps;
++ omap_hsmmc_init(mmc_zippy);
++ break;
++ default:
++ mmc[0].caps = beagle_config.mmc_caps;
++ omap_hsmmc_init(mmc);
++ }
+
+ omap3_beagle_i2c_init();
+
+@@ -566,6 +712,12 @@ static void __init omap3_beagle_init(void)
+ omap_sdrc_init(mt46h32m32lf6_sdrc_params,
+ mt46h32m32lf6_sdrc_params);
+
++ if (!strcmp(expansionboard_name, "zippy"))
++ {
++ pr_info("Beagle expansionboard: initializing enc28j60\n");
++ omap3beagle_enc28j60_init();
++ }
++
+ usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
+ usb_musb_init(NULL);
+
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch b/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch
new file mode 100644
index 000000000..b569f92d6
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch
@@ -0,0 +1,86 @@
+From 45bed17e65e1a83f753896e250f3458654dcb229 Mon Sep 17 00:00:00 2001
+From: Robert Nelson
+Date: Tue, 11 Dec 2012 06:32:15 -0600
+Subject: [PATCH 03/10] Beagle: expansion: add zippy2
+
+Signed-off-by: Robert Nelson
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 48 ++++++++++++++++++++++++++++++-
+ 1 file changed, 47 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index b3685ed..74da505 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -276,6 +276,46 @@ static void __init omap3beagle_enc28j60_init(void)
+ static inline void __init omap3beagle_enc28j60_init(void) { return; }
+ #endif
+
++#if IS_ENABLED(CONFIG_KS8851)
++#include
++#include
++
++#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157
++
++static struct omap2_mcspi_device_config ks8851_spi_chip_info = {
++ .turbo_mode = 0,
++};
++
++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 = gpio_to_irq(OMAP3BEAGLE_GPIO_KS8851_IRQ);
++ irq_set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
++ } else {
++ pr_err("Beagle expansionboard: 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 */
+ {
+@@ -674,7 +714,7 @@ static void __init omap3_beagle_init(void)
+ omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+ omap3_beagle_init_rev();
+
+- if (!strcmp(expansionboard_name, "zippy"))
++ if ((!strcmp(expansionboard_name, "zippy")) || (!strcmp(expansionboard_name, "zippy2")))
+ {
+ pr_info("Beagle expansionboard: initializing zippy mmc\n");
+ platform_device_register(&omap_zippy_device);
+@@ -718,6 +758,12 @@ static void __init omap3_beagle_init(void)
+ omap3beagle_enc28j60_init();
+ }
+
++ if (!strcmp(expansionboard_name, "zippy2"))
++ {
++ pr_info("Beagle expansionboard: initializing ks_8851\n");
++ omap3beagle_ks8851_init();
++ }
++
+ usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
+ usb_musb_init(NULL);
+
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch b/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch
new file mode 100644
index 000000000..08ace67a1
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch
@@ -0,0 +1,55 @@
+From 4d9b4e5795e322ed3efed9b8402f604e2e53cc6f Mon Sep 17 00:00:00 2001
+From: Robert Nelson
+Date: Tue, 11 Dec 2012 06:33:24 -0600
+Subject: [PATCH 04/10] Beagle: expansion: add trainer
+
+Signed-off-by: Robert Nelson
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 74da505..b5ed547 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -764,6 +764,37 @@ static void __init omap3_beagle_init(void)
+ omap3beagle_ks8851_init();
+ }
+
++ if (!strcmp(expansionboard_name, "trainer"))
++ {
++ pr_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);
++ }
++
+ usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
+ usb_musb_init(NULL);
+
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch b/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
new file mode 100644
index 000000000..8b716eebc
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
@@ -0,0 +1,285 @@
+From a53e7913a95faefde1ee87a7ea048c04b0850066 Mon Sep 17 00:00:00 2001
+From: Robert Nelson
+Date: Tue, 11 Dec 2012 06:42:03 -0600
+Subject: [PATCH 05/10] Beagle: expansion: add CircuitCo ulcd Support
+
+This of a cleanup, squashed both ulcd commits into one:
+
+======================================================================
+
+expansion: add ulcd
+Signed-off-by: Robert Nelson
+
+======================================================================
+
+beagleboard: fix uLCD7 support
+Signed-off-by: Koen Kooi
+
+======================================================================
+
+Signed-off-by: Robert Nelson
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 136 ++++++++++++++++++++++
+ drivers/video/omap2/displays/panel-generic-dpi.c | 27 +++++
+ 2 files changed, 163 insertions(+)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 0f9b253..b2807c2 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -118,12 +118,16 @@ static struct {
+ int dvi_pd_gpio;
+ int usr_button_gpio;
+ int mmc_caps;
++ char *lcd_driver_name;
++ int lcd_pwren;
+ } beagle_config = {
+ .mmc1_gpio_wp = -EINVAL,
+ .usb_pwr_level = 0,
+ .dvi_pd_gpio = -EINVAL,
+ .usr_button_gpio = 4,
+ .mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
++ .lcd_driver_name = "",
++ .lcd_pwren = 156,
+ };
+
+ static struct gpio omap3_beagle_rev_gpios[] __initdata = {
+@@ -195,6 +199,7 @@ static void __init omap3_beagle_init_rev(void)
+ }
+
+ char expansionboard_name[16];
++char expansionboard2_name[16];
+
+ enum {
+ EXPANSION_MMC_NONE = 0,
+@@ -205,6 +210,7 @@ enum {
+ enum {
+ EXPANSION_I2C_NONE = 0,
+ EXPANSION_I2C_ZIPPY,
++ EXPANSION_I2C_7ULCD,
+ };
+
+ static struct {
+@@ -369,9 +375,53 @@ static struct omap_dss_device beagle_tv_device = {
+ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
+ };
+
++static int beagle_enable_lcd(struct omap_dss_device *dssdev)
++{
++ if (gpio_is_valid(beagle_config.lcd_pwren)) {
++ pr_info("%s: Enabling LCD\n", __FUNCTION__);
++ gpio_set_value(beagle_config.lcd_pwren, 0);
++ } else {
++ pr_info("%s: Invalid LCD enable GPIO: %d\n",
++ __FUNCTION__, beagle_config.lcd_pwren);
++ }
++
++ return 0;
++}
++
++static void beagle_disable_lcd(struct omap_dss_device *dssdev)
++{
++ if (gpio_is_valid(beagle_config.lcd_pwren)) {
++ pr_info("%s: Disabling LCD\n", __FUNCTION__);
++ gpio_set_value(beagle_config.lcd_pwren, 1);
++ } else {
++ pr_info("%s: Invalid LCD enable GPIO: %d\n",
++ __FUNCTION__, beagle_config.lcd_pwren);
++ }
++
++ return;
++}
++
++static struct panel_generic_dpi_data lcd_panel = {
++ .name = "tfc_s9700rtwv35tr-01b",
++ .platform_enable = beagle_enable_lcd,
++ .platform_disable = beagle_disable_lcd,
++};
++
++static struct omap_dss_device beagle_lcd_device = {
++ .type = OMAP_DISPLAY_TYPE_DPI,
++ .name = "lcd",
++ .driver_name = "generic_dpi_panel",
++ .phy.dpi.data_lines = 24,
++ .platform_enable = beagle_enable_lcd,
++ .platform_disable = beagle_disable_lcd,
++ .reset_gpio = -EINVAL,
++ .data = &lcd_panel,
++};
++
+ static struct omap_dss_device *beagle_dss_devices[] = {
+ &beagle_dvi_device,
+ &beagle_tv_device,
++ &beagle_lcd_device,
+ };
+
+ static struct omap_dss_board_info beagle_dss_data = {
+@@ -553,6 +603,53 @@ static struct i2c_board_info __initdata zippy_i2c2_rtc[] = {
+ #endif
+ };
+
++#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
++/* Touchscreen */
++#include
++
++#define OMAP3BEAGLE_TSC2007_GPIO 157
++
++static int omap3beagle_tsc2007_get_pendown_state(void)
++{
++ return !gpio_get_value(OMAP3BEAGLE_TSC2007_GPIO);
++}
++
++static struct tsc2007_platform_data tsc2007_info = {
++ .model = 2007,
++ .x_plate_ohms = 180,
++ .get_pendown_state = omap3beagle_tsc2007_get_pendown_state,
++};
++
++static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {
++ {
++ I2C_BOARD_INFO("tlc59108", 0x40),
++ },
++ {
++ I2C_BOARD_INFO("tsc2007", 0x48),
++ .platform_data = &tsc2007_info,
++ },
++};
++
++static void __init omap3beagle_tsc2007_init(void)
++{
++ int r;
++
++ omap_mux_init_gpio(OMAP3BEAGLE_TSC2007_GPIO, OMAP_PIN_INPUT_PULLUP);
++
++ r = gpio_request_one(OMAP3BEAGLE_TSC2007_GPIO, GPIOF_IN, "tsc2007_pen_down");
++ if (r < 0) {
++ pr_err("Beagle expansionboard: failed to request GPIO#%d for "
++ "tsc2007 pen down IRQ\n", OMAP3BEAGLE_TSC2007_GPIO);
++ return;
++ }
++
++ beagle_i2c2_bbtoys_ulcd[0].irq = gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO);
++ irq_set_irq_type(gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO), IRQ_TYPE_EDGE_FALLING);
++}
++#else
++static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {};
++#endif
++
+ static int __init omap3_beagle_i2c_init(void)
+ {
+ omap3_pmic_get_config(&beagle_twldata,
+@@ -565,6 +662,10 @@ static int __init omap3_beagle_i2c_init(void)
+ omap3_pmic_init("twl4030", &beagle_twldata);
+
+ switch (expansion_config.i2c_settings) {
++ case EXPANSION_I2C_7ULCD:
++ omap_register_i2c_bus(2, 400, beagle_i2c2_bbtoys_ulcd,
++ ARRAY_SIZE(beagle_i2c2_bbtoys_ulcd));
++ break;
+ case EXPANSION_I2C_ZIPPY:
+ omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc));
+ break;
+@@ -661,6 +762,18 @@ static int __init expansionboard_setup(char *str)
+ return 0;
+ }
+
++static int __init expansionboard2_setup(char *str)
++{
++ if (!machine_is_omap3_beagle())
++ return 0;
++
++ if (!str)
++ return -EINVAL;
++ strncpy(expansionboard2_name, str, 16);
++ pr_info("Beagle expansionboard2: %s\n", expansionboard2_name);
++ return 0;
++}
++
+ static int __init beagle_opp_init(void)
+ {
+ int r = 0;
+@@ -726,6 +839,20 @@ static void __init omap3_beagle_init(void)
+ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
+ }
+
++ if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
++ {
++ int r;
++ expansion_config.i2c_settings = EXPANSION_I2C_7ULCD;
++
++ /* TODO: set lcd_driver_name by command line or device tree */
++ beagle_config.lcd_driver_name = "tfc_s9700rtwv35tr-01b",
++ lcd_panel.name = beagle_config.lcd_driver_name;
++
++ r = gpio_request_one(beagle_config.lcd_pwren, GPIOF_OUT_INIT_LOW, "LCD power");
++ if (r < 0)
++ pr_err("Beagle expansionboard: Unable to get LCD power enable GPIO\n");
++ }
++
+ if (gpio_is_valid(beagle_config.mmc1_gpio_wp))
+ omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
+
+@@ -795,6 +922,14 @@ static void __init omap3_beagle_init(void)
+ gpio_export(162, 1);
+ }
+
++ if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
++ {
++ #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
++ pr_info("Beagle expansionboard: initializing touchscreen: tsc2007\n");
++ omap3beagle_tsc2007_init();
++ #endif
++ }
++
+ usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
+ usb_musb_init(NULL);
+
+@@ -816,6 +951,7 @@ static void __init omap3_beagle_init(void)
+ }
+
+ early_param("buddy", expansionboard_setup);
++early_param("buddy2", expansionboard2_setup);
+
+ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
+ /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
+diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c
+index 97363f7..614031f 100644
+--- a/drivers/video/omap2/displays/panel-generic-dpi.c
++++ b/drivers/video/omap2/displays/panel-generic-dpi.c
+@@ -515,6 +515,33 @@ static struct panel_config generic_dpi_panels[] = {
+ },
+ .name = "primeview_pd104slf",
+ },
++
++ /* ThreeFiveCorp S9700RTWV35TR-01B */
++ {
++ {
++ .x_res = 800,
++ .y_res = 480,
++
++ .pixel_clock = 30000,
++
++ .hsw = 49,
++ .hfp = 41,
++ .hbp = 40,
++
++ .vsw = 4,
++ .vfp = 14,
++ .vbp = 29,
++
++ .vsync_level = OMAPDSS_SIG_ACTIVE_LOW,
++ .hsync_level = OMAPDSS_SIG_ACTIVE_LOW,
++ .data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE,
++ .de_level = OMAPDSS_SIG_ACTIVE_HIGH,
++ .sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
++ },
++ .power_on_delay = 50,
++ .power_off_delay = 100,
++ .name = "tfc_s9700rtwv35tr-01b",
++ },
+ };
+
+ struct panel_drv_data {
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch b/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch
new file mode 100644
index 000000000..88d48af8c
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch
@@ -0,0 +1,180 @@
+From f78cd93d767cd75969c4661723cfce46071e5b1b Mon Sep 17 00:00:00 2001
+From: Robert Nelson
+Date: Tue, 11 Dec 2012 06:48:52 -0600
+Subject: [PATCH 06/10] Beagle: expansion: add wifi
+
+build fixes from Pantelis Antoniou
+
+Signed-off-by: Robert Nelson
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 119 +++++++++++++++++++++++++++++++
+ 1 file changed, 119 insertions(+)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index a8de97e..2322d6c 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -221,6 +221,73 @@ static struct {
+ .i2c_settings = EXPANSION_I2C_NONE,
+ };
+
++#if IS_ENABLED(CONFIG_WL12XX)
++#include
++#include
++#include
++
++#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 = {
++ .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
++};
++
++static struct ti_st_plat_data wilink_platform_data = {
++ .nshutdown_gpio = OMAP_BEAGLE_BT_EN_GPIO,
++ .dev_name = "/dev/ttyO1",
++ .flow_cntrl = 1,
++ .baud_rate = 3000000,
++ .chip_enable = NULL,
++ .suspend = NULL,
++ .resume = NULL,
++};
++
++static struct platform_device wl12xx_device = {
++ .name = "kim",
++ .id = -1,
++ .dev.platform_data = &wilink_platform_data,
++};
++
++static struct platform_device btwilink_device = {
++ .name = "btwilink",
++ .id = -1,
++};
++#endif
++
++static struct regulator_consumer_supply beagle_vmmc2_supply =
++ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
++
++static struct regulator_init_data beagle_vmmc2 = {
++ .constraints = {
++ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
++ },
++ .num_consumer_supplies = 1,
++ .consumer_supplies = &beagle_vmmc2_supply,
++};
++
++#if IS_ENABLED(CONFIG_WL12XX)
++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
++
+ //rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper..
+ static struct fixed_voltage_config beagle_vzippy = {
+ .supply_name = "vzippy",
+@@ -459,6 +526,26 @@ static struct omap2_hsmmc_info mmc_zippy[] = {
+ },
+ {} /* Terminator */
+ };
++
++static struct omap2_hsmmc_info mmcbbt[] = {
++ {
++ .mmc = 1,
++ .caps = MMC_CAP_4_BIT_DATA,
++ .gpio_wp = -EINVAL,
++ .deferred = true,
++ },
++ {
++ .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_vmmc1_supply[] = {
+ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
+ };
+@@ -490,6 +577,13 @@ static int beagle_twl_gpio_setup(struct device *dev,
+ int r;
+
+ switch (expansion_config.mmc_settings) {
++ case EXPANSION_MMC_WIFI:
++ mmcbbt[0].gpio_wp = beagle_config.mmc1_gpio_wp;
++ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
++ mmcbbt[0].gpio_cd = gpio + 0;
++
++ omap_hsmmc_late_init(mmcbbt);
++ break;
+ case EXPANSION_MMC_ZIPPY:
+ mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp;
+ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
+@@ -839,6 +933,13 @@ static void __init omap3_beagle_init(void)
+ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
+ }
+
++ if (!strcmp(expansionboard_name, "bbtoys-wifi"))
++ {
++ #if IS_ENABLED(CONFIG_WL12XX)
++ expansion_config.mmc_settings = EXPANSION_MMC_WIFI;
++ #endif
++ }
++
+ if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
+ {
+ int r;
+@@ -857,6 +958,10 @@ static void __init omap3_beagle_init(void)
+ omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
+
+ switch (expansion_config.mmc_settings) {
++ case EXPANSION_MMC_WIFI:
++ mmcbbt[0].caps = beagle_config.mmc_caps;
++ omap_hsmmc_init(mmcbbt);
++ break;
+ case EXPANSION_MMC_ZIPPY:
+ mmc_zippy[0].caps = beagle_config.mmc_caps;
+ omap_hsmmc_init(mmc_zippy);
+@@ -922,6 +1027,20 @@ static void __init omap3_beagle_init(void)
+ gpio_export(162, 1);
+ }
+
++ if (!strcmp(expansionboard_name, "bbtoys-wifi"))
++ {
++ #if IS_ENABLED(CONFIG_WL12XX)
++ omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO);
++ if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
++ pr_err("error setting wl12xx data\n");
++ pr_info("Beagle expansionboard: registering wl12xx bt platform device\n");
++ platform_device_register(&wl12xx_device);
++ platform_device_register(&btwilink_device);
++ pr_info("Beagle expansionboard: registering wl12xx wifi platform device\n");
++ platform_device_register(&omap_vwlan_device);
++ #endif
++ }
++
+ if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
+ {
+ #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
+--
+1.7.10.4
+
diff --git a/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch b/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch
new file mode 100644
index 000000000..a006c7b02
--- /dev/null
+++ b/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch
@@ -0,0 +1,117 @@
+From 0c361e9db10f9ec3598bf062a605a451857ee06e Mon Sep 17 00:00:00 2001
+From: Bas van der Doorn
+Date: Tue, 11 Dec 2012 06:52:22 -0600
+Subject: [PATCH 07/10] Beagle: expansion: add beaglefpga
+
+Added SPI dev and McBSP 3 mux when FPGA is detected
+
+Signed-off-by: Bas van der Doorn
+Signed-off-by: Robert Nelson
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 76 +++++++++++++++++++++++++++++++
+ 1 file changed, 76 insertions(+)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 2322d6c..c257f3c 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -44,6 +44,7 @@
+ #include
+ #include
+ #include
++#include
+
+ #include