Lines Matching refs:ddata

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