Lines Matching full:lt9611uxc
33 struct lt9611uxc { struct
117 static struct lt9611uxc *bridge_to_lt9611uxc(struct drm_bridge *bridge) in bridge_to_lt9611uxc()
119 return container_of(bridge, struct lt9611uxc, bridge); in bridge_to_lt9611uxc()
122 static struct lt9611uxc *connector_to_lt9611uxc(struct drm_connector *connector) in connector_to_lt9611uxc()
124 return container_of(connector, struct lt9611uxc, connector); in connector_to_lt9611uxc()
127 static void lt9611uxc_lock(struct lt9611uxc *lt9611uxc) in lt9611uxc_lock() argument
129 mutex_lock(<9611uxc->ocm_lock); in lt9611uxc_lock()
130 regmap_write(lt9611uxc->regmap, 0x80ee, 0x01); in lt9611uxc_lock()
133 static void lt9611uxc_unlock(struct lt9611uxc *lt9611uxc) in lt9611uxc_unlock() argument
135 regmap_write(lt9611uxc->regmap, 0x80ee, 0x00); in lt9611uxc_unlock()
137 mutex_unlock(<9611uxc->ocm_lock); in lt9611uxc_unlock()
142 struct lt9611uxc *lt9611uxc = dev_id; in lt9611uxc_irq_thread_handler() local
146 lt9611uxc_lock(lt9611uxc); in lt9611uxc_irq_thread_handler()
148 regmap_read(lt9611uxc->regmap, 0xb022, &irq_status); in lt9611uxc_irq_thread_handler()
149 regmap_read(lt9611uxc->regmap, 0xb023, &hpd_status); in lt9611uxc_irq_thread_handler()
151 regmap_write(lt9611uxc->regmap, 0xb022, 0); in lt9611uxc_irq_thread_handler()
154 lt9611uxc->edid_read = !!(hpd_status & BIT(0)); in lt9611uxc_irq_thread_handler()
155 wake_up_all(<9611uxc->wq); in lt9611uxc_irq_thread_handler()
159 lt9611uxc->hdmi_connected = hpd_status & BIT(1); in lt9611uxc_irq_thread_handler()
160 schedule_work(<9611uxc->work); in lt9611uxc_irq_thread_handler()
163 lt9611uxc_unlock(lt9611uxc); in lt9611uxc_irq_thread_handler()
170 struct lt9611uxc *lt9611uxc = container_of(work, struct lt9611uxc, work); in lt9611uxc_hpd_work() local
173 if (lt9611uxc->connector.dev) { in lt9611uxc_hpd_work()
174 if (lt9611uxc->connector.dev->mode_config.funcs) in lt9611uxc_hpd_work()
175 drm_kms_helper_hotplug_event(lt9611uxc->connector.dev); in lt9611uxc_hpd_work()
178 mutex_lock(<9611uxc->ocm_lock); in lt9611uxc_hpd_work()
179 connected = lt9611uxc->hdmi_connected; in lt9611uxc_hpd_work()
180 mutex_unlock(<9611uxc->ocm_lock); in lt9611uxc_hpd_work()
182 drm_bridge_hpd_notify(<9611uxc->bridge, in lt9611uxc_hpd_work()
189 static void lt9611uxc_reset(struct lt9611uxc *lt9611uxc) in lt9611uxc_reset() argument
191 gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 1); in lt9611uxc_reset()
194 gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 0); in lt9611uxc_reset()
197 gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 1); in lt9611uxc_reset()
201 static void lt9611uxc_assert_5v(struct lt9611uxc *lt9611uxc) in lt9611uxc_assert_5v() argument
203 if (!lt9611uxc->enable_gpio) in lt9611uxc_assert_5v()
206 gpiod_set_value_cansleep(lt9611uxc->enable_gpio, 1); in lt9611uxc_assert_5v()
210 static int lt9611uxc_regulator_init(struct lt9611uxc *lt9611uxc) in lt9611uxc_regulator_init() argument
214 lt9611uxc->supplies[0].supply = "vdd"; in lt9611uxc_regulator_init()
215 lt9611uxc->supplies[1].supply = "vcc"; in lt9611uxc_regulator_init()
217 ret = devm_regulator_bulk_get(lt9611uxc->dev, 2, lt9611uxc->supplies); in lt9611uxc_regulator_init()
221 return regulator_set_load(lt9611uxc->supplies[0].consumer, 200000); in lt9611uxc_regulator_init()
224 static int lt9611uxc_regulator_enable(struct lt9611uxc *lt9611uxc) in lt9611uxc_regulator_enable() argument
228 ret = regulator_enable(lt9611uxc->supplies[0].consumer); in lt9611uxc_regulator_enable()
234 ret = regulator_enable(lt9611uxc->supplies[1].consumer); in lt9611uxc_regulator_enable()
236 regulator_disable(lt9611uxc->supplies[0].consumer); in lt9611uxc_regulator_enable()
258 static struct mipi_dsi_device *lt9611uxc_attach_dsi(struct lt9611uxc *lt9611uxc, in lt9611uxc_attach_dsi() argument
261 const struct mipi_dsi_device_info info = { "lt9611uxc", 0, NULL }; in lt9611uxc_attach_dsi()
264 struct device *dev = lt9611uxc->dev; in lt9611uxc_attach_dsi()
293 struct lt9611uxc *lt9611uxc = connector_to_lt9611uxc(connector); in lt9611uxc_connector_get_modes() local
297 edid = lt9611uxc->bridge.funcs->get_edid(<9611uxc->bridge, connector); in lt9611uxc_connector_get_modes()
308 struct lt9611uxc *lt9611uxc = connector_to_lt9611uxc(connector); in lt9611uxc_connector_detect() local
310 return lt9611uxc->bridge.funcs->detect(<9611uxc->bridge); in lt9611uxc_connector_detect()
335 static int lt9611uxc_connector_init(struct drm_bridge *bridge, struct lt9611uxc *lt9611uxc) in lt9611uxc_connector_init() argument
344 lt9611uxc->connector.polled = DRM_CONNECTOR_POLL_HPD; in lt9611uxc_connector_init()
346 drm_connector_helper_add(<9611uxc->connector, in lt9611uxc_connector_init()
348 ret = drm_connector_init(bridge->dev, <9611uxc->connector, in lt9611uxc_connector_init()
356 return drm_connector_attach_encoder(<9611uxc->connector, bridge->encoder); in lt9611uxc_connector_init()
362 struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge); in lt9611uxc_bridge_attach() local
366 ret = lt9611uxc_connector_init(bridge, lt9611uxc); in lt9611uxc_bridge_attach()
386 static void lt9611uxc_video_setup(struct lt9611uxc *lt9611uxc, in lt9611uxc_video_setup() argument
403 regmap_write(lt9611uxc->regmap, 0xd00d, (u8)(v_total / 256)); in lt9611uxc_video_setup()
404 regmap_write(lt9611uxc->regmap, 0xd00e, (u8)(v_total % 256)); in lt9611uxc_video_setup()
406 regmap_write(lt9611uxc->regmap, 0xd00f, (u8)(vactive / 256)); in lt9611uxc_video_setup()
407 regmap_write(lt9611uxc->regmap, 0xd010, (u8)(vactive % 256)); in lt9611uxc_video_setup()
409 regmap_write(lt9611uxc->regmap, 0xd011, (u8)(h_total / 256)); in lt9611uxc_video_setup()
410 regmap_write(lt9611uxc->regmap, 0xd012, (u8)(h_total % 256)); in lt9611uxc_video_setup()
412 regmap_write(lt9611uxc->regmap, 0xd013, (u8)(hactive / 256)); in lt9611uxc_video_setup()
413 regmap_write(lt9611uxc->regmap, 0xd014, (u8)(hactive % 256)); in lt9611uxc_video_setup()
415 regmap_write(lt9611uxc->regmap, 0xd015, (u8)(vsync_len % 256)); in lt9611uxc_video_setup()
417 regmap_update_bits(lt9611uxc->regmap, 0xd016, 0xf, (u8)(hsync_len / 256)); in lt9611uxc_video_setup()
418 regmap_write(lt9611uxc->regmap, 0xd017, (u8)(hsync_len % 256)); in lt9611uxc_video_setup()
420 regmap_update_bits(lt9611uxc->regmap, 0xd018, 0xf, (u8)(vfront_porch / 256)); in lt9611uxc_video_setup()
421 regmap_write(lt9611uxc->regmap, 0xd019, (u8)(vfront_porch % 256)); in lt9611uxc_video_setup()
423 regmap_update_bits(lt9611uxc->regmap, 0xd01a, 0xf, (u8)(hfront_porch / 256)); in lt9611uxc_video_setup()
424 regmap_write(lt9611uxc->regmap, 0xd01b, (u8)(hfront_porch % 256)); in lt9611uxc_video_setup()
431 struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge); in lt9611uxc_bridge_mode_set() local
433 lt9611uxc_lock(lt9611uxc); in lt9611uxc_bridge_mode_set()
434 lt9611uxc_video_setup(lt9611uxc, mode); in lt9611uxc_bridge_mode_set()
435 lt9611uxc_unlock(lt9611uxc); in lt9611uxc_bridge_mode_set()
440 struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge); in lt9611uxc_bridge_detect() local
445 lt9611uxc_lock(lt9611uxc); in lt9611uxc_bridge_detect()
447 if (lt9611uxc->hpd_supported) { in lt9611uxc_bridge_detect()
448 ret = regmap_read(lt9611uxc->regmap, 0xb023, ®_val); in lt9611uxc_bridge_detect()
451 dev_err(lt9611uxc->dev, "failed to read hpd status: %d\n", ret); in lt9611uxc_bridge_detect()
455 lt9611uxc->hdmi_connected = connected; in lt9611uxc_bridge_detect()
457 lt9611uxc_unlock(lt9611uxc); in lt9611uxc_bridge_detect()
463 static int lt9611uxc_wait_for_edid(struct lt9611uxc *lt9611uxc) in lt9611uxc_wait_for_edid() argument
465 return wait_event_interruptible_timeout(lt9611uxc->wq, lt9611uxc->edid_read, in lt9611uxc_wait_for_edid()
471 struct lt9611uxc *lt9611uxc = data; in lt9611uxc_get_edid_block() local
480 lt9611uxc_lock(lt9611uxc); in lt9611uxc_get_edid_block()
482 regmap_write(lt9611uxc->regmap, 0xb00b, 0x10); in lt9611uxc_get_edid_block()
484 regmap_write(lt9611uxc->regmap, 0xb00a, block * EDID_BLOCK_SIZE); in lt9611uxc_get_edid_block()
486 ret = regmap_noinc_read(lt9611uxc->regmap, 0xb0b0, buf, len); in lt9611uxc_get_edid_block()
488 dev_err(lt9611uxc->dev, "edid read failed: %d\n", ret); in lt9611uxc_get_edid_block()
490 lt9611uxc_unlock(lt9611uxc); in lt9611uxc_get_edid_block()
498 struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge); in lt9611uxc_bridge_get_edid() local
501 ret = lt9611uxc_wait_for_edid(lt9611uxc); in lt9611uxc_bridge_get_edid()
503 dev_err(lt9611uxc->dev, "wait for EDID failed: %d\n", ret); in lt9611uxc_bridge_get_edid()
506 dev_err(lt9611uxc->dev, "wait for EDID timeout\n"); in lt9611uxc_bridge_get_edid()
510 return drm_do_get_edid(connector, lt9611uxc_get_edid_block, lt9611uxc); in lt9611uxc_bridge_get_edid()
522 struct lt9611uxc *lt9611uxc) in lt9611uxc_parse_dt() argument
524 lt9611uxc->dsi0_node = of_graph_get_remote_node(dev->of_node, 0, -1); in lt9611uxc_parse_dt()
525 if (!lt9611uxc->dsi0_node) { in lt9611uxc_parse_dt()
526 dev_err(lt9611uxc->dev, "failed to get remote node for primary dsi\n"); in lt9611uxc_parse_dt()
530 lt9611uxc->dsi1_node = of_graph_get_remote_node(dev->of_node, 1, -1); in lt9611uxc_parse_dt()
535 static int lt9611uxc_gpio_init(struct lt9611uxc *lt9611uxc) in lt9611uxc_gpio_init() argument
537 struct device *dev = lt9611uxc->dev; in lt9611uxc_gpio_init()
539 lt9611uxc->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); in lt9611uxc_gpio_init()
540 if (IS_ERR(lt9611uxc->reset_gpio)) { in lt9611uxc_gpio_init()
542 return PTR_ERR(lt9611uxc->reset_gpio); in lt9611uxc_gpio_init()
545 lt9611uxc->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW); in lt9611uxc_gpio_init()
546 if (IS_ERR(lt9611uxc->enable_gpio)) { in lt9611uxc_gpio_init()
548 return PTR_ERR(lt9611uxc->enable_gpio); in lt9611uxc_gpio_init()
554 static int lt9611uxc_read_device_rev(struct lt9611uxc *lt9611uxc) in lt9611uxc_read_device_rev() argument
559 lt9611uxc_lock(lt9611uxc); in lt9611uxc_read_device_rev()
561 ret = regmap_read(lt9611uxc->regmap, 0x8100, &rev0); in lt9611uxc_read_device_rev()
562 ret |= regmap_read(lt9611uxc->regmap, 0x8101, &rev1); in lt9611uxc_read_device_rev()
563 ret |= regmap_read(lt9611uxc->regmap, 0x8102, &rev2); in lt9611uxc_read_device_rev()
565 dev_err(lt9611uxc->dev, "failed to read revision: %d\n", ret); in lt9611uxc_read_device_rev()
567 dev_info(lt9611uxc->dev, "LT9611 revision: 0x%02x.%02x.%02x\n", rev0, rev1, rev2); in lt9611uxc_read_device_rev()
569 lt9611uxc_unlock(lt9611uxc); in lt9611uxc_read_device_rev()
574 static int lt9611uxc_read_version(struct lt9611uxc *lt9611uxc) in lt9611uxc_read_version() argument
579 lt9611uxc_lock(lt9611uxc); in lt9611uxc_read_version()
581 ret = regmap_read(lt9611uxc->regmap, 0xb021, &rev); in lt9611uxc_read_version()
583 dev_err(lt9611uxc->dev, "failed to read revision: %d\n", ret); in lt9611uxc_read_version()
585 dev_info(lt9611uxc->dev, "LT9611 version: 0x%02x\n", rev); in lt9611uxc_read_version()
587 lt9611uxc_unlock(lt9611uxc); in lt9611uxc_read_version()
597 * LT9611UXC will automatically detect rate and sample size, so no need in lt9611uxc_hdmi_hw_params()
633 static int lt9611uxc_audio_init(struct device *dev, struct lt9611uxc *lt9611uxc) in lt9611uxc_audio_init() argument
639 .data = lt9611uxc, in lt9611uxc_audio_init()
642 lt9611uxc->audio_pdev = in lt9611uxc_audio_init()
647 return PTR_ERR_OR_ZERO(lt9611uxc->audio_pdev); in lt9611uxc_audio_init()
650 static void lt9611uxc_audio_exit(struct lt9611uxc *lt9611uxc) in lt9611uxc_audio_exit() argument
652 if (lt9611uxc->audio_pdev) { in lt9611uxc_audio_exit()
653 platform_device_unregister(lt9611uxc->audio_pdev); in lt9611uxc_audio_exit()
654 lt9611uxc->audio_pdev = NULL; in lt9611uxc_audio_exit()
659 static void lt9611uxc_firmware_write_page(struct lt9611uxc *lt9611uxc, u16 addr, const u8 *buf) in lt9611uxc_firmware_write_page() argument
679 regmap_write(lt9611uxc->regmap, 0x8108, 0xbf); in lt9611uxc_firmware_write_page()
681 regmap_write(lt9611uxc->regmap, 0x8108, 0xff); in lt9611uxc_firmware_write_page()
683 regmap_multi_reg_write(lt9611uxc->regmap, seq_write_prepare, ARRAY_SIZE(seq_write_prepare)); in lt9611uxc_firmware_write_page()
684 regmap_noinc_write(lt9611uxc->regmap, 0x8059, buf, LT9611UXC_FW_PAGE_SIZE); in lt9611uxc_firmware_write_page()
685 regmap_multi_reg_write(lt9611uxc->regmap, seq_write_addr, ARRAY_SIZE(seq_write_addr)); in lt9611uxc_firmware_write_page()
689 static void lt9611uxc_firmware_read_page(struct lt9611uxc *lt9611uxc, u16 addr, char *buf) in lt9611uxc_firmware_read_page() argument
702 regmap_multi_reg_write(lt9611uxc->regmap, seq_read_page, ARRAY_SIZE(seq_read_page)); in lt9611uxc_firmware_read_page()
703 regmap_noinc_read(lt9611uxc->regmap, 0x805f, buf, LT9611UXC_FW_PAGE_SIZE); in lt9611uxc_firmware_read_page()
706 static char *lt9611uxc_firmware_read(struct lt9611uxc *lt9611uxc, size_t size) in lt9611uxc_firmware_read() argument
720 regmap_multi_reg_write(lt9611uxc->regmap, seq_read_setup, ARRAY_SIZE(seq_read_setup)); in lt9611uxc_firmware_read()
725 lt9611uxc_firmware_read_page(lt9611uxc, offset, &readbuf[offset]); in lt9611uxc_firmware_read()
730 static int lt9611uxc_firmware_update(struct lt9611uxc *lt9611uxc) in lt9611uxc_firmware_update() argument
757 ret = request_firmware(&fw, FW_FILE, lt9611uxc->dev); in lt9611uxc_firmware_update()
761 dev_info(lt9611uxc->dev, "Updating firmware\n"); in lt9611uxc_firmware_update()
762 lt9611uxc_lock(lt9611uxc); in lt9611uxc_firmware_update()
764 regmap_multi_reg_write(lt9611uxc->regmap, seq_setup, ARRAY_SIZE(seq_setup)); in lt9611uxc_firmware_update()
770 regmap_multi_reg_write(lt9611uxc->regmap, seq_block_erase, ARRAY_SIZE(seq_block_erase)); in lt9611uxc_firmware_update()
772 regmap_multi_reg_write(lt9611uxc->regmap, seq_block_erase, ARRAY_SIZE(seq_block_erase)); in lt9611uxc_firmware_update()
778 lt9611uxc_firmware_write_page(lt9611uxc, offset, fw->data + offset); in lt9611uxc_firmware_update()
785 lt9611uxc_firmware_write_page(lt9611uxc, offset, buf); in lt9611uxc_firmware_update()
789 readbuf = lt9611uxc_firmware_read(lt9611uxc, fw->size); in lt9611uxc_firmware_update()
796 dev_err(lt9611uxc->dev, "Firmware update failed\n"); in lt9611uxc_firmware_update()
800 dev_info(lt9611uxc->dev, "Firmware updates successfully\n"); in lt9611uxc_firmware_update()
806 lt9611uxc_unlock(lt9611uxc); in lt9611uxc_firmware_update()
807 lt9611uxc_reset(lt9611uxc); in lt9611uxc_firmware_update()
815 struct lt9611uxc *lt9611uxc = dev_get_drvdata(dev); in lt9611uxc_firmware_store() local
818 ret = lt9611uxc_firmware_update(lt9611uxc); in lt9611uxc_firmware_store()
826 struct lt9611uxc *lt9611uxc = dev_get_drvdata(dev); in lt9611uxc_firmware_show() local
828 return sysfs_emit(buf, "%02x\n", lt9611uxc->fw_version); in lt9611uxc_firmware_show()
849 struct lt9611uxc *lt9611uxc; in lt9611uxc_probe() local
859 lt9611uxc = devm_kzalloc(dev, sizeof(*lt9611uxc), GFP_KERNEL); in lt9611uxc_probe()
860 if (!lt9611uxc) in lt9611uxc_probe()
863 lt9611uxc->dev = dev; in lt9611uxc_probe()
864 lt9611uxc->client = client; in lt9611uxc_probe()
865 mutex_init(<9611uxc->ocm_lock); in lt9611uxc_probe()
867 lt9611uxc->regmap = devm_regmap_init_i2c(client, <9611uxc_regmap_config); in lt9611uxc_probe()
868 if (IS_ERR(lt9611uxc->regmap)) { in lt9611uxc_probe()
869 dev_err(lt9611uxc->dev, "regmap i2c init failed\n"); in lt9611uxc_probe()
870 return PTR_ERR(lt9611uxc->regmap); in lt9611uxc_probe()
873 ret = lt9611uxc_parse_dt(dev, lt9611uxc); in lt9611uxc_probe()
879 ret = lt9611uxc_gpio_init(lt9611uxc); in lt9611uxc_probe()
883 ret = lt9611uxc_regulator_init(lt9611uxc); in lt9611uxc_probe()
887 lt9611uxc_assert_5v(lt9611uxc); in lt9611uxc_probe()
889 ret = lt9611uxc_regulator_enable(lt9611uxc); in lt9611uxc_probe()
893 lt9611uxc_reset(lt9611uxc); in lt9611uxc_probe()
895 ret = lt9611uxc_read_device_rev(lt9611uxc); in lt9611uxc_probe()
902 ret = lt9611uxc_read_version(lt9611uxc); in lt9611uxc_probe()
910 ret = lt9611uxc_firmware_update(lt9611uxc); in lt9611uxc_probe()
923 lt9611uxc->hpd_supported = true; in lt9611uxc_probe()
925 lt9611uxc->fw_version = ret; in lt9611uxc_probe()
927 init_waitqueue_head(<9611uxc->wq); in lt9611uxc_probe()
928 INIT_WORK(<9611uxc->work, lt9611uxc_hpd_work); in lt9611uxc_probe()
932 IRQF_ONESHOT, "lt9611uxc", lt9611uxc); in lt9611uxc_probe()
938 i2c_set_clientdata(client, lt9611uxc); in lt9611uxc_probe()
940 lt9611uxc->bridge.funcs = <9611uxc_bridge_funcs; in lt9611uxc_probe()
941 lt9611uxc->bridge.of_node = client->dev.of_node; in lt9611uxc_probe()
942 lt9611uxc->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; in lt9611uxc_probe()
943 if (lt9611uxc->hpd_supported) in lt9611uxc_probe()
944 lt9611uxc->bridge.ops |= DRM_BRIDGE_OP_HPD; in lt9611uxc_probe()
945 lt9611uxc->bridge.type = DRM_MODE_CONNECTOR_HDMIA; in lt9611uxc_probe()
947 drm_bridge_add(<9611uxc->bridge); in lt9611uxc_probe()
950 lt9611uxc->dsi0 = lt9611uxc_attach_dsi(lt9611uxc, lt9611uxc->dsi0_node); in lt9611uxc_probe()
951 if (IS_ERR(lt9611uxc->dsi0)) { in lt9611uxc_probe()
952 ret = PTR_ERR(lt9611uxc->dsi0); in lt9611uxc_probe()
957 if (lt9611uxc->dsi1_node) { in lt9611uxc_probe()
958 lt9611uxc->dsi1 = lt9611uxc_attach_dsi(lt9611uxc, lt9611uxc->dsi1_node); in lt9611uxc_probe()
959 if (IS_ERR(lt9611uxc->dsi1)) { in lt9611uxc_probe()
960 ret = PTR_ERR(lt9611uxc->dsi1); in lt9611uxc_probe()
965 return lt9611uxc_audio_init(dev, lt9611uxc); in lt9611uxc_probe()
968 free_irq(client->irq, lt9611uxc); in lt9611uxc_probe()
969 cancel_work_sync(<9611uxc->work); in lt9611uxc_probe()
970 drm_bridge_remove(<9611uxc->bridge); in lt9611uxc_probe()
973 regulator_bulk_disable(ARRAY_SIZE(lt9611uxc->supplies), lt9611uxc->supplies); in lt9611uxc_probe()
976 of_node_put(lt9611uxc->dsi1_node); in lt9611uxc_probe()
977 of_node_put(lt9611uxc->dsi0_node); in lt9611uxc_probe()
984 struct lt9611uxc *lt9611uxc = i2c_get_clientdata(client); in lt9611uxc_remove() local
986 free_irq(client->irq, lt9611uxc); in lt9611uxc_remove()
987 cancel_work_sync(<9611uxc->work); in lt9611uxc_remove()
988 lt9611uxc_audio_exit(lt9611uxc); in lt9611uxc_remove()
989 drm_bridge_remove(<9611uxc->bridge); in lt9611uxc_remove()
991 mutex_destroy(<9611uxc->ocm_lock); in lt9611uxc_remove()
993 regulator_bulk_disable(ARRAY_SIZE(lt9611uxc->supplies), lt9611uxc->supplies); in lt9611uxc_remove()
995 of_node_put(lt9611uxc->dsi1_node); in lt9611uxc_remove()
996 of_node_put(lt9611uxc->dsi0_node); in lt9611uxc_remove()
1000 { "lontium,lt9611uxc", 0 },
1005 { .compatible = "lontium,lt9611uxc" },
1012 .name = "lt9611uxc",