Lines Matching refs:ctx
44 static int i2c_access_workaround(struct anx7625_data *ctx, in i2c_access_workaround() argument
51 if (client == ctx->last_client) in i2c_access_workaround()
54 ctx->last_client = client; in i2c_access_workaround()
56 if (client == ctx->i2c.tcpc_client) in i2c_access_workaround()
58 else if (client == ctx->i2c.tx_p0_client) in i2c_access_workaround()
60 else if (client == ctx->i2c.tx_p1_client) in i2c_access_workaround()
62 else if (client == ctx->i2c.rx_p0_client) in i2c_access_workaround()
64 else if (client == ctx->i2c.rx_p1_client) in i2c_access_workaround()
78 static int anx7625_reg_read(struct anx7625_data *ctx, in anx7625_reg_read() argument
84 i2c_access_workaround(ctx, client); in anx7625_reg_read()
94 static int anx7625_reg_block_read(struct anx7625_data *ctx, in anx7625_reg_block_read() argument
101 i2c_access_workaround(ctx, client); in anx7625_reg_block_read()
111 static int anx7625_reg_write(struct anx7625_data *ctx, in anx7625_reg_write() argument
118 i2c_access_workaround(ctx, client); in anx7625_reg_write()
129 static int anx7625_write_or(struct anx7625_data *ctx, in anx7625_write_or() argument
135 val = anx7625_reg_read(ctx, client, offset); in anx7625_write_or()
139 return anx7625_reg_write(ctx, client, offset, (val | (mask))); in anx7625_write_or()
142 static int anx7625_write_and(struct anx7625_data *ctx, in anx7625_write_and() argument
148 val = anx7625_reg_read(ctx, client, offset); in anx7625_write_and()
152 return anx7625_reg_write(ctx, client, offset, (val & (mask))); in anx7625_write_and()
155 static int anx7625_write_and_or(struct anx7625_data *ctx, in anx7625_write_and_or() argument
161 val = anx7625_reg_read(ctx, client, offset); in anx7625_write_and_or()
165 return anx7625_reg_write(ctx, client, in anx7625_write_and_or()
169 static int anx7625_read_ctrl_status_p0(struct anx7625_data *ctx) in anx7625_read_ctrl_status_p0() argument
171 return anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, AP_AUX_CTRL_STATUS); in anx7625_read_ctrl_status_p0()
174 static int wait_aux_op_finish(struct anx7625_data *ctx) in wait_aux_op_finish() argument
176 struct device *dev = &ctx->client->dev; in wait_aux_op_finish()
181 ctx, val, in wait_aux_op_finish()
190 val = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, in wait_aux_op_finish()
200 static int anx7625_video_mute_control(struct anx7625_data *ctx, in anx7625_video_mute_control() argument
207 ret = anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_video_mute_control()
210 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_video_mute_control()
214 ret = anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_video_mute_control()
217 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_video_mute_control()
224 static int anx7625_config_audio_input(struct anx7625_data *ctx) in anx7625_config_audio_input() argument
226 struct device *dev = &ctx->client->dev; in anx7625_config_audio_input()
230 ret = anx7625_reg_write(ctx, ctx->i2c.tx_p2_client, in anx7625_config_audio_input()
234 ret |= anx7625_write_and_or(ctx, ctx->i2c.tx_p2_client, in anx7625_config_audio_input()
238 ret |= anx7625_write_and_or(ctx, ctx->i2c.tx_p2_client, in anx7625_config_audio_input()
242 ret |= anx7625_write_or(ctx, ctx->i2c.tx_p2_client, in anx7625_config_audio_input()
244 ret |= anx7625_write_and(ctx, ctx->i2c.tx_p2_client, in anx7625_config_audio_input()
247 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_config_audio_input()
354 static int anx7625_odfc_config(struct anx7625_data *ctx, in anx7625_odfc_config() argument
358 struct device *dev = &ctx->client->dev; in anx7625_odfc_config()
361 ret = anx7625_write_and(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_16, in anx7625_odfc_config()
363 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_16, in anx7625_odfc_config()
366 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p1_client, in anx7625_odfc_config()
368 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_8, in anx7625_odfc_config()
372 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_7, in anx7625_odfc_config()
376 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_7, in anx7625_odfc_config()
378 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_7, in anx7625_odfc_config()
394 static int anx7625_set_k_value(struct anx7625_data *ctx) in anx7625_set_k_value() argument
396 struct edid *edid = (struct edid *)ctx->slimport_edid_p.edid_raw_data; in anx7625_set_k_value()
399 return anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_set_k_value()
402 return anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_set_k_value()
406 static int anx7625_dsi_video_timing_config(struct anx7625_data *ctx) in anx7625_dsi_video_timing_config() argument
408 struct device *dev = &ctx->client->dev; in anx7625_dsi_video_timing_config()
414 ret = anx7625_calculate_m_n(ctx->dt.pixelclock.min * 1000, in anx7625_dsi_video_timing_config()
426 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, PIXEL_CLOCK_L, in anx7625_dsi_video_timing_config()
427 (ctx->dt.pixelclock.min / 1000) & 0xFF); in anx7625_dsi_video_timing_config()
428 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, PIXEL_CLOCK_H, in anx7625_dsi_video_timing_config()
429 (ctx->dt.pixelclock.min / 1000) >> 8); in anx7625_dsi_video_timing_config()
431 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
433 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
437 htotal = ctx->dt.hactive.min + ctx->dt.hfront_porch.min + in anx7625_dsi_video_timing_config()
438 ctx->dt.hback_porch.min + ctx->dt.hsync_len.min; in anx7625_dsi_video_timing_config()
439 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
441 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
444 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
445 HORIZONTAL_ACTIVE_PIXELS_L, ctx->dt.hactive.min & 0xFF); in anx7625_dsi_video_timing_config()
446 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
447 HORIZONTAL_ACTIVE_PIXELS_H, ctx->dt.hactive.min >> 8); in anx7625_dsi_video_timing_config()
449 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
450 HORIZONTAL_FRONT_PORCH_L, ctx->dt.hfront_porch.min); in anx7625_dsi_video_timing_config()
451 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
453 ctx->dt.hfront_porch.min >> 8); in anx7625_dsi_video_timing_config()
455 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
456 HORIZONTAL_SYNC_WIDTH_L, ctx->dt.hsync_len.min); in anx7625_dsi_video_timing_config()
457 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
458 HORIZONTAL_SYNC_WIDTH_H, ctx->dt.hsync_len.min >> 8); in anx7625_dsi_video_timing_config()
460 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
461 HORIZONTAL_BACK_PORCH_L, ctx->dt.hback_porch.min); in anx7625_dsi_video_timing_config()
462 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
463 HORIZONTAL_BACK_PORCH_H, ctx->dt.hback_porch.min >> 8); in anx7625_dsi_video_timing_config()
465 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, ACTIVE_LINES_L, in anx7625_dsi_video_timing_config()
466 ctx->dt.vactive.min); in anx7625_dsi_video_timing_config()
467 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, ACTIVE_LINES_H, in anx7625_dsi_video_timing_config()
468 ctx->dt.vactive.min >> 8); in anx7625_dsi_video_timing_config()
470 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
471 VERTICAL_FRONT_PORCH, ctx->dt.vfront_porch.min); in anx7625_dsi_video_timing_config()
473 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
474 VERTICAL_SYNC_WIDTH, ctx->dt.vsync_len.min); in anx7625_dsi_video_timing_config()
476 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
477 VERTICAL_BACK_PORCH, ctx->dt.vback_porch.min); in anx7625_dsi_video_timing_config()
479 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
481 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
483 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
486 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
488 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
490 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, MIPI_PLL_N_NUM_7_0, in anx7625_dsi_video_timing_config()
493 anx7625_set_k_value(ctx); in anx7625_dsi_video_timing_config()
495 ret |= anx7625_odfc_config(ctx, post_divider - 1); in anx7625_dsi_video_timing_config()
503 static int anx7625_swap_dsi_lane3(struct anx7625_data *ctx) in anx7625_swap_dsi_lane3() argument
506 struct device *dev = &ctx->client->dev; in anx7625_swap_dsi_lane3()
509 val = anx7625_reg_read(ctx, ctx->i2c.rx_p1_client, MIPI_SWAP); in anx7625_swap_dsi_lane3()
516 return anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, MIPI_SWAP, val); in anx7625_swap_dsi_lane3()
519 static int anx7625_api_dsi_config(struct anx7625_data *ctx) in anx7625_api_dsi_config() argument
523 struct device *dev = &ctx->client->dev; in anx7625_api_dsi_config()
526 ret = anx7625_swap_dsi_lane3(ctx); in anx7625_api_dsi_config()
541 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
551 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
555 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_18, in anx7625_api_dsi_config()
558 ret |= anx7625_dsi_video_timing_config(ctx); in anx7625_api_dsi_config()
565 ret = anx7625_write_and(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_6, in anx7625_api_dsi_config()
568 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_6, in anx7625_api_dsi_config()
572 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
575 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
577 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
586 static int anx7625_dsi_config(struct anx7625_data *ctx) in anx7625_dsi_config() argument
588 struct device *dev = &ctx->client->dev; in anx7625_dsi_config()
594 ret = anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_dsi_config()
597 ret |= anx7625_api_dsi_config(ctx); in anx7625_dsi_config()
605 ret = anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_dsi_config()
608 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_dsi_config()
618 static void anx7625_dp_start(struct anx7625_data *ctx) in anx7625_dp_start() argument
621 struct device *dev = &ctx->client->dev; in anx7625_dp_start()
623 if (!ctx->display_timing_valid) { in anx7625_dp_start()
628 anx7625_config_audio_input(ctx); in anx7625_dp_start()
630 ret = anx7625_dsi_config(ctx); in anx7625_dp_start()
636 static void anx7625_dp_stop(struct anx7625_data *ctx) in anx7625_dp_stop() argument
638 struct device *dev = &ctx->client->dev; in anx7625_dp_stop()
647 ret = anx7625_write_and(ctx, ctx->i2c.tx_p0_client, 0x87, 0xfe); in anx7625_dp_stop()
648 ret |= anx7625_write_and(ctx, ctx->i2c.tx_p2_client, 0x08, 0x7f); in anx7625_dp_stop()
650 ret |= anx7625_video_mute_control(ctx, 1); in anx7625_dp_stop()
655 static int sp_tx_rst_aux(struct anx7625_data *ctx) in sp_tx_rst_aux() argument
659 ret = anx7625_write_or(ctx, ctx->i2c.tx_p2_client, RST_CTRL2, in sp_tx_rst_aux()
661 ret |= anx7625_write_and(ctx, ctx->i2c.tx_p2_client, RST_CTRL2, in sp_tx_rst_aux()
666 static int sp_tx_aux_wr(struct anx7625_data *ctx, u8 offset) in sp_tx_aux_wr() argument
670 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_wr()
672 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_wr()
674 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_wr()
676 return (ret | wait_aux_op_finish(ctx)); in sp_tx_aux_wr()
679 static int sp_tx_aux_rd(struct anx7625_data *ctx, u8 len_cmd) in sp_tx_aux_rd() argument
683 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_rd()
685 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_rd()
687 return (ret | wait_aux_op_finish(ctx)); in sp_tx_aux_rd()
690 static int sp_tx_get_edid_block(struct anx7625_data *ctx) in sp_tx_get_edid_block() argument
693 struct device *dev = &ctx->client->dev; in sp_tx_get_edid_block()
695 sp_tx_aux_wr(ctx, 0x7e); in sp_tx_get_edid_block()
696 sp_tx_aux_rd(ctx, 0x01); in sp_tx_get_edid_block()
697 c = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, AP_AUX_BUFF_START); in sp_tx_get_edid_block()
711 static int edid_read(struct anx7625_data *ctx, in edid_read() argument
715 struct device *dev = &ctx->client->dev; in edid_read()
718 sp_tx_aux_wr(ctx, offset); in edid_read()
720 ret = sp_tx_aux_rd(ctx, 0xf1); in edid_read()
723 ret = sp_tx_rst_aux(ctx); in edid_read()
726 ret = anx7625_reg_block_read(ctx, ctx->i2c.rx_p0_client, in edid_read()
741 static int segments_edid_read(struct anx7625_data *ctx, in segments_edid_read() argument
746 struct device *dev = &ctx->client->dev; in segments_edid_read()
749 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
751 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
753 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
757 ret |= wait_aux_op_finish(ctx); in segments_edid_read()
759 ret |= sp_tx_aux_wr(ctx, segment); in segments_edid_read()
761 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
769 sp_tx_aux_wr(ctx, offset); in segments_edid_read()
771 ret = sp_tx_aux_rd(ctx, 0xf1); in segments_edid_read()
774 ret = sp_tx_rst_aux(ctx); in segments_edid_read()
777 ret = anx7625_reg_block_read(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
791 static int sp_tx_edid_read(struct anx7625_data *ctx, in sp_tx_edid_read() argument
800 struct device *dev = &ctx->client->dev; in sp_tx_edid_read()
803 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_edid_read()
805 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_edid_read()
807 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in sp_tx_edid_read()
814 blocks_num = sp_tx_get_edid_block(ctx); in sp_tx_edid_read()
826 g_edid_break = edid_read(ctx, offset, in sp_tx_edid_read()
848 ret = segments_edid_read(ctx, count / 2, in sp_tx_edid_read()
869 ret = segments_edid_read(ctx, count / 2, in sp_tx_edid_read()
896 ret = sp_tx_rst_aux(ctx); in sp_tx_edid_read()
905 static void anx7625_power_on(struct anx7625_data *ctx) in anx7625_power_on() argument
907 struct device *dev = &ctx->client->dev; in anx7625_power_on()
910 if (!ctx->pdata.low_power_mode) { in anx7625_power_on()
915 for (i = 0; i < ARRAY_SIZE(ctx->pdata.supplies); i++) { in anx7625_power_on()
916 ret = regulator_enable(ctx->pdata.supplies[i].consumer); in anx7625_power_on()
928 gpiod_set_value(ctx->pdata.gpio_p_on, 1); in anx7625_power_on()
931 gpiod_set_value(ctx->pdata.gpio_reset, 1); in anx7625_power_on()
938 regulator_disable(ctx->pdata.supplies[i].consumer); in anx7625_power_on()
941 static void anx7625_power_standby(struct anx7625_data *ctx) in anx7625_power_standby() argument
943 struct device *dev = &ctx->client->dev; in anx7625_power_standby()
946 if (!ctx->pdata.low_power_mode) { in anx7625_power_standby()
951 gpiod_set_value(ctx->pdata.gpio_reset, 0); in anx7625_power_standby()
953 gpiod_set_value(ctx->pdata.gpio_p_on, 0); in anx7625_power_standby()
956 ret = regulator_bulk_disable(ARRAY_SIZE(ctx->pdata.supplies), in anx7625_power_standby()
957 ctx->pdata.supplies); in anx7625_power_standby()
965 static void anx7625_config(struct anx7625_data *ctx) in anx7625_config() argument
967 anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_config()
971 static void anx7625_disable_pd_protocol(struct anx7625_data *ctx) in anx7625_disable_pd_protocol() argument
973 struct device *dev = &ctx->client->dev; in anx7625_disable_pd_protocol()
977 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, 0x88, 0x40); in anx7625_disable_pd_protocol()
979 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_disable_pd_protocol()
982 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, 0x88, 0x00); in anx7625_disable_pd_protocol()
990 static int anx7625_ocm_loading_check(struct anx7625_data *ctx) in anx7625_ocm_loading_check() argument
993 struct device *dev = &ctx->client->dev; in anx7625_ocm_loading_check()
996 ret = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, in anx7625_ocm_loading_check()
1005 anx7625_disable_pd_protocol(ctx); in anx7625_ocm_loading_check()
1008 anx7625_reg_read(ctx, in anx7625_ocm_loading_check()
1009 ctx->i2c.rx_p0_client, in anx7625_ocm_loading_check()
1011 anx7625_reg_read(ctx, in anx7625_ocm_loading_check()
1012 ctx->i2c.rx_p0_client, in anx7625_ocm_loading_check()
1020 static void anx7625_power_on_init(struct anx7625_data *ctx) in anx7625_power_on_init() argument
1025 anx7625_power_on(ctx); in anx7625_power_on_init()
1026 anx7625_config(ctx); in anx7625_power_on_init()
1029 if (!anx7625_ocm_loading_check(ctx)) in anx7625_power_on_init()
1033 anx7625_power_standby(ctx); in anx7625_power_on_init()
1061 static void anx7625_stop_dp_work(struct anx7625_data *ctx) in anx7625_stop_dp_work() argument
1063 ctx->hpd_status = 0; in anx7625_stop_dp_work()
1064 ctx->hpd_high_cnt = 0; in anx7625_stop_dp_work()
1065 ctx->display_timing_valid = 0; in anx7625_stop_dp_work()
1068 static void anx7625_start_dp_work(struct anx7625_data *ctx) in anx7625_start_dp_work() argument
1071 struct device *dev = &ctx->client->dev; in anx7625_start_dp_work()
1073 if (ctx->hpd_high_cnt >= 2) { in anx7625_start_dp_work()
1078 ctx->hpd_high_cnt++; in anx7625_start_dp_work()
1081 ret = anx7625_write_and(ctx, ctx->i2c.rx_p1_client, 0xee, 0x9f); in anx7625_start_dp_work()
1084 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, 0xec, 0x10); in anx7625_start_dp_work()
1086 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, 0xff, 0x01); in anx7625_start_dp_work()
1090 ret = anx7625_reg_read(ctx, ctx->i2c.rx_p1_client, 0x86); in anx7625_start_dp_work()
1097 static int anx7625_read_hpd_status_p0(struct anx7625_data *ctx) in anx7625_read_hpd_status_p0() argument
1099 return anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, SYSTEM_STSTUS); in anx7625_read_hpd_status_p0()
1102 static void anx7625_hpd_polling(struct anx7625_data *ctx) in anx7625_hpd_polling() argument
1105 struct device *dev = &ctx->client->dev; in anx7625_hpd_polling()
1108 ctx, val, in anx7625_hpd_polling()
1118 anx7625_reg_write(ctx, ctx->i2c.tcpc_client, in anx7625_hpd_polling()
1120 anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hpd_polling()
1123 anx7625_start_dp_work(ctx); in anx7625_hpd_polling()
1125 if (!ctx->pdata.panel_bridge && ctx->bridge_attached) in anx7625_hpd_polling()
1126 drm_helper_hpd_irq_event(ctx->bridge.dev); in anx7625_hpd_polling()
1129 static void anx7625_remove_edid(struct anx7625_data *ctx) in anx7625_remove_edid() argument
1131 ctx->slimport_edid_p.edid_block_num = -1; in anx7625_remove_edid()
1134 static void dp_hpd_change_handler(struct anx7625_data *ctx, bool on) in dp_hpd_change_handler() argument
1136 struct device *dev = &ctx->client->dev; in dp_hpd_change_handler()
1144 anx7625_remove_edid(ctx); in dp_hpd_change_handler()
1145 anx7625_stop_dp_work(ctx); in dp_hpd_change_handler()
1148 anx7625_start_dp_work(ctx); in dp_hpd_change_handler()
1151 ctx->hpd_status = 1; in dp_hpd_change_handler()
1154 static int anx7625_hpd_change_detect(struct anx7625_data *ctx) in anx7625_hpd_change_detect() argument
1157 struct device *dev = &ctx->client->dev; in anx7625_hpd_change_detect()
1159 status = anx7625_reg_write(ctx, ctx->i2c.tcpc_client, in anx7625_hpd_change_detect()
1166 intr_vector = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, in anx7625_hpd_change_detect()
1173 status = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hpd_change_detect()
1184 status = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, in anx7625_hpd_change_detect()
1192 dp_hpd_change_handler(ctx, status & HPD_STATUS); in anx7625_hpd_change_detect()
1200 struct anx7625_data *ctx = container_of(work, in anx7625_work_func() local
1203 mutex_lock(&ctx->lock); in anx7625_work_func()
1205 if (pm_runtime_suspended(&ctx->client->dev)) in anx7625_work_func()
1208 event = anx7625_hpd_change_detect(ctx); in anx7625_work_func()
1212 if (ctx->bridge_attached) in anx7625_work_func()
1213 drm_helper_hpd_irq_event(ctx->bridge.dev); in anx7625_work_func()
1216 mutex_unlock(&ctx->lock); in anx7625_work_func()
1221 struct anx7625_data *ctx = (struct anx7625_data *)data; in anx7625_intr_hpd_isr() local
1223 queue_work(ctx->workqueue, &ctx->work); in anx7625_intr_hpd_isr()
1265 static struct edid *anx7625_get_edid(struct anx7625_data *ctx) in anx7625_get_edid() argument
1267 struct device *dev = &ctx->client->dev; in anx7625_get_edid()
1268 struct s_edid_data *p_edid = &ctx->slimport_edid_p; in anx7625_get_edid()
1278 if (ctx->slimport_edid_p.edid_block_num > 0) { in anx7625_get_edid()
1279 memcpy(edid, ctx->slimport_edid_p.edid_raw_data, in anx7625_get_edid()
1285 edid_num = sp_tx_edid_read(ctx, p_edid->edid_raw_data); in anx7625_get_edid()
1296 memcpy(edid, ctx->slimport_edid_p.edid_raw_data, FOUR_BLOCK_SIZE); in anx7625_get_edid()
1300 static enum drm_connector_status anx7625_sink_detect(struct anx7625_data *ctx) in anx7625_sink_detect() argument
1302 struct device *dev = &ctx->client->dev; in anx7625_sink_detect()
1309 static int anx7625_attach_dsi(struct anx7625_data *ctx) in anx7625_attach_dsi() argument
1312 struct device *dev = &ctx->client->dev; in anx7625_attach_dsi()
1322 host = of_find_mipi_dsi_host_by_node(ctx->pdata.mipi_host_node); in anx7625_attach_dsi()
1346 ctx->dsi = dsi; in anx7625_attach_dsi()
1355 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_detach() local
1357 if (ctx->dsi) { in anx7625_bridge_detach()
1358 mipi_dsi_detach(ctx->dsi); in anx7625_bridge_detach()
1359 mipi_dsi_device_unregister(ctx->dsi); in anx7625_bridge_detach()
1366 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_attach() local
1368 struct device *dev = &ctx->client->dev; in anx7625_bridge_attach()
1379 err = anx7625_attach_dsi(ctx); in anx7625_bridge_attach()
1385 if (ctx->pdata.panel_bridge) { in anx7625_bridge_attach()
1387 ctx->pdata.panel_bridge, in anx7625_bridge_attach()
1388 &ctx->bridge, flags); in anx7625_bridge_attach()
1393 ctx->bridge_attached = 1; in anx7625_bridge_attach()
1403 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_mode_valid() local
1404 struct device *dev = &ctx->client->dev; in anx7625_bridge_mode_valid()
1424 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_mode_set() local
1425 struct device *dev = &ctx->client->dev; in anx7625_bridge_mode_set()
1429 ctx->dt.pixelclock.min = mode->clock; in anx7625_bridge_mode_set()
1430 ctx->dt.hactive.min = mode->hdisplay; in anx7625_bridge_mode_set()
1431 ctx->dt.hsync_len.min = mode->hsync_end - mode->hsync_start; in anx7625_bridge_mode_set()
1432 ctx->dt.hfront_porch.min = mode->hsync_start - mode->hdisplay; in anx7625_bridge_mode_set()
1433 ctx->dt.hback_porch.min = mode->htotal - mode->hsync_end; in anx7625_bridge_mode_set()
1434 ctx->dt.vactive.min = mode->vdisplay; in anx7625_bridge_mode_set()
1435 ctx->dt.vsync_len.min = mode->vsync_end - mode->vsync_start; in anx7625_bridge_mode_set()
1436 ctx->dt.vfront_porch.min = mode->vsync_start - mode->vdisplay; in anx7625_bridge_mode_set()
1437 ctx->dt.vback_porch.min = mode->vtotal - mode->vsync_end; in anx7625_bridge_mode_set()
1439 ctx->display_timing_valid = 1; in anx7625_bridge_mode_set()
1441 DRM_DEV_DEBUG_DRIVER(dev, "pixelclock(%d).\n", ctx->dt.pixelclock.min); in anx7625_bridge_mode_set()
1443 ctx->dt.hactive.min, in anx7625_bridge_mode_set()
1444 ctx->dt.hsync_len.min, in anx7625_bridge_mode_set()
1445 ctx->dt.hfront_porch.min, in anx7625_bridge_mode_set()
1446 ctx->dt.hback_porch.min); in anx7625_bridge_mode_set()
1448 ctx->dt.vactive.min, in anx7625_bridge_mode_set()
1449 ctx->dt.vsync_len.min, in anx7625_bridge_mode_set()
1450 ctx->dt.vfront_porch.min, in anx7625_bridge_mode_set()
1451 ctx->dt.vback_porch.min); in anx7625_bridge_mode_set()
1470 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_mode_fixup() local
1471 struct device *dev = &ctx->client->dev; in anx7625_bridge_mode_fixup()
1581 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_enable() local
1582 struct device *dev = &ctx->client->dev; in anx7625_bridge_enable()
1588 anx7625_dp_start(ctx); in anx7625_bridge_enable()
1593 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_disable() local
1594 struct device *dev = &ctx->client->dev; in anx7625_bridge_disable()
1598 anx7625_dp_stop(ctx); in anx7625_bridge_disable()
1606 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_detect() local
1607 struct device *dev = &ctx->client->dev; in anx7625_bridge_detect()
1611 return anx7625_sink_detect(ctx); in anx7625_bridge_detect()
1617 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_get_edid() local
1618 struct device *dev = &ctx->client->dev; in anx7625_bridge_get_edid()
1622 return anx7625_get_edid(ctx); in anx7625_bridge_get_edid()
1637 static int anx7625_register_i2c_dummy_clients(struct anx7625_data *ctx, in anx7625_register_i2c_dummy_clients() argument
1640 ctx->i2c.tx_p0_client = i2c_new_dummy_device(client->adapter, in anx7625_register_i2c_dummy_clients()
1642 if (!ctx->i2c.tx_p0_client) in anx7625_register_i2c_dummy_clients()
1645 ctx->i2c.tx_p1_client = i2c_new_dummy_device(client->adapter, in anx7625_register_i2c_dummy_clients()
1647 if (!ctx->i2c.tx_p1_client) in anx7625_register_i2c_dummy_clients()
1650 ctx->i2c.tx_p2_client = i2c_new_dummy_device(client->adapter, in anx7625_register_i2c_dummy_clients()
1652 if (!ctx->i2c.tx_p2_client) in anx7625_register_i2c_dummy_clients()
1655 ctx->i2c.rx_p0_client = i2c_new_dummy_device(client->adapter, in anx7625_register_i2c_dummy_clients()
1657 if (!ctx->i2c.rx_p0_client) in anx7625_register_i2c_dummy_clients()
1660 ctx->i2c.rx_p1_client = i2c_new_dummy_device(client->adapter, in anx7625_register_i2c_dummy_clients()
1662 if (!ctx->i2c.rx_p1_client) in anx7625_register_i2c_dummy_clients()
1665 ctx->i2c.rx_p2_client = i2c_new_dummy_device(client->adapter, in anx7625_register_i2c_dummy_clients()
1667 if (!ctx->i2c.rx_p2_client) in anx7625_register_i2c_dummy_clients()
1670 ctx->i2c.tcpc_client = i2c_new_dummy_device(client->adapter, in anx7625_register_i2c_dummy_clients()
1672 if (!ctx->i2c.tcpc_client) in anx7625_register_i2c_dummy_clients()
1678 i2c_unregister_device(ctx->i2c.rx_p2_client); in anx7625_register_i2c_dummy_clients()
1680 i2c_unregister_device(ctx->i2c.rx_p1_client); in anx7625_register_i2c_dummy_clients()
1682 i2c_unregister_device(ctx->i2c.rx_p0_client); in anx7625_register_i2c_dummy_clients()
1684 i2c_unregister_device(ctx->i2c.tx_p2_client); in anx7625_register_i2c_dummy_clients()
1686 i2c_unregister_device(ctx->i2c.tx_p1_client); in anx7625_register_i2c_dummy_clients()
1688 i2c_unregister_device(ctx->i2c.tx_p0_client); in anx7625_register_i2c_dummy_clients()
1693 static void anx7625_unregister_i2c_dummy_clients(struct anx7625_data *ctx) in anx7625_unregister_i2c_dummy_clients() argument
1695 i2c_unregister_device(ctx->i2c.tx_p0_client); in anx7625_unregister_i2c_dummy_clients()
1696 i2c_unregister_device(ctx->i2c.tx_p1_client); in anx7625_unregister_i2c_dummy_clients()
1697 i2c_unregister_device(ctx->i2c.tx_p2_client); in anx7625_unregister_i2c_dummy_clients()
1698 i2c_unregister_device(ctx->i2c.rx_p0_client); in anx7625_unregister_i2c_dummy_clients()
1699 i2c_unregister_device(ctx->i2c.rx_p1_client); in anx7625_unregister_i2c_dummy_clients()
1700 i2c_unregister_device(ctx->i2c.rx_p2_client); in anx7625_unregister_i2c_dummy_clients()
1701 i2c_unregister_device(ctx->i2c.tcpc_client); in anx7625_unregister_i2c_dummy_clients()
1706 struct anx7625_data *ctx = dev_get_drvdata(dev); in anx7625_runtime_pm_suspend() local
1708 mutex_lock(&ctx->lock); in anx7625_runtime_pm_suspend()
1710 anx7625_stop_dp_work(ctx); in anx7625_runtime_pm_suspend()
1711 anx7625_power_standby(ctx); in anx7625_runtime_pm_suspend()
1713 mutex_unlock(&ctx->lock); in anx7625_runtime_pm_suspend()
1720 struct anx7625_data *ctx = dev_get_drvdata(dev); in anx7625_runtime_pm_resume() local
1722 mutex_lock(&ctx->lock); in anx7625_runtime_pm_resume()
1724 anx7625_power_on_init(ctx); in anx7625_runtime_pm_resume()
1725 anx7625_hpd_polling(ctx); in anx7625_runtime_pm_resume()
1727 mutex_unlock(&ctx->lock); in anx7625_runtime_pm_resume()
1734 struct anx7625_data *ctx = dev_get_drvdata(dev); in anx7625_resume() local
1736 if (!ctx->pdata.intp_irq) in anx7625_resume()
1740 enable_irq(ctx->pdata.intp_irq); in anx7625_resume()
1749 struct anx7625_data *ctx = dev_get_drvdata(dev); in anx7625_suspend() local
1751 if (!ctx->pdata.intp_irq) in anx7625_suspend()
1756 disable_irq(ctx->pdata.intp_irq); in anx7625_suspend()