Lines Matching refs:md

56 static void mipid_transfer(struct mipid_device *md, int cmd, const u8 *wbuf,
64 BUG_ON(md->spi == NULL);
105 r = spi_sync(md->spi, &m);
107 dev_dbg(&md->spi->dev, "spi_sync %d\n", r);
113 static inline void mipid_cmd(struct mipid_device *md, int cmd)
115 mipid_transfer(md, cmd, NULL, 0, NULL, 0);
118 static inline void mipid_write(struct mipid_device *md,
121 mipid_transfer(md, reg, buf, len, NULL, 0);
124 static inline void mipid_read(struct mipid_device *md,
127 mipid_transfer(md, reg, NULL, 0, buf, len);
130 static void set_data_lines(struct mipid_device *md, int data_lines)
145 mipid_write(md, 0x3a, (u8 *)&par, 2);
148 static void send_init_string(struct mipid_device *md)
152 mipid_write(md, 0xc2, (u8 *)initpar, sizeof(initpar));
153 set_data_lines(md, md->panel.data_lines);
156 static void hw_guard_start(struct mipid_device *md, int guard_msec)
158 md->hw_guard_wait = msecs_to_jiffies(guard_msec);
159 md->hw_guard_end = jiffies + md->hw_guard_wait;
162 static void hw_guard_wait(struct mipid_device *md)
164 unsigned long wait = md->hw_guard_end - jiffies;
166 if ((long)wait > 0 && time_before_eq(wait, md->hw_guard_wait)) {
172 static void set_sleep_mode(struct mipid_device *md, int on)
180 hw_guard_wait(md);
181 mipid_cmd(md, cmd);
182 hw_guard_start(md, 120);
194 static void set_display_state(struct mipid_device *md, int enabled)
198 mipid_cmd(md, cmd);
203 struct mipid_device *md = to_mipid_device(panel);
204 struct mipid_platform_data *pd = md->spi->dev.platform_data;
210 if (!md->enabled) {
211 md->saved_bklight_level = level;
221 struct mipid_device *md = to_mipid_device(panel);
222 struct mipid_platform_data *pd = md->spi->dev.platform_data;
231 struct mipid_device *md = to_mipid_device(panel);
232 struct mipid_platform_data *pd = md->spi->dev.platform_data;
245 static u16 read_first_pixel(struct mipid_device *md)
250 mutex_lock(&md->mutex);
251 mipid_read(md, MIPID_CMD_READ_RED, &red, 1);
252 mipid_read(md, MIPID_CMD_READ_GREEN, &green, 1);
253 mipid_read(md, MIPID_CMD_READ_BLUE, &blue, 1);
254 mutex_unlock(&md->mutex);
256 switch (md->panel.data_lines) {
275 struct mipid_device *md = to_mipid_device(panel);
288 omapfb_write_first_pixel(md->fbdev, test_values[i]);
295 pixel = read_first_pixel(md);
299 dev_err(&md->spi->dev,
312 static void ls041y3_esd_recover(struct mipid_device *md)
314 dev_err(&md->spi->dev, "performing LCD ESD recovery\n");
315 set_sleep_mode(md, 1);
316 set_sleep_mode(md, 0);
319 static void ls041y3_esd_check_mode1(struct mipid_device *md)
323 mipid_read(md, MIPID_CMD_RDDSDR, &state1, 1);
324 set_sleep_mode(md, 0);
325 mipid_read(md, MIPID_CMD_RDDSDR, &state2, 1);
326 dev_dbg(&md->spi->dev, "ESD mode 1 state1 %02x state2 %02x\n",
332 ls041y3_esd_recover(md);
335 static void ls041y3_esd_check_mode2(struct mipid_device *md)
355 mipid_write(md, rd->cmd, (u8 *)rd->wbuf, rd->wlen);
358 mipid_read(md, rd->cmd, rbuf, 2);
363 mipid_write(md, rd->cmd, (u8 *)rd->wbuf, rd->wlen);
366 dev_dbg(&md->spi->dev, "ESD mode 2 state %02x\n", rbuf[1]);
368 ls041y3_esd_recover(md);
371 static void ls041y3_esd_check(struct mipid_device *md)
373 ls041y3_esd_check_mode1(md);
374 if (md->revision >= 0x88)
375 ls041y3_esd_check_mode2(md);
378 static void mipid_esd_start_check(struct mipid_device *md)
380 if (md->esd_check != NULL)
381 schedule_delayed_work(&md->esd_work,
385 static void mipid_esd_stop_check(struct mipid_device *md)
387 if (md->esd_check != NULL)
388 cancel_delayed_work_sync(&md->esd_work);
393 struct mipid_device *md = container_of(work, struct mipid_device,
396 mutex_lock(&md->mutex);
397 md->esd_check(md);
398 mutex_unlock(&md->mutex);
399 mipid_esd_start_check(md);
404 struct mipid_device *md = to_mipid_device(panel);
406 mutex_lock(&md->mutex);
408 if (md->enabled) {
409 mutex_unlock(&md->mutex);
412 set_sleep_mode(md, 0);
413 md->enabled = 1;
414 send_init_string(md);
415 set_display_state(md, 1);
416 mipid_set_bklight_level(panel, md->saved_bklight_level);
417 mipid_esd_start_check(md);
419 mutex_unlock(&md->mutex);
425 struct mipid_device *md = to_mipid_device(panel);
431 mipid_esd_stop_check(md);
432 mutex_lock(&md->mutex);
434 if (!md->enabled) {
435 mutex_unlock(&md->mutex);
438 md->saved_bklight_level = mipid_get_bklight_level(panel);
440 set_display_state(md, 0);
441 set_sleep_mode(md, 1);
442 md->enabled = 0;
444 mutex_unlock(&md->mutex);
447 static int panel_enabled(struct mipid_device *md)
452 mipid_read(md, MIPID_CMD_READ_DISP_STATUS, (u8 *)&disp_status, 4);
455 dev_dbg(&md->spi->dev,
464 struct mipid_device *md = to_mipid_device(panel);
466 md->fbdev = fbdev;
467 INIT_DELAYED_WORK(&md->esd_work, mipid_esd_work);
468 mutex_init(&md->mutex);
470 md->enabled = panel_enabled(md);
472 if (md->enabled)
473 mipid_esd_start_check(md);
475 md->saved_bklight_level = mipid_get_bklight_level(panel);
482 struct mipid_device *md = to_mipid_device(panel);
484 if (md->enabled)
485 mipid_esd_stop_check(md);
513 static int mipid_detect(struct mipid_device *md)
518 pdata = md->spi->dev.platform_data;
520 dev_err(&md->spi->dev, "missing platform data\n");
524 mipid_read(md, MIPID_CMD_READ_DISP_ID, display_id, 3);
525 dev_dbg(&md->spi->dev, "MIPI display ID: %02x%02x%02x\n",
530 md->panel.name = "lph8923";
533 md->panel.name = "ls041y3";
534 md->esd_check = ls041y3_esd_check;
537 md->panel.name = "unknown";
538 dev_err(&md->spi->dev, "invalid display ID\n");
542 md->revision = display_id[1];
543 md->panel.data_lines = pdata->data_lines;
545 md->panel.name, md->revision, md->panel.data_lines);
552 struct mipid_device *md;
555 md = kzalloc(sizeof(*md), GFP_KERNEL);
556 if (md == NULL) {
562 md->reset = gpiod_get(&spi->dev, "reset", GPIOD_OUT_LOW);
563 if (IS_ERR(md->reset))
564 return dev_err_probe(&spi->dev, PTR_ERR(md->reset),
568 md->spi = spi;
569 dev_set_drvdata(&spi->dev, md);
570 md->panel = mipid_panel;
572 r = mipid_detect(md);
576 omapfb_register_panel(&md->panel);
581 kfree(md);
587 struct mipid_device *md = dev_get_drvdata(&spi->dev);
590 gpiod_set_value(md->reset, 1);
591 mipid_disable(&md->panel);
592 kfree(md);