static int panel_jdi_enslave(struct mipi_dsi_device *master, struct mipi_dsi_device *slave) { int ret; ret = mipi_dsi_attach(master); if (ret < 0) return ret; return ret; }
struct panel_jdi *panel_jdi_dsi_probe(struct mipi_dsi_device *dsi) { static int index = 0; struct panel_jdi *jdi; int ret; if (index >= NUM_DSI) return (void *)-EPTR; jdi = &jdi_data[index++]; jdi->dsi = dsi; dsi->lanes = 4; dsi->format = MIPI_DSI_FMT_RGB888; dsi->mode_flags = 0; if (dsi->master) { ret = mipi_dsi_attach(dsi); if (ret < 0) { printk(BIOS_ERR, "mipi_dsi_attach() failed: %d\n", ret); return (void *)-EPTR; } ret = mipi_dsi_enslave(dsi->master, dsi); if (ret < 0) { printk(BIOS_ERR, "mipi_dsi_enslave() failed: %d\n", ret); return (void *)-EPTR; } return jdi; } dsi->ops = &panel_jdi_master_ops; jdi->enabled = 0; jdi->width_mm = 211; jdi->height_mm = 148; return jdi; }
static int s6e8aa0_probe(struct mipi_dsi_device *dsi) { struct device *dev = &dsi->dev; struct s6e8aa0 *ctx; int ret; ctx = devm_kzalloc(dev, sizeof(struct s6e8aa0), GFP_KERNEL); if (!ctx) return -ENOMEM; mipi_dsi_set_drvdata(dsi, ctx); ctx->dev = dev; dsi->lanes = 4; dsi->format = MIPI_DSI_FMT_RGB888; dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_VIDEO_HFP | MIPI_DSI_MODE_VIDEO_HBP | MIPI_DSI_MODE_VIDEO_HSA | MIPI_DSI_MODE_EOT_PACKET | MIPI_DSI_MODE_VSYNC_FLUSH | MIPI_DSI_MODE_VIDEO_AUTO_VERT; ret = s6e8aa0_parse_dt(ctx); if (ret < 0) return ret; ctx->supplies[0].supply = "vdd3"; ctx->supplies[1].supply = "vci"; ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), ctx->supplies); if (ret < 0) { dev_err(dev, "failed to get regulators: %d\n", ret); return ret; } ctx->reset_gpio = devm_gpiod_get(dev, "reset"); if (IS_ERR(ctx->reset_gpio)) { dev_err(dev, "cannot get reset-gpios %ld\n", PTR_ERR(ctx->reset_gpio)); return PTR_ERR(ctx->reset_gpio); } ret = gpiod_direction_output(ctx->reset_gpio, 1); if (ret < 0) { dev_err(dev, "cannot configure reset-gpios %d\n", ret); return ret; } ctx->brightness = GAMMA_LEVEL_NUM - 1; drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &s6e8aa0_drm_funcs; ret = drm_panel_add(&ctx->panel); if (ret < 0) return ret; ret = mipi_dsi_attach(dsi); if (ret < 0) drm_panel_remove(&ctx->panel); return ret; }
static int s6e3ha2_probe(struct mipi_dsi_device *dsi) { struct device *dev = &dsi->dev; struct s6e3ha2 *ctx; int ret; ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); if (!ctx) return -ENOMEM; mipi_dsi_set_drvdata(dsi, ctx); ctx->dev = dev; ctx->desc = of_device_get_match_data(dev); dsi->lanes = 4; dsi->format = MIPI_DSI_FMT_RGB888; dsi->mode_flags = MIPI_DSI_CLOCK_NON_CONTINUOUS; ctx->supplies[0].supply = "vdd3"; ctx->supplies[1].supply = "vci"; ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), ctx->supplies); if (ret < 0) { dev_err(dev, "failed to get regulators: %d\n", ret); return ret; } ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); if (IS_ERR(ctx->reset_gpio)) { dev_err(dev, "cannot get reset-gpios %ld\n", PTR_ERR(ctx->reset_gpio)); return PTR_ERR(ctx->reset_gpio); } ctx->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_HIGH); if (IS_ERR(ctx->enable_gpio)) { dev_err(dev, "cannot get enable-gpios %ld\n", PTR_ERR(ctx->enable_gpio)); return PTR_ERR(ctx->enable_gpio); } ctx->bl_dev = backlight_device_register("s6e3ha2", dev, ctx, &s6e3ha2_bl_ops, NULL); if (IS_ERR(ctx->bl_dev)) { dev_err(dev, "failed to register backlight device\n"); return PTR_ERR(ctx->bl_dev); } ctx->bl_dev->props.max_brightness = S6E3HA2_MAX_BRIGHTNESS; ctx->bl_dev->props.brightness = S6E3HA2_DEFAULT_BRIGHTNESS; ctx->bl_dev->props.power = FB_BLANK_POWERDOWN; drm_panel_init(&ctx->panel); ctx->panel.dev = dev; ctx->panel.funcs = &s6e3ha2_drm_funcs; ret = drm_panel_add(&ctx->panel); if (ret < 0) goto unregister_backlight; ret = mipi_dsi_attach(dsi); if (ret < 0) goto remove_panel; return ret; remove_panel: drm_panel_remove(&ctx->panel); unregister_backlight: backlight_device_unregister(ctx->bl_dev); return ret; }