diff options
author | Tom 'spot' Callaway <tcallawa@redhat.com> | 2005-04-24 23:39:15 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-04-24 23:39:15 -0400 |
commit | 6ee7c15294985e4e722959fd4482df60cefd2cc8 (patch) | |
tree | 0fb6f4154aa91bf7ad85d47894bdfe37d6e31552 /drivers/video/tcx.c | |
parent | a271c241a6036d4d583d0f47a02ba5f18b8b92b5 (diff) |
[SPARC]: TCX Framebuffer fixes
Using the same logic as the other framebuffer fixes committed in 2.6.11,
this is a set of fixes to make TCX functional on the console again. Adds
the tcx_pan_display function, sets the
all->info.var.{red,green,blue}.length values to 8, and runs fb_set_cmap.
Also looks for the correct SUNW,tcx prom value.
This patch just slipped through the cracks.
Originally by: Georg Chini <georg.chini@triaton-webhosting.com>
Signed-off-by: Tom 'spot' Callaway <tcallawa@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/video/tcx.c')
-rw-r--r-- | drivers/video/tcx.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/video/tcx.c b/drivers/video/tcx.c index e2fa9e1ddc3b..1986a8b3833c 100644 --- a/drivers/video/tcx.c +++ b/drivers/video/tcx.c | |||
@@ -36,6 +36,7 @@ static int tcx_blank(int, struct fb_info *); | |||
36 | static int tcx_mmap(struct fb_info *, struct file *, struct vm_area_struct *); | 36 | static int tcx_mmap(struct fb_info *, struct file *, struct vm_area_struct *); |
37 | static int tcx_ioctl(struct inode *, struct file *, unsigned int, | 37 | static int tcx_ioctl(struct inode *, struct file *, unsigned int, |
38 | unsigned long, struct fb_info *); | 38 | unsigned long, struct fb_info *); |
39 | static int tcx_pan_display(struct fb_var_screeninfo *, struct fb_info *); | ||
39 | 40 | ||
40 | /* | 41 | /* |
41 | * Frame buffer operations | 42 | * Frame buffer operations |
@@ -45,6 +46,7 @@ static struct fb_ops tcx_ops = { | |||
45 | .owner = THIS_MODULE, | 46 | .owner = THIS_MODULE, |
46 | .fb_setcolreg = tcx_setcolreg, | 47 | .fb_setcolreg = tcx_setcolreg, |
47 | .fb_blank = tcx_blank, | 48 | .fb_blank = tcx_blank, |
49 | .fb_pan_display = tcx_pan_display, | ||
48 | .fb_fillrect = cfb_fillrect, | 50 | .fb_fillrect = cfb_fillrect, |
49 | .fb_copyarea = cfb_copyarea, | 51 | .fb_copyarea = cfb_copyarea, |
50 | .fb_imageblit = cfb_imageblit, | 52 | .fb_imageblit = cfb_imageblit, |
@@ -153,6 +155,12 @@ static void tcx_reset (struct fb_info *info) | |||
153 | spin_unlock_irqrestore(&par->lock, flags); | 155 | spin_unlock_irqrestore(&par->lock, flags); |
154 | } | 156 | } |
155 | 157 | ||
158 | static int tcx_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) | ||
159 | { | ||
160 | tcx_reset(info); | ||
161 | return 0; | ||
162 | } | ||
163 | |||
156 | /** | 164 | /** |
157 | * tcx_setcolreg - Optional function. Sets a color register. | 165 | * tcx_setcolreg - Optional function. Sets a color register. |
158 | * @regno: boolean, 0 copy local, 1 get_user() function | 166 | * @regno: boolean, 0 copy local, 1 get_user() function |
@@ -366,6 +374,9 @@ static void tcx_init_one(struct sbus_dev *sdev) | |||
366 | all->par.lowdepth = prom_getbool(sdev->prom_node, "tcx-8-bit"); | 374 | all->par.lowdepth = prom_getbool(sdev->prom_node, "tcx-8-bit"); |
367 | 375 | ||
368 | sbusfb_fill_var(&all->info.var, sdev->prom_node, 8); | 376 | sbusfb_fill_var(&all->info.var, sdev->prom_node, 8); |
377 | all->info.var.red.length = 8; | ||
378 | all->info.var.green.length = 8; | ||
379 | all->info.var.blue.length = 8; | ||
369 | 380 | ||
370 | linebytes = prom_getintdefault(sdev->prom_node, "linebytes", | 381 | linebytes = prom_getintdefault(sdev->prom_node, "linebytes", |
371 | all->info.var.xres); | 382 | all->info.var.xres); |
@@ -439,6 +450,7 @@ static void tcx_init_one(struct sbus_dev *sdev) | |||
439 | return; | 450 | return; |
440 | } | 451 | } |
441 | 452 | ||
453 | fb_set_cmap(&all->info.cmap, &all->info); | ||
442 | tcx_init_fix(&all->info, linebytes); | 454 | tcx_init_fix(&all->info, linebytes); |
443 | 455 | ||
444 | if (register_framebuffer(&all->info) < 0) { | 456 | if (register_framebuffer(&all->info) < 0) { |
@@ -466,7 +478,7 @@ int __init tcx_init(void) | |||
466 | return -ENODEV; | 478 | return -ENODEV; |
467 | 479 | ||
468 | for_all_sbusdev(sdev, sbus) { | 480 | for_all_sbusdev(sdev, sbus) { |
469 | if (!strcmp(sdev->prom_name, "tcx")) | 481 | if (!strcmp(sdev->prom_name, "SUNW,tcx")) |
470 | tcx_init_one(sdev); | 482 | tcx_init_one(sdev); |
471 | } | 483 | } |
472 | 484 | ||