diff options
Diffstat (limited to 'drivers/video/riva')
-rw-r--r-- | drivers/video/riva/fbdev.c | 66 | ||||
-rw-r--r-- | drivers/video/riva/riva_hw.c | 10 | ||||
-rw-r--r-- | drivers/video/riva/riva_hw.h | 17 | ||||
-rw-r--r-- | drivers/video/riva/rivafb-i2c.c | 6 |
4 files changed, 46 insertions, 53 deletions
diff --git a/drivers/video/riva/fbdev.c b/drivers/video/riva/fbdev.c index a160c4de2ca2..1a13966b7d5b 100644 --- a/drivers/video/riva/fbdev.c +++ b/drivers/video/riva/fbdev.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <linux/init.h> | 40 | #include <linux/init.h> |
41 | #include <linux/pci.h> | 41 | #include <linux/pci.h> |
42 | #include <linux/backlight.h> | 42 | #include <linux/backlight.h> |
43 | #include <linux/bitrev.h> | ||
43 | #ifdef CONFIG_MTRR | 44 | #ifdef CONFIG_MTRR |
44 | #include <asm/mtrr.h> | 45 | #include <asm/mtrr.h> |
45 | #endif | 46 | #endif |
@@ -521,48 +522,13 @@ static inline unsigned char MISCin(struct riva_par *par) | |||
521 | return (VGA_RD08(par->riva.PVIO, 0x3cc)); | 522 | return (VGA_RD08(par->riva.PVIO, 0x3cc)); |
522 | } | 523 | } |
523 | 524 | ||
524 | static u8 byte_rev[256] = { | ||
525 | 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, | ||
526 | 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, | ||
527 | 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, | ||
528 | 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, | ||
529 | 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, | ||
530 | 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, | ||
531 | 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, | ||
532 | 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, | ||
533 | 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, | ||
534 | 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, | ||
535 | 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, | ||
536 | 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, | ||
537 | 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, | ||
538 | 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, | ||
539 | 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, | ||
540 | 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, | ||
541 | 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, | ||
542 | 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, | ||
543 | 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, | ||
544 | 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, | ||
545 | 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, | ||
546 | 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, | ||
547 | 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, | ||
548 | 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, | ||
549 | 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, | ||
550 | 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, | ||
551 | 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, | ||
552 | 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, | ||
553 | 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, | ||
554 | 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, | ||
555 | 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, | ||
556 | 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff, | ||
557 | }; | ||
558 | |||
559 | static inline void reverse_order(u32 *l) | 525 | static inline void reverse_order(u32 *l) |
560 | { | 526 | { |
561 | u8 *a = (u8 *)l; | 527 | u8 *a = (u8 *)l; |
562 | *a = byte_rev[*a], a++; | 528 | a[0] = bitrev8(a[0]); |
563 | *a = byte_rev[*a], a++; | 529 | a[1] = bitrev8(a[1]); |
564 | *a = byte_rev[*a], a++; | 530 | a[2] = bitrev8(a[2]); |
565 | *a = byte_rev[*a]; | 531 | a[3] = bitrev8(a[3]); |
566 | } | 532 | } |
567 | 533 | ||
568 | /* ------------------------------------------------------------------------- * | 534 | /* ------------------------------------------------------------------------- * |
@@ -774,11 +740,12 @@ static void riva_load_state(struct riva_par *par, struct riva_regs *regs) | |||
774 | * CALLED FROM: | 740 | * CALLED FROM: |
775 | * rivafb_set_par() | 741 | * rivafb_set_par() |
776 | */ | 742 | */ |
777 | static void riva_load_video_mode(struct fb_info *info) | 743 | static int riva_load_video_mode(struct fb_info *info) |
778 | { | 744 | { |
779 | int bpp, width, hDisplaySize, hDisplay, hStart, | 745 | int bpp, width, hDisplaySize, hDisplay, hStart, |
780 | hEnd, hTotal, height, vDisplay, vStart, vEnd, vTotal, dotClock; | 746 | hEnd, hTotal, height, vDisplay, vStart, vEnd, vTotal, dotClock; |
781 | int hBlankStart, hBlankEnd, vBlankStart, vBlankEnd; | 747 | int hBlankStart, hBlankEnd, vBlankStart, vBlankEnd; |
748 | int rc; | ||
782 | struct riva_par *par = info->par; | 749 | struct riva_par *par = info->par; |
783 | struct riva_regs newmode; | 750 | struct riva_regs newmode; |
784 | 751 | ||
@@ -884,8 +851,10 @@ static void riva_load_video_mode(struct fb_info *info) | |||
884 | else | 851 | else |
885 | newmode.misc_output |= 0x80; | 852 | newmode.misc_output |= 0x80; |
886 | 853 | ||
887 | par->riva.CalcStateExt(&par->riva, &newmode.ext, bpp, width, | 854 | rc = CalcStateExt(&par->riva, &newmode.ext, bpp, width, |
888 | hDisplaySize, height, dotClock); | 855 | hDisplaySize, height, dotClock); |
856 | if (rc) | ||
857 | goto out; | ||
889 | 858 | ||
890 | newmode.ext.scale = NV_RD32(par->riva.PRAMDAC, 0x00000848) & | 859 | newmode.ext.scale = NV_RD32(par->riva.PRAMDAC, 0x00000848) & |
891 | 0xfff000ff; | 860 | 0xfff000ff; |
@@ -917,8 +886,12 @@ static void riva_load_video_mode(struct fb_info *info) | |||
917 | par->current_state = newmode; | 886 | par->current_state = newmode; |
918 | riva_load_state(par, &par->current_state); | 887 | riva_load_state(par, &par->current_state); |
919 | par->riva.LockUnlock(&par->riva, 0); /* important for HW cursor */ | 888 | par->riva.LockUnlock(&par->riva, 0); /* important for HW cursor */ |
889 | |||
890 | out: | ||
920 | rivafb_blank(FB_BLANK_UNBLANK, info); | 891 | rivafb_blank(FB_BLANK_UNBLANK, info); |
921 | NVTRACE_LEAVE(); | 892 | NVTRACE_LEAVE(); |
893 | |||
894 | return rc; | ||
922 | } | 895 | } |
923 | 896 | ||
924 | static void riva_update_var(struct fb_var_screeninfo *var, struct fb_videomode *modedb) | 897 | static void riva_update_var(struct fb_var_screeninfo *var, struct fb_videomode *modedb) |
@@ -1286,12 +1259,15 @@ static int rivafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
1286 | static int rivafb_set_par(struct fb_info *info) | 1259 | static int rivafb_set_par(struct fb_info *info) |
1287 | { | 1260 | { |
1288 | struct riva_par *par = info->par; | 1261 | struct riva_par *par = info->par; |
1262 | int rc = 0; | ||
1289 | 1263 | ||
1290 | NVTRACE_ENTER(); | 1264 | NVTRACE_ENTER(); |
1291 | /* vgaHWunlock() + riva unlock (0x7F) */ | 1265 | /* vgaHWunlock() + riva unlock (0x7F) */ |
1292 | CRTCout(par, 0x11, 0xFF); | 1266 | CRTCout(par, 0x11, 0xFF); |
1293 | par->riva.LockUnlock(&par->riva, 0); | 1267 | par->riva.LockUnlock(&par->riva, 0); |
1294 | riva_load_video_mode(info); | 1268 | rc = riva_load_video_mode(info); |
1269 | if (rc) | ||
1270 | goto out; | ||
1295 | if(!(info->flags & FBINFO_HWACCEL_DISABLED)) | 1271 | if(!(info->flags & FBINFO_HWACCEL_DISABLED)) |
1296 | riva_setup_accel(info); | 1272 | riva_setup_accel(info); |
1297 | 1273 | ||
@@ -1304,8 +1280,10 @@ static int rivafb_set_par(struct fb_info *info) | |||
1304 | info->pixmap.scan_align = 1; | 1280 | info->pixmap.scan_align = 1; |
1305 | else | 1281 | else |
1306 | info->pixmap.scan_align = 4; | 1282 | info->pixmap.scan_align = 4; |
1283 | |||
1284 | out: | ||
1307 | NVTRACE_LEAVE(); | 1285 | NVTRACE_LEAVE(); |
1308 | return 0; | 1286 | return rc; |
1309 | } | 1287 | } |
1310 | 1288 | ||
1311 | /** | 1289 | /** |
diff --git a/drivers/video/riva/riva_hw.c b/drivers/video/riva/riva_hw.c index b6f8690b96c9..e0b8c521cc9c 100644 --- a/drivers/video/riva/riva_hw.c +++ b/drivers/video/riva/riva_hw.c | |||
@@ -1227,7 +1227,7 @@ static int CalcVClock | |||
1227 | * Calculate extended mode parameters (SVGA) and save in a | 1227 | * Calculate extended mode parameters (SVGA) and save in a |
1228 | * mode state structure. | 1228 | * mode state structure. |
1229 | */ | 1229 | */ |
1230 | static void CalcStateExt | 1230 | int CalcStateExt |
1231 | ( | 1231 | ( |
1232 | RIVA_HW_INST *chip, | 1232 | RIVA_HW_INST *chip, |
1233 | RIVA_HW_STATE *state, | 1233 | RIVA_HW_STATE *state, |
@@ -1249,7 +1249,8 @@ static void CalcStateExt | |||
1249 | * Extended RIVA registers. | 1249 | * Extended RIVA registers. |
1250 | */ | 1250 | */ |
1251 | pixelDepth = (bpp + 1)/8; | 1251 | pixelDepth = (bpp + 1)/8; |
1252 | CalcVClock(dotClock, &VClk, &m, &n, &p, chip); | 1252 | if (!CalcVClock(dotClock, &VClk, &m, &n, &p, chip)) |
1253 | return -EINVAL; | ||
1253 | 1254 | ||
1254 | switch (chip->Architecture) | 1255 | switch (chip->Architecture) |
1255 | { | 1256 | { |
@@ -1327,6 +1328,8 @@ static void CalcStateExt | |||
1327 | state->pitch1 = | 1328 | state->pitch1 = |
1328 | state->pitch2 = | 1329 | state->pitch2 = |
1329 | state->pitch3 = pixelDepth * width; | 1330 | state->pitch3 = pixelDepth * width; |
1331 | |||
1332 | return 0; | ||
1330 | } | 1333 | } |
1331 | /* | 1334 | /* |
1332 | * Load fixed function state and pre-calculated/stored state. | 1335 | * Load fixed function state and pre-calculated/stored state. |
@@ -2026,7 +2029,6 @@ static void nv3GetConfig | |||
2026 | */ | 2029 | */ |
2027 | chip->Busy = nv3Busy; | 2030 | chip->Busy = nv3Busy; |
2028 | chip->ShowHideCursor = ShowHideCursor; | 2031 | chip->ShowHideCursor = ShowHideCursor; |
2029 | chip->CalcStateExt = CalcStateExt; | ||
2030 | chip->LoadStateExt = LoadStateExt; | 2032 | chip->LoadStateExt = LoadStateExt; |
2031 | chip->UnloadStateExt = UnloadStateExt; | 2033 | chip->UnloadStateExt = UnloadStateExt; |
2032 | chip->SetStartAddress = SetStartAddress3; | 2034 | chip->SetStartAddress = SetStartAddress3; |
@@ -2084,7 +2086,6 @@ static void nv4GetConfig | |||
2084 | */ | 2086 | */ |
2085 | chip->Busy = nv4Busy; | 2087 | chip->Busy = nv4Busy; |
2086 | chip->ShowHideCursor = ShowHideCursor; | 2088 | chip->ShowHideCursor = ShowHideCursor; |
2087 | chip->CalcStateExt = CalcStateExt; | ||
2088 | chip->LoadStateExt = LoadStateExt; | 2089 | chip->LoadStateExt = LoadStateExt; |
2089 | chip->UnloadStateExt = UnloadStateExt; | 2090 | chip->UnloadStateExt = UnloadStateExt; |
2090 | chip->SetStartAddress = SetStartAddress; | 2091 | chip->SetStartAddress = SetStartAddress; |
@@ -2186,7 +2187,6 @@ static void nv10GetConfig | |||
2186 | */ | 2187 | */ |
2187 | chip->Busy = nv10Busy; | 2188 | chip->Busy = nv10Busy; |
2188 | chip->ShowHideCursor = ShowHideCursor; | 2189 | chip->ShowHideCursor = ShowHideCursor; |
2189 | chip->CalcStateExt = CalcStateExt; | ||
2190 | chip->LoadStateExt = LoadStateExt; | 2190 | chip->LoadStateExt = LoadStateExt; |
2191 | chip->UnloadStateExt = UnloadStateExt; | 2191 | chip->UnloadStateExt = UnloadStateExt; |
2192 | chip->SetStartAddress = SetStartAddress; | 2192 | chip->SetStartAddress = SetStartAddress; |
diff --git a/drivers/video/riva/riva_hw.h b/drivers/video/riva/riva_hw.h index a1e71a626df2..c2769f73e0b2 100644 --- a/drivers/video/riva/riva_hw.h +++ b/drivers/video/riva/riva_hw.h | |||
@@ -463,7 +463,6 @@ typedef struct _riva_hw_inst | |||
463 | * Common chip functions. | 463 | * Common chip functions. |
464 | */ | 464 | */ |
465 | int (*Busy)(struct _riva_hw_inst *); | 465 | int (*Busy)(struct _riva_hw_inst *); |
466 | void (*CalcStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *,int,int,int,int,int); | ||
467 | void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *); | 466 | void (*LoadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *); |
468 | void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *); | 467 | void (*UnloadStateExt)(struct _riva_hw_inst *,struct _riva_hw_state *); |
469 | void (*SetStartAddress)(struct _riva_hw_inst *,U032); | 468 | void (*SetStartAddress)(struct _riva_hw_inst *,U032); |
@@ -528,6 +527,22 @@ typedef struct _riva_hw_state | |||
528 | U032 pitch2; | 527 | U032 pitch2; |
529 | U032 pitch3; | 528 | U032 pitch3; |
530 | } RIVA_HW_STATE; | 529 | } RIVA_HW_STATE; |
530 | |||
531 | /* | ||
532 | * function prototypes | ||
533 | */ | ||
534 | |||
535 | extern int CalcStateExt | ||
536 | ( | ||
537 | RIVA_HW_INST *chip, | ||
538 | RIVA_HW_STATE *state, | ||
539 | int bpp, | ||
540 | int width, | ||
541 | int hDisplaySize, | ||
542 | int height, | ||
543 | int dotClock | ||
544 | ); | ||
545 | |||
531 | /* | 546 | /* |
532 | * External routines. | 547 | * External routines. |
533 | */ | 548 | */ |
diff --git a/drivers/video/riva/rivafb-i2c.c b/drivers/video/riva/rivafb-i2c.c index c15b259af644..01b85e3b0ae1 100644 --- a/drivers/video/riva/rivafb-i2c.c +++ b/drivers/video/riva/rivafb-i2c.c | |||
@@ -144,15 +144,15 @@ void riva_create_i2c_busses(struct riva_par *par) | |||
144 | void riva_delete_i2c_busses(struct riva_par *par) | 144 | void riva_delete_i2c_busses(struct riva_par *par) |
145 | { | 145 | { |
146 | if (par->chan[0].par) | 146 | if (par->chan[0].par) |
147 | i2c_bit_del_bus(&par->chan[0].adapter); | 147 | i2c_del_adapter(&par->chan[0].adapter); |
148 | par->chan[0].par = NULL; | 148 | par->chan[0].par = NULL; |
149 | 149 | ||
150 | if (par->chan[1].par) | 150 | if (par->chan[1].par) |
151 | i2c_bit_del_bus(&par->chan[1].adapter); | 151 | i2c_del_adapter(&par->chan[1].adapter); |
152 | par->chan[1].par = NULL; | 152 | par->chan[1].par = NULL; |
153 | 153 | ||
154 | if (par->chan[2].par) | 154 | if (par->chan[2].par) |
155 | i2c_bit_del_bus(&par->chan[2].adapter); | 155 | i2c_del_adapter(&par->chan[2].adapter); |
156 | par->chan[2].par = NULL; | 156 | par->chan[2].par = NULL; |
157 | } | 157 | } |
158 | 158 | ||