Lines Matching refs:md

68 static void mipid_transfer(struct mipid_device *md, int cmd, const u8 *wbuf,  in mipid_transfer()  argument
76 BUG_ON(md->spi == NULL); in mipid_transfer()
117 r = spi_sync(md->spi, &m); in mipid_transfer()
119 dev_dbg(&md->spi->dev, "spi_sync %d\n", r); in mipid_transfer()
125 static inline void mipid_cmd(struct mipid_device *md, int cmd) in mipid_cmd() argument
127 mipid_transfer(md, cmd, NULL, 0, NULL, 0); in mipid_cmd()
130 static inline void mipid_write(struct mipid_device *md, in mipid_write() argument
133 mipid_transfer(md, reg, buf, len, NULL, 0); in mipid_write()
136 static inline void mipid_read(struct mipid_device *md, in mipid_read() argument
139 mipid_transfer(md, reg, NULL, 0, buf, len); in mipid_read()
142 static void set_data_lines(struct mipid_device *md, int data_lines) in set_data_lines() argument
157 mipid_write(md, 0x3a, (u8 *)&par, 2); in set_data_lines()
160 static void send_init_string(struct mipid_device *md) in send_init_string() argument
164 mipid_write(md, 0xc2, (u8 *)initpar, sizeof(initpar)); in send_init_string()
165 set_data_lines(md, md->panel.data_lines); in send_init_string()
168 static void hw_guard_start(struct mipid_device *md, int guard_msec) in hw_guard_start() argument
170 md->hw_guard_wait = msecs_to_jiffies(guard_msec); in hw_guard_start()
171 md->hw_guard_end = jiffies + md->hw_guard_wait; in hw_guard_start()
174 static void hw_guard_wait(struct mipid_device *md) in hw_guard_wait() argument
176 unsigned long wait = md->hw_guard_end - jiffies; in hw_guard_wait()
178 if ((long)wait > 0 && wait <= md->hw_guard_wait) { in hw_guard_wait()
184 static void set_sleep_mode(struct mipid_device *md, int on) in set_sleep_mode() argument
192 hw_guard_wait(md); in set_sleep_mode()
193 mipid_cmd(md, cmd); in set_sleep_mode()
194 hw_guard_start(md, 120); in set_sleep_mode()
206 static void set_display_state(struct mipid_device *md, int enabled) in set_display_state() argument
210 mipid_cmd(md, cmd); in set_display_state()
215 struct mipid_device *md = to_mipid_device(panel); in mipid_set_bklight_level() local
216 struct mipid_platform_data *pd = md->spi->dev.platform_data; in mipid_set_bklight_level()
222 if (!md->enabled) { in mipid_set_bklight_level()
223 md->saved_bklight_level = level; in mipid_set_bklight_level()
233 struct mipid_device *md = to_mipid_device(panel); in mipid_get_bklight_level() local
234 struct mipid_platform_data *pd = md->spi->dev.platform_data; in mipid_get_bklight_level()
243 struct mipid_device *md = to_mipid_device(panel); in mipid_get_bklight_max() local
244 struct mipid_platform_data *pd = md->spi->dev.platform_data; in mipid_get_bklight_max()
257 static u16 read_first_pixel(struct mipid_device *md) in read_first_pixel() argument
262 mutex_lock(&md->mutex); in read_first_pixel()
263 mipid_read(md, MIPID_CMD_READ_RED, &red, 1); in read_first_pixel()
264 mipid_read(md, MIPID_CMD_READ_GREEN, &green, 1); in read_first_pixel()
265 mipid_read(md, MIPID_CMD_READ_BLUE, &blue, 1); in read_first_pixel()
266 mutex_unlock(&md->mutex); in read_first_pixel()
268 switch (md->panel.data_lines) { in read_first_pixel()
287 struct mipid_device *md = to_mipid_device(panel); in mipid_run_test() local
300 omapfb_write_first_pixel(md->fbdev, test_values[i]); in mipid_run_test()
307 pixel = read_first_pixel(md); in mipid_run_test()
311 dev_err(&md->spi->dev, in mipid_run_test()
324 static void ls041y3_esd_recover(struct mipid_device *md) in ls041y3_esd_recover() argument
326 dev_err(&md->spi->dev, "performing LCD ESD recovery\n"); in ls041y3_esd_recover()
327 set_sleep_mode(md, 1); in ls041y3_esd_recover()
328 set_sleep_mode(md, 0); in ls041y3_esd_recover()
331 static void ls041y3_esd_check_mode1(struct mipid_device *md) in ls041y3_esd_check_mode1() argument
335 mipid_read(md, MIPID_CMD_RDDSDR, &state1, 1); in ls041y3_esd_check_mode1()
336 set_sleep_mode(md, 0); in ls041y3_esd_check_mode1()
337 mipid_read(md, MIPID_CMD_RDDSDR, &state2, 1); in ls041y3_esd_check_mode1()
338 dev_dbg(&md->spi->dev, "ESD mode 1 state1 %02x state2 %02x\n", in ls041y3_esd_check_mode1()
344 ls041y3_esd_recover(md); in ls041y3_esd_check_mode1()
347 static void ls041y3_esd_check_mode2(struct mipid_device *md) in ls041y3_esd_check_mode2() argument
367 mipid_write(md, rd->cmd, (u8 *)rd->wbuf, rd->wlen); in ls041y3_esd_check_mode2()
370 mipid_read(md, rd->cmd, rbuf, 2); in ls041y3_esd_check_mode2()
375 mipid_write(md, rd->cmd, (u8 *)rd->wbuf, rd->wlen); in ls041y3_esd_check_mode2()
378 dev_dbg(&md->spi->dev, "ESD mode 2 state %02x\n", rbuf[1]); in ls041y3_esd_check_mode2()
380 ls041y3_esd_recover(md); in ls041y3_esd_check_mode2()
383 static void ls041y3_esd_check(struct mipid_device *md) in ls041y3_esd_check() argument
385 ls041y3_esd_check_mode1(md); in ls041y3_esd_check()
386 if (md->revision >= 0x88) in ls041y3_esd_check()
387 ls041y3_esd_check_mode2(md); in ls041y3_esd_check()
390 static void mipid_esd_start_check(struct mipid_device *md) in mipid_esd_start_check() argument
392 if (md->esd_check != NULL) in mipid_esd_start_check()
393 queue_delayed_work(md->esd_wq, &md->esd_work, in mipid_esd_start_check()
397 static void mipid_esd_stop_check(struct mipid_device *md) in mipid_esd_stop_check() argument
399 if (md->esd_check != NULL) in mipid_esd_stop_check()
400 cancel_delayed_work_sync(&md->esd_work); in mipid_esd_stop_check()
405 struct mipid_device *md = container_of(work, struct mipid_device, in mipid_esd_work() local
408 mutex_lock(&md->mutex); in mipid_esd_work()
409 md->esd_check(md); in mipid_esd_work()
410 mutex_unlock(&md->mutex); in mipid_esd_work()
411 mipid_esd_start_check(md); in mipid_esd_work()
416 struct mipid_device *md = to_mipid_device(panel); in mipid_enable() local
418 mutex_lock(&md->mutex); in mipid_enable()
420 if (md->enabled) { in mipid_enable()
421 mutex_unlock(&md->mutex); in mipid_enable()
424 set_sleep_mode(md, 0); in mipid_enable()
425 md->enabled = 1; in mipid_enable()
426 send_init_string(md); in mipid_enable()
427 set_display_state(md, 1); in mipid_enable()
428 mipid_set_bklight_level(panel, md->saved_bklight_level); in mipid_enable()
429 mipid_esd_start_check(md); in mipid_enable()
431 mutex_unlock(&md->mutex); in mipid_enable()
437 struct mipid_device *md = to_mipid_device(panel); in mipid_disable() local
443 mipid_esd_stop_check(md); in mipid_disable()
444 mutex_lock(&md->mutex); in mipid_disable()
446 if (!md->enabled) { in mipid_disable()
447 mutex_unlock(&md->mutex); in mipid_disable()
450 md->saved_bklight_level = mipid_get_bklight_level(panel); in mipid_disable()
452 set_display_state(md, 0); in mipid_disable()
453 set_sleep_mode(md, 1); in mipid_disable()
454 md->enabled = 0; in mipid_disable()
456 mutex_unlock(&md->mutex); in mipid_disable()
459 static int panel_enabled(struct mipid_device *md) in panel_enabled() argument
464 mipid_read(md, MIPID_CMD_READ_DISP_STATUS, (u8 *)&disp_status, 4); in panel_enabled()
467 dev_dbg(&md->spi->dev, in panel_enabled()
476 struct mipid_device *md = to_mipid_device(panel); in mipid_init() local
478 md->fbdev = fbdev; in mipid_init()
479 md->esd_wq = create_singlethread_workqueue("mipid_esd"); in mipid_init()
480 if (md->esd_wq == NULL) { in mipid_init()
481 dev_err(&md->spi->dev, "can't create ESD workqueue\n"); in mipid_init()
484 INIT_DELAYED_WORK(&md->esd_work, mipid_esd_work); in mipid_init()
485 mutex_init(&md->mutex); in mipid_init()
487 md->enabled = panel_enabled(md); in mipid_init()
489 if (md->enabled) in mipid_init()
490 mipid_esd_start_check(md); in mipid_init()
492 md->saved_bklight_level = mipid_get_bklight_level(panel); in mipid_init()
499 struct mipid_device *md = to_mipid_device(panel); in mipid_cleanup() local
501 if (md->enabled) in mipid_cleanup()
502 mipid_esd_stop_check(md); in mipid_cleanup()
503 destroy_workqueue(md->esd_wq); in mipid_cleanup()
531 static int mipid_detect(struct mipid_device *md) in mipid_detect() argument
536 pdata = md->spi->dev.platform_data; in mipid_detect()
538 dev_err(&md->spi->dev, "missing platform data\n"); in mipid_detect()
542 mipid_read(md, MIPID_CMD_READ_DISP_ID, display_id, 3); in mipid_detect()
543 dev_dbg(&md->spi->dev, "MIPI display ID: %02x%02x%02x\n", in mipid_detect()
548 md->panel.name = "lph8923"; in mipid_detect()
551 md->panel.name = "ls041y3"; in mipid_detect()
552 md->esd_check = ls041y3_esd_check; in mipid_detect()
555 md->panel.name = "unknown"; in mipid_detect()
556 dev_err(&md->spi->dev, "invalid display ID\n"); in mipid_detect()
560 md->revision = display_id[1]; in mipid_detect()
561 md->panel.data_lines = pdata->data_lines; in mipid_detect()
563 md->panel.name, md->revision, md->panel.data_lines); in mipid_detect()
570 struct mipid_device *md; in mipid_spi_probe() local
573 md = kzalloc(sizeof(*md), GFP_KERNEL); in mipid_spi_probe()
574 if (md == NULL) { in mipid_spi_probe()
580 md->spi = spi; in mipid_spi_probe()
581 dev_set_drvdata(&spi->dev, md); in mipid_spi_probe()
582 md->panel = mipid_panel; in mipid_spi_probe()
584 r = mipid_detect(md); in mipid_spi_probe()
588 omapfb_register_panel(&md->panel); in mipid_spi_probe()
595 struct mipid_device *md = dev_get_drvdata(&spi->dev); in mipid_spi_remove() local
597 mipid_disable(&md->panel); in mipid_spi_remove()
598 kfree(md); in mipid_spi_remove()