Skip to content

Commit 3c5f283

Browse files
committed
drm/rockchip: vop: update BCSH process precision
Change-Id: Ib3d6e51b17def968656bbd625afd5e55f355011f Signed-off-by: Sandy Huang <hjc@rock-chips.com>
1 parent 2c1b0dd commit 3c5f283

2 files changed

Lines changed: 115 additions & 24 deletions

File tree

drivers/gpu/drm/rockchip/rockchip_drm_vop.c

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3376,28 +3376,48 @@ static void vop_tv_config_update(struct drm_crtc *crtc,
33763376
}
33773377

33783378
if (vop_data->feature & VOP_FEATURE_OUTPUT_10BIT)
3379-
brightness = interpolate(0, -128, 100, 127,
3380-
s->tv_state->brightness);
3379+
brightness = interpolate(0, -128, 100, 127, s->tv_state->brightness);
3380+
else if (VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 6) /* px30 vopb */
3381+
brightness = interpolate(0, -64, 100, 63, s->tv_state->brightness);
33813382
else
3382-
brightness = interpolate(0, -32, 100, 31,
3383-
s->tv_state->brightness);
3384-
contrast = interpolate(0, 0, 100, 511, s->tv_state->contrast);
3385-
saturation = interpolate(0, 0, 100, 511, s->tv_state->saturation);
3386-
hue = interpolate(0, -30, 100, 30, s->tv_state->hue);
3383+
brightness = interpolate(0, -32, 100, 31, s->tv_state->brightness);
3384+
3385+
if ((VOP_MAJOR(vop->version) == 3) ||
3386+
(VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 6)) { /* px30 vopb */
3387+
contrast = interpolate(0, 0, 100, 511, s->tv_state->contrast);
3388+
saturation = interpolate(0, 0, 100, 511, s->tv_state->saturation);
3389+
/*
3390+
* a:[-30~0]:
3391+
* sin_hue = 0x100 - sin(a)*256;
3392+
* cos_hue = cos(a)*256;
3393+
* a:[0~30]
3394+
* sin_hue = sin(a)*256;
3395+
* cos_hue = cos(a)*256;
3396+
*/
3397+
hue = interpolate(0, -30, 100, 30, s->tv_state->hue);
3398+
sin_hue = fixp_sin32(hue) >> 23;
3399+
cos_hue = fixp_cos32(hue) >> 23;
3400+
VOP_CTRL_SET(vop, bcsh_sat_con, saturation * contrast / 0x100);
3401+
3402+
} else {
3403+
contrast = interpolate(0, 0, 100, 255, s->tv_state->contrast);
3404+
saturation = interpolate(0, 0, 100, 255, s->tv_state->saturation);
3405+
/*
3406+
* a:[-30~0]:
3407+
* sin_hue = 0x100 - sin(a)*128;
3408+
* cos_hue = cos(a)*128;
3409+
* a:[0~30]
3410+
* sin_hue = sin(a)*128;
3411+
* cos_hue = cos(a)*128;
3412+
*/
3413+
hue = interpolate(0, -30, 100, 30, s->tv_state->hue);
3414+
sin_hue = fixp_sin32(hue) >> 24;
3415+
cos_hue = fixp_cos32(hue) >> 24;
3416+
VOP_CTRL_SET(vop, bcsh_sat_con, saturation * contrast / 0x80);
3417+
}
33873418

3388-
/*
3389-
* a:[-30~0]:
3390-
* sin_hue = 0x100 - sin(a)*256;
3391-
* cos_hue = cos(a)*256;
3392-
* a:[0~30]
3393-
* sin_hue = sin(a)*256;
3394-
* cos_hue = cos(a)*256;
3395-
*/
3396-
sin_hue = fixp_sin32(hue) >> 23;
3397-
cos_hue = fixp_cos32(hue) >> 23;
33983419
VOP_CTRL_SET(vop, bcsh_brightness, brightness);
33993420
VOP_CTRL_SET(vop, bcsh_contrast, contrast);
3400-
VOP_CTRL_SET(vop, bcsh_sat_con, saturation * contrast / 0x100);
34013421
VOP_CTRL_SET(vop, bcsh_sin_hue, sin_hue);
34023422
VOP_CTRL_SET(vop, bcsh_cos_hue, cos_hue);
34033423
VOP_CTRL_SET(vop, bcsh_out_mode, BCSH_OUT_MODE_NORMAL_VIDEO);

drivers/gpu/drm/rockchip/rockchip_vop_reg.c

Lines changed: 77 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1653,11 +1653,11 @@ static const struct vop_ctrl rk3308_ctrl_data = {
16531653
.bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6),
16541654
.bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7),
16551655
.bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0),
1656-
.bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 0),
1657-
.bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 8),
1658-
.bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3ff, 20),
1659-
.bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 0),
1660-
.bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0x1ff, 16),
1656+
.bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3f, 0),
1657+
.bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 8),
1658+
.bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 16),
1659+
.bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0xff, 0),
1660+
.bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0xff, 8),
16611661

16621662
.mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0),
16631663
.mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6),
@@ -1713,11 +1713,82 @@ static const struct vop_grf_ctrl rk1808_vop_lite_grf_ctrl = {
17131713
.grf_dclk_inv = VOP_REG(RK1808_GRF_PD_VO_CON1, 0x1, 4),
17141714
};
17151715

