Lines Matching +full:lcd +full:- +full:bl

1 // SPDX-License-Identifier: GPL-2.0
3 * Samsung S6D7AA0 MIPI-DSI TFT LCD controller drm_panel driver.
59 gpiod_set_value_cansleep(ctx->reset_gpio, 1); in s6d7aa0_reset()
61 gpiod_set_value_cansleep(ctx->reset_gpio, 0); in s6d7aa0_reset()
67 struct mipi_dsi_device *dsi = ctx->dsi; in s6d7aa0_lock()
72 if (ctx->desc->use_passwd3) in s6d7aa0_lock()
77 if (ctx->desc->use_passwd3) in s6d7aa0_lock()
86 struct mipi_dsi_device *dsi = ctx->dsi; in s6d7aa0_on()
87 struct device *dev = &dsi->dev; in s6d7aa0_on()
90 ret = ctx->desc->init_func(ctx); in s6d7aa0_on()
93 gpiod_set_value_cansleep(ctx->reset_gpio, 1); in s6d7aa0_on()
108 struct mipi_dsi_device *dsi = ctx->dsi; in s6d7aa0_off()
109 struct device *dev = &dsi->dev; in s6d7aa0_off()
112 ret = ctx->desc->off_func(ctx); in s6d7aa0_off()
114 dev_err(dev, "Panel-specific off function failed: %d\n", ret); in s6d7aa0_off()
138 struct device *dev = &ctx->dsi->dev; in s6d7aa0_prepare()
141 ret = regulator_bulk_enable(ARRAY_SIZE(ctx->supplies), ctx->supplies); in s6d7aa0_prepare()
152 gpiod_set_value_cansleep(ctx->reset_gpio, 1); in s6d7aa0_prepare()
162 struct device *dev = &ctx->dsi->dev; in s6d7aa0_disable()
167 dev_err(dev, "Failed to un-initialize panel: %d\n", ret); in s6d7aa0_disable()
176 gpiod_set_value_cansleep(ctx->reset_gpio, 1); in s6d7aa0_unprepare()
177 regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); in s6d7aa0_unprepare()
184 static int s6d7aa0_bl_update_status(struct backlight_device *bl) in s6d7aa0_bl_update_status() argument
186 struct mipi_dsi_device *dsi = bl_get_data(bl); in s6d7aa0_bl_update_status()
187 u16 brightness = backlight_get_brightness(bl); in s6d7aa0_bl_update_status()
197 static int s6d7aa0_bl_get_brightness(struct backlight_device *bl) in s6d7aa0_bl_get_brightness() argument
199 struct mipi_dsi_device *dsi = bl_get_data(bl); in s6d7aa0_bl_get_brightness()
218 struct device *dev = &dsi->dev; in s6d7aa0_create_backlight()
233 struct mipi_dsi_device *dsi = ctx->dsi; in s6d7aa0_lsl080al02_init()
234 struct device *dev = &dsi->dev; in s6d7aa0_lsl080al02_init()
284 struct mipi_dsi_device *dsi = ctx->dsi; in s6d7aa0_lsl080al02_off()
322 struct mipi_dsi_device *dsi = ctx->dsi; in s6d7aa0_lsl080al03_init()
323 struct device *dev = &dsi->dev; in s6d7aa0_lsl080al03_init()
334 if (ctx->desc->panel_type == S6D7AA0_PANEL_LSL080AL03) { in s6d7aa0_lsl080al03_init()
341 } else if (ctx->desc->panel_type == S6D7AA0_PANEL_LTL101AT01) { in s6d7aa0_lsl080al03_init()
388 struct mipi_dsi_device *dsi = ctx->dsi; in s6d7aa0_lsl080al03_off()
457 return -EINVAL; in s6d7aa0_get_modes()
459 mode = drm_mode_duplicate(connector->dev, ctx->desc->drm_mode); in s6d7aa0_get_modes()
461 return -ENOMEM; in s6d7aa0_get_modes()
465 mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; in s6d7aa0_get_modes()
466 connector->display_info.width_mm = mode->width_mm; in s6d7aa0_get_modes()
467 connector->display_info.height_mm = mode->height_mm; in s6d7aa0_get_modes()
468 connector->display_info.bus_flags = ctx->desc->bus_flags; in s6d7aa0_get_modes()
483 struct device *dev = &dsi->dev; in s6d7aa0_probe()
489 return -ENOMEM; in s6d7aa0_probe()
491 ctx->desc = of_device_get_match_data(dev); in s6d7aa0_probe()
492 if (!ctx->desc) in s6d7aa0_probe()
493 return -ENODEV; in s6d7aa0_probe()
495 ctx->supplies[0].supply = "power"; in s6d7aa0_probe()
496 ctx->supplies[1].supply = "vmipi"; in s6d7aa0_probe()
497 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ctx->supplies), in s6d7aa0_probe()
498 ctx->supplies); in s6d7aa0_probe()
502 ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); in s6d7aa0_probe()
503 if (IS_ERR(ctx->reset_gpio)) in s6d7aa0_probe()
504 return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), in s6d7aa0_probe()
505 "Failed to get reset-gpios\n"); in s6d7aa0_probe()
507 ctx->dsi = dsi; in s6d7aa0_probe()
510 dsi->lanes = 4; in s6d7aa0_probe()
511 dsi->format = MIPI_DSI_FMT_RGB888; in s6d7aa0_probe()
512 dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST in s6d7aa0_probe()
513 | ctx->desc->mode_flags; in s6d7aa0_probe()
515 drm_panel_init(&ctx->panel, dev, &s6d7aa0_panel_funcs, in s6d7aa0_probe()
517 ctx->panel.prepare_prev_first = true; in s6d7aa0_probe()
519 ret = drm_panel_of_backlight(&ctx->panel); in s6d7aa0_probe()
523 /* Use DSI-based backlight as fallback if available */ in s6d7aa0_probe()
524 if (ctx->desc->has_backlight && !ctx->panel.backlight) { in s6d7aa0_probe()
525 ctx->panel.backlight = s6d7aa0_create_backlight(dsi); in s6d7aa0_probe()
526 if (IS_ERR(ctx->panel.backlight)) in s6d7aa0_probe()
527 return dev_err_probe(dev, PTR_ERR(ctx->panel.backlight), in s6d7aa0_probe()
531 drm_panel_add(&ctx->panel); in s6d7aa0_probe()
536 drm_panel_remove(&ctx->panel); in s6d7aa0_probe()
550 dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret); in s6d7aa0_remove()
552 drm_panel_remove(&ctx->panel); in s6d7aa0_remove()
576 .name = "panel-samsung-s6d7aa0",
583 MODULE_DESCRIPTION("Samsung S6D7AA0 MIPI-DSI LCD controller driver");