diff options
Diffstat (limited to 'drivers/video/sis/sis_main.c')
-rw-r--r-- | drivers/video/sis/sis_main.c | 140 |
1 files changed, 52 insertions, 88 deletions
diff --git a/drivers/video/sis/sis_main.c b/drivers/video/sis/sis_main.c index a7a48db64ce2..977e27927a21 100644 --- a/drivers/video/sis/sis_main.c +++ b/drivers/video/sis/sis_main.c | |||
@@ -106,8 +106,7 @@ sisfb_setdefaultparms(void) | |||
106 | 106 | ||
107 | /* ------------- Parameter parsing -------------- */ | 107 | /* ------------- Parameter parsing -------------- */ |
108 | 108 | ||
109 | static void __devinit | 109 | static void sisfb_search_vesamode(unsigned int vesamode, bool quiet) |
110 | sisfb_search_vesamode(unsigned int vesamode, bool quiet) | ||
111 | { | 110 | { |
112 | int i = 0, j = 0; | 111 | int i = 0, j = 0; |
113 | 112 | ||
@@ -146,8 +145,7 @@ sisfb_search_vesamode(unsigned int vesamode, bool quiet) | |||
146 | printk(KERN_ERR "sisfb: Invalid VESA mode 0x%x'\n", vesamode); | 145 | printk(KERN_ERR "sisfb: Invalid VESA mode 0x%x'\n", vesamode); |
147 | } | 146 | } |
148 | 147 | ||
149 | static void __devinit | 148 | static void sisfb_search_mode(char *name, bool quiet) |
150 | sisfb_search_mode(char *name, bool quiet) | ||
151 | { | 149 | { |
152 | unsigned int j = 0, xres = 0, yres = 0, depth = 0, rate = 0; | 150 | unsigned int j = 0, xres = 0, yres = 0, depth = 0, rate = 0; |
153 | int i = 0; | 151 | int i = 0; |
@@ -225,8 +223,7 @@ sisfb_search_mode(char *name, bool quiet) | |||
225 | } | 223 | } |
226 | 224 | ||
227 | #ifndef MODULE | 225 | #ifndef MODULE |
228 | static void __devinit | 226 | static void sisfb_get_vga_mode_from_kernel(void) |
229 | sisfb_get_vga_mode_from_kernel(void) | ||
230 | { | 227 | { |
231 | #ifdef CONFIG_X86 | 228 | #ifdef CONFIG_X86 |
232 | char mymode[32]; | 229 | char mymode[32]; |
@@ -345,8 +342,7 @@ sisfb_search_specialtiming(const char *name) | |||
345 | 342 | ||
346 | /* ----------- Various detection routines ----------- */ | 343 | /* ----------- Various detection routines ----------- */ |
347 | 344 | ||
348 | static void __devinit | 345 | static void sisfb_detect_custom_timing(struct sis_video_info *ivideo) |
349 | sisfb_detect_custom_timing(struct sis_video_info *ivideo) | ||
350 | { | 346 | { |
351 | unsigned char *biosver = NULL; | 347 | unsigned char *biosver = NULL; |
352 | unsigned char *biosdate = NULL; | 348 | unsigned char *biosdate = NULL; |
@@ -403,8 +399,7 @@ sisfb_detect_custom_timing(struct sis_video_info *ivideo) | |||
403 | } while(mycustomttable[i].chipID); | 399 | } while(mycustomttable[i].chipID); |
404 | } | 400 | } |
405 | 401 | ||
406 | static bool __devinit | 402 | static bool sisfb_interpret_edid(struct sisfb_monitor *monitor, u8 *buffer) |
407 | sisfb_interpret_edid(struct sisfb_monitor *monitor, u8 *buffer) | ||
408 | { | 403 | { |
409 | int i, j, xres, yres, refresh, index; | 404 | int i, j, xres, yres, refresh, index; |
410 | u32 emodes; | 405 | u32 emodes; |
@@ -505,8 +500,8 @@ sisfb_interpret_edid(struct sisfb_monitor *monitor, u8 *buffer) | |||
505 | return monitor->datavalid; | 500 | return monitor->datavalid; |
506 | } | 501 | } |
507 | 502 | ||
508 | static void __devinit | 503 | static void sisfb_handle_ddc(struct sis_video_info *ivideo, |
509 | sisfb_handle_ddc(struct sis_video_info *ivideo, struct sisfb_monitor *monitor, int crtno) | 504 | struct sisfb_monitor *monitor, int crtno) |
510 | { | 505 | { |
511 | unsigned short temp, i, realcrtno = crtno; | 506 | unsigned short temp, i, realcrtno = crtno; |
512 | unsigned char buffer[256]; | 507 | unsigned char buffer[256]; |
@@ -1898,8 +1893,7 @@ static struct fb_ops sisfb_ops = { | |||
1898 | 1893 | ||
1899 | /* ---------------- Chip generation dependent routines ---------------- */ | 1894 | /* ---------------- Chip generation dependent routines ---------------- */ |
1900 | 1895 | ||
1901 | static struct pci_dev * __devinit | 1896 | static struct pci_dev *sisfb_get_northbridge(int basechipid) |
1902 | sisfb_get_northbridge(int basechipid) | ||
1903 | { | 1897 | { |
1904 | struct pci_dev *pdev = NULL; | 1898 | struct pci_dev *pdev = NULL; |
1905 | int nbridgenum, nbridgeidx, i; | 1899 | int nbridgenum, nbridgeidx, i; |
@@ -1938,8 +1932,7 @@ sisfb_get_northbridge(int basechipid) | |||
1938 | return pdev; | 1932 | return pdev; |
1939 | } | 1933 | } |
1940 | 1934 | ||
1941 | static int __devinit | 1935 | static int sisfb_get_dram_size(struct sis_video_info *ivideo) |
1942 | sisfb_get_dram_size(struct sis_video_info *ivideo) | ||
1943 | { | 1936 | { |
1944 | #if defined(CONFIG_FB_SIS_300) || defined(CONFIG_FB_SIS_315) | 1937 | #if defined(CONFIG_FB_SIS_300) || defined(CONFIG_FB_SIS_315) |
1945 | u8 reg; | 1938 | u8 reg; |
@@ -2038,8 +2031,7 @@ sisfb_get_dram_size(struct sis_video_info *ivideo) | |||
2038 | 2031 | ||
2039 | /* -------------- video bridge device detection --------------- */ | 2032 | /* -------------- video bridge device detection --------------- */ |
2040 | 2033 | ||
2041 | static void __devinit | 2034 | static void sisfb_detect_VB_connect(struct sis_video_info *ivideo) |
2042 | sisfb_detect_VB_connect(struct sis_video_info *ivideo) | ||
2043 | { | 2035 | { |
2044 | u8 cr32, temp; | 2036 | u8 cr32, temp; |
2045 | 2037 | ||
@@ -2164,8 +2156,7 @@ sisfb_detect_VB_connect(struct sis_video_info *ivideo) | |||
2164 | 2156 | ||
2165 | /* ------------------ Sensing routines ------------------ */ | 2157 | /* ------------------ Sensing routines ------------------ */ |
2166 | 2158 | ||
2167 | static bool __devinit | 2159 | static bool sisfb_test_DDC1(struct sis_video_info *ivideo) |
2168 | sisfb_test_DDC1(struct sis_video_info *ivideo) | ||
2169 | { | 2160 | { |
2170 | unsigned short old; | 2161 | unsigned short old; |
2171 | int count = 48; | 2162 | int count = 48; |
@@ -2177,8 +2168,7 @@ sisfb_test_DDC1(struct sis_video_info *ivideo) | |||
2177 | return (count != -1); | 2168 | return (count != -1); |
2178 | } | 2169 | } |
2179 | 2170 | ||
2180 | static void __devinit | 2171 | static void sisfb_sense_crt1(struct sis_video_info *ivideo) |
2181 | sisfb_sense_crt1(struct sis_video_info *ivideo) | ||
2182 | { | 2172 | { |
2183 | bool mustwait = false; | 2173 | bool mustwait = false; |
2184 | u8 sr1F, cr17; | 2174 | u8 sr1F, cr17; |
@@ -2259,8 +2249,7 @@ sisfb_sense_crt1(struct sis_video_info *ivideo) | |||
2259 | } | 2249 | } |
2260 | 2250 | ||
2261 | /* Determine and detect attached devices on SiS30x */ | 2251 | /* Determine and detect attached devices on SiS30x */ |
2262 | static void __devinit | 2252 | static void SiS_SenseLCD(struct sis_video_info *ivideo) |
2263 | SiS_SenseLCD(struct sis_video_info *ivideo) | ||
2264 | { | 2253 | { |
2265 | unsigned char buffer[256]; | 2254 | unsigned char buffer[256]; |
2266 | unsigned short temp, realcrtno, i; | 2255 | unsigned short temp, realcrtno, i; |
@@ -2347,8 +2336,7 @@ SiS_SenseLCD(struct sis_video_info *ivideo) | |||
2347 | ivideo->SiS_Pr.PanelSelfDetected = true; | 2336 | ivideo->SiS_Pr.PanelSelfDetected = true; |
2348 | } | 2337 | } |
2349 | 2338 | ||
2350 | static int __devinit | 2339 | static int SISDoSense(struct sis_video_info *ivideo, u16 type, u16 test) |
2351 | SISDoSense(struct sis_video_info *ivideo, u16 type, u16 test) | ||
2352 | { | 2340 | { |
2353 | int temp, mytest, result, i, j; | 2341 | int temp, mytest, result, i, j; |
2354 | 2342 | ||
@@ -2377,8 +2365,7 @@ SISDoSense(struct sis_video_info *ivideo, u16 type, u16 test) | |||
2377 | return result; | 2365 | return result; |
2378 | } | 2366 | } |
2379 | 2367 | ||
2380 | static void __devinit | 2368 | static void SiS_Sense30x(struct sis_video_info *ivideo) |
2381 | SiS_Sense30x(struct sis_video_info *ivideo) | ||
2382 | { | 2369 | { |
2383 | u8 backupP4_0d,backupP2_00,backupP2_4d,backupSR_1e,biosflag=0; | 2370 | u8 backupP4_0d,backupP2_00,backupP2_4d,backupSR_1e,biosflag=0; |
2384 | u16 svhs=0, svhs_c=0; | 2371 | u16 svhs=0, svhs_c=0; |
@@ -2518,8 +2505,7 @@ SiS_Sense30x(struct sis_video_info *ivideo) | |||
2518 | } | 2505 | } |
2519 | 2506 | ||
2520 | /* Determine and detect attached TV's on Chrontel */ | 2507 | /* Determine and detect attached TV's on Chrontel */ |
2521 | static void __devinit | 2508 | static void SiS_SenseCh(struct sis_video_info *ivideo) |
2522 | SiS_SenseCh(struct sis_video_info *ivideo) | ||
2523 | { | 2509 | { |
2524 | #if defined(CONFIG_FB_SIS_300) || defined(CONFIG_FB_SIS_315) | 2510 | #if defined(CONFIG_FB_SIS_300) || defined(CONFIG_FB_SIS_315) |
2525 | u8 temp1, temp2; | 2511 | u8 temp1, temp2; |
@@ -2643,8 +2629,7 @@ SiS_SenseCh(struct sis_video_info *ivideo) | |||
2643 | } | 2629 | } |
2644 | } | 2630 | } |
2645 | 2631 | ||
2646 | static void __devinit | 2632 | static void sisfb_get_VB_type(struct sis_video_info *ivideo) |
2647 | sisfb_get_VB_type(struct sis_video_info *ivideo) | ||
2648 | { | 2633 | { |
2649 | char stdstr[] = "sisfb: Detected"; | 2634 | char stdstr[] = "sisfb: Detected"; |
2650 | char bridgestr[] = "video bridge"; | 2635 | char bridgestr[] = "video bridge"; |
@@ -2906,8 +2891,7 @@ sisfb_engine_init(struct sis_video_info *ivideo) | |||
2906 | ivideo->engineok = 1; | 2891 | ivideo->engineok = 1; |
2907 | } | 2892 | } |
2908 | 2893 | ||
2909 | static void __devinit | 2894 | static void sisfb_detect_lcd_type(struct sis_video_info *ivideo) |
2910 | sisfb_detect_lcd_type(struct sis_video_info *ivideo) | ||
2911 | { | 2895 | { |
2912 | u8 reg; | 2896 | u8 reg; |
2913 | int i; | 2897 | int i; |
@@ -2962,8 +2946,7 @@ sisfb_detect_lcd_type(struct sis_video_info *ivideo) | |||
2962 | ivideo->lcdxres, ivideo->lcdyres); | 2946 | ivideo->lcdxres, ivideo->lcdyres); |
2963 | } | 2947 | } |
2964 | 2948 | ||
2965 | static void __devinit | 2949 | static void sisfb_save_pdc_emi(struct sis_video_info *ivideo) |
2966 | sisfb_save_pdc_emi(struct sis_video_info *ivideo) | ||
2967 | { | 2950 | { |
2968 | #ifdef CONFIG_FB_SIS_300 | 2951 | #ifdef CONFIG_FB_SIS_300 |
2969 | /* Save the current PanelDelayCompensation if the LCD is currently used */ | 2952 | /* Save the current PanelDelayCompensation if the LCD is currently used */ |
@@ -3081,8 +3064,7 @@ sisfb_save_pdc_emi(struct sis_video_info *ivideo) | |||
3081 | 3064 | ||
3082 | /* -------------------- Memory manager routines ---------------------- */ | 3065 | /* -------------------- Memory manager routines ---------------------- */ |
3083 | 3066 | ||
3084 | static u32 __devinit | 3067 | static u32 sisfb_getheapstart(struct sis_video_info *ivideo) |
3085 | sisfb_getheapstart(struct sis_video_info *ivideo) | ||
3086 | { | 3068 | { |
3087 | u32 ret = ivideo->sisfb_parm_mem * 1024; | 3069 | u32 ret = ivideo->sisfb_parm_mem * 1024; |
3088 | u32 maxoffs = ivideo->video_size - ivideo->hwcursor_size - ivideo->cmdQueueSize; | 3070 | u32 maxoffs = ivideo->video_size - ivideo->hwcursor_size - ivideo->cmdQueueSize; |
@@ -3128,8 +3110,7 @@ sisfb_getheapstart(struct sis_video_info *ivideo) | |||
3128 | return ret; | 3110 | return ret; |
3129 | } | 3111 | } |
3130 | 3112 | ||
3131 | static u32 __devinit | 3113 | static u32 sisfb_getheapsize(struct sis_video_info *ivideo) |
3132 | sisfb_getheapsize(struct sis_video_info *ivideo) | ||
3133 | { | 3114 | { |
3134 | u32 max = ivideo->video_size - ivideo->hwcursor_size - ivideo->cmdQueueSize; | 3115 | u32 max = ivideo->video_size - ivideo->hwcursor_size - ivideo->cmdQueueSize; |
3135 | u32 ret = 0; | 3116 | u32 ret = 0; |
@@ -3154,8 +3135,7 @@ sisfb_getheapsize(struct sis_video_info *ivideo) | |||
3154 | return ret; | 3135 | return ret; |
3155 | } | 3136 | } |
3156 | 3137 | ||
3157 | static int __devinit | 3138 | static int sisfb_heap_init(struct sis_video_info *ivideo) |
3158 | sisfb_heap_init(struct sis_video_info *ivideo) | ||
3159 | { | 3139 | { |
3160 | struct SIS_OH *poh; | 3140 | struct SIS_OH *poh; |
3161 | 3141 | ||
@@ -4061,8 +4041,8 @@ static int __init sisfb_setup(char *options) | |||
4061 | } | 4041 | } |
4062 | #endif | 4042 | #endif |
4063 | 4043 | ||
4064 | static int __devinit | 4044 | static int sisfb_check_rom(void __iomem *rom_base, |
4065 | sisfb_check_rom(void __iomem *rom_base, struct sis_video_info *ivideo) | 4045 | struct sis_video_info *ivideo) |
4066 | { | 4046 | { |
4067 | void __iomem *rom; | 4047 | void __iomem *rom; |
4068 | int romptr; | 4048 | int romptr; |
@@ -4089,8 +4069,7 @@ sisfb_check_rom(void __iomem *rom_base, struct sis_video_info *ivideo) | |||
4089 | return 1; | 4069 | return 1; |
4090 | } | 4070 | } |
4091 | 4071 | ||
4092 | static unsigned char * __devinit | 4072 | static unsigned char *sisfb_find_rom(struct pci_dev *pdev) |
4093 | sisfb_find_rom(struct pci_dev *pdev) | ||
4094 | { | 4073 | { |
4095 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); | 4074 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); |
4096 | void __iomem *rom_base; | 4075 | void __iomem *rom_base; |
@@ -4149,9 +4128,8 @@ sisfb_find_rom(struct pci_dev *pdev) | |||
4149 | return myrombase; | 4128 | return myrombase; |
4150 | } | 4129 | } |
4151 | 4130 | ||
4152 | static void __devinit | 4131 | static void sisfb_post_map_vram(struct sis_video_info *ivideo, |
4153 | sisfb_post_map_vram(struct sis_video_info *ivideo, unsigned int *mapsize, | 4132 | unsigned int *mapsize, unsigned int min) |
4154 | unsigned int min) | ||
4155 | { | 4133 | { |
4156 | if (*mapsize < (min << 20)) | 4134 | if (*mapsize < (min << 20)) |
4157 | return; | 4135 | return; |
@@ -4176,8 +4154,7 @@ sisfb_post_map_vram(struct sis_video_info *ivideo, unsigned int *mapsize, | |||
4176 | } | 4154 | } |
4177 | 4155 | ||
4178 | #ifdef CONFIG_FB_SIS_300 | 4156 | #ifdef CONFIG_FB_SIS_300 |
4179 | static int __devinit | 4157 | static int sisfb_post_300_buswidth(struct sis_video_info *ivideo) |
4180 | sisfb_post_300_buswidth(struct sis_video_info *ivideo) | ||
4181 | { | 4158 | { |
4182 | void __iomem *FBAddress = ivideo->video_vbase; | 4159 | void __iomem *FBAddress = ivideo->video_vbase; |
4183 | unsigned short temp; | 4160 | unsigned short temp; |
@@ -4222,7 +4199,7 @@ sisfb_post_300_buswidth(struct sis_video_info *ivideo) | |||
4222 | return 1; /* 32bit */ | 4199 | return 1; /* 32bit */ |
4223 | } | 4200 | } |
4224 | 4201 | ||
4225 | static const unsigned short __devinitconst SiS_DRAMType[17][5] = { | 4202 | static const unsigned short SiS_DRAMType[17][5] = { |
4226 | {0x0C,0x0A,0x02,0x40,0x39}, | 4203 | {0x0C,0x0A,0x02,0x40,0x39}, |
4227 | {0x0D,0x0A,0x01,0x40,0x48}, | 4204 | {0x0D,0x0A,0x01,0x40,0x48}, |
4228 | {0x0C,0x09,0x02,0x20,0x35}, | 4205 | {0x0C,0x09,0x02,0x20,0x35}, |
@@ -4242,10 +4219,9 @@ static const unsigned short __devinitconst SiS_DRAMType[17][5] = { | |||
4242 | {0x09,0x08,0x01,0x01,0x00} | 4219 | {0x09,0x08,0x01,0x01,0x00} |
4243 | }; | 4220 | }; |
4244 | 4221 | ||
4245 | static int __devinit | 4222 | static int sisfb_post_300_rwtest(struct sis_video_info *ivideo, int iteration, |
4246 | sisfb_post_300_rwtest(struct sis_video_info *ivideo, int iteration, int buswidth, | 4223 | int buswidth, int PseudoRankCapacity, |
4247 | int PseudoRankCapacity, int PseudoAdrPinCount, | 4224 | int PseudoAdrPinCount, unsigned int mapsize) |
4248 | unsigned int mapsize) | ||
4249 | { | 4225 | { |
4250 | void __iomem *FBAddr = ivideo->video_vbase; | 4226 | void __iomem *FBAddr = ivideo->video_vbase; |
4251 | unsigned short sr14; | 4227 | unsigned short sr14; |
@@ -4309,8 +4285,7 @@ sisfb_post_300_rwtest(struct sis_video_info *ivideo, int iteration, int buswidth | |||
4309 | return 0; | 4285 | return 0; |
4310 | } | 4286 | } |
4311 | 4287 | ||
4312 | static void __devinit | 4288 | static void sisfb_post_300_ramsize(struct pci_dev *pdev, unsigned int mapsize) |
4313 | sisfb_post_300_ramsize(struct pci_dev *pdev, unsigned int mapsize) | ||
4314 | { | 4289 | { |
4315 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); | 4290 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); |
4316 | int i, j, buswidth; | 4291 | int i, j, buswidth; |
@@ -4335,8 +4310,7 @@ sisfb_post_300_ramsize(struct pci_dev *pdev, unsigned int mapsize) | |||
4335 | } | 4310 | } |
4336 | } | 4311 | } |
4337 | 4312 | ||
4338 | static void __devinit | 4313 | static void sisfb_post_sis300(struct pci_dev *pdev) |
4339 | sisfb_post_sis300(struct pci_dev *pdev) | ||
4340 | { | 4314 | { |
4341 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); | 4315 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); |
4342 | unsigned char *bios = ivideo->SiS_Pr.VirtualRomBase; | 4316 | unsigned char *bios = ivideo->SiS_Pr.VirtualRomBase; |
@@ -4547,8 +4521,7 @@ sisfb_post_sis300(struct pci_dev *pdev) | |||
4547 | 4521 | ||
4548 | #ifdef CONFIG_FB_SIS_315 | 4522 | #ifdef CONFIG_FB_SIS_315 |
4549 | #if 0 | 4523 | #if 0 |
4550 | static void __devinit | 4524 | static void sisfb_post_sis315330(struct pci_dev *pdev) |
4551 | sisfb_post_sis315330(struct pci_dev *pdev) | ||
4552 | { | 4525 | { |
4553 | /* TODO */ | 4526 | /* TODO */ |
4554 | } | 4527 | } |
@@ -4559,8 +4532,7 @@ static inline int sisfb_xgi_is21(struct sis_video_info *ivideo) | |||
4559 | return ivideo->chip_real_id == XGI_21; | 4532 | return ivideo->chip_real_id == XGI_21; |
4560 | } | 4533 | } |
4561 | 4534 | ||
4562 | static void __devinit | 4535 | static void sisfb_post_xgi_delay(struct sis_video_info *ivideo, int delay) |
4563 | sisfb_post_xgi_delay(struct sis_video_info *ivideo, int delay) | ||
4564 | { | 4536 | { |
4565 | unsigned int i; | 4537 | unsigned int i; |
4566 | u8 reg; | 4538 | u8 reg; |
@@ -4571,9 +4543,9 @@ sisfb_post_xgi_delay(struct sis_video_info *ivideo, int delay) | |||
4571 | } | 4543 | } |
4572 | } | 4544 | } |
4573 | 4545 | ||
4574 | static int __devinit | 4546 | static int sisfb_find_host_bridge(struct sis_video_info *ivideo, |
4575 | sisfb_find_host_bridge(struct sis_video_info *ivideo, struct pci_dev *mypdev, | 4547 | struct pci_dev *mypdev, |
4576 | unsigned short pcivendor) | 4548 | unsigned short pcivendor) |
4577 | { | 4549 | { |
4578 | struct pci_dev *pdev = NULL; | 4550 | struct pci_dev *pdev = NULL; |
4579 | unsigned short temp; | 4551 | unsigned short temp; |
@@ -4591,9 +4563,8 @@ sisfb_find_host_bridge(struct sis_video_info *ivideo, struct pci_dev *mypdev, | |||
4591 | return ret; | 4563 | return ret; |
4592 | } | 4564 | } |
4593 | 4565 | ||
4594 | static int __devinit | 4566 | static int sisfb_post_xgi_rwtest(struct sis_video_info *ivideo, int starta, |
4595 | sisfb_post_xgi_rwtest(struct sis_video_info *ivideo, int starta, | 4567 | unsigned int enda, unsigned int mapsize) |
4596 | unsigned int enda, unsigned int mapsize) | ||
4597 | { | 4568 | { |
4598 | unsigned int pos; | 4569 | unsigned int pos; |
4599 | int i; | 4570 | int i; |
@@ -4623,8 +4594,7 @@ sisfb_post_xgi_rwtest(struct sis_video_info *ivideo, int starta, | |||
4623 | return 1; | 4594 | return 1; |
4624 | } | 4595 | } |
4625 | 4596 | ||
4626 | static int __devinit | 4597 | static int sisfb_post_xgi_ramsize(struct sis_video_info *ivideo) |
4627 | sisfb_post_xgi_ramsize(struct sis_video_info *ivideo) | ||
4628 | { | 4598 | { |
4629 | unsigned int buswidth, ranksize, channelab, mapsize; | 4599 | unsigned int buswidth, ranksize, channelab, mapsize; |
4630 | int i, j, k, l, status; | 4600 | int i, j, k, l, status; |
@@ -4876,8 +4846,7 @@ bail_out: | |||
4876 | return status; | 4846 | return status; |
4877 | } | 4847 | } |
4878 | 4848 | ||
4879 | static void __devinit | 4849 | static void sisfb_post_xgi_setclocks(struct sis_video_info *ivideo, u8 regb) |
4880 | sisfb_post_xgi_setclocks(struct sis_video_info *ivideo, u8 regb) | ||
4881 | { | 4850 | { |
4882 | u8 v1, v2, v3; | 4851 | u8 v1, v2, v3; |
4883 | int index; | 4852 | int index; |
@@ -4932,8 +4901,8 @@ sisfb_post_xgi_setclocks(struct sis_video_info *ivideo, u8 regb) | |||
4932 | sisfb_post_xgi_delay(ivideo, 0x43); | 4901 | sisfb_post_xgi_delay(ivideo, 0x43); |
4933 | } | 4902 | } |
4934 | 4903 | ||
4935 | static void __devinit | 4904 | static void sisfb_post_xgi_ddr2_mrs_default(struct sis_video_info *ivideo, |
4936 | sisfb_post_xgi_ddr2_mrs_default(struct sis_video_info *ivideo, u8 regb) | 4905 | u8 regb) |
4937 | { | 4906 | { |
4938 | unsigned char *bios = ivideo->bios_abase; | 4907 | unsigned char *bios = ivideo->bios_abase; |
4939 | u8 v1; | 4908 | u8 v1; |
@@ -4973,8 +4942,7 @@ sisfb_post_xgi_ddr2_mrs_default(struct sis_video_info *ivideo, u8 regb) | |||
4973 | sisfb_post_xgi_delay(ivideo, 1); | 4942 | sisfb_post_xgi_delay(ivideo, 1); |
4974 | } | 4943 | } |
4975 | 4944 | ||
4976 | static void __devinit | 4945 | static void sisfb_post_xgi_ddr2_mrs_xg21(struct sis_video_info *ivideo) |
4977 | sisfb_post_xgi_ddr2_mrs_xg21(struct sis_video_info *ivideo) | ||
4978 | { | 4946 | { |
4979 | sisfb_post_xgi_setclocks(ivideo, 1); | 4947 | sisfb_post_xgi_setclocks(ivideo, 1); |
4980 | 4948 | ||
@@ -5015,8 +4983,7 @@ sisfb_post_xgi_ddr2_mrs_xg21(struct sis_video_info *ivideo) | |||
5015 | sisfb_post_xgi_delay(ivideo, 1); | 4983 | sisfb_post_xgi_delay(ivideo, 1); |
5016 | } | 4984 | } |
5017 | 4985 | ||
5018 | static void __devinit | 4986 | static void sisfb_post_xgi_ddr2(struct sis_video_info *ivideo, u8 regb) |
5019 | sisfb_post_xgi_ddr2(struct sis_video_info *ivideo, u8 regb) | ||
5020 | { | 4987 | { |
5021 | unsigned char *bios = ivideo->bios_abase; | 4988 | unsigned char *bios = ivideo->bios_abase; |
5022 | static const u8 cs158[8] = { | 4989 | static const u8 cs158[8] = { |
@@ -5061,8 +5028,7 @@ sisfb_post_xgi_ddr2(struct sis_video_info *ivideo, u8 regb) | |||
5061 | sisfb_post_xgi_ddr2_mrs_default(ivideo, regb); | 5028 | sisfb_post_xgi_ddr2_mrs_default(ivideo, regb); |
5062 | } | 5029 | } |
5063 | 5030 | ||
5064 | static u8 __devinit | 5031 | static u8 sisfb_post_xgi_ramtype(struct sis_video_info *ivideo) |
5065 | sisfb_post_xgi_ramtype(struct sis_video_info *ivideo) | ||
5066 | { | 5032 | { |
5067 | unsigned char *bios = ivideo->bios_abase; | 5033 | unsigned char *bios = ivideo->bios_abase; |
5068 | u8 ramtype; | 5034 | u8 ramtype; |
@@ -5101,8 +5067,7 @@ sisfb_post_xgi_ramtype(struct sis_video_info *ivideo) | |||
5101 | return ramtype; | 5067 | return ramtype; |
5102 | } | 5068 | } |
5103 | 5069 | ||
5104 | static int __devinit | 5070 | static int sisfb_post_xgi(struct pci_dev *pdev) |
5105 | sisfb_post_xgi(struct pci_dev *pdev) | ||
5106 | { | 5071 | { |
5107 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); | 5072 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); |
5108 | unsigned char *bios = ivideo->bios_abase; | 5073 | unsigned char *bios = ivideo->bios_abase; |
@@ -5839,8 +5804,7 @@ sisfb_post_xgi(struct pci_dev *pdev) | |||
5839 | } | 5804 | } |
5840 | #endif | 5805 | #endif |
5841 | 5806 | ||
5842 | static int __devinit | 5807 | static int sisfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) |
5843 | sisfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | ||
5844 | { | 5808 | { |
5845 | struct sisfb_chip_info *chipinfo = &sisfb_chip_info[ent->driver_data]; | 5809 | struct sisfb_chip_info *chipinfo = &sisfb_chip_info[ent->driver_data]; |
5846 | struct sis_video_info *ivideo = NULL; | 5810 | struct sis_video_info *ivideo = NULL; |
@@ -6530,7 +6494,7 @@ error_3: vfree(ivideo->bios_abase); | |||
6530 | /* PCI DEVICE HANDLING */ | 6494 | /* PCI DEVICE HANDLING */ |
6531 | /*****************************************************/ | 6495 | /*****************************************************/ |
6532 | 6496 | ||
6533 | static void __devexit sisfb_remove(struct pci_dev *pdev) | 6497 | static void sisfb_remove(struct pci_dev *pdev) |
6534 | { | 6498 | { |
6535 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); | 6499 | struct sis_video_info *ivideo = pci_get_drvdata(pdev); |
6536 | struct fb_info *sis_fb_info = ivideo->memyselfandi; | 6500 | struct fb_info *sis_fb_info = ivideo->memyselfandi; |
@@ -6591,7 +6555,7 @@ static struct pci_driver sisfb_driver = { | |||
6591 | .name = "sisfb", | 6555 | .name = "sisfb", |
6592 | .id_table = sisfb_pci_table, | 6556 | .id_table = sisfb_pci_table, |
6593 | .probe = sisfb_probe, | 6557 | .probe = sisfb_probe, |
6594 | .remove = __devexit_p(sisfb_remove) | 6558 | .remove = sisfb_remove, |
6595 | }; | 6559 | }; |
6596 | 6560 | ||
6597 | static int __init sisfb_init(void) | 6561 | static int __init sisfb_init(void) |