Lines Matching refs:md

54 static void mipid_transfer(struct mipid_device *md, int cmd, const u8 *wbuf,
62 BUG_ON(md->spi == NULL);
103 r = spi_sync(md->spi, &m);
105 dev_dbg(&md->spi->dev, "spi_sync %d\n", r);
111 static inline void mipid_cmd(struct mipid_device *md, int cmd)
113 mipid_transfer(md, cmd, NULL, 0, NULL, 0);
116 static inline void mipid_write(struct mipid_device *md,
119 mipid_transfer(md, reg, buf, len, NULL, 0);
122 static inline void mipid_read(struct mipid_device *md,
125 mipid_transfer(md, reg, NULL, 0, buf, len);
128 static void set_data_lines(struct mipid_device *md, int data_lines)
143 mipid_write(md, 0x3a, (u8 *)&par, 2);
146 static void send_init_string(struct mipid_device *md)
150 mipid_write(md, 0xc2, (u8 *)initpar, sizeof(initpar));
151 set_data_lines(md, md->panel.data_lines);
154 static void hw_guard_start(struct mipid_device *md, int guard_msec)
156 md->hw_guard_wait = msecs_to_jiffies(guard_msec);
157 md->hw_guard_end = jiffies + md->hw_guard_wait;
160 static void hw_guard_wait(struct mipid_device *md)
162 unsigned long wait = md->hw_guard_end - jiffies;
164 if ((long)wait > 0 && time_before_eq(wait, md->hw_guard_wait)) {
170 static void set_sleep_mode(struct mipid_device *md, int on)
178 hw_guard_wait(md);
179 mipid_cmd(md, cmd);
180 hw_guard_start(md, 120);
192 static void set_display_state(struct mipid_device *md, int enabled)
196 mipid_cmd(md, cmd);
201 struct mipid_device *md = to_mipid_device(panel);
202 struct mipid_platform_data *pd = md->spi->dev.platform_data;
208 if (!md->enabled) {
209 md->saved_bklight_level = level;
219 struct mipid_device *md = to_mipid_device(panel);
220 struct mipid_platform_data *pd = md->spi->dev.platform_data;
229 struct mipid_device *md = to_mipid_device(panel);
230 struct mipid_platform_data *pd = md->spi->dev.platform_data;
243 static u16 read_first_pixel(struct mipid_device *md)
248 mutex_lock(&md->mutex);
249 mipid_read(md, MIPID_CMD_READ_RED, &red, 1);
250 mipid_read(md, MIPID_CMD_READ_GREEN, &green, 1);
251 mipid_read(md, MIPID_CMD_READ_BLUE, &blue, 1);
252 mutex_unlock(&md->mutex);
254 switch (md->panel.data_lines) {
273 struct mipid_device *md = to_mipid_device(panel);
286 omapfb_write_first_pixel(md->fbdev, test_values[i]);
293 pixel = read_first_pixel(md);
297 dev_err(&md->spi->dev,
310 static void ls041y3_esd_recover(struct mipid_device *md)
312 dev_err(&md->spi->dev, "performing LCD ESD recovery\n");
313 set_sleep_mode(md, 1);
314 set_sleep_mode(md, 0);
317 static void ls041y3_esd_check_mode1(struct mipid_device *md)
321 mipid_read(md, MIPID_CMD_RDDSDR, &state1, 1);
322 set_sleep_mode(md, 0);
323 mipid_read(md, MIPID_CMD_RDDSDR, &state2, 1);
324 dev_dbg(&md->spi->dev, "ESD mode 1 state1 %02x state2 %02x\n",
330 ls041y3_esd_recover(md);
333 static void ls041y3_esd_check_mode2(struct mipid_device *md)
353 mipid_write(md, rd->cmd, (u8 *)rd->wbuf, rd->wlen);
356 mipid_read(md, rd->cmd, rbuf, 2);
361 mipid_write(md, rd->cmd, (u8 *)rd->wbuf, rd->wlen);
364 dev_dbg(&md->spi->dev, "ESD mode 2 state %02x\n", rbuf[1]);
366 ls041y3_esd_recover(md);
369 static void ls041y3_esd_check(struct mipid_device *md)
371 ls041y3_esd_check_mode1(md);
372 if (md->revision >= 0x88)
373 ls041y3_esd_check_mode2(md);
376 static void mipid_esd_start_check(struct mipid_device *md)
378 if (md->esd_check != NULL)
379 schedule_delayed_work(&md->esd_work,
383 static void mipid_esd_stop_check(struct mipid_device *md)
385 if (md->esd_check != NULL)
386 cancel_delayed_work_sync(&md->esd_work);
391 struct mipid_device *md = container_of(work, struct mipid_device,
394 mutex_lock(&md->mutex);
395 md->esd_check(md);
396 mutex_unlock(&md->mutex);
397 mipid_esd_start_check(md);
402 struct mipid_device *md = to_mipid_device(panel);
404 mutex_lock(&md->mutex);
406 if (md->enabled) {
407 mutex_unlock(&md->mutex);
410 set_sleep_mode(md, 0);
411 md->enabled = 1;
412 send_init_string(md);
413 set_display_state(md, 1);
414 mipid_set_bklight_level(panel, md->saved_bklight_level);
415 mipid_esd_start_check(md);
417 mutex_unlock(&md->mutex);
423 struct mipid_device *md = to_mipid_device(panel);
429 mipid_esd_stop_check(md);
430 mutex_lock(&md->mutex);
432 if (!md->enabled) {
433 mutex_unlock(&md->mutex);
436 md->saved_bklight_level = mipid_get_bklight_level(panel);
438 set_display_state(md, 0);
439 set_sleep_mode(md, 1);
440 md->enabled = 0;
442 mutex_unlock(&md->mutex);
445 static int panel_enabled(struct mipid_device *md)
450 mipid_read(md, MIPID_CMD_READ_DISP_STATUS, (u8 *)&disp_status, 4);
453 dev_dbg(&md->spi->dev,
462 struct mipid_device *md = to_mipid_device(panel);
464 md->fbdev = fbdev;
465 INIT_DELAYED_WORK(&md->esd_work, mipid_esd_work);
466 mutex_init(&md->mutex);
468 md->enabled = panel_enabled(md);
470 if (md->enabled)
471 mipid_esd_start_check(md);
473 md->saved_bklight_level = mipid_get_bklight_level(panel);
480 struct mipid_device *md = to_mipid_device(panel);
482 if (md->enabled)
483 mipid_esd_stop_check(md);
511 static int mipid_detect(struct mipid_device *md)
516 pdata = md->spi->dev.platform_data;
518 dev_err(&md->spi->dev, "missing platform data\n");
522 mipid_read(md, MIPID_CMD_READ_DISP_ID, display_id, 3);
523 dev_dbg(&md->spi->dev, "MIPI display ID: %02x%02x%02x\n",
528 md->panel.name = "lph8923";
531 md->panel.name = "ls041y3";
532 md->esd_check = ls041y3_esd_check;
535 md->panel.name = "unknown";
536 dev_err(&md->spi->dev, "invalid display ID\n");
540 md->revision = display_id[1];
541 md->panel.data_lines = pdata->data_lines;
543 md->panel.name, md->revision, md->panel.data_lines);
550 struct mipid_device *md;
553 md = kzalloc(sizeof(*md), GFP_KERNEL);
554 if (md == NULL) {
560 md->spi = spi;
561 dev_set_drvdata(&spi->dev, md);
562 md->panel = mipid_panel;
564 r = mipid_detect(md);
568 omapfb_register_panel(&md->panel);
573 kfree(md);
579 struct mipid_device *md = dev_get_drvdata(&spi->dev);
581 mipid_disable(&md->panel);
582 kfree(md);