static int st7735r_probe(struct spi_device *spi) { struct device *dev = &spi->dev; struct mipi_dbi *mipi; struct gpio_desc *dc; u32 rotation = 0; int ret; mipi = devm_kzalloc(dev, sizeof(*mipi), GFP_KERNEL); if (!mipi) return -ENOMEM; mipi->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); if (IS_ERR(mipi->reset)) { DRM_DEV_ERROR(dev, "Failed to get gpio 'reset'\n"); return PTR_ERR(mipi->reset); } dc = devm_gpiod_get(dev, "dc", GPIOD_OUT_LOW); if (IS_ERR(dc)) { DRM_DEV_ERROR(dev, "Failed to get gpio 'dc'\n"); return PTR_ERR(dc); } mipi->backlight = devm_of_find_backlight(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight); device_property_read_u32(dev, "rotation", &rotation); ret = mipi_dbi_spi_init(spi, mipi, dc); if (ret) return ret; /* Cannot read from Adafruit 1.8" display via SPI */ mipi->read_commands = NULL; ret = mipi_dbi_init(&spi->dev, mipi, &jd_t18003_t01_pipe_funcs, &st7735r_driver, &jd_t18003_t01_mode, rotation); if (ret) return ret; spi_set_drvdata(spi, mipi); return devm_tinydrm_register(&mipi->tinydrm); }
static int mi0283qt_probe(struct spi_device *spi) { struct device *dev = &spi->dev; struct tinydrm_device *tdev; struct mipi_dbi *mipi; struct gpio_desc *dc; u32 rotation = 0; int ret; mipi = devm_kzalloc(dev, sizeof(*mipi), GFP_KERNEL); if (!mipi) return -ENOMEM; mipi->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); if (IS_ERR(mipi->reset)) { dev_err(dev, "Failed to get gpio 'reset'\n"); return PTR_ERR(mipi->reset); } dc = devm_gpiod_get_optional(dev, "dc", GPIOD_OUT_LOW); if (IS_ERR(dc)) { dev_err(dev, "Failed to get gpio 'dc'\n"); return PTR_ERR(dc); } mipi->regulator = devm_regulator_get(dev, "power"); if (IS_ERR(mipi->regulator)) return PTR_ERR(mipi->regulator); mipi->backlight = tinydrm_of_find_backlight(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight); device_property_read_u32(dev, "rotation", &rotation); ret = mipi_dbi_spi_init(spi, mipi, dc, &mi0283qt_pipe_funcs, &mi0283qt_driver, &mi0283qt_mode, rotation); if (ret) return ret; ret = mi0283qt_init(mipi); if (ret) return ret; /* use devres to fini after drm unregister (drv->remove is before) */ ret = devm_add_action(dev, mi0283qt_fini, mipi); if (ret) { mi0283qt_fini(mipi); return ret; } tdev = &mipi->tinydrm; ret = devm_tinydrm_register(tdev); if (ret) return ret; spi_set_drvdata(spi, mipi); DRM_DEBUG_DRIVER("Initialized %s:%s @%uMHz on minor %d\n", tdev->drm->driver->name, dev_name(dev), spi->max_speed_hz / 1000000, tdev->drm->primary->index); return 0; }