Lines Matching refs:rk628
30 static int rk628_combrxphy_try_clk_detect(struct rk628 *rk628) in rk628_combrxphy_try_clk_detect() argument
36 rk628_control_assert(rk628, RGU_RXPHY); in rk628_combrxphy_try_clk_detect()
38 rk628_control_deassert(rk628, RGU_RXPHY); in rk628_combrxphy_try_clk_detect()
43 rk628_i2c_read(rk628, COMBRX_REG(0x6630), &val); in rk628_combrxphy_try_clk_detect()
46 rk628_i2c_write(rk628, COMBRX_REG(0x6630), val); in rk628_combrxphy_try_clk_detect()
51 rk628_i2c_read(rk628, COMBRX_REG(0x6630), &val); in rk628_combrxphy_try_clk_detect()
53 rk628_i2c_write(rk628, COMBRX_REG(0x6630), val); in rk628_combrxphy_try_clk_detect()
55 rk628_i2c_read(rk628, COMBRX_REG(0x66f0), &val); in rk628_combrxphy_try_clk_detect()
57 rk628_i2c_write(rk628, COMBRX_REG(0x66f0), val); in rk628_combrxphy_try_clk_detect()
59 rk628_i2c_read(rk628, COMBRX_REG(0x66f4), &val); in rk628_combrxphy_try_clk_detect()
61 rk628_i2c_write(rk628, COMBRX_REG(0x66f4), val); in rk628_combrxphy_try_clk_detect()
63 rk628_i2c_read(rk628, COMBRX_REG(0x66f0), &val); in rk628_combrxphy_try_clk_detect()
65 rk628_i2c_write(rk628, COMBRX_REG(0x66f0), val); in rk628_combrxphy_try_clk_detect()
67 rk628_i2c_read(rk628, COMBRX_REG(0x66f4), &val); in rk628_combrxphy_try_clk_detect()
69 rk628_i2c_write(rk628, COMBRX_REG(0x66f4), val); in rk628_combrxphy_try_clk_detect()
71 rk628_i2c_read(rk628, COMBRX_REG(0x66f0), &val); in rk628_combrxphy_try_clk_detect()
74 rk628_i2c_write(rk628, COMBRX_REG(0x66f0), val); in rk628_combrxphy_try_clk_detect()
77 rk628_i2c_read(rk628, COMBRX_REG(0x66f0), &val); in rk628_combrxphy_try_clk_detect()
80 rk628_i2c_write(rk628, COMBRX_REG(0x66f0), val); in rk628_combrxphy_try_clk_detect()
84 rk628_i2c_read(rk628, COMBRX_REG(0x6654), &val); in rk628_combrxphy_try_clk_detect()
87 dev_info(rk628->dev, "clock detected!\n"); in rk628_combrxphy_try_clk_detect()
95 static void rk628_combrxphy_get_data_of_round(struct rk628 *rk628, in rk628_combrxphy_get_data_of_round() argument
101 rk628_i2c_read(rk628, COMBRX_REG(0x6740 + i * 4), &data[i]); in rk628_combrxphy_get_data_of_round()
104 static void rk628_combrxphy_set_dc_gain(struct rk628 *rk628, in rk628_combrxphy_set_dc_gain() argument
113 rk628_i2c_read(rk628, COMBRX_REG(0x661c), &val); in rk628_combrxphy_set_dc_gain()
117 rk628_i2c_write(rk628, COMBRX_REG(0x661c), val); in rk628_combrxphy_set_dc_gain()
143 rk628_combrxphy_max_zero_of_round(struct rk628 *rk628, in rk628_combrxphy_max_zero_of_round() argument
167 dev_info(rk628->dev, "channel:%d, round:%d, max_zero_cnt:%d, max_val:%#x\n", in rk628_combrxphy_max_zero_of_round()
171 static int rk628_combrxphy_chose_round_for_ch(struct rk628 *rk628, in rk628_combrxphy_chose_round_for_ch() argument
190 dev_info(rk628->dev, "%s channel:%d, rd:%d\n", __func__, ch, rd); in rk628_combrxphy_chose_round_for_ch()
195 static void rk628_combrxphy_set_sample_edge_round(struct rk628 *rk628, u32 x, u32 y, u32 z) in rk628_combrxphy_set_sample_edge_round() argument
203 rk628_i2c_read(rk628, COMBRX_REG(0x6618), &val); in rk628_combrxphy_set_sample_edge_round()
206 rk628_i2c_write(rk628, COMBRX_REG(0x6618), val); in rk628_combrxphy_set_sample_edge_round()
209 static void rk628_combrxphy_start_sample_edge(struct rk628 *rk628) in rk628_combrxphy_start_sample_edge() argument
213 rk628_i2c_read(rk628, COMBRX_REG(0x66f0), &val); in rk628_combrxphy_start_sample_edge()
215 rk628_i2c_write(rk628, COMBRX_REG(0x66f0), val); in rk628_combrxphy_start_sample_edge()
216 rk628_i2c_read(rk628, COMBRX_REG(0x66f0), &val); in rk628_combrxphy_start_sample_edge()
218 rk628_i2c_write(rk628, COMBRX_REG(0x66f0), val); in rk628_combrxphy_start_sample_edge()
221 static void rk628_combrxphy_set_sample_edge_mode(struct rk628 *rk628, int ch) in rk628_combrxphy_set_sample_edge_mode() argument
225 rk628_i2c_read(rk628, COMBRX_REG(0x6634), &val); in rk628_combrxphy_set_sample_edge_mode()
227 rk628_i2c_write(rk628, COMBRX_REG(0x6634), val); in rk628_combrxphy_set_sample_edge_mode()
230 static void rk628_combrxphy_select_channel(struct rk628 *rk628, int ch) in rk628_combrxphy_select_channel() argument
234 rk628_i2c_read(rk628, COMBRX_REG(0x6700), &val); in rk628_combrxphy_select_channel()
236 rk628_i2c_write(rk628, COMBRX_REG(0x6700), val); in rk628_combrxphy_select_channel()
239 static void rk628_combrxphy_cfg_6730(struct rk628 *rk628) in rk628_combrxphy_cfg_6730() argument
243 rk628_i2c_read(rk628, COMBRX_REG(0x6730), &val); in rk628_combrxphy_cfg_6730()
245 rk628_i2c_write(rk628, COMBRX_REG(0x6730), val); in rk628_combrxphy_cfg_6730()
248 static void rk628_combrxphy_sample_edge_procedure_for_cable(struct rk628 *rk628, u32 cdr_mode) in rk628_combrxphy_sample_edge_procedure_for_cable() argument
261 rk628_combrxphy_set_sample_edge_mode(rk628, ch); in rk628_combrxphy_sample_edge_procedure_for_cable()
265 rk628_combrxphy_select_channel(rk628, ch); in rk628_combrxphy_sample_edge_procedure_for_cable()
266 rk628_combrxphy_cfg_6730(rk628); in rk628_combrxphy_sample_edge_procedure_for_cable()
305 dev_info(rk628->dev, "cdr_mode:%d, dc_gain:%d, rd_offset:%d, edge:%#x\n", in rk628_combrxphy_sample_edge_procedure_for_cable()
308 rk628_combrxphy_select_channel(rk628, ch); in rk628_combrxphy_sample_edge_procedure_for_cable()
309 rk628_i2c_write(rk628, COMBRX_REG(0x6708), edge); in rk628_combrxphy_sample_edge_procedure_for_cable()
312 rk628_combrxphy_set_dc_gain(rk628, dc_gain, dc_gain, dc_gain); in rk628_combrxphy_sample_edge_procedure_for_cable()
315 rk628_combrxphy_set_sample_edge_round(rk628, n, n, n); in rk628_combrxphy_sample_edge_procedure_for_cable()
317 rk628_combrxphy_start_sample_edge(rk628); in rk628_combrxphy_sample_edge_procedure_for_cable()
322 rk628_combrxphy_select_channel(rk628, ch); in rk628_combrxphy_sample_edge_procedure_for_cable()
323 rk628_combrxphy_get_data_of_round(rk628, data); in rk628_combrxphy_sample_edge_procedure_for_cable()
326 rk628_combrxphy_max_zero_of_round(rk628, data_in, in rk628_combrxphy_sample_edge_procedure_for_cable()
337 rk628_combrxphy_chose_round_for_ch(rk628, round_max_zero[ch], in rk628_combrxphy_sample_edge_procedure_for_cable()
340 dev_info(rk628->dev, "last equ gain ch0:%d, ch1:%d, ch2:%d\n", in rk628_combrxphy_sample_edge_procedure_for_cable()
344 rk628_combrxphy_set_sample_edge_round(rk628, ch_round[0], ch_round[1], ch_round[2]); in rk628_combrxphy_sample_edge_procedure_for_cable()
348 rk628_combrxphy_start_sample_edge(rk628); in rk628_combrxphy_sample_edge_procedure_for_cable()
353 static int rk628_combrxphy_set_hdmi_mode_for_cable(struct rk628 *rk628, int f) in rk628_combrxphy_set_hdmi_mode_for_cable() argument
396 rk628_i2c_read(rk628, COMBRX_REG(0x6620), &val); in rk628_combrxphy_set_hdmi_mode_for_cable()
401 if (rk628_combrxphy_try_clk_detect(rk628) >= 0) in rk628_combrxphy_set_hdmi_mode_for_cable()
405 rk628_i2c_read(rk628, COMBRX_REG(0x6654), &val); in rk628_combrxphy_set_hdmi_mode_for_cable()
406 dev_info(rk628->dev, "clk det over cnt:%d, reg_0x6654:%#x\n", i, val); in rk628_combrxphy_set_hdmi_mode_for_cable()
409 dev_info(rk628->dev, "Clock detection anomaly\n"); in rk628_combrxphy_set_hdmi_mode_for_cable()
412 dev_info(rk628->dev, "%s%s%s%s%s%s%s%s level detection anomaly\n", in rk628_combrxphy_set_hdmi_mode_for_cable()
423 rk628_i2c_read(rk628, COMBRX_REG(0x6620), &val); in rk628_combrxphy_set_hdmi_mode_for_cable()
429 dev_info(rk628->dev, "clock detected failed, cfg resistance manual!\n"); in rk628_combrxphy_set_hdmi_mode_for_cable()
430 rk628_i2c_write(rk628, COMBRX_REG(0x6620), 0x66666666); in rk628_combrxphy_set_hdmi_mode_for_cable()
431 rk628_i2c_update_bits(rk628, COMBRX_REG(0x6604), BIT(31), BIT(31)); in rk628_combrxphy_set_hdmi_mode_for_cable()
441 rk628_i2c_read(rk628, COMBRX_REG(0x6654), &val); in rk628_combrxphy_set_hdmi_mode_for_cable()
452 dev_info(rk628->dev, "clock stable!"); in rk628_combrxphy_set_hdmi_mode_for_cable()
458 rk628_i2c_read(rk628, COMBRX_REG(0x6630), &val_a); in rk628_combrxphy_set_hdmi_mode_for_cable()
459 rk628_i2c_read(rk628, COMBRX_REG(0x6608), &val_b); in rk628_combrxphy_set_hdmi_mode_for_cable()
460 dev_err(rk628->dev, in rk628_combrxphy_set_hdmi_mode_for_cable()
465 rk628_i2c_update_bits(rk628, COMBRX_REG(0x6628), BIT(31), BIT(31)); in rk628_combrxphy_set_hdmi_mode_for_cable()
470 rk628_i2c_read(rk628, COMBRX_REG(0x6654), &val); in rk628_combrxphy_set_hdmi_mode_for_cable()
472 rk628_i2c_read(rk628, COMBRX_REG(0x6630), &val_a); in rk628_combrxphy_set_hdmi_mode_for_cable()
473 rk628_i2c_read(rk628, COMBRX_REG(0x6608), &val_b); in rk628_combrxphy_set_hdmi_mode_for_cable()
474 dev_err(rk628->dev, in rk628_combrxphy_set_hdmi_mode_for_cable()
483 dev_info(rk628->dev, "cdr_mode:%d, cdr_data:%d\n", cdr_mode, cdr_data); in rk628_combrxphy_set_hdmi_mode_for_cable()
490 rk628_i2c_write(rk628, COMBRX_REG(0x662c), 0x01000500); in rk628_combrxphy_set_hdmi_mode_for_cable()
491 rk628_i2c_write(rk628, COMBRX_REG(0x66a8), 0x0000c600); in rk628_combrxphy_set_hdmi_mode_for_cable()
493 rk628_i2c_write(rk628, COMBRX_REG(0x662c), 0x01001400); in rk628_combrxphy_set_hdmi_mode_for_cable()
494 rk628_i2c_write(rk628, COMBRX_REG(0x66a8), 0x0000c600); in rk628_combrxphy_set_hdmi_mode_for_cable()
516 dev_info(rk628->dev, "cdr_mode:%d, pll_man:%#x\n", cdr_mode, pll_man); in rk628_combrxphy_set_hdmi_mode_for_cable()
517 rk628_i2c_write(rk628, COMBRX_REG(0x6630), pll_man); in rk628_combrxphy_set_hdmi_mode_for_cable()
520 rk628_combrxphy_sample_edge_procedure_for_cable(rk628, cdr_mode); in rk628_combrxphy_set_hdmi_mode_for_cable()
524 rk628_i2c_write(rk628, COMBRX_REG(0x66a0), 0x00000003); in rk628_combrxphy_set_hdmi_mode_for_cable()
526 rk628_i2c_write(rk628, COMBRX_REG(0x66b0), 0x00080060); in rk628_combrxphy_set_hdmi_mode_for_cable()
528 rk628_i2c_write(rk628, COMBRX_REG(0x66a0), 0x00000083); in rk628_combrxphy_set_hdmi_mode_for_cable()
530 rk628_i2c_write(rk628, COMBRX_REG(0x66b0), 0x00380060); in rk628_combrxphy_set_hdmi_mode_for_cable()
532 rk628_i2c_update_bits(rk628, COMBRX_REG(0x66ac), GENMASK(31, 24), UPDATE(0x22, 31, 24)); in rk628_combrxphy_set_hdmi_mode_for_cable()
539 rk628_i2c_read(rk628, COMBRX_REG(0x66b4), &data_a); in rk628_combrxphy_set_hdmi_mode_for_cable()
540 rk628_i2c_read(rk628, COMBRX_REG(0x66b8), &data_b); in rk628_combrxphy_set_hdmi_mode_for_cable()
549 dev_info(rk628->dev, "channel alignment done\n"); in rk628_combrxphy_set_hdmi_mode_for_cable()
550 dev_info(rk628->dev, "rx initial done\n"); in rk628_combrxphy_set_hdmi_mode_for_cable()
553 dev_info(rk628->dev, "link not stable, count:%d of 100\n", count); in rk628_combrxphy_set_hdmi_mode_for_cable()
556 dev_err(rk628->dev, "channel alignment failed!\n"); in rk628_combrxphy_set_hdmi_mode_for_cable()
563 int rk628_rxphy_power_on(struct rk628 *rk628, int f) in rk628_rxphy_power_on() argument
565 rk628_control_assert(rk628, RGU_RXPHY); in rk628_rxphy_power_on()
567 rk628_control_deassert(rk628, RGU_RXPHY); in rk628_rxphy_power_on()
571 return rk628_combrxphy_set_hdmi_mode_for_cable(rk628, f); in rk628_rxphy_power_on()
575 int rk628_rxphy_power_off(struct rk628 *rk628) in rk628_rxphy_power_off() argument
577 rk628_i2c_update_bits(rk628, COMBRX_REG(0x6630), BIT(0), BIT(0)); in rk628_rxphy_power_off()
578 rk628_control_assert(rk628, RGU_RXPHY); in rk628_rxphy_power_off()