|
@@ -28,9 +28,6 @@ static int tmds_register_read_bytes(int index, u8 *buff, int buff_len);
|
|
|
static void __devinit dvi_get_panel_size_from_DDCv1(
|
|
|
struct tmds_chip_information *tmds_chip,
|
|
|
struct tmds_setting_information *tmds_setting);
|
|
|
-static void __devinit dvi_get_panel_size_from_DDCv2(
|
|
|
- struct tmds_chip_information *tmds_chip,
|
|
|
- struct tmds_setting_information *tmds_setting);
|
|
|
static int viafb_dvi_query_EDID(void);
|
|
|
|
|
|
static int check_tmds_chip(int device_id_subaddr, int device_id)
|
|
@@ -47,17 +44,8 @@ void __devinit viafb_init_dvi_size(struct tmds_chip_information *tmds_chip,
|
|
|
DEBUG_MSG(KERN_INFO "viafb_init_dvi_size()\n");
|
|
|
|
|
|
viafb_dvi_sense();
|
|
|
- switch (viafb_dvi_query_EDID()) {
|
|
|
- case 1:
|
|
|
+ if (viafb_dvi_query_EDID() == 1)
|
|
|
dvi_get_panel_size_from_DDCv1(tmds_chip, tmds_setting);
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- dvi_get_panel_size_from_DDCv2(tmds_chip, tmds_setting);
|
|
|
- break;
|
|
|
- default:
|
|
|
- printk(KERN_WARNING "viafb_init_dvi_size: DVI panel size undetected!\n");
|
|
|
- break;
|
|
|
- }
|
|
|
|
|
|
return;
|
|
|
}
|
|
@@ -306,12 +294,7 @@ static int viafb_dvi_query_EDID(void)
|
|
|
return EDID_VERSION_1; /* Found EDID1 Table */
|
|
|
}
|
|
|
|
|
|
- data0 = (u8) tmds_register_read(0x00);
|
|
|
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = restore;
|
|
|
- if (data0 == 0x20)
|
|
|
- return EDID_VERSION_2; /* Found EDID2 Table */
|
|
|
- else
|
|
|
- return false;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
/* Get Panel Size Using EDID1 Table */
|
|
@@ -319,50 +302,15 @@ static void __devinit dvi_get_panel_size_from_DDCv1(
|
|
|
struct tmds_chip_information *tmds_chip,
|
|
|
struct tmds_setting_information *tmds_setting)
|
|
|
{
|
|
|
- int i, max_h = 0, tmp, restore;
|
|
|
- unsigned char rData;
|
|
|
+ int i, restore;
|
|
|
unsigned char EDID_DATA[18];
|
|
|
|
|
|
DEBUG_MSG(KERN_INFO "\n dvi_get_panel_size_from_DDCv1 \n");
|
|
|
|
|
|
restore = tmds_chip->tmds_chip_slave_addr;
|
|
|
tmds_chip->tmds_chip_slave_addr = 0xA0;
|
|
|
-
|
|
|
- rData = tmds_register_read(0x23);
|
|
|
- if (rData & 0x3C)
|
|
|
- max_h = 640;
|
|
|
- if (rData & 0xC0)
|
|
|
- max_h = 720;
|
|
|
- if (rData & 0x03)
|
|
|
- max_h = 800;
|
|
|
-
|
|
|
- rData = tmds_register_read(0x24);
|
|
|
- if (rData & 0xC0)
|
|
|
- max_h = 800;
|
|
|
- if (rData & 0x1E)
|
|
|
- max_h = 1024;
|
|
|
- if (rData & 0x01)
|
|
|
- max_h = 1280;
|
|
|
-
|
|
|
for (i = 0x25; i < 0x6D; i++) {
|
|
|
switch (i) {
|
|
|
- case 0x26:
|
|
|
- case 0x28:
|
|
|
- case 0x2A:
|
|
|
- case 0x2C:
|
|
|
- case 0x2E:
|
|
|
- case 0x30:
|
|
|
- case 0x32:
|
|
|
- case 0x34:
|
|
|
- rData = tmds_register_read(i);
|
|
|
- if (rData == 1)
|
|
|
- break;
|
|
|
- /* data = (data + 31) * 8 */
|
|
|
- tmp = (rData + 31) << 3;
|
|
|
- if (tmp > max_h)
|
|
|
- max_h = tmp;
|
|
|
- break;
|
|
|
-
|
|
|
case 0x36:
|
|
|
case 0x48:
|
|
|
case 0x5A:
|
|
@@ -383,91 +331,11 @@ static void __devinit dvi_get_panel_size_from_DDCv1(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- tmds_setting->max_hres = max_h;
|
|
|
- switch (max_h) {
|
|
|
- case 640:
|
|
|
- tmds_setting->max_vres = 480;
|
|
|
- break;
|
|
|
- case 800:
|
|
|
- tmds_setting->max_vres = 600;
|
|
|
- break;
|
|
|
- case 1024:
|
|
|
- tmds_setting->max_vres = 768;
|
|
|
- break;
|
|
|
- case 1280:
|
|
|
- tmds_setting->max_vres = 1024;
|
|
|
- break;
|
|
|
- case 1400:
|
|
|
- tmds_setting->max_vres = 1050;
|
|
|
- break;
|
|
|
- case 1440:
|
|
|
- tmds_setting->max_vres = 1050;
|
|
|
- break;
|
|
|
- case 1600:
|
|
|
- tmds_setting->max_vres = 1200;
|
|
|
- break;
|
|
|
- case 1920:
|
|
|
- tmds_setting->max_vres = 1080;
|
|
|
- break;
|
|
|
- default:
|
|
|
- DEBUG_MSG(KERN_INFO "Unknown panel size max resolution = %d ! "
|
|
|
- "set default panel size.\n", max_h);
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
DEBUG_MSG(KERN_INFO "DVI max pixelclock = %d\n",
|
|
|
tmds_setting->max_pixel_clock);
|
|
|
tmds_chip->tmds_chip_slave_addr = restore;
|
|
|
}
|
|
|
|
|
|
-/* Get Panel Size Using EDID2 Table */
|
|
|
-static void __devinit dvi_get_panel_size_from_DDCv2(
|
|
|
- struct tmds_chip_information *tmds_chip,
|
|
|
- struct tmds_setting_information *tmds_setting)
|
|
|
-{
|
|
|
- int restore;
|
|
|
- unsigned char R_Buffer[2];
|
|
|
-
|
|
|
- DEBUG_MSG(KERN_INFO "\n dvi_get_panel_size_from_DDCv2 \n");
|
|
|
-
|
|
|
- restore = tmds_chip->tmds_chip_slave_addr;
|
|
|
- tmds_chip->tmds_chip_slave_addr = 0xA2;
|
|
|
-
|
|
|
- /* Horizontal: 0x76, 0x77 */
|
|
|
- tmds_register_read_bytes(0x76, R_Buffer, 2);
|
|
|
- tmds_setting->max_hres = R_Buffer[0] + (R_Buffer[1] << 8);
|
|
|
-
|
|
|
- switch (tmds_setting->max_hres) {
|
|
|
- case 640:
|
|
|
- tmds_setting->max_vres = 480;
|
|
|
- break;
|
|
|
- case 800:
|
|
|
- tmds_setting->max_vres = 600;
|
|
|
- break;
|
|
|
- case 1024:
|
|
|
- tmds_setting->max_vres = 768;
|
|
|
- break;
|
|
|
- case 1280:
|
|
|
- tmds_setting->max_vres = 1024;
|
|
|
- break;
|
|
|
- case 1400:
|
|
|
- tmds_setting->max_vres = 1050;
|
|
|
- break;
|
|
|
- case 1440:
|
|
|
- tmds_setting->max_vres = 1050;
|
|
|
- break;
|
|
|
- case 1600:
|
|
|
- tmds_setting->max_vres = 1200;
|
|
|
- break;
|
|
|
- default:
|
|
|
- DEBUG_MSG(KERN_INFO "Unknown panel size max resolution = %d! "
|
|
|
- "set default panel size.\n", tmds_setting->max_hres);
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- tmds_chip->tmds_chip_slave_addr = restore;
|
|
|
-}
|
|
|
-
|
|
|
/* If Disable DVI, turn off pad */
|
|
|
void viafb_dvi_disable(void)
|
|
|
{
|