linux-omap git: update DSS2 patches, fix mmc
authorKoen Kooi <koen@openembedded.org>
Fri, 14 Nov 2008 17:39:42 +0000 (18:39 +0100)
committerKoen Kooi <koen@openembedded.org>
Fri, 14 Nov 2008 17:39:42 +0000 (18:39 +0100)
packages/linux/linux-omap/0003-DSS-Documentation-for-OMAP2-3-display-subsystem.patch
packages/linux/linux-omap/0004-DSS-New-display-subsystem-driver-for-OMAP2-3.patch
packages/linux/linux-omap/0005-DSS-OMAPFB-fb-driver-for-new-display-subsystem.patch
packages/linux/linux-omap/0006-DSS-Add-generic-DVI-panel.patch
packages/linux/linux-omap/0007-DSS-support-for-Beagle-Board.patch
packages/linux/linux-omap/0008-DSS-BEAGLE-Enable-DSS-in-beagle-defconfig.patch
packages/linux/linux-omap/0009-DSS-Sharp-LS037V7DW01-LCD-Panel-driver.patch [new file with mode: 0644]
packages/linux/linux-omap/0010-DSS-Support-for-OMAP3-SDP-board.patch [new file with mode: 0644]
packages/linux/linux-omap/0011-DSS-Support-for-OMAP3-EVM-board.patch [new file with mode: 0644]
packages/linux/linux-omap/fix-mmc.diff [new file with mode: 0644]
packages/linux/linux-omap_git.bb

index 2ee2e2a..6cc8ce1 100644 (file)
@@ -1,4 +1,4 @@
-From b6d4f19ae3192db2d7733fb70c212494bb1e0abd Mon Sep 17 00:00:00 2001
+From e8cc995ace5ef4c8e920ccac6bacc1a0129ad2c4 Mon Sep 17 00:00:00 2001
 From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
 Date: Tue, 4 Nov 2008 15:08:07 +0200
 Subject: [PATCH] DSS: Documentation for OMAP2/3 display subsystem
index 4618903..e7beec7 100644 (file)
@@ -1,4 +1,4 @@
-From 04b4d27af34373bbb65df19c2c084f117fe54213 Mon Sep 17 00:00:00 2001
+From 6bec28d7c3d7cf97d644c610beadfef354fa596e Mon Sep 17 00:00:00 2001
 From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
 Date: Thu, 13 Nov 2008 15:38:15 +0200
 Subject: [PATCH] DSS: New display subsystem driver for OMAP2/3
@@ -9,7 +9,7 @@ Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
  arch/arm/plat-omap/Makefile               |    2 +
  arch/arm/plat-omap/dss/Kconfig            |   66 +
  arch/arm/plat-omap/dss/Makefile           |    6 +
- arch/arm/plat-omap/dss/dispc.c            | 1720 ++++++++++++++++
+ arch/arm/plat-omap/dss/dispc.c            | 1722 ++++++++++++++++
  arch/arm/plat-omap/dss/display.c          |  775 ++++++++
  arch/arm/plat-omap/dss/dpi.c              |  323 +++
  arch/arm/plat-omap/dss/dsi.c              | 3020 +++++++++++++++++++++++++++++
@@ -19,7 +19,7 @@ Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
  arch/arm/plat-omap/dss/sdi.c              |  157 ++
  arch/arm/plat-omap/dss/venc.c             |  515 +++++
  arch/arm/plat-omap/include/mach/display.h |  458 +++++
- 14 files changed, 9086 insertions(+), 0 deletions(-)
+ 14 files changed, 9088 insertions(+), 0 deletions(-)
  create mode 100644 arch/arm/plat-omap/dss/Kconfig
  create mode 100644 arch/arm/plat-omap/dss/Makefile
  create mode 100644 arch/arm/plat-omap/dss/dispc.c
@@ -142,10 +142,10 @@ index 0000000..e98c6c1
 +omap-dss-$(CONFIG_OMAP2_DSS_DSI) += dsi.o
 diff --git a/arch/arm/plat-omap/dss/dispc.c b/arch/arm/plat-omap/dss/dispc.c
 new file mode 100644
-index 0000000..6d06082
+index 0000000..3738cf3
 --- /dev/null
 +++ b/arch/arm/plat-omap/dss/dispc.c
