anx78xx 82 drivers/gpu/drm/bridge/analogix-anx78xx.c static inline struct anx78xx *connector_to_anx78xx(struct drm_connector *c) anx78xx 84 drivers/gpu/drm/bridge/analogix-anx78xx.c return container_of(c, struct anx78xx, connector); anx78xx 87 drivers/gpu/drm/bridge/analogix-anx78xx.c static inline struct anx78xx *bridge_to_anx78xx(struct drm_bridge *bridge) anx78xx 89 drivers/gpu/drm/bridge/analogix-anx78xx.c return container_of(bridge, struct anx78xx, bridge); anx78xx 102 drivers/gpu/drm/bridge/analogix-anx78xx.c static bool anx78xx_aux_op_finished(struct anx78xx *anx78xx) anx78xx 107 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL2_REG, anx78xx 115 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_aux_wait(struct anx78xx *anx78xx) anx78xx 123 drivers/gpu/drm/bridge/analogix-anx78xx.c while (!anx78xx_aux_op_finished(anx78xx)) { anx78xx 125 drivers/gpu/drm/bridge/analogix-anx78xx.c if (!anx78xx_aux_op_finished(anx78xx)) { anx78xx 137 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_CH_STATUS_REG, anx78xx 153 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_aux_address(struct anx78xx *anx78xx, unsigned int addr) anx78xx 157 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_ADDR_7_0_REG, anx78xx 162 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_ADDR_15_8_REG, anx78xx 172 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_update_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 186 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = container_of(aux, struct anx78xx, aux); anx78xx 204 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_bulk_write(anx78xx->map[I2C_IDX_TX_P0], anx78xx 212 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_aux_address(anx78xx, msg->address); anx78xx 216 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL1_REG, anx78xx 222 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_update_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 228 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_aux_wait(anx78xx); anx78xx 236 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_bulk_read(anx78xx->map[I2C_IDX_TX_P0], anx78xx 243 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 251 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_set_hpd(struct anx78xx *anx78xx) anx78xx 255 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_RX_P0], anx78xx 260 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL3_REG, anx78xx 268 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_clear_hpd(struct anx78xx *anx78xx) anx78xx 272 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL3_REG, anx78xx 277 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], anx78xx 295 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_rx_initialization(struct anx78xx *anx78xx) anx78xx 299 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_HDMI_MUTE_CTRL_REG, anx78xx 304 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], SP_CHIP_CTRL_REG, anx78xx 310 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], anx78xx 316 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_RX_P0], anx78xx 323 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], anx78xx 329 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], anx78xx 335 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], SP_AUDVID_CTRL_REG, anx78xx 340 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_RX_P0], anx78xx 345 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_RX_P0], anx78xx 351 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], anx78xx 357 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_multi_reg_write(anx78xx->map[I2C_IDX_RX_P0], anx78xx 363 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_hpd(anx78xx); anx78xx 376 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_link_phy_initialization(struct anx78xx *anx78xx) anx78xx 384 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_ANALOG_CTRL0_REG, anx78xx 392 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_bulk_write(anx78xx->map[I2C_IDX_TX_P1], anx78xx 403 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_xtal_clk_sel(struct anx78xx *anx78xx) anx78xx 408 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_update_bits(anx78xx->map[I2C_IDX_TX_P2], anx78xx 415 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL3_REG, anx78xx 420 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL4_REG, anx78xx 425 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], anx78xx 430 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], anx78xx 436 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_MISC_CTRL_REG, anx78xx 441 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_RX_P0], anx78xx 447 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], anx78xx 463 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_tx_initialization(struct anx78xx *anx78xx) anx78xx 468 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_AUX_CH_CTRL2_REG, anx78xx 474 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 479 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 485 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_multi_reg_write(anx78xx->map[I2C_IDX_TX_P0], anx78xx 491 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 496 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL8_REG, anx78xx 505 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_HDCP_AUTO_TIMER_REG, anx78xx 510 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 515 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 520 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], anx78xx 525 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_xtal_clk_sel(anx78xx); anx78xx 529 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_AUX_DEFER_CTRL_REG, anx78xx 534 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 544 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], anx78xx 549 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 555 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 560 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_link_phy_initialization(anx78xx); anx78xx 565 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 573 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_enable_interrupts(struct anx78xx *anx78xx) anx78xx 581 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_INT_CTRL_REG, 0x01); anx78xx 585 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], anx78xx 590 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_DP_INT_MASK1_REG, anx78xx 595 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_INT_MASK1_REG, anx78xx 603 drivers/gpu/drm/bridge/analogix-anx78xx.c static void anx78xx_poweron(struct anx78xx *anx78xx) anx78xx 605 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx_platform_data *pdata = &anx78xx->pdata; anx78xx 608 drivers/gpu/drm/bridge/analogix-anx78xx.c if (WARN_ON(anx78xx->powered)) anx78xx 631 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_POWERDOWN_CTRL_REG, anx78xx 633 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], SP_POWERDOWN_CTRL_REG, anx78xx 636 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->powered = true; anx78xx 639 drivers/gpu/drm/bridge/analogix-anx78xx.c static void anx78xx_poweroff(struct anx78xx *anx78xx) anx78xx 641 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx_platform_data *pdata = &anx78xx->pdata; anx78xx 644 drivers/gpu/drm/bridge/analogix-anx78xx.c if (WARN_ON(!anx78xx->powered)) anx78xx 664 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->powered = false; anx78xx 667 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_start(struct anx78xx *anx78xx) anx78xx 672 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], anx78xx 677 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_enable_interrupts(anx78xx); anx78xx 683 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_rx_initialization(anx78xx); anx78xx 689 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_tx_initialization(anx78xx); anx78xx 705 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_poweroff(anx78xx); anx78xx 710 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_init_pdata(struct anx78xx *anx78xx) anx78xx 712 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx_platform_data *pdata = &anx78xx->pdata; anx78xx 713 drivers/gpu/drm/bridge/analogix-anx78xx.c struct device *dev = &anx78xx->client->dev; anx78xx 740 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_dp_link_training(struct anx78xx *anx78xx) anx78xx 745 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_HDMI_MUTE_CTRL_REG, anx78xx 750 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], anx78xx 756 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_dp_dpcd_readb(&anx78xx->aux, DP_MAX_LINK_RATE, &dp_bw); anx78xx 771 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL1_REG, anx78xx 776 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], anx78xx 782 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_dp_dpcd_read(&anx78xx->aux, DP_DPCD_REV, anx78xx 783 drivers/gpu/drm/bridge/analogix-anx78xx.c &anx78xx->dpcd, DP_RECEIVER_CAP_SIZE); anx78xx 790 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 796 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_dp_link_probe(&anx78xx->aux, &anx78xx->link); anx78xx 803 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_dp_link_power_up(&anx78xx->aux, &anx78xx->link); anx78xx 810 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], anx78xx 815 drivers/gpu/drm/bridge/analogix-anx78xx.c if (anx78xx->dpcd[DP_MAX_DOWNSPREAD] & DP_MAX_DOWNSPREAD_0_5) { anx78xx 818 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], anx78xx 823 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_DOWNSPREAD_CTRL, anx78xx 828 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_dp_dpcd_writeb(&anx78xx->aux, DP_DOWNSPREAD_CTRL, 0); anx78xx 834 drivers/gpu/drm/bridge/analogix-anx78xx.c if (drm_dp_enhanced_frame_cap(anx78xx->dpcd)) anx78xx 835 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 839 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 845 drivers/gpu/drm/bridge/analogix-anx78xx.c value = drm_dp_link_rate_to_bw_code(anx78xx->link.rate); anx78xx 846 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], anx78xx 851 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_dp_link_configure(&anx78xx->aux, &anx78xx->link); anx78xx 858 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P0], SP_DP_LT_CTRL_REG, anx78xx 866 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_config_dp_output(struct anx78xx *anx78xx) anx78xx 870 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL1_REG, anx78xx 876 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_VID_CTRL1_REG, anx78xx 884 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_send_video_infoframe(struct anx78xx *anx78xx, anx78xx 896 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_clear_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 901 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_bulk_write(anx78xx->map[I2C_IDX_TX_P2], anx78xx 907 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 912 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P0], anx78xx 920 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_get_downstream_info(struct anx78xx *anx78xx) anx78xx 925 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_dp_dpcd_readb(&anx78xx->aux, DP_SINK_COUNT, &value); anx78xx 941 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = connector_to_anx78xx(connector); anx78xx 944 drivers/gpu/drm/bridge/analogix-anx78xx.c if (WARN_ON(!anx78xx->powered)) anx78xx 947 drivers/gpu/drm/bridge/analogix-anx78xx.c if (anx78xx->edid) anx78xx 948 drivers/gpu/drm/bridge/analogix-anx78xx.c return drm_add_edid_modes(connector, anx78xx->edid); anx78xx 950 drivers/gpu/drm/bridge/analogix-anx78xx.c mutex_lock(&anx78xx->lock); anx78xx 952 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_get_downstream_info(anx78xx); anx78xx 958 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->edid = drm_get_edid(connector, &anx78xx->aux.ddc); anx78xx 959 drivers/gpu/drm/bridge/analogix-anx78xx.c if (!anx78xx->edid) { anx78xx 965 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->edid); anx78xx 971 drivers/gpu/drm/bridge/analogix-anx78xx.c num_modes = drm_add_edid_modes(connector, anx78xx->edid); anx78xx 974 drivers/gpu/drm/bridge/analogix-anx78xx.c mutex_unlock(&anx78xx->lock); anx78xx 986 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = connector_to_anx78xx(connector); anx78xx 988 drivers/gpu/drm/bridge/analogix-anx78xx.c if (!gpiod_get_value(anx78xx->pdata.gpiod_hpd)) anx78xx 1005 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = bridge_to_anx78xx(bridge); anx78xx 1014 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->aux.name = "DP-AUX"; anx78xx 1015 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->aux.dev = &anx78xx->client->dev; anx78xx 1016 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->aux.transfer = anx78xx_aux_transfer; anx78xx 1018 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_dp_aux_register(&anx78xx->aux); anx78xx 1024 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_connector_init(bridge->dev, &anx78xx->connector, anx78xx 1032 drivers/gpu/drm/bridge/analogix-anx78xx.c drm_connector_helper_add(&anx78xx->connector, anx78xx 1035 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_connector_register(&anx78xx->connector); anx78xx 1041 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->connector.polled = DRM_CONNECTOR_POLL_HPD; anx78xx 1043 drivers/gpu/drm/bridge/analogix-anx78xx.c err = drm_connector_attach_encoder(&anx78xx->connector, anx78xx 1069 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = bridge_to_anx78xx(bridge); anx78xx 1072 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_set_bits(anx78xx->map[I2C_IDX_TX_P2], SP_POWERDOWN_CTRL_REG, anx78xx 1080 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = bridge_to_anx78xx(bridge); anx78xx 1084 drivers/gpu/drm/bridge/analogix-anx78xx.c if (WARN_ON(!anx78xx->powered)) anx78xx 1087 drivers/gpu/drm/bridge/analogix-anx78xx.c mutex_lock(&anx78xx->lock); anx78xx 1090 drivers/gpu/drm/bridge/analogix-anx78xx.c &anx78xx->connector, anx78xx 1097 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_send_video_infoframe(anx78xx, &frame); anx78xx 1102 drivers/gpu/drm/bridge/analogix-anx78xx.c mutex_unlock(&anx78xx->lock); anx78xx 1107 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = bridge_to_anx78xx(bridge); anx78xx 1110 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_start(anx78xx); anx78xx 1116 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_set_hpd(anx78xx); anx78xx 1131 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = data; anx78xx 1134 drivers/gpu/drm/bridge/analogix-anx78xx.c if (anx78xx->powered) anx78xx 1137 drivers/gpu/drm/bridge/analogix-anx78xx.c mutex_lock(&anx78xx->lock); anx78xx 1140 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_poweron(anx78xx); anx78xx 1142 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_enable_interrupts(anx78xx); anx78xx 1146 drivers/gpu/drm/bridge/analogix-anx78xx.c mutex_unlock(&anx78xx->lock); anx78xx 1151 drivers/gpu/drm/bridge/analogix-anx78xx.c static int anx78xx_handle_dp_int_1(struct anx78xx *anx78xx, u8 irq) anx78xx 1157 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], SP_DP_INT_STATUS1_REG, anx78xx 1164 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_config_dp_output(anx78xx); anx78xx 1170 drivers/gpu/drm/bridge/analogix-anx78xx.c static bool anx78xx_handle_common_int_4(struct anx78xx *anx78xx, u8 irq) anx78xx 1177 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_TX_P2], anx78xx 1187 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_poweroff(anx78xx); anx78xx 1189 drivers/gpu/drm/bridge/analogix-anx78xx.c kfree(anx78xx->edid); anx78xx 1190 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->edid = NULL; anx78xx 1199 drivers/gpu/drm/bridge/analogix-anx78xx.c static void anx78xx_handle_hdmi_int_1(struct anx78xx *anx78xx, u8 irq) anx78xx 1206 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_write(anx78xx->map[I2C_IDX_RX_P0], SP_INT_STATUS1_REG, anx78xx 1216 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_RX_P0], anx78xx 1233 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_dp_link_training(anx78xx); anx78xx 1241 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = data; anx78xx 1246 drivers/gpu/drm/bridge/analogix-anx78xx.c mutex_lock(&anx78xx->lock); anx78xx 1248 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DP_INT_STATUS1_REG, anx78xx 1256 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_handle_dp_int_1(anx78xx, irq); anx78xx 1258 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], anx78xx 1267 drivers/gpu/drm/bridge/analogix-anx78xx.c event = anx78xx_handle_common_int_4(anx78xx, irq); anx78xx 1270 drivers/gpu/drm/bridge/analogix-anx78xx.c if (!anx78xx->powered) anx78xx 1273 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_RX_P0], SP_INT_STATUS1_REG, anx78xx 1281 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_handle_hdmi_int_1(anx78xx, irq); anx78xx 1284 drivers/gpu/drm/bridge/analogix-anx78xx.c mutex_unlock(&anx78xx->lock); anx78xx 1287 drivers/gpu/drm/bridge/analogix-anx78xx.c drm_helper_hpd_irq_event(anx78xx->connector.dev); anx78xx 1292 drivers/gpu/drm/bridge/analogix-anx78xx.c static void unregister_i2c_dummy_clients(struct anx78xx *anx78xx) anx78xx 1296 drivers/gpu/drm/bridge/analogix-anx78xx.c for (i = 0; i < ARRAY_SIZE(anx78xx->i2c_dummy); i++) anx78xx 1297 drivers/gpu/drm/bridge/analogix-anx78xx.c i2c_unregister_device(anx78xx->i2c_dummy[i]); anx78xx 1314 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx; anx78xx 1320 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx = devm_kzalloc(&client->dev, sizeof(*anx78xx), GFP_KERNEL); anx78xx 1321 drivers/gpu/drm/bridge/analogix-anx78xx.c if (!anx78xx) anx78xx 1324 drivers/gpu/drm/bridge/analogix-anx78xx.c pdata = &anx78xx->pdata; anx78xx 1326 drivers/gpu/drm/bridge/analogix-anx78xx.c mutex_init(&anx78xx->lock); anx78xx 1329 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->bridge.of_node = client->dev.of_node; anx78xx 1332 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->client = client; anx78xx 1333 drivers/gpu/drm/bridge/analogix-anx78xx.c i2c_set_clientdata(client, anx78xx); anx78xx 1335 drivers/gpu/drm/bridge/analogix-anx78xx.c err = anx78xx_init_pdata(anx78xx); anx78xx 1357 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->i2c_dummy[i] = i2c_new_dummy(client->adapter, anx78xx 1359 drivers/gpu/drm/bridge/analogix-anx78xx.c if (!anx78xx->i2c_dummy[i]) { anx78xx 1366 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->map[i] = devm_regmap_init_i2c(anx78xx->i2c_dummy[i], anx78xx 1368 drivers/gpu/drm/bridge/analogix-anx78xx.c if (IS_ERR(anx78xx->map[i])) { anx78xx 1369 drivers/gpu/drm/bridge/analogix-anx78xx.c err = PTR_ERR(anx78xx->map[i]); anx78xx 1377 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_poweron(anx78xx); anx78xx 1379 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DEVICE_IDL_REG, anx78xx 1384 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DEVICE_IDH_REG, anx78xx 1389 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->chipid = (u8)idl | ((u8)idh << 8); anx78xx 1391 drivers/gpu/drm/bridge/analogix-anx78xx.c err = regmap_read(anx78xx->map[I2C_IDX_TX_P2], SP_DEVICE_VERSION_REG, anx78xx 1397 drivers/gpu/drm/bridge/analogix-anx78xx.c if (anx78xx->chipid == anx78xx_chipid_list[i]) { anx78xx 1399 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->chipid, version); anx78xx 1407 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->chipid, version); anx78xx 1415 drivers/gpu/drm/bridge/analogix-anx78xx.c "anx78xx-hpd", anx78xx); anx78xx 1425 drivers/gpu/drm/bridge/analogix-anx78xx.c "anx78xx-intp", anx78xx); anx78xx 1431 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx->bridge.funcs = &anx78xx_bridge_funcs; anx78xx 1433 drivers/gpu/drm/bridge/analogix-anx78xx.c drm_bridge_add(&anx78xx->bridge); anx78xx 1436 drivers/gpu/drm/bridge/analogix-anx78xx.c if (!gpiod_get_value(anx78xx->pdata.gpiod_hpd)) anx78xx 1437 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_poweroff(anx78xx); anx78xx 1442 drivers/gpu/drm/bridge/analogix-anx78xx.c anx78xx_poweroff(anx78xx); anx78xx 1445 drivers/gpu/drm/bridge/analogix-anx78xx.c unregister_i2c_dummy_clients(anx78xx); anx78xx 1451 drivers/gpu/drm/bridge/analogix-anx78xx.c struct anx78xx *anx78xx = i2c_get_clientdata(client); anx78xx 1453 drivers/gpu/drm/bridge/analogix-anx78xx.c drm_bridge_remove(&anx78xx->bridge); anx78xx 1455 drivers/gpu/drm/bridge/analogix-anx78xx.c unregister_i2c_dummy_clients(anx78xx); anx78xx 1457 drivers/gpu/drm/bridge/analogix-anx78xx.c kfree(anx78xx->edid);