summaryrefslogtreecommitdiff
path: root/recipes
diff options
context:
space:
mode:
authorKoen Kooi <koen@openembedded.org>2009-12-22 11:38:07 +0100
committerKoen Kooi <koen@openembedded.org>2009-12-22 11:41:05 +0100
commitecf45a2c35bf51b7cf9e251611381872db68970d (patch)
treee55ff082ba109a699ce98db023b146288afbf5fa /recipes
parent96ef8994798341d274bcf9acf62efb69c14632ca (diff)
linux-omap 2.6.32: add some more patches
Diffstat (limited to 'recipes')
-rw-r--r--recipes/linux/linux-omap-2.6.32/0001-ARM-OMAP-Overo-Add-support-for-second-ethernet-po.patch110
-rw-r--r--recipes/linux/linux-omap-2.6.32/0002-ARM-OMAP-ehci-omap-use-new-location-for-usb.h-inc.patch25
-rw-r--r--recipes/linux/linux-omap-2.6.32/0003-drivers-net-smsc911x-return-ENODEV-if-device-is-n.patch29
-rw-r--r--recipes/linux/linux-omap-2.6.32/0004-drivers-input-touchscreen-ads7846-return-ENODEV.patch53
-rw-r--r--recipes/linux/linux-omap-2.6.32/0005-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board.patch135
-rw-r--r--recipes/linux/linux-omap-2.6.32/0006-ARM-OMAP-Make-beagle-u-boot-partition-writable.patch24
-rw-r--r--recipes/linux/linux-omap-2.6.32/0007-ASoC-enable-audio-capture-by-default-for-twl4030.patch27
-rw-r--r--recipes/linux/linux-omap-2.6.32/0008-scripts-Makefile.fwinst-fix-typo-missing-space-in.patch25
-rw-r--r--recipes/linux/linux-omap-2.6.32/dss2/0012-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-pane.patch254
-rw-r--r--recipes/linux/linux-omap-2.6.32/dss2/0014-OMAP-DSS-Add-DSS2-support-for-Overo.patch343
-rw-r--r--recipes/linux/linux-omap-2.6.32/dss2/0015-OMAP-DSS-Add-DSS2-support-for-Beagle.patch186
-rw-r--r--recipes/linux/linux-omap-2.6.32/dss2/0016-video-add-timings-for-hd720.patch27
-rw-r--r--recipes/linux/linux-omap-2.6.32/madc/0009-drivers-mfd-add-twl4030-madc-driver.patch601
-rw-r--r--recipes/linux/linux-omap-2.6.32/madc/0010-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch32
-rw-r--r--recipes/linux/linux-omap-2.6.32/madc/0011-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch35
-rw-r--r--recipes/linux/linux-omap-2.6.32/madc/0013-ARM-OMAP-Add-missing-twl4030-madc-header-file.patch149
-rw-r--r--recipes/linux/linux-omap_2.6.32.bb15
17 files changed, 2069 insertions, 1 deletions
diff --git a/recipes/linux/linux-omap-2.6.32/0001-ARM-OMAP-Overo-Add-support-for-second-ethernet-po.patch b/recipes/linux/linux-omap-2.6.32/0001-ARM-OMAP-Overo-Add-support-for-second-ethernet-po.patch
new file mode 100644
index 0000000000..3254fe4562
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/0001-ARM-OMAP-Overo-Add-support-for-second-ethernet-po.patch
@@ -0,0 +1,110 @@
+From 190c75031e65008425dbdd74c3e3237beed18460 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <sakoman@gmail.com>
+Date: Tue, 15 Dec 2009 14:59:42 -0800
+Subject: [PATCH 01/16] ARM: OMAP: Overo: Add support for second ethernet port
+
+Signed-off-by: Steve Sakoman <sakoman@gmail.com>
+---
+ arch/arm/mach-omap2/board-overo.c | 56 +++++++++++++++++++++++++++++++++++--
+ 1 files changed, 53 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
+index 52dfd51..1b94f2c 100644
+--- a/arch/arm/mach-omap2/board-overo.c
++++ b/arch/arm/mach-omap2/board-overo.c
+@@ -63,6 +63,8 @@
+
+ #define OVERO_SMSC911X_CS 5
+ #define OVERO_SMSC911X_GPIO 176
++#define OVERO_SMSC911X2_CS 4
++#define OVERO_SMSC911X2_GPIO 65
+
+ #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
+ defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
+@@ -137,6 +139,16 @@ static struct resource overo_smsc911x_resources[] = {
+ },
+ };
+
++static struct resource overo_smsc911x2_resources[] = {
++ {
++ .name = "smsc911x2-memory",
++ .flags = IORESOURCE_MEM,
++ },
++ {
++ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
++ },
++};
++
+ static struct smsc911x_platform_config overo_smsc911x_config = {
+ .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
+ .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
+@@ -146,7 +158,7 @@ static struct smsc911x_platform_config overo_smsc911x_config = {
+
+ static struct platform_device overo_smsc911x_device = {
+ .name = "smsc911x",
+- .id = -1,
++ .id = 0,
+ .num_resources = ARRAY_SIZE(overo_smsc911x_resources),
+ .resource = overo_smsc911x_resources,
+ .dev = {
+@@ -154,9 +166,26 @@ static struct platform_device overo_smsc911x_device = {
+ },
+ };
+
++static struct platform_device overo_smsc911x2_device = {
++ .name = "smsc911x",
++ .id = 1,
++ .num_resources = ARRAY_SIZE(overo_smsc911x2_resources),
++ .resource = overo_smsc911x2_resources,
++ .dev = {
++ .platform_data = &overo_smsc911x_config,
++ },
++};
++
++static struct platform_device *smsc911x_devices[] = {
++ &overo_smsc911x_device,
++ &overo_smsc911x2_device,
++};
++
+ static inline void __init overo_init_smsc911x(void)
+ {
+- unsigned long cs_mem_base;
++ unsigned long cs_mem_base, cs_mem_base2;
++
++ /* set up first smsc911x chip */
+
+ if (gpmc_cs_request(OVERO_SMSC911X_CS, SZ_16M, &cs_mem_base) < 0) {
+ printk(KERN_ERR "Failed request for GPMC mem for smsc911x\n");
+@@ -177,7 +206,28 @@ static inline void __init overo_init_smsc911x(void)
+ overo_smsc911x_resources[1].start = OMAP_GPIO_IRQ(OVERO_SMSC911X_GPIO);
+ overo_smsc911x_resources[1].end = 0;
+
+- platform_device_register(&overo_smsc911x_device);
++ /* set up second smsc911x chip */
++
++ if (gpmc_cs_request(OVERO_SMSC911X2_CS, SZ_16M, &cs_mem_base2) < 0) {
++ printk(KERN_ERR "Failed request for GPMC mem for smsc911x2\n");
++ return;
++ }
++
++ overo_smsc911x2_resources[0].start = cs_mem_base2 + 0x0;
++ overo_smsc911x2_resources[0].end = cs_mem_base2 + 0xff;
++
++ if ((gpio_request(OVERO_SMSC911X2_GPIO, "SMSC911X2 IRQ") == 0) &&
++ (gpio_direction_input(OVERO_SMSC911X2_GPIO) == 0)) {
++ gpio_export(OVERO_SMSC911X2_GPIO, 0);
++ } else {
++ printk(KERN_ERR "could not obtain gpio for SMSC911X2 IRQ\n");
++ return;
++ }
++
++ overo_smsc911x2_resources[1].start = OMAP_GPIO_IRQ(OVERO_SMSC911X2_GPIO);
++ overo_smsc911x2_resources[1].end = 0;
++
++ platform_add_devices(smsc911x_devices, ARRAY_SIZE(smsc911x_devices));
+ }
+
+ #else
+--
+1.6.2.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/0002-ARM-OMAP-ehci-omap-use-new-location-for-usb.h-inc.patch b/recipes/linux/linux-omap-2.6.32/0002-ARM-OMAP-ehci-omap-use-new-location-for-usb.h-inc.patch
new file mode 100644
index 0000000000..7add534bc7
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/0002-ARM-OMAP-ehci-omap-use-new-location-for-usb.h-inc.patch
@@ -0,0 +1,25 @@
+From 06e97c7ea488e350b7aae5f3864a1bbe0666db87 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Tue, 15 Dec 2009 15:12:54 -0800
+Subject: [PATCH 02/16] ARM: OMAP: ehci-omap: use new location for usb.h include
+
+---
+ drivers/usb/host/ehci-omap.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c
+index 7ba8df3..5cfed78 100644
+--- a/drivers/usb/host/ehci-omap.c
++++ b/drivers/usb/host/ehci-omap.c
+@@ -37,7 +37,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/clk.h>
+ #include <linux/gpio.h>
+-#include <mach/usb.h>
++#include <plat/usb.h>
+
+ /*
+ * OMAP USBHOST Register addresses: VIRTUAL ADDRESSES
+--
+1.6.2.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/0003-drivers-net-smsc911x-return-ENODEV-if-device-is-n.patch b/recipes/linux/linux-omap-2.6.32/0003-drivers-net-smsc911x-return-ENODEV-if-device-is-n.patch
new file mode 100644
index 0000000000..c15cf3a396
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/0003-drivers-net-smsc911x-return-ENODEV-if-device-is-n.patch
@@ -0,0 +1,29 @@
+From 196c189ca20294fdcef264995f68cca74b1e16ea Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <sakoman@gmail.com>
+Date: Tue, 15 Dec 2009 15:17:44 -0800
+Subject: [PATCH 03/16] drivers: net: smsc911x: return ENODEV if device is not found
+
+Signed-off-by: Steve Sakoman <sakoman@gmail.com>
+---
+ drivers/net/smsc911x.c | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c
+index f9cdcbc..9ca18b5 100644
+--- a/drivers/net/smsc911x.c
++++ b/drivers/net/smsc911x.c
+@@ -2021,8 +2021,10 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev)
+ }
+
+ retval = smsc911x_init(dev);
+- if (retval < 0)
++ if (retval < 0) {
++ retval = -ENODEV;
+ goto out_unmap_io_3;
++ }
+
+ /* configure irq polarity and type before connecting isr */
+ if (pdata->config.irq_polarity == SMSC911X_IRQ_POLARITY_ACTIVE_HIGH)
+--
+1.6.2.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/0004-drivers-input-touchscreen-ads7846-return-ENODEV.patch b/recipes/linux/linux-omap-2.6.32/0004-drivers-input-touchscreen-ads7846-return-ENODEV.patch
new file mode 100644
index 0000000000..345213cb59
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/0004-drivers-input-touchscreen-ads7846-return-ENODEV.patch
@@ -0,0 +1,53 @@
+From deb568b94c448aa7ffcc9e6788bcf9069fd3b864 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <sakoman@gmail.com>
+Date: Tue, 15 Dec 2009 15:24:10 -0800
+Subject: [PATCH 04/16] drivers: input: touchscreen: ads7846: return ENODEV if device is not found
+
+Signed-off-by: Steve Sakoman <sakoman@gmail.com>
+---
+ drivers/input/touchscreen/ads7846.c | 13 ++++++++++---
+ 1 files changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
+index 09c8109..7cc9973 100644
+--- a/drivers/input/touchscreen/ads7846.c
++++ b/drivers/input/touchscreen/ads7846.c
+@@ -1170,9 +1170,16 @@ static int __devinit ads7846_probe(struct spi_device *spi)
+ /* take a first sample, leaving nPENIRQ active and vREF off; avoid
+ * the touchscreen, in case it's not connected.
+ */
+- (void) ads7846_read12_ser(&spi->dev,
++ err = ads7846_read12_ser(&spi->dev,
+ READ_12BIT_SER(vaux) | ADS_PD10_ALL_ON);
+
++ /* if sample is all 0's or all 1's then there is no device on spi */
++ if ( (err == 0x000) || (err == 0xfff)) {
++ dev_info(&spi->dev, "no device detected, test read result was 0x%08X\n", err);
++ err = -ENODEV;
++ goto err_free_irq;
++ }
++
+ err = sysfs_create_group(&spi->dev.kobj, &ads784x_attr_group);
+ if (err)
+ goto err_remove_hwmon;
+@@ -1190,7 +1197,7 @@ static int __devinit ads7846_probe(struct spi_device *spi)
+ err_free_irq:
+ free_irq(spi->irq, ts);
+ err_free_gpio:
+- if (ts->gpio_pendown != -1)
++ if (!ts->get_pendown_state && ts->gpio_pendown != -1)
+ gpio_free(ts->gpio_pendown);
+ err_cleanup_filter:
+ if (ts->filter_cleanup)
+@@ -1217,7 +1224,7 @@ static int __devexit ads7846_remove(struct spi_device *spi)
+ /* suspend left the IRQ disabled */
+ enable_irq(ts->spi->irq);
+
+- if (ts->gpio_pendown != -1)
++ if (!ts->get_pendown_state && ts->gpio_pendown != -1)
+ gpio_free(ts->gpio_pendown);
+
+ if (ts->filter_cleanup)
+--
+1.6.2.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/0005-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board.patch b/recipes/linux/linux-omap-2.6.32/0005-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board.patch
new file mode 100644
index 0000000000..1c51552792
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/0005-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board.patch
@@ -0,0 +1,135 @@
+From 334eef94045c93957cad3477522086492dd19b06 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <sakoman@gmail.com>
+Date: Tue, 15 Dec 2009 15:34:29 -0800
+Subject: [PATCH 05/16] ARM: OMAP: add support for TCT Zippy to Beagle board file
+
+Signed-off-by: Steve Sakoman <sakoman@gmail.com>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 74 +++++++++++++++++++++++++++++-
+ 1 files changed, 71 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 41480bd..f3df638 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -21,6 +21,7 @@
+ #include <linux/io.h>
+ #include <linux/leds.h>
+ #include <linux/gpio.h>
++#include <linux/irq.h>
+ #include <linux/input.h>
+ #include <linux/gpio_keys.h>
+
+@@ -52,6 +53,49 @@
+
+ #define NAND_BLOCK_SIZE SZ_128K
+
++#if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE)
++
++#include <plat/mcspi.h>
++#include <linux/spi/spi.h>
++
++#define OMAP3BEAGLE_GPIO_ENC28J60_IRQ 157
++
++static struct omap2_mcspi_device_config enc28j60_spi_chip_info = {
++ .turbo_mode = 0,
++ .single_channel = 1, /* 0: slave, 1: master */
++};
++
++static struct spi_board_info omap3beagle_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_spi_board_info[0].irq = OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
++ set_irq_type(omap3beagle_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
++ } else {
++ printk(KERN_ERR "could not obtain gpio for ENC28J60_IRQ\n");
++ return;
++ }
++
++ spi_register_board_info(omap3beagle_spi_board_info,
++ ARRAY_SIZE(omap3beagle_spi_board_info));
++}
++
++#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 */
+ {
+@@ -114,6 +158,14 @@ static struct twl4030_hsmmc_info mmc[] = {
+ .wires = 8,
+ .gpio_wp = 29,
+ },
++ {
++ .mmc = 2,
++ .wires = 4,
++ .gpio_wp = 141,
++ .gpio_cd = 162,
++ .transceiver = true,
++ .ocr_mask = 0x00100000, /* 3.3V */
++ },
+ {} /* Terminator */
+ };
+
+@@ -277,7 +329,7 @@ static struct twl4030_platform_data beagle_twldata = {
+ .vpll2 = &beagle_vpll2,
+ };
+
+-static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
++static struct i2c_board_info __initdata beagle_i2c1_boardinfo[] = {
+ {
+ I2C_BOARD_INFO("twl4030", 0x48),
+ .flags = I2C_CLIENT_WAKE,
+@@ -286,10 +338,24 @@ static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
+ },
+ };
+
++#if defined(CONFIG_RTC_DRV_DS1307) || \
++ defined(CONFIG_RTC_DRV_DS1307_MODULE)
++
++static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {
++ {
++ I2C_BOARD_INFO("ds1307", 0x68),
++ },
++};
++#else
++static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {};
++#endif
++
+ static int __init omap3_beagle_i2c_init(void)
+ {
+- omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
+- ARRAY_SIZE(beagle_i2c_boardinfo));
++ omap_register_i2c_bus(1, 2600, beagle_i2c1_boardinfo,
++ ARRAY_SIZE(beagle_i2c1_boardinfo));
++ omap_register_i2c_bus(2, 400, beagle_i2c2_boardinfo,
++ ARRAY_SIZE(beagle_i2c2_boardinfo));
+ /* Bus 3 is attached to the DVI port where devices like the pico DLP
+ * projector don't work reliably with 400kHz */
+ omap_register_i2c_bus(3, 100, NULL, 0);
+@@ -434,6 +500,8 @@ static void __init omap3_beagle_init(void)
+ /* REVISIT leave DVI powered down until it's needed ... */
+ gpio_direction_output(170, true);
+
++ omap3beagle_enc28j60_init();
++
+ usb_musb_init();
+ usb_ehci_init(&ehci_pdata);
+ omap3beagle_flash_init();
+--
+1.6.2.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/0006-ARM-OMAP-Make-beagle-u-boot-partition-writable.patch b/recipes/linux/linux-omap-2.6.32/0006-ARM-OMAP-Make-beagle-u-boot-partition-writable.patch
new file mode 100644
index 0000000000..3ad1853e3f
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/0006-ARM-OMAP-Make-beagle-u-boot-partition-writable.patch
@@ -0,0 +1,24 @@
+From 2607d201fb202499533aa4a7fc788b4fa5fd1fcf Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 17 Dec 2009 12:40:24 -0800
+Subject: [PATCH 06/16] ARM: OMAP: Make beagle u-boot partition writable
+
+---
+ arch/arm/mach-omap2/board-omap3beagle.c | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index f3df638..d00b089 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -108,7 +108,6 @@ static struct mtd_partition omap3beagle_nand_partitions[] = {
+ .name = "U-Boot",
+ .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */
+ .size = 15 * NAND_BLOCK_SIZE,
+- .mask_flags = MTD_WRITEABLE, /* force read-only */
+ },
+ {
+ .name = "U-Boot Env",
+--
+1.6.2.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/0007-ASoC-enable-audio-capture-by-default-for-twl4030.patch b/recipes/linux/linux-omap-2.6.32/0007-ASoC-enable-audio-capture-by-default-for-twl4030.patch
new file mode 100644
index 0000000000..6ad4366f02
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/0007-ASoC-enable-audio-capture-by-default-for-twl4030.patch
@@ -0,0 +1,27 @@
+From a0cf94cd5d99280fccc29e6b7777c448f15d1c65 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 17 Dec 2009 12:45:20 -0800
+Subject: [PATCH 07/16] ASoC: enable audio capture by default for twl4030
+
+---
+ sound/soc/codecs/twl4030.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
+index 4df7c6c..e85db73 100644
+--- a/sound/soc/codecs/twl4030.c
++++ b/sound/soc/codecs/twl4030.c
+@@ -46,8 +46,8 @@ static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = {
+ 0xc3, /* REG_OPTION (0x2) */
+ 0x00, /* REG_UNKNOWN (0x3) */
+ 0x00, /* REG_MICBIAS_CTL (0x4) */
+- 0x20, /* REG_ANAMICL (0x5) */
+- 0x00, /* REG_ANAMICR (0x6) */
++ 0x34, /* REG_ANAMICL (0x5) */
++ 0x14, /* REG_ANAMICR (0x6) */
+ 0x00, /* REG_AVADC_CTL (0x7) */
+ 0x00, /* REG_ADCMICSEL (0x8) */
+ 0x00, /* REG_DIGMIXING (0x9) */
+--
+1.6.2.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/0008-scripts-Makefile.fwinst-fix-typo-missing-space-in.patch b/recipes/linux/linux-omap-2.6.32/0008-scripts-Makefile.fwinst-fix-typo-missing-space-in.patch
new file mode 100644
index 0000000000..9b5ccaac69
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/0008-scripts-Makefile.fwinst-fix-typo-missing-space-in.patch
@@ -0,0 +1,25 @@
+From ce9fc5ab828b050605eb7d916f64ace7b227eea6 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 17 Dec 2009 12:51:53 -0800
+Subject: [PATCH 08/16] scripts/Makefile.fwinst: fix typo (missing space in setting mode)
+
+---
+ scripts/Makefile.fwinst | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/scripts/Makefile.fwinst b/scripts/Makefile.fwinst
+index 6bf8e87..fb20532 100644
+--- a/scripts/Makefile.fwinst
++++ b/scripts/Makefile.fwinst
+@@ -37,7 +37,7 @@ install-all-dirs: $(installed-fw-dirs)
+ @true
+
+ quiet_cmd_install = INSTALL $(subst $(srctree)/,,$@)
+- cmd_install = $(INSTALL) -m0644 $< $@
++ cmd_install = $(INSTALL) -m 0644 $< $@
+
+ $(installed-fw-dirs):
+ $(call cmd,mkdir)
+--
+1.6.2.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/dss2/0012-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-pane.patch b/recipes/linux/linux-omap-2.6.32/dss2/0012-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-pane.patch
new file mode 100644
index 0000000000..a22f3e712f
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/dss2/0012-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-pane.patch
@@ -0,0 +1,254 @@
+From e09abf20005e9abf41e44e712bc600d2cb346cb5 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 17 Dec 2009 15:05:30 -0800
+Subject: [PATCH 12/16] OMAP: DSS2: Add support for LG Philips LB035Q02 panel
+
+---
+ drivers/video/omap2/displays/Kconfig | 6 +
+ drivers/video/omap2/displays/Makefile | 1 +
+ .../omap2/displays/panel-lgphilips-lb035q02.c | 206 ++++++++++++++++++++
+ 3 files changed, 213 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
+
+diff --git a/drivers/video/omap2/displays/Kconfig b/drivers/video/omap2/displays/Kconfig
+index 79d2861..050f29c 100644
+--- a/drivers/video/omap2/displays/Kconfig
++++ b/drivers/video/omap2/displays/Kconfig
+@@ -7,6 +7,12 @@ config PANEL_GENERIC
+ Generic panel driver.
+ Used for DVI output for Beagle and OMAP3 SDP.
+
++config PANEL_LGPHILIPS_LB035Q02
++ tristate "LG.Philips LB035Q02 LCD Panel"
++ depends on OMAP2_DSS
++ help
++ LCD Panel used on Overo Palo35
++
+ config PANEL_SAMSUNG_LTE430WQ_F0C
+ tristate "Samsung LTE430WQ-F0C LCD Panel"
+ depends on OMAP2_DSS
+diff --git a/drivers/video/omap2/displays/Makefile b/drivers/video/omap2/displays/Makefile
+index d44e765..28f6f9b 100644
+--- a/drivers/video/omap2/displays/Makefile
++++ b/drivers/video/omap2/displays/Makefile
+@@ -1,4 +1,5 @@
+ obj-$(CONFIG_PANEL_GENERIC) += panel-generic.o
++obj-$(CONFIG_PANEL_LGPHILIPS_LB035Q02) += panel-lgphilips-lb035q02.o
+ obj-$(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) += panel-samsung-lte430wq-f0c.o
+ obj-$(CONFIG_PANEL_SHARP_LS037V7DW01) += panel-sharp-ls037v7dw01.o
+
+diff --git a/drivers/video/omap2/displays/panel-lgphilips-lb035q02.c b/drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
+new file mode 100644
+index 0000000..22dc865
+--- /dev/null
++++ b/drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
+@@ -0,0 +1,206 @@
++/*
++ * LCD panel driver for LG.Philips LB035Q02
++ *
++ * Author: Steve Sakoman <steve@sakoman.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ *
++ * 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 <http://www.gnu.org/licenses/>.
++ */
++
++#include <linux/module.h>
++#include <linux/delay.h>
++#include <linux/spi/spi.h>
++
++#include <plat/display.h>
++
++static struct spi_device *spidev;
++
++static struct omap_video_timings lb035q02_timings = {
++ .x_res = 320,
++ .y_res = 240,
++
++ .pixel_clock = 6500,
++
++ .hsw = 2,
++ .hfp = 20,
++ .hbp = 68,
++
++ .vsw = 2,
++ .vfp = 4,
++ .vbp = 18,
++};
++
++static int lb035q02_panel_probe(struct omap_dss_device *dssdev)
++{
++ dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
++ OMAP_DSS_LCD_IHS;
++ dssdev->panel.timings = lb035q02_timings;
++
++ return 0;
++}
++
++static void lb035q02_panel_remove(struct omap_dss_device *dssdev)
++{
++}
++
++static int lb035q02_write_reg(u8 reg, u16 val)
++{
++ struct spi_message msg;
++ struct spi_transfer index_xfer = {
++ .len = 3,
++ .cs_change = 1,
++ };
++ struct spi_transfer value_xfer = {
++ .len = 3,
++ };
++ u8 buffer[16];
++
++ spi_message_init(&msg);
++
++ /* register index */
++ buffer[0] = 0x70;
++ buffer[1] = 0x00;
++ buffer[2] = reg & 0x7f;
++ index_xfer.tx_buf = buffer;
++ spi_message_add_tail(&index_xfer, &msg);
++
++ /* register value */
++ buffer[4] = 0x72;
++ buffer[5] = val >> 8;
++ buffer[6] = val;
++ value_xfer.tx_buf = buffer + 4;
++ spi_message_add_tail(&value_xfer, &msg);
++
++ return spi_sync(spidev, &msg);
++}
++
++static int lb035q02_panel_enable(struct omap_dss_device *dssdev)
++{
++ int r = 0;
++
++ pr_info("lgphilips_lb035q02: panel_enable: 0x%08x\n", spidev);
++ /* wait couple of vsyncs until enabling the LCD */
++ msleep(50);
++
++ if (dssdev->platform_enable)
++ r = dssdev->platform_enable(dssdev);
++
++ /* Panel init sequence from page 28 of the spec */
++ lb035q02_write_reg(0x01, 0x6300);
++ lb035q02_write_reg(0x02, 0x0200);
++ lb035q02_write_reg(0x03, 0x0177);
++ lb035q02_write_reg(0x04, 0x04c7);
++ lb035q02_write_reg(0x05, 0xffc0);
++ lb035q02_write_reg(0x06, 0xe806);
++ lb035q02_write_reg(0x0a, 0x4008);
++ lb035q02_write_reg(0x0b, 0x0000);
++ lb035q02_write_reg(0x0d, 0x0030);
++ lb035q02_write_reg(0x0e, 0x2800);
++ lb035q02_write_reg(0x0f, 0x0000);
++ lb035q02_write_reg(0x16, 0x9f80);
++ lb035q02_write_reg(0x17, 0x0a0f);
++ lb035q02_write_reg(0x1e, 0x00c1);
++ lb035q02_write_reg(0x30, 0x0300);
++ lb035q02_write_reg(0x31, 0x0007);
++ lb035q02_write_reg(0x32, 0x0000);
++ lb035q02_write_reg(0x33, 0x0000);
++ lb035q02_write_reg(0x34, 0x0707);
++ lb035q02_write_reg(0x35, 0x0004);
++ lb035q02_write_reg(0x36, 0x0302);
++ lb035q02_write_reg(0x37, 0x0202);
++ lb035q02_write_reg(0x3a, 0x0a0d);
++ lb035q02_write_reg(0x3b, 0x0806);
++
++ return r;
++}
++
++static void lb035q02_panel_disable(struct omap_dss_device *dssdev)
++{
++ if (dssdev->platform_disable)
++ dssdev->platform_disable(dssdev);
++
++ /* wait at least 5 vsyncs after disabling the LCD */
++
++ msleep(100);
++}
++
++static int lb035q02_panel_suspend(struct omap_dss_device *dssdev)
++{
++ pr_info("lgphilips_lb035q02: panel_suspend\n");
++ lb035q02_panel_disable(dssdev);
++ return 0;
++}
++
++static int lb035q02_panel_resume(struct omap_dss_device *dssdev)
++{
++ pr_info("lgphilips_lb035q02: panel_resume\n");
++ return lb035q02_panel_enable(dssdev);
++}
++
++static struct omap_dss_driver lb035q02_driver = {
++ .probe = lb035q02_panel_probe,
++ .remove = lb035q02_panel_remove,
++
++ .enable = lb035q02_panel_enable,
++ .disable = lb035q02_panel_disable,
++ .suspend = lb035q02_panel_suspend,
++ .resume = lb035q02_panel_resume,
++
++ .driver = {
++ .name = "lgphilips_lb035q02_panel",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __devinit lb035q02_panel_spi_probe(struct spi_device *spi)
++{
++ spidev = spi;
++ return 0;
++}
++
++static int __devexit lb035q02_panel_spi_remove(struct spi_device *spi)
++{
++ return 0;
++}
++
++static struct spi_driver lb035q02_spi_driver = {
++ .driver = {
++ .name = "lgphilips_lb035q02_panel-spi",
++ .owner = THIS_MODULE,
++ },
++ .probe = lb035q02_panel_spi_probe,
++ .remove = __devexit_p (lb035q02_panel_spi_remove),
++};
++
++static int __init lb035q02_panel_drv_init(void)
++{
++ int ret;
++ ret = spi_register_driver(&lb035q02_spi_driver);
++ if (ret != 0)
++ pr_err("lgphilips_lb035q02: Unable to register SPI driver: %d\n", ret);
++
++ ret = omap_dss_register_driver(&lb035q02_driver);
++ if (ret != 0)
++ pr_err("lgphilips_lb035q02: Unable to register panel driver: %d\n", ret);
++
++ return ret;
++}
++
++static void __exit lb035q02_panel_drv_exit(void)
++{
++ spi_unregister_driver(&lb035q02_spi_driver);
++ omap_dss_unregister_driver(&lb035q02_driver);
++}
++
++module_init(lb035q02_panel_drv_init);
++module_exit(lb035q02_panel_drv_exit);
++MODULE_LICENSE("GPL");
+--
+1.6.2.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/dss2/0014-OMAP-DSS-Add-DSS2-support-for-Overo.patch b/recipes/linux/linux-omap-2.6.32/dss2/0014-OMAP-DSS-Add-DSS2-support-for-Overo.patch
new file mode 100644
index 0000000000..c673a09a76
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/dss2/0014-OMAP-DSS-Add-DSS2-support-for-Overo.patch
@@ -0,0 +1,343 @@
+From 6b135653505a2a5da42c92cfa31c3ab22e2b130f Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Fri, 18 Dec 2009 06:39:24 -0800
+Subject: [PATCH 14/16] OMAP: DSS: Add DSS2 support for Overo
+
+---
+ arch/arm/mach-omap2/board-overo.c | 233 +++++++++++++++++++++++++++++++-----
+ 1 files changed, 200 insertions(+), 33 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
+index d0394d9..b90b140 100644
+--- a/arch/arm/mach-omap2/board-overo.c
++++ b/arch/arm/mach-omap2/board-overo.c
+@@ -28,6 +28,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/i2c/twl4030.h>
+ #include <linux/regulator/machine.h>
++#include <linux/spi/spi.h>
+
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/nand.h>
+@@ -40,10 +41,12 @@
+
+ #include <plat/board.h>
+ #include <plat/common.h>
++#include <plat/display.h>
+ #include <mach/gpio.h>
+ #include <plat/gpmc.h>
+ #include <mach/hardware.h>
+ #include <plat/nand.h>
++#include <plat/mcspi.h>
+ #include <plat/mux.h>
+ #include <plat/usb.h>
+
+@@ -69,8 +72,6 @@
+ #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
+ defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
+
+-#include <plat/mcspi.h>
+-#include <linux/spi/spi.h>
+ #include <linux/spi/ads7846.h>
+
+ static struct omap2_mcspi_device_config ads7846_mcspi_config = {
+@@ -95,18 +96,6 @@ static struct ads7846_platform_data ads7846_config = {
+ .keep_vref_on = 1,
+ };
+
+-static struct spi_board_info overo_spi_board_info[] __initdata = {
+- {
+- .modalias = "ads7846",
+- .bus_num = 1,
+- .chip_select = 0,
+- .max_speed_hz = 1500000,
+- .controller_data = &ads7846_mcspi_config,
+- .irq = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN),
+- .platform_data = &ads7846_config,
+- }
+-};
+-
+ static void __init overo_ads7846_init(void)
+ {
+ if ((gpio_request(OVERO_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) &&
+@@ -116,9 +105,6 @@ static void __init overo_ads7846_init(void)
+ printk(KERN_ERR "could not obtain gpio for ADS7846_PENDOWN\n");
+ return;
+ }
+-
+- spi_register_board_info(overo_spi_board_info,
+- ARRAY_SIZE(overo_spi_board_info));
+ }
+
+ #else
+@@ -234,6 +220,137 @@ static inline void __init overo_init_smsc911x(void)
+ static inline void __init overo_init_smsc911x(void) { return; }
+ #endif
+
++/* DSS */
++static int lcd_enabled;
++static int dvi_enabled;
++
++#define OVERO_GPIO_LCD_EN 144
++#define OVERO_GPIO_LCD_BL 145
++
++static void __init overo_display_init(void)
++{
++ if ((gpio_request(OVERO_GPIO_LCD_EN, "OVERO_GPIO_LCD_EN") == 0) &&
++ (gpio_direction_output(OVERO_GPIO_LCD_EN, 1) == 0))
++ gpio_export(OVERO_GPIO_LCD_EN, 0);
++ else
++ printk(KERN_ERR "could not obtain gpio for "
++ "OVERO_GPIO_LCD_EN\n");
++
++ if ((gpio_request(OVERO_GPIO_LCD_BL, "OVERO_GPIO_LCD_BL") == 0) &&
++ (gpio_direction_output(OVERO_GPIO_LCD_BL, 1) == 0))
++ gpio_export(OVERO_GPIO_LCD_BL, 0);
++ else
++ printk(KERN_ERR "could not obtain gpio for "
++ "OVERO_GPIO_LCD_BL\n");
++}
++
++static int overo_panel_enable_dvi(struct omap_dss_device *dssdev)
++{
++ if (lcd_enabled) {
++ printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
++ return -EINVAL;
++ }
++ dvi_enabled = 1;
++
++ return 0;
++}
++
++static void overo_panel_disable_dvi(struct omap_dss_device *dssdev)
++{
++ dvi_enabled = 0;
++}
++
++static struct omap_dss_device overo_dvi_device = {
++ .type = OMAP_DISPLAY_TYPE_DPI,
++ .name = "dvi",
++ .driver_name = "generic_panel",
++ .phy.dpi.data_lines = 24,
++ .platform_enable = overo_panel_enable_dvi,
++ .platform_disable = overo_panel_disable_dvi,
++};
++
++static int overo_panel_enable_lcd(struct omap_dss_device *dssdev)
++{
++ if (dvi_enabled) {
++ printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
++ return -EINVAL;
++ }
++
++ gpio_set_value(OVERO_GPIO_LCD_EN, 1);
++ gpio_set_value(OVERO_GPIO_LCD_BL, 1);
++ lcd_enabled = 1;
++ return 0;
++}
++
++static void overo_panel_disable_lcd(struct omap_dss_device *dssdev)
++{
++ gpio_set_value(OVERO_GPIO_LCD_EN, 0);
++ gpio_set_value(OVERO_GPIO_LCD_BL, 0);
++ lcd_enabled = 0;
++}
++<