Lines Matching +full:panel +full:- +full:specific

1 // SPDX-License-Identifier: GPL-2.0+
64 #define DSI_CMD2_BK0_PORCTRL_B0(m) ((m)->vtotal - (m)->vsync_end)
65 #define DSI_CMD2_BK0_PORCTRL_B1(m) ((m)->vsync_start - (m)->vdisplay)
81 #define DSI_PWCTLR2_AVCL 0x0 /* AVCL -4.4v */
100 struct drm_panel panel; member
109 static inline struct st7701 *panel_to_st7701(struct drm_panel *panel) in panel_to_st7701() argument
111 return container_of(panel, struct st7701, panel); in panel_to_st7701()
117 return mipi_dsi_dcs_write_buffer(st7701->dsi, seq, len); in st7701_dsi_write()
128 const struct drm_display_mode *mode = st7701->desc->mode; in st7701_init_sequence()
137 msleep(st7701->sleep_delay); in st7701_init_sequence()
172 * specific command sequence, so grab the same from vendor BSP driver. in st7701_init_sequence()
197 static int st7701_prepare(struct drm_panel *panel) in st7701_prepare() argument
199 struct st7701 *st7701 = panel_to_st7701(panel); in st7701_prepare()
202 gpiod_set_value(st7701->reset, 0); in st7701_prepare()
204 ret = regulator_bulk_enable(st7701->desc->num_supplies, in st7701_prepare()
205 st7701->supplies); in st7701_prepare()
210 gpiod_set_value(st7701->reset, 1); in st7701_prepare()
218 static int st7701_enable(struct drm_panel *panel) in st7701_enable() argument
220 struct st7701 *st7701 = panel_to_st7701(panel); in st7701_enable()
227 static int st7701_disable(struct drm_panel *panel) in st7701_disable() argument
229 struct st7701 *st7701 = panel_to_st7701(panel); in st7701_disable()
236 static int st7701_unprepare(struct drm_panel *panel) in st7701_unprepare() argument
238 struct st7701 *st7701 = panel_to_st7701(panel); in st7701_unprepare()
242 msleep(st7701->sleep_delay); in st7701_unprepare()
244 gpiod_set_value(st7701->reset, 0); in st7701_unprepare()
255 msleep(st7701->sleep_delay); in st7701_unprepare()
257 regulator_bulk_disable(st7701->desc->num_supplies, st7701->supplies); in st7701_unprepare()
262 static int st7701_get_modes(struct drm_panel *panel, in st7701_get_modes() argument
265 struct st7701 *st7701 = panel_to_st7701(panel); in st7701_get_modes()
266 const struct drm_display_mode *desc_mode = st7701->desc->mode; in st7701_get_modes()
269 mode = drm_mode_duplicate(connector->dev, desc_mode); in st7701_get_modes()
271 dev_err(&st7701->dsi->dev, "failed to add mode %ux%u@%u\n", in st7701_get_modes()
272 desc_mode->hdisplay, desc_mode->vdisplay, in st7701_get_modes()
274 return -ENOMEM; in st7701_get_modes()
280 connector->display_info.width_mm = desc_mode->width_mm; in st7701_get_modes()
281 connector->display_info.height_mm = desc_mode->height_mm; in st7701_get_modes()
325 .panel_sleep_delay = 80, /* panel need extra 80ms for sleep out cmd */
334 st7701 = devm_kzalloc(&dsi->dev, sizeof(*st7701), GFP_KERNEL); in st7701_dsi_probe()
336 return -ENOMEM; in st7701_dsi_probe()
338 desc = of_device_get_match_data(&dsi->dev); in st7701_dsi_probe()
339 dsi->mode_flags = desc->flags; in st7701_dsi_probe()
340 dsi->format = desc->format; in st7701_dsi_probe()
341 dsi->lanes = desc->lanes; in st7701_dsi_probe()
343 st7701->supplies = devm_kcalloc(&dsi->dev, desc->num_supplies, in st7701_dsi_probe()
344 sizeof(*st7701->supplies), in st7701_dsi_probe()
346 if (!st7701->supplies) in st7701_dsi_probe()
347 return -ENOMEM; in st7701_dsi_probe()
349 for (i = 0; i < desc->num_supplies; i++) in st7701_dsi_probe()
350 st7701->supplies[i].supply = desc->supply_names[i]; in st7701_dsi_probe()
352 ret = devm_regulator_bulk_get(&dsi->dev, desc->num_supplies, in st7701_dsi_probe()
353 st7701->supplies); in st7701_dsi_probe()
357 st7701->reset = devm_gpiod_get(&dsi->dev, "reset", GPIOD_OUT_LOW); in st7701_dsi_probe()
358 if (IS_ERR(st7701->reset)) { in st7701_dsi_probe()
359 dev_err(&dsi->dev, "Couldn't get our reset GPIO\n"); in st7701_dsi_probe()
360 return PTR_ERR(st7701->reset); in st7701_dsi_probe()
363 drm_panel_init(&st7701->panel, &dsi->dev, &st7701_funcs, in st7701_dsi_probe()
371 * add panel specific delay for those cases. As now this panel specific in st7701_dsi_probe()
372 * delay information is referenced from those panel BSP driver, example in st7701_dsi_probe()
375 st7701->sleep_delay = 120 + desc->panel_sleep_delay; in st7701_dsi_probe()
377 ret = drm_panel_of_backlight(&st7701->panel); in st7701_dsi_probe()
381 drm_panel_add(&st7701->panel); in st7701_dsi_probe()
384 st7701->dsi = dsi; in st7701_dsi_probe()
385 st7701->desc = desc; in st7701_dsi_probe()
395 drm_panel_remove(&st7701->panel); in st7701_dsi_remove()
417 MODULE_DESCRIPTION("Sitronix ST7701 LCD Panel Driver");