Lines Matching +full:init +full:- +full:delay

2  * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd
4 * SPDX-License-Identifier: GPL-2.0+
15 #include <linux/media-bus-format.h>
79 u8 delay; member
108 unsigned int init; member
109 } delay; member
138 struct rockchip_rgb *rgb = dev_get_priv(conn->dev); in rockchip_rgb_connector_prepare()
139 struct crtc_state *crtc_state = &state->crtc_state; in rockchip_rgb_connector_prepare()
140 int pipe = crtc_state->crtc_id; in rockchip_rgb_connector_prepare()
143 pinctrl_select_state(rgb->dev, "default"); in rockchip_rgb_connector_prepare()
145 if (rgb->funcs && rgb->funcs->prepare) in rockchip_rgb_connector_prepare()
146 rgb->funcs->prepare(rgb, pipe); in rockchip_rgb_connector_prepare()
148 if (rgb->phy) { in rockchip_rgb_connector_prepare()
149 ret = rockchip_phy_set_mode(rgb->phy, PHY_MODE_VIDEO_TTL); in rockchip_rgb_connector_prepare()
151 dev_err(rgb->dev, "failed to set phy mode: %d\n", ret); in rockchip_rgb_connector_prepare()
155 rockchip_phy_power_on(rgb->phy); in rockchip_rgb_connector_prepare()
164 struct rockchip_rgb *rgb = dev_get_priv(conn->dev); in rockchip_rgb_connector_unprepare()
166 if (rgb->phy) in rockchip_rgb_connector_unprepare()
167 rockchip_phy_power_off(rgb->phy); in rockchip_rgb_connector_unprepare()
169 if (rgb->funcs && rgb->funcs->unprepare) in rockchip_rgb_connector_unprepare()
170 rgb->funcs->unprepare(rgb); in rockchip_rgb_connector_unprepare()
172 pinctrl_select_state(rgb->dev, "sleep"); in rockchip_rgb_connector_unprepare()
177 struct rockchip_rgb *rgb = dev_get_priv(conn->dev); in rockchip_rgb_connector_init()
178 struct connector_state *conn_state = &state->conn_state; in rockchip_rgb_connector_init()
180 rgb->phy = conn->phy; in rockchip_rgb_connector_init()
182 conn_state->color_space = V4L2_COLORSPACE_DEFAULT; in rockchip_rgb_connector_init()
183 conn_state->disp_info = rockchip_get_disp_info(conn_state->type, rgb->id); in rockchip_rgb_connector_init()
185 switch (conn_state->bus_format) { in rockchip_rgb_connector_init()
187 conn_state->output_mode = ROCKCHIP_OUT_MODE_P666; in rockchip_rgb_connector_init()
188 conn_state->output_if = VOP_OUTPUT_IF_RGB; in rockchip_rgb_connector_init()
191 conn_state->output_mode = ROCKCHIP_OUT_MODE_P565; in rockchip_rgb_connector_init()
192 conn_state->output_if = VOP_OUTPUT_IF_RGB; in rockchip_rgb_connector_init()
197 conn_state->output_mode = ROCKCHIP_OUT_MODE_S888; in rockchip_rgb_connector_init()
198 conn_state->output_if = VOP_OUTPUT_IF_RGB; in rockchip_rgb_connector_init()
203 conn_state->output_mode = ROCKCHIP_OUT_MODE_S888_DUMMY; in rockchip_rgb_connector_init()
204 conn_state->output_if = VOP_OUTPUT_IF_RGB; in rockchip_rgb_connector_init()
210 conn_state->output_mode = ROCKCHIP_OUT_MODE_BT656; in rockchip_rgb_connector_init()
211 conn_state->output_if = VOP_OUTPUT_IF_BT656; in rockchip_rgb_connector_init()
217 conn_state->output_mode = ROCKCHIP_OUT_MODE_BT1120; in rockchip_rgb_connector_init()
218 conn_state->output_if = VOP_OUTPUT_IF_BT1120; in rockchip_rgb_connector_init()
223 conn_state->output_mode = ROCKCHIP_OUT_MODE_P888; in rockchip_rgb_connector_init()
224 conn_state->output_if = VOP_OUTPUT_IF_RGB; in rockchip_rgb_connector_init()
232 .init = rockchip_rgb_connector_init,
243 return -EINVAL; in rockchip_mcu_panel_send_cmds()
246 for (i = 0; i < cmds->cmd_cnt; i++) { in rockchip_mcu_panel_send_cmds()
247 struct mcu_cmd_desc *desc = &cmds->cmds[i]; in rockchip_mcu_panel_send_cmds()
250 value = desc->payload[0]; in rockchip_mcu_panel_send_cmds()
251 display_send_mcu_cmd(state, desc->header.data_type, value); in rockchip_mcu_panel_send_cmds()
253 if (desc->header.delay) in rockchip_mcu_panel_send_cmds()
254 mdelay(desc->header.delay); in rockchip_mcu_panel_send_cmds()
266 if (mcu_panel->prepared) in rockchip_mcu_panel_prepare()
269 if (dm_gpio_is_valid(&mcu_panel->enable_gpio)) in rockchip_mcu_panel_prepare()
270 dm_gpio_set_value(&mcu_panel->enable_gpio, 1); in rockchip_mcu_panel_prepare()
272 if (mcu_panel->desc->delay.prepare) in rockchip_mcu_panel_prepare()
273 mdelay(mcu_panel->desc->delay.prepare); in rockchip_mcu_panel_prepare()
275 if (dm_gpio_is_valid(&mcu_panel->reset_gpio)) in rockchip_mcu_panel_prepare()
276 dm_gpio_set_value(&mcu_panel->reset_gpio, 1); in rockchip_mcu_panel_prepare()
278 if (mcu_panel->desc->delay.reset) in rockchip_mcu_panel_prepare()
279 mdelay(mcu_panel->desc->delay.reset); in rockchip_mcu_panel_prepare()
281 if (dm_gpio_is_valid(&mcu_panel->reset_gpio)) in rockchip_mcu_panel_prepare()
282 dm_gpio_set_value(&mcu_panel->reset_gpio, 0); in rockchip_mcu_panel_prepare()
284 if (mcu_panel->desc->delay.init) in rockchip_mcu_panel_prepare()
285 mdelay(mcu_panel->desc->delay.init); in rockchip_mcu_panel_prepare()
287 if (mcu_panel->desc->init_seq) { in rockchip_mcu_panel_prepare()
288 ret = rockchip_mcu_panel_send_cmds(panel->state, mcu_panel->desc->init_seq); in rockchip_mcu_panel_prepare()
290 printf("failed to send mcu panel init cmds: %d\n", ret); in rockchip_mcu_panel_prepare()
293 mcu_panel->prepared = true; in rockchip_mcu_panel_prepare()
301 if (!mcu_panel->prepared) in rockchip_mcu_panel_unprepare()
304 if (mcu_panel->desc->exit_seq) { in rockchip_mcu_panel_unprepare()
305 ret = rockchip_mcu_panel_send_cmds(panel->state, mcu_panel->desc->exit_seq); in rockchip_mcu_panel_unprepare()
310 if (dm_gpio_is_valid(&mcu_panel->reset_gpio)) in rockchip_mcu_panel_unprepare()
311 dm_gpio_set_value(&mcu_panel->reset_gpio, 1); in rockchip_mcu_panel_unprepare()
313 if (dm_gpio_is_valid(&mcu_panel->enable_gpio)) in rockchip_mcu_panel_unprepare()
314 dm_gpio_set_value(&mcu_panel->enable_gpio, 0); in rockchip_mcu_panel_unprepare()
316 if (mcu_panel->desc->delay.unprepare) in rockchip_mcu_panel_unprepare()
317 mdelay(mcu_panel->desc->delay.unprepare); in rockchip_mcu_panel_unprepare()
319 mcu_panel->prepared = false; in rockchip_mcu_panel_unprepare()
326 if (mcu_panel->enabled) in rockchip_mcu_panel_enable()
329 if (mcu_panel->desc->delay.enable) in rockchip_mcu_panel_enable()
330 mdelay(mcu_panel->desc->delay.enable); in rockchip_mcu_panel_enable()
332 if (mcu_panel->backlight) in rockchip_mcu_panel_enable()
333 backlight_enable(mcu_panel->backlight); in rockchip_mcu_panel_enable()
335 mcu_panel->enabled = true; in rockchip_mcu_panel_enable()
342 if (!mcu_panel->enabled) in rockchip_mcu_panel_disable()
345 if (mcu_panel->backlight) in rockchip_mcu_panel_disable()
346 backlight_disable(mcu_panel->backlight); in rockchip_mcu_panel_disable()
348 if (mcu_panel->desc->delay.disable) in rockchip_mcu_panel_disable()
349 mdelay(mcu_panel->desc->delay.disable); in rockchip_mcu_panel_disable()
351 mcu_panel->enabled = false; in rockchip_mcu_panel_disable()
375 buf += sizeof(*header) + header->payload_length; in rockchip_mcu_panel_parse_cmds()
376 len -= sizeof(*header) + header->payload_length; in rockchip_mcu_panel_parse_cmds()
380 pcmds->cmds = calloc(cnt, sizeof(struct mcu_cmd_desc)); in rockchip_mcu_panel_parse_cmds()
381 if (!pcmds->cmds) in rockchip_mcu_panel_parse_cmds()
382 return -ENOMEM; in rockchip_mcu_panel_parse_cmds()
384 pcmds->cmd_cnt = cnt; in rockchip_mcu_panel_parse_cmds()
389 struct mcu_cmd_desc *desc = &pcmds->cmds[i]; in rockchip_mcu_panel_parse_cmds()
392 length -= sizeof(*header); in rockchip_mcu_panel_parse_cmds()
394 desc->header.data_type = header->data_type; in rockchip_mcu_panel_parse_cmds()
395 desc->header.delay = header->delay; in rockchip_mcu_panel_parse_cmds()
396 desc->header.payload_length = header->payload_length; in rockchip_mcu_panel_parse_cmds()
397 desc->payload = buf; in rockchip_mcu_panel_parse_cmds()
398 buf += header->payload_length; in rockchip_mcu_panel_parse_cmds()
399 length -= header->payload_length; in rockchip_mcu_panel_parse_cmds()
411 ret = gpio_request_by_name_nodev(mcu_panel_node, "enable-gpios", 0, in rockchip_mcu_panel_init()
412 &mcu_panel->enable_gpio, GPIOD_IS_OUT); in rockchip_mcu_panel_init()
413 if (ret && ret != -ENOENT) { in rockchip_mcu_panel_init()
418 ret = gpio_request_by_name_nodev(mcu_panel_node, "reset-gpios", 0, in rockchip_mcu_panel_init()
419 &mcu_panel->reset_gpio, GPIOD_IS_OUT); in rockchip_mcu_panel_init()
420 if (ret && ret != -ENOENT) { in rockchip_mcu_panel_init()
425 mcu_panel->desc = malloc(sizeof(struct rockchip_mcu_panel_desc)); in rockchip_mcu_panel_init()
426 if (!mcu_panel->desc) in rockchip_mcu_panel_init()
427 return -ENOMEM; in rockchip_mcu_panel_init()
429 mcu_panel->desc->power_invert = ofnode_read_bool(mcu_panel_node, "power-invert"); in rockchip_mcu_panel_init()
431 mcu_panel->desc->delay.prepare = ofnode_read_u32_default(mcu_panel_node, "prepare-delay-ms", 0); in rockchip_mcu_panel_init()
432 …mcu_panel->desc->delay.unprepare = ofnode_read_u32_default(mcu_panel_node, "unprepare-delay-ms", 0… in rockchip_mcu_panel_init()
433 mcu_panel->desc->delay.enable = ofnode_read_u32_default(mcu_panel_node, "enable-delay-ms", 0); in rockchip_mcu_panel_init()
434 mcu_panel->desc->delay.disable = ofnode_read_u32_default(mcu_panel_node, "disable-delay-ms", 0); in rockchip_mcu_panel_init()
435 mcu_panel->desc->delay.init = ofnode_read_u32_default(mcu_panel_node, "init-delay-ms", 0); in rockchip_mcu_panel_init()
436 mcu_panel->desc->delay.reset = ofnode_read_u32_default(mcu_panel_node, "reset-delay-ms", 0); in rockchip_mcu_panel_init()
438 mcu_panel->desc->bus_format = ofnode_read_u32_default(mcu_panel_node, "bus-format", in rockchip_mcu_panel_init()
440 mcu_panel->desc->bpc = ofnode_read_u32_default(mcu_panel_node, "bpc", 8); in rockchip_mcu_panel_init()
442 data = ofnode_get_property(mcu_panel_node, "panel-init-sequence", &len); in rockchip_mcu_panel_init()
444 mcu_panel->desc->init_seq = calloc(1, sizeof(*mcu_panel->desc->init_seq)); in rockchip_mcu_panel_init()
445 if (!mcu_panel->desc->init_seq) in rockchip_mcu_panel_init()
446 return -ENOMEM; in rockchip_mcu_panel_init()
448 ret = rockchip_mcu_panel_parse_cmds(data, len, mcu_panel->desc->init_seq); in rockchip_mcu_panel_init()
450 printf("failed to parse panel init sequence\n"); in rockchip_mcu_panel_init()
455 data = ofnode_get_property(mcu_panel_node, "panel-exit-sequence", &len); in rockchip_mcu_panel_init()
457 mcu_panel->desc->exit_seq = calloc(1, sizeof(*mcu_panel->desc->exit_seq)); in rockchip_mcu_panel_init()
458 if (!mcu_panel->desc->exit_seq) { in rockchip_mcu_panel_init()
459 ret = -ENOMEM; in rockchip_mcu_panel_init()
463 ret = rockchip_mcu_panel_parse_cmds(data, len, mcu_panel->desc->exit_seq); in rockchip_mcu_panel_init()
473 free(mcu_panel->desc->exit_seq); in rockchip_mcu_panel_init()
475 free(mcu_panel->desc->init_seq); in rockchip_mcu_panel_init()
487 rgb->dev = dev; in rockchip_rgb_probe()
488 rgb->funcs = (const struct rockchip_rgb_funcs *)dev_get_driver_data(dev); in rockchip_rgb_probe()
491 rgb->grf = syscon_get_regmap(syscon); in rockchip_rgb_probe()
492 rgb->data_sync_bypass = dev_read_bool(dev, "rockchip,data-sync-bypass"); in rockchip_rgb_probe()
493 rgb->id = of_alias_get_id(ofnode_to_np(dev->node), "rgb"); in rockchip_rgb_probe()
494 if (rgb->id < 0) in rockchip_rgb_probe()
495 rgb->id = 0; in rockchip_rgb_probe()
497 mcu_panel_node = dev_read_subnode(dev, "mcu-panel"); in rockchip_rgb_probe()
504 return -ENOMEM; in rockchip_rgb_probe()
509 printf("failed to init mcu_panel: %d\n", ret); in rockchip_rgb_probe()
513 phandle = ofnode_read_u32_default(mcu_panel_node, "backlight", -1); in rockchip_rgb_probe()
516 return -EINVAL; in rockchip_rgb_probe()
520 &mcu_panel->backlight); in rockchip_rgb_probe()
521 if (ret && ret != -ENOENT) { in rockchip_rgb_probe()
526 mcu_panel->base.dev = dev; in rockchip_rgb_probe()
527 mcu_panel->base.bus_format = mcu_panel->desc->bus_format; in rockchip_rgb_probe()
528 mcu_panel->base.bpc = mcu_panel->desc->bpc; in rockchip_rgb_probe()
529 mcu_panel->base.funcs = &rockchip_mcu_panel_funcs; in rockchip_rgb_probe()
530 mcu_panel->enabled = false; in rockchip_rgb_probe()
531 mcu_panel->prepared = false; in rockchip_rgb_probe()
533 rgb->connector.panel = &mcu_panel->base; in rockchip_rgb_probe()
536 rockchip_connector_bind(&rgb->connector, dev, rgb->id, &rockchip_rgb_connector_funcs, in rockchip_rgb_probe()
544 regmap_write(rgb->grf, RV1106_VENC_GRF_VOP_IO_WRAPPER, in rv1106_rgb_prepare()
545 RV1106_IO_BYPASS_SEL(rgb->data_sync_bypass ? 0x3 : 0x0)); in rv1106_rgb_prepare()
546 regmap_write(rgb->grf, RV1106_VOGRF_VOP_PIPE_BYPASS, in rv1106_rgb_prepare()
547 RV1106_VOP_PIPE_BYPASS(rgb->data_sync_bypass ? 0x3 : 0x0)); in rv1106_rgb_prepare()
556 regmap_write(rgb->grf, RV1126_GRF_IOFUNC_CON3, in rv1126_rgb_prepare()
557 RV1126_LCDC_IO_BYPASS(rgb->data_sync_bypass)); in rv1126_rgb_prepare()
566 regmap_write(rgb->grf, PX30_GRF_PD_VO_CON1, PX30_RGB_VOP_SEL(pipe) | in px30_rgb_prepare()
567 PX30_RGB_DATA_SYNC_BYPASS(rgb->data_sync_bypass)); in px30_rgb_prepare()
576 regmap_write(rgb->grf, RK1808_GRF_PD_VO_CON1, in rk1808_rgb_prepare()
577 RK1808_RGB_DATA_SYNC_BYPASS(rgb->data_sync_bypass)); in rk1808_rgb_prepare()
586 regmap_write(rgb->grf, RK3288_GRF_SOC_CON6, RK3288_LVDS_LCDC_SEL(pipe)); in rk3288_rgb_prepare()
587 regmap_write(rgb->grf, RK3288_GRF_SOC_CON7, in rk3288_rgb_prepare()
595 regmap_write(rgb->grf, RK3288_GRF_SOC_CON7, in rk3288_rgb_unprepare()
607 regmap_write(rgb->grf, RK3368_GRF_SOC_CON15, RK3368_FORCE_JETAG(0)); in rk3368_rgb_prepare()
616 regmap_write(rgb->grf, RK3562_GRF_IOC_VO_IO_CON, in rk3562_rgb_prepare()
617 RK3562_RGB_DATA_BYPASS(rgb->data_sync_bypass)); in rk3562_rgb_prepare()
626 regmap_write(rgb->grf, RK3568_GRF_VO_CON1, RK3568_RGB_DATA_BYPASS(rgb->data_sync_bypass)); in rk3568_rgb_prepare()
635 .compatible = "rockchip,px30-rgb",
639 .compatible = "rockchip,rk1808-rgb",
643 .compatible = "rockchip,rk3066-rgb",
646 .compatible = "rockchip,rk3128-rgb",
649 .compatible = "rockchip,rk3288-rgb",
653 .compatible = "rockchip,rk3308-rgb",
656 .compatible = "rockchip,rk3368-rgb",
660 .compatible = "rockchip,rk3562-rgb",
664 .compatible = "rockchip,rk3568-rgb",
668 .compatible = "rockchip,rv1106-rgb",
672 .compatible = "rockchip,rv1108-rgb",
675 .compatible = "rockchip,rv1126-rgb",