-@@ -0,0 +1,1720 @@
+@@ -0,0 +1,1722 @@
 +/*
 + * linux/arch/arm/plat-omap/dss/dispc.c
 + *
@@ -1261,8 +1261,10 @@ index 0000000..6d06082
 +
 +              for (cur_pd = pcd_min; cur_pd <= 255; ++cur_pd) {
 +                      unsigned long pck = lck / cur_pd;
++                      long old_delta = abs(best_pck - req_pck);
++                      long new_delta = abs(pck - req_pck);
 +
-+                      if (abs(pck - req_pck) < abs(best_pck - req_pck)) {
++                      if (best_pck == 0 || new_delta < old_delta) {
 +                              best_pck = pck;
 +                              best_ld = cur_ld;
 +                              best_pd = cur_pd;
index d64fe44..b9a56af 100644 (file)
@@ -1,4 +1,4 @@
-From e2aaa3251054eecf92b8936e704a3581de69bdc7 Mon Sep 17 00:00:00 2001
+From 36ac3fa1184b392dc54024de6d98e4355f2baba8 Mon Sep 17 00:00:00 2001
 From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
 Date: Tue, 4 Nov 2008 15:12:21 +0200
 Subject: [PATCH] DSS: OMAPFB: fb driver for new display subsystem
index 4925f24..bbf96ec 100644 (file)
@@ -1,4 +1,4 @@
-From ce4676f5a466d991bccfeac2c32316053e86b9a1 Mon Sep 17 00:00:00 2001
+From ff78ff9513a40be30649420bc9833793a6e70b75 Mon Sep 17 00:00:00 2001
 From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
 Date: Tue, 11 Nov 2008 13:52:56 +0200
 Subject: [PATCH] DSS: Add generic DVI panel
@@ -16,7 +16,7 @@ You also need DSI PLL to generate pix clock for 1280x1024.
  create mode 100644 drivers/video/omap2/panel-dvi.c
 
 diff --git a/drivers/video/omap2/Kconfig b/drivers/video/omap2/Kconfig
-index 4b72479..996f047 100644
+index 4b72479..11ca6fe 100644
 --- a/drivers/video/omap2/Kconfig
 +++ b/drivers/video/omap2/Kconfig
 @@ -24,6 +24,29 @@ config FB_OMAP2_FORCE_AUTO_UPDATE
@@ -31,18 +31,18 @@ index 4b72479..996f047 100644
 +choice
 +      prompt "Default DVI Mode"
 +      depends on PANEL_DVI
-+      default PANEL_DVI_HIGHRES
++      default PANEL_DVI_1024X768
 +
-+config PANEL_DVI_LOWLOWRES
++config PANEL_DVI_640X480
 +      bool "640 x 480 @ 60"
 +
-+config PANEL_DVI_LOWRES
++config PANEL_DVI_800X600
 +      bool "800 x 600 @ 60"
 +
-+config PANEL_DVI_HIGHRES
++config PANEL_DVI_1024X768
 +      bool "1024 x 768 @ 60"
 +
-+config PANEL_DVI_VERYHIGHRES
++config PANEL_DVI_1280X1024
 +      bool "1280 x 1024 @ 57"
 +
 +endchoice
@@ -60,7 +60,7 @@ index 51c2e00..7c75340 100644
 +obj-$(CONFIG_PANEL_DVI) += panel-dvi.o
 diff --git a/drivers/video/omap2/panel-dvi.c b/drivers/video/omap2/panel-dvi.c
 new file mode 100644
-index 0000000..541f588
+index 0000000..393eaf1
 --- /dev/null
 +++ b/drivers/video/omap2/panel-dvi.c
 @@ -0,0 +1,150 @@
@@ -131,7 +131,7 @@ index 0000000..541f588
 +      .resume         = dvi_panel_resume,
 +      /*.set_mode     = dvi_set_mode, */
 +
