mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
drm/bridge: dw-hdmi-qp: Rework AVI InfoFrame handler
Make use of the recently introduced dw_hdmi_qp_write_infoframe() helper to simplify the writing of the Auxiliary Video InfoFrame (AVI) packet header and body registers. Moreover, since now having dedicated callbacks per InfoFrame type, move the implementation to dw_hdmi_qp_bridge_write_avi_infoframe() and drop dw_hdmi_qp_config_avi_infoframe(). While at it, also discard the superfluous infoframe size verification. Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> Reviewed-by: Maxime Ripard <mripard@kernel.org> Reviewed-by: Daniel Stone <daniels@collabora.com> Link: https://patch.msgid.link/20260129-dw-hdmi-qp-iframe-v2-3-0157ad05232c@collabora.com Signed-off-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
1df09ea64b
commit
1933d1508a
|
|
@ -748,43 +748,6 @@ static struct i2c_adapter *dw_hdmi_qp_i2c_adapter(struct dw_hdmi_qp *hdmi)
|
|||
return adap;
|
||||
}
|
||||
|
||||
static int dw_hdmi_qp_config_avi_infoframe(struct dw_hdmi_qp *hdmi,
|
||||
const u8 *buffer, size_t len)
|
||||
{
|
||||
u32 val, i, j;
|
||||
|
||||
if (len != HDMI_INFOFRAME_SIZE(AVI)) {
|
||||
dev_err(hdmi->dev, "failed to configure avi infoframe\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* DW HDMI QP IP uses a different byte format from standard AVI info
|
||||
* frames, though generally the bits are in the correct bytes.
|
||||
*/
|
||||
val = buffer[1] << 8 | buffer[2] << 16;
|
||||
dw_hdmi_qp_write(hdmi, val, PKT_AVI_CONTENTS0);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (j = 0; j < 4; j++) {
|
||||
if (i * 4 + j >= 14)
|
||||
break;
|
||||
if (!j)
|
||||
val = buffer[i * 4 + j + 3];
|
||||
val |= buffer[i * 4 + j + 3] << (8 * j);
|
||||
}
|
||||
|
||||
dw_hdmi_qp_write(hdmi, val, PKT_AVI_CONTENTS1 + i * 4);
|
||||
}
|
||||
|
||||
dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_AVI_FIELDRATE, PKTSCHED_PKT_CONFIG1);
|
||||
|
||||
dw_hdmi_qp_mod(hdmi, PKTSCHED_AVI_TX_EN | PKTSCHED_GCP_TX_EN,
|
||||
PKTSCHED_AVI_TX_EN | PKTSCHED_GCP_TX_EN, PKTSCHED_PKT_EN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dw_hdmi_qp_config_drm_infoframe(struct dw_hdmi_qp *hdmi,
|
||||
const u8 *buffer, size_t len)
|
||||
{
|
||||
|
|
@ -1041,7 +1004,13 @@ static int dw_hdmi_qp_bridge_write_avi_infoframe(struct drm_bridge *bridge,
|
|||
|
||||
dw_hdmi_qp_bridge_clear_avi_infoframe(bridge);
|
||||
|
||||
return dw_hdmi_qp_config_avi_infoframe(hdmi, buffer, len);
|
||||
dw_hdmi_qp_write_infoframe(hdmi, buffer, len, PKT_AVI_CONTENTS0);
|
||||
|
||||
dw_hdmi_qp_mod(hdmi, 0, PKTSCHED_AVI_FIELDRATE, PKTSCHED_PKT_CONFIG1);
|
||||
dw_hdmi_qp_mod(hdmi, PKTSCHED_AVI_TX_EN | PKTSCHED_GCP_TX_EN,
|
||||
PKTSCHED_AVI_TX_EN | PKTSCHED_GCP_TX_EN, PKTSCHED_PKT_EN);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dw_hdmi_qp_bridge_write_hdmi_infoframe(struct drm_bridge *bridge,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user