Lines Matching refs:ctx
46 static int i2c_access_workaround(struct anx7625_data *ctx, in i2c_access_workaround() argument
53 if (client == ctx->last_client) in i2c_access_workaround()
56 ctx->last_client = client; in i2c_access_workaround()
58 if (client == ctx->i2c.tcpc_client) in i2c_access_workaround()
60 else if (client == ctx->i2c.tx_p0_client) in i2c_access_workaround()
62 else if (client == ctx->i2c.tx_p1_client) in i2c_access_workaround()
64 else if (client == ctx->i2c.rx_p0_client) in i2c_access_workaround()
66 else if (client == ctx->i2c.rx_p1_client) in i2c_access_workaround()
80 static int anx7625_reg_read(struct anx7625_data *ctx, in anx7625_reg_read() argument
86 i2c_access_workaround(ctx, client); in anx7625_reg_read()
96 static int anx7625_reg_block_read(struct anx7625_data *ctx, in anx7625_reg_block_read() argument
103 i2c_access_workaround(ctx, client); in anx7625_reg_block_read()
113 static int anx7625_reg_write(struct anx7625_data *ctx, in anx7625_reg_write() argument
120 i2c_access_workaround(ctx, client); in anx7625_reg_write()
131 static int anx7625_reg_block_write(struct anx7625_data *ctx, in anx7625_reg_block_write() argument
138 i2c_access_workaround(ctx, client); in anx7625_reg_block_write()
148 static int anx7625_write_or(struct anx7625_data *ctx, in anx7625_write_or() argument
154 val = anx7625_reg_read(ctx, client, offset); in anx7625_write_or()
158 return anx7625_reg_write(ctx, client, offset, (val | (mask))); in anx7625_write_or()
161 static int anx7625_write_and(struct anx7625_data *ctx, in anx7625_write_and() argument
167 val = anx7625_reg_read(ctx, client, offset); in anx7625_write_and()
171 return anx7625_reg_write(ctx, client, offset, (val & (mask))); in anx7625_write_and()
174 static int anx7625_write_and_or(struct anx7625_data *ctx, in anx7625_write_and_or() argument
180 val = anx7625_reg_read(ctx, client, offset); in anx7625_write_and_or()
184 return anx7625_reg_write(ctx, client, in anx7625_write_and_or()
188 static int anx7625_config_bit_matrix(struct anx7625_data *ctx) in anx7625_config_bit_matrix() argument
192 ret = anx7625_write_or(ctx, ctx->i2c.tx_p2_client, in anx7625_config_bit_matrix()
195 ret |= anx7625_reg_write(ctx, ctx->i2c.tx_p2_client, in anx7625_config_bit_matrix()
202 static int anx7625_read_ctrl_status_p0(struct anx7625_data *ctx) in anx7625_read_ctrl_status_p0() argument
204 return anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, AP_AUX_CTRL_STATUS); in anx7625_read_ctrl_status_p0()
207 static int wait_aux_op_finish(struct anx7625_data *ctx) in wait_aux_op_finish() argument
209 struct device *dev = ctx->dev; in wait_aux_op_finish()
214 ctx, val, in wait_aux_op_finish()
223 val = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, in wait_aux_op_finish()
233 static int anx7625_aux_trans(struct anx7625_data *ctx, u8 op, u32 address, in anx7625_aux_trans() argument
236 struct device *dev = ctx->dev; in anx7625_aux_trans()
259 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_aux_trans()
263 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_aux_trans()
265 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_aux_trans()
267 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_aux_trans()
271 ret |= anx7625_reg_block_write(ctx, ctx->i2c.rx_p0_client, in anx7625_aux_trans()
274 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_aux_trans()
282 ret = wait_aux_op_finish(ctx); in anx7625_aux_trans()
293 ret = anx7625_reg_block_read(ctx, ctx->i2c.rx_p0_client, in anx7625_aux_trans()
303 static int anx7625_video_mute_control(struct anx7625_data *ctx, in anx7625_video_mute_control() argument
310 ret = anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_video_mute_control()
313 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_video_mute_control()
317 ret = anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_video_mute_control()
320 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_video_mute_control()
425 static int anx7625_odfc_config(struct anx7625_data *ctx, in anx7625_odfc_config() argument
429 struct device *dev = ctx->dev; in anx7625_odfc_config()
432 ret = anx7625_write_and(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_16, in anx7625_odfc_config()
434 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_16, in anx7625_odfc_config()
437 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p1_client, in anx7625_odfc_config()
439 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_8, in anx7625_odfc_config()
443 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_7, in anx7625_odfc_config()
447 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_7, in anx7625_odfc_config()
449 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_7, in anx7625_odfc_config()
465 static int anx7625_set_k_value(struct anx7625_data *ctx) in anx7625_set_k_value() argument
469 drm_edid_get_product_id(ctx->cached_drm_edid, &id); in anx7625_set_k_value()
472 return anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_set_k_value()
475 return anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_set_k_value()
479 static int anx7625_dsi_video_timing_config(struct anx7625_data *ctx) in anx7625_dsi_video_timing_config() argument
481 struct device *dev = ctx->dev; in anx7625_dsi_video_timing_config()
487 ret = anx7625_calculate_m_n(ctx->dt.pixelclock.min * 1000, in anx7625_dsi_video_timing_config()
499 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, PIXEL_CLOCK_L, in anx7625_dsi_video_timing_config()
500 (ctx->dt.pixelclock.min / 1000) & 0xFF); in anx7625_dsi_video_timing_config()
501 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, PIXEL_CLOCK_H, in anx7625_dsi_video_timing_config()
502 (ctx->dt.pixelclock.min / 1000) >> 8); in anx7625_dsi_video_timing_config()
504 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
506 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
507 MIPI_LANE_CTRL_0, ctx->pdata.mipi_lanes - 1); in anx7625_dsi_video_timing_config()
510 htotal = ctx->dt.hactive.min + ctx->dt.hfront_porch.min + in anx7625_dsi_video_timing_config()
511 ctx->dt.hback_porch.min + ctx->dt.hsync_len.min; in anx7625_dsi_video_timing_config()
512 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
514 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
517 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
518 HORIZONTAL_ACTIVE_PIXELS_L, ctx->dt.hactive.min & 0xFF); in anx7625_dsi_video_timing_config()
519 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
520 HORIZONTAL_ACTIVE_PIXELS_H, ctx->dt.hactive.min >> 8); in anx7625_dsi_video_timing_config()
522 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
523 HORIZONTAL_FRONT_PORCH_L, ctx->dt.hfront_porch.min); in anx7625_dsi_video_timing_config()
524 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
526 ctx->dt.hfront_porch.min >> 8); in anx7625_dsi_video_timing_config()
528 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
529 HORIZONTAL_SYNC_WIDTH_L, ctx->dt.hsync_len.min); in anx7625_dsi_video_timing_config()
530 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
531 HORIZONTAL_SYNC_WIDTH_H, ctx->dt.hsync_len.min >> 8); in anx7625_dsi_video_timing_config()
533 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
534 HORIZONTAL_BACK_PORCH_L, ctx->dt.hback_porch.min); in anx7625_dsi_video_timing_config()
535 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
536 HORIZONTAL_BACK_PORCH_H, ctx->dt.hback_porch.min >> 8); in anx7625_dsi_video_timing_config()
538 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, ACTIVE_LINES_L, in anx7625_dsi_video_timing_config()
539 ctx->dt.vactive.min); in anx7625_dsi_video_timing_config()
540 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, ACTIVE_LINES_H, in anx7625_dsi_video_timing_config()
541 ctx->dt.vactive.min >> 8); in anx7625_dsi_video_timing_config()
543 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
544 VERTICAL_FRONT_PORCH, ctx->dt.vfront_porch.min); in anx7625_dsi_video_timing_config()
546 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
547 VERTICAL_SYNC_WIDTH, ctx->dt.vsync_len.min); in anx7625_dsi_video_timing_config()
549 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p2_client, in anx7625_dsi_video_timing_config()
550 VERTICAL_BACK_PORCH, ctx->dt.vback_porch.min); in anx7625_dsi_video_timing_config()
552 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
554 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
556 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
559 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
561 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_dsi_video_timing_config()
563 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, MIPI_PLL_N_NUM_7_0, in anx7625_dsi_video_timing_config()
566 anx7625_set_k_value(ctx); in anx7625_dsi_video_timing_config()
568 ret |= anx7625_odfc_config(ctx, post_divider - 1); in anx7625_dsi_video_timing_config()
576 static int anx7625_swap_dsi_lane3(struct anx7625_data *ctx) in anx7625_swap_dsi_lane3() argument
579 struct device *dev = ctx->dev; in anx7625_swap_dsi_lane3()
582 val = anx7625_reg_read(ctx, ctx->i2c.rx_p1_client, MIPI_SWAP); in anx7625_swap_dsi_lane3()
589 return anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, MIPI_SWAP, val); in anx7625_swap_dsi_lane3()
592 static int anx7625_api_dsi_config(struct anx7625_data *ctx) in anx7625_api_dsi_config() argument
596 struct device *dev = ctx->dev; in anx7625_api_dsi_config()
599 ret = anx7625_swap_dsi_lane3(ctx); in anx7625_api_dsi_config()
614 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
624 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
628 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_18, in anx7625_api_dsi_config()
631 ret |= anx7625_dsi_video_timing_config(ctx); in anx7625_api_dsi_config()
638 ret = anx7625_write_and(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_6, in anx7625_api_dsi_config()
641 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, MIPI_DIGITAL_PLL_6, in anx7625_api_dsi_config()
645 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
648 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
650 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dsi_config()
659 static int anx7625_dsi_config(struct anx7625_data *ctx) in anx7625_dsi_config() argument
661 struct device *dev = ctx->dev; in anx7625_dsi_config()
667 ret = anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_dsi_config()
670 ret |= anx7625_api_dsi_config(ctx); in anx7625_dsi_config()
678 ret = anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_dsi_config()
681 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_dsi_config()
691 static int anx7625_api_dpi_config(struct anx7625_data *ctx) in anx7625_api_dpi_config() argument
693 struct device *dev = ctx->dev; in anx7625_api_dpi_config()
694 u16 freq = ctx->dt.pixelclock.min / 1000; in anx7625_api_dpi_config()
698 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_api_dpi_config()
700 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_api_dpi_config()
705 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dpi_config()
708 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dpi_config()
711 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p1_client, in anx7625_api_dpi_config()
714 ret |= anx7625_reg_write(ctx, ctx->i2c.tx_p2_client, in anx7625_api_dpi_config()
722 static int anx7625_dpi_config(struct anx7625_data *ctx) in anx7625_dpi_config() argument
724 struct device *dev = ctx->dev; in anx7625_dpi_config()
730 ret = anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_dpi_config()
737 ret = anx7625_config_bit_matrix(ctx); in anx7625_dpi_config()
743 ret = anx7625_api_dpi_config(ctx); in anx7625_dpi_config()
750 ret = anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_dpi_config()
753 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in anx7625_dpi_config()
761 static int anx7625_read_flash_status(struct anx7625_data *ctx) in anx7625_read_flash_status() argument
763 return anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, R_RAM_CTRL); in anx7625_read_flash_status()
766 static int anx7625_hdcp_key_probe(struct anx7625_data *ctx) in anx7625_hdcp_key_probe() argument
769 struct device *dev = ctx->dev; in anx7625_hdcp_key_probe()
772 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_probe()
774 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_probe()
781 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_probe()
783 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_probe()
790 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_probe()
793 ctx, val, in anx7625_hdcp_key_probe()
802 ret = anx7625_reg_block_read(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_probe()
816 static int anx7625_hdcp_key_load(struct anx7625_data *ctx) in anx7625_hdcp_key_load() argument
819 struct device *dev = ctx->dev; in anx7625_hdcp_key_load()
822 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_load()
824 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_load()
826 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_load()
828 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_load()
830 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_load()
833 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_load()
835 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_load()
838 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hdcp_key_load()
844 static int anx7625_hdcp_disable(struct anx7625_data *ctx) in anx7625_hdcp_disable() argument
847 struct device *dev = ctx->dev; in anx7625_hdcp_disable()
852 ret = anx7625_write_and(ctx, ctx->i2c.rx_p1_client, 0xee, 0x9f); in anx7625_hdcp_disable()
854 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, 0xec, 0x10); in anx7625_hdcp_disable()
856 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, 0xff, 0x01); in anx7625_hdcp_disable()
860 return anx7625_write_and(ctx, ctx->i2c.tx_p0_client, in anx7625_hdcp_disable()
864 static int anx7625_hdcp_enable(struct anx7625_data *ctx) in anx7625_hdcp_enable() argument
868 struct device *dev = ctx->dev; in anx7625_hdcp_enable()
870 ret = anx7625_hdcp_key_probe(ctx); in anx7625_hdcp_enable()
877 ret = anx7625_aux_trans(ctx, DP_AUX_NATIVE_READ, DP_AUX_HDCP_BCAPS, 1, &bcap); in anx7625_hdcp_enable()
889 ret = anx7625_reg_write(ctx, ctx->i2c.tx_p0_client, in anx7625_hdcp_enable()
894 ret |= anx7625_reg_write(ctx, ctx->i2c.tx_p0_client, in anx7625_hdcp_enable()
899 ret |= anx7625_reg_write(ctx, ctx->i2c.tx_p0_client, in anx7625_hdcp_enable()
902 ret |= anx7625_reg_write(ctx, ctx->i2c.tx_p0_client, in anx7625_hdcp_enable()
904 ret |= anx7625_hdcp_key_load(ctx); in anx7625_hdcp_enable()
910 ret = anx7625_write_or(ctx, ctx->i2c.rx_p1_client, 0xee, 0x20); in anx7625_hdcp_enable()
913 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, 0xec, 0x10); in anx7625_hdcp_enable()
915 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, 0xff, 0x01); in anx7625_hdcp_enable()
919 return anx7625_write_or(ctx, ctx->i2c.tx_p0_client, in anx7625_hdcp_enable()
923 static void anx7625_dp_start(struct anx7625_data *ctx) in anx7625_dp_start() argument
926 struct device *dev = ctx->dev; in anx7625_dp_start()
929 if (!ctx->display_timing_valid) { in anx7625_dp_start()
937 ret = anx7625_aux_trans(ctx, DP_AUX_NATIVE_WRITE, DP_SET_POWER, 1, &data); in anx7625_dp_start()
942 anx7625_write_and(ctx, ctx->i2c.rx_p1_client, 0xee, 0x9f); in anx7625_dp_start()
944 if (ctx->pdata.is_dpi) in anx7625_dp_start()
945 ret = anx7625_dpi_config(ctx); in anx7625_dp_start()
947 ret = anx7625_dsi_config(ctx); in anx7625_dp_start()
952 ctx->hdcp_cp = DRM_MODE_CONTENT_PROTECTION_UNDESIRED; in anx7625_dp_start()
954 ctx->dp_en = 1; in anx7625_dp_start()
957 static void anx7625_dp_stop(struct anx7625_data *ctx) in anx7625_dp_stop() argument
959 struct device *dev = ctx->dev; in anx7625_dp_stop()
969 ret = anx7625_write_and(ctx, ctx->i2c.tx_p0_client, 0x87, 0xfe); in anx7625_dp_stop()
970 ret |= anx7625_write_and(ctx, ctx->i2c.tx_p2_client, 0x08, 0x7f); in anx7625_dp_stop()
972 ret |= anx7625_video_mute_control(ctx, 1); in anx7625_dp_stop()
977 ret |= anx7625_aux_trans(ctx, DP_AUX_NATIVE_WRITE, DP_SET_POWER, 1, &data); in anx7625_dp_stop()
981 ctx->hdcp_cp = DRM_MODE_CONTENT_PROTECTION_UNDESIRED; in anx7625_dp_stop()
983 ctx->dp_en = 0; in anx7625_dp_stop()
986 static int sp_tx_rst_aux(struct anx7625_data *ctx) in sp_tx_rst_aux() argument
990 ret = anx7625_write_or(ctx, ctx->i2c.tx_p2_client, RST_CTRL2, in sp_tx_rst_aux()
992 ret |= anx7625_write_and(ctx, ctx->i2c.tx_p2_client, RST_CTRL2, in sp_tx_rst_aux()
997 static int sp_tx_aux_wr(struct anx7625_data *ctx, u8 offset) in sp_tx_aux_wr() argument
1001 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_wr()
1003 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_wr()
1005 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_wr()
1007 return (ret | wait_aux_op_finish(ctx)); in sp_tx_aux_wr()
1010 static int sp_tx_aux_rd(struct anx7625_data *ctx, u8 len_cmd) in sp_tx_aux_rd() argument
1014 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_rd()
1016 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in sp_tx_aux_rd()
1018 return (ret | wait_aux_op_finish(ctx)); in sp_tx_aux_rd()
1021 static int sp_tx_get_edid_block(struct anx7625_data *ctx) in sp_tx_get_edid_block() argument
1024 struct device *dev = ctx->dev; in sp_tx_get_edid_block()
1026 sp_tx_aux_wr(ctx, 0x7e); in sp_tx_get_edid_block()
1027 sp_tx_aux_rd(ctx, 0x01); in sp_tx_get_edid_block()
1028 c = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, AP_AUX_BUFF_START); in sp_tx_get_edid_block()
1042 static int edid_read(struct anx7625_data *ctx, in edid_read() argument
1046 struct device *dev = ctx->dev; in edid_read()
1049 sp_tx_aux_wr(ctx, offset); in edid_read()
1051 ret = sp_tx_aux_rd(ctx, 0xf1); in edid_read()
1054 ret = sp_tx_rst_aux(ctx); in edid_read()
1057 ret = anx7625_reg_block_read(ctx, ctx->i2c.rx_p0_client, in edid_read()
1072 static int segments_edid_read(struct anx7625_data *ctx, in segments_edid_read() argument
1077 struct device *dev = ctx->dev; in segments_edid_read()
1080 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
1082 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
1084 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
1088 ret |= wait_aux_op_finish(ctx); in segments_edid_read()
1090 ret |= sp_tx_aux_wr(ctx, segment); in segments_edid_read()
1092 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
1100 sp_tx_aux_wr(ctx, offset); in segments_edid_read()
1102 ret = sp_tx_aux_rd(ctx, 0xf1); in segments_edid_read()
1105 ret = sp_tx_rst_aux(ctx); in segments_edid_read()
1108 ret = anx7625_reg_block_read(ctx, ctx->i2c.rx_p0_client, in segments_edid_read()
1122 static int sp_tx_edid_read(struct anx7625_data *ctx, in sp_tx_edid_read() argument
1132 struct device *dev = ctx->dev; in sp_tx_edid_read()
1135 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_edid_read()
1137 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in sp_tx_edid_read()
1139 ret |= anx7625_write_and(ctx, ctx->i2c.rx_p0_client, in sp_tx_edid_read()
1146 blocks_num = sp_tx_get_edid_block(ctx); in sp_tx_edid_read()
1158 g_edid_break = edid_read(ctx, offset, in sp_tx_edid_read()
1180 ret = segments_edid_read(ctx, count / 2, in sp_tx_edid_read()
1201 ret = segments_edid_read(ctx, count / 2, in sp_tx_edid_read()
1228 ret = sp_tx_rst_aux(ctx); in sp_tx_edid_read()
1237 static void anx7625_power_on(struct anx7625_data *ctx) in anx7625_power_on() argument
1239 struct device *dev = ctx->dev; in anx7625_power_on()
1242 if (!ctx->pdata.low_power_mode) { in anx7625_power_on()
1247 for (i = 0; i < ARRAY_SIZE(ctx->pdata.supplies); i++) { in anx7625_power_on()
1248 ret = regulator_enable(ctx->pdata.supplies[i].consumer); in anx7625_power_on()
1260 gpiod_set_value(ctx->pdata.gpio_p_on, 1); in anx7625_power_on()
1263 gpiod_set_value(ctx->pdata.gpio_reset, 1); in anx7625_power_on()
1270 regulator_disable(ctx->pdata.supplies[i].consumer); in anx7625_power_on()
1273 static void anx7625_power_standby(struct anx7625_data *ctx) in anx7625_power_standby() argument
1275 struct device *dev = ctx->dev; in anx7625_power_standby()
1278 if (!ctx->pdata.low_power_mode) { in anx7625_power_standby()
1283 gpiod_set_value(ctx->pdata.gpio_reset, 0); in anx7625_power_standby()
1285 gpiod_set_value(ctx->pdata.gpio_p_on, 0); in anx7625_power_standby()
1288 ret = regulator_bulk_disable(ARRAY_SIZE(ctx->pdata.supplies), in anx7625_power_standby()
1289 ctx->pdata.supplies); in anx7625_power_standby()
1297 static void anx7625_config(struct anx7625_data *ctx) in anx7625_config() argument
1299 anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_config()
1303 static int anx7625_hpd_timer_config(struct anx7625_data *ctx) in anx7625_hpd_timer_config() argument
1308 ret = anx7625_reg_write(ctx, ctx->i2c.tx_p2_client, in anx7625_hpd_timer_config()
1310 ret |= anx7625_reg_write(ctx, ctx->i2c.tx_p2_client, in anx7625_hpd_timer_config()
1313 ret |= anx7625_reg_write(ctx, ctx->i2c.tx_p2_client, in anx7625_hpd_timer_config()
1320 static int anx7625_read_hpd_gpio_config_status(struct anx7625_data *ctx) in anx7625_read_hpd_gpio_config_status() argument
1322 return anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, GPIO_CTRL_2); in anx7625_read_hpd_gpio_config_status()
1325 static void anx7625_disable_pd_protocol(struct anx7625_data *ctx) in anx7625_disable_pd_protocol() argument
1327 struct device *dev = ctx->dev; in anx7625_disable_pd_protocol()
1331 ret = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, 0x88, 0x40); in anx7625_disable_pd_protocol()
1333 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_disable_pd_protocol()
1336 ret |= anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, 0x88, 0x00); in anx7625_disable_pd_protocol()
1349 ctx, val, in anx7625_disable_pd_protocol()
1354 anx7625_hpd_timer_config(ctx); in anx7625_disable_pd_protocol()
1357 static int anx7625_ocm_loading_check(struct anx7625_data *ctx) in anx7625_ocm_loading_check() argument
1360 struct device *dev = ctx->dev; in anx7625_ocm_loading_check()
1363 ret = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, in anx7625_ocm_loading_check()
1372 anx7625_disable_pd_protocol(ctx); in anx7625_ocm_loading_check()
1375 anx7625_reg_read(ctx, in anx7625_ocm_loading_check()
1376 ctx->i2c.rx_p0_client, in anx7625_ocm_loading_check()
1378 anx7625_reg_read(ctx, in anx7625_ocm_loading_check()
1379 ctx->i2c.rx_p0_client, in anx7625_ocm_loading_check()
1387 static void anx7625_power_on_init(struct anx7625_data *ctx) in anx7625_power_on_init() argument
1392 anx7625_power_on(ctx); in anx7625_power_on_init()
1393 anx7625_config(ctx); in anx7625_power_on_init()
1396 if (!anx7625_ocm_loading_check(ctx)) in anx7625_power_on_init()
1400 anx7625_power_standby(ctx); in anx7625_power_on_init()
1437 static void anx7625_stop_dp_work(struct anx7625_data *ctx) in anx7625_stop_dp_work() argument
1439 ctx->hpd_status = 0; in anx7625_stop_dp_work()
1440 ctx->hpd_high_cnt = 0; in anx7625_stop_dp_work()
1443 static void anx7625_start_dp_work(struct anx7625_data *ctx) in anx7625_start_dp_work() argument
1446 struct device *dev = ctx->dev; in anx7625_start_dp_work()
1448 if (ctx->hpd_high_cnt >= 2) { in anx7625_start_dp_work()
1453 ctx->hpd_status = 1; in anx7625_start_dp_work()
1454 ctx->hpd_high_cnt++; in anx7625_start_dp_work()
1457 ret = anx7625_write_and(ctx, ctx->i2c.rx_p1_client, 0xee, 0x9f); in anx7625_start_dp_work()
1460 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, 0xec, 0x10); in anx7625_start_dp_work()
1462 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p1_client, 0xff, 0x01); in anx7625_start_dp_work()
1468 ret = anx7625_reg_read(ctx, ctx->i2c.rx_p1_client, 0x86); in anx7625_start_dp_work()
1475 static int anx7625_read_hpd_status_p0(struct anx7625_data *ctx) in anx7625_read_hpd_status_p0() argument
1477 return anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, SYSTEM_STSTUS); in anx7625_read_hpd_status_p0()
1480 static int _anx7625_hpd_polling(struct anx7625_data *ctx, in _anx7625_hpd_polling() argument
1484 struct device *dev = ctx->dev; in _anx7625_hpd_polling()
1487 if (ctx->pdata.intp_irq) in _anx7625_hpd_polling()
1491 ctx, val, in _anx7625_hpd_polling()
1501 anx7625_reg_write(ctx, ctx->i2c.tcpc_client, in _anx7625_hpd_polling()
1503 anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in _anx7625_hpd_polling()
1506 anx7625_start_dp_work(ctx); in _anx7625_hpd_polling()
1508 if (!ctx->pdata.panel_bridge && ctx->bridge_attached) in _anx7625_hpd_polling()
1509 drm_helper_hpd_irq_event(ctx->bridge.dev); in _anx7625_hpd_polling()
1517 struct anx7625_data *ctx = container_of(aux, struct anx7625_data, aux); in anx7625_wait_hpd_asserted() local
1518 struct device *dev = ctx->dev; in anx7625_wait_hpd_asserted()
1522 ret = _anx7625_hpd_polling(ctx, wait_us); in anx7625_wait_hpd_asserted()
1529 static void anx7625_remove_edid(struct anx7625_data *ctx) in anx7625_remove_edid() argument
1531 drm_edid_free(ctx->cached_drm_edid); in anx7625_remove_edid()
1532 ctx->cached_drm_edid = NULL; in anx7625_remove_edid()
1535 static void anx7625_dp_adjust_swing(struct anx7625_data *ctx) in anx7625_dp_adjust_swing() argument
1539 for (i = 0; i < ctx->pdata.dp_lane0_swing_reg_cnt; i++) in anx7625_dp_adjust_swing()
1540 anx7625_reg_write(ctx, ctx->i2c.tx_p1_client, in anx7625_dp_adjust_swing()
1542 ctx->pdata.lane0_reg_data[i]); in anx7625_dp_adjust_swing()
1544 for (i = 0; i < ctx->pdata.dp_lane1_swing_reg_cnt; i++) in anx7625_dp_adjust_swing()
1545 anx7625_reg_write(ctx, ctx->i2c.tx_p1_client, in anx7625_dp_adjust_swing()
1547 ctx->pdata.lane1_reg_data[i]); in anx7625_dp_adjust_swing()
1550 static void dp_hpd_change_handler(struct anx7625_data *ctx, bool on) in dp_hpd_change_handler() argument
1552 struct device *dev = ctx->dev; in dp_hpd_change_handler()
1560 anx7625_remove_edid(ctx); in dp_hpd_change_handler()
1561 anx7625_stop_dp_work(ctx); in dp_hpd_change_handler()
1564 anx7625_start_dp_work(ctx); in dp_hpd_change_handler()
1565 anx7625_dp_adjust_swing(ctx); in dp_hpd_change_handler()
1569 static int anx7625_hpd_change_detect(struct anx7625_data *ctx) in anx7625_hpd_change_detect() argument
1572 struct device *dev = ctx->dev; in anx7625_hpd_change_detect()
1574 status = anx7625_reg_write(ctx, ctx->i2c.tcpc_client, in anx7625_hpd_change_detect()
1581 intr_vector = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, in anx7625_hpd_change_detect()
1588 status = anx7625_reg_write(ctx, ctx->i2c.rx_p0_client, in anx7625_hpd_change_detect()
1599 status = anx7625_reg_read(ctx, ctx->i2c.rx_p0_client, in anx7625_hpd_change_detect()
1607 dp_hpd_change_handler(ctx, status & HPD_STATUS); in anx7625_hpd_change_detect()
1615 struct anx7625_data *ctx = container_of(work, in anx7625_work_func() local
1618 mutex_lock(&ctx->lock); in anx7625_work_func()
1620 if (pm_runtime_suspended(ctx->dev)) { in anx7625_work_func()
1621 mutex_unlock(&ctx->lock); in anx7625_work_func()
1625 event = anx7625_hpd_change_detect(ctx); in anx7625_work_func()
1627 mutex_unlock(&ctx->lock); in anx7625_work_func()
1632 if (ctx->bridge_attached) in anx7625_work_func()
1633 drm_helper_hpd_irq_event(ctx->bridge.dev); in anx7625_work_func()
1638 struct anx7625_data *ctx = (struct anx7625_data *)data; in anx7625_intr_hpd_isr() local
1640 queue_work(ctx->workqueue, &ctx->work); in anx7625_intr_hpd_isr()
1753 struct anx7625_data *ctx = container_of(aux, struct anx7625_data, aux); in anx7625_aux_transfer() local
1754 struct device *dev = ctx->dev; in anx7625_aux_transfer()
1758 mutex_lock(&ctx->aux_lock); in anx7625_aux_transfer()
1771 ret = anx7625_aux_trans(ctx, msg->request, msg->address, in anx7625_aux_transfer()
1775 mutex_unlock(&ctx->aux_lock); in anx7625_aux_transfer()
1780 static const struct drm_edid *anx7625_edid_read(struct anx7625_data *ctx) in anx7625_edid_read() argument
1782 struct device *dev = ctx->dev; in anx7625_edid_read()
1786 if (ctx->cached_drm_edid) in anx7625_edid_read()
1794 _anx7625_hpd_polling(ctx, 5000 * 100); in anx7625_edid_read()
1795 edid_num = sp_tx_edid_read(ctx, edid_buf); in anx7625_edid_read()
1804 ctx->cached_drm_edid = drm_edid_alloc(edid_buf, FOUR_BLOCK_SIZE); in anx7625_edid_read()
1808 return drm_edid_dup(ctx->cached_drm_edid); in anx7625_edid_read()
1811 static enum drm_connector_status anx7625_sink_detect(struct anx7625_data *ctx) in anx7625_sink_detect() argument
1813 struct device *dev = ctx->dev; in anx7625_sink_detect()
1817 if (ctx->pdata.panel_bridge) in anx7625_sink_detect()
1820 return ctx->hpd_status ? connector_status_connected : in anx7625_sink_detect()
1828 struct anx7625_data *ctx = dev_get_drvdata(dev); in anx7625_audio_hw_params() local
1832 if (anx7625_sink_detect(ctx) == connector_status_disconnected) { in anx7625_audio_hw_params()
1847 ret = anx7625_write_and_or(ctx, ctx->i2c.tx_p2_client, in anx7625_audio_hw_params()
1852 ret = anx7625_write_and_or(ctx, ctx->i2c.tx_p2_client, in anx7625_audio_hw_params()
1876 ret |= anx7625_write_and_or(ctx, ctx->i2c.tx_p2_client, in anx7625_audio_hw_params()
1899 ret |= anx7625_write_and_or(ctx, ctx->i2c.tx_p2_client, in anx7625_audio_hw_params()
1902 ret |= anx7625_write_or(ctx, ctx->i2c.tx_p2_client, in anx7625_audio_hw_params()
1905 ret |= anx7625_write_and(ctx, ctx->i2c.tx_p2_client, in anx7625_audio_hw_params()
1936 ret |= anx7625_write_and_or(ctx, ctx->i2c.tx_p2_client, in anx7625_audio_hw_params()
1939 ret |= anx7625_write_or(ctx, ctx->i2c.rx_p0_client, in anx7625_audio_hw_params()
1974 anx7625_audio_update_connector_status(struct anx7625_data *ctx, in anx7625_audio_update_connector_status() argument
1977 if (ctx->plugged_cb && ctx->codec_dev) { in anx7625_audio_update_connector_status()
1978 ctx->plugged_cb(ctx->codec_dev, in anx7625_audio_update_connector_status()
1987 struct anx7625_data *ctx = data; in anx7625_audio_hook_plugged_cb() local
1989 ctx->plugged_cb = fn; in anx7625_audio_hook_plugged_cb()
1990 ctx->codec_dev = codec_dev; in anx7625_audio_hook_plugged_cb()
1991 anx7625_audio_update_connector_status(ctx, anx7625_sink_detect(ctx)); in anx7625_audio_hook_plugged_cb()
1999 struct anx7625_data *ctx = dev_get_drvdata(dev); in anx7625_audio_get_eld() local
2001 if (!ctx->connector) { in anx7625_audio_get_eld()
2006 mutex_lock(&ctx->connector->eld_mutex); in anx7625_audio_get_eld()
2007 memcpy(buf, ctx->connector->eld, in anx7625_audio_get_eld()
2008 min(sizeof(ctx->connector->eld), len)); in anx7625_audio_get_eld()
2009 mutex_unlock(&ctx->connector->eld_mutex); in anx7625_audio_get_eld()
2023 static void anx7625_unregister_audio(struct anx7625_data *ctx) in anx7625_unregister_audio() argument
2025 struct device *dev = ctx->dev; in anx7625_unregister_audio()
2027 if (ctx->audio_pdev) { in anx7625_unregister_audio()
2028 platform_device_unregister(ctx->audio_pdev); in anx7625_unregister_audio()
2029 ctx->audio_pdev = NULL; in anx7625_unregister_audio()
2035 static int anx7625_register_audio(struct device *dev, struct anx7625_data *ctx) in anx7625_register_audio() argument
2041 .data = ctx, in anx7625_register_audio()
2044 ctx->audio_pdev = platform_device_register_data(dev, in anx7625_register_audio()
2050 if (IS_ERR(ctx->audio_pdev)) in anx7625_register_audio()
2051 return PTR_ERR(ctx->audio_pdev); in anx7625_register_audio()
2058 static int anx7625_setup_dsi_device(struct anx7625_data *ctx) in anx7625_setup_dsi_device() argument
2061 struct device *dev = ctx->dev; in anx7625_setup_dsi_device()
2069 host = of_find_mipi_dsi_host_by_node(ctx->pdata.mipi_host_node); in anx7625_setup_dsi_device()
2079 dsi->lanes = ctx->pdata.mipi_lanes; in anx7625_setup_dsi_device()
2086 ctx->dsi = dsi; in anx7625_setup_dsi_device()
2091 static int anx7625_attach_dsi(struct anx7625_data *ctx) in anx7625_attach_dsi() argument
2093 struct device *dev = ctx->dev; in anx7625_attach_dsi()
2098 ret = devm_mipi_dsi_attach(dev, ctx->dsi); in anx7625_attach_dsi()
2113 struct anx7625_data *ctx; in hdcp_check_work_func() local
2118 ctx = container_of(dwork, struct anx7625_data, hdcp_work); in hdcp_check_work_func()
2119 dev = ctx->dev; in hdcp_check_work_func()
2121 if (!ctx->connector) { in hdcp_check_work_func()
2126 drm_dev = ctx->connector->dev; in hdcp_check_work_func()
2128 mutex_lock(&ctx->hdcp_wq_lock); in hdcp_check_work_func()
2130 status = anx7625_reg_read(ctx, ctx->i2c.tx_p0_client, 0); in hdcp_check_work_func()
2133 ctx->hdcp_cp = DRM_MODE_CONTENT_PROTECTION_ENABLED; in hdcp_check_work_func()
2134 drm_hdcp_update_content_protection(ctx->connector, in hdcp_check_work_func()
2135 ctx->hdcp_cp); in hdcp_check_work_func()
2139 mutex_unlock(&ctx->hdcp_wq_lock); in hdcp_check_work_func()
2146 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_attach() local
2148 struct device *dev = ctx->dev; in anx7625_bridge_attach()
2154 ctx->aux.drm_dev = bridge->dev; in anx7625_bridge_attach()
2155 err = drm_dp_aux_register(&ctx->aux); in anx7625_bridge_attach()
2161 if (ctx->pdata.panel_bridge) { in anx7625_bridge_attach()
2163 ctx->pdata.panel_bridge, in anx7625_bridge_attach()
2164 &ctx->bridge, flags); in anx7625_bridge_attach()
2169 ctx->bridge_attached = 1; in anx7625_bridge_attach()
2176 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_detach() local
2178 drm_dp_aux_unregister(&ctx->aux); in anx7625_bridge_detach()
2186 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_mode_valid() local
2187 struct device *dev = ctx->dev; in anx7625_bridge_mode_valid()
2207 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_mode_set() local
2208 struct device *dev = ctx->dev; in anx7625_bridge_mode_set()
2212 ctx->dt.pixelclock.min = mode->clock; in anx7625_bridge_mode_set()
2213 ctx->dt.hactive.min = mode->hdisplay; in anx7625_bridge_mode_set()
2214 ctx->dt.hsync_len.min = mode->hsync_end - mode->hsync_start; in anx7625_bridge_mode_set()
2215 ctx->dt.hfront_porch.min = mode->hsync_start - mode->hdisplay; in anx7625_bridge_mode_set()
2216 ctx->dt.hback_porch.min = mode->htotal - mode->hsync_end; in anx7625_bridge_mode_set()
2217 ctx->dt.vactive.min = mode->vdisplay; in anx7625_bridge_mode_set()
2218 ctx->dt.vsync_len.min = mode->vsync_end - mode->vsync_start; in anx7625_bridge_mode_set()
2219 ctx->dt.vfront_porch.min = mode->vsync_start - mode->vdisplay; in anx7625_bridge_mode_set()
2220 ctx->dt.vback_porch.min = mode->vtotal - mode->vsync_end; in anx7625_bridge_mode_set()
2222 ctx->display_timing_valid = 1; in anx7625_bridge_mode_set()
2224 DRM_DEV_DEBUG_DRIVER(dev, "pixelclock(%d).\n", ctx->dt.pixelclock.min); in anx7625_bridge_mode_set()
2226 ctx->dt.hactive.min, in anx7625_bridge_mode_set()
2227 ctx->dt.hsync_len.min, in anx7625_bridge_mode_set()
2228 ctx->dt.hfront_porch.min, in anx7625_bridge_mode_set()
2229 ctx->dt.hback_porch.min); in anx7625_bridge_mode_set()
2231 ctx->dt.vactive.min, in anx7625_bridge_mode_set()
2232 ctx->dt.vsync_len.min, in anx7625_bridge_mode_set()
2233 ctx->dt.vfront_porch.min, in anx7625_bridge_mode_set()
2234 ctx->dt.vback_porch.min); in anx7625_bridge_mode_set()
2253 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_mode_fixup() local
2254 struct device *dev = ctx->dev; in anx7625_bridge_mode_fixup()
2262 if (!ctx->pdata.panel_bridge) in anx7625_bridge_mode_fixup()
2371 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_atomic_check() local
2372 struct device *dev = ctx->dev; in anx7625_bridge_atomic_check()
2385 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_atomic_enable() local
2386 struct device *dev = ctx->dev; in anx7625_bridge_atomic_enable()
2397 ctx->connector = connector; in anx7625_bridge_atomic_enable()
2400 _anx7625_hpd_polling(ctx, 5000 * 100); in anx7625_bridge_atomic_enable()
2402 anx7625_dp_start(ctx); in anx7625_bridge_atomic_enable()
2410 if (ctx->dp_en) { in anx7625_bridge_atomic_enable()
2412 anx7625_hdcp_enable(ctx); in anx7625_bridge_atomic_enable()
2414 queue_delayed_work(ctx->hdcp_workqueue, in anx7625_bridge_atomic_enable()
2415 &ctx->hdcp_work, in anx7625_bridge_atomic_enable()
2424 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_atomic_disable() local
2425 struct device *dev = ctx->dev; in anx7625_bridge_atomic_disable()
2429 flush_workqueue(ctx->hdcp_workqueue); in anx7625_bridge_atomic_disable()
2431 if (ctx->connector && in anx7625_bridge_atomic_disable()
2432 ctx->hdcp_cp == DRM_MODE_CONTENT_PROTECTION_ENABLED) { in anx7625_bridge_atomic_disable()
2433 anx7625_hdcp_disable(ctx); in anx7625_bridge_atomic_disable()
2434 ctx->hdcp_cp = DRM_MODE_CONTENT_PROTECTION_DESIRED; in anx7625_bridge_atomic_disable()
2435 drm_hdcp_update_content_protection(ctx->connector, in anx7625_bridge_atomic_disable()
2436 ctx->hdcp_cp); in anx7625_bridge_atomic_disable()
2440 ctx->connector = NULL; in anx7625_bridge_atomic_disable()
2441 anx7625_dp_stop(ctx); in anx7625_bridge_atomic_disable()
2443 mutex_lock(&ctx->aux_lock); in anx7625_bridge_atomic_disable()
2445 mutex_unlock(&ctx->aux_lock); in anx7625_bridge_atomic_disable()
2449 anx7625_audio_update_connector_status(struct anx7625_data *ctx,
2455 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_detect() local
2456 struct device *dev = ctx->dev; in anx7625_bridge_detect()
2461 status = anx7625_sink_detect(ctx); in anx7625_bridge_detect()
2462 anx7625_audio_update_connector_status(ctx, status); in anx7625_bridge_detect()
2469 struct anx7625_data *ctx = bridge_to_anx7625(bridge); in anx7625_bridge_edid_read() local
2470 struct device *dev = ctx->dev; in anx7625_bridge_edid_read()
2474 return anx7625_edid_read(ctx); in anx7625_bridge_edid_read()
2492 static int anx7625_register_i2c_dummy_clients(struct anx7625_data *ctx, in anx7625_register_i2c_dummy_clients() argument
2495 struct device *dev = ctx->dev; in anx7625_register_i2c_dummy_clients()
2497 ctx->i2c.tx_p0_client = devm_i2c_new_dummy_device(dev, client->adapter, in anx7625_register_i2c_dummy_clients()
2499 if (IS_ERR(ctx->i2c.tx_p0_client)) in anx7625_register_i2c_dummy_clients()
2500 return PTR_ERR(ctx->i2c.tx_p0_client); in anx7625_register_i2c_dummy_clients()
2502 ctx->i2c.tx_p1_client = devm_i2c_new_dummy_device(dev, client->adapter, in anx7625_register_i2c_dummy_clients()
2504 if (IS_ERR(ctx->i2c.tx_p1_client)) in anx7625_register_i2c_dummy_clients()
2505 return PTR_ERR(ctx->i2c.tx_p1_client); in anx7625_register_i2c_dummy_clients()
2507 ctx->i2c.tx_p2_client = devm_i2c_new_dummy_device(dev, client->adapter, in anx7625_register_i2c_dummy_clients()
2509 if (IS_ERR(ctx->i2c.tx_p2_client)) in anx7625_register_i2c_dummy_clients()
2510 return PTR_ERR(ctx->i2c.tx_p2_client); in anx7625_register_i2c_dummy_clients()
2512 ctx->i2c.rx_p0_client = devm_i2c_new_dummy_device(dev, client->adapter, in anx7625_register_i2c_dummy_clients()
2514 if (IS_ERR(ctx->i2c.rx_p0_client)) in anx7625_register_i2c_dummy_clients()
2515 return PTR_ERR(ctx->i2c.rx_p0_client); in anx7625_register_i2c_dummy_clients()
2517 ctx->i2c.rx_p1_client = devm_i2c_new_dummy_device(dev, client->adapter, in anx7625_register_i2c_dummy_clients()
2519 if (IS_ERR(ctx->i2c.rx_p1_client)) in anx7625_register_i2c_dummy_clients()
2520 return PTR_ERR(ctx->i2c.rx_p1_client); in anx7625_register_i2c_dummy_clients()
2522 ctx->i2c.rx_p2_client = devm_i2c_new_dummy_device(dev, client->adapter, in anx7625_register_i2c_dummy_clients()
2524 if (IS_ERR(ctx->i2c.rx_p2_client)) in anx7625_register_i2c_dummy_clients()
2525 return PTR_ERR(ctx->i2c.rx_p2_client); in anx7625_register_i2c_dummy_clients()
2527 ctx->i2c.tcpc_client = devm_i2c_new_dummy_device(dev, client->adapter, in anx7625_register_i2c_dummy_clients()
2529 if (IS_ERR(ctx->i2c.tcpc_client)) in anx7625_register_i2c_dummy_clients()
2530 return PTR_ERR(ctx->i2c.tcpc_client); in anx7625_register_i2c_dummy_clients()
2537 struct anx7625_data *ctx = dev_get_drvdata(dev); in anx7625_runtime_pm_suspend() local
2539 mutex_lock(&ctx->lock); in anx7625_runtime_pm_suspend()
2541 anx7625_stop_dp_work(ctx); in anx7625_runtime_pm_suspend()
2542 if (!ctx->pdata.panel_bridge) in anx7625_runtime_pm_suspend()
2543 anx7625_remove_edid(ctx); in anx7625_runtime_pm_suspend()
2544 anx7625_power_standby(ctx); in anx7625_runtime_pm_suspend()
2546 mutex_unlock(&ctx->lock); in anx7625_runtime_pm_suspend()
2553 struct anx7625_data *ctx = dev_get_drvdata(dev); in anx7625_runtime_pm_resume() local
2555 mutex_lock(&ctx->lock); in anx7625_runtime_pm_resume()
2557 anx7625_power_on_init(ctx); in anx7625_runtime_pm_resume()
2559 mutex_unlock(&ctx->lock); in anx7625_runtime_pm_resume()