mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-28 01:50:18 +02:00
[xburst] fb: Fix pseudo palette for non 32bit color depth.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@21614 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
5ddb45026d
commit
d30cb85c0d
@ -1,4 +1,4 @@
|
||||
From 4b85f4f65855e49dec6271cf35efdcee26534210 Mon Sep 17 00:00:00 2001
|
||||
From bde0c6e017734b3164f5e3517d8e9373433b0cee Mon Sep 17 00:00:00 2001
|
||||
From: Lars-Peter Clausen <lars@metafoo.de>
|
||||
Date: Sat, 24 Apr 2010 12:13:58 +0200
|
||||
Subject: [PATCH] Add jz4740 framebuffer driver
|
||||
@ -6,9 +6,9 @@ Subject: [PATCH] Add jz4740 framebuffer driver
|
||||
---
|
||||
drivers/video/Kconfig | 9 +
|
||||
drivers/video/Makefile | 1 +
|
||||
drivers/video/jz4740_fb.c | 810 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
drivers/video/jz4740_fb.c | 822 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
include/linux/jz4740_fb.h | 58 ++++
|
||||
4 files changed, 878 insertions(+), 0 deletions(-)
|
||||
4 files changed, 890 insertions(+), 0 deletions(-)
|
||||
create mode 100644 drivers/video/jz4740_fb.c
|
||||
create mode 100644 include/linux/jz4740_fb.h
|
||||
|
||||
@ -46,13 +46,13 @@ index ddc2af2..f56a9ca 100644
|
||||
obj-$(CONFIG_FB_UVESA) += uvesafb.o
|
||||
diff --git a/drivers/video/jz4740_fb.c b/drivers/video/jz4740_fb.c
|
||||
new file mode 100644
|
||||
index 0000000..53f3adb
|
||||
index 0000000..8bb0cb4
|
||||
--- /dev/null
|
||||
+++ b/drivers/video/jz4740_fb.c
|
||||
@@ -0,0 +1,810 @@
|
||||
@@ -0,0 +1,822 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de>
|
||||
+ * JZ4720/JZ4740 SoC LCD framebuffer driver
|
||||
+ * JZ4740 SoC LCD framebuffer driver
|
||||
+ *
|
||||
+ * 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
|
||||
@ -185,17 +185,17 @@ index 0000000..53f3adb
|
||||
+ unsigned is_enabled:1;
|
||||
+ struct mutex lock;
|
||||
+
|
||||
+ uint32_t pseudo_palette[256];
|
||||
+ uint32_t pseudo_palette[16];
|
||||
+};
|
||||
+
|
||||
+static struct fb_fix_screeninfo jzfb_fix __devinitdata = {
|
||||
+ .id = "JZ4740 FB",
|
||||
+ .type = FB_TYPE_PACKED_PIXELS,
|
||||
+ .visual = FB_VISUAL_TRUECOLOR,
|
||||
+ .xpanstep = 0,
|
||||
+ .ypanstep = 0,
|
||||
+ .ywrapstep = 0,
|
||||
+ .accel = FB_ACCEL_NONE,
|
||||
+ .id = "JZ4740 FB",
|
||||
+ .type = FB_TYPE_PACKED_PIXELS,
|
||||
+ .visual = FB_VISUAL_TRUECOLOR,
|
||||
+ .xpanstep = 0,
|
||||
+ .ypanstep = 0,
|
||||
+ .ywrapstep = 0,
|
||||
+ .accel = FB_ACCEL_NONE,
|
||||
+};
|
||||
+
|
||||
+const static struct jz_gpio_bulk_request jz_lcd_ctrl_pins[] = {
|
||||
@ -258,7 +258,7 @@ index 0000000..53f3adb
|
||||
+ num = 16;
|
||||
+ break;
|
||||
+ case JZ_LCD_TYPE_GENERIC_18_BIT:
|
||||
+ num = 19;
|
||||
+ num = 18;
|
||||
+ break;
|
||||
+ case JZ_LCD_TYPE_8BIT_SERIAL:
|
||||
+ num = 8;
|
||||
@ -273,10 +273,24 @@ index 0000000..53f3adb
|
||||
+static int jzfb_setcolreg(unsigned regno, unsigned red, unsigned green,
|
||||
+ unsigned blue, unsigned transp, struct fb_info *fb)
|
||||
+{
|
||||
+ if (regno >= fb->cmap.len)
|
||||
+ uint32_t color;
|
||||
+
|
||||
+ if (regno >= 16)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ ((uint32_t *)fb->pseudo_palette)[regno] = red << 16 | green << 8 | blue;
|
||||
+#define CNVT_TOHW(val,width) ((((val)<<(width))+0x7FFF-(val))>>16)
|
||||
+ red = CNVT_TOHW(red, fb->var.red.length);
|
||||
+ green = CNVT_TOHW(green, fb->var.green.length);
|
||||
+ blue = CNVT_TOHW(blue, fb->var.blue.length);
|
||||
+ transp = CNVT_TOHW(transp, fb->var.transp.length);
|
||||
+#undef CNVT_TOHW
|
||||
+
|
||||
+ color = (red << fb->var.red.offset) |
|
||||
+ (green << fb->var.green.offset) |
|
||||
+ (blue << fb->var.blue.offset) |
|
||||
+ (transp << fb->var.transp.offset);
|
||||
+
|
||||
+ ((uint32_t*)(fb->pseudo_palette))[regno] = color;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
@ -336,7 +350,7 @@ index 0000000..53f3adb
|
||||
+ case 16:
|
||||
+ var->red.offset = 11;
|
||||
+ var->red.length = 5;
|
||||
+ var->green.offset = 6;
|
||||
+ var->green.offset = 5;
|
||||
+ var->green.length = 6;
|
||||
+ var->blue.offset = 0;
|
||||
+ var->blue.length = 5;
|
||||
@ -836,7 +850,6 @@ index 0000000..53f3adb
|
||||
+static struct platform_driver jzfb_driver = {
|
||||
+ .probe = jzfb_probe,
|
||||
+ .remove = __devexit_p(jzfb_remove),
|
||||
+
|
||||
+ .driver = {
|
||||
+ .name = "jz4740-fb",
|
||||
+ .pm = JZFB_PM_OPS,
|
||||
@ -859,7 +872,6 @@ index 0000000..53f3adb
|
||||
+MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
|
||||
+MODULE_DESCRIPTION("JZ4720/JZ4740 SoC LCD framebuffer driver");
|
||||
+MODULE_ALIAS("platform:jz4740-fb");
|
||||
+MODULE_ALIAS("platform:jz4720-fb");
|
||||
diff --git a/include/linux/jz4740_fb.h b/include/linux/jz4740_fb.h
|
||||
new file mode 100644
|
||||
index 0000000..ab4c963
|
||||
|
Loading…
Reference in New Issue
Block a user