mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
drm/rockchip: add dither config for connected panel
Change-Id: Ia57d2ab75718d0a7a8b386a7d50e2e23011baeb2 Signed-off-by: Huang Jiachai <hjc@rock-chips.com>
This commit is contained in:
committed by
Huang, Tao
parent
ef24372b31
commit
80da81fea7
@@ -1036,6 +1036,7 @@ static const struct panel_desc lg_lp079qx1_sp0v = {
|
||||
.width = 129,
|
||||
.height = 171,
|
||||
},
|
||||
.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
|
||||
};
|
||||
|
||||
static const struct drm_display_mode lg_lp097qx1_spa1_mode = {
|
||||
|
||||
@@ -169,6 +169,8 @@ rockchip_dp_drm_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc_state);
|
||||
struct drm_connector *connector = conn_state->connector;
|
||||
struct drm_display_info *info = &connector->display_info;
|
||||
|
||||
/*
|
||||
* The hardware IC designed that VOP must output the RGB10 video
|
||||
@@ -179,6 +181,8 @@ rockchip_dp_drm_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
*/
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_AAAA;
|
||||
s->output_type = DRM_MODE_CONNECTOR_eDP;
|
||||
if (info->num_bus_formats)
|
||||
s->bus_format = info->bus_formats[0];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -973,6 +973,8 @@ dw_mipi_dsi_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
{
|
||||
struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc_state);
|
||||
struct dw_mipi_dsi *dsi = encoder_to_dsi(encoder);
|
||||
struct drm_connector *connector = conn_state->connector;
|
||||
struct drm_display_info *info = &connector->display_info;
|
||||
|
||||
switch (dsi->format) {
|
||||
case MIPI_DSI_FMT_RGB888:
|
||||
@@ -990,6 +992,8 @@ dw_mipi_dsi_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
}
|
||||
|
||||
s->output_type = DRM_MODE_CONNECTOR_DSI;
|
||||
if (info->num_bus_formats)
|
||||
s->bus_format = info->bus_formats[0];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -394,6 +394,7 @@ dw_hdmi_rockchip_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_AAAA;
|
||||
s->output_type = DRM_MODE_CONNECTOR_HDMIA;
|
||||
s->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -589,6 +589,7 @@ inno_hdmi_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_P888;
|
||||
s->output_type = DRM_MODE_CONNECTOR_HDMIA;
|
||||
s->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -73,6 +73,7 @@ struct rockchip_crtc_state {
|
||||
int dsp_layer_sel;
|
||||
int output_type;
|
||||
int output_mode;
|
||||
int bus_format;
|
||||
};
|
||||
|
||||
#define to_rockchip_crtc_state(s) \
|
||||
|
||||
@@ -1412,6 +1412,23 @@ static void vop_crtc_enable(struct drm_crtc *crtc)
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_P888;
|
||||
|
||||
VOP_CTRL_SET(vop, out_mode, s->output_mode);
|
||||
switch (s->bus_format) {
|
||||
case MEDIA_BUS_FMT_RGB565_1X16:
|
||||
val = DITHER_DOWN_EN(1) | DITHER_DOWN_MODE(RGB888_TO_RGB565) |
|
||||
PRE_DITHER_DOWN_EN(1);
|
||||
break;
|
||||
case MEDIA_BUS_FMT_RGB666_1X18:
|
||||
case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
|
||||
val = DITHER_DOWN_EN(1) | DITHER_DOWN_MODE(RGB888_TO_RGB666) |
|
||||
PRE_DITHER_DOWN_EN(1);
|
||||
break;
|
||||
case MEDIA_BUS_FMT_RGB888_1X24:
|
||||
default:
|
||||
val = DITHER_DOWN_EN(0) | PRE_DITHER_DOWN_EN(0);
|
||||
break;
|
||||
}
|
||||
val |= DITHER_DOWN_MODE_SEL(DITHER_DOWN_ALLEGRO);
|
||||
VOP_CTRL_SET(vop, dither_down, val);
|
||||
|
||||
VOP_CTRL_SET(vop, htotal_pw, (htotal << 16) | hsync_len);
|
||||
val = hact_st << 16;
|
||||
|
||||
@@ -378,6 +378,20 @@ enum scale_down_mode {
|
||||
SCALE_DOWN_AVG = 0x1
|
||||
};
|
||||
|
||||
enum dither_down_mode {
|
||||
RGB888_TO_RGB565 = 0x0,
|
||||
RGB888_TO_RGB666 = 0x1
|
||||
};
|
||||
|
||||
enum dither_down_mode_sel {
|
||||
DITHER_DOWN_ALLEGRO = 0x0,
|
||||
DITHER_DOWN_FRC = 0x1
|
||||
};
|
||||
|
||||
#define PRE_DITHER_DOWN_EN(x) ((x) << 0)
|
||||
#define DITHER_DOWN_EN(x) ((x) << 1)
|
||||
#define DITHER_DOWN_MODE(x) ((x) << 2)
|
||||
#define DITHER_DOWN_MODE_SEL(x) ((x) << 3)
|
||||
#define FRAC_16_16(mult, div) (((mult) << 16) / (div))
|
||||
#define SCL_FT_DEFAULT_FIXPOINT_SHIFT 12
|
||||
#define SCL_MAX_VSKIPLINES 4
|
||||
|
||||
@@ -376,9 +376,13 @@ rockchip_lvds_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
struct drm_connector_state *conn_state)
|
||||
{
|
||||
struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc_state);
|
||||
struct drm_connector *connector = conn_state->connector;
|
||||
struct drm_display_info *info = &connector->display_info;
|
||||
|
||||
s->output_mode = ROCKCHIP_OUT_MODE_P888;
|
||||
s->output_type = DRM_MODE_CONNECTOR_LVDS;
|
||||
if (info->num_bus_formats)
|
||||
s->bus_format = info->bus_formats[0];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user