17 #include <linux/module.h>
18 #include <linux/kernel.h>
19 #include <linux/errno.h>
20 #include <linux/string.h>
28 #include <linux/pci.h>
32 #ifdef CONFIG_PMAC_BACKLIGHT
40 #define write_ind(num, val, ap, dp) do { \
41 outb((num), (ap)); outb((val), (dp)); \
43 #define read_ind(num, var, ap, dp) do { \
44 outb((num), (ap)); var = inb((dp)); \
48 #define write_xr(num, val) write_ind(num, val, 0x3d6, 0x3d7)
49 #define read_xr(num, var) read_ind(num, var, 0x3d6, 0x3d7)
51 #define write_fr(num, val) write_ind(num, val, 0x3d0, 0x3d1)
52 #define read_fr(num, var) read_ind(num, var, 0x3d0, 0x3d1)
54 #define write_cr(num, val) write_ind(num, val, 0x3d4, 0x3d5)
55 #define read_cr(num, var) read_ind(num, var, 0x3d4, 0x3d5)
57 #define write_gr(num, val) write_ind(num, val, 0x3ce, 0x3cf)
58 #define read_gr(num, var) read_ind(num, var, 0x3ce, 0x3cf)
60 #define write_sr(num, val) write_ind(num, val, 0x3c4, 0x3c5)
61 #define read_sr(num, var) read_ind(num, var, 0x3c4, 0x3c5)
63 #define write_ar(num, val) do { \
64 inb(0x3da); write_ind(num, val, 0x3c0, 0x3c0); \
66 #define read_ar(num, var) do { \
67 inb(0x3da); read_ind(num, var, 0x3c0, 0x3c1); \
81 static int chipsfb_blank(
int blank,
struct fb_info *
info);
83 static struct fb_ops chipsfb_ops = {
85 .fb_check_var = chipsfb_check_var,
86 .fb_set_par = chipsfb_set_par,
87 .fb_setcolreg = chipsfb_setcolreg,
88 .fb_blank = chipsfb_blank,
97 if (var->
xres > 800 || var->
yres > 600
110 static int chipsfb_set_par(
struct fb_info *info)
112 if (info->
var.bits_per_pixel == 16) {
118 info->
fix.line_length = 800*2;
121 info->
var.red.offset = 10;
122 info->
var.green.offset = 5;
123 info->
var.blue.offset = 0;
124 info->
var.red.length = info->
var.green.length =
125 info->
var.blue.length = 5;
134 info->
fix.line_length = 800;
137 info->
var.red.offset = info->
var.green.offset =
138 info->
var.blue.offset = 0;
139 info->
var.red.length = info->
var.green.length =
140 info->
var.blue.length = 8;
146 static int chipsfb_blank(
int blank,
struct fb_info *info)
276 static void __init chips_hw_init(
void)
284 write_sr(chips_init_sr[i].addr, chips_init_sr[i].data);
286 write_gr(chips_init_gr[i].addr, chips_init_gr[i].data);
288 write_ar(chips_init_ar[i].addr, chips_init_ar[i].data);
290 write_cr(chips_init_cr[i].addr, chips_init_cr[i].data);
292 write_fr(chips_init_fr[i].addr, chips_init_fr[i].data);
309 .smem_len = 0x100000,
318 .red = { .length = 8 },
319 .green = { .length = 8 },
320 .blue = { .length = 8 },
337 p->
fix = chipsfb_fix;
340 p->
var = chipsfb_var;
342 p->
fbops = &chipsfb_ops;
359 dev_err(&dp->
dev,
"Cannot enable PCI device\n");
372 dev_err(&dp->
dev,
"Cannot allocate framebuffer structure\n");
378 dev_err(&dp->
dev,
"Cannot request framebuffer\n");
394 #ifdef CONFIG_PMAC_BACKLIGHT
410 dev_err(&dp->
dev,
"Cannot map framebuffer\n");
412 goto err_release_pci;
415 pci_set_drvdata(dp, p);
420 dev_err(&dp->
dev,
"C&T 65550 framebuffer failed to register\n");
425 " (%dK RAM detected)\n",
426 p->
node, p->
fix.smem_len / 1024);
443 struct fb_info *p = pci_get_drvdata(dp);
456 struct fb_info *p = pci_get_drvdata(pdev);
458 if (state.
event == pdev->
dev.power.power_state.event)
468 pdev->
dev.power.power_state =
state;
472 static int chipsfb_pci_resume(
struct pci_dev *pdev)
474 struct fb_info *p = pci_get_drvdata(pdev);
496 .id_table = chipsfb_pci_tbl,
497 .probe = chipsfb_pci_init,
500 .suspend = chipsfb_pci_suspend,
501 .resume = chipsfb_pci_resume,
510 return pci_register_driver(&chipsfb_driver);
515 static void __exit chipsfb_exit(
void)