Lines Matching +full:dsi +full:- +full:based

1 // SPDX-License-Identifier: GPL-2.0
3 * Panels based on the Ilitek ILI9882T display controller.
45 struct mipi_dsi_device *dsi; member
57 /* ILI9882-specific commands, add new commands as you decode them */
66 struct mipi_dsi_multi_context ctx = { .dsi = ili->dsi }; in starry_ili9882t_init()
424 struct mipi_dsi_multi_context ctx = { .dsi = ili->dsi }; in ili9882t_disable()
428 ili->dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in ili9882t_disable()
442 gpiod_set_value(ili->enable_gpio, 0); in ili9882t_unprepare()
444 regulator_disable(ili->avee); in ili9882t_unprepare()
445 regulator_disable(ili->avdd); in ili9882t_unprepare()
447 regulator_disable(ili->pp1800); in ili9882t_unprepare()
448 regulator_disable(ili->pp3300); in ili9882t_unprepare()
458 gpiod_set_value(ili->enable_gpio, 0); in ili9882t_prepare()
461 ret = regulator_enable(ili->pp3300); in ili9882t_prepare()
465 ret = regulator_enable(ili->pp1800); in ili9882t_prepare()
471 ret = regulator_enable(ili->avdd); in ili9882t_prepare()
474 ret = regulator_enable(ili->avee); in ili9882t_prepare()
481 ret = mipi_dsi_dcs_nop(ili->dsi); in ili9882t_prepare()
483 dev_err(&ili->dsi->dev, "Failed to send NOP: %d\n", ret); in ili9882t_prepare()
488 gpiod_set_value(ili->enable_gpio, 1); in ili9882t_prepare()
490 gpiod_set_value(ili->enable_gpio, 0); in ili9882t_prepare()
492 gpiod_set_value(ili->enable_gpio, 1); in ili9882t_prepare()
495 ret = ili->desc->init(ili); in ili9882t_prepare()
502 gpiod_set_value(ili->enable_gpio, 0); in ili9882t_prepare()
503 regulator_disable(ili->avee); in ili9882t_prepare()
505 regulator_disable(ili->avdd); in ili9882t_prepare()
508 regulator_disable(ili->pp1800); in ili9882t_prepare()
550 const struct drm_display_mode *m = ili->desc->modes; in ili9882t_get_modes()
553 mode = drm_mode_duplicate(connector->dev, m); in ili9882t_get_modes()
555 dev_err(panel->dev, "failed to add mode %ux%u@%u\n", in ili9882t_get_modes()
556 m->hdisplay, m->vdisplay, drm_mode_vrefresh(m)); in ili9882t_get_modes()
557 return -ENOMEM; in ili9882t_get_modes()
560 mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; in ili9882t_get_modes()
564 connector->display_info.width_mm = ili->desc->size.width_mm; in ili9882t_get_modes()
565 connector->display_info.height_mm = ili->desc->size.height_mm; in ili9882t_get_modes()
566 connector->display_info.bpc = ili->desc->bpc; in ili9882t_get_modes()
575 return ili->orientation; in ili9882t_get_orientation()
589 struct device *dev = &ili->dsi->dev; in ili9882t_add()
592 ili->avdd = devm_regulator_get(dev, "avdd"); in ili9882t_add()
593 if (IS_ERR(ili->avdd)) in ili9882t_add()
594 return PTR_ERR(ili->avdd); in ili9882t_add()
596 ili->avee = devm_regulator_get(dev, "avee"); in ili9882t_add()
597 if (IS_ERR(ili->avee)) in ili9882t_add()
598 return PTR_ERR(ili->avee); in ili9882t_add()
600 ili->pp3300 = devm_regulator_get(dev, "pp3300"); in ili9882t_add()
601 if (IS_ERR(ili->pp3300)) in ili9882t_add()
602 return PTR_ERR(ili->pp3300); in ili9882t_add()
604 ili->pp1800 = devm_regulator_get(dev, "pp1800"); in ili9882t_add()
605 if (IS_ERR(ili->pp1800)) in ili9882t_add()
606 return PTR_ERR(ili->pp1800); in ili9882t_add()
608 ili->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW); in ili9882t_add()
609 if (IS_ERR(ili->enable_gpio)) { in ili9882t_add()
610 dev_err(dev, "cannot get enable-gpios %ld\n", in ili9882t_add()
611 PTR_ERR(ili->enable_gpio)); in ili9882t_add()
612 return PTR_ERR(ili->enable_gpio); in ili9882t_add()
615 gpiod_set_value(ili->enable_gpio, 0); in ili9882t_add()
617 err = of_drm_get_panel_orientation(dev->of_node, &ili->orientation); in ili9882t_add()
619 dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err); in ili9882t_add()
623 err = drm_panel_of_backlight(&ili->base); in ili9882t_add()
627 ili->base.funcs = &ili9882t_funcs; in ili9882t_add()
628 ili->base.dev = &ili->dsi->dev; in ili9882t_add()
630 drm_panel_add(&ili->base); in ili9882t_add()
635 static int ili9882t_probe(struct mipi_dsi_device *dsi) in ili9882t_probe() argument
641 ili = devm_drm_panel_alloc(&dsi->dev, __typeof(*ili), base, in ili9882t_probe()
647 desc = of_device_get_match_data(&dsi->dev); in ili9882t_probe()
648 dsi->lanes = desc->lanes; in ili9882t_probe()
649 dsi->format = desc->format; in ili9882t_probe()
650 dsi->mode_flags = desc->mode_flags; in ili9882t_probe()
651 ili->desc = desc; in ili9882t_probe()
652 ili->dsi = dsi; in ili9882t_probe()
657 mipi_dsi_set_drvdata(dsi, ili); in ili9882t_probe()
659 ret = mipi_dsi_attach(dsi); in ili9882t_probe()
661 drm_panel_remove(&ili->base); in ili9882t_probe()
666 static void ili9882t_remove(struct mipi_dsi_device *dsi) in ili9882t_remove() argument
668 struct ili9882t *ili = mipi_dsi_get_drvdata(dsi); in ili9882t_remove()
671 ret = mipi_dsi_detach(dsi); in ili9882t_remove()
673 dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret); in ili9882t_remove()
675 if (ili->base.dev) in ili9882t_remove()
676 drm_panel_remove(&ili->base); in ili9882t_remove()
689 .name = "panel-ili9882t",
698 MODULE_DESCRIPTION("Ilitek ILI9882T-based panels driver");