diff options
Diffstat (limited to 'drivers/video/via')
-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) |