Symbol: anx6345
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
102
err = anx6345_clear_bits(anx6345->map[I2C_IDX_TXCOM],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
108
err = drm_dp_dpcd_readb(&anx6345->aux, DP_MAX_LINK_RATE, &dp_bw);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
122
err = anx6345_set_bits(anx6345->map[I2C_IDX_TXCOM], SP_VID_CTRL1_REG,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
127
err = anx6345_clear_bits(anx6345->map[I2C_IDX_TXCOM],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
133
err = drm_dp_dpcd_read(&anx6345->aux, DP_DPCD_REV,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
134
&anx6345->dpcd, DP_RECEIVER_CAP_SIZE);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
141
err = anx6345_clear_bits(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
146
drm_dp_link_power_up(&anx6345->aux, anx6345->dpcd[DP_DPCD_REV]);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
149
err = regmap_write(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
154
if (anx6345->dpcd[DP_MAX_DOWNSPREAD] & DP_MAX_DOWNSPREAD_0_5) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
157
err = regmap_write(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
162
err = drm_dp_dpcd_writeb(&anx6345->aux, DP_DOWNSPREAD_CTRL,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
167
err = drm_dp_dpcd_writeb(&anx6345->aux, DP_DOWNSPREAD_CTRL, 0);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
173
if (drm_dp_enhanced_frame_cap(anx6345->dpcd))
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
174
err = anx6345_set_bits(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
178
err = anx6345_clear_bits(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
185
err = regmap_write(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
190
dpcd[1] = drm_dp_max_lane_count(anx6345->dpcd);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
192
err = regmap_write(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
197
if (drm_dp_enhanced_frame_cap(anx6345->dpcd))
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
200
err = drm_dp_dpcd_write(&anx6345->aux, DP_LINK_BW_SET, dpcd,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
209
err = regmap_write(anx6345->map[I2C_IDX_DPTX], SP_DP_LT_CTRL_REG,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
214
return regmap_read_poll_timeout(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
220
static int anx6345_tx_initialization(struct anx6345 *anx6345)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
225
err = regmap_write(anx6345->map[I2C_IDX_TXCOM], SP_VID_CTRL2_REG,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
230
err = regmap_write(anx6345->map[I2C_IDX_DPTX], SP_DP_PLL_CTRL_REG, 0);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
234
err = regmap_write(anx6345->map[I2C_IDX_TXCOM],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
239
err = regmap_write(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
245
err = regmap_write(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
251
err = anx6345_set_bits(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
259
err = regmap_write(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
266
err = anx6345_set_bits(anx6345->map[I2C_IDX_TXCOM],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
271
return anx6345_clear_bits(anx6345->map[I2C_IDX_TXCOM],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
275
static void anx6345_poweron(struct anx6345 *anx6345)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
280
gpiod_set_value_cansleep(anx6345->gpiod_reset, 1);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
283
err = regulator_enable(anx6345->dvdd12);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
293
err = regulator_enable(anx6345->dvdd25);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
305
gpiod_set_value_cansleep(anx6345->gpiod_reset, 0);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
308
anx6345_set_bits(anx6345->map[I2C_IDX_TXCOM], SP_POWERDOWN_CTRL_REG,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
310
anx6345_clear_bits(anx6345->map[I2C_IDX_TXCOM], SP_POWERDOWN_CTRL_REG,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
313
if (anx6345->panel)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
314
drm_panel_prepare(anx6345->panel);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
316
anx6345->powered = true;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
319
static void anx6345_poweroff(struct anx6345 *anx6345)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
323
gpiod_set_value_cansleep(anx6345->gpiod_reset, 1);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
326
if (anx6345->panel)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
327
drm_panel_unprepare(anx6345->panel);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
329
err = regulator_disable(anx6345->dvdd25);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
338
err = regulator_disable(anx6345->dvdd12);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
347
anx6345->powered = false;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
350
static int anx6345_start(struct anx6345 *anx6345)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
354
if (!anx6345->powered)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
355
anx6345_poweron(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
358
err = anx6345_clear_bits(anx6345->map[I2C_IDX_TXCOM],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
362
err = anx6345_tx_initialization(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
365
anx6345_poweroff(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
369
err = anx6345_dp_link_training(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
372
anx6345_poweroff(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
385
static int anx6345_config_dp_output(struct anx6345 *anx6345)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
389
err = anx6345_clear_bits(anx6345->map[I2C_IDX_TXCOM], SP_VID_CTRL1_REG,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
395
err = anx6345_set_bits(anx6345->map[I2C_IDX_TXCOM], SP_VID_CTRL1_REG,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
401
return anx6345_set_bits(anx6345->map[I2C_IDX_DPTX],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
406
static int anx6345_get_downstream_info(struct anx6345 *anx6345)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
411
err = drm_dp_dpcd_readb(&anx6345->aux, DP_SINK_COUNT, &value);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
427
struct anx6345 *anx6345 = connector_to_anx6345(connector);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
431
mutex_lock(&anx6345->lock);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
433
if (!anx6345->drm_edid) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
434
if (!anx6345->powered) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
435
anx6345_poweron(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
439
err = anx6345_get_downstream_info(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
445
anx6345->drm_edid = drm_edid_read_ddc(connector, &anx6345->aux.ddc);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
446
if (!anx6345->drm_edid)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
449
err = drm_edid_connector_update(connector, anx6345->drm_edid);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
463
anx6345_poweroff(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
465
mutex_unlock(&anx6345->lock);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
467
if (!num_modes && anx6345->panel)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
468
num_modes += drm_panel_get_modes(anx6345->panel, connector);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
495
struct anx6345 *anx6345 = bridge_to_anx6345(bridge);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
504
anx6345->aux.name = "DP-AUX";
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
505
anx6345->aux.dev = &anx6345->client->dev;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
506
anx6345->aux.drm_dev = bridge->dev;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
507
anx6345->aux.transfer = anx6345_aux_transfer;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
509
err = drm_dp_aux_register(&anx6345->aux);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
515
err = drm_connector_init(bridge->dev, &anx6345->connector,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
523
drm_connector_helper_add(&anx6345->connector,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
526
anx6345->connector.polled = DRM_CONNECTOR_POLL_HPD;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
528
err = drm_connector_attach_encoder(&anx6345->connector,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
535
err = drm_connector_register(&anx6345->connector);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
543
drm_connector_cleanup(&anx6345->connector);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
545
drm_dp_aux_unregister(&anx6345->aux);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
571
struct anx6345 *anx6345 = bridge_to_anx6345(bridge);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
574
anx6345_set_bits(anx6345->map[I2C_IDX_TXCOM], SP_POWERDOWN_CTRL_REG,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
576
if (anx6345->panel)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
577
drm_panel_disable(anx6345->panel);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
579
if (anx6345->powered)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
580
anx6345_poweroff(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
585
struct anx6345 *anx6345 = bridge_to_anx6345(bridge);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
588
if (anx6345->panel)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
589
drm_panel_enable(anx6345->panel);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
591
err = anx6345_start(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
597
err = anx6345_config_dp_output(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
610
static void unregister_i2c_dummy_clients(struct anx6345 *anx6345)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
614
for (i = 1; i < ARRAY_SIZE(anx6345->i2c_clients); i++)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
615
if (anx6345->i2c_clients[i] &&
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
616
anx6345->i2c_clients[i]->addr != anx6345->client->addr)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
617
i2c_unregister_device(anx6345->i2c_clients[i]);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
631
static bool anx6345_get_chip_id(struct anx6345 *anx6345)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
635
if (regmap_read(anx6345->map[I2C_IDX_TXCOM], SP_DEVICE_IDL_REG, &idl))
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
638
if (regmap_read(anx6345->map[I2C_IDX_TXCOM], SP_DEVICE_IDH_REG, &idh))
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
641
anx6345->chipid = (u8)idl | ((u8)idh << 8);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
643
if (regmap_read(anx6345->map[I2C_IDX_TXCOM], SP_DEVICE_VERSION_REG,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
648
if (anx6345->chipid == anx6345_chipid_list[i]) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
650
anx6345->chipid, version);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
656
anx6345->chipid, version);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
663
struct anx6345 *anx6345;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
667
anx6345 = devm_drm_bridge_alloc(&client->dev, struct anx6345, bridge,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
669
if (IS_ERR(anx6345))
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
670
return PTR_ERR(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
672
mutex_init(&anx6345->lock);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
674
anx6345->bridge.of_node = client->dev.of_node;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
676
anx6345->client = client;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
677
i2c_set_clientdata(client, anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
679
dev = &anx6345->client->dev;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
68
static inline struct anx6345 *connector_to_anx6345(struct drm_connector *c)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
682
&anx6345->panel, NULL);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
690
anx6345->dvdd12 = devm_regulator_get(dev, "dvdd12");
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
691
if (IS_ERR(anx6345->dvdd12)) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
692
if (PTR_ERR(anx6345->dvdd12) != -EPROBE_DEFER)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
694
PTR_ERR(anx6345->dvdd12));
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
695
return PTR_ERR(anx6345->dvdd12);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
699
anx6345->dvdd25 = devm_regulator_get(dev, "dvdd25");
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
70
return container_of(c, struct anx6345, connector);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
700
if (IS_ERR(anx6345->dvdd25)) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
701
if (PTR_ERR(anx6345->dvdd25) != -EPROBE_DEFER)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
703
PTR_ERR(anx6345->dvdd25));
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
704
return PTR_ERR(anx6345->dvdd25);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
708
anx6345->gpiod_reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
709
if (IS_ERR(anx6345->gpiod_reset)) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
711
return PTR_ERR(anx6345->gpiod_reset);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
717
anx6345->i2c_clients[i] = i2c_new_dummy_device(client->adapter,
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
720
anx6345->i2c_clients[i] = client;
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
722
if (IS_ERR(anx6345->i2c_clients[i])) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
723
err = PTR_ERR(anx6345->i2c_clients[i]);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
729
anx6345->map[i] = devm_regmap_init_i2c(anx6345->i2c_clients[i],
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
73
static inline struct anx6345 *bridge_to_anx6345(struct drm_bridge *bridge)
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
731
if (IS_ERR(anx6345->map[i])) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
732
err = PTR_ERR(anx6345->map[i]);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
740
anx6345_poweron(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
741
if (anx6345_get_chip_id(anx6345)) {
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
742
drm_bridge_add(&anx6345->bridge);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
746
anx6345_poweroff(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
75
return container_of(bridge, struct anx6345, bridge);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
751
unregister_i2c_dummy_clients(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
757
struct anx6345 *anx6345 = i2c_get_clientdata(client);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
759
drm_bridge_remove(&anx6345->bridge);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
761
unregister_i2c_dummy_clients(anx6345);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
763
drm_edid_free(anx6345->drm_edid);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
765
mutex_destroy(&anx6345->lock);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
91
struct anx6345 *anx6345 = container_of(aux, struct anx6345, aux);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
93
return anx_dp_aux_transfer(anx6345->map[I2C_IDX_DPTX], msg);
drivers/gpu/drm/bridge/analogix/analogix-anx6345.c
96
static int anx6345_dp_link_training(struct anx6345 *anx6345)