Message ID | 20210409084308.481185-1-narmstrong@baylibre.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | gpu/drm: mediatek: hdmi: check for valid modes on MT8167 | expand |
Hi, Neil: Neil Armstrong <narmstrong@baylibre.com> 於 2021年4月9日 週五 下午4:43寫道: > > On MT8167, only CEA modes and anything using a clock below 148500 is > supported for HDMI. This change adds some checks to make sure the > video format is OK for MT8167. I think this patch should be separated to 3 patches. check CEA mode, check clock, add mt8167 hdmi support. > > Signed-off-by: Fabien Parent <fparent@baylibre.com> > Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> > --- > drivers/gpu/drm/mediatek/mtk_hdmi.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c > index 8ee55f9e2954..991e2e935b93 100644 > --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c > +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c > @@ -148,6 +148,8 @@ struct hdmi_audio_param { > > struct mtk_hdmi_conf { > bool tz_disabled; > + unsigned long max_mode_clock; > + bool cea_modes_only; > }; > > struct mtk_hdmi { > @@ -1259,6 +1261,13 @@ static int mtk_hdmi_conn_mode_valid(struct drm_connector *conn, > return MODE_BAD; > } > > + if (hdmi->conf->cea_modes_only && !drm_match_cea_mode(mode)) > + return MODE_BAD; > + > + if (hdmi->conf->max_mode_clock && > + mode->clock > hdmi->conf->max_mode_clock) > + return MODE_CLOCK_HIGH; > + > if (mode->clock < 27000) > return MODE_CLOCK_LOW; > if (mode->clock > 297000) > @@ -1810,10 +1819,18 @@ static const struct mtk_hdmi_conf mtk_hdmi_conf_mt2701 = { > .tz_disabled = true, > }; > > +static const struct mtk_hdmi_conf mtk_hdmi_conf_mt8167 = { > + .max_mode_clock = 148500, > + .cea_modes_only = true, > +}; > + > static const struct of_device_id mtk_drm_hdmi_of_ids[] = { > { .compatible = "mediatek,mt2701-hdmi", > .data = &mtk_hdmi_conf_mt2701, > }, > + { .compatible = "mediatek,mt8167-hdmi", "mediatek,mt8167-hdmi" does not exist in binding document, so add this to binding document first. In addition, could you also transfer mediatek,hdmi.txt to yaml format? Regards, Chun-Kuang. > + .data = &mtk_hdmi_conf_mt8167, > + }, > { .compatible = "mediatek,mt8173-hdmi", > }, > {} > -- > 2.25.1 >
On 10/04/2021 00:41, Chun-Kuang Hu wrote: > Hi, Neil: > > Neil Armstrong <narmstrong@baylibre.com> 於 2021年4月9日 週五 下午4:43寫道: >> >> On MT8167, only CEA modes and anything using a clock below 148500 is >> supported for HDMI. This change adds some checks to make sure the >> video format is OK for MT8167. > > I think this patch should be separated to 3 patches. check CEA mode, > check clock, add mt8167 hdmi support. Ok > >> >> Signed-off-by: Fabien Parent <fparent@baylibre.com> >> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> >> --- >> drivers/gpu/drm/mediatek/mtk_hdmi.c | 17 +++++++++++++++++ >> 1 file changed, 17 insertions(+) >> >> diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c >> index 8ee55f9e2954..991e2e935b93 100644 >> --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c >> +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c >> @@ -148,6 +148,8 @@ struct hdmi_audio_param { >> >> struct mtk_hdmi_conf { >> bool tz_disabled; >> + unsigned long max_mode_clock; >> + bool cea_modes_only; >> }; >> >> struct mtk_hdmi { >> @@ -1259,6 +1261,13 @@ static int mtk_hdmi_conn_mode_valid(struct drm_connector *conn, >> return MODE_BAD; >> } >> >> + if (hdmi->conf->cea_modes_only && !drm_match_cea_mode(mode)) >> + return MODE_BAD; >> + >> + if (hdmi->conf->max_mode_clock && >> + mode->clock > hdmi->conf->max_mode_clock) >> + return MODE_CLOCK_HIGH; >> + >> if (mode->clock < 27000) >> return MODE_CLOCK_LOW; >> if (mode->clock > 297000) >> @@ -1810,10 +1819,18 @@ static const struct mtk_hdmi_conf mtk_hdmi_conf_mt2701 = { >> .tz_disabled = true, >> }; >> >> +static const struct mtk_hdmi_conf mtk_hdmi_conf_mt8167 = { >> + .max_mode_clock = 148500, >> + .cea_modes_only = true, >> +}; >> + >> static const struct of_device_id mtk_drm_hdmi_of_ids[] = { >> { .compatible = "mediatek,mt2701-hdmi", >> .data = &mtk_hdmi_conf_mt2701, >> }, >> + { .compatible = "mediatek,mt8167-hdmi", > > "mediatek,mt8167-hdmi" does not exist in binding document, so add this > to binding document first. > In addition, could you also transfer mediatek,hdmi.txt to yaml format? Sure Thanks, Neil > > Regards, > Chun-Kuang. > >> + .data = &mtk_hdmi_conf_mt8167, >> + }, >> { .compatible = "mediatek,mt8173-hdmi", >> }, >> {} >> -- >> 2.25.1 >>
diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c index 8ee55f9e2954..991e2e935b93 100644 --- a/drivers/gpu/drm/mediatek/mtk_hdmi.c +++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c @@ -148,6 +148,8 @@ struct hdmi_audio_param { struct mtk_hdmi_conf { bool tz_disabled; + unsigned long max_mode_clock; + bool cea_modes_only; }; struct mtk_hdmi { @@ -1259,6 +1261,13 @@ static int mtk_hdmi_conn_mode_valid(struct drm_connector *conn, return MODE_BAD; } + if (hdmi->conf->cea_modes_only && !drm_match_cea_mode(mode)) + return MODE_BAD; + + if (hdmi->conf->max_mode_clock && + mode->clock > hdmi->conf->max_mode_clock) + return MODE_CLOCK_HIGH; + if (mode->clock < 27000) return MODE_CLOCK_LOW; if (mode->clock > 297000) @@ -1810,10 +1819,18 @@ static const struct mtk_hdmi_conf mtk_hdmi_conf_mt2701 = { .tz_disabled = true, }; +static const struct mtk_hdmi_conf mtk_hdmi_conf_mt8167 = { + .max_mode_clock = 148500, + .cea_modes_only = true, +}; + static const struct of_device_id mtk_drm_hdmi_of_ids[] = { { .compatible = "mediatek,mt2701-hdmi", .data = &mtk_hdmi_conf_mt2701, }, + { .compatible = "mediatek,mt8167-hdmi", + .data = &mtk_hdmi_conf_mt8167, + }, { .compatible = "mediatek,mt8173-hdmi", }, {}