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) |
