mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
drm/rockchip: inno_hdmi: Move infoframe disable to separate function
The code to upload infoframes to the controller uses a weird construct which, based on the previous function call return code, will either disable or enable that infoframe. In order to get rid of that argument, let's split the function to disable the infoframe into a separate function and make it obvious what we are doing in the error path. Signed-off-by: Maxime Ripard <mripard@kernel.org> Tested-by: Alex Bee <knaerzche@gmail.com> Signed-off-by: Alex Bee <knaerzche@gmail.com> Signed-off-by: Heiko Stuebner <heiko@sntech.de> Link: https://patchwork.freedesktop.org/patch/msgid/20231222174220.55249-15-knaerzche@gmail.com
This commit is contained in:
parent
aa4f96e2de
commit
cc9ec38cb2
@ -204,10 +204,25 @@ static void inno_hdmi_reset(struct inno_hdmi *hdmi)
|
||||
inno_hdmi_set_pwr_mode(hdmi, NORMAL);
|
||||
}
|
||||
|
||||
static int inno_hdmi_upload_frame(struct inno_hdmi *hdmi, int setup_rc,
|
||||
static void inno_hdmi_disable_frame(struct inno_hdmi *hdmi, u32 frame_index)
|
||||
{
|
||||
struct drm_connector *connector = &hdmi->connector;
|
||||
|
||||
if (frame_index != INFOFRAME_AVI) {
|
||||
drm_err(connector->dev,
|
||||
"Unsupported infoframe type: %u\n", frame_index);
|
||||
return;
|
||||
}
|
||||
|
||||
hdmi_writeb(hdmi, HDMI_CONTROL_PACKET_BUF_INDEX, frame_index);
|
||||
}
|
||||
|
||||
static int inno_hdmi_upload_frame(struct inno_hdmi *hdmi,
|
||||
union hdmi_infoframe *frame, u32 frame_index)
|
||||
{
|
||||
struct drm_connector *connector = &hdmi->connector;
|
||||
u8 packed_frame[HDMI_MAXIMUM_INFO_FRAME_SIZE];
|
||||
ssize_t rc, i;
|
||||
|
||||
if (frame_index != INFOFRAME_AVI) {
|
||||
drm_err(connector->dev,
|
||||
@ -215,23 +230,18 @@ static int inno_hdmi_upload_frame(struct inno_hdmi *hdmi, int setup_rc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
hdmi_writeb(hdmi, HDMI_CONTROL_PACKET_BUF_INDEX, frame_index);
|
||||
inno_hdmi_disable_frame(hdmi, frame_index);
|
||||
|
||||
if (setup_rc >= 0) {
|
||||
u8 packed_frame[HDMI_MAXIMUM_INFO_FRAME_SIZE];
|
||||
ssize_t rc, i;
|
||||
rc = hdmi_infoframe_pack(frame, packed_frame,
|
||||
sizeof(packed_frame));
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
rc = hdmi_infoframe_pack(frame, packed_frame,
|
||||
sizeof(packed_frame));
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
for (i = 0; i < rc; i++)
|
||||
hdmi_writeb(hdmi, HDMI_CONTROL_PACKET_ADDR + i,
|
||||
packed_frame[i]);
|
||||
|
||||
for (i = 0; i < rc; i++)
|
||||
hdmi_writeb(hdmi, HDMI_CONTROL_PACKET_ADDR + i,
|
||||
packed_frame[i]);
|
||||
}
|
||||
|
||||
return setup_rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int inno_hdmi_config_video_avi(struct inno_hdmi *hdmi,
|
||||
@ -243,6 +253,10 @@ static int inno_hdmi_config_video_avi(struct inno_hdmi *hdmi,
|
||||
rc = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
|
||||
&hdmi->connector,
|
||||
mode);
|
||||
if (rc) {
|
||||
inno_hdmi_disable_frame(hdmi, INFOFRAME_AVI);
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (hdmi->hdmi_data.enc_out_format == HDMI_COLORSPACE_YUV444)
|
||||
frame.avi.colorspace = HDMI_COLORSPACE_YUV444;
|
||||
@ -251,7 +265,7 @@ static int inno_hdmi_config_video_avi(struct inno_hdmi *hdmi,
|
||||
else
|
||||
frame.avi.colorspace = HDMI_COLORSPACE_RGB;
|
||||
|
||||
return inno_hdmi_upload_frame(hdmi, rc, &frame, INFOFRAME_AVI);
|
||||
return inno_hdmi_upload_frame(hdmi, &frame, INFOFRAME_AVI);
|
||||
}
|
||||
|
||||
static int inno_hdmi_config_video_csc(struct inno_hdmi *hdmi)
|
||||
|
Loading…
Reference in New Issue
Block a user