Lines Matching refs:rk628

29 static inline void testif_testclk_assert(struct rk628 *rk628)  in testif_testclk_assert()  argument
31 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, in testif_testclk_assert()
36 static inline void testif_testclk_deassert(struct rk628 *rk628) in testif_testclk_deassert() argument
38 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, in testif_testclk_deassert()
43 static inline void testif_testclr_assert(struct rk628 *rk628) in testif_testclr_assert() argument
45 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, in testif_testclr_assert()
50 static inline void testif_testclr_deassert(struct rk628 *rk628) in testif_testclr_deassert() argument
52 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, in testif_testclr_deassert()
57 static inline void testif_testen_assert(struct rk628 *rk628) in testif_testen_assert() argument
59 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, in testif_testen_assert()
64 static inline void testif_testen_deassert(struct rk628 *rk628) in testif_testen_deassert() argument
66 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, in testif_testen_deassert()
71 static inline void testif_set_data(struct rk628 *rk628, u8 data) in testif_set_data() argument
73 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, in testif_set_data()
78 static inline u8 testif_get_data(struct rk628 *rk628) in testif_get_data() argument
82 rk628_i2c_read(rk628, GRF_DPHY0_STATUS, &data); in testif_get_data()
87 static void testif_test_code_write(struct rk628 *rk628, u8 test_code) in testif_test_code_write() argument
89 testif_testclk_assert(rk628); in testif_test_code_write()
90 testif_set_data(rk628, test_code); in testif_test_code_write()
91 testif_testen_assert(rk628); in testif_test_code_write()
92 testif_testclk_deassert(rk628); in testif_test_code_write()
93 testif_testen_deassert(rk628); in testif_test_code_write()
96 static void testif_test_data_write(struct rk628 *rk628, u8 test_data) in testif_test_data_write() argument
98 testif_testclk_deassert(rk628); in testif_test_data_write()
99 testif_set_data(rk628, test_data); in testif_test_data_write()
100 testif_testclk_assert(rk628); in testif_test_data_write()
103 static u8 testif_write(struct rk628 *rk628, u8 test_code, u8 test_data) in testif_write() argument
107 testif_test_code_write(rk628, test_code); in testif_write()
108 testif_test_data_write(rk628, test_data); in testif_write()
109 monitor_data = testif_get_data(rk628); in testif_write()
111 dev_info(rk628->dev, "test_code=0x%02x, ", test_code); in testif_write()
112 dev_info(rk628->dev, "test_data=0x%02x, ", test_data); in testif_write()
113 dev_info(rk628->dev, "monitor_data=0x%02x\n", monitor_data); in testif_write()
117 static void rk628_csi_get_detected_timings(struct rk628 *rk628) in rk628_csi_get_detected_timings() argument
120 struct rk628_csi *csi = rk628->csi; in rk628_csi_get_detected_timings()
125 src = rk628_display_get_src_mode(rk628); in rk628_csi_get_detected_timings()
126 dst = rk628_display_get_dst_mode(rk628); in rk628_csi_get_detected_timings()
128 rk628_set_output_bus_format(rk628, BUS_FMT_YUV422); in rk628_csi_get_detected_timings()
134 static inline u8 testif_read(struct rk628 *rk628, u8 test_code) in testif_read() argument
138 testif_test_code_write(rk628, test_code); in testif_read()
139 test_data = testif_get_data(rk628); in testif_read()
140 testif_test_data_write(rk628, test_data); in testif_read()
145 static inline void mipi_dphy_enableclk_assert(struct rk628 *rk628) in mipi_dphy_enableclk_assert() argument
147 rk628_i2c_update_bits(rk628, CSITX_DPHY_CTRL, DPHY_ENABLECLK, in mipi_dphy_enableclk_assert()
152 static inline void mipi_dphy_enableclk_deassert(struct rk628 *rk628) in mipi_dphy_enableclk_deassert() argument
154 rk628_i2c_update_bits(rk628, CSITX_DPHY_CTRL, DPHY_ENABLECLK, 0); in mipi_dphy_enableclk_deassert()
158 static inline void mipi_dphy_shutdownz_assert(struct rk628 *rk628) in mipi_dphy_shutdownz_assert() argument
160 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, CSI_PHYSHUTDOWNZ, 0); in mipi_dphy_shutdownz_assert()
164 static inline void mipi_dphy_shutdownz_deassert(struct rk628 *rk628) in mipi_dphy_shutdownz_deassert() argument
166 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, CSI_PHYSHUTDOWNZ, in mipi_dphy_shutdownz_deassert()
171 static inline void mipi_dphy_rstz_assert(struct rk628 *rk628) in mipi_dphy_rstz_assert() argument
173 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, CSI_PHYRSTZ, 0); in mipi_dphy_rstz_assert()
177 static inline void mipi_dphy_rstz_deassert(struct rk628 *rk628) in mipi_dphy_rstz_deassert() argument
179 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, CSI_PHYRSTZ, in mipi_dphy_rstz_deassert()
184 static void mipi_dphy_init_hsfreqrange(struct rk628 *rk628) in mipi_dphy_init_hsfreqrange() argument
203 struct rk628_csi *csi = rk628->csi; in mipi_dphy_init_hsfreqrange()
216 testif_write(rk628, 0x44, HSFREQRANGE(hsfreqrange)); in mipi_dphy_init_hsfreqrange()
219 static int mipi_dphy_reset(struct rk628 *rk628) in mipi_dphy_reset() argument
224 mipi_dphy_enableclk_deassert(rk628); in mipi_dphy_reset()
225 mipi_dphy_shutdownz_assert(rk628); in mipi_dphy_reset()
226 mipi_dphy_rstz_assert(rk628); in mipi_dphy_reset()
227 testif_testclr_assert(rk628); in mipi_dphy_reset()
230 rk628_i2c_update_bits(rk628, GRF_MIPI_TX0_CON, in mipi_dphy_reset()
234 testif_testclr_deassert(rk628); in mipi_dphy_reset()
235 mipi_dphy_enableclk_assert(rk628); in mipi_dphy_reset()
236 mipi_dphy_shutdownz_deassert(rk628); in mipi_dphy_reset()
237 mipi_dphy_rstz_deassert(rk628); in mipi_dphy_reset()
240 ret = rk628_i2c_read(rk628, CSITX_CSITX_STATUS1, &val); in mipi_dphy_reset()
242 dev_info(rk628->dev, "lane module is not in stop state\n"); in mipi_dphy_reset()
249 static int mipi_dphy_power_on(struct rk628 *rk628) in mipi_dphy_power_on() argument
253 struct rk628_csi *csi = rk628->csi; in mipi_dphy_power_on()
267 dev_info(rk628->dev, "%s mipi bitrate:%llu mbps\n", __func__, csi->lane_mbps); in mipi_dphy_power_on()
268 rk628_combtxphy_set_bus_width(rk628, bus_width); in mipi_dphy_power_on()
269 rk628_combtxphy_set_mode(rk628, PHY_MODE_VIDEO_MIPI); in mipi_dphy_power_on()
271 mipi_dphy_init_hsfreqrange(rk628); in mipi_dphy_power_on()
273 rk628_combtxphy_power_on(rk628); in mipi_dphy_power_on()
277 rk628_i2c_read(rk628, CSITX_CSITX_STATUS1, &val); in mipi_dphy_power_on()
279 dev_info(rk628->dev, "PHY is not locked\n"); in mipi_dphy_power_on()
288 static void mipi_dphy_power_off(struct rk628 *rk628) in mipi_dphy_power_off() argument
290 rk628_combtxphy_power_off(rk628); in mipi_dphy_power_off()
293 static void rk62_csi_reset(struct rk628 *rk628) in rk62_csi_reset() argument
295 rk628_i2c_write(rk628, CSITX_SYS_CTRL0_IMD, 0x1); in rk62_csi_reset()
297 rk628_i2c_write(rk628, CSITX_SYS_CTRL0_IMD, 0x0); in rk62_csi_reset()
300 static void rk628_csi_set_csi(struct rk628 *rk628) in rk628_csi_set_csi() argument
308 if (!rk628->csi) { in rk628_csi_set_csi()
309 csi = devm_kzalloc(rk628->dev, sizeof(*csi), GFP_KERNEL); in rk628_csi_set_csi()
312 rk628->csi = csi; in rk628_csi_set_csi()
314 csi = rk628->csi; in rk628_csi_set_csi()
320 rk62_csi_reset(rk628); in rk628_csi_set_csi()
323 dev_info(rk628->dev, "%s: txphy already power on, power off\n", in rk628_csi_set_csi()
325 mipi_dphy_power_off(rk628); in rk628_csi_set_csi()
329 mipi_dphy_power_on(rk628); in rk628_csi_set_csi()
331 dev_info(rk628->dev, "%s: txphy power on!\n", __func__); in rk628_csi_set_csi()
334 rk628_i2c_update_bits(rk628, CSITX_CSITX_EN, in rk628_csi_set_csi()
347 rk628_i2c_update_bits(rk628, CSITX_SYS_CTRL1, in rk628_csi_set_csi()
350 rk628_i2c_write(rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); in rk628_csi_set_csi()
351 rk628_i2c_write(rk628, CSITX_SYS_CTRL2, VOP_WHOLE_FRM_EN | VSYNC_ENABLE); in rk628_csi_set_csi()
352 rk628_i2c_update_bits(rk628, CSITX_SYS_CTRL3_IMD, in rk628_csi_set_csi()
360 rk628_i2c_write(rk628, CSITX_VOP_PATH_CTRL, in rk628_csi_set_csi()
367 rk628_i2c_update_bits(rk628, CSITX_DPHY_CTRL, in rk628_csi_set_csi()
370 rk628_i2c_write(rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); in rk628_csi_set_csi()
371 dev_info(rk628->dev, "%s csi cofig done\n", __func__); in rk628_csi_set_csi()
374 static void enable_csitx(struct rk628 *rk628) in enable_csitx() argument
379 rk628_csi_set_csi(rk628); in enable_csitx()
380 rk628_i2c_update_bits(rk628, CSITX_CSITX_EN, in enable_csitx()
385 rk628_i2c_write(rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); in enable_csitx()
387 rk628_i2c_write(rk628, CSITX_ERR_INTR_CLR_IMD, 0xffffffff); in enable_csitx()
388 rk628_i2c_update_bits(rk628, CSITX_SYS_CTRL1, in enable_csitx()
390 rk628_i2c_write(rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); in enable_csitx()
392 ret = rk628_i2c_read(rk628, CSITX_ERR_INTR_RAW_STATUS_IMD, &val); in enable_csitx()
396 dev_info(rk628->dev, "%s csitx err, retry:%d, err status:%#x, ret:%d\n", in enable_csitx()
402 static void enable_stream(struct rk628 *rk628, bool en) in enable_stream() argument
404 dev_info(rk628->dev, "%s: %sable\n", __func__, en ? "en" : "dis"); in enable_stream()
406 enable_csitx(rk628); in enable_stream()
408 rk628_i2c_update_bits(rk628, CSITX_CSITX_EN, in enable_stream()
413 rk628_i2c_write(rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); in enable_stream()
417 void rk628_csi_init(struct rk628 *rk628) in rk628_csi_init() argument
419 rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, in rk628_csi_init()
421 rk628_csi_get_detected_timings(rk628); in rk628_csi_init()
422 mipi_dphy_reset(rk628); in rk628_csi_init()
425 void rk628_csi_enable(struct rk628 *rk628) in rk628_csi_enable() argument
427 rk628_csi_get_detected_timings(rk628); in rk628_csi_enable()
428 return enable_stream(rk628, true); in rk628_csi_enable()
431 void rk628_csi_disable(struct rk628 *rk628) in rk628_csi_disable() argument
433 return enable_stream(rk628, false); in rk628_csi_disable()