Lines Matching refs:ddata
116 static void acx565akm_transfer(struct panel_drv_data *ddata, int cmd, in acx565akm_transfer() argument
123 BUG_ON(ddata->spi == NULL); in acx565akm_transfer()
161 r = spi_sync(ddata->spi, &m); in acx565akm_transfer()
163 dev_dbg(&ddata->spi->dev, "spi_sync %d\n", r); in acx565akm_transfer()
166 static inline void acx565akm_cmd(struct panel_drv_data *ddata, int cmd) in acx565akm_cmd() argument
168 acx565akm_transfer(ddata, cmd, NULL, 0, NULL, 0); in acx565akm_cmd()
171 static inline void acx565akm_write(struct panel_drv_data *ddata, in acx565akm_write() argument
174 acx565akm_transfer(ddata, reg, buf, len, NULL, 0); in acx565akm_write()
177 static inline void acx565akm_read(struct panel_drv_data *ddata, in acx565akm_read() argument
180 acx565akm_transfer(ddata, reg, NULL, 0, buf, len); in acx565akm_read()
183 static void hw_guard_start(struct panel_drv_data *ddata, int guard_msec) in hw_guard_start() argument
185 ddata->hw_guard_wait = msecs_to_jiffies(guard_msec); in hw_guard_start()
186 ddata->hw_guard_end = jiffies + ddata->hw_guard_wait; in hw_guard_start()
189 static void hw_guard_wait(struct panel_drv_data *ddata) in hw_guard_wait() argument
191 unsigned long wait = ddata->hw_guard_end - jiffies; in hw_guard_wait()
193 if ((long)wait > 0 && wait <= ddata->hw_guard_wait) { in hw_guard_wait()
199 static void set_sleep_mode(struct panel_drv_data *ddata, int on) in set_sleep_mode() argument
211 hw_guard_wait(ddata); in set_sleep_mode()
212 acx565akm_cmd(ddata, cmd); in set_sleep_mode()
213 hw_guard_start(ddata, 120); in set_sleep_mode()
216 static void set_display_state(struct panel_drv_data *ddata, int enabled) in set_display_state() argument
220 acx565akm_cmd(ddata, cmd); in set_display_state()
223 static int panel_enabled(struct panel_drv_data *ddata) in panel_enabled() argument
228 acx565akm_read(ddata, MIPID_CMD_READ_DISP_STATUS, in panel_enabled()
232 dev_dbg(&ddata->spi->dev, in panel_enabled()
238 static int panel_detect(struct panel_drv_data *ddata) in panel_detect() argument
240 acx565akm_read(ddata, MIPID_CMD_READ_DISP_ID, ddata->display_id, 3); in panel_detect()
241 dev_dbg(&ddata->spi->dev, "MIPI display ID: %02x%02x%02x\n", in panel_detect()
242 ddata->display_id[0], in panel_detect()
243 ddata->display_id[1], in panel_detect()
244 ddata->display_id[2]); in panel_detect()
246 switch (ddata->display_id[0]) { in panel_detect()
248 ddata->model = MIPID_VER_ACX565AKM; in panel_detect()
249 ddata->name = "acx565akm"; in panel_detect()
250 ddata->has_bc = 1; in panel_detect()
251 ddata->has_cabc = 1; in panel_detect()
254 ddata->model = MIPID_VER_L4F00311; in panel_detect()
255 ddata->name = "l4f00311"; in panel_detect()
258 ddata->model = MIPID_VER_LPH8923; in panel_detect()
259 ddata->name = "lph8923"; in panel_detect()
262 ddata->model = MIPID_VER_LS041Y3; in panel_detect()
263 ddata->name = "ls041y3"; in panel_detect()
266 ddata->name = "unknown"; in panel_detect()
267 dev_err(&ddata->spi->dev, "invalid display ID\n"); in panel_detect()
271 ddata->revision = ddata->display_id[1]; in panel_detect()
273 dev_info(&ddata->spi->dev, "omapfb: %s rev %02x LCD detected\n", in panel_detect()
274 ddata->name, ddata->revision); in panel_detect()
281 static void enable_backlight_ctrl(struct panel_drv_data *ddata, int enable) in enable_backlight_ctrl() argument
285 acx565akm_read(ddata, MIPID_CMD_READ_CTRL_DISP, (u8 *)&ctrl, 1); in enable_backlight_ctrl()
295 acx565akm_write(ddata, MIPID_CMD_WRITE_CTRL_DISP, (u8 *)&ctrl, 2); in enable_backlight_ctrl()
298 static void set_cabc_mode(struct panel_drv_data *ddata, unsigned mode) in set_cabc_mode() argument
302 ddata->cabc_mode = mode; in set_cabc_mode()
303 if (!ddata->enabled) in set_cabc_mode()
306 acx565akm_read(ddata, MIPID_CMD_READ_CABC, (u8 *)&cabc_ctrl, 1); in set_cabc_mode()
309 acx565akm_write(ddata, MIPID_CMD_WRITE_CABC, (u8 *)&cabc_ctrl, 2); in set_cabc_mode()
312 static unsigned get_cabc_mode(struct panel_drv_data *ddata) in get_cabc_mode() argument
314 return ddata->cabc_mode; in get_cabc_mode()
317 static unsigned get_hw_cabc_mode(struct panel_drv_data *ddata) in get_hw_cabc_mode() argument
321 acx565akm_read(ddata, MIPID_CMD_READ_CABC, &cabc_ctrl, 1); in get_hw_cabc_mode()
325 static void acx565akm_set_brightness(struct panel_drv_data *ddata, int level) in acx565akm_set_brightness() argument
330 acx565akm_write(ddata, MIPID_CMD_WRITE_DISP_BRIGHTNESS, (u8 *)&bv, 2); in acx565akm_set_brightness()
333 enable_backlight_ctrl(ddata, 1); in acx565akm_set_brightness()
335 enable_backlight_ctrl(ddata, 0); in acx565akm_set_brightness()
338 static int acx565akm_get_actual_brightness(struct panel_drv_data *ddata) in acx565akm_get_actual_brightness() argument
342 acx565akm_read(ddata, MIPID_CMD_READ_DISP_BRIGHTNESS, &bv, 1); in acx565akm_get_actual_brightness()
350 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in acx565akm_bl_update_status() local
353 dev_dbg(&ddata->spi->dev, "%s\n", __func__); in acx565akm_bl_update_status()
361 if (ddata->has_bc) in acx565akm_bl_update_status()
362 acx565akm_set_brightness(ddata, level); in acx565akm_bl_update_status()
371 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in acx565akm_bl_get_intensity() local
375 if (!ddata->has_bc) in acx565akm_bl_get_intensity()
380 if (ddata->has_bc) in acx565akm_bl_get_intensity()
381 return acx565akm_get_actual_brightness(ddata); in acx565akm_bl_get_intensity()
391 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in acx565akm_bl_update_status_locked() local
394 mutex_lock(&ddata->mutex); in acx565akm_bl_update_status_locked()
396 mutex_unlock(&ddata->mutex); in acx565akm_bl_update_status_locked()
403 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); in acx565akm_bl_get_intensity_locked() local
406 mutex_lock(&ddata->mutex); in acx565akm_bl_get_intensity_locked()
408 mutex_unlock(&ddata->mutex); in acx565akm_bl_get_intensity_locked()
431 struct panel_drv_data *ddata = dev_get_drvdata(dev); in show_cabc_mode() local
436 if (!ddata->has_cabc) in show_cabc_mode()
439 mode = get_cabc_mode(ddata); in show_cabc_mode()
452 struct panel_drv_data *ddata = dev_get_drvdata(dev); in store_cabc_mode() local
471 if (!ddata->has_cabc && i != 0) in store_cabc_mode()
474 mutex_lock(&ddata->mutex); in store_cabc_mode()
475 set_cabc_mode(ddata, i); in store_cabc_mode()
476 mutex_unlock(&ddata->mutex); in store_cabc_mode()
485 struct panel_drv_data *ddata = dev_get_drvdata(dev); in show_cabc_available_modes() local
489 if (!ddata->has_cabc) in show_cabc_available_modes()
518 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_connect() local
519 struct omap_dss_device *in = ddata->in; in acx565akm_connect()
534 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_disconnect() local
535 struct omap_dss_device *in = ddata->in; in acx565akm_disconnect()
545 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_panel_power_on() local
546 struct omap_dss_device *in = ddata->in; in acx565akm_panel_power_on()
549 dev_dbg(&ddata->spi->dev, "%s\n", __func__); in acx565akm_panel_power_on()
551 in->ops.sdi->set_timings(in, &ddata->videomode); in acx565akm_panel_power_on()
553 if (ddata->datapairs > 0) in acx565akm_panel_power_on()
554 in->ops.sdi->set_datapairs(in, ddata->datapairs); in acx565akm_panel_power_on()
565 if (gpio_is_valid(ddata->reset_gpio)) in acx565akm_panel_power_on()
566 gpio_set_value(ddata->reset_gpio, 1); in acx565akm_panel_power_on()
568 if (ddata->enabled) { in acx565akm_panel_power_on()
569 dev_dbg(&ddata->spi->dev, "panel already enabled\n"); in acx565akm_panel_power_on()
583 set_sleep_mode(ddata, 0); in acx565akm_panel_power_on()
584 ddata->enabled = 1; in acx565akm_panel_power_on()
588 set_display_state(ddata, 1); in acx565akm_panel_power_on()
589 set_cabc_mode(ddata, ddata->cabc_mode); in acx565akm_panel_power_on()
591 return acx565akm_bl_update_status(ddata->bl_dev); in acx565akm_panel_power_on()
596 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_panel_power_off() local
597 struct omap_dss_device *in = ddata->in; in acx565akm_panel_power_off()
601 if (!ddata->enabled) in acx565akm_panel_power_off()
604 set_display_state(ddata, 0); in acx565akm_panel_power_off()
605 set_sleep_mode(ddata, 1); in acx565akm_panel_power_off()
606 ddata->enabled = 0; in acx565akm_panel_power_off()
615 if (gpio_is_valid(ddata->reset_gpio)) in acx565akm_panel_power_off()
616 gpio_set_value(ddata->reset_gpio, 0); in acx565akm_panel_power_off()
626 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_enable() local
637 mutex_lock(&ddata->mutex); in acx565akm_enable()
639 mutex_unlock(&ddata->mutex); in acx565akm_enable()
650 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_disable() local
657 mutex_lock(&ddata->mutex); in acx565akm_disable()
659 mutex_unlock(&ddata->mutex); in acx565akm_disable()
667 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_set_timings() local
668 struct omap_dss_device *in = ddata->in; in acx565akm_set_timings()
670 ddata->videomode = *timings; in acx565akm_set_timings()
679 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_get_timings() local
681 *timings = ddata->videomode; in acx565akm_get_timings()
687 struct panel_drv_data *ddata = to_panel_data(dssdev); in acx565akm_check_timings() local
688 struct omap_dss_device *in = ddata->in; in acx565akm_check_timings()
710 struct panel_drv_data *ddata = dev_get_drvdata(&spi->dev); in acx565akm_probe_pdata() local
715 ddata->reset_gpio = pdata->reset_gpio; in acx565akm_probe_pdata()
723 ddata->in = in; in acx565akm_probe_pdata()
725 ddata->datapairs = pdata->datapairs; in acx565akm_probe_pdata()
727 dssdev = &ddata->dssdev; in acx565akm_probe_pdata()
735 struct panel_drv_data *ddata = dev_get_drvdata(&spi->dev); in acx565akm_probe_of() local
738 ddata->reset_gpio = of_get_named_gpio(np, "reset-gpios", 0); in acx565akm_probe_of()
740 ddata->in = omapdss_of_find_source_for_first_ep(np); in acx565akm_probe_of()
741 if (IS_ERR(ddata->in)) { in acx565akm_probe_of()
743 return PTR_ERR(ddata->in); in acx565akm_probe_of()
751 struct panel_drv_data *ddata; in acx565akm_probe() local
762 ddata = devm_kzalloc(&spi->dev, sizeof(*ddata), GFP_KERNEL); in acx565akm_probe()
763 if (ddata == NULL) in acx565akm_probe()
766 dev_set_drvdata(&spi->dev, ddata); in acx565akm_probe()
768 ddata->spi = spi; in acx565akm_probe()
770 mutex_init(&ddata->mutex); in acx565akm_probe()
785 if (gpio_is_valid(ddata->reset_gpio)) { in acx565akm_probe()
786 r = devm_gpio_request_one(&spi->dev, ddata->reset_gpio, in acx565akm_probe()
792 if (gpio_is_valid(ddata->reset_gpio)) in acx565akm_probe()
793 gpio_set_value(ddata->reset_gpio, 1); in acx565akm_probe()
801 ddata->enabled = panel_enabled(ddata); in acx565akm_probe()
803 r = panel_detect(ddata); in acx565akm_probe()
805 if (!ddata->enabled && gpio_is_valid(ddata->reset_gpio)) in acx565akm_probe()
806 gpio_set_value(ddata->reset_gpio, 0); in acx565akm_probe()
818 bldev = backlight_device_register("acx565akm", &ddata->spi->dev, in acx565akm_probe()
819 ddata, &acx565akm_bl_ops, &props); in acx565akm_probe()
824 ddata->bl_dev = bldev; in acx565akm_probe()
825 if (ddata->has_cabc) { in acx565akm_probe()
832 ddata->cabc_mode = get_hw_cabc_mode(ddata); in acx565akm_probe()
837 if (ddata->has_bc) in acx565akm_probe()
838 brightness = acx565akm_get_actual_brightness(ddata); in acx565akm_probe()
848 ddata->videomode = acx565akm_panel_timings; in acx565akm_probe()
850 dssdev = &ddata->dssdev; in acx565akm_probe()
855 dssdev->panel.timings = ddata->videomode; in acx565akm_probe()
872 omap_dss_put_device(ddata->in); in acx565akm_probe()
878 struct panel_drv_data *ddata = dev_get_drvdata(&spi->dev); in acx565akm_remove() local
879 struct omap_dss_device *dssdev = &ddata->dssdev; in acx565akm_remove()
880 struct omap_dss_device *in = ddata->in; in acx565akm_remove()
882 dev_dbg(&ddata->spi->dev, "%s\n", __func__); in acx565akm_remove()
884 sysfs_remove_group(&ddata->bl_dev->dev.kobj, &bldev_attr_group); in acx565akm_remove()
885 backlight_device_unregister(ddata->bl_dev); in acx565akm_remove()