From ca1f089127fbeeedd34738030f2363c12ed22f53 Mon Sep 17 00:00:00 2001 From: Koen Kooi Date: Wed, 17 Aug 2011 09:36:43 +0200 Subject: [PATCH] linux-3.0: add support for 'uLCD' expansionboard Signed-off-by: Koen Kooi --- ...dd-support-for-ThreeFiveCorp-S9700-D.patch | 170 ++++++++++++++++++ .../0002-omap3-beagle-added-lcd-driver.patch | 72 ++++++++ ...ake-fbset-show-correct-timing-values.patch | 40 +++++ recipes-kernel/linux/linux_3.0.bb | 6 +- 4 files changed, 287 insertions(+), 1 deletion(-) create mode 100644 recipes-kernel/linux/linux-3.0/ulcd/0001-omap2-displays-Add-support-for-ThreeFiveCorp-S9700-D.patch create mode 100644 recipes-kernel/linux/linux-3.0/ulcd/0002-omap3-beagle-added-lcd-driver.patch create mode 100644 recipes-kernel/linux/linux-3.0/ulcd/0003-Make-fbset-show-correct-timing-values.patch 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 index 00000000..0662d514 --- /dev/null +++ b/recipes-kernel/linux/linux-3.0/ulcd/0001-omap2-displays-Add-support-for-ThreeFiveCorp-S9700-D.patch @@ -0,0 +1,170 @@ +From 79f2013a573226d43a9d07760f81c297ba93b3c0 Mon Sep 17 00:00:00 2001 +From: Roger Monk +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 +--- + 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 ++ * From Original by : Vaibhav Hiremath ++ * ++ * 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 . ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++ ++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 index 00000000..fce43004 --- /dev/null +++ b/recipes-kernel/linux/linux-3.0/ulcd/0002-omap3-beagle-added-lcd-driver.patch @@ -0,0 +1,72 @@ +From 1fc2bd36acf09d22db63b59985eab1a663855581 Mon Sep 17 00:00:00 2001 +From: Jason Kridner +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 index 00000000..a4d51f57 --- /dev/null +++ b/recipes-kernel/linux/linux-3.0/ulcd/0003-Make-fbset-show-correct-timing-values.patch @@ -0,0 +1,40 @@ +From a2fa8fa573f44d60d812779cf55e546303dcd6cb Mon Sep 17 00:00:00 2001 +From: Joel A Fernandes +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 +Cc: "Monk, Roger" +--- + .../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 + diff --git a/recipes-kernel/linux/linux_3.0.bb b/recipes-kernel/linux/linux_3.0.bb index 718b6af0..7b5668aa 100644 --- a/recipes-kernel/linux/linux_3.0.bb +++ b/recipes-kernel/linux/linux_3.0.bb @@ -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 \