linux-3.0: add support for 'uLCD' expansionboard
authorKoen Kooi <koen@dominion.thruhere.net>
Wed, 17 Aug 2011 07:36:43 +0000 (09:36 +0200)
committerKoen Kooi <koen@dominion.thruhere.net>
Wed, 17 Aug 2011 07:36:43 +0000 (09:36 +0200)
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
recipes-kernel/linux/linux-3.0/ulcd/0001-omap2-displays-Add-support-for-ThreeFiveCorp-S9700-D.patch [new file with mode: 0644]
recipes-kernel/linux/linux-3.0/ulcd/0002-omap3-beagle-added-lcd-driver.patch [new file with mode: 0644]
recipes-kernel/linux/linux-3.0/ulcd/0003-Make-fbset-show-correct-timing-values.patch [new file with mode: 0644]
recipes-kernel/linux/linux_3.0.bb

diff --git a/recipes-kernel/linux/linux-3.0/ulcd/0001-omap2-displays-Add-support-for-ThreeFiveCorp-S9700-D.patch b/recipes-kernel/linux/linux-3.0/ulcd/0001-omap2-displays-Add-support-for-ThreeFiveCorp-S9700-D.patch
new file mode 100644 (file)
index 0000000..0662d51
--- /dev/null
@@ -0,0 +1,170 @@
+From 79f2013a573226d43a9d07760f81c297ba93b3c0 Mon Sep 17 00:00:00 2001
+From: Roger Monk <r-monk@ti.com>
+Date: Wed, 10 Aug 2011 16:54:34 +0200
+Subject: [PATCH 1/3] omap2-displays: Add support for ThreeFiveCorp S9700 Display
+
+* Add support for s9700rtwv35tr01b display panel
+   * This is used on BeagleBoardToys ULCD/-lite daugtercards
+
+Signed-off-by: Roger Monk <r-monk@ti.com>
+---
+ drivers/video/omap2/displays/Kconfig               |    6 +
+ drivers/video/omap2/displays/Makefile              |    1 +
+ .../omap2/displays/panel-tfc-s9700rtwv35tr01b.c    |  118 ++++++++++++++++++++
+ 3 files changed, 125 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/video/omap2/displays/panel-tfc-s9700rtwv35tr01b.c
+
+diff --git a/drivers/video/omap2/displays/Kconfig b/drivers/video/omap2/displays/Kconfig
+index 609a280..f8be2a8 100644
+--- a/drivers/video/omap2/displays/Kconfig
++++ b/drivers/video/omap2/displays/Kconfig
+@@ -30,6 +30,12 @@ config PANEL_NEC_NL8048HL11_01B
+               This NEC NL8048HL11-01B panel is TFT LCD
+               used in the Zoom2/3/3630 sdp boards.
++config PANEL_TFCS9700RTWV35TR01B
++        tristate "TFC S9700RTWV35TR01B"
++        depends on OMAP2_DSS
++        help
++          LCD Panel used on BeagleboardToys 800x480 LCD Expansion Module
++
+ config PANEL_TAAL
+         tristate "Taal DSI Panel"
+         depends on OMAP2_DSS_DSI
+diff --git a/drivers/video/omap2/displays/Makefile b/drivers/video/omap2/displays/Makefile
+index 0f601ab..8abdf50 100644
+--- a/drivers/video/omap2/displays/Makefile
++++ b/drivers/video/omap2/displays/Makefile
+@@ -5,4 +5,5 @@ obj-$(CONFIG_PANEL_NEC_NL8048HL11_01B) += panel-nec-nl8048hl11-01b.o
+ obj-$(CONFIG_PANEL_TAAL) += panel-taal.o
+ obj-$(CONFIG_PANEL_TPO_TD043MTEA1) += panel-tpo-td043mtea1.o
++obj-$(CONFIG_PANEL_TFCS9700RTWV35TR01B) += panel-tfc-s9700rtwv35tr01b.o
+ obj-$(CONFIG_PANEL_ACX565AKM) += panel-acx565akm.o
+diff --git a/drivers/video/omap2/displays/panel-tfc-s9700rtwv35tr01b.c b/drivers/video/omap2/displays/panel-tfc-s9700rtwv35tr01b.c
+new file mode 100644
+index 0000000..796393d
+--- /dev/null
++++ b/drivers/video/omap2/displays/panel-tfc-s9700rtwv35tr01b.c
+@@ -0,0 +1,118 @@
++/*
++ * LCD panel driver for TFC S9700RTWV35TR-01B
++ *
++ * Copyright (C) 2011 Texas Instruments Inc
++ * Author: Roger Monk <r-monk@ti.com>
++ * From Original by : Vaibhav Hiremath <hvaibhav@ti.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ *
++ * 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/device.h>
++#include <linux/err.h>
++
++#include <plat/display.h>
++
++static struct omap_video_timings tfc_timings = {
++      .x_res          = 800,
++      .y_res          = 480,
++
++      .pixel_clock    = 30000,
++
++      .hsw            = 49,
++      .hfp            = 41,
++      .hbp            = 40,
++
++      .vsw            = 4,
++      .vfp            = 14,
++      .vbp            = 29,
++};
++
++static int tfc_panel_probe(struct omap_dss_device *dssdev)
++{
++      dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
++              OMAP_DSS_LCD_IHS; // | OMAP_DSS_LCD_IEO; - TODO check this - doesn't work with this enabled
++      dssdev->panel.acb = 0x0;
++      dssdev->panel.timings = tfc_timings;
++
++      return 0;
++}
++
++static void tfc_panel_remove(struct omap_dss_device *dssdev)
++{
++}
++
++static int tfc_panel_enable(struct omap_dss_device *dssdev)
++{
++      int r = 0;
++
++      /* wait couple of vsyncs until enabling the LCD */
++      msleep(50);
++
++      if (dssdev->platform_enable)
++              r = dssdev->platform_enable(dssdev);
++
++      return r;
++}
++
++static void tfc_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 tfc_panel_suspend(struct omap_dss_device *dssdev)
++{
++      tfc_panel_disable(dssdev);
++      return 0;
++}
++
++static int tfc_panel_resume(struct omap_dss_device *dssdev)
++{
++      return tfc_panel_enable(dssdev);
++}
++
++static struct omap_dss_driver tfc_s9700_driver = {
++      .probe          = tfc_panel_probe,
++      .remove         = tfc_panel_remove,
++
++      .enable         = tfc_panel_enable,
++      .disable        = tfc_panel_disable,
++      .suspend        = tfc_panel_suspend,
++      .resume         = tfc_panel_resume,
++
++      .driver         = {
++              .name   = "tfc_s9700_panel",
++              .owner  = THIS_MODULE,
++      },
++};
++
++static int __init tfc_panel_drv_init(void)
++{
++      return omap_dss_register_driver(&tfc_s9700_driver);
++}
++
++static void __exit tfc_panel_drv_exit(void)
++{
++      omap_dss_unregister_driver(&tfc_s9700_driver);
++}
++
++module_init(tfc_panel_drv_init);
++module_exit(tfc_panel_drv_exit);
++MODULE_LICENSE("GPL");
+-- 
+1.6.6.1
+
diff --git a/recipes-kernel/linux/linux-3.0/ulcd/0002-omap3-beagle-added-lcd-driver.patch b/recipes-kernel/linux/linux-3.0/ulcd/0002-omap3-beagle-added-lcd-driver.patch
new file mode 100644 (file)
index 0000000..fce4300
--- /dev/null
@@ -0,0 +1,72 @@
+From 1fc2bd36acf09d22db63b59985eab1a663855581 Mon Sep 17 00:00:00 2001
+From: Jason Kridner <jkridner@beagleboard.org>
+Date: Fri, 5 Aug 2011 18:07:09 +0000
+Subject: [PATCH 2/3] omap3: beagle: added lcd driver
+
+This enables the tfc_s9700_panel by default.  Needs to be extended to
+redefine the driver name at boot time.
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |   25 +++++++++++++++++++++++++
+ 1 files changed, 25 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 5e1d9f9..b525a5e 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -84,11 +84,13 @@ static struct {
+       int usb_pwr_level;
+       int reset_gpio;
+       int usr_button_gpio;
++      char *lcd_driver_name;
+ } beagle_config = {
+       .mmc1_gpio_wp = -EINVAL,
+       .usb_pwr_level = GPIOF_OUT_INIT_LOW,
+       .reset_gpio = 129,
+       .usr_button_gpio = 4,
++      .lcd_driver_name = "",
+ };
+ static struct gpio omap3_beagle_rev_gpios[] __initdata = {
+@@ -387,9 +389,28 @@ 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)
++{
++      return 0;
++}
++
++static int beagle_disable_lcd(struct omap_dss_device *dssdev)
++{
++}
++
++static struct omap_dss_device beagle_lcd_device = {
++      .name                   = "lcd",
++      .driver_name            = "",
++      .type                   = OMAP_DISPLAY_TYPE_DPI,
++      .phy.dpi.data_lines     = 24,
++      .platform_enable        = beagle_enable_lcd,
++      .platform_disable       = beagle_disable_lcd,
++};
++
+ 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 = {
+@@ -733,6 +754,10 @@ static void __init omap3_beagle_init(void)
+       gpio_buttons[0].gpio = beagle_config.usr_button_gpio;
++      /* TODO: set lcd_driver_name by command line or device tree */
++      beagle_config.lcd_driver_name = "tfc_s9700_panel";
++      beagle_lcd_device.driver_name = beagle_config.lcd_driver_name;
++
+       platform_add_devices(omap3_beagle_devices,
+                       ARRAY_SIZE(omap3_beagle_devices));
+       omap_display_init(&beagle_dss_data);
+-- 
+1.6.6.1
+
diff --git a/recipes-kernel/linux/linux-3.0/ulcd/0003-Make-fbset-show-correct-timing-values.patch b/recipes-kernel/linux/linux-3.0/ulcd/0003-Make-fbset-show-correct-timing-values.patch
new file mode 100644 (file)
index 0000000..a4d51f5
--- /dev/null
@@ -0,0 +1,40 @@
+From a2fa8fa573f44d60d812779cf55e546303dcd6cb Mon Sep 17 00:00:00 2001
+From: Joel A Fernandes <agnel.joel@gmail.com>
+Date: Wed, 17 Aug 2011 00:28:49 -0500
+Subject: [PATCH 3/3] Make fbset show correct timing values
+
+Signed-off-by: Joel A Fernandes <agnel.joel@gmail.com>
+Cc: "Monk, Roger" <r-monk@ti.com>
+---
+ .../omap2/displays/panel-tfc-s9700rtwv35tr01b.c    |    8 +++++++-
+ 1 files changed, 7 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/video/omap2/displays/panel-tfc-s9700rtwv35tr01b.c b/drivers/video/omap2/displays/panel-tfc-s9700rtwv35tr01b.c
+index 796393d..9689a2c 100644
+--- a/drivers/video/omap2/displays/panel-tfc-s9700rtwv35tr01b.c
++++ b/drivers/video/omap2/displays/panel-tfc-s9700rtwv35tr01b.c
+@@ -88,6 +88,12 @@ static int tfc_panel_resume(struct omap_dss_device *dssdev)
+       return tfc_panel_enable(dssdev);
+ }
++static void tfc_panel_get_timings(struct omap_dss_device *dssdev,
++                          struct omap_video_timings *timings)
++{
++          *timings = dssdev->panel.timings;
++}
++
+ static struct omap_dss_driver tfc_s9700_driver = {
+       .probe          = tfc_panel_probe,
+       .remove         = tfc_panel_remove,
+@@ -96,7 +102,7 @@ static struct omap_dss_driver tfc_s9700_driver = {
+       .disable        = tfc_panel_disable,
+       .suspend        = tfc_panel_suspend,
+       .resume         = tfc_panel_resume,
+-
++      .get_timings = tfc_panel_get_timings,
+       .driver         = {
+               .name   = "tfc_s9700_panel",
+               .owner  = THIS_MODULE,
+-- 
+1.6.6.1
+
index 718b6af0b1a96fa511f8905e43ee637665285b9d..7b5668aa6087053ca146109a4f38d380edb939fd 100644 (file)
@@ -9,7 +9,7 @@ COMPATIBLE_MACHINE = "(beagleboard)"
 SRCREV_pn-${PN} = "94ed5b4788a7cdbe68bc7cb8516972cbebdc8274"
 
 # The main PR is now using MACHINE_KERNEL_PR, for omap3 see conf/machine/include/omap3.inc
-MACHINE_KERNEL_PR_append = "m"
+MACHINE_KERNEL_PR_append = "n"
 
 FILESPATHPKG_prepend = "linux-3.0:"
 
@@ -215,6 +215,10 @@ SRC_URI += "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-3.0.y.git
             file://sakoman/0014-rtc-twl-add-support-for-backup-battery-recharge.patch \
             \
             file://sgx/0001-ARM-L2-Add-and-export-outer_clean_all.patch \
+            \
+            file://ulcd/0001-omap2-displays-Add-support-for-ThreeFiveCorp-S9700-D.patch \
+            file://ulcd/0002-omap3-beagle-added-lcd-driver.patch \
+            file://ulcd/0003-Make-fbset-show-correct-timing-values.patch \
             file://defconfig"
 
 SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \