drm/rockchip: add output_if check for display interfaces
Signed-off-by: Damon Ding <damon.ding@rock-chips.com> Change-Id: I3dc3795ada17c3e1a3cd84b37b9e81923a1d7f1b
This commit is contained in:
@ -729,6 +729,8 @@ out:
|
||||
static void cdn_dp_encoder_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
struct cdn_dp_device *dp = encoder_to_dp(encoder);
|
||||
struct drm_crtc *crtc = encoder->crtc;
|
||||
struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc->state);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&dp->lock);
|
||||
@ -752,6 +754,8 @@ static void cdn_dp_encoder_disable(struct drm_encoder *encoder)
|
||||
*/
|
||||
if (!dp->connected && cdn_dp_connected_port(dp))
|
||||
schedule_work(&dp->event_work);
|
||||
|
||||
s->output_if &= ~VOP_OUTPUT_IF_DP0;
|
||||
}
|
||||
|
||||
static int cdn_dp_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
@ -773,6 +777,7 @@ static int cdn_dp_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
}
|
||||
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_AAAA;
|
||||
s->output_if |= VOP_OUTPUT_IF_DP0;
|
||||
s->output_type = DRM_MODE_CONNECTOR_DisplayPort;
|
||||
s->tv_state = &conn_state->tv;
|
||||
s->eotf = TRADITIONAL_GAMMA_SDR;
|
||||
|
||||
@ -1091,6 +1091,8 @@ static void dw_mipi_dsi_post_disable(struct dw_mipi_dsi *dsi)
|
||||
static void dw_mipi_dsi_encoder_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
struct dw_mipi_dsi *dsi = encoder_to_dsi(encoder);
|
||||
struct drm_crtc *crtc = encoder->crtc;
|
||||
struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc->state);
|
||||
|
||||
if (dsi->panel)
|
||||
drm_panel_disable(dsi->panel);
|
||||
@ -1105,6 +1107,11 @@ static void dw_mipi_dsi_encoder_disable(struct drm_encoder *encoder)
|
||||
|
||||
if (IS_ENABLED(CONFIG_CPU_RK3568) && dsi->pdata->soc_type == RK3568)
|
||||
vop2_standby(encoder->crtc, 0);
|
||||
|
||||
if (dsi->slave)
|
||||
s->output_if &= ~(VOP_OUTPUT_IF_MIPI1 | VOP_OUTPUT_IF_MIPI0);
|
||||
else
|
||||
s->output_if &= ~(dsi->id ? VOP_OUTPUT_IF_MIPI1 : VOP_OUTPUT_IF_MIPI0);
|
||||
}
|
||||
|
||||
static void dw_mipi_dsi_vop_routing(struct dw_mipi_dsi *dsi)
|
||||
|
||||
@ -159,6 +159,7 @@ struct post_csc {
|
||||
#define VOP_OUTPUT_IF_DP1 BIT(10)
|
||||
#define VOP_OUTPUT_IF_HDMI0 BIT(11)
|
||||
#define VOP_OUTPUT_IF_HDMI1 BIT(12)
|
||||
#define VOP_OUTPUT_IF_TV BIT(13)
|
||||
|
||||
struct rockchip_crtc_state {
|
||||
struct drm_crtc_state base;
|
||||
|
||||
@ -421,6 +421,8 @@ static void rockchip_tve_encoder_enable(struct drm_encoder *encoder)
|
||||
static void rockchip_tve_encoder_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
struct rockchip_tve *tve = encoder_to_tve(encoder);
|
||||
struct drm_crtc *crtc = encoder->crtc;
|
||||
struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc->state);
|
||||
|
||||
mutex_lock(&tve->suspend_lock);
|
||||
|
||||
@ -428,6 +430,8 @@ static void rockchip_tve_encoder_disable(struct drm_encoder *encoder)
|
||||
cvbs_set_disable(tve);
|
||||
|
||||
mutex_unlock(&tve->suspend_lock);
|
||||
|
||||
s->output_if &= ~VOP_OUTPUT_IF_TV;
|
||||
}
|
||||
|
||||
static void rockchip_tve_encoder_mode_set(struct drm_encoder *encoder,
|
||||
@ -483,6 +487,8 @@ rockchip_tve_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
*/
|
||||
if (tve->soc_type == SOC_RK3528)
|
||||
s->output_if |= VOP_OUTPUT_IF_BT656;
|
||||
else
|
||||
s->output_if |= VOP_OUTPUT_IF_TV;
|
||||
s->color_space = V4L2_COLORSPACE_SMPTE170M;
|
||||
s->tv_state = &conn_state->tv;
|
||||
|
||||
|
||||
@ -173,6 +173,8 @@ static void rockchip_rgb_encoder_enable(struct drm_encoder *encoder)
|
||||
static void rockchip_rgb_encoder_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
struct rockchip_rgb *rgb = encoder_to_rgb(encoder);
|
||||
struct drm_crtc *crtc = encoder->crtc;
|
||||
struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc->state);
|
||||
|
||||
if (rgb->panel) {
|
||||
drm_panel_disable(rgb->panel);
|
||||
@ -186,6 +188,13 @@ static void rockchip_rgb_encoder_disable(struct drm_encoder *encoder)
|
||||
rgb->funcs->disable(rgb);
|
||||
|
||||
pinctrl_pm_select_sleep_state(rgb->dev);
|
||||
|
||||
if (s->output_if & VOP_OUTPUT_IF_RGB)
|
||||
s->output_if &= ~VOP_OUTPUT_IF_RGB;
|
||||
else if (s->output_if & VOP_OUTPUT_IF_BT656)
|
||||
s->output_if &= ~VOP_OUTPUT_IF_BT656;
|
||||
else if (s->output_if & VOP_OUTPUT_IF_BT1120)
|
||||
s->output_if &= ~VOP_OUTPUT_IF_BT1120;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -205,39 +214,39 @@ rockchip_rgb_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
switch (s->bus_format) {
|
||||
case MEDIA_BUS_FMT_RGB666_1X18:
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_P666;
|
||||
s->output_if = VOP_OUTPUT_IF_RGB;
|
||||
s->output_if |= VOP_OUTPUT_IF_RGB;
|
||||
break;
|
||||
case MEDIA_BUS_FMT_RGB565_1X16:
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_P565;
|
||||
s->output_if = VOP_OUTPUT_IF_RGB;
|
||||
s->output_if |= VOP_OUTPUT_IF_RGB;
|
||||
break;
|
||||
case MEDIA_BUS_FMT_SRGB888_3X8:
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_S888;
|
||||
s->output_if = VOP_OUTPUT_IF_RGB;
|
||||
s->output_if |= VOP_OUTPUT_IF_RGB;
|
||||
break;
|
||||
case MEDIA_BUS_FMT_SRGB888_DUMMY_4X8:
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_S888_DUMMY;
|
||||
s->output_if = VOP_OUTPUT_IF_RGB;
|
||||
s->output_if |= VOP_OUTPUT_IF_RGB;
|
||||
break;
|
||||
case MEDIA_BUS_FMT_YUYV8_2X8:
|
||||
case MEDIA_BUS_FMT_YVYU8_2X8:
|
||||
case MEDIA_BUS_FMT_UYVY8_2X8:
|
||||
case MEDIA_BUS_FMT_VYUY8_2X8:
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_BT656;
|
||||
s->output_if = VOP_OUTPUT_IF_BT656;
|
||||
s->output_if |= VOP_OUTPUT_IF_BT656;
|
||||
break;
|
||||
case MEDIA_BUS_FMT_YUYV8_1X16:
|
||||
case MEDIA_BUS_FMT_YVYU8_1X16:
|
||||
case MEDIA_BUS_FMT_UYVY8_1X16:
|
||||
case MEDIA_BUS_FMT_VYUY8_1X16:
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_BT1120;
|
||||
s->output_if = VOP_OUTPUT_IF_BT1120;
|
||||
s->output_if |= VOP_OUTPUT_IF_BT1120;
|
||||
break;
|
||||
case MEDIA_BUS_FMT_RGB888_1X24:
|
||||
case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
|
||||
default:
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_P888;
|
||||
s->output_if = VOP_OUTPUT_IF_RGB;
|
||||
s->output_if |= VOP_OUTPUT_IF_RGB;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user