From 189e095aa8c39b9ab1e99b0944477276ca01fc1e Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Thu, 2 Apr 2009 10:29:56 +0300 Subject: [PATCH] DSS2: Add panel drivers - Generic panel - Samsung LTE430WQ-F0C LCD Panel - Sharp LS037V7DW01 LCD Panel Signed-off-by: Tomi Valkeinen --- drivers/video/omap2/displays/Kconfig | 21 ++++ drivers/video/omap2/displays/Makefile | 3 + drivers/video/omap2/displays/panel-generic.c | 96 +++++++++++++++ .../displays/panel-samsung-lte430wq-f0c.c | 108 +++++++++++++++++ .../omap2/displays/panel-sharp-ls037v7dw01.c | 112 ++++++++++++++++++ 5 files changed, 340 insertions(+) create mode 100644 drivers/video/omap2/displays/Kconfig create mode 100644 drivers/video/omap2/displays/Makefile create mode 100644 drivers/video/omap2/displays/panel-generic.c create mode 100644 drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c create mode 100644 drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c diff --git a/drivers/video/omap2/displays/Kconfig b/drivers/video/omap2/displays/Kconfig new file mode 100644 index 000000000000..0419ec8be579 --- /dev/null +++ b/drivers/video/omap2/displays/Kconfig @@ -0,0 +1,21 @@ +menu "OMAP2/3 Display Device Drivers" + depends on OMAP2_DSS + +config PANEL_GENERIC + tristate "Generic Panel" + help + Generic panel driver. + Used for DVI output for Beagle and OMAP3 SDP. + +config PANEL_SAMSUNG_LTE430WQ_F0C + tristate "Samsung LTE430WQ-F0C LCD Panel" + depends on OMAP2_DSS + help + LCD Panel used on Overo Palo43 + +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/displays/Makefile b/drivers/video/omap2/displays/Makefile new file mode 100644 index 000000000000..a26bbd2adb67 --- /dev/null +++ b/drivers/video/omap2/displays/Makefile @@ -0,0 +1,3 @@ +obj-$(CONFIG_PANEL_GENERIC) += panel-generic.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-generic.c b/drivers/video/omap2/displays/panel-generic.c new file mode 100644 index 000000000000..8382acb5edd4 --- /dev/null +++ b/drivers/video/omap2/displays/panel-generic.c @@ -0,0 +1,96 @@ +/* + * Generic panel support + * + * Copyright (C) 2008 Nokia Corporation + * Author: Tomi Valkeinen + * + * 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 + +static int generic_panel_init(struct omap_display *display) +{ + return 0; +} + +static int generic_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 generic_panel_disable(struct omap_display *display) +{ + if (display->hw_config.panel_disable) + display->hw_config.panel_disable(display); +} + +static int generic_panel_suspend(struct omap_display *display) +{ + generic_panel_disable(display); + return 0; +} + +static int generic_panel_resume(struct omap_display *display) +{ + return generic_panel_enable(display); +} + +static struct omap_panel generic_panel = { + .owner = THIS_MODULE, + .name = "panel-generic", + .init = generic_panel_init, + .enable = generic_panel_enable, + .disable = generic_panel_disable, + .suspend = generic_panel_suspend, + .resume = generic_panel_resume, + + .timings = { + /* 640 x 480 @ 60 Hz Reduced blanking VESA CVT 0.31M3-R */ + .x_res = 640, + .y_res = 480, + .pixel_clock = 23500, + .hfp = 48, + .hsw = 32, + .hbp = 80, + .vfp = 3, + .vsw = 4, + .vbp = 7, + }, + + .config = OMAP_DSS_LCD_TFT, +}; + + +static int __init generic_panel_drv_init(void) +{ + omap_dss_register_panel(&generic_panel); + return 0; +} + +static void __exit generic_panel_drv_exit(void) +{ + omap_dss_unregister_panel(&generic_panel); +} + +module_init(generic_panel_drv_init); +module_exit(generic_panel_drv_exit); +MODULE_LICENSE("GPL"); diff --git a/drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c b/drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c new file mode 100644 index 000000000000..e4bb781e0445 --- /dev/null +++ b/drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c @@ -0,0 +1,108 @@ +/* + * LCD panel driver for Samsung LTE430WQ-F0C + * + * Author: Steve Sakoman + * + * 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 + +static int samsung_lte_panel_init(struct omap_display *display) +{ + return 0; +} + +static void samsung_lte_panel_cleanup(struct omap_display *display) +{ +} + +static int samsung_lte_panel_enable(struct omap_display *display) +{ + int r = 0; + + /* wait couple of vsyncs until enabling the LCD */ + msleep(50); + + if (display->hw_config.panel_enable) + r = display->hw_config.panel_enable(display); + + return r; +} + +static void samsung_lte_panel_disable(struct omap_display *display) +{ + if (display->hw_config.panel_disable) + display->hw_config.panel_disable(display); + + /* wait at least 5 vsyncs after disabling the LCD */ + msleep(100); +} + +static int samsung_lte_panel_suspend(struct omap_display *display) +{ + samsung_lte_panel_disable(display); + return 0; +} + +static int samsung_lte_panel_resume(struct omap_display *display) +{ + return samsung_lte_panel_enable(display); +} + +static struct omap_panel samsung_lte_panel = { + .owner = THIS_MODULE, + .name = "samsung-lte430wq-f0c", + .init = samsung_lte_panel_init, + .cleanup = samsung_lte_panel_cleanup, + .enable = samsung_lte_panel_enable, + .disable = samsung_lte_panel_disable, + .suspend = samsung_lte_panel_suspend, + .resume = samsung_lte_panel_resume, + + .timings = { + .x_res = 480, + .y_res = 272, + + .pixel_clock = 9200, + + .hsw = 41, + .hfp = 8, + .hbp = 45-41, + + .vsw = 10, + .vfp = 4, + .vbp = 12-10, + }, + + .config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IVS, +}; + + +static int __init samsung_lte_panel_drv_init(void) +{ + omap_dss_register_panel(&samsung_lte_panel); + return 0; +} + +static void __exit samsung_lte_panel_drv_exit(void) +{ + omap_dss_unregister_panel(&samsung_lte_panel); +} + +module_init(samsung_lte_panel_drv_init); +module_exit(samsung_lte_panel_drv_exit); +MODULE_LICENSE("GPL"); diff --git a/drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c b/drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c new file mode 100644 index 000000000000..1f9915049c90 --- /dev/null +++ b/drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c @@ -0,0 +1,112 @@ +/* + * LCD panel driver for Sharp LS037V7DW01 + * + * Copyright (C) 2008 Nokia Corporation + * Author: Tomi Valkeinen + * + * 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 + +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; + + /* wait couple of vsyncs until enabling the LCD */ + msleep(50); + + 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); + + /* wait at least 5 vsyncs after disabling the LCD */ + + msleep(100); +} + +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, + + .timings = { + .x_res = 480, + .y_res = 640, + + .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, +}; + + +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"); -- 2.39.2