Lines Matching refs:rk628

17 static int rk628_power_on(struct rk628 *rk628)  in rk628_power_on()  argument
19 if (rk628->power_supply) in rk628_power_on()
20 regulator_set_enable(rk628->power_supply, 1); in rk628_power_on()
22 if (dm_gpio_is_valid(&rk628->enable_gpio)) { in rk628_power_on()
23 dm_gpio_set_value(&rk628->enable_gpio, 1); in rk628_power_on()
27 if (dm_gpio_is_valid(&rk628->reset_gpio)) { in rk628_power_on()
28 dm_gpio_set_value(&rk628->reset_gpio, 0); in rk628_power_on()
30 dm_gpio_set_value(&rk628->reset_gpio, 1); in rk628_power_on()
32 dm_gpio_set_value(&rk628->reset_gpio, 0); in rk628_power_on()
37 rk628_i2c_write(rk628, GRF_GPIO3AB_SEL_CON, 0x30002000); in rk628_power_on()
42 static int rk628_version_info(struct rk628 *rk628) in rk628_version_info() argument
47 ret = rk628_i2c_read(rk628, GRF_SOC_VERSION, &rk628->version); in rk628_version_info()
53 switch (rk628->version) { in rk628_version_info()
70 static int rk628_display_route_info_parse(struct rk628 *rk628) in rk628_display_route_info_parse() argument
76 if (dev_read_bool(rk628->dev, "rk628-hdmi-in") || in rk628_display_route_info_parse()
77 dev_read_bool(rk628->dev, "rk628,hdmi-in")) { in rk628_display_route_info_parse()
78 rk628->input_mode = BIT(INPUT_MODE_HDMI); in rk628_display_route_info_parse()
79 } else if (dev_read_bool(rk628->dev, "rk628-rgb-in") || in rk628_display_route_info_parse()
80 dev_read_bool(rk628->dev, "rk628,rgb-in")) { in rk628_display_route_info_parse()
81 rk628->input_mode = BIT(INPUT_MODE_RGB); in rk628_display_route_info_parse()
82 ret = rk628_rgbrx_parse(rk628); in rk628_display_route_info_parse()
83 } else if (dev_read_bool(rk628->dev, "rk628-bt1120-in") || in rk628_display_route_info_parse()
84 dev_read_bool(rk628->dev, "rk628,bt1120-in")) { in rk628_display_route_info_parse()
85 rk628->input_mode = BIT(INPUT_MODE_BT1120); in rk628_display_route_info_parse()
86 ret = rk628_rgbrx_parse(rk628); in rk628_display_route_info_parse()
88 rk628->input_mode = BIT(INPUT_MODE_RGB); in rk628_display_route_info_parse()
91 if (ofnode_valid(dev_read_subnode(rk628->dev, "rk628-gvi-out")) || in rk628_display_route_info_parse()
92 ofnode_valid(dev_read_subnode(rk628->dev, "rk628-gvi"))) { in rk628_display_route_info_parse()
93 np = dev_read_subnode(rk628->dev, "rk628-gvi-out"); in rk628_display_route_info_parse()
95 np = dev_read_subnode(rk628->dev, "rk628-gvi"); in rk628_display_route_info_parse()
97 rk628->output_mode |= BIT(OUTPUT_MODE_GVI); in rk628_display_route_info_parse()
98 ret = rk628_gvi_parse(rk628, np); in rk628_display_route_info_parse()
99 } else if (ofnode_valid(dev_read_subnode(rk628->dev, "rk628-lvds-out")) || in rk628_display_route_info_parse()
100 ofnode_valid(dev_read_subnode(rk628->dev, "rk628-lvds"))) { in rk628_display_route_info_parse()
101 np = dev_read_subnode(rk628->dev, "rk628-lvds-out"); in rk628_display_route_info_parse()
103 np = dev_read_subnode(rk628->dev, "rk628-lvds"); in rk628_display_route_info_parse()
105 rk628->output_mode |= BIT(OUTPUT_MODE_LVDS); in rk628_display_route_info_parse()
106 ret = rk628_lvds_parse(rk628, np); in rk628_display_route_info_parse()
107 } else if (ofnode_valid(dev_read_subnode(rk628->dev, "rk628-dsi-out")) || in rk628_display_route_info_parse()
108 ofnode_valid(dev_read_subnode(rk628->dev, "rk628-dsi"))) { in rk628_display_route_info_parse()
109 np = dev_read_subnode(rk628->dev, "rk628-dsi-out"); in rk628_display_route_info_parse()
111 np = dev_read_subnode(rk628->dev, "rk628-dsi"); in rk628_display_route_info_parse()
113 rk628->output_mode |= BIT(OUTPUT_MODE_DSI); in rk628_display_route_info_parse()
114 ret = rk628_dsi_parse(rk628, np); in rk628_display_route_info_parse()
115 } else if (dev_read_bool(rk628->dev, "rk628-csi-out") || in rk628_display_route_info_parse()
116 dev_read_bool(rk628->dev, "rk628,csi-out")) { in rk628_display_route_info_parse()
117 rk628->output_mode |= BIT(OUTPUT_MODE_CSI); in rk628_display_route_info_parse()
120 if (dev_read_bool(rk628->dev, "rk628-hdmi-out") || in rk628_display_route_info_parse()
121 dev_read_bool(rk628->dev, "rk628,hdmi-out")) in rk628_display_route_info_parse()
122 rk628->output_mode |= BIT(OUTPUT_MODE_HDMI); in rk628_display_route_info_parse()
124 if (dev_read_bool(rk628->dev, "rk628-rgb-out") || in rk628_display_route_info_parse()
125 dev_read_bool(rk628->dev, "rk628-rgb")) { in rk628_display_route_info_parse()
126 np = dev_read_subnode(rk628->dev, "rk628-rgb-out"); in rk628_display_route_info_parse()
128 np = dev_read_subnode(rk628->dev, "rk628-rgb"); in rk628_display_route_info_parse()
130 rk628->output_mode |= BIT(OUTPUT_MODE_RGB); in rk628_display_route_info_parse()
131 ret = rk628_rgbtx_parse(rk628, np); in rk628_display_route_info_parse()
132 } else if (dev_read_bool(rk628->dev, "rk628-bt1120-out") || in rk628_display_route_info_parse()
133 dev_read_bool(rk628->dev, "rk628-bt1120")) { in rk628_display_route_info_parse()
134 np = dev_read_subnode(rk628->dev, "rk628-bt1120-out"); in rk628_display_route_info_parse()
136 np = dev_read_subnode(rk628->dev, "rk628-bt1120"); in rk628_display_route_info_parse()
138 rk628->output_mode |= BIT(OUTPUT_MODE_BT1120); in rk628_display_route_info_parse()
139 ret = rk628_rgbtx_parse(rk628, np); in rk628_display_route_info_parse()
142 val = dev_read_u32_default(rk628->dev, "mode-sync-pol", 1); in rk628_display_route_info_parse()
143 rk628->sync_pol = (!val ? MODE_FLAG_NSYNC : MODE_FLAG_PSYNC); in rk628_display_route_info_parse()
148 static bool rk628_display_route_check(struct rk628 *rk628) in rk628_display_route_check() argument
150 if (!hweight32(rk628->input_mode) || !hweight32(rk628->output_mode)) in rk628_display_route_check()
157 if ((rk628_input_is_rgb(rk628) || rk628_input_is_bt1120(rk628)) && in rk628_display_route_check()
158 (rk628_output_is_rgb(rk628) || rk628_output_is_bt1120(rk628))) in rk628_display_route_check()
161 if (rk628->version == RK628F_VERSION) in rk628_display_route_check()
165 if (hweight32(rk628->output_mode) > 2) in rk628_display_route_check()
168 if (hweight32(rk628->output_mode) == 2 && in rk628_display_route_check()
169 !(rk628_output_is_rgb(rk628) && rk628_output_is_hdmi(rk628))) in rk628_display_route_check()
181 static void rk628_current_display_route(struct rk628 *rk628, char *input_s, in rk628_current_display_route() argument
188 if (rk628_input_is_rgb(rk628)) in rk628_current_display_route()
190 else if (rk628_input_is_bt1120(rk628)) in rk628_current_display_route()
192 else if (rk628_input_is_hdmi(rk628)) in rk628_current_display_route()
197 if (rk628_output_is_rgb(rk628)) in rk628_current_display_route()
200 if (rk628_output_is_bt1120(rk628)) in rk628_current_display_route()
203 if (rk628_output_is_gvi(rk628)) in rk628_current_display_route()
206 if (rk628_output_is_lvds(rk628)) in rk628_current_display_route()
209 if (rk628_output_is_dsi(rk628)) in rk628_current_display_route()
212 if (rk628_output_is_csi(rk628)) in rk628_current_display_route()
215 if (rk628_output_is_hdmi(rk628)) in rk628_current_display_route()
222 static void rk628_show_current_display_route(struct rk628 *rk628) in rk628_show_current_display_route() argument
226 rk628_current_display_route(rk628, input_s, sizeof(input_s), in rk628_show_current_display_route()
232 static void rk628_pwr_consumption_init(struct rk628 *rk628) in rk628_pwr_consumption_init() argument
235 rk628_i2c_write(rk628, GRF_GPIO3AB_SEL_CON, 0x30002000); in rk628_pwr_consumption_init()
241 rk628_i2c_write(rk628, GRF_GPIO2AB_SEL_CON, 0xffff0000); in rk628_pwr_consumption_init()
242 rk628_i2c_write(rk628, GRF_GPIO2C_SEL_CON, 0xffff0000); in rk628_pwr_consumption_init()
243 rk628_i2c_write(rk628, GRF_GPIO3AB_SEL_CON, 0x10b0000); in rk628_pwr_consumption_init()
244 rk628_i2c_write(rk628, GRF_GPIO2C_P_CON, 0x3f0015); in rk628_pwr_consumption_init()
245 rk628_i2c_write(rk628, GRF_GPIO3A_P_CON, 0xcc0044); in rk628_pwr_consumption_init()
247 if (!rk628_output_is_hdmi(rk628)) { in rk628_pwr_consumption_init()
251 if (rk628->version == RK628F_VERSION) { in rk628_pwr_consumption_init()
257 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, mask, val); in rk628_pwr_consumption_init()
258 rk628_i2c_write(rk628, HDMI_PHY_SYS_CTL, 0x17); in rk628_pwr_consumption_init()
259 rk628_i2c_write(rk628, HDMI_PHY_CHG_PWR, 0x0); in rk628_pwr_consumption_init()
260 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, mask, 0); in rk628_pwr_consumption_init()
264 static void rk628_display_enable(struct rk628 *rk628) in rk628_display_enable() argument
266 if (rk628_input_is_rgb(rk628)) in rk628_display_enable()
267 rk628_rgb_rx_enable(rk628); in rk628_display_enable()
276 if (rk628_output_is_rgb(rk628)) in rk628_display_enable()
277 rk628_rgb_tx_enable(rk628); in rk628_display_enable()
279 if (rk628_input_is_hdmi(rk628)) in rk628_display_enable()
280 rk628_hdmirx_enable(rk628); in rk628_display_enable()
282 if (rk628_output_is_dsi(rk628)) { in rk628_display_enable()
283 rk628_mipi_dsi_pre_enable(rk628); in rk628_display_enable()
284 rk628_mipi_dsi_enable(rk628); in rk628_display_enable()
288 if (rk628_output_is_bt1120(rk628)) in rk628_display_enable()
289 rk628_bt1120_tx_enable(rk628); in rk628_display_enable()
291 if (!rk628_output_is_hdmi(rk628)) { in rk628_display_enable()
292 rk628_post_process_init(rk628); in rk628_display_enable()
293 rk628_post_process_enable(rk628); in rk628_display_enable()
296 if (rk628_output_is_lvds(rk628)) in rk628_display_enable()
297 rk628_lvds_enable(rk628); in rk628_display_enable()
299 if (rk628_output_is_gvi(rk628)) in rk628_display_enable()
300 rk628_gvi_enable(rk628); in rk628_display_enable()
345 static int rk628_get_video_mode(struct rk628 *rk628) in rk628_get_video_mode() argument
350 timings_np = ofnode_find_subnode(dev_ofnode(rk628->dev), "display-timings"); in rk628_get_video_mode()
361 rk628_display_mode_from_videomode(&vm, &rk628->src_mode); in rk628_get_video_mode()
363 rk628->src_mode.clock, rk628->src_mode.hdisplay, rk628->src_mode.hsync_start, in rk628_get_video_mode()
364 rk628->src_mode.hsync_end, rk628->src_mode.htotal, rk628->src_mode.vdisplay, in rk628_get_video_mode()
365 rk628->src_mode.vsync_start, rk628->src_mode.vsync_end, rk628->src_mode.vtotal, in rk628_get_video_mode()
366 rk628->src_mode.flags); in rk628_get_video_mode()
375 rk628_display_mode_from_videomode(&vm, &rk628->dst_mode); in rk628_get_video_mode()
377 rk628->dst_mode.clock, rk628->dst_mode.hdisplay, rk628->dst_mode.hsync_start, in rk628_get_video_mode()
378 rk628->dst_mode.hsync_end, rk628->dst_mode.htotal, rk628->dst_mode.vdisplay, in rk628_get_video_mode()
379 rk628->dst_mode.vsync_start, rk628->dst_mode.vsync_end, rk628->dst_mode.vtotal, in rk628_get_video_mode()
380 rk628->dst_mode.flags); in rk628_get_video_mode()
385 static int rk628_display_timings_get(struct rk628 *rk628) in rk628_display_timings_get() argument
389 ret = rk628_get_video_mode(rk628); in rk628_display_timings_get()
397 struct rk628 *rk628 = dev_get_priv(dev); in rk628_probe() local
404 rk628->dev = dev; in rk628_probe()
406 ret = rk628_display_route_info_parse(rk628); in rk628_probe()
412 if (!rk628_output_is_csi(rk628) && !rk628_output_is_hdmi(rk628)) { in rk628_probe()
413 ret = rk628_display_timings_get(rk628); in rk628_probe()
422 &rk628->power_supply); in rk628_probe()
429 &rk628->enable_gpio, GPIOD_IS_OUT); in rk628_probe()
436 &rk628->reset_gpio, GPIOD_IS_OUT); in rk628_probe()
450 rk628_power_on(rk628); in rk628_probe()
451 rk628_version_info(rk628); in rk628_probe()
453 rk628_show_current_display_route(rk628); in rk628_probe()
455 if (!rk628_display_route_check(rk628)) { in rk628_probe()
460 rk628_pwr_consumption_init(rk628); in rk628_probe()
461 rk628_cru_init(rk628); in rk628_probe()
462 rk628_display_enable(rk628); in rk628_probe()
472 U_BOOT_DRIVER(rk628) = {
478 .priv_auto_alloc_size = sizeof(struct rk628),