1716+
static const struct vop_ctrl rk1808_ctrl_data = {
1717+
.standby = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 1),
1718+
.axi_outstanding_max_num = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1f, 16),
1719+
.axi_max_outstanding_en = VOP_REG(RK3366_LIT_SYS_CTRL1, 0x1, 12),
1720+
.htotal_pw = VOP_REG(RK3366_LIT_DSP_HTOTAL_HS_END, 0x0fff0fff, 0),
1721+
.hact_st_end = VOP_REG(RK3366_LIT_DSP_HACT_ST_END, 0x0fff0fff, 0),
1722+
.vtotal_pw = VOP_REG(RK3366_LIT_DSP_VTOTAL_VS_END, 0x0fff0fff, 0),
1723+
.vact_st_end = VOP_REG(RK3366_LIT_DSP_VACT_ST_END, 0x0fff0fff, 0),
1724+
.vact_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VACT_ST_END_F1, 0x0fff0fff, 0),
1725+
.vs_st_end_f1 = VOP_REG(RK3366_LIT_DSP_VS_ST_END_F1, 0x0fff0fff, 0),
1726+
.dsp_interlace = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 0),
1727+
.global_regdone_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 13),
1728+
.auto_gate_en = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 0),
1729+
.dsp_layer_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xff, 22),
1730+
.overlay_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 4),
1731+
.core_dclk_div = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 13),
1732+
.dclk_ddr = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 14),
1733+
.rgb_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 0),
1734+
.rgb_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 2),
1735+
.hdmi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 8),
1736+
.hdmi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 10),
1737+
.lvds_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 16),
1738+
.lvds_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 18),
1739+
.mipi_en = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 24),
1740+
.mipi_pin_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x7, 26),
1741+
.mipi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 25),
1742+
.lvds_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 17),
1743+
.hdmi_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 9),
1744+
.rgb_dclk_pol = VOP_REG(RK3366_LIT_DSP_CTRL0, 0x1, 1),
1745+
.dither_down_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 8),
1746+
.dither_down_sel = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 7),
1747+
.dither_down_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 6),
1748+
.dither_up_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 2),
1749+
.dsp_data_swap = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1f, 9),
1750+
.dsp_ccir656_avg = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 5),
1751+
.dsp_black = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 15),
1752+
.dsp_blank = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 14),
1753+
.dsp_outzero = VOP_REG(RK3366_LIT_SYS_CTRL2, 0x1, 3),
1754+
.dsp_lut_en = VOP_REG(RK3366_LIT_DSP_CTRL2, 0x1, 5),
1755+
.out_mode = VOP_REG(RK3366_LIT_DSP_CTRL2, 0xf, 16),
1756+
.dsp_background = VOP_REG(RK3366_LIT_DSP_BG, 0x00ffffff, 0),
1757+
.cfg_done = VOP_REG(RK3366_LIT_REG_CFG_DONE, 0x1, 0),
1758+
1759+
.bcsh_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 0),
1760+
.bcsh_r2y_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 1),
1761+
.bcsh_out_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 2),
1762+
.bcsh_y2r_csc_mode = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x3, 4),
1763+
.bcsh_y2r_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 6),
1764+
.bcsh_r2y_en = VOP_REG(RK3366_LIT_BCSH_CTRL, 0x1, 7),
1765+
.bcsh_color_bar = VOP_REG(RK3366_LIT_BCSH_COL_BAR, 0xffffff, 0),
1766+
.bcsh_brightness = VOP_REG(RK3366_LIT_BCSH_BCS, 0x3f, 0),
1767+
.bcsh_contrast = VOP_REG(RK3366_LIT_BCSH_BCS, 0xff, 8),
1768+
.bcsh_sat_con = VOP_REG(RK3366_LIT_BCSH_BCS, 0x1ff, 16),
1769+
.bcsh_sin_hue = VOP_REG(RK3366_LIT_BCSH_H, 0xff, 0),
1770+
.bcsh_cos_hue = VOP_REG(RK3366_LIT_BCSH_H, 0xff, 8),
1771+
1772+
.mcu_pix_total = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 0),
1773+
.mcu_cs_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 6),
1774+
.mcu_cs_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 10),
1775+
.mcu_rw_pst = VOP_REG(RK3366_LIT_MCU_CTRL, 0xf, 16),
1776+
.mcu_rw_pend = VOP_REG(RK3366_LIT_MCU_CTRL, 0x3f, 20),
1777+
.mcu_clk_sel = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 26),
1778+
.mcu_hold_mode = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 27),
1779+
.mcu_frame_st = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 28),
1780+
.mcu_rs = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 29),
1781+
.mcu_bypass = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 30),
1782+
.mcu_type = VOP_REG(RK3366_LIT_MCU_CTRL, 0x1, 31),
1783+
.mcu_rw_bypass_port = VOP_REG(RK3366_LIT_MCU_RW_BYPASS_PORT,
1784+
0xffffffff, 0),
1785+
};
1786+
17161787
static const struct vop_data rk1808_vop_lit = {
17171788
.version = VOP_VERSION(2, 8),
17181789
.max_input = {1920, 8192},
17191790
.max_output = {1920, 1080},
1720-
.ctrl = &px30_ctrl_data,
1791+
.ctrl = &rk1808_ctrl_data,
17211792
.intr = &rk3366_lit_intr,
17221793
.grf_ctrl = &rk1808_vop_lite_grf_ctrl,
17231794
.win = px30_vop_lit_win_data,

0 commit comments

Comments
 (0)