23 #include <linux/module.h>
24 #include <linux/kernel.h>
26 #include <linux/slab.h>
32 #include <mach/hardware.h>
40 #define CMAP_MAX_SIZE 16
47 static unsigned int lcd_ac_prescale = 13;
58 if (regno >= (1 << info->
var.bits_per_pixel))
62 level = (red * 77 + green * 151 + blue * 28) >> 20;
71 if (machine_is_edb7211()) {
75 shift = 4 * (regno & 7);
83 pal = (pal & ~mask) | level;
98 var->
red.msb_right = 0;
114 clps7111fb_set_par(
struct fb_info *info)
116 unsigned int lcdcon,
syscon, pixclock;
118 switch (info->
var.bits_per_pixel) {
130 info->
fix.line_length = info->
var.xres_virtual * info->
var.bits_per_pixel / 8;
132 lcdcon = (info->
var.xres_virtual * info->
var.yres_virtual * info->
var.bits_per_pixel) / 128 - 1;
133 lcdcon |= ((info->
var.xres_virtual / 16) - 1) << 13;
134 lcdcon |= lcd_ac_prescale << 25;
145 pixclock = 9 * info->
var.pixclock / 244140 - 1;
146 lcdcon |= pixclock << 19;
148 if (info->
var.bits_per_pixel == 4)
150 if (info->
var.bits_per_pixel >= 2)
163 static int clps7111fb_blank(
int blank,
struct fb_info *info)
166 if (machine_is_edb7211()) {
184 if (machine_is_edb7211()) {
206 static struct fb_ops clps7111fb_ops = {
208 .fb_check_var = clps7111fb_check_var,
209 .fb_set_par = clps7111fb_set_par,
210 .fb_setcolreg = clps7111fb_setcolreg,
211 .fb_blank = clps7111fb_blank,
217 static int backlight_proc_show(
struct seq_file *
m,
void *
v)
219 if (machine_is_edb7211()) {
235 unsigned char char_value;
245 value = char_value -
'0';
247 if (machine_is_edb7211()) {
248 unsigned char port_d;
266 .open = backlight_proc_open,
270 .write = backlight_proc_write,
273 static void __init clps711x_guess_lcd_params(
struct fb_info *info)
275 unsigned int lcdcon, syscon,
size;
279 info->
var.xres_virtual = 640;
280 info->
var.yres_virtual = 240;
281 info->
var.bits_per_pixel = 4;
283 info->
var.height = -1;
284 info->
var.width = -1;
285 info->
var.pixclock = 93006;
300 info->
var.bits_per_pixel = 4;
304 info->
var.bits_per_pixel = 2;
308 info->
var.bits_per_pixel = 1;
315 info->
var.xres_virtual = (((lcdcon >> 13) & 0x3f) + 1) * 16;
316 info->
var.yres_virtual = (((lcdcon & 0x1fff) + 1) * 128) /
317 (info->
var.xres_virtual *
318 info->
var.bits_per_pixel);
323 info->
var.pixclock = (((lcdcon >> 19) & 0x3f) + 1) * 244140 / 9;
328 lcd_ac_prescale = (lcdcon >> 25) & 0x1f;
331 info->
var.xres = info->
var.xres_virtual;
332 info->
var.yres = info->
var.yres_virtual;
333 info->
var.grayscale = info->
var.bits_per_pixel > 1;
335 size = info->
var.xres * info->
var.yres * info->
var.bits_per_pixel / 8;
347 if ((syscon & SYSCON1_LCDEN) == 0) {
352 memset(virt_base, 0, size);
356 info->
fix.smem_start = phys_base;
374 cfb->
fbops = &clps7111fb_ops;
377 clps711x_guess_lcd_params(cfb);
381 if (!proc_create(
"backlight", 0444,
NULL, &backlight_proc_fops)) {
382 printk(
"Couldn't create the /proc entry for the backlight.\n");
389 if (machine_is_p720t()) {
394 if (machine_is_edb7211()) {
413 static void __exit clps711xfb_exit(
void)
421 if (machine_is_p720t()) {