Lines Matching +full:ips +full:- +full:supply
1 // SPDX-License-Identifier: GPL-2.0
3 * NewVision NV3052C IPS LCD panel driver
12 #include <linux/media-bus-format.h>
42 struct regulator *supply;
257 { 0x23, 0x20 }, // RGB interface control: DE MODE PCLK-N
640 const struct nv3052c_reg *panel_regs = priv->panel_info->panel_regs;
641 unsigned int panel_regs_len = priv->panel_info->panel_regs_len;
642 struct mipi_dbi *dbi = &priv->dbi;
646 err = regulator_enable(priv->supply);
648 dev_err(priv->dev, "Failed to enable power supply: %d\n", err);
653 gpiod_set_value_cansleep(priv->reset_gpio, 1);
655 gpiod_set_value_cansleep(priv->reset_gpio, 0);
663 dev_err(priv->dev, "Unable to set register: %d\n", err);
670 dev_err(priv->dev, "Unable to exit sleep mode: %d\n", err);
677 regulator_disable(priv->supply);
684 struct mipi_dbi *dbi = &priv->dbi;
689 dev_err(priv->dev, "Unable to enter sleep mode: %d\n", err);
691 gpiod_set_value_cansleep(priv->reset_gpio, 1);
692 regulator_disable(priv->supply);
700 struct mipi_dbi *dbi = &priv->dbi;
705 dev_err(priv->dev, "Unable to enable display: %d\n", err);
709 if (panel->backlight) {
720 struct mipi_dbi *dbi = &priv->dbi;
725 dev_err(priv->dev, "Unable to disable display: %d\n", err);
736 const struct nv3052c_panel_info *panel_info = priv->panel_info;
740 for (i = 0; i < panel_info->num_modes; i++) {
741 mode = drm_mode_duplicate(connector->dev,
742 &panel_info->display_modes[i]);
744 return -ENOMEM;
748 mode->type = DRM_MODE_TYPE_DRIVER;
749 if (panel_info->num_modes == 1)
750 mode->type |= DRM_MODE_TYPE_PREFERRED;
755 connector->display_info.bpc = 8;
756 connector->display_info.width_mm = panel_info->width_mm;
757 connector->display_info.height_mm = panel_info->height_mm;
759 drm_display_info_set_bus_formats(&connector->display_info,
760 &panel_info->bus_format, 1);
761 connector->display_info.bus_flags = panel_info->bus_flags;
763 return panel_info->num_modes;
776 struct device *dev = &spi->dev;
785 priv->dev = dev;
787 priv->panel_info = of_device_get_match_data(dev);
788 if (!priv->panel_info)
789 return -EINVAL;
791 priv->supply = devm_regulator_get(dev, "power");
792 if (IS_ERR(priv->supply))
793 return dev_err_probe(dev, PTR_ERR(priv->supply), "Failed to get power supply\n");
795 priv->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
796 if (IS_ERR(priv->reset_gpio))
797 return dev_err_probe(dev, PTR_ERR(priv->reset_gpio), "Failed to get reset GPIO\n");
799 err = mipi_dbi_spi_init(spi, &priv->dbi, NULL);
803 priv->dbi.read_commands = NULL;
807 err = drm_panel_of_backlight(&priv->panel);
811 drm_panel_add(&priv->panel);
820 drm_panel_remove(&priv->panel);
821 drm_panel_disable(&priv->panel);
822 drm_panel_unprepare(&priv->panel);
918 { "rg35xx-plus-panel", },
926 { .compatible = "anbernic,rg35xx-plus-panel", .data = &wl_355608_a8_panel_info },
945 MODULE_DESCRIPTION("NewVision NV3052C IPS LCD panel driver");