Lines Matching refs:rk628

84 static void rk628_hdmirx_ctrl_enable(struct rk628 *rk628)  in rk628_hdmirx_ctrl_enable()  argument
87 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, in rk628_hdmirx_ctrl_enable()
91 rk628_i2c_write(rk628, HDMI_RX_HDMI20_CONTROL, 0x10001f10); in rk628_hdmirx_ctrl_enable()
92 rk628_i2c_write(rk628, HDMI_RX_HDMI_MODE_RECOVER, 0x00000021); in rk628_hdmirx_ctrl_enable()
93 rk628_i2c_write(rk628, HDMI_RX_PDEC_CTRL, 0xbfff8011); in rk628_hdmirx_ctrl_enable()
94 rk628_i2c_write(rk628, HDMI_RX_PDEC_ASP_CTRL, 0x00000040); in rk628_hdmirx_ctrl_enable()
95 rk628_i2c_write(rk628, HDMI_RX_HDMI_RESMPL_CTRL, 0x00000001); in rk628_hdmirx_ctrl_enable()
96 rk628_i2c_write(rk628, HDMI_RX_HDMI_SYNC_CTRL, 0x00000014); in rk628_hdmirx_ctrl_enable()
97 rk628_i2c_write(rk628, HDMI_RX_PDEC_ERR_FILTER, 0x00000008); in rk628_hdmirx_ctrl_enable()
98 rk628_i2c_write(rk628, HDMI_RX_SCDC_I2CCONFIG, 0x01000000); in rk628_hdmirx_ctrl_enable()
99 rk628_i2c_write(rk628, HDMI_RX_SCDC_CONFIG, 0x00000001); in rk628_hdmirx_ctrl_enable()
100 rk628_i2c_write(rk628, HDMI_RX_SCDC_WRDATA0, 0xabcdef01); in rk628_hdmirx_ctrl_enable()
101 rk628_i2c_write(rk628, HDMI_RX_CHLOCK_CONFIG, 0x0030c15c); in rk628_hdmirx_ctrl_enable()
102 rk628_i2c_write(rk628, HDMI_RX_HDMI_ERROR_PROTECT, 0x000d0c98); in rk628_hdmirx_ctrl_enable()
103 rk628_i2c_write(rk628, HDMI_RX_MD_HCTRL1, 0x00000010); in rk628_hdmirx_ctrl_enable()
104 rk628_i2c_write(rk628, HDMI_RX_MD_HCTRL2, 0x00001738); in rk628_hdmirx_ctrl_enable()
105 rk628_i2c_write(rk628, HDMI_RX_MD_VCTRL, 0x00000002); in rk628_hdmirx_ctrl_enable()
106 rk628_i2c_write(rk628, HDMI_RX_MD_VTH, 0x0000073a); in rk628_hdmirx_ctrl_enable()
107 rk628_i2c_write(rk628, HDMI_RX_MD_IL_POL, 0x00000004); in rk628_hdmirx_ctrl_enable()
108 rk628_i2c_write(rk628, HDMI_RX_PDEC_ACRM_CTRL, 0x00000000); in rk628_hdmirx_ctrl_enable()
109 rk628_i2c_write(rk628, HDMI_RX_HDMI_DCM_CTRL, 0x00040414); in rk628_hdmirx_ctrl_enable()
110 rk628_i2c_write(rk628, HDMI_RX_HDMI_CKM_EVLTM, 0x00103e70); in rk628_hdmirx_ctrl_enable()
111 rk628_i2c_write(rk628, HDMI_RX_HDMI_CKM_F, 0x0c1c0b54); in rk628_hdmirx_ctrl_enable()
112 rk628_i2c_write(rk628, HDMI_RX_HDMI_RESMPL_CTRL, 0x00000001); in rk628_hdmirx_ctrl_enable()
114 rk628_i2c_update_bits(rk628, HDMI_RX_HDCP_SETTINGS, in rk628_hdmirx_ctrl_enable()
125 static void rk628_hdmirx_video_unmute(struct rk628 *rk628, u8 unmute) in rk628_hdmirx_video_unmute() argument
127 rk628_i2c_update_bits(rk628, HDMI_RX_DMI_DISABLE_IF, VID_ENABLE_MASK, VID_ENABLE(unmute)); in rk628_hdmirx_video_unmute()
130 static void rk628_hdmirx_hpd_ctrl(struct rk628 *rk628, bool en) in rk628_hdmirx_hpd_ctrl() argument
133 struct rk628_hdmirx *hdmirx = rk628->hdmirx; in rk628_hdmirx_hpd_ctrl()
135 dev_dbg(rk628->dev, "%s: %sable, hpd invert:%d\n", __func__, in rk628_hdmirx_hpd_ctrl()
139 rk628_i2c_update_bits(rk628, HDMI_RX_HDMI_SETUP_CTRL, in rk628_hdmirx_hpd_ctrl()
143 static void rk628_hdmirx_disable_edid(struct rk628 *rk628) in rk628_hdmirx_disable_edid() argument
145 rk628_hdmirx_hpd_ctrl(rk628, false); in rk628_hdmirx_disable_edid()
146 rk628_hdmirx_video_unmute(rk628, 0); in rk628_hdmirx_disable_edid()
149 static void rk628_hdmirx_enable_edid(struct rk628 *rk628) in rk628_hdmirx_enable_edid() argument
151 rk628_hdmirx_hpd_ctrl(rk628, true); in rk628_hdmirx_enable_edid()
154 static int tx_5v_power_present(struct rk628 *rk628) in tx_5v_power_present() argument
160 if (!rk628->plugin_det_gpio) in tx_5v_power_present()
165 val = gpiod_get_value(rk628->plugin_det_gpio); in tx_5v_power_present()
172 dev_dbg(rk628->dev, "%s: %d\n", __func__, ret); in tx_5v_power_present()
177 static int rk628_hdmirx_init_edid(struct rk628 *rk628) in rk628_hdmirx_init_edid() argument
180 struct rk628_hdmirx *hdmirx = rk628->hdmirx; in rk628_hdmirx_init_edid()
185 src_mode = rk628_display_get_src_mode(rk628); in rk628_hdmirx_init_edid()
266 static int rk628_hdmirx_set_edid(struct rk628 *rk628) in rk628_hdmirx_set_edid() argument
272 rk628_hdmirx_disable_edid(rk628); in rk628_hdmirx_set_edid()
274 if (!rk628->plugin_det_gpio) in rk628_hdmirx_set_edid()
278 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, in rk628_hdmirx_set_edid()
284 rk628_hdmirx_init_edid(rk628); in rk628_hdmirx_set_edid()
288 rk628_i2c_write(rk628, EDID_BASE + i * 4, edid_init_data[i]); in rk628_hdmirx_set_edid()
294 rk628_i2c_read(rk628, EDID_BASE + i * 4, &val); in rk628_hdmirx_set_edid()
303 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, in rk628_hdmirx_set_edid()
314 static int rk628_hdmirx_phy_power_on(struct rk628 *rk628, int f) in rk628_hdmirx_phy_power_on() argument
320 dev_info(rk628->dev, "rxphy already power on, power off!\n"); in rk628_hdmirx_phy_power_on()
321 ret = rk628_combrxphy_power_off(rk628); in rk628_hdmirx_phy_power_on()
323 dev_info(rk628->dev, "hdmi rxphy power off failed!\n"); in rk628_hdmirx_phy_power_on()
330 ret = rk628_combrxphy_power_on(rk628, f); in rk628_hdmirx_phy_power_on()
333 dev_info(rk628->dev, "hdmi rxphy power on failed\n"); in rk628_hdmirx_phy_power_on()
336 dev_info(rk628->dev, "hdmi rxphy power on success\n"); in rk628_hdmirx_phy_power_on()
340 dev_info(rk628->dev, "%s:rxphy_pwron=%d\n", __func__, rxphy_pwron); in rk628_hdmirx_phy_power_on()
344 static void rk628_hdmirx_get_timing(struct rk628 *rk628) in rk628_hdmirx_get_timing() argument
356 struct rk628_hdmirx *hdmirx = rk628->hdmirx; in rk628_hdmirx_get_timing()
358 rk628_i2c_read(rk628, HDMI_RX_SCDC_REGS1, &val); in rk628_hdmirx_get_timing()
361 rk628_i2c_read(rk628, HDMI_RX_MD_STS, &val); in rk628_hdmirx_get_timing()
364 rk628_i2c_read(rk628, HDMI_RX_MD_HACT_PX, &val); in rk628_hdmirx_get_timing()
366 rk628_i2c_read(rk628, HDMI_RX_MD_VAL, &val); in rk628_hdmirx_get_timing()
368 rk628_i2c_read(rk628, HDMI_RX_MD_HT1, &val); in rk628_hdmirx_get_timing()
370 rk628_i2c_read(rk628, HDMI_RX_MD_VTL, &val); in rk628_hdmirx_get_timing()
372 rk628_i2c_read(rk628, HDMI_RX_MD_HT1, &val); in rk628_hdmirx_get_timing()
374 rk628_i2c_read(rk628, HDMI_RX_MD_VOL, &val); in rk628_hdmirx_get_timing()
377 rk628_i2c_read(rk628, HDMI_RX_HDMI_CKM_RESULT, &val); in rk628_hdmirx_get_timing()
384 dev_info(rk628->dev, "timing err, htotal:%d, vtotal:%d\n", htotal, vtotal); in rk628_hdmirx_get_timing()
389 rk628_i2c_read(rk628, HDMI_RX_MD_HT0, &val); in rk628_hdmirx_get_timing()
394 rk628_i2c_read(rk628, HDMI_RX_MD_VSC, &val); in rk628_hdmirx_get_timing()
400 rk628_i2c_read(rk628, HDMI_RX_HDMI_STS, &val); in rk628_hdmirx_get_timing()
412 dev_info(rk628->dev, in rk628_hdmirx_get_timing()
421 dev_info(rk628->dev, "cnt_num:%d, tmds_cnt:%d, hs_cnt:%d, vs_cnt:%d, hofs:%d\n", in rk628_hdmirx_get_timing()
449 dev_info(rk628->dev, "SCDC_REGS1:%#x, act:%dx%d, total:%dx%d, fps:%d, pixclk:%llu\n", in rk628_hdmirx_get_timing()
451 dev_info(rk628->dev, "hfp:%d, hs:%d, hbp:%d, vfp:%d, vs:%d, vbp:%d, interlace:%d\n", in rk628_hdmirx_get_timing()
455 static int rk628_hdmirx_phy_setup(struct rk628 *rk628) in rk628_hdmirx_phy_setup() argument
460 struct rk628_hdmirx *hdmirx = rk628->hdmirx; in rk628_hdmirx_phy_setup()
473 dst_mode = rk628_display_get_dst_mode(rk628); in rk628_hdmirx_phy_setup()
482 rk628_hdmirx_phy_power_on(rk628, f); in rk628_hdmirx_phy_setup()
488 rk628_i2c_read(rk628, HDMI_RX_MD_HACT_PX, &val); in rk628_hdmirx_phy_setup()
490 rk628_i2c_read(rk628, HDMI_RX_MD_HT1, &val); in rk628_hdmirx_phy_setup()
493 rk628_i2c_read(rk628, HDMI_RX_MD_VAL, &val); in rk628_hdmirx_phy_setup()
495 rk628_i2c_read(rk628, HDMI_RX_MD_VTL, &val); in rk628_hdmirx_phy_setup()
498 rk628_i2c_read(rk628, HDMI_RX_SCDC_REGS1, &val); in rk628_hdmirx_phy_setup()
501 dev_info(rk628->dev, in rk628_hdmirx_phy_setup()
511 dev_info(rk628->dev, "%s hdmi rxphy lock failed, retry:%d\n", in rk628_hdmirx_phy_setup()
515 rk628_hdmirx_get_timing(rk628); in rk628_hdmirx_phy_setup()
517 src_mode = rk628_display_get_src_mode(rk628); in rk628_hdmirx_phy_setup()
547 static u32 rk628_hdmirx_get_input_format(struct rk628 *rk628) in rk628_hdmirx_get_input_format() argument
552 struct rk628_hdmirx *hdmirx = rk628->hdmirx; in rk628_hdmirx_get_input_format()
554 rk628_i2c_read(rk628, HDMI_RX_PDEC_ISTS, &val); in rk628_hdmirx_get_input_format()
557 rk628_i2c_read(rk628, HDMI_RX_PDEC_AVI_PB, &format); in rk628_hdmirx_get_input_format()
558 dev_dbg(rk628->dev, "%s PDEC_AVI_PB:%#x\n", __func__, format); in rk628_hdmirx_get_input_format()
586 rk628_i2c_write(rk628, HDMI_RX_PDEC_ICLR, AVI_RCV_ISTS); in rk628_hdmirx_get_input_format()
592 static int rk628_check_signal(struct rk628 *rk628) in rk628_check_signal() argument
596 rk628_i2c_read(rk628, HDMI_RX_MD_HACT_PX, &val); in rk628_check_signal()
598 rk628_i2c_read(rk628, HDMI_RX_MD_VAL, &val); in rk628_check_signal()
602 dev_info(rk628->dev, "no signal\n"); in rk628_check_signal()
609 static bool rk628_hdmirx_status_change(struct rk628 *rk628) in rk628_hdmirx_status_change() argument
612 struct rk628_hdmirx *hdmirx = rk628->hdmirx; in rk628_hdmirx_status_change()
614 rk628_i2c_read(rk628, HDMI_RX_MD_HACT_PX, &val); in rk628_hdmirx_status_change()
616 rk628_i2c_read(rk628, HDMI_RX_MD_VAL, &val); in rk628_hdmirx_status_change()
618 if (!rk628->plugin_det_gpio && !hact && !vact) in rk628_hdmirx_status_change()
622 dev_info(rk628->dev, "new: hdisplay=%d, vdisplay=%d\n", hact, vact); in rk628_hdmirx_status_change()
623 dev_info(rk628->dev, "old: hdisplay=%d, vdisplay=%d\n", in rk628_hdmirx_status_change()
628 rk628_hdmirx_get_input_format(rk628); in rk628_hdmirx_status_change()
629 if (hdmirx->input_format != rk628_get_input_bus_format(rk628)) in rk628_hdmirx_status_change()
635 static int rk628_hdmirx_init(struct rk628 *rk628) in rk628_hdmirx_init() argument
638 struct device *dev = rk628->dev; in rk628_hdmirx_init()
640 hdmirx = devm_kzalloc(rk628->dev, sizeof(*hdmirx), GFP_KERNEL); in rk628_hdmirx_init()
643 rk628->hdmirx = hdmirx; in rk628_hdmirx_init()
652 rk628_i2c_write(rk628, GRF_GPIO1AB_SEL_CON, HIWORD_UPDATE(0x7, 10, 8)); in rk628_hdmirx_init()
654 rk628_i2c_write(rk628, GRF_GPIO0AB_SEL_CON, 0x155c155c); in rk628_hdmirx_init()
657 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, in rk628_hdmirx_init()
659 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, in rk628_hdmirx_init()
661 rk628_hdmirx_set_edid(rk628); in rk628_hdmirx_init()
663 rk628_i2c_write(rk628, HDMI_RX_PDEC_ICLR, AVI_RCV_ISTS); in rk628_hdmirx_init()
665 dev_info(rk628->dev, "hdmirx driver version: %s\n", DRIVER_VERSION); in rk628_hdmirx_init()
670 void rk628_hdmirx_enable_interrupts(struct rk628 *rk628, bool en) in rk628_hdmirx_enable_interrupts() argument
676 dev_dbg(rk628->dev, "%s: %sable\n", __func__, en ? "en" : "dis"); in rk628_hdmirx_enable_interrupts()
678 rk628_i2c_write(rk628, HDMI_RX_MD_ICLR, md_mask); in rk628_hdmirx_enable_interrupts()
680 rk628_i2c_write(rk628, HDMI_RX_MD_IEN_SET, md_mask); in rk628_hdmirx_enable_interrupts()
682 rk628_i2c_write(rk628, HDMI_RX_MD_IEN_CLR, md_mask); in rk628_hdmirx_enable_interrupts()
683 rk628_i2c_write(rk628, HDMI_RX_AUD_FIFO_IEN_CLR, 0x1f); in rk628_hdmirx_enable_interrupts()
686 rk628_i2c_read(rk628, HDMI_RX_MD_IEN, &md_ien); in rk628_hdmirx_enable_interrupts()
687 rk628_i2c_read(rk628, HDMI_RX_PDEC_IEN, &pdec_ien); in rk628_hdmirx_enable_interrupts()
688 dev_dbg(rk628->dev, "%s MD_IEN:%#x, PDEC_IEN:%#x\n", __func__, md_ien, pdec_ien); in rk628_hdmirx_enable_interrupts()
691 int rk628_hdmirx_enable(struct rk628 *rk628) in rk628_hdmirx_enable() argument
696 if (!rk628->hdmirx) { in rk628_hdmirx_enable()
697 ret = rk628_hdmirx_init(rk628); in rk628_hdmirx_enable()
702 hdmirx = rk628->hdmirx; in rk628_hdmirx_enable()
703 if (tx_5v_power_present(rk628)) { in rk628_hdmirx_enable()
705 rk628_hdmirx_enable_edid(rk628); in rk628_hdmirx_enable()
706 rk628_hdmirx_ctrl_enable(rk628); in rk628_hdmirx_enable()
707 rk628_hdmirx_phy_setup(rk628); in rk628_hdmirx_enable()
708 rk628_hdmirx_get_input_format(rk628); in rk628_hdmirx_enable()
709 rk628_set_input_bus_format(rk628, hdmirx->input_format); in rk628_hdmirx_enable()
710 dev_info(rk628->dev, "hdmirx plug in\n"); in rk628_hdmirx_enable()
711 dev_info(rk628->dev, "input: %d, output: %d\n", hdmirx->input_format, in rk628_hdmirx_enable()
712 rk628_get_output_bus_format(rk628)); in rk628_hdmirx_enable()
713 if (!rk628_check_signal(rk628)) in rk628_hdmirx_enable()
716 rk628_hdmirx_video_unmute(rk628, 1); in rk628_hdmirx_enable()
721 rk628_hdmirx_disable_edid(rk628); in rk628_hdmirx_enable()
722 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, SW_I2S_DATA_OEN_MASK, SW_I2S_DATA_OEN(1)); in rk628_hdmirx_enable()
727 void rk628_hdmirx_disable(struct rk628 *rk628) in rk628_hdmirx_disable() argument
732 if (!rk628->hdmirx) { in rk628_hdmirx_disable()
733 ret = rk628_hdmirx_init(rk628); in rk628_hdmirx_disable()
738 hdmirx = rk628->hdmirx; in rk628_hdmirx_disable()
739 if (!tx_5v_power_present(rk628)) { in rk628_hdmirx_disable()
741 rk628_hdmirx_disable_edid(rk628); in rk628_hdmirx_disable()
742 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, SW_I2S_DATA_OEN_MASK, in rk628_hdmirx_disable()
744 dev_info(rk628->dev, "hdmirx plug out\n"); in rk628_hdmirx_disable()
748 int rk628_hdmirx_detect(struct rk628 *rk628) in rk628_hdmirx_detect() argument
753 if (!rk628->hdmirx) { in rk628_hdmirx_detect()
754 ret = rk628_hdmirx_init(rk628); in rk628_hdmirx_detect()
755 if (ret < 0 || !rk628->hdmirx) in rk628_hdmirx_detect()
758 hdmirx = rk628->hdmirx; in rk628_hdmirx_detect()
760 if (tx_5v_power_present(rk628)) { in rk628_hdmirx_detect()
764 if (rk628_hdmirx_status_change(rk628)) in rk628_hdmirx_detect()