Lines Matching +full:dsi +full:- +full:based
1 // SPDX-License-Identifier: GPL-2.0-only
7 * Based on AUO panel driver by Rob Clark <robdclark@gmail.com>
25 struct mipi_dsi_device *dsi; member
43 struct mipi_dsi_device *dsi = sharp_nt->dsi; in sharp_nt_panel_init() local
46 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in sharp_nt_panel_init()
48 ret = mipi_dsi_dcs_exit_sleep_mode(dsi); in sharp_nt_panel_init()
54 /* Novatek two-lane operation */ in sharp_nt_panel_init()
55 ret = mipi_dsi_dcs_write(dsi, 0xae, (u8[]){ 0x03 }, 1); in sharp_nt_panel_init()
60 ret = mipi_dsi_dcs_set_pixel_format(dsi, MIPI_DCS_PIXEL_FMT_24BIT | in sharp_nt_panel_init()
70 struct mipi_dsi_device *dsi = sharp_nt->dsi; in sharp_nt_panel_on() local
73 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in sharp_nt_panel_on()
75 ret = mipi_dsi_dcs_set_display_on(dsi); in sharp_nt_panel_on()
84 struct mipi_dsi_device *dsi = sharp_nt->dsi; in sharp_nt_panel_off() local
87 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in sharp_nt_panel_off()
89 ret = mipi_dsi_dcs_set_display_off(dsi); in sharp_nt_panel_off()
93 ret = mipi_dsi_dcs_enter_sleep_mode(dsi); in sharp_nt_panel_off()
105 if (!sharp_nt->enabled) in sharp_nt_panel_disable()
108 sharp_nt->enabled = false; in sharp_nt_panel_disable()
118 if (!sharp_nt->prepared) in sharp_nt_panel_unprepare()
123 dev_err(panel->dev, "failed to set panel off: %d\n", ret); in sharp_nt_panel_unprepare()
127 regulator_disable(sharp_nt->supply); in sharp_nt_panel_unprepare()
128 if (sharp_nt->reset_gpio) in sharp_nt_panel_unprepare()
129 gpiod_set_value(sharp_nt->reset_gpio, 0); in sharp_nt_panel_unprepare()
131 sharp_nt->prepared = false; in sharp_nt_panel_unprepare()
141 if (sharp_nt->prepared) in sharp_nt_panel_prepare()
144 ret = regulator_enable(sharp_nt->supply); in sharp_nt_panel_prepare()
150 if (sharp_nt->reset_gpio) { in sharp_nt_panel_prepare()
151 gpiod_set_value(sharp_nt->reset_gpio, 1); in sharp_nt_panel_prepare()
153 gpiod_set_value(sharp_nt->reset_gpio, 0); in sharp_nt_panel_prepare()
155 gpiod_set_value(sharp_nt->reset_gpio, 1); in sharp_nt_panel_prepare()
161 dev_err(panel->dev, "failed to init panel: %d\n", ret); in sharp_nt_panel_prepare()
167 dev_err(panel->dev, "failed to set panel on: %d\n", ret); in sharp_nt_panel_prepare()
171 sharp_nt->prepared = true; in sharp_nt_panel_prepare()
176 regulator_disable(sharp_nt->supply); in sharp_nt_panel_prepare()
177 if (sharp_nt->reset_gpio) in sharp_nt_panel_prepare()
178 gpiod_set_value(sharp_nt->reset_gpio, 0); in sharp_nt_panel_prepare()
186 if (sharp_nt->enabled) in sharp_nt_panel_enable()
189 sharp_nt->enabled = true; in sharp_nt_panel_enable()
211 mode = drm_mode_duplicate(connector->dev, &default_mode); in sharp_nt_panel_get_modes()
213 dev_err(panel->dev, "failed to add mode %ux%u@%u\n", in sharp_nt_panel_get_modes()
216 return -ENOMEM; in sharp_nt_panel_get_modes()
223 connector->display_info.width_mm = 54; in sharp_nt_panel_get_modes()
224 connector->display_info.height_mm = 95; in sharp_nt_panel_get_modes()
239 struct device *dev = &sharp_nt->dsi->dev; in sharp_nt_panel_add()
242 sharp_nt->mode = &default_mode; in sharp_nt_panel_add()
244 sharp_nt->supply = devm_regulator_get(dev, "avdd"); in sharp_nt_panel_add()
245 if (IS_ERR(sharp_nt->supply)) in sharp_nt_panel_add()
246 return PTR_ERR(sharp_nt->supply); in sharp_nt_panel_add()
248 sharp_nt->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in sharp_nt_panel_add()
249 if (IS_ERR(sharp_nt->reset_gpio)) { in sharp_nt_panel_add()
250 dev_err(dev, "cannot get reset-gpios %ld\n", in sharp_nt_panel_add()
251 PTR_ERR(sharp_nt->reset_gpio)); in sharp_nt_panel_add()
252 sharp_nt->reset_gpio = NULL; in sharp_nt_panel_add()
254 gpiod_set_value(sharp_nt->reset_gpio, 0); in sharp_nt_panel_add()
257 drm_panel_init(&sharp_nt->base, &sharp_nt->dsi->dev, in sharp_nt_panel_add()
260 ret = drm_panel_of_backlight(&sharp_nt->base); in sharp_nt_panel_add()
264 drm_panel_add(&sharp_nt->base); in sharp_nt_panel_add()
271 if (sharp_nt->base.dev) in sharp_nt_panel_del()
272 drm_panel_remove(&sharp_nt->base); in sharp_nt_panel_del()
275 static int sharp_nt_panel_probe(struct mipi_dsi_device *dsi) in sharp_nt_panel_probe() argument
280 dsi->lanes = 2; in sharp_nt_panel_probe()
281 dsi->format = MIPI_DSI_FMT_RGB888; in sharp_nt_panel_probe()
282 dsi->mode_flags = MIPI_DSI_MODE_VIDEO | in sharp_nt_panel_probe()
288 sharp_nt = devm_kzalloc(&dsi->dev, sizeof(*sharp_nt), GFP_KERNEL); in sharp_nt_panel_probe()
290 return -ENOMEM; in sharp_nt_panel_probe()
292 mipi_dsi_set_drvdata(dsi, sharp_nt); in sharp_nt_panel_probe()
294 sharp_nt->dsi = dsi; in sharp_nt_panel_probe()
300 return mipi_dsi_attach(dsi); in sharp_nt_panel_probe()
303 static int sharp_nt_panel_remove(struct mipi_dsi_device *dsi) in sharp_nt_panel_remove() argument
305 struct sharp_nt_panel *sharp_nt = mipi_dsi_get_drvdata(dsi); in sharp_nt_panel_remove()
308 ret = drm_panel_disable(&sharp_nt->base); in sharp_nt_panel_remove()
310 dev_err(&dsi->dev, "failed to disable panel: %d\n", ret); in sharp_nt_panel_remove()
312 ret = mipi_dsi_detach(dsi); in sharp_nt_panel_remove()
314 dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret); in sharp_nt_panel_remove()
321 static void sharp_nt_panel_shutdown(struct mipi_dsi_device *dsi) in sharp_nt_panel_shutdown() argument
323 struct sharp_nt_panel *sharp_nt = mipi_dsi_get_drvdata(dsi); in sharp_nt_panel_shutdown()
325 drm_panel_disable(&sharp_nt->base); in sharp_nt_panel_shutdown()
329 { .compatible = "sharp,ls043t1le01-qhd", },
336 .name = "panel-sharp-ls043t1le01-qhd",
346 MODULE_DESCRIPTION("Sharp LS043T1LE01 NT35565-based qHD (540x960) video mode panel driver");