Lines Matching +full:avee +full:- +full:supply

1 // SPDX-License-Identifier: GPL-2.0-only
22 #define MCS_PARAM_SCALER_FUNCTION 0x58 /* Scale-up function */
93 gpiod_set_value_cansleep(nt->reset_gpio, 1);
95 gpiod_set_value_cansleep(nt->reset_gpio, 0);
97 gpiod_set_value_cansleep(nt->reset_gpio, 1);
102 * nt35950_set_cmd2_page - Select manufacturer control (CMD2) page
105 * @page: Page number (0-7)
115 if (!dsi_ctx->accum_err)
116 nt->last_page = page;
120 * nt35950_set_data_compression - Set data compression mode
131 u8 last_page = nt->last_page;
154 * nt35950_set_scaler - Enable/disable resolution upscaling
168 * nt35950_set_scale_mode - Resolution upscaling mode
182 * nt35950_inject_black_image - Display a completely black image
190 * It makes sense to push a black image before sending the sleep-out
191 * and display-on commands.
209 cmd_test[ARRAY_SIZE(cmd_test) - 1] = 0x00;
214 * nt35950_set_dispout - Set Display Output register parameters
222 const struct nt35950_panel_mode *mode_data = nt->desc->mode_data;
224 if (mode_data[nt->cur_mode].is_video_mode)
226 if (mode_data[nt->cur_mode].enable_sram)
235 struct drm_connector *connector = nt->connector;
240 if (!connector->state || !connector->state->crtc)
243 crtc_state = connector->state->crtc->state;
245 for (i = 0; i < nt->desc->num_modes; i++) {
246 if (drm_mode_match(&crtc_state->mode,
247 &nt->desc->mode_data[i].mode,
257 const struct nt35950_panel_mode *mode_data = nt->desc->mode_data;
258 struct mipi_dsi_device *dsi = nt->dsi[0];
261 nt->cur_mode = nt35950_get_current_mode(nt);
262 nt->dsi[0]->mode_flags |= MIPI_DSI_MODE_LPM;
263 nt->dsi[1]->mode_flags |= MIPI_DSI_MODE_LPM;
266 nt35950_set_data_compression(&dsi_ctx, nt, mode_data[nt->cur_mode].compression);
267 nt35950_set_scale_mode(&dsi_ctx, mode_data[nt->cur_mode].scaler_mode);
268 nt35950_set_scaler(&dsi_ctx, mode_data[nt->cur_mode].scaler_on);
286 /* SPR Mode: YYG Rainbow-RGB */
301 nt->dsi[0]->mode_flags &= ~MIPI_DSI_MODE_LPM;
302 nt->dsi[1]->mode_flags &= ~MIPI_DSI_MODE_LPM;
309 struct mipi_dsi_device *dsi = nt->dsi[0];
318 nt->dsi[0]->mode_flags |= MIPI_DSI_MODE_LPM;
319 nt->dsi[1]->mode_flags |= MIPI_DSI_MODE_LPM;
326 nt->vregs[0].supply = "vddio";
327 nt->vregs[1].supply = "avdd";
328 nt->vregs[2].supply = "avee";
329 nt->vregs[3].supply = "dvdd";
330 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(nt->vregs),
331 nt->vregs);
335 ret = regulator_is_supported_voltage(nt->vregs[0].consumer,
338 return -EINVAL;
339 ret = regulator_is_supported_voltage(nt->vregs[1].consumer,
342 return -EINVAL;
343 /* AVEE is negative: -5.90V to -5.20V */
344 ret = regulator_is_supported_voltage(nt->vregs[2].consumer,
347 return -EINVAL;
349 ret = regulator_is_supported_voltage(nt->vregs[3].consumer,
352 return -EINVAL;
362 ret = regulator_enable(nt->vregs[0].consumer);
367 ret = regulator_enable(nt->vregs[3].consumer);
372 ret = regulator_enable(nt->vregs[1].consumer);
376 ret = regulator_enable(nt->vregs[2].consumer);
387 regulator_bulk_disable(ARRAY_SIZE(nt->vregs), nt->vregs);
400 gpiod_set_value_cansleep(nt->reset_gpio, 0);
401 regulator_bulk_disable(ARRAY_SIZE(nt->vregs), nt->vregs);
412 for (i = 0; i < nt->desc->num_modes; i++) {
415 mode = drm_mode_duplicate(connector->dev,
416 &nt->desc->mode_data[i].mode);
418 return -ENOMEM;
422 mode->type |= DRM_MODE_TYPE_DRIVER;
423 if (nt->desc->num_modes == 1)
424 mode->type |= DRM_MODE_TYPE_PREFERRED;
429 connector->display_info.bpc = 8;
430 connector->display_info.height_mm = nt->desc->mode_data[0].mode.height_mm;
431 connector->display_info.width_mm = nt->desc->mode_data[0].mode.width_mm;
432 nt->connector = connector;
434 return nt->desc->num_modes;
445 struct device *dev = &dsi->dev;
461 nt->desc = of_device_get_match_data(dev);
462 if (!nt->desc)
463 return -ENODEV;
465 nt->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS);
466 if (IS_ERR(nt->reset_gpio)) {
467 return dev_err_probe(dev, PTR_ERR(nt->reset_gpio),
472 if (nt->desc->is_dual_dsi) {
473 info = &nt->desc->dsi_info;
474 dsi_r = of_graph_get_remote_node(dsi->dev.of_node, 1, -1);
477 return -ENODEV;
482 return dev_err_probe(dev, -EPROBE_DEFER, "Cannot get secondary DSI host\n");
484 nt->dsi[1] = mipi_dsi_device_register_full(dsi_r_host, info);
485 if (IS_ERR(nt->dsi[1])) {
487 return PTR_ERR(nt->dsi[1]);
492 nt->dsi[0] = dsi;
495 ret = drm_panel_of_backlight(&nt->panel);
498 mipi_dsi_device_unregister(nt->dsi[1]);
503 drm_panel_add(&nt->panel);
506 nt->dsi[i]->lanes = nt->desc->num_lanes;
507 nt->dsi[i]->format = MIPI_DSI_FMT_RGB888;
509 nt->dsi[i]->mode_flags = MIPI_DSI_CLOCK_NON_CONTINUOUS |
512 if (nt->desc->mode_data[0].is_video_mode)
513 nt->dsi[i]->mode_flags |= MIPI_DSI_MODE_VIDEO;
515 ret = mipi_dsi_attach(nt->dsi[i]);
519 mipi_dsi_device_unregister(nt->dsi[1]);
526 /* Make sure to set RESX LOW before starting the power-on sequence */
527 gpiod_set_value_cansleep(nt->reset_gpio, 0);
536 ret = mipi_dsi_detach(nt->dsi[0]);
538 dev_err(&dsi->dev,
541 if (nt->dsi[1]) {
542 ret = mipi_dsi_detach(nt->dsi[1]);
544 dev_err(&dsi->dev,
546 mipi_dsi_device_unregister(nt->dsi[1]);
549 drm_panel_remove(&nt->panel);
600 .name = "panel-novatek-nt35950",