Lines Matching refs:ddata

77 static void dsicm_bl_power(struct panel_drv_data *ddata, bool enable)  in dsicm_bl_power()  argument
81 if (ddata->bldev) in dsicm_bl_power()
82 backlight = ddata->bldev; in dsicm_bl_power()
83 else if (ddata->extbldev) in dsicm_bl_power()
84 backlight = ddata->extbldev; in dsicm_bl_power()
101 static void hw_guard_start(struct panel_drv_data *ddata, int guard_msec) in hw_guard_start() argument
103 ddata->hw_guard_wait = msecs_to_jiffies(guard_msec); in hw_guard_start()
104 ddata->hw_guard_end = jiffies + ddata->hw_guard_wait; in hw_guard_start()
107 static void hw_guard_wait(struct panel_drv_data *ddata) in hw_guard_wait() argument
109 unsigned long wait = ddata->hw_guard_end - jiffies; in hw_guard_wait()
111 if ((long)wait > 0 && wait <= ddata->hw_guard_wait) { in hw_guard_wait()
117 static int dsicm_dcs_read_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 *data) in dsicm_dcs_read_1() argument
119 return mipi_dsi_dcs_read(ddata->dsi, dcs_cmd, data, 1); in dsicm_dcs_read_1()
122 static int dsicm_dcs_write_1(struct panel_drv_data *ddata, u8 dcs_cmd, u8 param) in dsicm_dcs_write_1() argument
124 return mipi_dsi_dcs_write(ddata->dsi, dcs_cmd, &param, 1); in dsicm_dcs_write_1()
127 static int dsicm_sleep_in(struct panel_drv_data *ddata) in dsicm_sleep_in() argument
132 hw_guard_wait(ddata); in dsicm_sleep_in()
134 r = mipi_dsi_dcs_enter_sleep_mode(ddata->dsi); in dsicm_sleep_in()
138 hw_guard_start(ddata, 120); in dsicm_sleep_in()
145 static int dsicm_sleep_out(struct panel_drv_data *ddata) in dsicm_sleep_out() argument
149 hw_guard_wait(ddata); in dsicm_sleep_out()
151 r = mipi_dsi_dcs_exit_sleep_mode(ddata->dsi); in dsicm_sleep_out()
155 hw_guard_start(ddata, 120); in dsicm_sleep_out()
162 static int dsicm_get_id(struct panel_drv_data *ddata, u8 *id1, u8 *id2, u8 *id3) in dsicm_get_id() argument
166 r = dsicm_dcs_read_1(ddata, DCS_GET_ID1, id1); in dsicm_get_id()
169 r = dsicm_dcs_read_1(ddata, DCS_GET_ID2, id2); in dsicm_get_id()
172 r = dsicm_dcs_read_1(ddata, DCS_GET_ID3, id3); in dsicm_get_id()
179 static int dsicm_set_update_window(struct panel_drv_data *ddata) in dsicm_set_update_window() argument
181 struct mipi_dsi_device *dsi = ddata->dsi; in dsicm_set_update_window()
184 r = mipi_dsi_dcs_set_column_address(dsi, 0, ddata->mode.hdisplay - 1); in dsicm_set_update_window()
188 r = mipi_dsi_dcs_set_page_address(dsi, 0, ddata->mode.vdisplay - 1); in dsicm_set_update_window()
197 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in dsicm_bl_update_status() local
207 dev_dbg(&ddata->dsi->dev, "update brightness to %d\n", level); in dsicm_bl_update_status()
209 mutex_lock(&ddata->lock); in dsicm_bl_update_status()
211 if (ddata->enabled) in dsicm_bl_update_status()
212 r = dsicm_dcs_write_1(ddata, MIPI_DCS_SET_DISPLAY_BRIGHTNESS, in dsicm_bl_update_status()
215 mutex_unlock(&ddata->lock); in dsicm_bl_update_status()
237 struct panel_drv_data *ddata = dev_get_drvdata(dev); in num_dsi_errors_show() local
241 mutex_lock(&ddata->lock); in num_dsi_errors_show()
243 if (ddata->enabled) in num_dsi_errors_show()
244 r = dsicm_dcs_read_1(ddata, MIPI_DCS_GET_ERROR_COUNT_ON_DSI, &errors); in num_dsi_errors_show()
246 mutex_unlock(&ddata->lock); in num_dsi_errors_show()
257 struct panel_drv_data *ddata = dev_get_drvdata(dev); in hw_revision_show() local
261 mutex_lock(&ddata->lock); in hw_revision_show()
263 if (ddata->enabled) in hw_revision_show()
264 r = dsicm_get_id(ddata, &id1, &id2, &id3); in hw_revision_show()
266 mutex_unlock(&ddata->lock); in hw_revision_show()
287 static void dsicm_hw_reset(struct panel_drv_data *ddata) in dsicm_hw_reset() argument
289 gpiod_set_value(ddata->reset_gpio, 1); in dsicm_hw_reset()
292 gpiod_set_value(ddata->reset_gpio, 0); in dsicm_hw_reset()
295 gpiod_set_value(ddata->reset_gpio, 1); in dsicm_hw_reset()
300 static int dsicm_power_on(struct panel_drv_data *ddata) in dsicm_power_on() argument
305 dsicm_hw_reset(ddata); in dsicm_power_on()
307 ddata->dsi->mode_flags |= MIPI_DSI_MODE_LPM; in dsicm_power_on()
309 r = dsicm_sleep_out(ddata); in dsicm_power_on()
313 r = dsicm_get_id(ddata, &id1, &id2, &id3); in dsicm_power_on()
317 r = dsicm_dcs_write_1(ddata, MIPI_DCS_SET_DISPLAY_BRIGHTNESS, 0xff); in dsicm_power_on()
321 r = dsicm_dcs_write_1(ddata, MIPI_DCS_WRITE_CONTROL_DISPLAY, in dsicm_power_on()
326 r = mipi_dsi_dcs_set_pixel_format(ddata->dsi, MIPI_DCS_PIXEL_FMT_24BIT); in dsicm_power_on()
330 r = dsicm_set_update_window(ddata); in dsicm_power_on()
334 r = mipi_dsi_dcs_set_display_on(ddata->dsi); in dsicm_power_on()
338 if (ddata->panel_data->te_support) { in dsicm_power_on()
339 r = mipi_dsi_dcs_set_tear_on(ddata->dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK); in dsicm_power_on()
347 ddata->enabled = true; in dsicm_power_on()
349 if (!ddata->intro_printed) { in dsicm_power_on()
350 dev_info(&ddata->dsi->dev, "panel revision %02x.%02x.%02x\n", in dsicm_power_on()
352 ddata->intro_printed = true; in dsicm_power_on()
355 ddata->dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in dsicm_power_on()
359 dev_err(&ddata->dsi->dev, "error while enabling panel, issuing HW reset\n"); in dsicm_power_on()
361 dsicm_hw_reset(ddata); in dsicm_power_on()
366 static int dsicm_power_off(struct panel_drv_data *ddata) in dsicm_power_off() argument
370 ddata->enabled = false; in dsicm_power_off()
372 r = mipi_dsi_dcs_set_display_off(ddata->dsi); in dsicm_power_off()
374 r = dsicm_sleep_in(ddata); in dsicm_power_off()
377 dev_err(&ddata->dsi->dev, in dsicm_power_off()
379 dsicm_hw_reset(ddata); in dsicm_power_off()
387 struct panel_drv_data *ddata = panel_to_ddata(panel); in dsicm_prepare() local
390 r = regulator_bulk_enable(ARRAY_SIZE(ddata->supplies), ddata->supplies); in dsicm_prepare()
392 dev_err(&ddata->dsi->dev, "failed to enable supplies: %d\n", r); in dsicm_prepare()
399 struct panel_drv_data *ddata = panel_to_ddata(panel); in dsicm_enable() local
402 mutex_lock(&ddata->lock); in dsicm_enable()
404 r = dsicm_power_on(ddata); in dsicm_enable()
408 mutex_unlock(&ddata->lock); in dsicm_enable()
410 dsicm_bl_power(ddata, true); in dsicm_enable()
414 dev_err(&ddata->dsi->dev, "enable failed (%d)\n", r); in dsicm_enable()
415 mutex_unlock(&ddata->lock); in dsicm_enable()
421 struct panel_drv_data *ddata = panel_to_ddata(panel); in dsicm_unprepare() local
424 r = regulator_bulk_disable(ARRAY_SIZE(ddata->supplies), ddata->supplies); in dsicm_unprepare()
426 dev_err(&ddata->dsi->dev, "failed to disable supplies: %d\n", r); in dsicm_unprepare()
433 struct panel_drv_data *ddata = panel_to_ddata(panel); in dsicm_disable() local
436 dsicm_bl_power(ddata, false); in dsicm_disable()
438 mutex_lock(&ddata->lock); in dsicm_disable()
440 r = dsicm_power_off(ddata); in dsicm_disable()
442 mutex_unlock(&ddata->lock); in dsicm_disable()
450 struct panel_drv_data *ddata = panel_to_ddata(panel); in dsicm_get_modes() local
453 mode = drm_mode_duplicate(connector->dev, &ddata->mode); in dsicm_get_modes()
455 dev_err(&ddata->dsi->dev, "failed to add mode %ux%ux@%u kHz\n", in dsicm_get_modes()
456 ddata->mode.hdisplay, ddata->mode.vdisplay, in dsicm_get_modes()
457 ddata->mode.clock); in dsicm_get_modes()
461 connector->display_info.width_mm = ddata->panel_data->width_mm; in dsicm_get_modes()
462 connector->display_info.height_mm = ddata->panel_data->height_mm; in dsicm_get_modes()
480 struct panel_drv_data *ddata = mipi_dsi_get_drvdata(dsi); in dsicm_probe_of() local
482 struct drm_display_mode *mode = &ddata->mode; in dsicm_probe_of()
484 ddata->reset_gpio = devm_gpiod_get(&dsi->dev, "reset", GPIOD_OUT_LOW); in dsicm_probe_of()
485 if (IS_ERR(ddata->reset_gpio)) { in dsicm_probe_of()
486 err = PTR_ERR(ddata->reset_gpio); in dsicm_probe_of()
492 ddata->panel_data->xres; in dsicm_probe_of()
494 ddata->panel_data->yres; in dsicm_probe_of()
495 mode->clock = ddata->panel_data->xres * ddata->panel_data->yres * in dsicm_probe_of()
496 ddata->panel_data->refresh / 1000; in dsicm_probe_of()
497 mode->width_mm = ddata->panel_data->width_mm; in dsicm_probe_of()
498 mode->height_mm = ddata->panel_data->height_mm; in dsicm_probe_of()
502 ddata->supplies[0].supply = "vpnl"; in dsicm_probe_of()
503 ddata->supplies[1].supply = "vddi"; in dsicm_probe_of()
504 err = devm_regulator_bulk_get(&dsi->dev, ARRAY_SIZE(ddata->supplies), in dsicm_probe_of()
505 ddata->supplies); in dsicm_probe_of()
515 ddata->extbldev = backlight; in dsicm_probe_of()
517 ddata->use_dsi_backlight = true; in dsicm_probe_of()
524 struct panel_drv_data *ddata; in dsicm_probe() local
531 ddata = devm_kzalloc(dev, sizeof(*ddata), GFP_KERNEL); in dsicm_probe()
532 if (!ddata) in dsicm_probe()
535 mipi_dsi_set_drvdata(dsi, ddata); in dsicm_probe()
536 ddata->dsi = dsi; in dsicm_probe()
538 ddata->panel_data = of_device_get_match_data(dev); in dsicm_probe()
539 if (!ddata->panel_data) in dsicm_probe()
546 mutex_init(&ddata->lock); in dsicm_probe()
548 dsicm_hw_reset(ddata); in dsicm_probe()
550 drm_panel_init(&ddata->panel, dev, &dsicm_panel_funcs, in dsicm_probe()
553 if (ddata->use_dsi_backlight) { in dsicm_probe()
559 dev, ddata, &dsicm_bl_ops, &props); in dsicm_probe()
565 ddata->bldev = bldev; in dsicm_probe()
578 dsi->hs_rate = ddata->panel_data->max_hs_rate; in dsicm_probe()
579 dsi->lp_rate = ddata->panel_data->max_lp_rate; in dsicm_probe()
581 drm_panel_add(&ddata->panel); in dsicm_probe()
590 drm_panel_remove(&ddata->panel); in dsicm_probe()
593 if (ddata->extbldev) in dsicm_probe()
594 put_device(&ddata->extbldev->dev); in dsicm_probe()
601 struct panel_drv_data *ddata = mipi_dsi_get_drvdata(dsi); in dsicm_remove() local
607 drm_panel_remove(&ddata->panel); in dsicm_remove()
611 if (ddata->extbldev) in dsicm_remove()
612 put_device(&ddata->extbldev->dev); in dsicm_remove()