drivers/gpu/drm/bridge/lontium-lt9611.c
1008
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
1012
regmap_write(lt9611->regmap, 0x8406, 0x00);
drivers/gpu/drm/bridge/lontium-lt9611.c
1013
regmap_write(lt9611->regmap, 0x8407, 0x00);
drivers/gpu/drm/bridge/lontium-lt9611.c
1048
struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
1050
lt9611->dsi0_node = of_graph_get_remote_node(dev->of_node, 0, -1);
drivers/gpu/drm/bridge/lontium-lt9611.c
1051
lt9611->dsi1_node = of_graph_get_remote_node(dev->of_node, 1, -1);
drivers/gpu/drm/bridge/lontium-lt9611.c
1053
if (!lt9611->dsi0_node && !lt9611->dsi1_node) {
drivers/gpu/drm/bridge/lontium-lt9611.c
1054
dev_err(lt9611->dev, "failed to get remote node for dsi\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
1058
lt9611->ac_mode = of_property_read_bool(dev->of_node, "lt,ac-mode");
drivers/gpu/drm/bridge/lontium-lt9611.c
1060
lt9611->bridge.next_bridge = of_drm_get_bridge_by_endpoint(dev->of_node, 2, -1);
drivers/gpu/drm/bridge/lontium-lt9611.c
1061
if (IS_ERR(lt9611->bridge.next_bridge))
drivers/gpu/drm/bridge/lontium-lt9611.c
1062
return PTR_ERR(lt9611->bridge.next_bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
1067
static int lt9611_gpio_init(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
1069
struct device *dev = lt9611->dev;
drivers/gpu/drm/bridge/lontium-lt9611.c
107
return regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
drivers/gpu/drm/bridge/lontium-lt9611.c
1071
lt9611->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
drivers/gpu/drm/bridge/lontium-lt9611.c
1072
if (IS_ERR(lt9611->reset_gpio)) {
drivers/gpu/drm/bridge/lontium-lt9611.c
1074
return PTR_ERR(lt9611->reset_gpio);
drivers/gpu/drm/bridge/lontium-lt9611.c
1077
lt9611->enable_gpio = devm_gpiod_get_optional(dev, "enable",
drivers/gpu/drm/bridge/lontium-lt9611.c
1079
if (IS_ERR(lt9611->enable_gpio)) {
drivers/gpu/drm/bridge/lontium-lt9611.c
1081
return PTR_ERR(lt9611->enable_gpio);
drivers/gpu/drm/bridge/lontium-lt9611.c
1087
static int lt9611_read_device_rev(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
1092
regmap_write(lt9611->regmap, 0x80ee, 0x01);
drivers/gpu/drm/bridge/lontium-lt9611.c
1093
ret = regmap_read(lt9611->regmap, 0x8002, &rev);
drivers/gpu/drm/bridge/lontium-lt9611.c
1095
dev_err(lt9611->dev, "failed to read revision: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611.c
1097
dev_info(lt9611->dev, "LT9611 revision: 0x%x\n", rev);
drivers/gpu/drm/bridge/lontium-lt9611.c
110
static int lt9611_mipi_input_digital(struct lt9611 *lt9611,
drivers/gpu/drm/bridge/lontium-lt9611.c
1104
struct lt9611 *lt9611;
drivers/gpu/drm/bridge/lontium-lt9611.c
1113
lt9611 = devm_drm_bridge_alloc(dev, struct lt9611, bridge,
drivers/gpu/drm/bridge/lontium-lt9611.c
1115
if (IS_ERR(lt9611))
drivers/gpu/drm/bridge/lontium-lt9611.c
1116
return PTR_ERR(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1118
lt9611->dev = dev;
drivers/gpu/drm/bridge/lontium-lt9611.c
1119
lt9611->client = client;
drivers/gpu/drm/bridge/lontium-lt9611.c
1120
lt9611->sleep = false;
drivers/gpu/drm/bridge/lontium-lt9611.c
1122
lt9611->regmap = devm_regmap_init_i2c(client, <9611_regmap_config);
drivers/gpu/drm/bridge/lontium-lt9611.c
1123
if (IS_ERR(lt9611->regmap)) {
drivers/gpu/drm/bridge/lontium-lt9611.c
1124
dev_err(lt9611->dev, "regmap i2c init failed\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
1125
return PTR_ERR(lt9611->regmap);
drivers/gpu/drm/bridge/lontium-lt9611.c
1128
ret = lt9611_parse_dt(dev, lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1134
ret = lt9611_gpio_init(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1138
ret = lt9611_regulator_init(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1142
lt9611_assert_5v(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1144
ret = lt9611_regulator_enable(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1148
lt9611_reset(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1150
ret = lt9611_read_device_rev(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1158
IRQF_ONESHOT, "lt9611", lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1164
i2c_set_clientdata(client, lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1167
regmap_update_bits(lt9611->regmap, 0x843d, LT9611_INFOFRAME_AUDIO, 0);
drivers/gpu/drm/bridge/lontium-lt9611.c
1169
lt9611->bridge.of_node = client->dev.of_node;
drivers/gpu/drm/bridge/lontium-lt9611.c
1170
lt9611->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID |
drivers/gpu/drm/bridge/lontium-lt9611.c
1174
lt9611->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
drivers/gpu/drm/bridge/lontium-lt9611.c
1175
lt9611->bridge.vendor = "Lontium";
drivers/gpu/drm/bridge/lontium-lt9611.c
1176
lt9611->bridge.product = "LT9611";
drivers/gpu/drm/bridge/lontium-lt9611.c
1177
lt9611->bridge.hdmi_audio_dev = dev;
drivers/gpu/drm/bridge/lontium-lt9611.c
1178
lt9611->bridge.hdmi_audio_max_i2s_playback_channels = 8;
drivers/gpu/drm/bridge/lontium-lt9611.c
1179
lt9611->bridge.hdmi_audio_dai_port = 2;
drivers/gpu/drm/bridge/lontium-lt9611.c
1181
drm_bridge_add(<9611->bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
1184
if (lt9611->dsi0_node) {
drivers/gpu/drm/bridge/lontium-lt9611.c
1185
lt9611->dsi0 = lt9611_attach_dsi(lt9611, lt9611->dsi0_node);
drivers/gpu/drm/bridge/lontium-lt9611.c
1186
if (IS_ERR(lt9611->dsi0)) {
drivers/gpu/drm/bridge/lontium-lt9611.c
1187
ret = PTR_ERR(lt9611->dsi0);
drivers/gpu/drm/bridge/lontium-lt9611.c
1193
if (lt9611->dsi1_node) {
drivers/gpu/drm/bridge/lontium-lt9611.c
1194
lt9611->dsi1 = lt9611_attach_dsi(lt9611, lt9611->dsi1_node);
drivers/gpu/drm/bridge/lontium-lt9611.c
1195
if (IS_ERR(lt9611->dsi1)) {
drivers/gpu/drm/bridge/lontium-lt9611.c
1196
ret = PTR_ERR(lt9611->dsi1);
drivers/gpu/drm/bridge/lontium-lt9611.c
1201
lt9611_enable_hpd_interrupts(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
1206
drm_bridge_remove(<9611->bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
1209
regulator_bulk_disable(ARRAY_SIZE(lt9611->supplies), lt9611->supplies);
drivers/gpu/drm/bridge/lontium-lt9611.c
1212
of_node_put(lt9611->dsi1_node);
drivers/gpu/drm/bridge/lontium-lt9611.c
1213
of_node_put(lt9611->dsi0_node);
drivers/gpu/drm/bridge/lontium-lt9611.c
1220
struct lt9611 *lt9611 = i2c_get_clientdata(client);
drivers/gpu/drm/bridge/lontium-lt9611.c
1223
drm_bridge_remove(<9611->bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
1225
regulator_bulk_disable(ARRAY_SIZE(lt9611->supplies), lt9611->supplies);
drivers/gpu/drm/bridge/lontium-lt9611.c
1227
of_node_put(lt9611->dsi1_node);
drivers/gpu/drm/bridge/lontium-lt9611.c
1228
of_node_put(lt9611->dsi0_node);
drivers/gpu/drm/bridge/lontium-lt9611.c
123
if (lt9611->dsi1_node) {
drivers/gpu/drm/bridge/lontium-lt9611.c
124
if (lt9611->dsi0_node) {
drivers/gpu/drm/bridge/lontium-lt9611.c
138
return regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
drivers/gpu/drm/bridge/lontium-lt9611.c
141
static void lt9611_mipi_video_setup(struct lt9611 *lt9611,
drivers/gpu/drm/bridge/lontium-lt9611.c
160
regmap_write(lt9611->regmap, 0x830d, (u8)(v_total / 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
161
regmap_write(lt9611->regmap, 0x830e, (u8)(v_total % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
163
regmap_write(lt9611->regmap, 0x830f, (u8)(vactive / 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
164
regmap_write(lt9611->regmap, 0x8310, (u8)(vactive % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
166
regmap_write(lt9611->regmap, 0x8311, (u8)(h_total / 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
167
regmap_write(lt9611->regmap, 0x8312, (u8)(h_total % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
169
regmap_write(lt9611->regmap, 0x8313, (u8)(hactive / 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
170
regmap_write(lt9611->regmap, 0x8314, (u8)(hactive % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
172
regmap_write(lt9611->regmap, 0x8315, (u8)(vsync_len % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
173
regmap_write(lt9611->regmap, 0x8316, (u8)(hsync_len % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
175
regmap_write(lt9611->regmap, 0x8317, (u8)(vfront_porch % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
177
regmap_write(lt9611->regmap, 0x8318, (u8)(vsync_porch % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
179
regmap_write(lt9611->regmap, 0x8319, (u8)(hfront_porch % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
181
regmap_write(lt9611->regmap, 0x831a, (u8)(hsync_porch / 256) |
drivers/gpu/drm/bridge/lontium-lt9611.c
183
regmap_write(lt9611->regmap, 0x831b, (u8)(hsync_porch % 256));
drivers/gpu/drm/bridge/lontium-lt9611.c
186
static void lt9611_pcr_setup(struct lt9611 *lt9611, const struct drm_display_mode *mode, unsigned int postdiv)
drivers/gpu/drm/bridge/lontium-lt9611.c
214
regmap_write(lt9611->regmap, 0x831d, pol);
drivers/gpu/drm/bridge/lontium-lt9611.c
216
regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
drivers/gpu/drm/bridge/lontium-lt9611.c
219
if (lt9611->dsi0_node && lt9611->dsi1_node) {
drivers/gpu/drm/bridge/lontium-lt9611.c
225
regmap_write(lt9611->regmap, 0x830b, hact / 256);
drivers/gpu/drm/bridge/lontium-lt9611.c
226
regmap_write(lt9611->regmap, 0x830c, hact % 256);
drivers/gpu/drm/bridge/lontium-lt9611.c
227
regmap_write(lt9611->regmap, 0x8348, hact / 256);
drivers/gpu/drm/bridge/lontium-lt9611.c
228
regmap_write(lt9611->regmap, 0x8349, hact % 256);
drivers/gpu/drm/bridge/lontium-lt9611.c
231
regmap_write(lt9611->regmap, 0x8326, pcr_m);
drivers/gpu/drm/bridge/lontium-lt9611.c
234
regmap_write(lt9611->regmap, 0x8011, 0x5a);
drivers/gpu/drm/bridge/lontium-lt9611.c
235
regmap_write(lt9611->regmap, 0x8011, 0xfa);
drivers/gpu/drm/bridge/lontium-lt9611.c
238
static int lt9611_pll_setup(struct lt9611 *lt9611, const struct drm_display_mode *mode, unsigned int *postdiv)
drivers/gpu/drm/bridge/lontium-lt9611.c
255
regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
drivers/gpu/drm/bridge/lontium-lt9611.c
258
regmap_write(lt9611->regmap, 0x812d, 0x88);
drivers/gpu/drm/bridge/lontium-lt9611.c
261
regmap_write(lt9611->regmap, 0x812d, 0x99);
drivers/gpu/drm/bridge/lontium-lt9611.c
264
regmap_write(lt9611->regmap, 0x812d, 0xaa);
drivers/gpu/drm/bridge/lontium-lt9611.c
274
regmap_write(lt9611->regmap, 0x82e3, pclk >> 17); /* pclk[19:16] */
drivers/gpu/drm/bridge/lontium-lt9611.c
275
regmap_write(lt9611->regmap, 0x82e4, pclk >> 9); /* pclk[15:8] */
drivers/gpu/drm/bridge/lontium-lt9611.c
276
regmap_write(lt9611->regmap, 0x82e5, pclk >> 1); /* pclk[7:0] */
drivers/gpu/drm/bridge/lontium-lt9611.c
278
regmap_write(lt9611->regmap, 0x82de, 0x20);
drivers/gpu/drm/bridge/lontium-lt9611.c
279
regmap_write(lt9611->regmap, 0x82de, 0xe0);
drivers/gpu/drm/bridge/lontium-lt9611.c
281
regmap_write(lt9611->regmap, 0x8016, 0xf1);
drivers/gpu/drm/bridge/lontium-lt9611.c
282
regmap_write(lt9611->regmap, 0x8016, 0xf3);
drivers/gpu/drm/bridge/lontium-lt9611.c
287
static int lt9611_read_video_check(struct lt9611 *lt9611, unsigned int reg)
drivers/gpu/drm/bridge/lontium-lt9611.c
292
ret = regmap_read(lt9611->regmap, reg, &temp);
drivers/gpu/drm/bridge/lontium-lt9611.c
296
ret = regmap_read(lt9611->regmap, reg + 1, &temp2);
drivers/gpu/drm/bridge/lontium-lt9611.c
303
static int lt9611_video_check(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
311
temp = lt9611_read_video_check(lt9611, 0x8282);
drivers/gpu/drm/bridge/lontium-lt9611.c
317
temp = lt9611_read_video_check(lt9611, 0x826c);
drivers/gpu/drm/bridge/lontium-lt9611.c
323
temp = lt9611_read_video_check(lt9611, 0x8286);
drivers/gpu/drm/bridge/lontium-lt9611.c
329
temp = lt9611_read_video_check(lt9611, 0x8382);
drivers/gpu/drm/bridge/lontium-lt9611.c
335
temp = lt9611_read_video_check(lt9611, 0x8386);
drivers/gpu/drm/bridge/lontium-lt9611.c
340
dev_info(lt9611->dev,
drivers/gpu/drm/bridge/lontium-lt9611.c
347
dev_err(lt9611->dev, "read video check error\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
351
static void lt9611_hdmi_tx_digital(struct lt9611 *lt9611, bool is_hdmi)
drivers/gpu/drm/bridge/lontium-lt9611.c
354
regmap_write(lt9611->regmap, 0x82d6, 0x8c);
drivers/gpu/drm/bridge/lontium-lt9611.c
356
regmap_write(lt9611->regmap, 0x82d6, 0x0c);
drivers/gpu/drm/bridge/lontium-lt9611.c
357
regmap_write(lt9611->regmap, 0x82d7, 0x04);
drivers/gpu/drm/bridge/lontium-lt9611.c
360
static void lt9611_hdmi_tx_phy(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
380
if (lt9611->ac_mode)
drivers/gpu/drm/bridge/lontium-lt9611.c
383
regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
drivers/gpu/drm/bridge/lontium-lt9611.c
388
struct lt9611 *lt9611 = dev_id;
drivers/gpu/drm/bridge/lontium-lt9611.c
392
regmap_read(lt9611->regmap, 0x820f, &irq_flag3);
drivers/gpu/drm/bridge/lontium-lt9611.c
393
regmap_read(lt9611->regmap, 0x820c, &irq_flag0);
drivers/gpu/drm/bridge/lontium-lt9611.c
397
dev_info(lt9611->dev, "hdmi cable disconnected\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
399
regmap_write(lt9611->regmap, 0x8207, 0xbf);
drivers/gpu/drm/bridge/lontium-lt9611.c
400
regmap_write(lt9611->regmap, 0x8207, 0x3f);
drivers/gpu/drm/bridge/lontium-lt9611.c
405
dev_info(lt9611->dev, "hdmi cable connected\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
407
regmap_write(lt9611->regmap, 0x8207, 0x7f);
drivers/gpu/drm/bridge/lontium-lt9611.c
408
regmap_write(lt9611->regmap, 0x8207, 0x3f);
drivers/gpu/drm/bridge/lontium-lt9611.c
411
if (irq_flag3 & 0xc0 && lt9611->bridge.dev)
drivers/gpu/drm/bridge/lontium-lt9611.c
412
drm_kms_helper_hotplug_event(lt9611->bridge.dev);
drivers/gpu/drm/bridge/lontium-lt9611.c
416
dev_info(lt9611->dev, "video input changed\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
417
regmap_write(lt9611->regmap, 0x829e, 0xff);
drivers/gpu/drm/bridge/lontium-lt9611.c
418
regmap_write(lt9611->regmap, 0x829e, 0xf7);
drivers/gpu/drm/bridge/lontium-lt9611.c
419
regmap_write(lt9611->regmap, 0x8204, 0xff);
drivers/gpu/drm/bridge/lontium-lt9611.c
420
regmap_write(lt9611->regmap, 0x8204, 0xfe);
drivers/gpu/drm/bridge/lontium-lt9611.c
426
static void lt9611_enable_hpd_interrupts(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
430
regmap_read(lt9611->regmap, 0x8203, &val);
drivers/gpu/drm/bridge/lontium-lt9611.c
433
regmap_write(lt9611->regmap, 0x8203, val);
drivers/gpu/drm/bridge/lontium-lt9611.c
434
regmap_write(lt9611->regmap, 0x8207, 0xff); /* clear */
drivers/gpu/drm/bridge/lontium-lt9611.c
435
regmap_write(lt9611->regmap, 0x8207, 0x3f);
drivers/gpu/drm/bridge/lontium-lt9611.c
438
static void lt9611_sleep_setup(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
452
regmap_multi_reg_write(lt9611->regmap,
drivers/gpu/drm/bridge/lontium-lt9611.c
454
lt9611->sleep = true;
drivers/gpu/drm/bridge/lontium-lt9611.c
457
static int lt9611_power_on(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
485
if (lt9611->power_on)
drivers/gpu/drm/bridge/lontium-lt9611.c
488
ret = regmap_multi_reg_write(lt9611->regmap, seq, ARRAY_SIZE(seq));
drivers/gpu/drm/bridge/lontium-lt9611.c
490
lt9611->power_on = true;
drivers/gpu/drm/bridge/lontium-lt9611.c
495
static int lt9611_power_off(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
499
ret = regmap_write(lt9611->regmap, 0x8130, 0x6a);
drivers/gpu/drm/bridge/lontium-lt9611.c
501
lt9611->power_on = false;
drivers/gpu/drm/bridge/lontium-lt9611.c
506
static void lt9611_reset(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
508
gpiod_set_value_cansleep(lt9611->reset_gpio, 1);
drivers/gpu/drm/bridge/lontium-lt9611.c
511
gpiod_set_value_cansleep(lt9611->reset_gpio, 0);
drivers/gpu/drm/bridge/lontium-lt9611.c
514
gpiod_set_value_cansleep(lt9611->reset_gpio, 1);
drivers/gpu/drm/bridge/lontium-lt9611.c
518
static void lt9611_assert_5v(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
520
if (!lt9611->enable_gpio)
drivers/gpu/drm/bridge/lontium-lt9611.c
523
gpiod_set_value_cansleep(lt9611->enable_gpio, 1);
drivers/gpu/drm/bridge/lontium-lt9611.c
527
static int lt9611_regulator_init(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
531
lt9611->supplies[0].supply = "vdd";
drivers/gpu/drm/bridge/lontium-lt9611.c
532
lt9611->supplies[1].supply = "vcc";
drivers/gpu/drm/bridge/lontium-lt9611.c
534
ret = devm_regulator_bulk_get(lt9611->dev, 2, lt9611->supplies);
drivers/gpu/drm/bridge/lontium-lt9611.c
538
return regulator_set_load(lt9611->supplies[0].consumer, 300000);
drivers/gpu/drm/bridge/lontium-lt9611.c
541
static int lt9611_regulator_enable(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
545
ret = regulator_enable(lt9611->supplies[0].consumer);
drivers/gpu/drm/bridge/lontium-lt9611.c
551
ret = regulator_enable(lt9611->supplies[1].consumer);
drivers/gpu/drm/bridge/lontium-lt9611.c
553
regulator_disable(lt9611->supplies[0].consumer);
drivers/gpu/drm/bridge/lontium-lt9611.c
563
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
567
regmap_read(lt9611->regmap, 0x825e, ®_val);
drivers/gpu/drm/bridge/lontium-lt9611.c
570
lt9611->status = connected ? connector_status_connected :
drivers/gpu/drm/bridge/lontium-lt9611.c
573
return lt9611->status;
drivers/gpu/drm/bridge/lontium-lt9611.c
576
static int lt9611_read_edid(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
583
memset(lt9611->edid_buf, 0, sizeof(lt9611->edid_buf));
drivers/gpu/drm/bridge/lontium-lt9611.c
585
regmap_write(lt9611->regmap, 0x8503, 0xc9);
drivers/gpu/drm/bridge/lontium-lt9611.c
588
regmap_write(lt9611->regmap, 0x8504, 0xa0);
drivers/gpu/drm/bridge/lontium-lt9611.c
590
regmap_write(lt9611->regmap, 0x8505, 0x00);
drivers/gpu/drm/bridge/lontium-lt9611.c
593
regmap_write(lt9611->regmap, 0x8506, EDID_LEN);
drivers/gpu/drm/bridge/lontium-lt9611.c
594
regmap_write(lt9611->regmap, 0x8514, 0x7f);
drivers/gpu/drm/bridge/lontium-lt9611.c
598
regmap_write(lt9611->regmap, 0x8505, i * EDID_LEN);
drivers/gpu/drm/bridge/lontium-lt9611.c
599
regmap_write(lt9611->regmap, 0x8507, 0x36);
drivers/gpu/drm/bridge/lontium-lt9611.c
600
regmap_write(lt9611->regmap, 0x8507, 0x31);
drivers/gpu/drm/bridge/lontium-lt9611.c
601
regmap_write(lt9611->regmap, 0x8507, 0x37);
drivers/gpu/drm/bridge/lontium-lt9611.c
604
regmap_read(lt9611->regmap, 0x8540, &temp);
drivers/gpu/drm/bridge/lontium-lt9611.c
608
regmap_read(lt9611->regmap, 0x8583, &temp);
drivers/gpu/drm/bridge/lontium-lt9611.c
609
lt9611->edid_buf[i * EDID_LEN + j] = temp;
drivers/gpu/drm/bridge/lontium-lt9611.c
613
dev_err(lt9611->dev, "read edid failed: no ack\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
618
dev_err(lt9611->dev, "read edid failed: access not done\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
625
regmap_write(lt9611->regmap, 0x8507, 0x1f);
drivers/gpu/drm/bridge/lontium-lt9611.c
632
struct lt9611 *lt9611 = data;
drivers/gpu/drm/bridge/lontium-lt9611.c
644
ret = lt9611_read_edid(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
646
dev_err(lt9611->dev, "edid read failed\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
652
memcpy(buf, lt9611->edid_buf + (block * 128), len);
drivers/gpu/drm/bridge/lontium-lt9611.c
661
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
682
lt9611_mipi_input_digital(lt9611, mode);
drivers/gpu/drm/bridge/lontium-lt9611.c
683
lt9611_pll_setup(lt9611, mode, &postdiv);
drivers/gpu/drm/bridge/lontium-lt9611.c
684
lt9611_mipi_video_setup(lt9611, mode);
drivers/gpu/drm/bridge/lontium-lt9611.c
685
lt9611_pcr_setup(lt9611, mode, postdiv);
drivers/gpu/drm/bridge/lontium-lt9611.c
687
if (lt9611_power_on(lt9611)) {
drivers/gpu/drm/bridge/lontium-lt9611.c
688
dev_err(lt9611->dev, "power on failed\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
692
lt9611_mipi_input_analog(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
694
lt9611_hdmi_tx_digital(lt9611, connector->display_info.is_hdmi);
drivers/gpu/drm/bridge/lontium-lt9611.c
695
lt9611_hdmi_tx_phy(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
699
lt9611_video_check(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
702
regmap_write(lt9611->regmap, 0x8130, 0xea);
drivers/gpu/drm/bridge/lontium-lt9611.c
708
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
712
ret = regmap_write(lt9611->regmap, 0x8130, 0x6a);
drivers/gpu/drm/bridge/lontium-lt9611.c
714
dev_err(lt9611->dev, "video on failed\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
718
if (lt9611_power_off(lt9611)) {
drivers/gpu/drm/bridge/lontium-lt9611.c
719
dev_err(lt9611->dev, "power on failed\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
724
static struct mipi_dsi_device *lt9611_attach_dsi(struct lt9611 *lt9611,
drivers/gpu/drm/bridge/lontium-lt9611.c
727
const struct mipi_dsi_device_info info = { "lt9611", 0, lt9611->dev->of_node};
drivers/gpu/drm/bridge/lontium-lt9611.c
730
struct device *dev = lt9611->dev;
drivers/gpu/drm/bridge/lontium-lt9611.c
735
return ERR_PTR(dev_err_probe(lt9611->dev, -EPROBE_DEFER, "failed to find dsi host\n"));
drivers/gpu/drm/bridge/lontium-lt9611.c
739
dev_err(lt9611->dev, "failed to create dsi device\n");
drivers/gpu/drm/bridge/lontium-lt9611.c
761
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
763
return drm_bridge_attach(encoder, lt9611->bridge.next_bridge,
drivers/gpu/drm/bridge/lontium-lt9611.c
771
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
777
if (mode->hdisplay > 2000 && !(lt9611->dsi0_node && lt9611->dsi1_node))
drivers/gpu/drm/bridge/lontium-lt9611.c
786
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
794
if (!lt9611->sleep)
drivers/gpu/drm/bridge/lontium-lt9611.c
797
regmap_multi_reg_write(lt9611->regmap,
drivers/gpu/drm/bridge/lontium-lt9611.c
800
lt9611->sleep = false;
drivers/gpu/drm/bridge/lontium-lt9611.c
806
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
808
lt9611_sleep_setup(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
814
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
816
lt9611_power_on(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
817
return drm_edid_read_custom(connector, lt9611_get_edid_block, lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
822
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
824
lt9611_enable_hpd_interrupts(lt9611);
drivers/gpu/drm/bridge/lontium-lt9611.c
865
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
867
regmap_update_bits(lt9611->regmap, 0x843d, LT9611_INFOFRAME_AUDIO, 0);
drivers/gpu/drm/bridge/lontium-lt9611.c
874
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
876
regmap_update_bits(lt9611->regmap, 0x843d, LT9611_INFOFRAME_AVI, 0);
drivers/gpu/drm/bridge/lontium-lt9611.c
88
static struct lt9611 *bridge_to_lt9611(struct drm_bridge *bridge)
drivers/gpu/drm/bridge/lontium-lt9611.c
883
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
885
regmap_update_bits(lt9611->regmap, 0x843d, LT9611_INFOFRAME_SPD, 0);
drivers/gpu/drm/bridge/lontium-lt9611.c
892
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
894
regmap_update_bits(lt9611->regmap, 0x843d, LT9611_INFOFRAME_HDMI, 0);
drivers/gpu/drm/bridge/lontium-lt9611.c
90
return container_of(bridge, struct lt9611, bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
902
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
906
regmap_write(lt9611->regmap, 0x84b2 + i, buffer[i]);
drivers/gpu/drm/bridge/lontium-lt9611.c
908
regmap_update_bits(lt9611->regmap, 0x843d, LT9611_INFOFRAME_AUDIO, LT9611_INFOFRAME_AUDIO);
drivers/gpu/drm/bridge/lontium-lt9611.c
916
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
920
regmap_write(lt9611->regmap, 0x8440 + i, buffer[i]);
drivers/gpu/drm/bridge/lontium-lt9611.c
922
regmap_update_bits(lt9611->regmap, 0x843d, LT9611_INFOFRAME_AVI, LT9611_INFOFRAME_AVI);
drivers/gpu/drm/bridge/lontium-lt9611.c
93
static int lt9611_mipi_input_analog(struct lt9611 *lt9611)
drivers/gpu/drm/bridge/lontium-lt9611.c
930
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
934
regmap_write(lt9611->regmap, 0x8493 + i, buffer[i]);
drivers/gpu/drm/bridge/lontium-lt9611.c
936
regmap_update_bits(lt9611->regmap, 0x843d, LT9611_INFOFRAME_SPD, LT9611_INFOFRAME_SPD);
drivers/gpu/drm/bridge/lontium-lt9611.c
944
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
948
regmap_write(lt9611->regmap, 0x8474 + i, buffer[i]);
drivers/gpu/drm/bridge/lontium-lt9611.c
950
regmap_update_bits(lt9611->regmap, 0x843d, LT9611_INFOFRAME_HDMI, LT9611_INFOFRAME_HDMI);
drivers/gpu/drm/bridge/lontium-lt9611.c
970
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
972
regmap_write(lt9611->regmap, 0x82d6, 0x8c);
drivers/gpu/drm/bridge/lontium-lt9611.c
973
regmap_write(lt9611->regmap, 0x82d7, 0x04);
drivers/gpu/drm/bridge/lontium-lt9611.c
975
regmap_write(lt9611->regmap, 0x8406, 0x08);
drivers/gpu/drm/bridge/lontium-lt9611.c
976
regmap_write(lt9611->regmap, 0x8407, 0x10);
drivers/gpu/drm/bridge/lontium-lt9611.c
978
regmap_write(lt9611->regmap, 0x8434, 0xd5);
drivers/gpu/drm/bridge/lontium-lt9611.c
988
struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
drivers/gpu/drm/bridge/lontium-lt9611.c
991
regmap_write(lt9611->regmap, 0x840f, 0x2b);
drivers/gpu/drm/bridge/lontium-lt9611.c
993
regmap_write(lt9611->regmap, 0x840f, 0xab);
drivers/gpu/drm/bridge/lontium-lt9611.c
997
regmap_write(lt9611->regmap, 0x8435, 0x00);
drivers/gpu/drm/bridge/lontium-lt9611.c
998
regmap_write(lt9611->regmap, 0x8436, 0x18);
drivers/gpu/drm/bridge/lontium-lt9611.c
999
regmap_write(lt9611->regmap, 0x8437, 0x00);