Symbol: lt9611uxc
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
118
static struct lt9611uxc *bridge_to_lt9611uxc(struct drm_bridge *bridge)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
120
return container_of(bridge, struct lt9611uxc, bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
123
static void lt9611uxc_lock(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
125
mutex_lock(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
126
regmap_write(lt9611uxc->regmap, 0x80ee, 0x01);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
129
static void lt9611uxc_unlock(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
131
regmap_write(lt9611uxc->regmap, 0x80ee, 0x00);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
133
mutex_unlock(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
138
struct lt9611uxc *lt9611uxc = dev_id;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
142
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
144
regmap_read(lt9611uxc->regmap, 0xb022, &irq_status);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
145
regmap_read(lt9611uxc->regmap, 0xb023, &hpd_status);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
147
regmap_write(lt9611uxc->regmap, 0xb022, 0);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
150
lt9611uxc->edid_read = !!(hpd_status & BIT(0));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
151
wake_up_all(&lt9611uxc->wq);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
155
lt9611uxc->hdmi_connected = hpd_status & BIT(1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
156
schedule_work(&lt9611uxc->work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
159
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
166
struct lt9611uxc *lt9611uxc = container_of(work, struct lt9611uxc, work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
169
mutex_lock(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
170
connected = lt9611uxc->hdmi_connected;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
171
mutex_unlock(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
173
drm_bridge_hpd_notify(&lt9611uxc->bridge,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
179
static void lt9611uxc_reset(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
181
gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
184
gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 0);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
187
gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
191
static void lt9611uxc_assert_5v(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
193
if (!lt9611uxc->enable_gpio)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
196
gpiod_set_value_cansleep(lt9611uxc->enable_gpio, 1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
200
static int lt9611uxc_regulator_init(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
204
lt9611uxc->supplies[0].supply = "vdd";
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
205
lt9611uxc->supplies[1].supply = "vcc";
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
207
ret = devm_regulator_bulk_get(lt9611uxc->dev, 2, lt9611uxc->supplies);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
211
return regulator_set_load(lt9611uxc->supplies[0].consumer, 200000);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
214
static int lt9611uxc_regulator_enable(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
218
ret = regulator_enable(lt9611uxc->supplies[0].consumer);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
224
ret = regulator_enable(lt9611uxc->supplies[1].consumer);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
226
regulator_disable(lt9611uxc->supplies[0].consumer);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
248
static struct mipi_dsi_device *lt9611uxc_attach_dsi(struct lt9611uxc *lt9611uxc,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
254
struct device *dev = lt9611uxc->dev;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
285
struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
287
return drm_bridge_attach(encoder, lt9611uxc->next_bridge,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
303
static void lt9611uxc_video_setup(struct lt9611uxc *lt9611uxc,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
320
regmap_write(lt9611uxc->regmap, 0xd00d, (u8)(v_total / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
321
regmap_write(lt9611uxc->regmap, 0xd00e, (u8)(v_total % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
323
regmap_write(lt9611uxc->regmap, 0xd00f, (u8)(vactive / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
324
regmap_write(lt9611uxc->regmap, 0xd010, (u8)(vactive % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
326
regmap_write(lt9611uxc->regmap, 0xd011, (u8)(h_total / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
327
regmap_write(lt9611uxc->regmap, 0xd012, (u8)(h_total % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
329
regmap_write(lt9611uxc->regmap, 0xd013, (u8)(hactive / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
330
regmap_write(lt9611uxc->regmap, 0xd014, (u8)(hactive % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
332
regmap_write(lt9611uxc->regmap, 0xd015, (u8)(vsync_len % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
334
regmap_update_bits(lt9611uxc->regmap, 0xd016, 0xf, (u8)(hsync_len / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
335
regmap_write(lt9611uxc->regmap, 0xd017, (u8)(hsync_len % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
337
regmap_update_bits(lt9611uxc->regmap, 0xd018, 0xf, (u8)(vfront_porch / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
338
regmap_write(lt9611uxc->regmap, 0xd019, (u8)(vfront_porch % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
340
regmap_update_bits(lt9611uxc->regmap, 0xd01a, 0xf, (u8)(hfront_porch / 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
341
regmap_write(lt9611uxc->regmap, 0xd01b, (u8)(hfront_porch % 256));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
348
struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
350
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
351
lt9611uxc_video_setup(lt9611uxc, mode);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
352
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
358
struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
363
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
365
if (lt9611uxc->hpd_supported) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
366
ret = regmap_read(lt9611uxc->regmap, 0xb023, &reg_val);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
369
dev_err(lt9611uxc->dev, "failed to read hpd status: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
373
lt9611uxc->hdmi_connected = connected;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
375
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
381
static int lt9611uxc_wait_for_edid(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
383
return wait_event_interruptible_timeout(lt9611uxc->wq, lt9611uxc->edid_read,
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
389
struct lt9611uxc *lt9611uxc = data;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
398
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
400
regmap_write(lt9611uxc->regmap, 0xb00b, 0x10);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
402
regmap_write(lt9611uxc->regmap, 0xb00a, block * EDID_BLOCK_SIZE);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
404
ret = regmap_noinc_read(lt9611uxc->regmap, 0xb0b0, buf, len);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
406
dev_err(lt9611uxc->dev, "edid read failed: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
408
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
416
struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
419
ret = lt9611uxc_wait_for_edid(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
421
dev_err(lt9611uxc->dev, "wait for EDID failed: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
424
dev_err(lt9611uxc->dev, "wait for EDID timeout\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
428
return drm_edid_read_custom(connector, lt9611uxc_get_edid_block, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
480
struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
482
lt9611uxc->dsi0_node = of_graph_get_remote_node(dev->of_node, 0, -1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
483
if (!lt9611uxc->dsi0_node) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
484
dev_err(lt9611uxc->dev, "failed to get remote node for primary dsi\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
488
lt9611uxc->dsi1_node = of_graph_get_remote_node(dev->of_node, 1, -1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
490
return drm_of_find_panel_or_bridge(dev->of_node, 2, -1, NULL, &lt9611uxc->next_bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
493
static int lt9611uxc_gpio_init(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
495
struct device *dev = lt9611uxc->dev;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
497
lt9611uxc->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
498
if (IS_ERR(lt9611uxc->reset_gpio)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
500
return PTR_ERR(lt9611uxc->reset_gpio);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
503
lt9611uxc->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
504
if (IS_ERR(lt9611uxc->enable_gpio)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
506
return PTR_ERR(lt9611uxc->enable_gpio);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
512
static int lt9611uxc_read_device_rev(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
517
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
519
ret = regmap_read(lt9611uxc->regmap, 0x8100, &rev0);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
520
ret |= regmap_read(lt9611uxc->regmap, 0x8101, &rev1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
521
ret |= regmap_read(lt9611uxc->regmap, 0x8102, &rev2);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
523
dev_err(lt9611uxc->dev, "failed to read revision: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
525
dev_info(lt9611uxc->dev, "LT9611 revision: 0x%02x.%02x.%02x\n", rev0, rev1, rev2);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
527
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
532
static int lt9611uxc_read_version(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
537
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
539
ret = regmap_read(lt9611uxc->regmap, 0xb021, &rev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
541
dev_err(lt9611uxc->dev, "failed to read revision: %d\n", ret);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
543
dev_info(lt9611uxc->dev, "LT9611 version: 0x%02x\n", rev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
545
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
551
static void lt9611uxc_firmware_write_page(struct lt9611uxc *lt9611uxc, u16 addr, const u8 *buf)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
571
regmap_write(lt9611uxc->regmap, 0x8108, 0xbf);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
573
regmap_write(lt9611uxc->regmap, 0x8108, 0xff);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
575
regmap_multi_reg_write(lt9611uxc->regmap, seq_write_prepare, ARRAY_SIZE(seq_write_prepare));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
576
regmap_noinc_write(lt9611uxc->regmap, 0x8059, buf, LT9611UXC_FW_PAGE_SIZE);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
577
regmap_multi_reg_write(lt9611uxc->regmap, seq_write_addr, ARRAY_SIZE(seq_write_addr));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
581
static void lt9611uxc_firmware_read_page(struct lt9611uxc *lt9611uxc, u16 addr, char *buf)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
594
regmap_multi_reg_write(lt9611uxc->regmap, seq_read_page, ARRAY_SIZE(seq_read_page));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
595
regmap_noinc_read(lt9611uxc->regmap, 0x805f, buf, LT9611UXC_FW_PAGE_SIZE);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
598
static char *lt9611uxc_firmware_read(struct lt9611uxc *lt9611uxc, size_t size)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
612
regmap_multi_reg_write(lt9611uxc->regmap, seq_read_setup, ARRAY_SIZE(seq_read_setup));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
617
lt9611uxc_firmware_read_page(lt9611uxc, offset, &readbuf[offset]);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
622
static int lt9611uxc_firmware_update(struct lt9611uxc *lt9611uxc)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
649
ret = request_firmware(&fw, FW_FILE, lt9611uxc->dev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
653
dev_info(lt9611uxc->dev, "Updating firmware\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
654
lt9611uxc_lock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
656
regmap_multi_reg_write(lt9611uxc->regmap, seq_setup, ARRAY_SIZE(seq_setup));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
662
regmap_multi_reg_write(lt9611uxc->regmap, seq_block_erase, ARRAY_SIZE(seq_block_erase));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
664
regmap_multi_reg_write(lt9611uxc->regmap, seq_block_erase, ARRAY_SIZE(seq_block_erase));
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
670
lt9611uxc_firmware_write_page(lt9611uxc, offset, fw->data + offset);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
677
lt9611uxc_firmware_write_page(lt9611uxc, offset, buf);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
681
readbuf = lt9611uxc_firmware_read(lt9611uxc, fw->size);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
688
dev_err(lt9611uxc->dev, "Firmware update failed\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
692
dev_info(lt9611uxc->dev, "Firmware updates successfully\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
698
lt9611uxc_unlock(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
699
lt9611uxc_reset(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
707
struct lt9611uxc *lt9611uxc = dev_get_drvdata(dev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
710
ret = lt9611uxc_firmware_update(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
718
struct lt9611uxc *lt9611uxc = dev_get_drvdata(dev);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
720
return sysfs_emit(buf, "%02x\n", lt9611uxc->fw_version);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
741
struct lt9611uxc *lt9611uxc;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
751
lt9611uxc = devm_drm_bridge_alloc(dev, struct lt9611uxc, bridge, &lt9611uxc_bridge_funcs);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
752
if (IS_ERR(lt9611uxc))
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
753
return PTR_ERR(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
755
lt9611uxc->dev = dev;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
756
lt9611uxc->client = client;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
757
mutex_init(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
759
lt9611uxc->regmap = devm_regmap_init_i2c(client, &lt9611uxc_regmap_config);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
760
if (IS_ERR(lt9611uxc->regmap)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
761
dev_err(lt9611uxc->dev, "regmap i2c init failed\n");
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
762
return PTR_ERR(lt9611uxc->regmap);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
765
ret = lt9611uxc_parse_dt(dev, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
771
ret = lt9611uxc_gpio_init(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
775
ret = lt9611uxc_regulator_init(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
779
lt9611uxc_assert_5v(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
781
ret = lt9611uxc_regulator_enable(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
785
lt9611uxc_reset(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
787
ret = lt9611uxc_read_device_rev(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
794
ret = lt9611uxc_read_version(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
802
ret = lt9611uxc_firmware_update(lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
815
lt9611uxc->hpd_supported = true;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
817
lt9611uxc->fw_version = ret;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
819
init_waitqueue_head(&lt9611uxc->wq);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
820
INIT_WORK(&lt9611uxc->work, lt9611uxc_hpd_work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
824
IRQF_ONESHOT, "lt9611uxc", lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
830
i2c_set_clientdata(client, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
832
lt9611uxc->bridge.of_node = client->dev.of_node;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
833
lt9611uxc->bridge.ops = DRM_BRIDGE_OP_DETECT |
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
836
if (lt9611uxc->hpd_supported)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
837
lt9611uxc->bridge.ops |= DRM_BRIDGE_OP_HPD;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
838
lt9611uxc->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
840
lt9611uxc->bridge.hdmi_audio_dev = dev;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
841
lt9611uxc->bridge.hdmi_audio_max_i2s_playback_channels = 2;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
842
lt9611uxc->bridge.hdmi_audio_dai_port = 2;
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
844
drm_bridge_add(&lt9611uxc->bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
847
lt9611uxc->dsi0 = lt9611uxc_attach_dsi(lt9611uxc, lt9611uxc->dsi0_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
848
if (IS_ERR(lt9611uxc->dsi0)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
849
ret = PTR_ERR(lt9611uxc->dsi0);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
854
if (lt9611uxc->dsi1_node) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
855
lt9611uxc->dsi1 = lt9611uxc_attach_dsi(lt9611uxc, lt9611uxc->dsi1_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
856
if (IS_ERR(lt9611uxc->dsi1)) {
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
857
ret = PTR_ERR(lt9611uxc->dsi1);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
865
free_irq(client->irq, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
866
cancel_work_sync(&lt9611uxc->work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
867
drm_bridge_remove(&lt9611uxc->bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
870
regulator_bulk_disable(ARRAY_SIZE(lt9611uxc->supplies), lt9611uxc->supplies);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
873
of_node_put(lt9611uxc->dsi1_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
874
of_node_put(lt9611uxc->dsi0_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
881
struct lt9611uxc *lt9611uxc = i2c_get_clientdata(client);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
883
free_irq(client->irq, lt9611uxc);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
884
cancel_work_sync(&lt9611uxc->work);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
885
drm_bridge_remove(&lt9611uxc->bridge);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
887
mutex_destroy(&lt9611uxc->ocm_lock);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
889
regulator_bulk_disable(ARRAY_SIZE(lt9611uxc->supplies), lt9611uxc->supplies);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
891
of_node_put(lt9611uxc->dsi1_node);
drivers/gpu/drm/bridge/lontium-lt9611uxc.c
892
of_node_put(lt9611uxc->dsi0_node);