Lines Matching refs:ddata

104 static void acx565akm_transfer(struct panel_drv_data *ddata, int cmd,  in acx565akm_transfer()  argument
111 BUG_ON(ddata->spi == NULL); in acx565akm_transfer()
149 r = spi_sync(ddata->spi, &m); in acx565akm_transfer()
151 dev_dbg(&ddata->spi->dev, "spi_sync %d\n", r); in acx565akm_transfer()
154 static inline void acx565akm_cmd(struct panel_drv_data *ddata, int cmd) in acx565akm_cmd() argument
156 acx565akm_transfer(ddata, cmd, NULL, 0, NULL, 0); in acx565akm_cmd()
159 static inline void acx565akm_write(struct panel_drv_data *ddata, in acx565akm_write() argument
162 acx565akm_transfer(ddata, reg, buf, len, NULL, 0); in acx565akm_write()
165 static inline void acx565akm_read(struct panel_drv_data *ddata, in acx565akm_read() argument
168 acx565akm_transfer(ddata, reg, NULL, 0, buf, len); in acx565akm_read()
171 static void hw_guard_start(struct panel_drv_data *ddata, int guard_msec) in hw_guard_start() argument
173 ddata->hw_guard_wait = msecs_to_jiffies(guard_msec); in hw_guard_start()
174 ddata->hw_guard_end = jiffies + ddata->hw_guard_wait; in hw_guard_start()
177 static void hw_guard_wait(struct panel_drv_data *ddata) in hw_guard_wait() argument
179 unsigned long wait = ddata->hw_guard_end - jiffies; in hw_guard_wait()
181 if ((long)wait > 0 && wait <= ddata->hw_guard_wait) { in hw_guard_wait()
187 static void set_sleep_mode(struct panel_drv_data *ddata, int on) in set_sleep_mode() argument
199 hw_guard_wait(ddata); in set_sleep_mode()
200 acx565akm_cmd(ddata, cmd); in set_sleep_mode()
201 hw_guard_start(ddata, 120); in set_sleep_mode()
204 static void set_display_state(struct panel_drv_data *ddata, int enabled) in set_display_state() argument
208 acx565akm_cmd(ddata, cmd); in set_display_state()
211 static int panel_enabled(struct panel_drv_data *ddata) in panel_enabled() argument
216 acx565akm_read(ddata, MIPID_CMD_READ_DISP_STATUS, in panel_enabled()
220 dev_dbg(&ddata->spi->dev, in panel_enabled()
226 static int panel_detect(struct panel_drv_data *ddata) in panel_detect() argument
228 acx565akm_read(ddata, MIPID_CMD_READ_DISP_ID, ddata->display_id, 3); in panel_detect()
229 dev_dbg(&ddata->spi->dev, "MIPI display ID: %02x%02x%02x\n", in panel_detect()
230 ddata->display_id[0], in panel_detect()
231 ddata->display_id[1], in panel_detect()
232 ddata->display_id[2]); in panel_detect()
234 switch (ddata->display_id[0]) { in panel_detect()
236 ddata->model = MIPID_VER_ACX565AKM; in panel_detect()
237 ddata->name = "acx565akm"; in panel_detect()
238 ddata->has_bc = 1; in panel_detect()
239 ddata->has_cabc = 1; in panel_detect()
242 ddata->model = MIPID_VER_L4F00311; in panel_detect()
243 ddata->name = "l4f00311"; in panel_detect()
246 ddata->model = MIPID_VER_LPH8923; in panel_detect()
247 ddata->name = "lph8923"; in panel_detect()
250 ddata->model = MIPID_VER_LS041Y3; in panel_detect()
251 ddata->name = "ls041y3"; in panel_detect()
254 ddata->name = "unknown"; in panel_detect()
255 dev_err(&ddata->spi->dev, "invalid display ID\n"); in panel_detect()
259 ddata->revision = ddata->display_id[1]; in panel_detect()
261 dev_info(&ddata->spi->dev, "omapfb: %s rev %02x LCD detected\n", in panel_detect()
262 ddata->name, ddata->revision); in panel_detect()
269 static void enable_backlight_ctrl(struct panel_drv_data *ddata, int enable) in enable_backlight_ctrl() argument
273 acx565akm_read(ddata, MIPID_CMD_READ_CTRL_DISP, (u8 *)&ctrl, 1); in enable_backlight_ctrl()
283 acx565akm_write(ddata, MIPID_CMD_WRITE_CTRL_DISP, (u8 *)&ctrl, 2); in enable_backlight_ctrl()
286 static void set_cabc_mode(struct panel_drv_data *ddata, unsigned mode) in set_cabc_mode() argument
290 ddata->cabc_mode = mode; in set_cabc_mode()
291 if (!ddata->enabled) in set_cabc_mode()
294 acx565akm_read(ddata, MIPID_CMD_READ_CABC, (u8 *)&cabc_ctrl, 1); in set_cabc_mode()
297 acx565akm_write(ddata, MIPID_CMD_WRITE_CABC, (u8 *)&cabc_ctrl, 2); in set_cabc_mode()
300 static unsigned get_cabc_mode(struct panel_drv_data *ddata) in get_cabc_mode() argument
302 return ddata->cabc_mode; in get_cabc_mode()
305 static unsigned get_hw_cabc_mode(struct panel_drv_data *ddata) in get_hw_cabc_mode() argument
309 acx565akm_read(ddata, MIPID_CMD_READ_CABC, &cabc_ctrl, 1); in get_hw_cabc_mode()
313 static void acx565akm_set_brightness(struct panel_drv_data *ddata, int level) in acx565akm_set_brightness() argument
318 acx565akm_write(ddata, MIPID_CMD_WRITE_DISP_BRIGHTNESS, (u8 *)&bv, 2); in acx565akm_set_brightness()
321 enable_backlight_ctrl(ddata, 1); in acx565akm_set_brightness()
323 enable_backlight_ctrl(ddata, 0); in acx565akm_set_brightness()
326 static int acx565akm_get_actual_brightness(struct panel_drv_data *ddata) in acx565akm_get_actual_brightness() argument
330 acx565akm_read(ddata, MIPID_CMD_READ_DISP_BRIGHTNESS, &bv, 1); in acx565akm_get_actual_brightness()
338 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in acx565akm_bl_update_status() local
341 dev_dbg(&ddata->spi->dev, "%s\n", __func__); in acx565akm_bl_update_status()
349 if (ddata->has_bc) in acx565akm_bl_update_status()
350 acx565akm_set_brightness(ddata, level); in acx565akm_bl_update_status()
359 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in acx565akm_bl_get_intensity() local
363 if (!ddata->has_bc) in acx565akm_bl_get_intensity()
368 if (ddata->has_bc) in acx565akm_bl_get_intensity()
369 return acx565akm_get_actual_brightness(ddata); in acx565akm_bl_get_intensity()
379 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in acx565akm_bl_update_status_locked() local
382 mutex_lock(&ddata->mutex); in acx565akm_bl_update_status_locked()
384 mutex_unlock(&ddata->mutex); in acx565akm_bl_update_status_locked()
391 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in acx565akm_bl_get_intensity_locked() local
394 mutex_lock(&ddata->mutex); in acx565akm_bl_get_intensity_locked()
396 mutex_unlock(&ddata->mutex); in acx565akm_bl_get_intensity_locked()
419 struct panel_drv_data *ddata = dev_get_drvdata(dev); in show_cabc_mode() local
424 if (!ddata->has_cabc) in show_cabc_mode()
427 mode = get_cabc_mode(ddata); in show_cabc_mode()
440 struct panel_drv_data *ddata = dev_get_drvdata(dev); in store_cabc_mode() local
459 if (!ddata->has_cabc && i != 0) in store_cabc_mode()
462 mutex_lock(&ddata->mutex); in store_cabc_mode()
463 set_cabc_mode(ddata, i); in store_cabc_mode()
464 mutex_unlock(&ddata->mutex); in store_cabc_mode()
473 struct panel_drv_data *ddata = dev_get_drvdata(dev); in show_cabc_available_modes() local
477 if (!ddata->has_cabc) in show_cabc_available_modes()
506 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_connect() local
507 struct omap_dss_device *in = ddata->in; in acx565akm_connect()
517 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_disconnect() local
518 struct omap_dss_device *in = ddata->in; in acx565akm_disconnect()
528 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_panel_power_on() local
529 struct omap_dss_device *in = ddata->in; in acx565akm_panel_power_on()
532 dev_dbg(&ddata->spi->dev, "%s\n", __func__); in acx565akm_panel_power_on()
534 in->ops.sdi->set_timings(in, &ddata->videomode); in acx565akm_panel_power_on()
536 if (ddata->datapairs > 0) in acx565akm_panel_power_on()
537 in->ops.sdi->set_datapairs(in, ddata->datapairs); in acx565akm_panel_power_on()
553 if (ddata->reset_gpio) in acx565akm_panel_power_on()
554 gpiod_set_value_cansleep(ddata->reset_gpio, 1); in acx565akm_panel_power_on()
556 if (ddata->enabled) { in acx565akm_panel_power_on()
557 dev_dbg(&ddata->spi->dev, "panel already enabled\n"); in acx565akm_panel_power_on()
571 set_sleep_mode(ddata, 0); in acx565akm_panel_power_on()
572 ddata->enabled = 1; in acx565akm_panel_power_on()
576 set_display_state(ddata, 1); in acx565akm_panel_power_on()
577 set_cabc_mode(ddata, ddata->cabc_mode); in acx565akm_panel_power_on()
579 return acx565akm_bl_update_status(ddata->bl_dev); in acx565akm_panel_power_on()
584 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_panel_power_off() local
585 struct omap_dss_device *in = ddata->in; in acx565akm_panel_power_off()
589 if (!ddata->enabled) in acx565akm_panel_power_off()
592 set_display_state(ddata, 0); in acx565akm_panel_power_off()
593 set_sleep_mode(ddata, 1); in acx565akm_panel_power_off()
594 ddata->enabled = 0; in acx565akm_panel_power_off()
604 if (ddata->reset_gpio) in acx565akm_panel_power_off()
605 gpiod_set_value_cansleep(ddata->reset_gpio, 0); in acx565akm_panel_power_off()
615 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_enable() local
626 mutex_lock(&ddata->mutex); in acx565akm_enable()
628 mutex_unlock(&ddata->mutex); in acx565akm_enable()
639 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_disable() local
646 mutex_lock(&ddata->mutex); in acx565akm_disable()
648 mutex_unlock(&ddata->mutex); in acx565akm_disable()
656 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_set_timings() local
657 struct omap_dss_device *in = ddata->in; in acx565akm_set_timings()
659 ddata->videomode = *timings; in acx565akm_set_timings()
668 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_get_timings() local
670 *timings = ddata->videomode; in acx565akm_get_timings()
676 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_check_timings() local
677 struct omap_dss_device *in = ddata->in; in acx565akm_check_timings()
698 struct panel_drv_data *ddata; in acx565akm_probe() local
712 ddata = devm_kzalloc(&spi->dev, sizeof(*ddata), GFP_KERNEL); in acx565akm_probe()
713 if (ddata == NULL) in acx565akm_probe()
716 dev_set_drvdata(&spi->dev, ddata); in acx565akm_probe()
718 ddata->spi = spi; in acx565akm_probe()
720 mutex_init(&ddata->mutex); in acx565akm_probe()
722 ddata->in = omapdss_of_find_source_for_first_ep(spi->dev.of_node); in acx565akm_probe()
723 r = PTR_ERR_OR_ZERO(ddata->in); in acx565akm_probe()
729 ddata->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset", in acx565akm_probe()
731 r = PTR_ERR_OR_ZERO(ddata->reset_gpio); in acx565akm_probe()
735 if (ddata->reset_gpio) { in acx565akm_probe()
736 gpiod_set_consumer_name(ddata->reset_gpio, "lcd reset"); in acx565akm_probe()
739 gpiod_set_value_cansleep(ddata->reset_gpio, 1); in acx565akm_probe()
748 ddata->enabled = panel_enabled(ddata); in acx565akm_probe()
750 r = panel_detect(ddata); in acx565akm_probe()
752 if (!ddata->enabled && ddata->reset_gpio) in acx565akm_probe()
753 gpiod_set_value_cansleep(ddata->reset_gpio, 0); in acx565akm_probe()
765 bldev = backlight_device_register("acx565akm", &ddata->spi->dev, in acx565akm_probe()
766 ddata, &acx565akm_bl_ops, &props); in acx565akm_probe()
771 ddata->bl_dev = bldev; in acx565akm_probe()
772 if (ddata->has_cabc) { in acx565akm_probe()
779 ddata->cabc_mode = get_hw_cabc_mode(ddata); in acx565akm_probe()
784 if (ddata->has_bc) in acx565akm_probe()
785 brightness = acx565akm_get_actual_brightness(ddata); in acx565akm_probe()
795 ddata->videomode = acx565akm_panel_timings; in acx565akm_probe()
797 dssdev = &ddata->dssdev; in acx565akm_probe()
802 dssdev->panel.timings = ddata->videomode; in acx565akm_probe()
819 omap_dss_put_device(ddata->in); in acx565akm_probe()
825 struct panel_drv_data *ddata = dev_get_drvdata(&spi->dev); in acx565akm_remove() local
826 struct omap_dss_device *dssdev = &ddata->dssdev; in acx565akm_remove()
827 struct omap_dss_device *in = ddata->in; in acx565akm_remove()
829 dev_dbg(&ddata->spi->dev, "%s\n", __func__); in acx565akm_remove()
831 sysfs_remove_group(&ddata->bl_dev->dev.kobj, &bldev_attr_group); in acx565akm_remove()
832 backlight_device_unregister(ddata->bl_dev); in acx565akm_remove()