Lines Matching refs:ddata

96 static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable);
98 static int dsicm_panel_reset(struct panel_drv_data *ddata);
102 static void dsicm_bl_power(struct panel_drv_data *ddata, bool enable) in dsicm_bl_power() argument
106 if (ddata->bldev) in dsicm_bl_power()
107 backlight = ddata->bldev; in dsicm_bl_power()
108 else if (ddata->extbldev) in dsicm_bl_power()
109 backlight = ddata->extbldev; in dsicm_bl_power()
126 static void hw_guard_start(struct panel_drv_data *ddata, int guard_msec) in hw_guard_start() argument
128 ddata->hw_guard_wait = msecs_to_jiffies(guard_msec); in hw_guard_start()
129 ddata->hw_guard_end = jiffies + ddata->hw_guard_wait; in hw_guard_start()
132 static void hw_guard_wait(struct panel_drv_data *ddata) in hw_guard_wait() argument
134 unsigned long wait = ddata->hw_guard_end - jiffies; in hw_guard_wait()
136 if ((long)wait > 0 && wait <= ddata->hw_guard_wait) { in hw_guard_wait()
142 static int dsicm_dcs_read_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 *data) in dsicm_dcs_read_1() argument
144 struct omap_dss_device *src = ddata->src; in dsicm_dcs_read_1()
148 r = src->ops->dsi.dcs_read(src, ddata->channel, dcs_cmd, buf, 1); in dsicm_dcs_read_1()
158 static int dsicm_dcs_write_0(struct panel_drv_data *ddata, u8 dcs_cmd) in dsicm_dcs_write_0() argument
160 struct omap_dss_device *src = ddata->src; in dsicm_dcs_write_0()
162 return src->ops->dsi.dcs_write(src, ddata->channel, &dcs_cmd, 1); in dsicm_dcs_write_0()
165 static int dsicm_dcs_write_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 param) in dsicm_dcs_write_1() argument
167 struct omap_dss_device *src = ddata->src; in dsicm_dcs_write_1()
170 return src->ops->dsi.dcs_write(src, ddata->channel, buf, 2); in dsicm_dcs_write_1()
173 static int dsicm_sleep_in(struct panel_drv_data *ddata) in dsicm_sleep_in() argument
176 struct omap_dss_device *src = ddata->src; in dsicm_sleep_in()
180 hw_guard_wait(ddata); in dsicm_sleep_in()
183 r = src->ops->dsi.dcs_write_nosync(src, ddata->channel, &cmd, 1); in dsicm_sleep_in()
187 hw_guard_start(ddata, 120); in dsicm_sleep_in()
194 static int dsicm_sleep_out(struct panel_drv_data *ddata) in dsicm_sleep_out() argument
198 hw_guard_wait(ddata); in dsicm_sleep_out()
200 r = dsicm_dcs_write_0(ddata, MIPI_DCS_EXIT_SLEEP_MODE); in dsicm_sleep_out()
204 hw_guard_start(ddata, 120); in dsicm_sleep_out()
211 static int dsicm_get_id(struct panel_drv_data *ddata, u8 *id1, u8 *id2, u8 *id3) in dsicm_get_id() argument
215 r = dsicm_dcs_read_1(ddata, DCS_GET_ID1, id1); in dsicm_get_id()
218 r = dsicm_dcs_read_1(ddata, DCS_GET_ID2, id2); in dsicm_get_id()
221 r = dsicm_dcs_read_1(ddata, DCS_GET_ID3, id3); in dsicm_get_id()
228 static int dsicm_set_update_window(struct panel_drv_data *ddata, in dsicm_set_update_window() argument
231 struct omap_dss_device *src = ddata->src; in dsicm_set_update_window()
245 r = src->ops->dsi.dcs_write_nosync(src, ddata->channel, buf, sizeof(buf)); in dsicm_set_update_window()
255 r = src->ops->dsi.dcs_write_nosync(src, ddata->channel, buf, sizeof(buf)); in dsicm_set_update_window()
259 src->ops->dsi.bta_sync(src, ddata->channel); in dsicm_set_update_window()
264 static void dsicm_queue_ulps_work(struct panel_drv_data *ddata) in dsicm_queue_ulps_work() argument
266 if (ddata->ulps_timeout > 0) in dsicm_queue_ulps_work()
267 queue_delayed_work(ddata->workqueue, &ddata->ulps_work, in dsicm_queue_ulps_work()
268 msecs_to_jiffies(ddata->ulps_timeout)); in dsicm_queue_ulps_work()
271 static void dsicm_cancel_ulps_work(struct panel_drv_data *ddata) in dsicm_cancel_ulps_work() argument
273 cancel_delayed_work(&ddata->ulps_work); in dsicm_cancel_ulps_work()
276 static int dsicm_enter_ulps(struct panel_drv_data *ddata) in dsicm_enter_ulps() argument
278 struct omap_dss_device *src = ddata->src; in dsicm_enter_ulps()
281 if (ddata->ulps_enabled) in dsicm_enter_ulps()
284 dsicm_cancel_ulps_work(ddata); in dsicm_enter_ulps()
286 r = _dsicm_enable_te(ddata, false); in dsicm_enter_ulps()
290 if (ddata->ext_te_gpio) in dsicm_enter_ulps()
291 disable_irq(gpiod_to_irq(ddata->ext_te_gpio)); in dsicm_enter_ulps()
295 ddata->ulps_enabled = true; in dsicm_enter_ulps()
300 dev_err(&ddata->pdev->dev, "enter ULPS failed"); in dsicm_enter_ulps()
301 dsicm_panel_reset(ddata); in dsicm_enter_ulps()
303 ddata->ulps_enabled = false; in dsicm_enter_ulps()
305 dsicm_queue_ulps_work(ddata); in dsicm_enter_ulps()
310 static int dsicm_exit_ulps(struct panel_drv_data *ddata) in dsicm_exit_ulps() argument
312 struct omap_dss_device *src = ddata->src; in dsicm_exit_ulps()
315 if (!ddata->ulps_enabled) in dsicm_exit_ulps()
319 src->ops->dsi.enable_hs(src, ddata->channel, true); in dsicm_exit_ulps()
321 r = _dsicm_enable_te(ddata, true); in dsicm_exit_ulps()
323 dev_err(&ddata->pdev->dev, "failed to re-enable TE"); in dsicm_exit_ulps()
327 if (ddata->ext_te_gpio) in dsicm_exit_ulps()
328 enable_irq(gpiod_to_irq(ddata->ext_te_gpio)); in dsicm_exit_ulps()
330 dsicm_queue_ulps_work(ddata); in dsicm_exit_ulps()
332 ddata->ulps_enabled = false; in dsicm_exit_ulps()
337 dev_err(&ddata->pdev->dev, "failed to exit ULPS"); in dsicm_exit_ulps()
339 r = dsicm_panel_reset(ddata); in dsicm_exit_ulps()
341 if (ddata->ext_te_gpio) in dsicm_exit_ulps()
342 enable_irq(gpiod_to_irq(ddata->ext_te_gpio)); in dsicm_exit_ulps()
343 ddata->ulps_enabled = false; in dsicm_exit_ulps()
346 dsicm_queue_ulps_work(ddata); in dsicm_exit_ulps()
351 static int dsicm_wake_up(struct panel_drv_data *ddata) in dsicm_wake_up() argument
353 if (ddata->ulps_enabled) in dsicm_wake_up()
354 return dsicm_exit_ulps(ddata); in dsicm_wake_up()
356 dsicm_cancel_ulps_work(ddata); in dsicm_wake_up()
357 dsicm_queue_ulps_work(ddata); in dsicm_wake_up()
363 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in dsicm_bl_update_status() local
364 struct omap_dss_device *src = ddata->src; in dsicm_bl_update_status()
374 dev_dbg(&ddata->pdev->dev, "update brightness to %d\n", level); in dsicm_bl_update_status()
376 mutex_lock(&ddata->lock); in dsicm_bl_update_status()
378 if (ddata->enabled) { in dsicm_bl_update_status()
381 r = dsicm_wake_up(ddata); in dsicm_bl_update_status()
383 r = dsicm_dcs_write_1(ddata, DCS_BRIGHTNESS, level); in dsicm_bl_update_status()
388 mutex_unlock(&ddata->lock); in dsicm_bl_update_status()
410 struct panel_drv_data *ddata = dev_get_drvdata(dev); in dsicm_num_errors_show() local
411 struct omap_dss_device *src = ddata->src; in dsicm_num_errors_show()
415 mutex_lock(&ddata->lock); in dsicm_num_errors_show()
417 if (ddata->enabled) { in dsicm_num_errors_show()
420 r = dsicm_wake_up(ddata); in dsicm_num_errors_show()
422 r = dsicm_dcs_read_1(ddata, DCS_READ_NUM_ERRORS, in dsicm_num_errors_show()
430 mutex_unlock(&ddata->lock); in dsicm_num_errors_show()
441 struct panel_drv_data *ddata = dev_get_drvdata(dev); in dsicm_hw_revision_show() local
442 struct omap_dss_device *src = ddata->src; in dsicm_hw_revision_show()
446 mutex_lock(&ddata->lock); in dsicm_hw_revision_show()
448 if (ddata->enabled) { in dsicm_hw_revision_show()
451 r = dsicm_wake_up(ddata); in dsicm_hw_revision_show()
453 r = dsicm_get_id(ddata, &id1, &id2, &id3); in dsicm_hw_revision_show()
460 mutex_unlock(&ddata->lock); in dsicm_hw_revision_show()
472 struct panel_drv_data *ddata = dev_get_drvdata(dev); in dsicm_store_ulps() local
473 struct omap_dss_device *src = ddata->src; in dsicm_store_ulps()
481 mutex_lock(&ddata->lock); in dsicm_store_ulps()
483 if (ddata->enabled) { in dsicm_store_ulps()
487 r = dsicm_enter_ulps(ddata); in dsicm_store_ulps()
489 r = dsicm_wake_up(ddata); in dsicm_store_ulps()
494 mutex_unlock(&ddata->lock); in dsicm_store_ulps()
506 struct panel_drv_data *ddata = dev_get_drvdata(dev); in dsicm_show_ulps() local
509 mutex_lock(&ddata->lock); in dsicm_show_ulps()
510 t = ddata->ulps_enabled; in dsicm_show_ulps()
511 mutex_unlock(&ddata->lock); in dsicm_show_ulps()
520 struct panel_drv_data *ddata = dev_get_drvdata(dev); in dsicm_store_ulps_timeout() local
521 struct omap_dss_device *src = ddata->src; in dsicm_store_ulps_timeout()
529 mutex_lock(&ddata->lock); in dsicm_store_ulps_timeout()
530 ddata->ulps_timeout = t; in dsicm_store_ulps_timeout()
532 if (ddata->enabled) { in dsicm_store_ulps_timeout()
535 r = dsicm_wake_up(ddata); in dsicm_store_ulps_timeout()
539 mutex_unlock(&ddata->lock); in dsicm_store_ulps_timeout()
551 struct panel_drv_data *ddata = dev_get_drvdata(dev); in dsicm_show_ulps_timeout() local
554 mutex_lock(&ddata->lock); in dsicm_show_ulps_timeout()
555 t = ddata->ulps_timeout; in dsicm_show_ulps_timeout()
556 mutex_unlock(&ddata->lock); in dsicm_show_ulps_timeout()
580 static void dsicm_hw_reset(struct panel_drv_data *ddata) in dsicm_hw_reset() argument
582 gpiod_set_value(ddata->reset_gpio, 1); in dsicm_hw_reset()
585 gpiod_set_value(ddata->reset_gpio, 0); in dsicm_hw_reset()
588 gpiod_set_value(ddata->reset_gpio, 1); in dsicm_hw_reset()
593 static int dsicm_power_on(struct panel_drv_data *ddata) in dsicm_power_on() argument
595 struct omap_dss_device *src = ddata->src; in dsicm_power_on()
601 .vm = &ddata->vm, in dsicm_power_on()
608 if (ddata->vpnl) { in dsicm_power_on()
609 r = regulator_enable(ddata->vpnl); in dsicm_power_on()
611 dev_err(&ddata->pdev->dev, in dsicm_power_on()
617 if (ddata->vddi) { in dsicm_power_on()
618 r = regulator_enable(ddata->vddi); in dsicm_power_on()
620 dev_err(&ddata->pdev->dev, in dsicm_power_on()
626 if (ddata->pin_config.num_pins > 0) { in dsicm_power_on()
627 r = src->ops->dsi.configure_pins(src, &ddata->pin_config); in dsicm_power_on()
629 dev_err(&ddata->pdev->dev, in dsicm_power_on()
637 dev_err(&ddata->pdev->dev, "failed to configure DSI\n"); in dsicm_power_on()
643 dsicm_hw_reset(ddata); in dsicm_power_on()
645 src->ops->dsi.enable_hs(src, ddata->channel, false); in dsicm_power_on()
647 r = dsicm_sleep_out(ddata); in dsicm_power_on()
651 r = dsicm_get_id(ddata, &id1, &id2, &id3); in dsicm_power_on()
655 r = dsicm_dcs_write_1(ddata, DCS_BRIGHTNESS, 0xff); in dsicm_power_on()
659 r = dsicm_dcs_write_1(ddata, DCS_CTRL_DISPLAY, in dsicm_power_on()
664 r = dsicm_dcs_write_1(ddata, MIPI_DCS_SET_PIXEL_FORMAT, in dsicm_power_on()
669 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_DISPLAY_ON); in dsicm_power_on()
673 r = _dsicm_enable_te(ddata, ddata->te_enabled); in dsicm_power_on()
677 r = src->ops->dsi.enable_video_output(src, ddata->channel); in dsicm_power_on()
681 ddata->enabled = true; in dsicm_power_on()
683 if (!ddata->intro_printed) { in dsicm_power_on()
684 dev_info(&ddata->pdev->dev, "panel revision %02x.%02x.%02x\n", in dsicm_power_on()
686 ddata->intro_printed = true; in dsicm_power_on()
689 src->ops->dsi.enable_hs(src, ddata->channel, true); in dsicm_power_on()
693 dev_err(&ddata->pdev->dev, "error while enabling panel, issuing HW reset\n"); in dsicm_power_on()
695 dsicm_hw_reset(ddata); in dsicm_power_on()
699 if (ddata->vddi) in dsicm_power_on()
700 regulator_disable(ddata->vddi); in dsicm_power_on()
702 if (ddata->vpnl) in dsicm_power_on()
703 regulator_disable(ddata->vpnl); in dsicm_power_on()
708 static void dsicm_power_off(struct panel_drv_data *ddata) in dsicm_power_off() argument
710 struct omap_dss_device *src = ddata->src; in dsicm_power_off()
713 src->ops->dsi.disable_video_output(src, ddata->channel); in dsicm_power_off()
715 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_DISPLAY_OFF); in dsicm_power_off()
717 r = dsicm_sleep_in(ddata); in dsicm_power_off()
720 dev_err(&ddata->pdev->dev, in dsicm_power_off()
722 dsicm_hw_reset(ddata); in dsicm_power_off()
727 if (ddata->vddi) in dsicm_power_off()
728 regulator_disable(ddata->vddi); in dsicm_power_off()
729 if (ddata->vpnl) in dsicm_power_off()
730 regulator_disable(ddata->vpnl); in dsicm_power_off()
732 ddata->enabled = false; in dsicm_power_off()
735 static int dsicm_panel_reset(struct panel_drv_data *ddata) in dsicm_panel_reset() argument
737 dev_err(&ddata->pdev->dev, "performing LCD reset\n"); in dsicm_panel_reset()
739 dsicm_power_off(ddata); in dsicm_panel_reset()
740 dsicm_hw_reset(ddata); in dsicm_panel_reset()
741 return dsicm_power_on(ddata); in dsicm_panel_reset()
747 struct panel_drv_data *ddata = to_panel_data(dst); in dsicm_connect() local
748 struct device *dev = &ddata->pdev->dev; in dsicm_connect()
751 r = src->ops->dsi.request_vc(src, &ddata->channel); in dsicm_connect()
757 r = src->ops->dsi.set_vc_id(src, ddata->channel, TCH); in dsicm_connect()
760 src->ops->dsi.release_vc(src, ddata->channel); in dsicm_connect()
764 ddata->src = src; in dsicm_connect()
771 struct panel_drv_data *ddata = to_panel_data(dst); in dsicm_disconnect() local
773 src->ops->dsi.release_vc(src, ddata->channel); in dsicm_disconnect()
774 ddata->src = NULL; in dsicm_disconnect()
779 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_enable() local
780 struct omap_dss_device *src = ddata->src; in dsicm_enable()
783 mutex_lock(&ddata->lock); in dsicm_enable()
787 r = dsicm_power_on(ddata); in dsicm_enable()
794 mutex_unlock(&ddata->lock); in dsicm_enable()
796 dsicm_bl_power(ddata, true); in dsicm_enable()
800 dev_dbg(&ddata->pdev->dev, "enable failed (%d)\n", r); in dsicm_enable()
801 mutex_unlock(&ddata->lock); in dsicm_enable()
806 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_disable() local
807 struct omap_dss_device *src = ddata->src; in dsicm_disable()
810 dsicm_bl_power(ddata, false); in dsicm_disable()
812 mutex_lock(&ddata->lock); in dsicm_disable()
814 dsicm_cancel_ulps_work(ddata); in dsicm_disable()
818 r = dsicm_wake_up(ddata); in dsicm_disable()
820 dsicm_power_off(ddata); in dsicm_disable()
824 mutex_unlock(&ddata->lock); in dsicm_disable()
829 struct panel_drv_data *ddata = data; in dsicm_framedone_cb() local
830 struct omap_dss_device *src = ddata->src; in dsicm_framedone_cb()
832 dev_dbg(&ddata->pdev->dev, "framedone, err %d\n", err); in dsicm_framedone_cb()
838 struct panel_drv_data *ddata = data; in dsicm_te_isr() local
839 struct omap_dss_device *src = ddata->src; in dsicm_te_isr()
843 old = atomic_cmpxchg(&ddata->do_update, 1, 0); in dsicm_te_isr()
846 cancel_delayed_work(&ddata->te_timeout_work); in dsicm_te_isr()
848 r = src->ops->dsi.update(src, ddata->channel, dsicm_framedone_cb, in dsicm_te_isr()
849 ddata); in dsicm_te_isr()
856 dev_err(&ddata->pdev->dev, "start update failed\n"); in dsicm_te_isr()
863 struct panel_drv_data *ddata = container_of(work, struct panel_drv_data, in dsicm_te_timeout_work_callback() local
865 struct omap_dss_device *src = ddata->src; in dsicm_te_timeout_work_callback()
867 dev_err(&ddata->pdev->dev, "TE not received for 250ms!\n"); in dsicm_te_timeout_work_callback()
869 atomic_set(&ddata->do_update, 0); in dsicm_te_timeout_work_callback()
876 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_update() local
877 struct omap_dss_device *src = ddata->src; in dsicm_update()
880 dev_dbg(&ddata->pdev->dev, "update %d, %d, %d x %d\n", x, y, w, h); in dsicm_update()
882 mutex_lock(&ddata->lock); in dsicm_update()
885 r = dsicm_wake_up(ddata); in dsicm_update()
889 if (!ddata->enabled) { in dsicm_update()
895 r = dsicm_set_update_window(ddata, 0, 0, ddata->vm.hactive, in dsicm_update()
896 ddata->vm.vactive); in dsicm_update()
900 if (ddata->te_enabled && ddata->ext_te_gpio) { in dsicm_update()
901 schedule_delayed_work(&ddata->te_timeout_work, in dsicm_update()
903 atomic_set(&ddata->do_update, 1); in dsicm_update()
905 r = src->ops->dsi.update(src, ddata->channel, dsicm_framedone_cb, in dsicm_update()
906 ddata); in dsicm_update()
912 mutex_unlock(&ddata->lock); in dsicm_update()
916 mutex_unlock(&ddata->lock); in dsicm_update()
922 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_sync() local
923 struct omap_dss_device *src = ddata->src; in dsicm_sync()
925 dev_dbg(&ddata->pdev->dev, "sync\n"); in dsicm_sync()
927 mutex_lock(&ddata->lock); in dsicm_sync()
930 mutex_unlock(&ddata->lock); in dsicm_sync()
932 dev_dbg(&ddata->pdev->dev, "sync done\n"); in dsicm_sync()
937 static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable) in _dsicm_enable_te() argument
939 struct omap_dss_device *src = ddata->src; in _dsicm_enable_te()
943 r = dsicm_dcs_write_1(ddata, MIPI_DCS_SET_TEAR_ON, 0); in _dsicm_enable_te()
945 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_TEAR_OFF); in _dsicm_enable_te()
947 if (!ddata->ext_te_gpio) in _dsicm_enable_te()
958 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_enable_te() local
959 struct omap_dss_device *src = ddata->src; in dsicm_enable_te()
962 mutex_lock(&ddata->lock); in dsicm_enable_te()
964 if (ddata->te_enabled == enable) in dsicm_enable_te()
969 if (ddata->enabled) { in dsicm_enable_te()
970 r = dsicm_wake_up(ddata); in dsicm_enable_te()
974 r = _dsicm_enable_te(ddata, enable); in dsicm_enable_te()
979 ddata->te_enabled = enable; in dsicm_enable_te()
983 mutex_unlock(&ddata->lock); in dsicm_enable_te()
988 mutex_unlock(&ddata->lock); in dsicm_enable_te()
995 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_get_te() local
998 mutex_lock(&ddata->lock); in dsicm_get_te()
999 r = ddata->te_enabled; in dsicm_get_te()
1000 mutex_unlock(&ddata->lock); in dsicm_get_te()
1009 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_memory_read() local
1010 struct omap_dss_device *src = ddata->src; in dsicm_memory_read()
1019 mutex_lock(&ddata->lock); in dsicm_memory_read()
1021 if (!ddata->enabled) { in dsicm_memory_read()
1027 ddata->vm.hactive * ddata->vm.vactive * 3); in dsicm_memory_read()
1031 r = dsicm_wake_up(ddata); in dsicm_memory_read()
1043 dsicm_set_update_window(ddata, x, y, w, h); in dsicm_memory_read()
1045 r = src->ops->dsi.set_max_rx_packet_size(src, ddata->channel, plen); in dsicm_memory_read()
1053 r = src->ops->dsi.dcs_read(src, ddata->channel, dcs_cmd, in dsicm_memory_read()
1064 dev_err(&ddata->pdev->dev, "short read\n"); in dsicm_memory_read()
1069 dev_err(&ddata->pdev->dev, "signal pending, " in dsicm_memory_read()
1079 src->ops->dsi.set_max_rx_packet_size(src, ddata->channel, 1); in dsicm_memory_read()
1083 mutex_unlock(&ddata->lock); in dsicm_memory_read()
1089 struct panel_drv_data *ddata = container_of(work, struct panel_drv_data, in dsicm_ulps_work() local
1091 struct omap_dss_device *dssdev = &ddata->dssdev; in dsicm_ulps_work()
1092 struct omap_dss_device *src = ddata->src; in dsicm_ulps_work()
1094 mutex_lock(&ddata->lock); in dsicm_ulps_work()
1096 if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE || !ddata->enabled) { in dsicm_ulps_work()
1097 mutex_unlock(&ddata->lock); in dsicm_ulps_work()
1103 dsicm_enter_ulps(ddata); in dsicm_ulps_work()
1106 mutex_unlock(&ddata->lock); in dsicm_ulps_work()
1112 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_get_modes() local
1114 connector->display_info.width_mm = ddata->width_mm; in dsicm_get_modes()
1115 connector->display_info.height_mm = ddata->height_mm; in dsicm_get_modes()
1117 return omapdss_display_get_modes(connector, &ddata->vm); in dsicm_get_modes()
1123 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_check_timings() local
1126 if (mode->hdisplay != ddata->vm.hactive) in dsicm_check_timings()
1129 if (mode->vdisplay != ddata->vm.vactive) in dsicm_check_timings()
1136 ddata->vm.hactive, ddata->vm.vactive); in dsicm_check_timings()
1167 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_probe_of() local
1171 ddata->reset_gpio = devm_gpiod_get(&pdev->dev, "reset", GPIOD_OUT_LOW); in dsicm_probe_of()
1172 if (IS_ERR(ddata->reset_gpio)) { in dsicm_probe_of()
1173 err = PTR_ERR(ddata->reset_gpio); in dsicm_probe_of()
1178 ddata->ext_te_gpio = devm_gpiod_get_optional(&pdev->dev, "te", in dsicm_probe_of()
1180 if (IS_ERR(ddata->ext_te_gpio)) { in dsicm_probe_of()
1181 err = PTR_ERR(ddata->ext_te_gpio); in dsicm_probe_of()
1188 videomode_from_timing(&timing, &ddata->vm); in dsicm_probe_of()
1189 if (!ddata->vm.pixelclock) in dsicm_probe_of()
1190 ddata->vm.pixelclock = in dsicm_probe_of()
1191 ddata->vm.hactive * ddata->vm.vactive * 60; in dsicm_probe_of()
1197 ddata->width_mm = 0; in dsicm_probe_of()
1198 of_property_read_u32(node, "width-mm", &ddata->width_mm); in dsicm_probe_of()
1200 ddata->height_mm = 0; in dsicm_probe_of()
1201 of_property_read_u32(node, "height-mm", &ddata->height_mm); in dsicm_probe_of()
1203 ddata->vpnl = devm_regulator_get_optional(&pdev->dev, "vpnl"); in dsicm_probe_of()
1204 if (IS_ERR(ddata->vpnl)) { in dsicm_probe_of()
1205 err = PTR_ERR(ddata->vpnl); in dsicm_probe_of()
1208 ddata->vpnl = NULL; in dsicm_probe_of()
1211 ddata->vddi = devm_regulator_get_optional(&pdev->dev, "vddi"); in dsicm_probe_of()
1212 if (IS_ERR(ddata->vddi)) { in dsicm_probe_of()
1213 err = PTR_ERR(ddata->vddi); in dsicm_probe_of()
1216 ddata->vddi = NULL; in dsicm_probe_of()
1225 ddata->extbldev = backlight; in dsicm_probe_of()
1227 ddata->use_dsi_backlight = true; in dsicm_probe_of()
1236 struct panel_drv_data *ddata; in dsicm_probe() local
1244 ddata = devm_kzalloc(dev, sizeof(*ddata), GFP_KERNEL); in dsicm_probe()
1245 if (!ddata) in dsicm_probe()
1248 platform_set_drvdata(pdev, ddata); in dsicm_probe()
1249 ddata->pdev = pdev; in dsicm_probe()
1251 ddata->vm.hactive = 864; in dsicm_probe()
1252 ddata->vm.vactive = 480; in dsicm_probe()
1253 ddata->vm.pixelclock = 864 * 480 * 60; in dsicm_probe()
1259 dssdev = &ddata->dssdev; in dsicm_probe()
1275 mutex_init(&ddata->lock); in dsicm_probe()
1277 atomic_set(&ddata->do_update, 0); in dsicm_probe()
1279 if (ddata->ext_te_gpio) { in dsicm_probe()
1280 r = devm_request_irq(dev, gpiod_to_irq(ddata->ext_te_gpio), in dsicm_probe()
1283 "taal vsync", ddata); in dsicm_probe()
1290 INIT_DEFERRABLE_WORK(&ddata->te_timeout_work, in dsicm_probe()
1296 ddata->workqueue = create_singlethread_workqueue("dsicm_wq"); in dsicm_probe()
1297 if (!ddata->workqueue) { in dsicm_probe()
1301 INIT_DELAYED_WORK(&ddata->ulps_work, dsicm_ulps_work); in dsicm_probe()
1303 dsicm_hw_reset(ddata); in dsicm_probe()
1305 if (ddata->use_dsi_backlight) { in dsicm_probe()
1311 dev, ddata, &dsicm_bl_ops, &props); in dsicm_probe()
1317 ddata->bldev = bldev; in dsicm_probe()
1329 destroy_workqueue(ddata->workqueue); in dsicm_probe()
1331 if (ddata->extbldev) in dsicm_probe()
1332 put_device(&ddata->extbldev->dev); in dsicm_probe()
1339 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_remove() local
1340 struct omap_dss_device *dssdev = &ddata->dssdev; in dsicm_remove()
1348 omapdss_device_disconnect(ddata->src, dssdev); in dsicm_remove()
1352 if (ddata->extbldev) in dsicm_remove()
1353 put_device(&ddata->extbldev->dev); in dsicm_remove()
1355 dsicm_cancel_ulps_work(ddata); in dsicm_remove()
1356 destroy_workqueue(ddata->workqueue); in dsicm_remove()
1359 dsicm_hw_reset(ddata); in dsicm_remove()