Lines Matching refs:ddata

90 static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable);
92 static int dsicm_panel_reset(struct panel_drv_data *ddata);
96 static void hw_guard_start(struct panel_drv_data *ddata, int guard_msec) in hw_guard_start() argument
98 ddata->hw_guard_wait = msecs_to_jiffies(guard_msec); in hw_guard_start()
99 ddata->hw_guard_end = jiffies + ddata->hw_guard_wait; in hw_guard_start()
102 static void hw_guard_wait(struct panel_drv_data *ddata) in hw_guard_wait() argument
104 unsigned long wait = ddata->hw_guard_end - jiffies; in hw_guard_wait()
106 if ((long)wait > 0 && wait <= ddata->hw_guard_wait) { in hw_guard_wait()
112 static int dsicm_dcs_read_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 *data) in dsicm_dcs_read_1() argument
114 struct omap_dss_device *in = ddata->in; in dsicm_dcs_read_1()
118 r = in->ops.dsi->dcs_read(in, ddata->channel, dcs_cmd, buf, 1); in dsicm_dcs_read_1()
128 static int dsicm_dcs_write_0(struct panel_drv_data *ddata, u8 dcs_cmd) in dsicm_dcs_write_0() argument
130 struct omap_dss_device *in = ddata->in; in dsicm_dcs_write_0()
131 return in->ops.dsi->dcs_write(in, ddata->channel, &dcs_cmd, 1); in dsicm_dcs_write_0()
134 static int dsicm_dcs_write_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 param) in dsicm_dcs_write_1() argument
136 struct omap_dss_device *in = ddata->in; in dsicm_dcs_write_1()
139 return in->ops.dsi->dcs_write(in, ddata->channel, buf, 2); in dsicm_dcs_write_1()
142 static int dsicm_sleep_in(struct panel_drv_data *ddata) in dsicm_sleep_in() argument
145 struct omap_dss_device *in = ddata->in; in dsicm_sleep_in()
149 hw_guard_wait(ddata); in dsicm_sleep_in()
152 r = in->ops.dsi->dcs_write_nosync(in, ddata->channel, &cmd, 1); in dsicm_sleep_in()
156 hw_guard_start(ddata, 120); in dsicm_sleep_in()
163 static int dsicm_sleep_out(struct panel_drv_data *ddata) in dsicm_sleep_out() argument
167 hw_guard_wait(ddata); in dsicm_sleep_out()
169 r = dsicm_dcs_write_0(ddata, MIPI_DCS_EXIT_SLEEP_MODE); in dsicm_sleep_out()
173 hw_guard_start(ddata, 120); in dsicm_sleep_out()
180 static int dsicm_get_id(struct panel_drv_data *ddata, u8 *id1, u8 *id2, u8 *id3) in dsicm_get_id() argument
184 r = dsicm_dcs_read_1(ddata, DCS_GET_ID1, id1); in dsicm_get_id()
187 r = dsicm_dcs_read_1(ddata, DCS_GET_ID2, id2); in dsicm_get_id()
190 r = dsicm_dcs_read_1(ddata, DCS_GET_ID3, id3); in dsicm_get_id()
197 static int dsicm_set_update_window(struct panel_drv_data *ddata, in dsicm_set_update_window() argument
200 struct omap_dss_device *in = ddata->in; in dsicm_set_update_window()
214 r = in->ops.dsi->dcs_write_nosync(in, ddata->channel, buf, sizeof(buf)); in dsicm_set_update_window()
224 r = in->ops.dsi->dcs_write_nosync(in, ddata->channel, buf, sizeof(buf)); in dsicm_set_update_window()
228 in->ops.dsi->bta_sync(in, ddata->channel); in dsicm_set_update_window()
233 static void dsicm_queue_ulps_work(struct panel_drv_data *ddata) in dsicm_queue_ulps_work() argument
235 if (ddata->ulps_timeout > 0) in dsicm_queue_ulps_work()
236 queue_delayed_work(ddata->workqueue, &ddata->ulps_work, in dsicm_queue_ulps_work()
237 msecs_to_jiffies(ddata->ulps_timeout)); in dsicm_queue_ulps_work()
240 static void dsicm_cancel_ulps_work(struct panel_drv_data *ddata) in dsicm_cancel_ulps_work() argument
242 cancel_delayed_work(&ddata->ulps_work); in dsicm_cancel_ulps_work()
245 static int dsicm_enter_ulps(struct panel_drv_data *ddata) in dsicm_enter_ulps() argument
247 struct omap_dss_device *in = ddata->in; in dsicm_enter_ulps()
250 if (ddata->ulps_enabled) in dsicm_enter_ulps()
253 dsicm_cancel_ulps_work(ddata); in dsicm_enter_ulps()
255 r = _dsicm_enable_te(ddata, false); in dsicm_enter_ulps()
259 if (gpio_is_valid(ddata->ext_te_gpio)) in dsicm_enter_ulps()
260 disable_irq(gpio_to_irq(ddata->ext_te_gpio)); in dsicm_enter_ulps()
264 ddata->ulps_enabled = true; in dsicm_enter_ulps()
269 dev_err(&ddata->pdev->dev, "enter ULPS failed"); in dsicm_enter_ulps()
270 dsicm_panel_reset(ddata); in dsicm_enter_ulps()
272 ddata->ulps_enabled = false; in dsicm_enter_ulps()
274 dsicm_queue_ulps_work(ddata); in dsicm_enter_ulps()
279 static int dsicm_exit_ulps(struct panel_drv_data *ddata) in dsicm_exit_ulps() argument
281 struct omap_dss_device *in = ddata->in; in dsicm_exit_ulps()
284 if (!ddata->ulps_enabled) in dsicm_exit_ulps()
289 dev_err(&ddata->pdev->dev, "failed to enable DSI\n"); in dsicm_exit_ulps()
293 in->ops.dsi->enable_hs(in, ddata->channel, true); in dsicm_exit_ulps()
295 r = _dsicm_enable_te(ddata, true); in dsicm_exit_ulps()
297 dev_err(&ddata->pdev->dev, "failed to re-enable TE"); in dsicm_exit_ulps()
301 if (gpio_is_valid(ddata->ext_te_gpio)) in dsicm_exit_ulps()
302 enable_irq(gpio_to_irq(ddata->ext_te_gpio)); in dsicm_exit_ulps()
304 dsicm_queue_ulps_work(ddata); in dsicm_exit_ulps()
306 ddata->ulps_enabled = false; in dsicm_exit_ulps()
311 dev_err(&ddata->pdev->dev, "failed to exit ULPS"); in dsicm_exit_ulps()
313 r = dsicm_panel_reset(ddata); in dsicm_exit_ulps()
315 if (gpio_is_valid(ddata->ext_te_gpio)) in dsicm_exit_ulps()
316 enable_irq(gpio_to_irq(ddata->ext_te_gpio)); in dsicm_exit_ulps()
317 ddata->ulps_enabled = false; in dsicm_exit_ulps()
320 dsicm_queue_ulps_work(ddata); in dsicm_exit_ulps()
325 static int dsicm_wake_up(struct panel_drv_data *ddata) in dsicm_wake_up() argument
327 if (ddata->ulps_enabled) in dsicm_wake_up()
328 return dsicm_exit_ulps(ddata); in dsicm_wake_up()
330 dsicm_cancel_ulps_work(ddata); in dsicm_wake_up()
331 dsicm_queue_ulps_work(ddata); in dsicm_wake_up()
337 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in dsicm_bl_update_status() local
338 struct omap_dss_device *in = ddata->in; in dsicm_bl_update_status()
348 dev_dbg(&ddata->pdev->dev, "update brightness to %d\n", level); in dsicm_bl_update_status()
350 mutex_lock(&ddata->lock); in dsicm_bl_update_status()
352 if (ddata->enabled) { in dsicm_bl_update_status()
355 r = dsicm_wake_up(ddata); in dsicm_bl_update_status()
357 r = dsicm_dcs_write_1(ddata, DCS_BRIGHTNESS, level); in dsicm_bl_update_status()
364 mutex_unlock(&ddata->lock); in dsicm_bl_update_status()
394 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_num_errors_show() local
395 struct omap_dss_device *in = ddata->in; in dsicm_num_errors_show()
399 mutex_lock(&ddata->lock); in dsicm_num_errors_show()
401 if (ddata->enabled) { in dsicm_num_errors_show()
404 r = dsicm_wake_up(ddata); in dsicm_num_errors_show()
406 r = dsicm_dcs_read_1(ddata, DCS_READ_NUM_ERRORS, in dsicm_num_errors_show()
414 mutex_unlock(&ddata->lock); in dsicm_num_errors_show()
426 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_hw_revision_show() local
427 struct omap_dss_device *in = ddata->in; in dsicm_hw_revision_show()
431 mutex_lock(&ddata->lock); in dsicm_hw_revision_show()
433 if (ddata->enabled) { in dsicm_hw_revision_show()
436 r = dsicm_wake_up(ddata); in dsicm_hw_revision_show()
438 r = dsicm_get_id(ddata, &id1, &id2, &id3); in dsicm_hw_revision_show()
445 mutex_unlock(&ddata->lock); in dsicm_hw_revision_show()
458 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_store_ulps() local
459 struct omap_dss_device *in = ddata->in; in dsicm_store_ulps()
467 mutex_lock(&ddata->lock); in dsicm_store_ulps()
469 if (ddata->enabled) { in dsicm_store_ulps()
473 r = dsicm_enter_ulps(ddata); in dsicm_store_ulps()
475 r = dsicm_wake_up(ddata); in dsicm_store_ulps()
480 mutex_unlock(&ddata->lock); in dsicm_store_ulps()
493 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_show_ulps() local
496 mutex_lock(&ddata->lock); in dsicm_show_ulps()
497 t = ddata->ulps_enabled; in dsicm_show_ulps()
498 mutex_unlock(&ddata->lock); in dsicm_show_ulps()
508 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_store_ulps_timeout() local
509 struct omap_dss_device *in = ddata->in; in dsicm_store_ulps_timeout()
517 mutex_lock(&ddata->lock); in dsicm_store_ulps_timeout()
518 ddata->ulps_timeout = t; in dsicm_store_ulps_timeout()
520 if (ddata->enabled) { in dsicm_store_ulps_timeout()
523 r = dsicm_wake_up(ddata); in dsicm_store_ulps_timeout()
527 mutex_unlock(&ddata->lock); in dsicm_store_ulps_timeout()
540 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_show_ulps_timeout() local
543 mutex_lock(&ddata->lock); in dsicm_show_ulps_timeout()
544 t = ddata->ulps_timeout; in dsicm_show_ulps_timeout()
545 mutex_unlock(&ddata->lock); in dsicm_show_ulps_timeout()
569 static void dsicm_hw_reset(struct panel_drv_data *ddata) in dsicm_hw_reset() argument
571 if (!gpio_is_valid(ddata->reset_gpio)) in dsicm_hw_reset()
574 gpio_set_value(ddata->reset_gpio, 1); in dsicm_hw_reset()
577 gpio_set_value(ddata->reset_gpio, 0); in dsicm_hw_reset()
580 gpio_set_value(ddata->reset_gpio, 1); in dsicm_hw_reset()
585 static int dsicm_power_on(struct panel_drv_data *ddata) in dsicm_power_on() argument
587 struct omap_dss_device *in = ddata->in; in dsicm_power_on()
593 .timings = &ddata->timings, in dsicm_power_on()
600 if (ddata->pin_config.num_pins > 0) { in dsicm_power_on()
601 r = in->ops.dsi->configure_pins(in, &ddata->pin_config); in dsicm_power_on()
603 dev_err(&ddata->pdev->dev, in dsicm_power_on()
611 dev_err(&ddata->pdev->dev, "failed to configure DSI\n"); in dsicm_power_on()
617 dev_err(&ddata->pdev->dev, "failed to enable DSI\n"); in dsicm_power_on()
621 dsicm_hw_reset(ddata); in dsicm_power_on()
623 in->ops.dsi->enable_hs(in, ddata->channel, false); in dsicm_power_on()
625 r = dsicm_sleep_out(ddata); in dsicm_power_on()
629 r = dsicm_get_id(ddata, &id1, &id2, &id3); in dsicm_power_on()
633 r = dsicm_dcs_write_1(ddata, DCS_BRIGHTNESS, 0xff); in dsicm_power_on()
637 r = dsicm_dcs_write_1(ddata, DCS_CTRL_DISPLAY, in dsicm_power_on()
642 r = dsicm_dcs_write_1(ddata, MIPI_DCS_SET_PIXEL_FORMAT, in dsicm_power_on()
647 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_DISPLAY_ON); in dsicm_power_on()
651 r = _dsicm_enable_te(ddata, ddata->te_enabled); in dsicm_power_on()
655 r = in->ops.dsi->enable_video_output(in, ddata->channel); in dsicm_power_on()
659 ddata->enabled = 1; in dsicm_power_on()
661 if (!ddata->intro_printed) { in dsicm_power_on()
662 dev_info(&ddata->pdev->dev, "panel revision %02x.%02x.%02x\n", in dsicm_power_on()
664 ddata->intro_printed = true; in dsicm_power_on()
667 in->ops.dsi->enable_hs(in, ddata->channel, true); in dsicm_power_on()
671 dev_err(&ddata->pdev->dev, "error while enabling panel, issuing HW reset\n"); in dsicm_power_on()
673 dsicm_hw_reset(ddata); in dsicm_power_on()
680 static void dsicm_power_off(struct panel_drv_data *ddata) in dsicm_power_off() argument
682 struct omap_dss_device *in = ddata->in; in dsicm_power_off()
685 in->ops.dsi->disable_video_output(in, ddata->channel); in dsicm_power_off()
687 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_DISPLAY_OFF); in dsicm_power_off()
689 r = dsicm_sleep_in(ddata); in dsicm_power_off()
692 dev_err(&ddata->pdev->dev, in dsicm_power_off()
694 dsicm_hw_reset(ddata); in dsicm_power_off()
699 ddata->enabled = 0; in dsicm_power_off()
702 static int dsicm_panel_reset(struct panel_drv_data *ddata) in dsicm_panel_reset() argument
704 dev_err(&ddata->pdev->dev, "performing LCD reset\n"); in dsicm_panel_reset()
706 dsicm_power_off(ddata); in dsicm_panel_reset()
707 dsicm_hw_reset(ddata); in dsicm_panel_reset()
708 return dsicm_power_on(ddata); in dsicm_panel_reset()
713 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_connect() local
714 struct omap_dss_device *in = ddata->in; in dsicm_connect()
715 struct device *dev = &ddata->pdev->dev; in dsicm_connect()
727 r = in->ops.dsi->request_vc(ddata->in, &ddata->channel); in dsicm_connect()
733 r = in->ops.dsi->set_vc_id(ddata->in, ddata->channel, TCH); in dsicm_connect()
742 in->ops.dsi->release_vc(ddata->in, ddata->channel); in dsicm_connect()
750 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_disconnect() local
751 struct omap_dss_device *in = ddata->in; in dsicm_disconnect()
756 in->ops.dsi->release_vc(in, ddata->channel); in dsicm_disconnect()
762 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_enable() local
763 struct omap_dss_device *in = ddata->in; in dsicm_enable()
766 dev_dbg(&ddata->pdev->dev, "enable\n"); in dsicm_enable()
768 mutex_lock(&ddata->lock); in dsicm_enable()
782 r = dsicm_power_on(ddata); in dsicm_enable()
791 mutex_unlock(&ddata->lock); in dsicm_enable()
795 dev_dbg(&ddata->pdev->dev, "enable failed\n"); in dsicm_enable()
796 mutex_unlock(&ddata->lock); in dsicm_enable()
802 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_disable() local
803 struct omap_dss_device *in = ddata->in; in dsicm_disable()
806 dev_dbg(&ddata->pdev->dev, "disable\n"); in dsicm_disable()
808 mutex_lock(&ddata->lock); in dsicm_disable()
810 dsicm_cancel_ulps_work(ddata); in dsicm_disable()
815 r = dsicm_wake_up(ddata); in dsicm_disable()
817 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 *in = ddata->in; in dsicm_framedone_cb()
832 dev_dbg(&ddata->pdev->dev, "framedone, err %d\n", err); in dsicm_framedone_cb()
833 in->ops.dsi->bus_unlock(ddata->in); in dsicm_framedone_cb()
838 struct panel_drv_data *ddata = data; in dsicm_te_isr() local
839 struct omap_dss_device *in = ddata->in; 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 = in->ops.dsi->update(in, 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 *in = ddata->in; 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 *in = ddata->in; 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, in dsicm_update()
901 if (ddata->te_enabled && gpio_is_valid(ddata->ext_te_gpio)) { in dsicm_update()
902 schedule_delayed_work(&ddata->te_timeout_work, in dsicm_update()
904 atomic_set(&ddata->do_update, 1); in dsicm_update()
906 r = in->ops.dsi->update(in, ddata->channel, dsicm_framedone_cb, in dsicm_update()
907 ddata); in dsicm_update()
913 mutex_unlock(&ddata->lock); in dsicm_update()
917 mutex_unlock(&ddata->lock); in dsicm_update()
923 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_sync() local
924 struct omap_dss_device *in = ddata->in; in dsicm_sync()
926 dev_dbg(&ddata->pdev->dev, "sync\n"); in dsicm_sync()
928 mutex_lock(&ddata->lock); in dsicm_sync()
931 mutex_unlock(&ddata->lock); in dsicm_sync()
933 dev_dbg(&ddata->pdev->dev, "sync done\n"); in dsicm_sync()
938 static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable) in _dsicm_enable_te() argument
940 struct omap_dss_device *in = ddata->in; in _dsicm_enable_te()
944 r = dsicm_dcs_write_1(ddata, MIPI_DCS_SET_TEAR_ON, 0); in _dsicm_enable_te()
946 r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_TEAR_OFF); in _dsicm_enable_te()
948 if (!gpio_is_valid(ddata->ext_te_gpio)) in _dsicm_enable_te()
959 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_enable_te() local
960 struct omap_dss_device *in = ddata->in; in dsicm_enable_te()
963 mutex_lock(&ddata->lock); in dsicm_enable_te()
965 if (ddata->te_enabled == enable) in dsicm_enable_te()
970 if (ddata->enabled) { in dsicm_enable_te()
971 r = dsicm_wake_up(ddata); in dsicm_enable_te()
975 r = _dsicm_enable_te(ddata, enable); in dsicm_enable_te()
980 ddata->te_enabled = enable; in dsicm_enable_te()
984 mutex_unlock(&ddata->lock); in dsicm_enable_te()
989 mutex_unlock(&ddata->lock); in dsicm_enable_te()
996 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_get_te() local
999 mutex_lock(&ddata->lock); in dsicm_get_te()
1000 r = ddata->te_enabled; in dsicm_get_te()
1001 mutex_unlock(&ddata->lock); in dsicm_get_te()
1010 struct panel_drv_data *ddata = to_panel_data(dssdev); in dsicm_memory_read() local
1011 struct omap_dss_device *in = ddata->in; in dsicm_memory_read()
1020 mutex_lock(&ddata->lock); in dsicm_memory_read()
1022 if (!ddata->enabled) { in dsicm_memory_read()
1033 r = dsicm_wake_up(ddata); in dsicm_memory_read()
1045 dsicm_set_update_window(ddata, x, y, w, h); in dsicm_memory_read()
1047 r = in->ops.dsi->set_max_rx_packet_size(in, ddata->channel, plen); in dsicm_memory_read()
1055 r = in->ops.dsi->dcs_read(in, ddata->channel, dcs_cmd, in dsicm_memory_read()
1066 dev_err(&ddata->pdev->dev, "short read\n"); in dsicm_memory_read()
1071 dev_err(&ddata->pdev->dev, "signal pending, " in dsicm_memory_read()
1081 in->ops.dsi->set_max_rx_packet_size(in, ddata->channel, 1); in dsicm_memory_read()
1085 mutex_unlock(&ddata->lock); in dsicm_memory_read()
1091 struct panel_drv_data *ddata = container_of(work, struct panel_drv_data, in dsicm_ulps_work() local
1093 struct omap_dss_device *dssdev = &ddata->dssdev; in dsicm_ulps_work()
1094 struct omap_dss_device *in = ddata->in; in dsicm_ulps_work()
1096 mutex_lock(&ddata->lock); in dsicm_ulps_work()
1098 if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE || !ddata->enabled) { in dsicm_ulps_work()
1099 mutex_unlock(&ddata->lock); in dsicm_ulps_work()
1105 dsicm_enter_ulps(ddata); in dsicm_ulps_work()
1108 mutex_unlock(&ddata->lock); in dsicm_ulps_work()
1133 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_probe_pdata() local
1143 ddata->in = in; in dsicm_probe_pdata()
1145 ddata->reset_gpio = pdata->reset_gpio; in dsicm_probe_pdata()
1148 ddata->ext_te_gpio = pdata->ext_te_gpio; in dsicm_probe_pdata()
1150 ddata->ext_te_gpio = -1; in dsicm_probe_pdata()
1152 ddata->ulps_timeout = pdata->ulps_timeout; in dsicm_probe_pdata()
1154 ddata->use_dsi_backlight = pdata->use_dsi_backlight; in dsicm_probe_pdata()
1156 ddata->pin_config = pdata->pin_config; in dsicm_probe_pdata()
1158 dssdev = &ddata->dssdev; in dsicm_probe_pdata()
1167 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_probe_of() local
1176 ddata->reset_gpio = gpio; in dsicm_probe_of()
1180 ddata->ext_te_gpio = gpio; in dsicm_probe_of()
1192 ddata->in = in; in dsicm_probe_of()
1202 struct panel_drv_data *ddata; in dsicm_probe() local
1210 ddata = devm_kzalloc(dev, sizeof(*ddata), GFP_KERNEL); in dsicm_probe()
1211 if (!ddata) in dsicm_probe()
1214 platform_set_drvdata(pdev, ddata); in dsicm_probe()
1215 ddata->pdev = pdev; in dsicm_probe()
1229 ddata->timings.x_res = 864; in dsicm_probe()
1230 ddata->timings.y_res = 480; in dsicm_probe()
1231 ddata->timings.pixelclock = 864 * 480 * 60; in dsicm_probe()
1233 dssdev = &ddata->dssdev; in dsicm_probe()
1236 dssdev->panel.timings = ddata->timings; in dsicm_probe()
1250 mutex_init(&ddata->lock); in dsicm_probe()
1252 atomic_set(&ddata->do_update, 0); in dsicm_probe()
1254 if (gpio_is_valid(ddata->reset_gpio)) { in dsicm_probe()
1255 r = devm_gpio_request_one(dev, ddata->reset_gpio, in dsicm_probe()
1263 if (gpio_is_valid(ddata->ext_te_gpio)) { in dsicm_probe()
1264 r = devm_gpio_request_one(dev, ddata->ext_te_gpio, in dsicm_probe()
1271 r = devm_request_irq(dev, gpio_to_irq(ddata->ext_te_gpio), in dsicm_probe()
1274 "taal vsync", ddata); in dsicm_probe()
1281 INIT_DEFERRABLE_WORK(&ddata->te_timeout_work, in dsicm_probe()
1287 ddata->workqueue = create_singlethread_workqueue("dsicm_wq"); in dsicm_probe()
1288 if (ddata->workqueue == NULL) { in dsicm_probe()
1292 INIT_DELAYED_WORK(&ddata->ulps_work, dsicm_ulps_work); in dsicm_probe()
1294 dsicm_hw_reset(ddata); in dsicm_probe()
1296 if (ddata->use_dsi_backlight) { in dsicm_probe()
1302 dev, ddata, &dsicm_bl_ops, &props); in dsicm_probe()
1308 ddata->bldev = bldev; in dsicm_probe()
1329 destroy_workqueue(ddata->workqueue); in dsicm_probe()
1336 struct panel_drv_data *ddata = platform_get_drvdata(pdev); in dsicm_remove() local
1337 struct omap_dss_device *dssdev = &ddata->dssdev; in dsicm_remove()
1349 bldev = ddata->bldev; in dsicm_remove()
1356 omap_dss_put_device(ddata->in); in dsicm_remove()
1358 dsicm_cancel_ulps_work(ddata); in dsicm_remove()
1359 destroy_workqueue(ddata->workqueue); in dsicm_remove()
1362 dsicm_hw_reset(ddata); in dsicm_remove()