Lines Matching +full:dsp +full:- +full:standby

2  * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd
4 * SPDX-License-Identifier: GPL-2.0+
16 #include <linux/media-bus-format.h>
31 return us * mode->clock / mode->htotal / 1000; in us_to_vertical_line()
36 if (dm_gpio_is_valid(&vop->mcu_rs_gpio)) in set_vop_mcu_rs()
37 dm_gpio_set_value(&vop->mcu_rs_gpio, v); in set_vop_mcu_rs()
115 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_vop_init_gamma()
116 struct connector_state *conn_state = &state->conn_state; in rockchip_vop_init_gamma()
117 u32 *lut = conn_state->gamma.lut; in rockchip_vop_init_gamma()
122 if (!conn_state->gamma.lut) in rockchip_vop_init_gamma()
125 i = dev_read_stringlist_search(crtc_state->dev, "reg-names", "gamma_lut"); in rockchip_vop_init_gamma()
130 lut_regs = (u32 *)dev_read_addr_size(crtc_state->dev, "reg", &lut_size); in rockchip_vop_init_gamma()
141 if (conn_state->gamma.size != lut_len) { in rockchip_vop_init_gamma()
142 int size = conn_state->gamma.size; in rockchip_vop_init_gamma()
167 struct connector_state *conn_state = &state->conn_state; in vop_post_config()
168 struct drm_display_mode *mode = &conn_state->mode; in vop_post_config()
169 u16 vtotal = mode->crtc_vtotal; in vop_post_config()
170 u16 hact_st = mode->crtc_htotal - mode->crtc_hsync_start; in vop_post_config()
171 u16 vact_st = mode->crtc_vtotal - mode->crtc_vsync_start; in vop_post_config()
172 u16 hdisplay = mode->crtc_hdisplay; in vop_post_config()
173 u16 vdisplay = mode->crtc_vdisplay; in vop_post_config()
174 …u16 hsize = hdisplay * (conn_state->overscan.left_margin + conn_state->overscan.right_margin) / 20… in vop_post_config()
175 …u16 vsize = vdisplay * (conn_state->overscan.top_margin + conn_state->overscan.bottom_margin) / 20… in vop_post_config()
179 if (mode->flags & DRM_MODE_FLAG_INTERLACE) in vop_post_config()
182 hact_st += hdisplay * (100 - conn_state->overscan.left_margin) / 200; in vop_post_config()
188 vact_st += vdisplay * (100 - conn_state->overscan.top_margin) / 200; in vop_post_config()
201 if (mode->flags & DRM_MODE_FLAG_INTERLACE) { in vop_post_config()
212 struct crtc_state *crtc_state = &state->crtc_state; in vop_mcu_mode()
218 VOP_CTRL_SET(vop, mcu_pix_total, crtc_state->mcu_timing.mcu_pix_total); in vop_mcu_mode()
219 VOP_CTRL_SET(vop, mcu_cs_pst, crtc_state->mcu_timing.mcu_cs_pst); in vop_mcu_mode()
220 VOP_CTRL_SET(vop, mcu_cs_pend, crtc_state->mcu_timing.mcu_cs_pend); in vop_mcu_mode()
221 VOP_CTRL_SET(vop, mcu_rw_pst, crtc_state->mcu_timing.mcu_rw_pst); in vop_mcu_mode()
222 VOP_CTRL_SET(vop, mcu_rw_pend, crtc_state->mcu_timing.mcu_rw_pend); in vop_mcu_mode()
227 const struct vop_data *vop_data = state->crtc_state.crtc->data; in rockchip_vop_preinit()
229 state->crtc_state.max_output = vop_data->max_output; in rockchip_vop_preinit()
236 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_vop_init()
237 struct connector_state *conn_state = &state->conn_state; in rockchip_vop_init()
238 struct drm_display_mode *mode = &conn_state->mode; in rockchip_vop_init()
239 const struct rockchip_crtc *crtc = crtc_state->crtc; in rockchip_vop_init()
240 const struct vop_data *vop_data = crtc->data; in rockchip_vop_init()
242 u16 hsync_len = mode->crtc_hsync_end - mode->crtc_hsync_start; in rockchip_vop_init()
243 u16 hdisplay = mode->crtc_hdisplay; in rockchip_vop_init()
244 u16 htotal = mode->crtc_htotal; in rockchip_vop_init()
245 u16 hact_st = mode->crtc_htotal - mode->crtc_hsync_start; in rockchip_vop_init()
247 u16 vdisplay = mode->crtc_vdisplay; in rockchip_vop_init()
248 u16 vtotal = mode->crtc_vtotal; in rockchip_vop_init()
249 u16 vsync_len = mode->crtc_vsync_end - mode->crtc_vsync_start; in rockchip_vop_init()
250 u16 vact_st = mode->crtc_vtotal - mode->crtc_vsync_start; in rockchip_vop_init()
261 return -ENOMEM; in rockchip_vop_init()
264 crtc_state->private = vop; in rockchip_vop_init()
265 vop->regs = dev_read_addr_ptr(crtc_state->dev); in rockchip_vop_init()
266 vop->regsbak = malloc(vop_data->reg_len); in rockchip_vop_init()
267 vop->win = vop_data->win; in rockchip_vop_init()
268 vop->win_offset = vop_data->win_offset; in rockchip_vop_init()
269 vop->ctrl = vop_data->ctrl; in rockchip_vop_init()
270 vop->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); in rockchip_vop_init()
271 if (vop->grf <= 0) in rockchip_vop_init()
273 __func__, vop->grf); in rockchip_vop_init()
275 vop->grf_ctrl = vop_data->grf_ctrl; in rockchip_vop_init()
276 vop->line_flag = vop_data->line_flag; in rockchip_vop_init()
277 vop->csc_table = vop_data->csc_table; in rockchip_vop_init()
278 vop->win_csc = vop_data->win_csc; in rockchip_vop_init()
279 vop->version = vop_data->version; in rockchip_vop_init()
281 /* Process 'assigned-{clocks/clock-parents/clock-rates}' properties */ in rockchip_vop_init()
282 ret = clk_set_defaults(crtc_state->dev); in rockchip_vop_init()
286 ret = clk_get_by_name(crtc_state->dev, "dclk_vop", &dclk); in rockchip_vop_init()
288 ret = clk_set_rate(&dclk, mode->clock * 1000); in rockchip_vop_init()
294 memcpy(vop->regsbak, vop->regs, vop_data->reg_len); in rockchip_vop_init()
298 ret = gpio_request_by_name(crtc_state->dev, "mcu-rs-gpios", in rockchip_vop_init()
299 0, &vop->mcu_rs_gpio, GPIOD_IS_OUT); in rockchip_vop_init()
300 if (ret && ret != -ENOENT) in rockchip_vop_init()
314 dclk_inv = (conn_state->bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE) ? 1 : 0; in rockchip_vop_init()
316 if ((VOP_MAJOR(vop->version) == 2 && VOP_MINOR(vop->version) == 12)) in rockchip_vop_init()
321 val |= (mode->flags & DRM_MODE_FLAG_NHSYNC) ? 0 : 1; in rockchip_vop_init()
322 val |= (mode->flags & DRM_MODE_FLAG_NVSYNC) ? 0 : (1 << 1); in rockchip_vop_init()
325 switch (conn_state->type) { in rockchip_vop_init()
333 if (!IS_ERR_OR_NULL(vop->grf)) in rockchip_vop_init()
351 !!(conn_state->output_flags & ROCKCHIP_OUTPUT_DUAL_CHANNEL_LEFT_RIGHT_MODE)); in rockchip_vop_init()
353 !!(conn_state->output_flags & ROCKCHIP_OUTPUT_DATA_SWAP) || in rockchip_vop_init()
354 crtc_state->dual_channel_swap); in rockchip_vop_init()
375 printf("unsupport connector_type[%d]\n", conn_state->type); in rockchip_vop_init()
378 if (conn_state->output_mode == ROCKCHIP_OUT_MODE_AAAA && in rockchip_vop_init()
379 !(vop_data->feature & VOP_FEATURE_OUTPUT_10BIT)) in rockchip_vop_init()
380 conn_state->output_mode = ROCKCHIP_OUT_MODE_P888; in rockchip_vop_init()
382 switch (conn_state->bus_format) { in rockchip_vop_init()
407 if (conn_state->output_mode == ROCKCHIP_OUT_MODE_AAAA) in rockchip_vop_init()
415 conn_state->output_mode == ROCKCHIP_OUT_MODE_YUV420 ? 1 : 0); in rockchip_vop_init()
417 conn_state->output_mode == ROCKCHIP_OUT_MODE_YUV420 ? 1 : 0); in rockchip_vop_init()
419 if (is_uv_swap(conn_state->bus_format, conn_state->output_mode) || in rockchip_vop_init()
420 is_rb_swap(conn_state->bus_format, conn_state->output_mode)) in rockchip_vop_init()
425 VOP_CTRL_SET(vop, out_mode, conn_state->output_mode); in rockchip_vop_init()
428 yuv_overlay = is_yuv_output(conn_state->bus_format); in rockchip_vop_init()
434 VOP_CTRL_SET(vop, dsp_out_yuv, is_yuv_output(conn_state->bus_format)); in rockchip_vop_init()
437 if (!is_yuv_output(conn_state->bus_format)) in rockchip_vop_init()
440 if (is_yuv_output(conn_state->bus_format)) in rockchip_vop_init()
444 crtc_state->yuv_overlay = yuv_overlay; in rockchip_vop_init()
445 post_csc_mode = to_vop_csc_mode(conn_state->color_space); in rockchip_vop_init()
454 if (!is_yuv_output(conn_state->bus_format)) in rockchip_vop_init()
456 else if (VOP_MAJOR(vop->version) == 3 && in rockchip_vop_init()
457 VOP_MINOR(vop->version) >= 5) in rockchip_vop_init()
470 if (mode->flags & DRM_MODE_FLAG_INTERLACE) { in rockchip_vop_init()
491 !!(mode->flags & DRM_MODE_FLAG_DBLCLK)); in rockchip_vop_init()
493 VOP_LINE_FLAG_SET(vop, line_flag_num[0], act_end - 3); in rockchip_vop_init()
495 act_end - us_to_vertical_line(mode, 1000)); in rockchip_vop_init()
496 if (state->crtc_state.mcu_timing.mcu_pix_total > 0) in rockchip_vop_init()
551 if (!vop->win->scl) in scl_vop_cal_scl_fac()
554 if (!vop->win->scl->ext) { in scl_vop_cal_scl_fac()
652 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_vop_setup_csc_table()
653 struct connector_state *conn_state = &state->conn_state; in rockchip_vop_setup_csc_table()
654 struct vop *vop = crtc_state->private; in rockchip_vop_setup_csc_table()
657 if (!vop->csc_table || !crtc_state->yuv_overlay) in rockchip_vop_setup_csc_table()
660 switch (conn_state->color_space) { in rockchip_vop_setup_csc_table()
662 csc_table = vop->csc_table->r2y_bt601_12_235; in rockchip_vop_setup_csc_table()
667 csc_table = vop->csc_table->r2y_bt709; in rockchip_vop_setup_csc_table()
670 csc_table = vop->csc_table->r2y_bt2020; in rockchip_vop_setup_csc_table()
673 csc_table = vop->csc_table->r2y_bt601; in rockchip_vop_setup_csc_table()
677 vop_load_csc_table(vop, vop->win_csc->r2y_offset, csc_table); in rockchip_vop_setup_csc_table()
685 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_vop_set_plane()
686 const struct rockchip_crtc *crtc = crtc_state->crtc; in rockchip_vop_set_plane()
687 const struct vop_data *vop_data = crtc->data; in rockchip_vop_set_plane()
688 struct connector_state *conn_state = &state->conn_state; in rockchip_vop_set_plane()
689 struct drm_display_mode *mode = &conn_state->mode; in rockchip_vop_set_plane()
691 struct vop *vop = crtc_state->private; in rockchip_vop_set_plane()
692 int src_w = crtc_state->src_rect.w; in rockchip_vop_set_plane()
693 int src_h = crtc_state->src_rect.h; in rockchip_vop_set_plane()
694 int crtc_x = crtc_state->crtc_rect.x; in rockchip_vop_set_plane()
695 int crtc_y = crtc_state->crtc_rect.y; in rockchip_vop_set_plane()
696 int crtc_w = crtc_state->crtc_rect.w; in rockchip_vop_set_plane()
697 int crtc_h = crtc_state->crtc_rect.h; in rockchip_vop_set_plane()
698 int xvir = crtc_state->xvir; in rockchip_vop_set_plane()
701 if (crtc_w > crtc_state->max_output.width) { in rockchip_vop_set_plane()
703 crtc_w, crtc_state->max_output.width); in rockchip_vop_set_plane()
704 return -EINVAL; in rockchip_vop_set_plane()
707 act_info = (src_h - 1) << 16; in rockchip_vop_set_plane()
708 act_info |= (src_w - 1) & 0xffff; in rockchip_vop_set_plane()
710 dsp_info = (crtc_h - 1) << 16; in rockchip_vop_set_plane()
711 dsp_info |= (crtc_w - 1) & 0xffff; in rockchip_vop_set_plane()
713 dsp_stx = crtc_x + mode->crtc_htotal - mode->crtc_hsync_start; in rockchip_vop_set_plane()
714 dsp_sty = crtc_y + mode->crtc_vtotal - mode->crtc_vsync_start; in rockchip_vop_set_plane()
719 if (crtc_state->format == ROCKCHIP_FMT_RGB888 && VOP_MAJOR(vop_data->version) == 3) in rockchip_vop_set_plane()
720 crtc_state->rb_swap = !crtc_state->rb_swap; in rockchip_vop_set_plane()
722 if (mode->flags & DRM_MODE_FLAG_YMIRROR) in rockchip_vop_set_plane()
726 if (mode->flags & DRM_MODE_FLAG_XMIRROR) in rockchip_vop_set_plane()
730 if (crtc_state->ymirror ^ y_mirror) in rockchip_vop_set_plane()
736 crtc_state->dma_addr += (src_h - 1) * xvir * 4; in rockchip_vop_set_plane()
743 VOP_WIN_SET(vop, format, crtc_state->format); in rockchip_vop_set_plane()
745 VOP_WIN_SET(vop, yrgb_mst, crtc_state->dma_addr); in rockchip_vop_set_plane()
748 crtc_state->format); in rockchip_vop_set_plane()
753 VOP_WIN_SET(vop, rb_swap, crtc_state->rb_swap); in rockchip_vop_set_plane()
772 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_vop_enable()
773 struct vop *vop = crtc_state->private; in rockchip_vop_enable()
775 VOP_CTRL_SET(vop, standby, 0); in rockchip_vop_enable()
777 if (crtc_state->mcu_timing.mcu_pix_total > 0) in rockchip_vop_enable()
785 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_vop_disable()
786 struct vop *vop = crtc_state->private; in rockchip_vop_disable()
788 VOP_CTRL_SET(vop, standby, 1); in rockchip_vop_disable()
796 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_vop_fixup_dts()
797 struct panel_state *pstate = &state->panel_state; in rockchip_vop_fixup_dts()
802 if (!ofnode_valid(pstate->dsp_lut_node)) in rockchip_vop_fixup_dts()
804 ret = fdt_get_path(state->blob, pstate->dsp_lut_node, path, sizeof(path)); in rockchip_vop_fixup_dts()
817 return -ENOMEM; in rockchip_vop_fixup_dts()
823 ret = fdt_get_path(state->blob, crtc_state->node, path, sizeof(path)); in rockchip_vop_fixup_dts()
830 do_fixup_by_path_u32(blob, path, "dsp-lut", phandle, 1); in rockchip_vop_fixup_dts()
838 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_vop_send_mcu_cmd()
839 struct vop *vop = crtc_state->private; in rockchip_vop_send_mcu_cmd()
865 struct connector_state *conn_state = &state->conn_state; in rockchip_vop_mode_valid()
866 struct drm_display_mode *mode = &conn_state->mode; in rockchip_vop_mode_valid()
875 return -EINVAL; in rockchip_vop_mode_valid()
883 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_vop_plane_check()
884 const struct rockchip_crtc *crtc = crtc_state->crtc; in rockchip_vop_plane_check()
885 const struct vop_data *vop_data = crtc->data; in rockchip_vop_plane_check()
886 const struct vop_win *win = vop_data->win; in rockchip_vop_plane_check()
887 struct display_rect *src = &crtc_state->src_rect; in rockchip_vop_plane_check()
888 struct display_rect *dst = &crtc_state->crtc_rect; in rockchip_vop_plane_check()
892 min_scale = win->scl ? FRAC_16_16(1, 8) : VOP_PLANE_NO_SCALING; in rockchip_vop_plane_check()
893 max_scale = win->scl ? FRAC_16_16(8, 1) : VOP_PLANE_NO_SCALING; in rockchip_vop_plane_check()
899 return -ERANGE; in rockchip_vop_plane_check()
907 struct connector_state *conn_state = &state->conn_state; in rockchip_vop_mode_fixup()
908 struct drm_display_mode *mode = &conn_state->mode; in rockchip_vop_mode_fixup()