Lines Matching +full:panel +full:- +full:dsi
6 * Based on AUO panel driver by Rob Clark <robdclark@gmail.com>
36 struct mipi_dsi_device *dsi; member
48 static inline struct sharp_nt_panel *to_sharp_nt_panel(struct drm_panel *panel) in to_sharp_nt_panel() argument
50 return container_of(panel, struct sharp_nt_panel, base); in to_sharp_nt_panel()
55 struct mipi_dsi_device *dsi = sharp_nt->dsi; in sharp_nt_panel_init() local
58 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in sharp_nt_panel_init()
60 ret = mipi_dsi_dcs_exit_sleep_mode(dsi); in sharp_nt_panel_init()
66 /* Novatek two-lane operation */ in sharp_nt_panel_init()
67 ret = mipi_dsi_dcs_write(dsi, 0xae, (u8[]){ 0x03 }, 1); in sharp_nt_panel_init()
72 ret = mipi_dsi_dcs_set_pixel_format(dsi, MIPI_DCS_PIXEL_FMT_24BIT | in sharp_nt_panel_init()
82 struct mipi_dsi_device *dsi = sharp_nt->dsi; in sharp_nt_panel_on() local
85 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in sharp_nt_panel_on()
87 ret = mipi_dsi_dcs_set_display_on(dsi); in sharp_nt_panel_on()
96 struct mipi_dsi_device *dsi = sharp_nt->dsi; in sharp_nt_panel_off() local
99 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in sharp_nt_panel_off()
101 ret = mipi_dsi_dcs_set_display_off(dsi); in sharp_nt_panel_off()
105 ret = mipi_dsi_dcs_enter_sleep_mode(dsi); in sharp_nt_panel_off()
113 static int sharp_nt_panel_disable(struct drm_panel *panel) in sharp_nt_panel_disable() argument
115 struct sharp_nt_panel *sharp_nt = to_sharp_nt_panel(panel); in sharp_nt_panel_disable()
117 if (!sharp_nt->enabled) in sharp_nt_panel_disable()
120 backlight_disable(sharp_nt->backlight); in sharp_nt_panel_disable()
122 sharp_nt->enabled = false; in sharp_nt_panel_disable()
127 static int sharp_nt_panel_unprepare(struct drm_panel *panel) in sharp_nt_panel_unprepare() argument
129 struct sharp_nt_panel *sharp_nt = to_sharp_nt_panel(panel); in sharp_nt_panel_unprepare()
132 if (!sharp_nt->prepared) in sharp_nt_panel_unprepare()
137 dev_err(panel->dev, "failed to set panel off: %d\n", ret); in sharp_nt_panel_unprepare()
141 regulator_disable(sharp_nt->supply); in sharp_nt_panel_unprepare()
142 if (sharp_nt->reset_gpio) in sharp_nt_panel_unprepare()
143 gpiod_set_value(sharp_nt->reset_gpio, 0); in sharp_nt_panel_unprepare()
145 sharp_nt->prepared = false; in sharp_nt_panel_unprepare()
150 static int sharp_nt_panel_prepare(struct drm_panel *panel) in sharp_nt_panel_prepare() argument
152 struct sharp_nt_panel *sharp_nt = to_sharp_nt_panel(panel); in sharp_nt_panel_prepare()
155 if (sharp_nt->prepared) in sharp_nt_panel_prepare()
158 ret = regulator_enable(sharp_nt->supply); in sharp_nt_panel_prepare()
164 if (sharp_nt->reset_gpio) { in sharp_nt_panel_prepare()
165 gpiod_set_value(sharp_nt->reset_gpio, 1); in sharp_nt_panel_prepare()
167 gpiod_set_value(sharp_nt->reset_gpio, 0); in sharp_nt_panel_prepare()
169 gpiod_set_value(sharp_nt->reset_gpio, 1); in sharp_nt_panel_prepare()
175 dev_err(panel->dev, "failed to init panel: %d\n", ret); in sharp_nt_panel_prepare()
181 dev_err(panel->dev, "failed to set panel on: %d\n", ret); in sharp_nt_panel_prepare()
185 sharp_nt->prepared = true; in sharp_nt_panel_prepare()
190 regulator_disable(sharp_nt->supply); in sharp_nt_panel_prepare()
191 if (sharp_nt->reset_gpio) in sharp_nt_panel_prepare()
192 gpiod_set_value(sharp_nt->reset_gpio, 0); in sharp_nt_panel_prepare()
196 static int sharp_nt_panel_enable(struct drm_panel *panel) in sharp_nt_panel_enable() argument
198 struct sharp_nt_panel *sharp_nt = to_sharp_nt_panel(panel); in sharp_nt_panel_enable()
200 if (sharp_nt->enabled) in sharp_nt_panel_enable()
203 backlight_enable(sharp_nt->backlight); in sharp_nt_panel_enable()
205 sharp_nt->enabled = true; in sharp_nt_panel_enable()
223 static int sharp_nt_panel_get_modes(struct drm_panel *panel) in sharp_nt_panel_get_modes() argument
227 mode = drm_mode_duplicate(panel->drm, &default_mode); in sharp_nt_panel_get_modes()
229 dev_err(panel->drm->dev, "failed to add mode %ux%ux@%u\n", in sharp_nt_panel_get_modes()
232 return -ENOMEM; in sharp_nt_panel_get_modes()
237 drm_mode_probed_add(panel->connector, mode); in sharp_nt_panel_get_modes()
239 panel->connector->display_info.width_mm = 54; in sharp_nt_panel_get_modes()
240 panel->connector->display_info.height_mm = 95; in sharp_nt_panel_get_modes()
255 struct device *dev = &sharp_nt->dsi->dev; in sharp_nt_panel_add()
257 sharp_nt->mode = &default_mode; in sharp_nt_panel_add()
259 sharp_nt->supply = devm_regulator_get(dev, "avdd"); in sharp_nt_panel_add()
260 if (IS_ERR(sharp_nt->supply)) in sharp_nt_panel_add()
261 return PTR_ERR(sharp_nt->supply); in sharp_nt_panel_add()
263 sharp_nt->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in sharp_nt_panel_add()
264 if (IS_ERR(sharp_nt->reset_gpio)) { in sharp_nt_panel_add()
265 dev_err(dev, "cannot get reset-gpios %ld\n", in sharp_nt_panel_add()
266 PTR_ERR(sharp_nt->reset_gpio)); in sharp_nt_panel_add()
267 sharp_nt->reset_gpio = NULL; in sharp_nt_panel_add()
269 gpiod_set_value(sharp_nt->reset_gpio, 0); in sharp_nt_panel_add()
272 sharp_nt->backlight = devm_of_find_backlight(dev); in sharp_nt_panel_add()
274 if (IS_ERR(sharp_nt->backlight)) in sharp_nt_panel_add()
275 return PTR_ERR(sharp_nt->backlight); in sharp_nt_panel_add()
277 drm_panel_init(&sharp_nt->base); in sharp_nt_panel_add()
278 sharp_nt->base.funcs = &sharp_nt_panel_funcs; in sharp_nt_panel_add()
279 sharp_nt->base.dev = &sharp_nt->dsi->dev; in sharp_nt_panel_add()
281 return drm_panel_add(&sharp_nt->base); in sharp_nt_panel_add()
286 if (sharp_nt->base.dev) in sharp_nt_panel_del()
287 drm_panel_remove(&sharp_nt->base); in sharp_nt_panel_del()
290 static int sharp_nt_panel_probe(struct mipi_dsi_device *dsi) in sharp_nt_panel_probe() argument
295 dsi->lanes = 2; in sharp_nt_panel_probe()
296 dsi->format = MIPI_DSI_FMT_RGB888; in sharp_nt_panel_probe()
297 dsi->mode_flags = MIPI_DSI_MODE_VIDEO | in sharp_nt_panel_probe()
302 sharp_nt = devm_kzalloc(&dsi->dev, sizeof(*sharp_nt), GFP_KERNEL); in sharp_nt_panel_probe()
304 return -ENOMEM; in sharp_nt_panel_probe()
306 mipi_dsi_set_drvdata(dsi, sharp_nt); in sharp_nt_panel_probe()
308 sharp_nt->dsi = dsi; in sharp_nt_panel_probe()
314 return mipi_dsi_attach(dsi); in sharp_nt_panel_probe()
317 static int sharp_nt_panel_remove(struct mipi_dsi_device *dsi) in sharp_nt_panel_remove() argument
319 struct sharp_nt_panel *sharp_nt = mipi_dsi_get_drvdata(dsi); in sharp_nt_panel_remove()
322 ret = sharp_nt_panel_disable(&sharp_nt->base); in sharp_nt_panel_remove()
324 dev_err(&dsi->dev, "failed to disable panel: %d\n", ret); in sharp_nt_panel_remove()
326 ret = mipi_dsi_detach(dsi); in sharp_nt_panel_remove()
328 dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret); in sharp_nt_panel_remove()
335 static void sharp_nt_panel_shutdown(struct mipi_dsi_device *dsi) in sharp_nt_panel_shutdown() argument
337 struct sharp_nt_panel *sharp_nt = mipi_dsi_get_drvdata(dsi); in sharp_nt_panel_shutdown()
339 sharp_nt_panel_disable(&sharp_nt->base); in sharp_nt_panel_shutdown()
343 { .compatible = "sharp,ls043t1le01-qhd", },
350 .name = "panel-sharp-ls043t1le01-qhd",
360 MODULE_DESCRIPTION("Sharp LS043T1LE01 NT35565-based qHD (540x960) video mode panel driver");