* [PATCH 1/3] Add backlight support for Amstrad Delta @ 2006-04-02 16:36 Jonathan McDowell 2006-04-02 16:38 ` [PATCH 2/3] Add LCD " Jonathan McDowell 2006-04-28 10:26 ` [PATCH 1/3] Add backlight support for Amstrad Delta tony 0 siblings, 2 replies; 8+ messages in thread From: Jonathan McDowell @ 2006-04-02 16:36 UTC (permalink / raw) To: linux-omap-open-source This patch adds support for the Amstrad Delta LCD backlight. It's the first patch in a series of 3 enabling full LCD support for the Delta and is the least intrusive, allowing control of the backlight through the existing backlight class infrastructure. Signed-Off-By: Jonathan McDowell <noodles@earth.li> diff --git a/arch/arm/configs/ams_delta_defconfig b/arch/arm/configs/ams_delta_defconfig index 03f02dd..7cc0727 100644 --- a/arch/arm/configs/ams_delta_defconfig +++ b/arch/arm/configs/ams_delta_defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit # Linux kernel version: 2.6.16-omap1 -# Wed Mar 22 10:53:48 2006 +# Sun Apr 2 16:00:11 2006 # CONFIG_ARM=y CONFIG_MMU=y @@ -623,13 +623,44 @@ CONFIG_I2C_OMAP=y # # Graphics support # -# CONFIG_FB is not set +CONFIG_FB=y +# CONFIG_FB_CFB_FILLRECT is not set +# CONFIG_FB_CFB_COPYAREA is not set +# CONFIG_FB_CFB_IMAGEBLIT is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_OMAP=y +# CONFIG_FB_OMAP_LCDC_EXTERNAL is not set +# CONFIG_FB_OMAP_LCD_LPH8923 is not set +# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set +# CONFIG_FB_OMAP_DMA_TUNE is not set +# CONFIG_FB_VIRTUAL is not set # # Console display driver support # # CONFIG_VGA_CONSOLE is not set CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y + +# +# Logo configuration +# +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_DEVICE=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_AMS_DELTA=y # # Sound diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index 6178f04..7475587 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c @@ -84,6 +84,15 @@ static struct omap_board_config_kernel a { OMAP_TAG_UART, &ams_delta_uart_config }, }; +static struct platform_device ams_delta_bl_device = { + .name = "ams-delta-bl", + .id = -1, +}; + +static struct platform_device *ams_delta_devices[] __initdata = { + &ams_delta_bl_device, +}; + static void __init ams_delta_init(void) { iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc)); @@ -94,6 +103,8 @@ static void __init ams_delta_init(void) /* Clear latch2 (NAND, LCD, modem enable) */ ams_delta_latch2_write(~0, 0); + + platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices)); } static void __init ams_delta_map_io(void) diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig index 9d996f2..5f02b00 100644 --- a/drivers/video/backlight/Kconfig +++ b/drivers/video/backlight/Kconfig @@ -42,6 +42,14 @@ config LCD_DEVICE depends on LCD_CLASS_DEVICE default y +config BACKLIGHT_AMS_DELTA + tristate "Amstrad Delta (E3) backlight driver" + depends on BACKLIGHT_DEVICE && MACH_AMS_DELTA + default y + help + If you have an Amstrad Delta (E3) videophone, say y to enable + the backlight driver. + config BACKLIGHT_CORGI tristate "Sharp Corgi Backlight Driver (SL-C7xx Series)" depends on BACKLIGHT_DEVICE && PXA_SHARPSL diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile index 744210c..2a793ea 100644 --- a/drivers/video/backlight/Makefile +++ b/drivers/video/backlight/Makefile @@ -1,6 +1,7 @@ # Backlight & LCD drivers obj-$(CONFIG_LCD_CLASS_DEVICE) += lcd.o +obj-$(CONFIG_BACKLIGHT_AMS_DELTA) += ams_delta_bl.o obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o diff --git a/drivers/video/backlight/ams_delta_bl.c b/drivers/video/backlight/ams_delta_bl.c new file mode 100644 index 0000000..6b84744 --- /dev/null +++ b/drivers/video/backlight/ams_delta_bl.c @@ -0,0 +1,172 @@ +/* + * Backlight driver for Amstrad E3 (Delta) videophone. + * + * Copyright (C) 2006 Jonathan McDowell <noodles@earth.li> + * + * Based on Richard Purdie's Corgi driver. + * + * 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. + * + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/fb.h> +#include <linux/backlight.h> +#include <linux/platform_device.h> + +#include <asm/arch/omap16xx.h> +#include <asm/arch/board-ams-delta.h> + +#define AMS_DELTA_DEFAULT_INTENSITY 112 +#define AMS_DELTA_MAX_INTENSITY 255 + +static int ams_delta_bl_powermode = FB_BLANK_UNBLANK; +static int current_intensity = 0; + +static void ams_delta_bl_send_intensity(int intensity) +{ + if (ams_delta_bl_powermode != FB_BLANK_UNBLANK) { + intensity = 0; + } + + omap_writeb(intensity, OMAP16XX_PWL_ENABLE); +} + +static void ams_delta_bl_blank(int blank) +{ + switch(blank) { + + case FB_BLANK_NORMAL: + case FB_BLANK_VSYNC_SUSPEND: + case FB_BLANK_HSYNC_SUSPEND: + case FB_BLANK_POWERDOWN: + if (ams_delta_bl_powermode == FB_BLANK_UNBLANK) { + ams_delta_latch2_write(AMS_DELTA_LATCH2_LCD_VBLEN, 0); + ams_delta_bl_send_intensity(0); + ams_delta_bl_powermode = blank; + } + break; + case FB_BLANK_UNBLANK: + if (ams_delta_bl_powermode != FB_BLANK_UNBLANK) { + ams_delta_latch2_write(AMS_DELTA_LATCH2_LCD_VBLEN, + AMS_DELTA_LATCH2_LCD_VBLEN); + ams_delta_bl_powermode = blank; + ams_delta_bl_send_intensity(current_intensity); + } + break; + } +} + +#ifdef CONFIG_PM +static int ams_delta_bl_suspend(struct platform_device *dev, pm_message_t state) +{ + ams_delta_bl_blank(FB_BLANK_POWERDOWN); + return 0; +} + +static int ams_delta_bl_resume(struct platform_device *dev) +{ + ams_delta_bl_blank(FB_BLANK_UNBLANK); + return 0; +} +#else +#define ams_delta_bl_suspend NULL +#define ams_delta_bl_resume NULL +#endif + + +static int ams_delta_bl_set_power(struct backlight_device *bd, int state) +{ + ams_delta_bl_blank(state); + return 0; +} + +static int ams_delta_bl_get_power(struct backlight_device *bd) +{ + return ams_delta_bl_powermode; +} + +static int ams_delta_bl_set_intensity(struct backlight_device *bd, + int intensity) +{ + if (intensity > AMS_DELTA_MAX_INTENSITY) + intensity = AMS_DELTA_MAX_INTENSITY; + ams_delta_bl_send_intensity(intensity); + current_intensity = intensity; + return 0; +} + +static int ams_delta_bl_get_intensity(struct backlight_device *bd) +{ + return current_intensity; +} + +static struct backlight_properties ams_delta_bl_data = { + .owner = THIS_MODULE, + .get_power = ams_delta_bl_get_power, + .set_power = ams_delta_bl_set_power, + .max_brightness = AMS_DELTA_MAX_INTENSITY, + .get_brightness = ams_delta_bl_get_intensity, + .set_brightness = ams_delta_bl_set_intensity, +}; + +static struct backlight_device *ams_delta_backlight_device; + +static int __init ams_delta_bl_probe(struct platform_device *pdev) +{ + ams_delta_backlight_device = backlight_device_register("ams-delta-bl", + NULL, &ams_delta_bl_data); + if (IS_ERR(ams_delta_backlight_device)) + return PTR_ERR(ams_delta_backlight_device); + + omap_writeb(1, OMAP16XX_PWL_CLK_ENABLE); + ams_delta_latch2_write(AMS_DELTA_LATCH2_LCD_VBLEN, + AMS_DELTA_LATCH2_LCD_VBLEN); + ams_delta_bl_set_intensity(NULL, AMS_DELTA_DEFAULT_INTENSITY); + + printk("Amstrad Delta backlight driver initialized.\n"); + return 0; +} + +static int ams_delta_bl_remove(struct platform_device *dev) +{ + backlight_device_unregister(ams_delta_backlight_device); + + ams_delta_bl_set_intensity(NULL, 0); + omap_writeb(0, OMAP16XX_PWL_CLK_ENABLE); + ams_delta_latch2_write(AMS_DELTA_LATCH2_LCD_VBLEN, 0); + + printk("Amstrad Delta backlight driver unloaded\n"); + return 0; +} + +static struct platform_driver ams_delta_bl_driver = { + .probe = ams_delta_bl_probe, + .remove = ams_delta_bl_remove, + .suspend = ams_delta_bl_suspend, + .resume = ams_delta_bl_resume, + .driver = { + .name = "ams-delta-bl", + }, +}; + +static int __init ams_delta_bl_init(void) +{ + return platform_driver_register(&ams_delta_bl_driver); +} + +static void __exit ams_delta_bl_exit(void) +{ + platform_driver_unregister(&ams_delta_bl_driver); +} + +module_init(ams_delta_bl_init); +module_exit(ams_delta_bl_exit); + +MODULE_AUTHOR("Jonathan McDowell <noodles@earth.li>"); +MODULE_DESCRIPTION("Amstrad Delta backlight driver"); +MODULE_LICENSE("GPLv2"); ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] Add LCD support for Amstrad Delta 2006-04-02 16:36 [PATCH 1/3] Add backlight support for Amstrad Delta Jonathan McDowell @ 2006-04-02 16:38 ` Jonathan McDowell 2006-04-02 16:41 ` [PATCH 3/3] Add RGB444 support to OMAP FB driver Jonathan McDowell 2006-04-28 10:26 ` [PATCH 1/3] Add backlight support for Amstrad Delta tony 1 sibling, 1 reply; 8+ messages in thread From: Jonathan McDowell @ 2006-04-02 16:38 UTC (permalink / raw) To: linux-omap-open-source; +Cc: e3-hacking Add support for the Amstrad Delta LCD, which is a 12 bit DSTN panel. This patch treats it as a 16 bit panel; in reality it's in 0444 mode and will ignore the top 4 bits, but the next patch adds support for that in the OMAP FB driver. Signed-Off-By: Jonathan McDowell <noodles@earth.li> diff -rupN -X linux-omap/Documentation/dontdiff linux-omap/arch/arm/mach-omap1/board-ams-delta.c linux-omap-lcd/arch/arm/mach-omap1/board-ams-delta.c --- linux-omap/arch/arm/mach-omap1/board-ams-delta.c 2006-04-02 16:05:20.366858000 +0100 +++ linux-omap-lcd/arch/arm/mach-omap1/board-ams-delta.c 2006-04-02 16:55:12.329102250 +0100 @@ -76,11 +76,16 @@ static struct map_desc ams_delta_io_desc } }; +static struct omap_lcd_config ams_delta_lcd_config __initdata = { + .ctrl_name = "internal", +}; + static struct omap_uart_config ams_delta_uart_config __initdata = { .enabled_uarts = 1, }; static struct omap_board_config_kernel ams_delta_config[] = { + { OMAP_TAG_LCD, &ams_delta_lcd_config }, { OMAP_TAG_UART, &ams_delta_uart_config }, }; @@ -89,8 +94,14 @@ static struct platform_device ams_delta_ .id = -1, }; +static struct platform_device ams_delta_lcd_device = { + .name = "lcd_ams_delta", + .id = "-1", +}; + static struct platform_device *ams_delta_devices[] __initdata = { &ams_delta_bl_device, + &ams_delta_lcd_device, }; static void __init ams_delta_init(void) diff -rupN -X linux-omap/Documentation/dontdiff linux-omap/arch/arm/mach-omap1/clock.c linux-omap-lcd/arch/arm/mach-omap1/clock.c --- linux-omap/arch/arm/mach-omap1/clock.c 2006-04-02 15:46:08.788044000 +0100 +++ linux-omap-lcd/arch/arm/mach-omap1/clock.c 2006-04-02 16:55:59.588055750 +0100 @@ -19,6 +19,7 @@ #include <linux/clk.h> #include <asm/io.h> +#include <asm/mach-types.h> #include <asm/arch/usb.h> #include <asm/arch/clock.h> @@ -766,6 +767,14 @@ int __init omap1_clk_init(void) omap_writew(omap_readw(OMAP730_PCC_UPLD_CTRL) & ~0x1, OMAP730_PCC_UPLD_CTRL); #endif +#ifdef CONFIG_MACH_AMS_DELTA + /* Amstrad Delta wants BCLK high when inactive */ + if (machine_is_ams_delta()) + omap_writel(omap_readl(ULPD_CLOCK_CTRL) | + (1 << SDW_MCLK_INV_BIT), + ULPD_CLOCK_CTRL); +#endif + /* Turn off DSP and ARM_TIMXO. Make sure ARM_INTHCK is not divided */ omap_writew(omap_readw(ARM_CKCTL) & 0x0fff, ARM_CKCTL); diff -rupN -X linux-omap/Documentation/dontdiff linux-omap/arch/arm/mach-omap1/clock.h linux-omap-lcd/arch/arm/mach-omap1/clock.h --- linux-omap/arch/arm/mach-omap1/clock.h 2006-04-02 15:46:51.617298000 +0100 +++ linux-omap-lcd/arch/arm/mach-omap1/clock.h 2006-04-02 16:56:13.808944500 +0100 @@ -89,6 +89,7 @@ struct arm_idlect1_clk { #define EN_DSPTIMCK 5 /* Various register defines for clock controls scattered around OMAP chip */ +#define SDW_MCLK_INV_BIT 2 /* In ULPD_CLKC_CTRL */ #define USB_MCLK_EN_BIT 4 /* In ULPD_CLKC_CTRL */ #define USB_HOST_HHC_UHOST_EN 9 /* In MOD_CONF_CTRL_0 */ #define SWD_ULPD_PLL_CLK_REQ 1 /* In SWD_CLK_DIV_CTRL_SEL */ diff -rupN -X linux-omap/Documentation/dontdiff linux-omap/drivers/video/omap/lcd_ams_delta.c linux-omap-lcd/drivers/video/omap/lcd_ams_delta.c --- linux-omap/drivers/video/omap/lcd_ams_delta.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-omap-lcd/drivers/video/omap/lcd_ams_delta.c 2006-04-02 16:53:09.881449750 +0100 @@ -0,0 +1,148 @@ +/* + * File: drivers/video/omap/lcd_ams_delta.c + * + * Based on drivers/video/omap/lcd_inn1510.c + * + * LCD panel support for the Amstrad E3 (Delta) videophone. + * + * Copyright (C) 2006 Jonathan McDowell <noodles@earth.li> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * 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, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include <linux/module.h> +#include <linux/platform_device.h> + +#include <asm/delay.h> +#include <asm/io.h> + +#include <asm/arch/board-ams-delta.h> +#include <asm/arch/omapfb.h> + +/* #define OMAPFB_DBG 1 */ + +#include "debug.h" + +static int ams_delta_panel_init(struct omapfb_device *fbdev) +{ + DBGENTER(1); + DBGLEAVE(1); + return 0; +} + +static void ams_delta_panel_cleanup(void) +{ + DBGENTER(1); + DBGLEAVE(1); +} + +static int ams_delta_panel_enable(void) +{ + DBGENTER(1); + + ams_delta_latch2_write(AMS_DELTA_LATCH2_LCD_NDISP, + AMS_DELTA_LATCH2_LCD_NDISP); + + DBGLEAVE(1); + return 0; +} + +static void ams_delta_panel_disable(void) +{ + DBGENTER(1); + + ams_delta_latch2_write(AMS_DELTA_LATCH2_LCD_NDISP, 0); + + DBGLEAVE(1); +} + +static unsigned long ams_delta_panel_get_caps(void) +{ + return 0; +} + +struct lcd_panel ams_delta_panel = { + .name = "ams-delta", + .config = 0, + + .bpp = 16, + .data_lines = 16, + .x_res = 480, + .y_res = 320, + .pixel_clock = 4687, + .hsw = 3, + .hfp = 1, + .hbp = 1, + .vsw = 1, + .vfp = 0, + .vbp = 0, + .pcd = 0, + .acb = 37, + + .init = ams_delta_panel_init, + .cleanup = ams_delta_panel_cleanup, + .enable = ams_delta_panel_enable, + .disable = ams_delta_panel_disable, + .get_caps = ams_delta_panel_get_caps, +}; + +static int ams_delta_panel_probe(struct platform_device *pdev) +{ + DBGENTER(1); + omapfb_register_panel(&ams_delta_panel); + return 0; +} + +static int ams_delta_panel_remove(struct platform_device *pdev) +{ + DBGENTER(1); + return 0; +} + +static int ams_delta_panel_suspend(struct platform_device *pdev, pm_message_t mesg) +{ + DBGENTER(1); + return 0; +} + +static int ams_delta_panel_resume(struct platform_device *pdev) +{ + DBGENTER(1); + return 0; +} + +struct platform_driver ams_delta_panel_driver = { + .probe = ams_delta_panel_probe, + .remove = ams_delta_panel_remove, + .suspend = ams_delta_panel_suspend, + .resume = ams_delta_panel_resume, + .driver = { + .name = "lcd_ams_delta", + .owner = THIS_MODULE, + }, +}; + +static int ams_delta_panel_drv_init(void) +{ + return platform_driver_register(&ams_delta_panel_driver); +} + +static void ams_delta_panel_drv_cleanup(void) +{ + platform_driver_unregister(&ams_delta_panel_driver); +} + +module_init(ams_delta_panel_drv_init); +module_exit(ams_delta_panel_drv_cleanup); diff -rupN -X linux-omap/Documentation/dontdiff linux-omap/drivers/video/omap/lcdc.c linux-omap-lcd/drivers/video/omap/lcdc.c --- linux-omap/drivers/video/omap/lcdc.c 2006-04-02 15:53:36.433153500 +0100 +++ linux-omap-lcd/drivers/video/omap/lcdc.c 2006-04-02 16:56:46.278973750 +0100 @@ -836,6 +836,8 @@ static int omap_lcdc_init(struct omapfb_ rate = clk_get_rate(tc_ck); clk_put(tc_ck); + if (machine_is_ams_delta()) + rate /= 4; if (machine_is_omap_h3()) rate /= 3; r = clk_set_rate(omap_lcdc.lcd_ck, rate); diff -rupN -X linux-omap/Documentation/dontdiff linux-omap/drivers/video/omap/Makefile linux-omap-lcd/drivers/video/omap/Makefile --- linux-omap/drivers/video/omap/Makefile 2006-04-02 15:53:29.504720500 +0100 +++ linux-omap-lcd/drivers/video/omap/Makefile 2006-04-02 17:03:10.811820750 +0100 @@ -14,6 +14,7 @@ objs-$(CONFIG_ARCH_OMAP2)$(CONFIG_FB_OMA objs-y$(CONFIG_FB_OMAP_LCDC_HWA742) += hwa742.o +objs-y$(CONFIG_MACH_AMS_DELTA) += lcd_ams_delta.o objs-y$(CONFIG_MACH_OMAP_H4) += lcd_h4.o objs-y$(CONFIG_MACH_OMAP_H3) += lcd_h3.o objs-y$(CONFIG_MACH_OMAP_H2) += lcd_h2.o ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] Add RGB444 support to OMAP FB driver. 2006-04-02 16:38 ` [PATCH 2/3] Add LCD " Jonathan McDowell @ 2006-04-02 16:41 ` Jonathan McDowell 0 siblings, 0 replies; 8+ messages in thread From: Jonathan McDowell @ 2006-04-02 16:41 UTC (permalink / raw) To: linux-omap-open-source; +Cc: e3-hacking This patch adds support for an RGB444 mode to the OMAP FB driver; it's used by the Amstrad Delta which has a 12 bit DSTN screen setup in 444 mode. Mark Underwood did the original work for this patch: http://www.earth.li/pipermail/e3-hacking/2006-March/000376.html I have simply updated to the latest git tree. Signed-Off-By: Jonathan McDowell <noodles@earth.li> diff -rupN -X linux-omap/Documentation/dontdiff linux-omap-lcd/drivers/video/omap/lcd_ams_delta.c linux-omap-lcd-444/drivers/video/omap/lcd_ams_delta.c --- linux-omap-lcd/drivers/video/omap/lcd_ams_delta.c 2006-04-02 16:53:09.881449750 +0100 +++ linux-omap-lcd-444/drivers/video/omap/lcd_ams_delta.c 2006-04-02 17:21:04.654931750 +0100 @@ -77,7 +77,7 @@ struct lcd_panel ams_delta_panel = { .name = "ams-delta", .config = 0, - .bpp = 16, + .bpp = 12, .data_lines = 16, .x_res = 480, .y_res = 320, diff -rupN -X linux-omap/Documentation/dontdiff linux-omap-lcd/drivers/video/omap/lcdc.c linux-omap-lcd-444/drivers/video/omap/lcdc.c --- linux-omap-lcd/drivers/video/omap/lcdc.c 2006-04-02 16:56:46.278973750 +0100 +++ linux-omap-lcd-444/drivers/video/omap/lcdc.c 2006-04-02 17:21:47.105584750 +0100 @@ -353,6 +353,7 @@ static int omap_lcdc_setup_plane(int pla omap_lcdc.palette_size = 512; break; case OMAPFB_COLOR_RGB565: + case OMAPFB_COLOR_RGB444: omap_lcdc.bpp = 16; omap_lcdc.palette_code = 0x4000; omap_lcdc.palette_size = 32; @@ -720,7 +721,11 @@ static int alloc_fbmem(int req_size) int frame_size; struct lcd_panel *panel = omap_lcdc.fbdev->panel; - frame_size = PAGE_ALIGN(panel->x_res * panel->bpp / 8 * panel->y_res); + if (panel->bpp == 12) + frame_size = PAGE_ALIGN(panel->x_res * 16 / 8 * panel->y_res); + else + frame_size = PAGE_ALIGN(panel->x_res * panel->bpp / 8 * + panel->y_res); if (req_size > frame_size) frame_size = req_size; omap_lcdc.vram_size = frame_size; diff -rupN -X linux-omap/Documentation/dontdiff linux-omap-lcd/drivers/video/omap/omapfb_main.c linux-omap-lcd-444/drivers/video/omap/omapfb_main.c --- linux-omap-lcd/drivers/video/omap/omapfb_main.c 2006-04-02 15:52:24.524659500 +0100 +++ linux-omap-lcd-444/drivers/video/omap/omapfb_main.c 2006-04-02 17:25:23.947136500 +0100 @@ -239,6 +239,7 @@ static int _setcolreg(struct fb_info *in transp, update_hw_pal); /* Fallthrough */ case OMAPFB_COLOR_RGB565: + case OMAPFB_COLOR_RGB444: if (r != 0) break; @@ -249,8 +250,14 @@ static int _setcolreg(struct fb_info *in if (regno < 16) { u16 pal; - pal = ((red >> 11) << 11) | ((green >> 10) << 5) | - (blue >> 11); + if (fbdev->color_mode == OMAPFB_COLOR_RGB444) + pal = ((red >> 12) << 8) | + ((green >> 12) << 4) | + (blue >> 12); + else + pal = ((red >> 11) << 11) | + ((green >> 10) << 5) | + (blue >> 11); ((u32 *)(info->pseudo_palette))[regno] = pal; } break; @@ -402,12 +409,19 @@ static int set_fb_var(struct omapfb_devi unsigned long line_size; struct lcd_panel *panel = fbdev->panel; - bpp = var->bits_per_pixel = panel->bpp; + if (panel->bpp == 12) + /* 12-bpp mode stores colours in 16 bits and ignores top 4 */ + bpp = var->bits_per_pixel = 16; + else + bpp = var->bits_per_pixel = panel->bpp; - switch (bpp) { + switch (panel->bpp) { case 16: fbdev->color_mode = OMAPFB_COLOR_RGB565; break; + case 12: + fbdev->color_mode = OMAPFB_COLOR_RGB444; + break; case 8: fbdev->color_mode = OMAPFB_COLOR_CLUT_8BPP; break; @@ -453,9 +467,21 @@ static int set_fb_var(struct omapfb_devi var->yoffset = var->yres_virtual - var->yres; line_size = var->xres * bpp / 8; - var->red.offset = 11; var->red.length = 5; var->red.msb_right = 0; - var->green.offset= 5; var->green.length = 6; var->green.msb_right = 0; - var->blue.offset = 0; var->blue.length = 5; var->blue.msb_right = 0; + if (fbdev->color_mode == OMAPFB_COLOR_RGB444) { + var->red.offset = 8; var->red.length = 4; + var->red.msb_right = 0; + var->green.offset= 4; var->green.length = 4; + var->green.msb_right = 0; + var->blue.offset = 0; var->blue.length = 4; + var->blue.msb_right = 0; + } else { + var->red.offset = 11; var->red.length = 5; + var->red.msb_right = 0; + var->green.offset= 5; var->green.length = 6; + var->green.msb_right = 0; + var->blue.offset = 0; var->blue.length = 5; + var->blue.msb_right = 0; + } var->height = -1; var->width = -1; diff -rupN -X linux-omap/Documentation/dontdiff linux-omap-lcd/include/asm-arm/arch/omapfb.h linux-omap-lcd-444/include/asm-arm/arch/omapfb.h --- linux-omap-lcd/include/asm-arm/arch/omapfb.h 2006-04-02 15:51:02.303521000 +0100 +++ linux-omap-lcd-444/include/asm-arm/arch/omapfb.h 2006-04-02 17:20:38.957325750 +0100 @@ -64,6 +64,7 @@ enum omapfb_color_format { OMAPFB_COLOR_CLUT_4BPP, OMAPFB_COLOR_CLUT_2BPP, OMAPFB_COLOR_CLUT_1BPP, + OMAPFB_COLOR_RGB444, }; struct omapfb_update_window { diff -rupN -X linux-omap/Documentation/dontdiff linux-omap-lcd/include/asm-arm/arch-omap/omapfb.h linux-omap-lcd-444/include/asm-arm/arch-omap/omapfb.h --- linux-omap-lcd/include/asm-arm/arch-omap/omapfb.h 2006-04-02 15:51:02.303521000 +0100 +++ linux-omap-lcd-444/include/asm-arm/arch-omap/omapfb.h 2006-04-02 17:20:38.957325750 +0100 @@ -64,6 +64,7 @@ enum omapfb_color_format { OMAPFB_COLOR_CLUT_4BPP, OMAPFB_COLOR_CLUT_2BPP, OMAPFB_COLOR_CLUT_1BPP, + OMAPFB_COLOR_RGB444, }; struct omapfb_update_window { ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] Add backlight support for Amstrad Delta 2006-04-02 16:36 [PATCH 1/3] Add backlight support for Amstrad Delta Jonathan McDowell 2006-04-02 16:38 ` [PATCH 2/3] Add LCD " Jonathan McDowell @ 2006-04-28 10:26 ` tony 2006-04-29 16:05 ` Jonathan McDowell 1 sibling, 1 reply; 8+ messages in thread From: tony @ 2006-04-28 10:26 UTC (permalink / raw) To: Jonathan McDowell; +Cc: linux-omap-open-source * Jonathan McDowell <noodles@earth.li> [060402 09:38]: > This patch adds support for the Amstrad Delta LCD backlight. It's the > first patch in a series of 3 enabling full LCD support for the Delta and > is the least intrusive, allowing control of the backlight through the > existing backlight class infrastructure. Looks good. Can you please separate arch/arm/mach-omap1/board-ams-delta.c changes and other core omap changes into separate patch in this series? See new http://www.muru.com/linux/omap/README_OMAP_PATCHES Thanks, Tony ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] Add backlight support for Amstrad Delta 2006-04-28 10:26 ` [PATCH 1/3] Add backlight support for Amstrad Delta tony @ 2006-04-29 16:05 ` Jonathan McDowell 2006-05-15 9:38 ` Tony Lindgren 0 siblings, 1 reply; 8+ messages in thread From: Jonathan McDowell @ 2006-04-29 16:05 UTC (permalink / raw) To: linux-omap-open-source On Fri, Apr 28, 2006 at 03:26:38AM -0700, tony@atomide.com wrote: > * Jonathan McDowell <noodles@earth.li> [060402 09:38]: > > This patch adds support for the Amstrad Delta LCD backlight. It's > > the first patch in a series of 3 enabling full LCD support for the > > Delta and is the least intrusive, allowing control of the backlight > > through the existing backlight class infrastructure. > Looks good. Can you please separate > arch/arm/mach-omap1/board-ams-delta.c changes and other core omap > changes into separate patch in this series? Sure. So you'd want it as the following patches: * Add the LCD support to drivers/video/omap/ * Add the support to arch/arm/mach-omap1/board-ams-delta.c for the above. * Add the backlight driver to drivers/video/backlight/ * Add the support to arch/arm/mach-omap1/board-ams-delta.c for the above. ? Or possibly only the one patch against arch/arm/mach-omap1/board-ams-delta.c pulling in both the LCD and backlight support? Or should I submit the backlight support to mainline given it doesn't touch OMAP specific code? Also are you planning to add Mark Underwood's 444 patch, as having that there before I rebase my patches would be very useful. J. -- /-\ | noodles is completely different |@/ Debian GNU/Linux Developer | between japan and the west \- | ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] Add backlight support for Amstrad Delta 2006-04-29 16:05 ` Jonathan McDowell @ 2006-05-15 9:38 ` Tony Lindgren 2006-05-15 10:03 ` 444 framebuffer patch? Jonathan McDowell 2006-05-15 10:04 ` [PATCH 1/3] Add backlight support for Amstrad Delta Tony Lindgren 0 siblings, 2 replies; 8+ messages in thread From: Tony Lindgren @ 2006-05-15 9:38 UTC (permalink / raw) To: Jonathan McDowell; +Cc: linux-omap-open-source Hi, Sorry for long delay replaying on this one too. * Jonathan McDowell <noodles@earth.li> [060429 09:07]: > On Fri, Apr 28, 2006 at 03:26:38AM -0700, tony@atomide.com wrote: > > * Jonathan McDowell <noodles@earth.li> [060402 09:38]: > > > This patch adds support for the Amstrad Delta LCD backlight. It's > > > the first patch in a series of 3 enabling full LCD support for the > > > Delta and is the least intrusive, allowing control of the backlight > > > through the existing backlight class infrastructure. > > Looks good. Can you please separate > > arch/arm/mach-omap1/board-ams-delta.c changes and other core omap > > changes into separate patch in this series? > > Sure. So you'd want it as the following patches: > > * Add the LCD support to drivers/video/omap/ > * Add the support to arch/arm/mach-omap1/board-ams-delta.c for the > above. > * Add the backlight driver to drivers/video/backlight/ > * Add the support to arch/arm/mach-omap1/board-ams-delta.c for the > above. > > ? > > Or possibly only the one patch against > arch/arm/mach-omap1/board-ams-delta.c pulling in both the LCD and > backlight support? Or should I submit the backlight support to mainline > given it doesn't touch OMAP specific code? Yes, please send backlight patches to mainline directly. Then one patch for drivers/video/omap, one for board-ams-delta, and one for your defconfig. > Also are you planning to add Mark Underwood's 444 patch, as having that > there before I rebase my patches would be very useful. Sorry, do you have a URL for that? Or maybe it's been already applied? Regards, Tony ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: 444 framebuffer patch? 2006-05-15 9:38 ` Tony Lindgren @ 2006-05-15 10:03 ` Jonathan McDowell 2006-05-15 10:04 ` [PATCH 1/3] Add backlight support for Amstrad Delta Tony Lindgren 1 sibling, 0 replies; 8+ messages in thread From: Jonathan McDowell @ 2006-05-15 10:03 UTC (permalink / raw) To: Tony Lindgren; +Cc: linux-omap-open-source On Mon, May 15, 2006 at 02:38:14AM -0700, Tony Lindgren wrote: > * Jonathan McDowell <noodles@earth.li> [060429 09:07]: > Yes, please send backlight patches to mainline directly. Then one patch > for drivers/video/omap, one for board-ams-delta, and one for your > defconfig. Ok, will do. > > Also are you planning to add Mark Underwood's 444 patch, as having > > that there before I rebase my patches would be very useful. > Sorry, do you have a URL for that? Or maybe it's been already applied? http://linux.omap.com/pipermail/linux-omap-open-source/2006-April/006888.html It hasn't been applied yet. J. -- [ Been through Hell?? and what did you bring me?? ] [ http://www.blackcatnetworks.co.uk/ - IPv6 enabled ADSL/dialup/colo ] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] Add backlight support for Amstrad Delta 2006-05-15 9:38 ` Tony Lindgren 2006-05-15 10:03 ` 444 framebuffer patch? Jonathan McDowell @ 2006-05-15 10:04 ` Tony Lindgren 1 sibling, 0 replies; 8+ messages in thread From: Tony Lindgren @ 2006-05-15 10:04 UTC (permalink / raw) To: Jonathan McDowell; +Cc: linux-omap-open-source * Tony Lindgren <tony@atomide.com> [060515 02:38]: > * Jonathan McDowell <noodles@earth.li> [060429 09:07]: > > > Also are you planning to add Mark Underwood's 444 patch, as having that > > there before I rebase my patches would be very useful. > > Sorry, do you have a URL for that? Or maybe it's been already applied? OK, found the 444 patch. Let's see what Imre says about it. Tony ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-05-15 10:04 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-04-02 16:36 [PATCH 1/3] Add backlight support for Amstrad Delta Jonathan McDowell 2006-04-02 16:38 ` [PATCH 2/3] Add LCD " Jonathan McDowell 2006-04-02 16:41 ` [PATCH 3/3] Add RGB444 support to OMAP FB driver Jonathan McDowell 2006-04-28 10:26 ` [PATCH 1/3] Add backlight support for Amstrad Delta tony 2006-04-29 16:05 ` Jonathan McDowell 2006-05-15 9:38 ` Tony Lindgren 2006-05-15 10:03 ` 444 framebuffer patch? Jonathan McDowell 2006-05-15 10:04 ` [PATCH 1/3] Add backlight support for Amstrad Delta Tony Lindgren
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox