Rev 1221 | Rev 1313 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1221 | Rev 1246 | ||
---|---|---|---|
Line 624... | Line 624... | ||
624 | if (!(pt->misc & DRM_EDID_PT_SEPARATE_SYNC)) { |
624 | if (!(pt->misc & DRM_EDID_PT_SEPARATE_SYNC)) { |
625 | printk(KERN_WARNING "integrated sync not supported\n"); |
625 | printk(KERN_WARNING "integrated sync not supported\n"); |
626 | return NULL; |
626 | return NULL; |
627 | } |
627 | } |
Line -... | Line 628... | ||
- | 628 | ||
- | 629 | /* it is incorrect if hsync/vsync width is zero */ |
|
- | 630 | if (!hsync_pulse_width || !vsync_pulse_width) { |
|
- | 631 | DRM_DEBUG_KMS("Incorrect Detailed timing. " |
|
- | 632 | "Wrong Hsync/Vsync pulse width\n"); |
|
- | 633 | return NULL; |
|
628 | 634 | } |
|
629 | mode = drm_mode_create(dev); |
635 | mode = drm_mode_create(dev); |
630 | if (!mode) |
636 | if (!mode) |
Line 631... | Line 637... | ||
631 | return NULL; |
637 | return NULL; |
Line 645... | Line 651... | ||
645 | mode->vdisplay = vactive; |
651 | mode->vdisplay = vactive; |
646 | mode->vsync_start = mode->vdisplay + vsync_offset; |
652 | mode->vsync_start = mode->vdisplay + vsync_offset; |
647 | mode->vsync_end = mode->vsync_start + vsync_pulse_width; |
653 | mode->vsync_end = mode->vsync_start + vsync_pulse_width; |
648 | mode->vtotal = mode->vdisplay + vblank; |
654 | mode->vtotal = mode->vdisplay + vblank; |
Line -... | Line 655... | ||
- | 655 | ||
- | 656 | /* perform the basic check for the detailed timing */ |
|
- | 657 | if (mode->hsync_end > mode->htotal || |
|
- | 658 | mode->vsync_end > mode->vtotal) { |
|
- | 659 | drm_mode_destroy(dev, mode); |
|
- | 660 | DRM_DEBUG_KMS("Incorrect detailed timing. " |
|
- | 661 | "Sync is beyond the blank.\n"); |
|
- | 662 | return NULL; |
|
- | 663 | } |
|
649 | 664 | ||
Line 650... | Line 665... | ||
650 | drm_mode_set_name(mode); |
665 | drm_mode_set_name(mode); |
651 | 666 | ||
Line 1050... | Line 1065... | ||
1050 | ret = drm_do_probe_ddc_edid(adapter, buf, len); |
1065 | ret = drm_do_probe_ddc_edid(adapter, buf, len); |
1051 | if (ret != 0) { |
1066 | if (ret != 0) { |
1052 | goto end; |
1067 | goto end; |
1053 | } |
1068 | } |
1054 | if (!edid_is_valid((struct edid *)buf)) { |
1069 | if (!edid_is_valid((struct edid *)buf)) { |
1055 | // dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n", |
1070 | dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n", |
1056 | // drm_get_connector_name(connector)); |
1071 | drm_get_connector_name(connector)); |
1057 | ret = -1; |
1072 | ret = -1; |
1058 | } |
1073 | } |
1059 | end: |
1074 | end: |
1060 | return ret; |
1075 | return ret; |
1061 | } |
1076 | } |
Line 1076... | Line 1091... | ||
1076 | struct edid *edid; |
1091 | struct edid *edid; |
Line 1077... | Line 1092... | ||
1077 | 1092 | ||
1078 | edid = kmalloc(EDID_LENGTH * (MAX_EDID_EXT_NUM + 1), |
1093 | edid = kmalloc(EDID_LENGTH * (MAX_EDID_EXT_NUM + 1), |
1079 | GFP_KERNEL); |
1094 | GFP_KERNEL); |
1080 | if (edid == NULL) { |
1095 | if (edid == NULL) { |
1081 | // dev_warn(&connector->dev->pdev->dev, |
1096 | dev_warn(&connector->dev->pdev->dev, |
1082 | // "Failed to allocate EDID\n"); |
1097 | "Failed to allocate EDID\n"); |
1083 | goto end; |
1098 | goto end; |
Line 1084... | Line 1099... | ||
1084 | } |
1099 | } |
1085 | 1100 | ||
Line 1092... | Line 1107... | ||
1092 | /* There are EDID extensions to be read */ |
1107 | /* There are EDID extensions to be read */ |
1093 | if (edid->extensions != 0) { |
1108 | if (edid->extensions != 0) { |
1094 | int edid_ext_num = edid->extensions; |
1109 | int edid_ext_num = edid->extensions; |
Line 1095... | Line 1110... | ||
1095 | 1110 | ||
1096 | if (edid_ext_num > MAX_EDID_EXT_NUM) { |
1111 | if (edid_ext_num > MAX_EDID_EXT_NUM) { |
1097 | // dev_warn(&connector->dev->pdev->dev, |
1112 | dev_warn(&connector->dev->pdev->dev, |
1098 | // "The number of extension(%d) is " |
1113 | "The number of extension(%d) is " |
1099 | // "over max (%d), actually read number (%d)\n", |
1114 | "over max (%d), actually read number (%d)\n", |
1100 | // edid_ext_num, MAX_EDID_EXT_NUM, |
1115 | edid_ext_num, MAX_EDID_EXT_NUM, |
1101 | // MAX_EDID_EXT_NUM); |
1116 | MAX_EDID_EXT_NUM); |
1102 | /* Reset EDID extension number to be read */ |
1117 | /* Reset EDID extension number to be read */ |
1103 | edid_ext_num = MAX_EDID_EXT_NUM; |
1118 | edid_ext_num = MAX_EDID_EXT_NUM; |
1104 | } |
1119 | } |
1105 | /* Read EDID including extensions too */ |
1120 | /* Read EDID including extensions too */ |
Line 1200... | Line 1215... | ||
1200 | 1215 | ||
1201 | if (edid == NULL) { |
1216 | if (edid == NULL) { |
1202 | return 0; |
1217 | return 0; |
1203 | } |
1218 | } |
1204 | if (!edid_is_valid(edid)) { |
1219 | if (!edid_is_valid(edid)) { |
1205 | // dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n", |
1220 | dev_warn(&connector->dev->pdev->dev, "%s: EDID invalid.\n", |
1206 | // drm_get_connector_name(connector)); |
1221 | drm_get_connector_name(connector)); |
1207 | return 0; |
1222 | return 0; |
Line 1208... | Line 1223... | ||
1208 | } |
1223 | } |