diff --git a/drivers/gpu/drm/panel/panel-edp.c b/drivers/gpu/drm/panel/panel-edp.c index ef1022a1c052f..311a48f5bdf10 100644 --- a/drivers/gpu/drm/panel/panel-edp.c +++ b/drivers/gpu/drm/panel/panel-edp.c @@ -45,20 +45,28 @@ */ struct panel_delay { /** - * @prepare: Time for the panel to become ready. + * @hpd_reliable: Time for HPD to be reliable * - * The time (in milliseconds) that it takes for the panel to - * become ready and start receiving video data + * The time (in milliseconds) that it takes after powering the panel + * before the HPD signal is reliable. Ideally this is 0 but some panels, + * board designs, or bad pulldown configs can cause a glitch here. + * + * NOTE: on some old panel data this number appers to be much too big. + * Presumably some old panels simply didn't have HPD hooked up and put + * the hpd_absent here because this field predates the + * hpd_absent. While that works, it's non-ideal. */ - unsigned int prepare; + unsigned int hpd_reliable; /** - * @hpd_absent_delay: Time to wait if HPD isn't hooked up. + * @hpd_absent: Time to wait if HPD isn't hooked up. * - * Add this to the prepare delay if we know Hot Plug Detect - * isn't used. + * Add this to the prepare delay if we know Hot Plug Detect isn't used. + * + * This is T3-max on eDP timing diagrams or the delay from power on + * until HPD is guaranteed to be asserted. */ - unsigned int hpd_absent_delay; + unsigned int hpd_absent; /** * @prepare_to_enable: Time between prepare and enable. @@ -87,6 +95,10 @@ struct panel_delay { * enable() * // do fixed enable delay * // enforce prepare_to_enable min time + * + * This is not specified in a standard way on eDP timing diagrams. + * It is effectively the time from HPD going high till you can + * turn on the backlight. */ unsigned int prepare_to_enable; @@ -96,6 +108,10 @@ struct panel_delay { * The time (in milliseconds) that it takes for the panel to * display the first valid frame after starting to receive * video data. + * + * This is (T6-min + max(T7-max, T8-min)) on eDP timing diagrams or + * the delay after link training finishes until we can turn the + * backlight on and see valid data. */ unsigned int enable; @@ -104,6 +120,9 @@ struct panel_delay { * * The time (in milliseconds) that it takes for the panel to * turn the display off (no content is visible). + * + * This is T9-min (delay from backlight off to end of valid video + * data) on eDP timing diagrams. It is not common to set. */ unsigned int disable; @@ -117,6 +136,8 @@ struct panel_delay { * starting until at least this many milliseconds has passed. * If at prepare time less time has passed since unprepare * finished, the driver waits for the remaining time. + * + * This is T12-min on eDP timing diagrams. */ unsigned int unprepare; }; @@ -400,15 +421,15 @@ static int panel_edp_prepare_once(struct panel_edp *p) gpiod_set_value_cansleep(p->enable_gpio, 1); - delay = p->desc->delay.prepare; + delay = p->desc->delay.hpd_reliable; if (p->no_hpd) - delay += p->desc->delay.hpd_absent_delay; + delay += p->desc->delay.hpd_absent; if (delay) msleep(delay); if (p->hpd_gpio) { - if (p->desc->delay.hpd_absent_delay) - hpd_wait_us = p->desc->delay.hpd_absent_delay * 1000UL; + if (p->desc->delay.hpd_absent) + hpd_wait_us = p->desc->delay.hpd_absent * 1000UL; else hpd_wait_us = 2000000; @@ -772,7 +793,7 @@ static const struct panel_desc auo_b116xak01 = { .height = 144, }, .delay = { - .hpd_absent_delay = 200, + .hpd_absent = 200, }, }; @@ -823,7 +844,7 @@ static const struct panel_desc auo_b133han05 = { .height = 165, }, .delay = { - .prepare = 100, + .hpd_reliable = 100, .enable = 20, .unprepare = 50, }, @@ -850,7 +871,7 @@ static const struct panel_desc auo_b133htn01 = { .height = 165, }, .delay = { - .prepare = 105, + .hpd_reliable = 105, .enable = 20, .unprepare = 50, }, @@ -899,7 +920,7 @@ static const struct panel_desc auo_b140han06 = { .height = 174, }, .delay = { - .prepare = 100, + .hpd_reliable = 100, .enable = 20, .unprepare = 50, }, @@ -939,7 +960,8 @@ static const struct panel_desc boe_nv101wxmn51 = { .height = 136, }, .delay = { - .prepare = 210, + /* TODO: should be hpd-absent and no-hpd should be set? */ + .hpd_reliable = 210, .enable = 50, .unprepare = 160, }, @@ -981,7 +1003,7 @@ static const struct panel_desc boe_nv110wtm_n61 = { .height = 155, }, .delay = { - .hpd_absent_delay = 200, + .hpd_absent = 200, .prepare_to_enable = 80, .enable = 50, .unprepare = 500, @@ -1018,14 +1040,14 @@ static const struct panel_desc boe_nv133fhm_n61 = { * was until the TCON data download was complete. On * one system this was measured at 8 ms. We'll put 15 ms * in the prepare delay just to be safe and take it away - * from the hpd_absent_delay (which would otherwise be 200 ms) + * from the hpd_absent (which would otherwise be 200 ms) * to handle this. That means: * - If HPD isn't hooked up you still have 200 ms delay. * - If HPD is hooked up we won't try to look at it for the * first 15 ms. */ - .prepare = 15, - .hpd_absent_delay = 185, + .hpd_reliable = 15, + .hpd_absent = 185, .unprepare = 500, }, @@ -1054,7 +1076,8 @@ static const struct panel_desc boe_nv140fhmn49 = { .height = 174, }, .delay = { - .prepare = 210, + /* TODO: should be hpd-absent and no-hpd should be set? */ + .hpd_reliable = 210, .enable = 50, .unprepare = 160, }, @@ -1082,7 +1105,7 @@ static const struct panel_desc innolux_n116bca_ea1 = { .height = 144, }, .delay = { - .hpd_absent_delay = 200, + .hpd_absent = 200, .prepare_to_enable = 80, .unprepare = 500, }, @@ -1165,7 +1188,7 @@ static const struct panel_desc innolux_p120zdg_bf1 = { .height = 169, }, .delay = { - .hpd_absent_delay = 200, + .hpd_absent = 200, .unprepare = 500, }, }; @@ -1192,7 +1215,7 @@ static const struct panel_desc ivo_m133nwf4_r0 = { .height = 165, }, .delay = { - .hpd_absent_delay = 200, + .hpd_absent = 200, .unprepare = 500, }, }; @@ -1219,7 +1242,7 @@ static const struct panel_desc kingdisplay_kd116n21_30nv_a010 = { .height = 144, }, .delay = { - .hpd_absent_delay = 200, + .hpd_absent = 200, }, }; @@ -1345,7 +1368,7 @@ static const struct panel_desc neweast_wjfh116008a = { .height = 150, }, .delay = { - .prepare = 110, + .hpd_reliable = 110, .enable = 20, .unprepare = 500, }, @@ -1439,7 +1462,7 @@ static const struct panel_desc sharp_lq123p1jx31 = { .height = 173, }, .delay = { - .prepare = 110, + .hpd_reliable = 110, .enable = 50, .unprepare = 550, }, @@ -1466,7 +1489,8 @@ static const struct panel_desc starry_kr122ea0sra = { .height = 164, }, .delay = { - .prepare = 10 + 200, + /* TODO: should be hpd-absent and no-hpd should be set? */ + .hpd_reliable = 10 + 200, .enable = 50, .unprepare = 10 + 500, },