6 #include <linux/module.h>
7 #include <linux/kernel.h>
83 #define RAMDAC_VID_WH 0x00000070UL
84 #define RAMDAC_VID_CFG 0x00000074UL
85 #define RAMDAC_VID_32FB_0 0x00000078UL
86 #define RAMDAC_VID_32FB_1 0x0000007cUL
87 #define RAMDAC_VID_8FB_0 0x00000080UL
88 #define RAMDAC_VID_8FB_1 0x00000084UL
89 #define RAMDAC_VID_XXXFB 0x00000088UL
90 #define RAMDAC_VID_YYYFB 0x0000008cUL
91 #define RAMDAC_VID_ZZZFB 0x00000090UL
94 #define RAMDAC_INDEX 0x000000bcUL
95 #define RAMDAC_DATA 0x000000c0UL
107 spin_unlock_irqrestore(&ep->
lock, flags);
110 static int e3d_setcolreg(
unsigned regno,
115 u32 red_8, green_8, blue_8;
116 u32 red_10, green_10, blue_10;
123 green_8 = green >> 8;
126 value = (blue_8 << 24) | (green_8 << 16) | (red_8 << 8);
133 green_10 = green >> 6;
136 value = (blue_10 << 20) | (green_10 << 10) | (red_10 << 0);
137 e3d_clut_write(ep, regno, value);
159 spin_unlock_irqrestore(&ep->
lock, flags);
172 spin_unlock_irqrestore(&ep->
lock, flags);
185 spin_unlock_irqrestore(&ep->
lock, flags);
188 static struct fb_ops e3d_ops = {
190 .fb_setcolreg = e3d_setcolreg,
191 .fb_fillrect = e3d_fillrect,
192 .fb_copyarea = e3d_copyarea,
193 .fb_imageblit = e3d_imageblit,
202 info->
fbops = &e3d_ops;
226 var->
green.offset = 16;
227 var->
green.length = 8;
228 var->
blue.offset = 24;
229 var->
blue.length = 8;
248 unsigned int line_length;
251 of_node = pci_device_to_OF_node(pdev);
261 "at %s\n", pci_name(pdev));
296 printk(
"e3d: Cannot request region 1 for %s\n",
303 goto err_release_pci1;
319 printk(
"e3d: Cannot request region 0 for %s\n",
321 goto err_unmap_ramdac;
324 err = e3d_get_props(ep);
326 goto err_release_pci0;
329 line_length = 1 << line_length;
333 info->
fix.line_length = line_length;
336 info->
fix.line_length = line_length * 2;
339 info->
fix.line_length = line_length * 3;
342 info->
fix.line_length = line_length * 4;
350 goto err_release_pci0;
353 err = e3d_set_fbinfo(ep);
357 pci_set_drvdata(pdev, info);
359 printk(
"e3d: Found device at %s\n", pci_name(pdev));
397 struct fb_info *info = pci_get_drvdata(pdev);
438 .id_table = e3d_pci_table,
439 .probe = e3d_pci_register,
443 static int __init e3d_init(
void)
448 return pci_register_driver(&e3d_driver);
451 static void __exit e3d_exit(
void)