Symbol: lt9611uxc
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
117
static struct lt9611uxc *bridge_to_lt9611uxc(struct drm_bridge *bridge)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
119
return container_of(bridge, struct lt9611uxc, bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
122
static void lt9611uxc_lock(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
124
mutex_lock(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
125
regmap_write(lt9611uxc->regmap, 0x80ee, 0x01);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
128
static void lt9611uxc_unlock(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
130
regmap_write(lt9611uxc->regmap, 0x80ee, 0x00);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
132
mutex_unlock(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
137
struct lt9611uxc *lt9611uxc = dev_id;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
141
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
143
regmap_read(lt9611uxc->regmap, 0xb022, &irq_status);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
144
regmap_read(lt9611uxc->regmap, 0xb023, &hpd_status);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
146
regmap_write(lt9611uxc->regmap, 0xb022, 0);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
149
lt9611uxc->edid_read = !!(hpd_status & BIT(0));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
150
wake_up_all(&lt9611uxc->wq);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
154
lt9611uxc->hdmi_connected = hpd_status & BIT(1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
155
schedule_work(&lt9611uxc->work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
158
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
165
struct lt9611uxc *lt9611uxc = container_of(work, struct lt9611uxc, work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
168
mutex_lock(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
169
connected = lt9611uxc->hdmi_connected;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
170
mutex_unlock(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
172
drm_bridge_hpd_notify(&lt9611uxc->bridge,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
178
static void lt9611uxc_reset(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
180
gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
183
gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 0);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
186
gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
190
static void lt9611uxc_assert_5v(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
192
if (!lt9611uxc->enable_gpio)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
195
gpiod_set_value_cansleep(lt9611uxc->enable_gpio, 1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
199
static int lt9611uxc_regulator_init(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
203
lt9611uxc->supplies[0].supply = "vdd";
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
204
lt9611uxc->supplies[1].supply = "vcc";
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
206
ret = devm_regulator_bulk_get(lt9611uxc->dev, 2, lt9611uxc->supplies);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
210
return regulator_set_load(lt9611uxc->supplies[0].consumer, 200000);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
213
static int lt9611uxc_regulator_enable(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
217
ret = regulator_enable(lt9611uxc->supplies[0].consumer);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
223
ret = regulator_enable(lt9611uxc->supplies[1].consumer);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
225
regulator_disable(lt9611uxc->supplies[0].consumer);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
247
static struct mipi_dsi_device *lt9611uxc_attach_dsi(struct lt9611uxc *lt9611uxc,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
253
struct device *dev = lt9611uxc->dev;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
284
struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
286
return drm_bridge_attach(encoder, lt9611uxc->bridge.next_bridge,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
302
static void lt9611uxc_video_setup(struct lt9611uxc *lt9611uxc,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
319
regmap_write(lt9611uxc->regmap, 0xd00d, (u8)(v_total / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
320
regmap_write(lt9611uxc->regmap, 0xd00e, (u8)(v_total % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
322
regmap_write(lt9611uxc->regmap, 0xd00f, (u8)(vactive / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
323
regmap_write(lt9611uxc->regmap, 0xd010, (u8)(vactive % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
325
regmap_write(lt9611uxc->regmap, 0xd011, (u8)(h_total / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
326
regmap_write(lt9611uxc->regmap, 0xd012, (u8)(h_total % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
328
regmap_write(lt9611uxc->regmap, 0xd013, (u8)(hactive / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
329
regmap_write(lt9611uxc->regmap, 0xd014, (u8)(hactive % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
331
regmap_write(lt9611uxc->regmap, 0xd015, (u8)(vsync_len % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
333
regmap_update_bits(lt9611uxc->regmap, 0xd016, 0xf, (u8)(hsync_len / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
334
regmap_write(lt9611uxc->regmap, 0xd017, (u8)(hsync_len % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
336
regmap_update_bits(lt9611uxc->regmap, 0xd018, 0xf, (u8)(vfront_porch / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
337
regmap_write(lt9611uxc->regmap, 0xd019, (u8)(vfront_porch % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
339
regmap_update_bits(lt9611uxc->regmap, 0xd01a, 0xf, (u8)(hfront_porch / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
340
regmap_write(lt9611uxc->regmap, 0xd01b, (u8)(hfront_porch % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
347
struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
349
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
350
lt9611uxc_video_setup(lt9611uxc, mode);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
351
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
357
struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
362
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
364
if (lt9611uxc->hpd_supported) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
365
ret = regmap_read(lt9611uxc->regmap, 0xb023, &reg_val);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
368
dev_err(lt9611uxc->dev, "failed to read hpd status: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
372
lt9611uxc->hdmi_connected = connected;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
374
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
380
static int lt9611uxc_wait_for_edid(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
382
return wait_event_interruptible_timeout(lt9611uxc->wq, lt9611uxc->edid_read,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
388
struct lt9611uxc *lt9611uxc = data;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
397
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
399
regmap_write(lt9611uxc->regmap, 0xb00b, 0x10);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
401
regmap_write(lt9611uxc->regmap, 0xb00a, block * EDID_BLOCK_SIZE);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
403
ret = regmap_noinc_read(lt9611uxc->regmap, 0xb0b0, buf, len);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
405
dev_err(lt9611uxc->dev, "edid read failed: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
407
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
415
struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
418
ret = lt9611uxc_wait_for_edid(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
420
dev_err(lt9611uxc->dev, "wait for EDID failed: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
423
dev_err(lt9611uxc->dev, "wait for EDID timeout\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
427
return drm_edid_read_custom(connector, lt9611uxc_get_edid_block, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
479
struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
481
lt9611uxc->dsi0_node = of_graph_get_remote_node(dev->of_node, 0, -1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
482
if (!lt9611uxc->dsi0_node) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
483
dev_err(lt9611uxc->dev, "failed to get remote node for primary dsi\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
487
lt9611uxc->dsi1_node = of_graph_get_remote_node(dev->of_node, 1, -1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
489
lt9611uxc->bridge.next_bridge = of_drm_get_bridge_by_endpoint(dev->of_node, 2, -1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
490
if (IS_ERR(lt9611uxc->bridge.next_bridge))
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
491
return PTR_ERR(lt9611uxc->bridge.next_bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
496
static int lt9611uxc_gpio_init(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
498
struct device *dev = lt9611uxc->dev;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
500
lt9611uxc->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
501
if (IS_ERR(lt9611uxc->reset_gpio)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
503
return PTR_ERR(lt9611uxc->reset_gpio);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
506
lt9611uxc->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
507
if (IS_ERR(lt9611uxc->enable_gpio)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
509
return PTR_ERR(lt9611uxc->enable_gpio);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
515
static int lt9611uxc_read_device_rev(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
520
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
522
ret = regmap_read(lt9611uxc->regmap, 0x8100, &rev0);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
523
ret |= regmap_read(lt9611uxc->regmap, 0x8101, &rev1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
524
ret |= regmap_read(lt9611uxc->regmap, 0x8102, &rev2);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
526
dev_err(lt9611uxc->dev, "failed to read revision: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
528
dev_info(lt9611uxc->dev, "LT9611 revision: 0x%02x.%02x.%02x\n", rev0, rev1, rev2);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
530
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
535
static int lt9611uxc_read_version(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
540
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
542
ret = regmap_read(lt9611uxc->regmap, 0xb021, &rev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
544
dev_err(lt9611uxc->dev, "failed to read revision: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
546
dev_info(lt9611uxc->dev, "LT9611 version: 0x%02x\n", rev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
548
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
554
static void lt9611uxc_firmware_write_page(struct lt9611uxc *lt9611uxc, u16 addr, const u8 *buf)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
574
regmap_write(lt9611uxc->regmap, 0x8108, 0xbf);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
576
regmap_write(lt9611uxc->regmap, 0x8108, 0xff);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
578
regmap_multi_reg_write(lt9611uxc->regmap, seq_write_prepare, ARRAY_SIZE(seq_write_prepare));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
579
regmap_noinc_write(lt9611uxc->regmap, 0x8059, buf, LT9611UXC_FW_PAGE_SIZE);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
580
regmap_multi_reg_write(lt9611uxc->regmap, seq_write_addr, ARRAY_SIZE(seq_write_addr));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
584
static void lt9611uxc_firmware_read_page(struct lt9611uxc *lt9611uxc, u16 addr, char *buf)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
597
regmap_multi_reg_write(lt9611uxc->regmap, seq_read_page, ARRAY_SIZE(seq_read_page));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
598
regmap_noinc_read(lt9611uxc->regmap, 0x805f, buf, LT9611UXC_FW_PAGE_SIZE);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
601
static char *lt9611uxc_firmware_read(struct lt9611uxc *lt9611uxc, size_t size)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
615
regmap_multi_reg_write(lt9611uxc->regmap, seq_read_setup, ARRAY_SIZE(seq_read_setup));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
620
lt9611uxc_firmware_read_page(lt9611uxc, offset, &readbuf[offset]);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
625
static int lt9611uxc_firmware_update(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
652
ret = request_firmware(&fw, FW_FILE, lt9611uxc->dev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
656
dev_info(lt9611uxc->dev, "Updating firmware\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
657
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
659
regmap_multi_reg_write(lt9611uxc->regmap, seq_setup, ARRAY_SIZE(seq_setup));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
665
regmap_multi_reg_write(lt9611uxc->regmap, seq_block_erase, ARRAY_SIZE(seq_block_erase));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
667
regmap_multi_reg_write(lt9611uxc->regmap, seq_block_erase, ARRAY_SIZE(seq_block_erase));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
673
lt9611uxc_firmware_write_page(lt9611uxc, offset, fw->data + offset);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
680
lt9611uxc_firmware_write_page(lt9611uxc, offset, buf);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
684
readbuf = lt9611uxc_firmware_read(lt9611uxc, fw->size);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
691
dev_err(lt9611uxc->dev, "Firmware update failed\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
695
dev_info(lt9611uxc->dev, "Firmware updates successfully\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
701
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
702
lt9611uxc_reset(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
710
struct lt9611uxc *lt9611uxc = dev_get_drvdata(dev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
713
ret = lt9611uxc_firmware_update(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
721
struct lt9611uxc *lt9611uxc = dev_get_drvdata(dev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
723
return sysfs_emit(buf, "%02x\n", lt9611uxc->fw_version);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
744
struct lt9611uxc *lt9611uxc;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
754
lt9611uxc = devm_drm_bridge_alloc(dev, struct lt9611uxc, bridge, &lt9611uxc_bridge_funcs);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
755
if (IS_ERR(lt9611uxc))
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
756
return PTR_ERR(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
758
lt9611uxc->dev = dev;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
759
lt9611uxc->client = client;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
760
mutex_init(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
762
lt9611uxc->regmap = devm_regmap_init_i2c(client, &lt9611uxc_regmap_config);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
763
if (IS_ERR(lt9611uxc->regmap)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
764
dev_err(lt9611uxc->dev, "regmap i2c init failed\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
765
return PTR_ERR(lt9611uxc->regmap);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
768
ret = lt9611uxc_parse_dt(dev, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
774
ret = lt9611uxc_gpio_init(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
778
ret = lt9611uxc_regulator_init(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
782
lt9611uxc_assert_5v(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
784
ret = lt9611uxc_regulator_enable(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
788
lt9611uxc_reset(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
790
ret = lt9611uxc_read_device_rev(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
797
ret = lt9611uxc_read_version(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
805
ret = lt9611uxc_firmware_update(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
818
lt9611uxc->hpd_supported = true;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
820
lt9611uxc->fw_version = ret;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
822
init_waitqueue_head(&lt9611uxc->wq);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
823
INIT_WORK(&lt9611uxc->work, lt9611uxc_hpd_work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
827
IRQF_ONESHOT, "lt9611uxc", lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
833
i2c_set_clientdata(client, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
835
lt9611uxc->bridge.of_node = client->dev.of_node;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
836
lt9611uxc->bridge.ops = DRM_BRIDGE_OP_DETECT |
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
839
if (lt9611uxc->hpd_supported)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
840
lt9611uxc->bridge.ops |= DRM_BRIDGE_OP_HPD;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
841
lt9611uxc->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
843
lt9611uxc->bridge.hdmi_audio_dev = dev;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
844
lt9611uxc->bridge.hdmi_audio_max_i2s_playback_channels = 2;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
845
lt9611uxc->bridge.hdmi_audio_dai_port = 2;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
847
drm_bridge_add(&lt9611uxc->bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
850
lt9611uxc->dsi0 = lt9611uxc_attach_dsi(lt9611uxc, lt9611uxc->dsi0_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
851
if (IS_ERR(lt9611uxc->dsi0)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
852
ret = PTR_ERR(lt9611uxc->dsi0);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
857
if (lt9611uxc->dsi1_node) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
858
lt9611uxc->dsi1 = lt9611uxc_attach_dsi(lt9611uxc, lt9611uxc->dsi1_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
859
if (IS_ERR(lt9611uxc->dsi1)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
860
ret = PTR_ERR(lt9611uxc->dsi1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
868
free_irq(client->irq, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
869
cancel_work_sync(&lt9611uxc->work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
870
drm_bridge_remove(&lt9611uxc->bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
873
regulator_bulk_disable(ARRAY_SIZE(lt9611uxc->supplies), lt9611uxc->supplies);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
876
of_node_put(lt9611uxc->dsi1_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
877
of_node_put(lt9611uxc->dsi0_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
884
struct lt9611uxc *lt9611uxc = i2c_get_clientdata(client);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
886
free_irq(client->irq, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
887
cancel_work_sync(&lt9611uxc->work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
888
drm_bridge_remove(&lt9611uxc->bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
890
mutex_destroy(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
892
regulator_bulk_disable(ARRAY_SIZE(lt9611uxc->supplies), lt9611uxc->supplies);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
894
of_node_put(lt9611uxc->dsi1_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
895
of_node_put(lt9611uxc->dsi0_node);