-+#if defined(CONFIG_PANEL_DVI_LOWLOWRES)
++#if defined(CONFIG_PANEL_DVI_640X480)
 +      .timings = {
 +              /* 640 x 480 @ 60 hz  reduced blanking vesa
 +               * (dunno if these are correct) */
@@ -147,7 +147,7 @@ index 0000000..541f588
 +      .x_res          = 640,
 +      .y_res          = 480,
 +      .bpp            = 24,
-+#elif defined(CONFIG_PANEL_DVI_LOWRES)
++#elif defined(CONFIG_PANEL_DVI_800X600)
 +      .timings = {
 +              /* 800 x 600 @ 60 hz  reduced blanking vesa cvt 0.48m3-r */
 +              .pixel_clock    = 35500,
@@ -162,7 +162,7 @@ index 0000000..541f588
 +      .x_res          = 800,
 +      .y_res          = 600,
 +      .bpp            = 24,
-+#elif defined(CONFIG_PANEL_DVI_HIGHRES)
++#elif defined(CONFIG_PANEL_DVI_1024X768)
 +      .timings = {
 +              /* 1024 x 768 @ 60 Hz Reduced blanking */
 +              .pixel_clock    = 56000,
@@ -177,7 +177,7 @@ index 0000000..541f588
 +      .x_res          = 1024,
 +      .y_res          = 768,
 +      .bpp            = 24,
-+#elif defined(CONFIG_PANEL_DVI_VERYHIGHRES)
++#elif defined(CONFIG_PANEL_DVI_1280X1024)
 +      .timings = {
 +              /* 1280 x 1024 @ 57 Hz Reduced blanking */
 +              .pixel_clock    = 86500,
index 3967055..9ca1bd7 100644 (file)
@@ -1,4 +1,4 @@
-From eaadaa1e6192ef58079fb6149136e4f267f771b0 Mon Sep 17 00:00:00 2001
+From 1a63704f218e5ec0bc6f94fc0629ab96f3d6ab34 Mon Sep 17 00:00:00 2001
 From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
 Date: Mon, 29 Sep 2008 17:03:36 +0300
 Subject: [PATCH] DSS: support for Beagle Board
index a3df3ef..858cccf 100644 (file)
@@ -1,4 +1,4 @@
-From adf1ac7680926ca94f1b36ae8c643f74c8a47253 Mon Sep 17 00:00:00 2001
+From 53561526e1e9bf20dd9e17b66f2a1b1c6cfec935 Mon Sep 17 00:00:00 2001
 From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
 Date: Fri, 7 Nov 2008 16:54:01 +0200
 Subject: [PATCH] DSS: BEAGLE: Enable DSS in beagle defconfig
diff --git a/packages/linux/linux-omap/0009-DSS-Sharp-LS037V7DW01-LCD-Panel-driver.patch b/packages/linux/linux-omap/0009-DSS-Sharp-LS037V7DW01-LCD-Panel-driver.patch
new file mode 100644 (file)
index 0000000..68720a9
--- /dev/null
@@ -0,0 +1,155 @@
+From 436d6597311770af1d3a6d42560f34d6342a1c2f Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
+Date: Fri, 14 Nov 2008 15:47:19 +0200
+Subject: [PATCH] DSS: Sharp LS037V7DW01 LCD Panel driver
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
+---
+ drivers/video/omap2/Kconfig                   |    7 ++-
+ drivers/video/omap2/Makefile                  |    1 +
+ drivers/video/omap2/panel-sharp-ls037v7dw01.c |  108 +++++++++++++++++++++++++
+ 3 files changed, 115 insertions(+), 1 deletions(-)
+ create mode 100644 drivers/video/omap2/panel-sharp-ls037v7dw01.c
+
+diff --git a/drivers/video/omap2/Kconfig b/drivers/video/omap2/Kconfig
+index 11ca6fe..4bd3f87 100644
+--- a/drivers/video/omap2/Kconfig
++++ b/drivers/video/omap2/Kconfig
+@@ -48,5 +48,10 @@ config PANEL_DVI_1280X1024
+ endchoice
+-endmenu
++config PANEL_SHARP_LS037V7DW01
++        tristate "Sharp LS037V7DW01 LCD Panel"
++        depends on OMAP2_DSS
++        help
++          LCD Panel used in TI's SDP3430 and EVM boards
++endmenu
+diff --git a/drivers/video/omap2/Makefile b/drivers/video/omap2/Makefile
+index 7c75340..b86dd0b 100644
+--- a/drivers/video/omap2/Makefile
++++ b/drivers/video/omap2/Makefile
+@@ -2,3 +2,4 @@ obj-$(CONFIG_FB_OMAP2) += omapfb.o
+ omapfb-y := omapfb-main.o omapfb-sysfs.o omapfb-ioctl.o
+ obj-$(CONFIG_PANEL_DVI) += panel-dvi.o
++obj-$(CONFIG_PANEL_SHARP_LS037V7DW01) += panel-sharp-ls037v7dw01.o
+diff --git a/drivers/video/omap2/panel-sharp-ls037v7dw01.c b/drivers/video/omap2/panel-sharp-ls037v7dw01.c
+new file mode 100644
+index 0000000..b4270df
+--- /dev/null
++++ b/drivers/video/omap2/panel-sharp-ls037v7dw01.c
+@@ -0,0 +1,108 @@
++/*
++ * LCD panel driver for Sharp LS037V7DW01
++ *
++ * Copyright (C) 2008 Nokia Corporation
++ * Author: Tomi Valkeinen <tomi.valkeinen@nokia.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 <mach/display.h>
++
++static int sharp_ls_panel_init(struct omap_display *display)
++{
++      return 0;
++}
++
++static void sharp_ls_panel_cleanup(struct omap_display *display)
++{
++}
++
++static int sharp_ls_panel_enable(struct omap_display *display)
++{
++      int r = 0;
++
++      if (display->hw_config.panel_enable)
++              r = display->hw_config.panel_enable(display);
++
++      return r;
++}
++
++static void sharp_ls_panel_disable(struct omap_display *display)
++{
++      if (display->hw_config.panel_disable)
++              display->hw_config.panel_disable(display);
++}
++
++static int sharp_ls_panel_suspend(struct omap_display *display)
++{
++      sharp_ls_panel_disable(display);
++      return 0;
++}
++
++static int sharp_ls_panel_resume(struct omap_display *display)
++{
++      return sharp_ls_panel_enable(display);
++}
++
++static struct omap_panel sharp_ls_panel = {
++      .owner          = THIS_MODULE,
++      .name           = "sharp-ls037v7dw01",
++      .init           = sharp_ls_panel_init,
++      .cleanup        = sharp_ls_panel_cleanup,
++      .enable         = sharp_ls_panel_enable,
++      .disable        = sharp_ls_panel_disable,
++      .suspend        = sharp_ls_panel_suspend,
++      .resume         = sharp_ls_panel_resume,
++      /*.set_mode     = sharp_ls_set_mode, */
++
++      .timings = {
++              .pixel_clock    = 19200,
++
++              .hsw            = 2,
++              .hfp            = 1,
++              .hbp            = 28,
++
++              .vsw            = 1,
++              .vfp            = 1,
++              .vbp            = 1,
++      },
++
++      .acb            = 0x28,
++
++      .config         = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
++              OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC,
++
++      .x_res = 480,
++      .y_res = 640,
++      .bpp = 16,
++};
++
++
++static int __init sharp_ls_panel_drv_init(void)
++{
++      omap_dss_register_panel(&sharp_ls_panel);
++      return 0;
++}
++
++static void __exit sharp_ls_panel_drv_exit(void)
++{
++      omap_dss_unregister_panel(&sharp_ls_panel);
++}
++
++module_init(sharp_ls_panel_drv_init);
++module_exit(sharp_ls_panel_drv_exit);
++MODULE_LICENSE("GPL");
+-- 
+1.5.6.3
+
diff --git a/packages/linux/linux-omap/0010-DSS-Support-for-OMAP3-SDP-board.patch b/packages/linux/linux-omap/0010-DSS-Support-for-OMAP3-SDP-board.patch
new file mode 100644 (file)
index 0000000..707b6c4
--- /dev/null
@@ -0,0 +1,296 @@
+From 06675e403dfe6fd9471513fb7db77db69c38c91d Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
+Date: Fri, 14 Nov 2008 15:47:55 +0200
+Subject: [PATCH] DSS: Support for OMAP3 SDP board
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
+---
+ arch/arm/mach-omap2/board-3430sdp.c |  234 +++++++++++++++++++++++++++++++++--
+ 1 files changed, 223 insertions(+), 11 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
+index b7d2e92..ac4f806 100644
+--- a/arch/arm/mach-omap2/board-3430sdp.c
++++ b/arch/arm/mach-omap2/board-3430sdp.c
+@@ -40,6 +40,8 @@
+ #include <mach/keypad.h>
+ #include <mach/dma.h>
+ #include <mach/gpmc.h>
++#include <mach/omapfb.h>
++#include <mach/display.h>
+ #include <asm/io.h>
+ #include <asm/delay.h>
+@@ -240,14 +242,224 @@ static struct spi_board_info sdp3430_spi_board_info[] __initdata = {
+       },
+ };
+-static struct platform_device sdp3430_lcd_device = {
+-      .name           = "sdp2430_lcd",
+-      .id             = -1,
++static struct omap_fbmem_config sdp3430_fbmem0_config = {
++      .size = 1024*768*4,
++      .start = OMAPFB_MEMTYPE_SDRAM,
++};
++
++static struct omap_fbmem_config sdp3430_fbmem1_config = {
++      .size = 640*480*4,
++      .start = OMAPFB_MEMTYPE_SDRAM,
+ };
++static struct omap_fbmem_config sdp3430_fbmem2_config = {
++      .size = 640*480*4,
++      .start = OMAPFB_MEMTYPE_SDRAM,
++};
++
++
++#define SDP2430_LCD_PANEL_BACKLIGHT_GPIO      91
++#define SDP2430_LCD_PANEL_ENABLE_GPIO         154
++#define SDP3430_LCD_PANEL_BACKLIGHT_GPIO      24
++#define SDP3430_LCD_PANEL_ENABLE_GPIO         28
++
++#define PM_RECEIVER             TWL4030_MODULE_PM_RECEIVER
++#define ENABLE_VAUX2_DEDICATED  0x09
++#define ENABLE_VAUX2_DEV_GRP    0x20
++#define ENABLE_VAUX3_DEDICATED        0x03
++#define ENABLE_VAUX3_DEV_GRP  0x20
++
++#define ENABLE_VPLL2_DEDICATED        0x05
++#define ENABLE_VPLL2_DEV_GRP  0xE0
++#define TWL4030_VPLL2_DEV_GRP 0x33
++#define TWL4030_VPLL2_DEDICATED       0x36
++
++#define t2_out(c, r, v) twl4030_i2c_write_u8(c, r, v)
++
++static unsigned backlight_gpio;
++static unsigned enable_gpio;
++static int lcd_enabled;
++static int dvi_enabled;
++
++static void __init sdp3430_display_init(void)
++{
++      int r;
++
++      enable_gpio    = SDP3430_LCD_PANEL_ENABLE_GPIO;
++      backlight_gpio = SDP3430_LCD_PANEL_BACKLIGHT_GPIO;
++
++      r = gpio_request(enable_gpio, "LCD reset");
++      if (r) {
++              printk(KERN_ERR "failed to get LCD reset GPIO\n");
++              goto err0;
++      }
++
++      r = gpio_request(backlight_gpio, "LCD Backlight");
++      if (r) {
++              printk(KERN_ERR "failed to get LCD backlight GPIO\n");
++              goto err1;
++      }
++
++      gpio_direction_output(enable_gpio, 0);
++      gpio_direction_output(backlight_gpio, 0);
++
++      return;
++err1:
++      gpio_free(enable_gpio);
++err0:
++      return;
++}
++
++
++static int sdp3430_panel_enable_lcd(struct omap_display *display)
++{
++      u8 ded_val, ded_reg;
++      u8 grp_val, grp_reg;
++
++      if (dvi_enabled) {
++              printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
++              return -EINVAL;
++      }
++
++      if (omap_rev() > OMAP3430_REV_ES1_0) {
++              t2_out(PM_RECEIVER, ENABLE_VPLL2_DEDICATED,
++                              TWL4030_VPLL2_DEDICATED);
++              t2_out(PM_RECEIVER, ENABLE_VPLL2_DEV_GRP,
++                              TWL4030_VPLL2_DEV_GRP);
++      }
++
++      ded_reg = TWL4030_VAUX3_DEDICATED;
++      ded_val = ENABLE_VAUX3_DEDICATED;
++      grp_reg = TWL4030_VAUX3_DEV_GRP;
++      grp_val = ENABLE_VAUX3_DEV_GRP;
++
++      gpio_direction_output(enable_gpio, 1);
++      gpio_direction_output(backlight_gpio, 1);
++
++      if (0 != t2_out(PM_RECEIVER, ded_val, ded_reg))
++              return -EIO;
++      if (0 != t2_out(PM_RECEIVER, grp_val, grp_reg))
++              return -EIO;
++
++      lcd_enabled = 1;
++
++      return 0;
++}
++
++static void sdp3430_panel_disable_lcd(struct omap_display *display)
++{
++      lcd_enabled = 0;
++
++      gpio_direction_output(enable_gpio, 0);
++      gpio_direction_output(backlight_gpio, 0);
++
++      if (omap_rev() > OMAP3430_REV_ES1_0) {
++              t2_out(PM_RECEIVER, 0x0, TWL4030_VPLL2_DEDICATED);
++              t2_out(PM_RECEIVER, 0x0, TWL4030_VPLL2_DEV_GRP);
++              mdelay(4);
++      }
++}
++
++static struct omap_display_data sdp3430_display_data = {
++      .type = OMAP_DISPLAY_TYPE_DPI,
++      .name = "lcd",
++      .panel_name = "sharp-ls037v7dw01",
++      .u.dpi.data_lines = 16,
++      .panel_enable = sdp3430_panel_enable_lcd,
++      .panel_disable = sdp3430_panel_disable_lcd,
++};
++
++static int sdp3430_panel_enable_dvi(struct omap_display *display)
++{
++      if (lcd_enabled) {
++              printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
++              return -EINVAL;
++      }
++
++      if (omap_rev() > OMAP3430_REV_ES1_0) {
++              t2_out(PM_RECEIVER, ENABLE_VPLL2_DEDICATED,
++                              TWL4030_VPLL2_DEDICATED);
++              t2_out(PM_RECEIVER, ENABLE_VPLL2_DEV_GRP,
++                              TWL4030_VPLL2_DEV_GRP);
++      }
++
++      dvi_enabled = 1;
++
++      return 0;
++}
++
++static void sdp3430_panel_disable_dvi(struct omap_display *display)
++{
++      dvi_enabled = 0;
++
++      if (omap_rev() > OMAP3430_REV_ES1_0) {
++              t2_out(PM_RECEIVER, 0x0, TWL4030_VPLL2_DEDICATED);
++              t2_out(PM_RECEIVER, 0x0, TWL4030_VPLL2_DEV_GRP);
++              mdelay(4);
++      }
++}
++
++
++static struct omap_display_data sdp3430_display_data_dvi = {
++      .type = OMAP_DISPLAY_TYPE_DPI,
++      .name = "dvi",
++      .panel_name = "panel-dvi",
++      .u.dpi.data_lines = 24,
++      .panel_enable = sdp3430_panel_enable_dvi,
++      .panel_disable = sdp3430_panel_disable_dvi,
++};
++
++static int sdp3430_panel_enable_tv(struct omap_display *display)
++{
++#define ENABLE_VDAC_DEDICATED           0x03
++#define ENABLE_VDAC_DEV_GRP             0x20
++
++      twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
++                      ENABLE_VDAC_DEDICATED,
++                      TWL4030_VDAC_DEDICATED);
++      twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
++                      ENABLE_VDAC_DEV_GRP, TWL4030_VDAC_DEV_GRP);
++
++      return 0;
++}
++
++static void sdp3430_panel_disable_tv(struct omap_display *display)
++{
++      twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x00,
++                      TWL4030_VDAC_DEDICATED);
++      twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x00,
++                      TWL4030_VDAC_DEV_GRP);
++}
++
++static struct omap_display_data sdp3430_display_data_tv = {
++      .type = OMAP_DISPLAY_TYPE_VENC,
++      .name = "tv",
++      .u.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
++      .panel_enable = sdp3430_panel_enable_tv,
++      .panel_disable = sdp3430_panel_disable_tv,
++};
++
++static struct omap_dss_platform_data sdp3430_dss_data = {
++      .num_displays = 3,
++      .displays = {
++              &sdp3430_display_data,
++              &sdp3430_display_data_dvi,
++              &sdp3430_display_data_tv,
++      }
++};
++
++static struct platform_device sdp3430_dss_device = {
++      .name          = "omap-dss",
++      .id            = -1,
++      .dev            = {
++              .platform_data = &sdp3430_dss_data,
++      },
++};
++
++
+ static struct platform_device *sdp3430_devices[] __initdata = {
+       &sdp3430_smc91x_device,
+-      &sdp3430_lcd_device,
++      &sdp3430_dss_device,
+ };
+ static inline void __init sdp3430_init_smc91x(void)
+@@ -294,13 +506,11 @@ static struct omap_uart_config sdp3430_uart_config __initdata = {
+       .enabled_uarts  = ((1 << 0) | (1 << 1) | (1 << 2)),
+ };
+-static struct omap_lcd_config sdp3430_lcd_config __initdata = {
+-      .ctrl_name      = "internal",
+-};
+-
+ static struct omap_board_config_kernel sdp3430_config[] __initdata = {
+       { OMAP_TAG_UART,        &sdp3430_uart_config },
+-      { OMAP_TAG_LCD,         &sdp3430_lcd_config },
++      { OMAP_TAG_FBMEM,       &sdp3430_fbmem0_config },
++      { OMAP_TAG_FBMEM,       &sdp3430_fbmem1_config },
++      { OMAP_TAG_FBMEM,       &sdp3430_fbmem2_config },
+ };
+ static int sdp3430_batt_table[] = {
+@@ -467,8 +677,6 @@ static void __init omap_3430sdp_init(void)
+ {
+       omap3430_i2c_init();
+       platform_add_devices(sdp3430_devices, ARRAY_SIZE(sdp3430_devices));
+-      omap_board_config = sdp3430_config;
+-      omap_board_config_size = ARRAY_SIZE(sdp3430_config);
+       if (omap_rev() > OMAP3430_REV_ES1_0)
+               ts_gpio = OMAP34XX_TS_GPIO_IRQ_SDPV2;
+       else
+@@ -483,10 +691,14 @@ static void __init omap_3430sdp_init(void)
+       usb_musb_init();
+       usb_ehci_init();
+       hsmmc_init(mmc);
++      sdp3430_display_init();
+ }
+ static void __init omap_3430sdp_map_io(void)
+ {
++      omap_board_config = sdp3430_config;
++      omap_board_config_size = ARRAY_SIZE(sdp3430_config);
++
+       omap2_set_globals_343x();
+       omap2_map_common_io();
+ }
+-- 
+1.5.6.3
+
diff --git a/packages/linux/linux-omap/0011-DSS-Support-for-OMAP3-EVM-board.patch b/packages/linux/linux-omap/0011-DSS-Support-for-OMAP3-EVM-board.patch
new file mode 100644 (file)
index 0000000..6ca8c0d
--- /dev/null
@@ -0,0 +1,288 @@
+From 21156e8a6473c293d260b18565a382283d227ef4 Mon Sep 17 00:00:00 2001
+From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
+Date: Fri, 14 Nov 2008 16:03:34 +0200
+Subject: [PATCH] DSS: Support for OMAP3 EVM board
+
+Coded by Vaibhav Hiremath <hvaibhav@ti.com>
+
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
+---
+ arch/arm/mach-omap2/board-omap3evm.c |  224 ++++++++++++++++++++++++++++++++--
+ 1 files changed, 215 insertions(+), 9 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
+index bc44cb5..edecfd3 100644
+--- a/arch/arm/mach-omap2/board-omap3evm.c
++++ b/arch/arm/mach-omap2/board-omap3evm.c
+@@ -37,6 +37,8 @@
+ #include <mach/usb-ehci.h>
+ #include <mach/common.h>
+ #include <mach/mcspi.h>
++#include <mach/omapfb.h>
++#include <mach/display.h>
+ #include "sdram-micron-mt46h32m32lf-6.h"
+ #include "twl4030-generic-scripts.h"
+@@ -161,14 +163,215 @@ static int __init omap3_evm_i2c_init(void)
+       omap_register_i2c_bus(3, 400, NULL, 0);
+       return 0;
+ }
++static struct omap_fbmem_config evm_fbmem0_config = {
++              .size = 480*720*4,
++              .start = OMAPFB_MEMTYPE_SDRAM,
++};
+-static struct platform_device omap3_evm_lcd_device = {
+-      .name           = "omap3evm_lcd",
+-      .id             = -1,
++static struct omap_fbmem_config evm_fbmem1_config = {
++              .size = 480*720*4,
++              .start = OMAPFB_MEMTYPE_SDRAM,
+ };
+-static struct omap_lcd_config omap3_evm_lcd_config __initdata = {
+-      .ctrl_name      = "internal",
++static struct omap_fbmem_config evm_fbmem2_config = {
++              .size = 480*720*4,
++              .start = OMAPFB_MEMTYPE_SDRAM,
++};
++#define LCD_PANEL_LR          2
++#define LCD_PANEL_UD          3
++#define LCD_PANEL_INI         152
++#define LCD_PANEL_ENABLE_GPIO 153
++#define LCD_PANEL_QVGA                154
++#define LCD_PANEL_RESB                155
++
++#define ENABLE_VDAC_DEDICATED 0x03
++#define ENABLE_VDAC_DEV_GRP   0x20
++#define ENABLE_VPLL2_DEDICATED        0x05
++#define ENABLE_VPLL2_DEV_GRP  0xE0
++
++#define TWL4030_GPIODATA_IN3  0x03
++#define TWL4030_GPIODATA_DIR3 0x06
++#define TWL4030_VPLL2_DEV_GRP 0x33
++#define TWL4030_VPLL2_DEDICATED       0x36
++
++static int lcd_enabled;
++static int dvi_enabled;
++
++static void __init evm_display_init(void)
++{
++      int r;
++      r = gpio_request(LCD_PANEL_LR, "lcd_panel_lr");
++      if (r) {
++              printk(KERN_ERR "failed to get LCD_PANEL_LR\n");
++              return;
++      }
++      r = gpio_request(LCD_PANEL_UD, "lcd_panel_ud");
++      if (r) {
++              printk(KERN_ERR "failed to get LCD_PANEL_UD\n");
++              goto err_1;
++      }
++
++      r = gpio_request(LCD_PANEL_INI, "lcd_panel_ini");
++      if (r) {
++              printk(KERN_ERR "failed to get LCD_PANEL_INI\n");
++              goto err_2;
++      }
++      r = gpio_request(LCD_PANEL_RESB, "lcd_panel_resb");
++      if (r) {
++              printk(KERN_ERR "failed to get LCD_PANEL_RESB\n");
++              goto err_3;
++      }
++      r = gpio_request(LCD_PANEL_QVGA, "lcd_panel_qvga");
++      if (r) {
++              printk(KERN_ERR "failed to get LCD_PANEL_QVGA\n");
++              goto err_4;
++      }
++
++      gpio_direction_output(LCD_PANEL_LR, 0);
++      gpio_direction_output(LCD_PANEL_UD, 0);
++      gpio_direction_output(LCD_PANEL_INI, 0);
++      gpio_direction_output(LCD_PANEL_RESB, 0);
++      gpio_direction_output(LCD_PANEL_QVGA, 0);
++
++#define TWL_LED_LEDEN           0x00
++#define TWL_PWMA_PWMAON         0x00
++#define TWL_PWMA_PWMAOFF        0x01
++
++      twl4030_i2c_write_u8(TWL4030_MODULE_LED, 0x11, TWL_LED_LEDEN);
++      twl4030_i2c_write_u8(TWL4030_MODULE_PWMA, 0x01, TWL_PWMA_PWMAON);
++      twl4030_i2c_write_u8(TWL4030_MODULE_PWMA, 0x02, TWL_PWMA_PWMAOFF);
++
++      gpio_direction_output(LCD_PANEL_RESB, 1);
++      gpio_direction_output(LCD_PANEL_INI, 1);
++      gpio_direction_output(LCD_PANEL_QVGA, 0);
++      gpio_direction_output(LCD_PANEL_LR, 1);
++      gpio_direction_output(LCD_PANEL_UD, 1);
++
++      return;
++
++err_4:
++      gpio_free(LCD_PANEL_RESB);
++err_3:
++      gpio_free(LCD_PANEL_INI);
++err_2:
++      gpio_free(LCD_PANEL_UD);
++err_1:
++      gpio_free(LCD_PANEL_LR);
++
++}
++
++static int evm_panel_enable_lcd(struct omap_display *display)
++{
++      if (dvi_enabled) {
++              printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
++              return -EINVAL;
++      }
++      if (omap_rev() > OMAP3430_REV_ES1_0) {
++              twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
++                      ENABLE_VPLL2_DEDICATED, TWL4030_VPLL2_DEDICATED);
++              twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
++                      ENABLE_VPLL2_DEV_GRP, TWL4030_VPLL2_DEV_GRP);
++      }
++      gpio_direction_output(LCD_PANEL_ENABLE_GPIO, 0);
++      lcd_enabled = 1;
++      return 0;
++}
++
++static void evm_panel_disable_lcd(struct omap_display *display)
++{
++      if (omap_rev() > OMAP3430_REV_ES1_0) {
++              twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x0,
++                              TWL4030_VPLL2_DEDICATED);
++              twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x0,
++                              TWL4030_VPLL2_DEV_GRP);
++      }
++      gpio_set_value(LCD_PANEL_ENABLE_GPIO, 1);
++      lcd_enabled = 0;
++}
++
++static struct omap_display_data evm_display_data = {
++      .type = OMAP_DISPLAY_TYPE_DPI,
++      .name = "lcd",
++      .panel_name = "sharp-ls037v7dw01",
++      .u.dpi.data_lines = 16,
++      .panel_enable = evm_panel_enable_lcd,
++      .panel_disable = evm_panel_disable_lcd,
++};
++
++static int evm_panel_enable_tv(struct omap_display *display)
++{
++      twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
++                      ENABLE_VDAC_DEDICATED, TWL4030_VDAC_DEDICATED);
++      twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
++                      ENABLE_VDAC_DEV_GRP, TWL4030_VDAC_DEV_GRP);
++      return 0;
++}
++
++static void evm_panel_disable_tv(struct omap_display *display)
++{
++      twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x00,
++                      TWL4030_VDAC_DEDICATED);
++      twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x00,
++                      TWL4030_VDAC_DEV_GRP);
++}
++
++static struct omap_display_data evm_display_data_tv = {
++      .type = OMAP_DISPLAY_TYPE_VENC,
++      .name = "tv",
++      .u.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
++      .panel_enable = evm_panel_enable_tv,
++      .panel_disable = evm_panel_disable_tv,
++};
++
++
++static int evm_panel_enable_dvi(struct omap_display *display)
++{
++      if (lcd_enabled) {
++              printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
++              return -EINVAL;
++      }
++      twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0x80,
++                      TWL4030_GPIODATA_IN3);
++      twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0x80,
++                      TWL4030_GPIODATA_DIR3);
++      dvi_enabled = 1;
++
++      return 0;
++}
++
++static void evm_panel_disable_dvi(struct omap_display *display)
++{
++      twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0x00,
++                      TWL4030_GPIODATA_IN3);
++      twl4030_i2c_write_u8(TWL4030_MODULE_GPIO, 0x00,
++                      TWL4030_GPIODATA_DIR3);
++      dvi_enabled = 0;
++}
++
++
++static struct omap_display_data evm_display_data_dvi = {
++      .type = OMAP_DISPLAY_TYPE_DPI,
++      .name = "dvi",
++      .panel_name = "panel-dvi",
++      .u.dpi.data_lines = 24,
++      .panel_enable = evm_panel_enable_dvi,
++      .panel_disable = evm_panel_disable_dvi,
++};
++
++static struct omap_dss_platform_data evm_dss_data = {
++      .num_displays = 3,
++      .displays = {
++              &evm_display_data,
++              &evm_display_data_dvi,
++              &evm_display_data_tv,
++      }
++};
++static struct platform_device evm_dss_device = {
++      .name           = "omap-dss",
++      .id             = -1,
++      .dev            = {
++              .platform_data = &evm_dss_data,
++      },
+ };
+ static void ads7846_dev_init(void)
+@@ -227,11 +430,13 @@ static void __init omap3_evm_init_irq(void)
+ static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
+       { OMAP_TAG_UART,        &omap3_evm_uart_config },
+-      { OMAP_TAG_LCD,         &omap3_evm_lcd_config },
++      { OMAP_TAG_FBMEM,       &evm_fbmem0_config },
++      { OMAP_TAG_FBMEM,       &evm_fbmem1_config },
++      { OMAP_TAG_FBMEM,       &evm_fbmem2_config },
+ };
+ static struct platform_device *omap3_evm_devices[] __initdata = {
+-      &omap3_evm_lcd_device,
++      &evm_dss_device,
+       &omap3evm_smc911x_device,
+ };
+@@ -250,8 +455,6 @@ static void __init omap3_evm_init(void)
+       omap3_evm_i2c_init();
+       platform_add_devices(omap3_evm_devices, ARRAY_SIZE(omap3_evm_devices));
+-      omap_board_config = omap3_evm_config;
+-      omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
+       spi_register_board_info(omap3evm_spi_board_info,
+                               ARRAY_SIZE(omap3evm_spi_board_info));
+@@ -262,10 +465,13 @@ static void __init omap3_evm_init(void)
+       usb_ehci_init();
+       omap3evm_flash_init();
+       ads7846_dev_init();
++      evm_display_init();
+ }
+ static void __init omap3_evm_map_io(void)
+ {
++      omap_board_config = omap3_evm_config;
++      omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
+       omap2_set_globals_343x();
+       omap2_map_common_io();
+ }
+-- 
+1.5.6.3
+
diff --git a/packages/linux/linux-omap/fix-mmc.diff b/packages/linux/linux-omap/fix-mmc.diff
new file mode 100644 (file)
index 0000000..dfc531c
--- /dev/null
@@ -0,0 +1,39 @@
+Oops.. Haven't thought to try it without gpio_cd set up, in which case c->mmc
+is not set initialized.. Please try the following patch:
+
+
+diff --git a/arch/arm/mach-omap2/mmc-twl4030.c b/arch/arm/mach-omap2/mmc-twl4030.c
+index 0ea6ba6..626d668 100644
+--- a/arch/arm/mach-omap2/mmc-twl4030.c
++++ b/arch/arm/mach-omap2/mmc-twl4030.c
+@@ -239,6 +239,7 @@ static int twl_mmc1_set_power(struct device *dev, int slot, int power_on,
+       u32 reg;
+       int ret = 0;
+       struct twl_mmc_controller *c = &hsmmc[0];
++      struct omap_mmc_platform_data *mmc = dev->platform_data;
+       if (power_on) {
+               if (cpu_is_omap2430()) {
+@@ -250,7 +251,7 @@ static int twl_mmc1_set_power(struct device *dev, int slot, int power_on,
+                       omap_ctrl_writel(reg, OMAP243X_CONTROL_DEVCONF1);
+               }
+-              if (c->mmc->slots[0].internal_clock) {
++              if (mmc->slots[0].internal_clock) {
+                       reg = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0);
+                       reg |= OMAP2_MMCSDIO1ADPCLKISEL;
+                       omap_ctrl_writel(reg, OMAP2_CONTROL_DEVCONF0);
+@@ -293,11 +294,11 @@ static int twl_mmc1_set_power(struct device *dev, int slot, int power_on,
+ static int twl_mmc2_set_power(struct device *dev, int slot, int power_on, int vdd)
+ {
+       int ret;
+-
+       struct twl_mmc_controller *c = &hsmmc[1];
++      struct omap_mmc_platform_data *mmc = dev->platform_data;
+       if (power_on) {
+-              if (c->mmc->slots[0].internal_clock) {
++              if (mmc->slots[0].internal_clock) {
+                       u32 reg;
+                       reg = omap_ctrl_readl(control_devconf1_offset);
index c56f87e..b3af020 100644 (file)
@@ -40,8 +40,11 @@ SRC_URI_append = " \
            file://0006-DSS-Add-generic-DVI-panel.patch;patch=1 \
            file://0007-DSS-support-for-Beagle-Board.patch;patch=1 \
            file://0008-DSS-BEAGLE-Enable-DSS-in-beagle-defconfig.patch;patch=1 \
-           file://0009-DSS-support-for-OMAP3-SDP-board.patch;patch=1 \
+           file://0009-DSS-Sharp-LS037V7DW01-LCD-Panel-driver.patch;patch=1 \
+           file://0010-DSS-Support-for-OMAP3-SDP-board.patch;patch=1 \
+           file://0011-DSS-Support-for-OMAP3-EVM-board.patch;patch=1 \
 #           file://fix-asoc.diff;patch=1 \
+           file://fix-mmc.diff;patch=1 \
 "
 
 
@@ -51,7 +54,6 @@ SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \
 SRC_URI_append_omap3evm = " \
        file://evm-mcspi-ts.diff;patch=1 \
 #      file://omap3evm-lcd-redtint.diff;patch=1 \
-       file://omap3evm-dss2.diff;patch=1 \
 "
 
 S = "${WORKDIR}/git"