diff options
author | Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | 2010-03-10 18:21:30 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-12 18:52:33 -0500 |
commit | c5f06f5cddd6681b978ffdb53755e28eefccb1bb (patch) | |
tree | cf195fe5b85a03fbb4be13b905e3e4b8faed21a9 /drivers | |
parent | 9b24b00c364bb3bfa717ba2ead258a527b20cc5f (diff) |
viafb: some dvi cleanup
Remove some unused variables, move some dvi code around and store the
detected maximum resolution for later use. The vertical resolution is
handled as the old code did it but I hope it can be read from the hardware
some day.
No runtime change expected.
Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Cc: Joseph Chan <JosephChan@via.com.tw>
Cc: Scott Fang <ScottFang@viatech.com.cn>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/via/chip.h | 9 | ||||
-rw-r--r-- | drivers/video/via/dvi.c | 107 | ||||
-rw-r--r-- | drivers/video/via/dvi.h | 3 | ||||
-rw-r--r-- | drivers/video/via/hw.c | 11 |
4 files changed, 55 insertions, 75 deletions
diff --git a/drivers/video/via/chip.h b/drivers/video/via/chip.h index 52253d0cdf73..8c06bd3c0b4d 100644 --- a/drivers/video/via/chip.h +++ b/drivers/video/via/chip.h | |||
@@ -107,7 +107,6 @@ | |||
107 | struct tmds_chip_information { | 107 | struct tmds_chip_information { |
108 | int tmds_chip_name; | 108 | int tmds_chip_name; |
109 | int tmds_chip_slave_addr; | 109 | int tmds_chip_slave_addr; |
110 | int dvi_panel_id; | ||
111 | int data_mode; | 110 | int data_mode; |
112 | int output_interface; | 111 | int output_interface; |
113 | int i2c_port; | 112 | int i2c_port; |
@@ -142,13 +141,9 @@ struct tmds_setting_information { | |||
142 | int iga_path; | 141 | int iga_path; |
143 | int h_active; | 142 | int h_active; |
144 | int v_active; | 143 | int v_active; |
145 | int bpp; | ||
146 | int refresh_rate; | ||
147 | int get_dvi_size_method; | ||
148 | int max_pixel_clock; | 144 | int max_pixel_clock; |
149 | int dvi_panel_hres; | 145 | int max_hres; |
150 | int dvi_panel_vres; | 146 | int max_vres; |
151 | int native_size; | ||
152 | }; | 147 | }; |
153 | 148 | ||
154 | struct lvds_setting_information { | 149 | struct lvds_setting_information { |
diff --git a/drivers/video/via/dvi.c b/drivers/video/via/dvi.c index 9cb261ce6e35..0e0852e6df26 100644 --- a/drivers/video/via/dvi.c +++ b/drivers/video/via/dvi.c | |||
@@ -23,9 +23,10 @@ | |||
23 | static void tmds_register_write(int index, u8 data); | 23 | static void tmds_register_write(int index, u8 data); |
24 | static int tmds_register_read(int index); | 24 | static int tmds_register_read(int index); |
25 | static int tmds_register_read_bytes(int index, u8 *buff, int buff_len); | 25 | static int tmds_register_read_bytes(int index, u8 *buff, int buff_len); |
26 | static void dvi_get_panel_size_from_DDCv1(void); | 26 | static void dvi_get_panel_size_from_DDCv1(struct tmds_chip_information |
27 | static void dvi_get_panel_size_from_DDCv2(void); | 27 | *tmds_chip, struct tmds_setting_information *tmds_setting); |
28 | static void dvi_get_panel_info(void); | 28 | static void dvi_get_panel_size_from_DDCv2(struct tmds_chip_information |
29 | *tmds_chip, struct tmds_setting_information *tmds_setting); | ||
29 | static int viafb_dvi_query_EDID(void); | 30 | static int viafb_dvi_query_EDID(void); |
30 | 31 | ||
31 | static int check_tmds_chip(int device_id_subaddr, int device_id) | 32 | static int check_tmds_chip(int device_id_subaddr, int device_id) |
@@ -36,23 +37,24 @@ static int check_tmds_chip(int device_id_subaddr, int device_id) | |||
36 | return FAIL; | 37 | return FAIL; |
37 | } | 38 | } |
38 | 39 | ||
39 | void viafb_init_dvi_size(void) | 40 | void viafb_init_dvi_size(struct tmds_chip_information *tmds_chip, |
41 | struct tmds_setting_information *tmds_setting) | ||
40 | { | 42 | { |
41 | DEBUG_MSG(KERN_INFO "viafb_init_dvi_size()\n"); | 43 | DEBUG_MSG(KERN_INFO "viafb_init_dvi_size()\n"); |
42 | DEBUG_MSG(KERN_INFO | ||
43 | "viaparinfo->tmds_setting_info->get_dvi_size_method %d\n", | ||
44 | viaparinfo->tmds_setting_info->get_dvi_size_method); | ||
45 | 44 | ||
46 | switch (viaparinfo->tmds_setting_info->get_dvi_size_method) { | 45 | viafb_dvi_sense(); |
47 | case GET_DVI_SIZE_BY_SYSTEM_BIOS: | 46 | switch (viafb_dvi_query_EDID()) { |
47 | case 1: | ||
48 | dvi_get_panel_size_from_DDCv1(tmds_chip, tmds_setting); | ||
48 | break; | 49 | break; |
49 | case GET_DVI_SZIE_BY_HW_STRAPPING: | 50 | case 2: |
51 | dvi_get_panel_size_from_DDCv2(tmds_chip, tmds_setting); | ||
50 | break; | 52 | break; |
51 | case GET_DVI_SIZE_BY_VGA_BIOS: | ||
52 | default: | 53 | default: |
53 | dvi_get_panel_info(); | 54 | printk(KERN_WARNING "viafb_init_dvi_size: DVI panel size undetected!\n"); |
54 | break; | 55 | break; |
55 | } | 56 | } |
57 | |||
56 | return; | 58 | return; |
57 | } | 59 | } |
58 | 60 | ||
@@ -314,11 +316,9 @@ static int viafb_dvi_query_EDID(void) | |||
314 | return false; | 316 | return false; |
315 | } | 317 | } |
316 | 318 | ||
317 | /* void dvi_get_panel_size_from_DDCv1(void) | 319 | /* Get Panel Size Using EDID1 Table */ |
318 | * | 320 | static void dvi_get_panel_size_from_DDCv1(struct tmds_chip_information |
319 | * - Get Panel Size Using EDID1 Table | 321 | *tmds_chip, struct tmds_setting_information *tmds_setting) |
320 | */ | ||
321 | static void dvi_get_panel_size_from_DDCv1(void) | ||
322 | { | 322 | { |
323 | int i, max_h = 0, tmp, restore; | 323 | int i, max_h = 0, tmp, restore; |
324 | unsigned char rData; | 324 | unsigned char rData; |
@@ -326,8 +326,8 @@ static void dvi_get_panel_size_from_DDCv1(void) | |||
326 | 326 | ||
327 | DEBUG_MSG(KERN_INFO "\n dvi_get_panel_size_from_DDCv1 \n"); | 327 | DEBUG_MSG(KERN_INFO "\n dvi_get_panel_size_from_DDCv1 \n"); |
328 | 328 | ||
329 | restore = viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr; | 329 | restore = tmds_chip->tmds_chip_slave_addr; |
330 | viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = 0xA0; | 330 | tmds_chip->tmds_chip_slave_addr = 0xA0; |
331 | 331 | ||
332 | rData = tmds_register_read(0x23); | 332 | rData = tmds_register_read(0x23); |
333 | if (rData & 0x3C) | 333 | if (rData & 0x3C) |
@@ -373,8 +373,8 @@ static void dvi_get_panel_size_from_DDCv1(void) | |||
373 | /* The first two byte must be zero. */ | 373 | /* The first two byte must be zero. */ |
374 | if (EDID_DATA[3] == 0xFD) { | 374 | if (EDID_DATA[3] == 0xFD) { |
375 | /* To get max pixel clock. */ | 375 | /* To get max pixel clock. */ |
376 | viaparinfo->tmds_setting_info-> | 376 | tmds_setting->max_pixel_clock = |
377 | max_pixel_clock = EDID_DATA[9] * 10; | 377 | EDID_DATA[9] * 10; |
378 | } | 378 | } |
379 | } | 379 | } |
380 | break; | 380 | break; |
@@ -384,23 +384,31 @@ static void dvi_get_panel_size_from_DDCv1(void) | |||
384 | } | 384 | } |
385 | } | 385 | } |
386 | 386 | ||
387 | tmds_setting->max_hres = max_h; | ||
387 | switch (max_h) { | 388 | switch (max_h) { |
388 | case 640: | 389 | case 640: |
390 | tmds_setting->max_vres = 480; | ||
389 | break; | 391 | break; |
390 | case 800: | 392 | case 800: |
393 | tmds_setting->max_vres = 600; | ||
391 | break; | 394 | break; |
392 | case 1024: | 395 | case 1024: |
396 | tmds_setting->max_vres = 768; | ||
393 | break; | 397 | break; |
394 | case 1280: | 398 | case 1280: |
399 | tmds_setting->max_vres = 1024; | ||
395 | break; | 400 | break; |
396 | case 1400: | 401 | case 1400: |
402 | tmds_setting->max_vres = 1050; | ||
397 | break; | 403 | break; |
398 | case 1440: | 404 | case 1440: |
405 | tmds_setting->max_vres = 1050; | ||
399 | break; | 406 | break; |
400 | case 1600: | 407 | case 1600: |
408 | tmds_setting->max_vres = 1200; | ||
401 | break; | 409 | break; |
402 | case 1920: | 410 | case 1920: |
403 | 411 | tmds_setting->max_vres = 1080; | |
404 | break; | 412 | break; |
405 | default: | 413 | default: |
406 | DEBUG_MSG(KERN_INFO "Unknown panel size max resolution = %d !\ | 414 | DEBUG_MSG(KERN_INFO "Unknown panel size max resolution = %d !\ |
@@ -409,72 +417,55 @@ static void dvi_get_panel_size_from_DDCv1(void) | |||
409 | } | 417 | } |
410 | 418 | ||
411 | DEBUG_MSG(KERN_INFO "DVI max pixelclock = %d\n", | 419 | DEBUG_MSG(KERN_INFO "DVI max pixelclock = %d\n", |
412 | viaparinfo->tmds_setting_info->max_pixel_clock); | 420 | tmds_setting->max_pixel_clock); |
413 | viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = restore; | 421 | tmds_chip->tmds_chip_slave_addr = restore; |
414 | } | 422 | } |
415 | 423 | ||
416 | /* void dvi_get_panel_size_from_DDCv2(void) | 424 | /* Get Panel Size Using EDID2 Table */ |
417 | * | 425 | static void dvi_get_panel_size_from_DDCv2(struct tmds_chip_information |
418 | * - Get Panel Size Using EDID2 Table | 426 | *tmds_chip, struct tmds_setting_information *tmds_setting) |
419 | */ | ||
420 | static void dvi_get_panel_size_from_DDCv2(void) | ||
421 | { | 427 | { |
422 | int HSize = 0, restore; | 428 | int restore; |
423 | unsigned char R_Buffer[2]; | 429 | unsigned char R_Buffer[2]; |
424 | 430 | ||
425 | DEBUG_MSG(KERN_INFO "\n dvi_get_panel_size_from_DDCv2 \n"); | 431 | DEBUG_MSG(KERN_INFO "\n dvi_get_panel_size_from_DDCv2 \n"); |
426 | 432 | ||
427 | restore = viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr; | 433 | restore = tmds_chip->tmds_chip_slave_addr; |
428 | viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = 0xA2; | 434 | tmds_chip->tmds_chip_slave_addr = 0xA2; |
429 | 435 | ||
430 | /* Horizontal: 0x76, 0x77 */ | 436 | /* Horizontal: 0x76, 0x77 */ |
431 | tmds_register_read_bytes(0x76, R_Buffer, 2); | 437 | tmds_register_read_bytes(0x76, R_Buffer, 2); |
432 | HSize = R_Buffer[0]; | 438 | tmds_setting->max_hres = R_Buffer[0] + (R_Buffer[1] << 8); |
433 | HSize += R_Buffer[1] << 8; | ||
434 | 439 | ||
435 | switch (HSize) { | 440 | switch (tmds_setting->max_hres) { |
436 | case 640: | 441 | case 640: |
442 | tmds_setting->max_vres = 480; | ||
437 | break; | 443 | break; |
438 | case 800: | 444 | case 800: |
445 | tmds_setting->max_vres = 600; | ||
439 | break; | 446 | break; |
440 | case 1024: | 447 | case 1024: |
448 | tmds_setting->max_vres = 768; | ||
441 | break; | 449 | break; |
442 | case 1280: | 450 | case 1280: |
451 | tmds_setting->max_vres = 1024; | ||
443 | break; | 452 | break; |
444 | case 1400: | 453 | case 1400: |
454 | tmds_setting->max_vres = 1050; | ||
445 | break; | 455 | break; |
446 | case 1440: | 456 | case 1440: |
457 | tmds_setting->max_vres = 1050; | ||
447 | break; | 458 | break; |
448 | case 1600: | 459 | case 1600: |
460 | tmds_setting->max_vres = 1200; | ||
449 | break; | 461 | break; |
450 | default: | 462 | default: |
451 | DEBUG_MSG(KERN_INFO "Unknown panel size max resolution = %d!\ | 463 | DEBUG_MSG(KERN_INFO "Unknown panel size max resolution = %d!\ |
452 | set default panel size.\n", HSize); | 464 | set default panel size.\n", tmds_setting->max_hres); |
453 | break; | 465 | break; |
454 | } | 466 | } |
455 | 467 | ||
456 | viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = restore; | 468 | tmds_chip->tmds_chip_slave_addr = restore; |
457 | } | ||
458 | |||
459 | /* unsigned char dvi_get_panel_info(void) | ||
460 | * | ||
461 | * - Get Panel Size | ||
462 | */ | ||
463 | static void dvi_get_panel_info(void) | ||
464 | { | ||
465 | DEBUG_MSG(KERN_INFO "dvi_get_panel_info! \n"); | ||
466 | |||
467 | viafb_dvi_sense(); | ||
468 | switch (viafb_dvi_query_EDID()) { | ||
469 | case 1: | ||
470 | dvi_get_panel_size_from_DDCv1(); | ||
471 | break; | ||
472 | case 2: | ||
473 | dvi_get_panel_size_from_DDCv2(); | ||
474 | break; | ||
475 | default: | ||
476 | break; | ||
477 | } | ||
478 | } | 469 | } |
479 | 470 | ||
480 | /* If Disable DVI, turn off pad */ | 471 | /* If Disable DVI, turn off pad */ |
diff --git a/drivers/video/via/dvi.h b/drivers/video/via/dvi.h index 5ca2ffc15a3f..0dffcfd395f3 100644 --- a/drivers/video/via/dvi.h +++ b/drivers/video/via/dvi.h | |||
@@ -57,7 +57,8 @@ int viafb_dvi_sense(void); | |||
57 | void viafb_dvi_disable(void); | 57 | void viafb_dvi_disable(void); |
58 | void viafb_dvi_enable(void); | 58 | void viafb_dvi_enable(void); |
59 | int viafb_tmds_trasmitter_identify(void); | 59 | int viafb_tmds_trasmitter_identify(void); |
60 | void viafb_init_dvi_size(void); | 60 | void viafb_init_dvi_size(struct tmds_chip_information *tmds_chip, |
61 | struct tmds_setting_information *tmds_setting); | ||
61 | void viafb_dvi_set_mode(struct VideoModeTable *videoMode, int mode_bpp, | 62 | void viafb_dvi_set_mode(struct VideoModeTable *videoMode, int mode_bpp, |
62 | int set_iga); | 63 | int set_iga); |
63 | 64 | ||
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c index 726fbd115979..1aa3bb2f1a4e 100644 --- a/drivers/video/via/hw.c +++ b/drivers/video/via/hw.c | |||
@@ -1911,9 +1911,6 @@ void viafb_update_device_setting(int hres, int vres, | |||
1911 | 1911 | ||
1912 | viaparinfo->tmds_setting_info->h_active = hres; | 1912 | viaparinfo->tmds_setting_info->h_active = hres; |
1913 | viaparinfo->tmds_setting_info->v_active = vres; | 1913 | viaparinfo->tmds_setting_info->v_active = vres; |
1914 | viaparinfo->tmds_setting_info->bpp = bpp; | ||
1915 | viaparinfo->tmds_setting_info->refresh_rate = | ||
1916 | vmode_refresh; | ||
1917 | 1914 | ||
1918 | viaparinfo->lvds_setting_info->h_active = hres; | 1915 | viaparinfo->lvds_setting_info->h_active = hres; |
1919 | viaparinfo->lvds_setting_info->v_active = vres; | 1916 | viaparinfo->lvds_setting_info->v_active = vres; |
@@ -1930,9 +1927,6 @@ void viafb_update_device_setting(int hres, int vres, | |||
1930 | if (viaparinfo->tmds_setting_info->iga_path == IGA2) { | 1927 | if (viaparinfo->tmds_setting_info->iga_path == IGA2) { |
1931 | viaparinfo->tmds_setting_info->h_active = hres; | 1928 | viaparinfo->tmds_setting_info->h_active = hres; |
1932 | viaparinfo->tmds_setting_info->v_active = vres; | 1929 | viaparinfo->tmds_setting_info->v_active = vres; |
1933 | viaparinfo->tmds_setting_info->bpp = bpp; | ||
1934 | viaparinfo->tmds_setting_info->refresh_rate = | ||
1935 | vmode_refresh; | ||
1936 | } | 1930 | } |
1937 | 1931 | ||
1938 | if (viaparinfo->lvds_setting_info->iga_path == IGA2) { | 1932 | if (viaparinfo->lvds_setting_info->iga_path == IGA2) { |
@@ -2031,9 +2025,8 @@ static void init_tmds_chip_info(void) | |||
2031 | 2025 | ||
2032 | DEBUG_MSG(KERN_INFO "TMDS Chip = %d\n", | 2026 | DEBUG_MSG(KERN_INFO "TMDS Chip = %d\n", |
2033 | viaparinfo->chip_info->tmds_chip_info.tmds_chip_name); | 2027 | viaparinfo->chip_info->tmds_chip_info.tmds_chip_name); |
2034 | viaparinfo->tmds_setting_info->get_dvi_size_method = | 2028 | viafb_init_dvi_size(&viaparinfo->shared->chip_info.tmds_chip_info, |
2035 | GET_DVI_SIZE_BY_VGA_BIOS; | 2029 | &viaparinfo->shared->tmds_setting_info); |
2036 | viafb_init_dvi_size(); | ||
2037 | } | 2030 | } |
2038 | 2031 | ||
2039 | static void init_lvds_chip_info(void) | 2032 | static void init_lvds_chip_info(void) |