Lines Matching +full:panel +full:- +full:dsi
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree:
21 struct drm_panel panel; member
22 struct mipi_dsi_device *dsi; member
30 struct sofef00_panel *to_sofef00_panel(struct drm_panel *panel) in to_sofef00_panel() argument
32 return container_of(panel, struct sofef00_panel, panel); in to_sofef00_panel()
37 gpiod_set_value_cansleep(ctx->reset_gpio, 0); in sofef00_panel_reset()
39 gpiod_set_value_cansleep(ctx->reset_gpio, 1); in sofef00_panel_reset()
41 gpiod_set_value_cansleep(ctx->reset_gpio, 0); in sofef00_panel_reset()
47 struct mipi_dsi_device *dsi = ctx->dsi; in sofef00_panel_on() local
48 struct device *dev = &dsi->dev; in sofef00_panel_on()
51 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in sofef00_panel_on()
53 ret = mipi_dsi_dcs_exit_sleep_mode(dsi); in sofef00_panel_on()
60 mipi_dsi_dcs_write_seq(dsi, 0xf0, 0x5a, 0x5a); in sofef00_panel_on()
62 ret = mipi_dsi_dcs_set_tear_on(dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK); in sofef00_panel_on()
68 mipi_dsi_dcs_write_seq(dsi, 0xf0, 0xa5, 0xa5); in sofef00_panel_on()
69 mipi_dsi_dcs_write_seq(dsi, 0xf0, 0x5a, 0x5a); in sofef00_panel_on()
70 mipi_dsi_dcs_write_seq(dsi, 0xb0, 0x07); in sofef00_panel_on()
71 mipi_dsi_dcs_write_seq(dsi, 0xb6, 0x12); in sofef00_panel_on()
72 mipi_dsi_dcs_write_seq(dsi, 0xf0, 0xa5, 0xa5); in sofef00_panel_on()
73 mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_CONTROL_DISPLAY, 0x20); in sofef00_panel_on()
74 mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_POWER_SAVE, 0x00); in sofef00_panel_on()
76 ret = mipi_dsi_dcs_set_display_on(dsi); in sofef00_panel_on()
87 struct mipi_dsi_device *dsi = ctx->dsi; in sofef00_panel_off() local
88 struct device *dev = &dsi->dev; in sofef00_panel_off()
91 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in sofef00_panel_off()
93 ret = mipi_dsi_dcs_set_display_off(dsi); in sofef00_panel_off()
100 ret = mipi_dsi_dcs_enter_sleep_mode(dsi); in sofef00_panel_off()
110 static int sofef00_panel_prepare(struct drm_panel *panel) in sofef00_panel_prepare() argument
112 struct sofef00_panel *ctx = to_sofef00_panel(panel); in sofef00_panel_prepare()
113 struct device *dev = &ctx->dsi->dev; in sofef00_panel_prepare()
116 if (ctx->prepared) in sofef00_panel_prepare()
119 ret = regulator_enable(ctx->supply); in sofef00_panel_prepare()
129 dev_err(dev, "Failed to initialize panel: %d\n", ret); in sofef00_panel_prepare()
130 gpiod_set_value_cansleep(ctx->reset_gpio, 1); in sofef00_panel_prepare()
134 ctx->prepared = true; in sofef00_panel_prepare()
138 static int sofef00_panel_unprepare(struct drm_panel *panel) in sofef00_panel_unprepare() argument
140 struct sofef00_panel *ctx = to_sofef00_panel(panel); in sofef00_panel_unprepare()
141 struct device *dev = &ctx->dsi->dev; in sofef00_panel_unprepare()
144 if (!ctx->prepared) in sofef00_panel_unprepare()
149 dev_err(dev, "Failed to un-initialize panel: %d\n", ret); in sofef00_panel_unprepare()
151 regulator_disable(ctx->supply); in sofef00_panel_unprepare()
153 ctx->prepared = false; in sofef00_panel_unprepare()
185 static int sofef00_panel_get_modes(struct drm_panel *panel, struct drm_connector *connector) in sofef00_panel_get_modes() argument
188 struct sofef00_panel *ctx = to_sofef00_panel(panel); in sofef00_panel_get_modes()
190 mode = drm_mode_duplicate(connector->dev, ctx->mode); in sofef00_panel_get_modes()
192 return -ENOMEM; in sofef00_panel_get_modes()
196 mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; in sofef00_panel_get_modes()
197 connector->display_info.width_mm = mode->width_mm; in sofef00_panel_get_modes()
198 connector->display_info.height_mm = mode->height_mm; in sofef00_panel_get_modes()
212 struct mipi_dsi_device *dsi = bl_get_data(bl); in sofef00_panel_bl_update_status() local
216 err = mipi_dsi_dcs_set_display_brightness_large(dsi, brightness); in sofef00_panel_bl_update_status()
228 sofef00_create_backlight(struct mipi_dsi_device *dsi) in sofef00_create_backlight() argument
230 struct device *dev = &dsi->dev; in sofef00_create_backlight()
237 return devm_backlight_device_register(dev, dev_name(dev), dev, dsi, in sofef00_create_backlight()
241 static int sofef00_panel_probe(struct mipi_dsi_device *dsi) in sofef00_panel_probe() argument
243 struct device *dev = &dsi->dev; in sofef00_panel_probe()
249 return -ENOMEM; in sofef00_panel_probe()
251 ctx->mode = of_device_get_match_data(dev); in sofef00_panel_probe()
253 if (!ctx->mode) { in sofef00_panel_probe()
255 return -ENODEV; in sofef00_panel_probe()
258 ctx->supply = devm_regulator_get(dev, "vddio"); in sofef00_panel_probe()
259 if (IS_ERR(ctx->supply)) in sofef00_panel_probe()
260 return dev_err_probe(dev, PTR_ERR(ctx->supply), in sofef00_panel_probe()
263 ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); in sofef00_panel_probe()
264 if (IS_ERR(ctx->reset_gpio)) in sofef00_panel_probe()
265 return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio), in sofef00_panel_probe()
266 "Failed to get reset-gpios\n"); in sofef00_panel_probe()
268 ctx->dsi = dsi; in sofef00_panel_probe()
269 mipi_dsi_set_drvdata(dsi, ctx); in sofef00_panel_probe()
271 dsi->lanes = 4; in sofef00_panel_probe()
272 dsi->format = MIPI_DSI_FMT_RGB888; in sofef00_panel_probe()
274 drm_panel_init(&ctx->panel, dev, &sofef00_panel_panel_funcs, in sofef00_panel_probe()
277 ctx->panel.backlight = sofef00_create_backlight(dsi); in sofef00_panel_probe()
278 if (IS_ERR(ctx->panel.backlight)) in sofef00_panel_probe()
279 return dev_err_probe(dev, PTR_ERR(ctx->panel.backlight), in sofef00_panel_probe()
282 drm_panel_add(&ctx->panel); in sofef00_panel_probe()
284 ret = mipi_dsi_attach(dsi); in sofef00_panel_probe()
286 dev_err(dev, "Failed to attach to DSI host: %d\n", ret); in sofef00_panel_probe()
287 drm_panel_remove(&ctx->panel); in sofef00_panel_probe()
294 static void sofef00_panel_remove(struct mipi_dsi_device *dsi) in sofef00_panel_remove() argument
296 struct sofef00_panel *ctx = mipi_dsi_get_drvdata(dsi); in sofef00_panel_remove()
299 ret = mipi_dsi_detach(dsi); in sofef00_panel_remove()
301 dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret); in sofef00_panel_remove()
303 drm_panel_remove(&ctx->panel); in sofef00_panel_remove()
323 .name = "panel-oneplus6",
331 MODULE_DESCRIPTION("DRM driver for Samsung AMOLED DSI panels found in OnePlus 6/6T phones");