Lines Matching refs:panel
42 * @modes: Pointer to array of fixed modes appropriate for this panel. If
52 * @size: Structure containing the physical size of this panel.
53 * @delay: Structure containing various delay values for this panel.
66 * @width: width (in millimeters) of the panel's active display area
67 * @height: height (in millimeters) of the panel's active display area
75 * @prepare: the time (in milliseconds) that it takes for the panel to
79 * @enable: the time (in milliseconds) that it takes for the panel to
82 * @disable: the time (in milliseconds) that it takes for the panel to
84 * @unprepare: the time (in milliseconds) that it takes for the panel
119 static inline struct panel_simple *to_panel_simple(struct drm_panel *panel)
121 return container_of(panel, struct panel_simple, base);
124 static unsigned int panel_simple_get_timings_modes(struct panel_simple *panel,
130 for (i = 0; i < panel->desc->num_timings; i++) {
131 const struct display_timing *dt = &panel->desc->timings[i];
137 dev_err(panel->base.dev, "failed to add mode %ux%u\n",
146 if (panel->desc->num_timings == 1)
156 static unsigned int panel_simple_get_display_modes(struct panel_simple *panel,
162 for (i = 0; i < panel->desc->num_modes; i++) {
163 const struct drm_display_mode *m = &panel->desc->modes[i];
167 dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n",
175 if (panel->desc->num_modes == 1)
187 static int panel_simple_get_non_edid_modes(struct panel_simple *panel,
191 bool has_override = panel->override_mode.type;
194 if (!panel->desc)
199 &panel->override_mode);
204 dev_err(panel->base.dev, "failed to add override mode\n");
209 if (num == 0 && panel->desc->num_timings)
210 num = panel_simple_get_timings_modes(panel, connector);
218 WARN_ON(panel->desc->num_timings && panel->desc->num_modes);
220 num = panel_simple_get_display_modes(panel, connector);
222 connector->display_info.bpc = panel->desc->bpc;
223 connector->display_info.width_mm = panel->desc->size.width;
224 connector->display_info.height_mm = panel->desc->size.height;
225 if (panel->desc->bus_format)
227 &panel->desc->bus_format, 1);
228 connector->display_info.bus_flags = panel->desc->bus_flags;
233 static int panel_simple_disable(struct drm_panel *panel)
235 struct panel_simple *p = to_panel_simple(panel);
248 static int panel_simple_unprepare(struct drm_panel *panel)
250 struct panel_simple *p = to_panel_simple(panel);
281 * hpd gpio needs the panel to init before probing.
292 static int panel_simple_prepare(struct drm_panel *panel)
294 struct panel_simple *p = to_panel_simple(panel);
304 dev_err(panel->dev, "failed to enable supply: %d\n", err);
318 err = panel_simple_get_hpd_gpio(panel->dev, p, false);
330 dev_err(panel->dev,
341 static int panel_simple_enable(struct drm_panel *panel)
343 struct panel_simple *p = to_panel_simple(panel);
356 static int panel_simple_get_modes(struct drm_panel *panel,
359 struct panel_simple *p = to_panel_simple(panel);
373 /* add hard-coded panel modes */
376 /* set up connector's "panel orientation" property */
382 static int panel_simple_get_timings(struct drm_panel *panel,
386 struct panel_simple *p = to_panel_simple(panel);
411 struct panel_simple *panel)
429 ret = of_get_display_timing(np, "panel-timing", timing);
431 dev_err(dev, "%pOF: no panel-timing node found for \"panel-dpi\" binding\n",
451 panel->desc = desc;
460 struct panel_simple *panel,
463 const struct panel_desc *desc = panel->desc;
468 dev_err(dev, "Reject override mode: panel has a fixed mode\n");
476 for (i = 0; i < panel->desc->num_timings; i++) {
477 const struct display_timing *dt = &panel->desc->timings[i];
493 drm_display_mode_from_videomode(&vm, &panel->override_mode);
494 panel->override_mode.type |= DRM_MODE_TYPE_DRIVER |
499 if (WARN_ON(!panel->override_mode.type))
505 struct panel_simple *panel;
512 panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
513 if (!panel)
516 panel->enabled = false;
517 panel->prepared = false;
518 panel->desc = desc;
520 panel->no_hpd = of_property_read_bool(dev->of_node, "no-hpd");
521 if (!panel->no_hpd) {
522 err = panel_simple_get_hpd_gpio(dev, panel, true);
527 panel->supply = devm_regulator_get(dev, "power");
528 if (IS_ERR(panel->supply))
529 return PTR_ERR(panel->supply);
531 panel->enable_gpio = devm_gpiod_get_optional(dev, "enable",
533 if (IS_ERR(panel->enable_gpio)) {
534 err = PTR_ERR(panel->enable_gpio);
540 err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation);
548 panel->ddc = of_find_i2c_adapter_by_node(ddc);
551 if (!panel->ddc)
556 /* Handle the generic panel-dpi binding */
557 err = panel_dpi_probe(dev, panel);
560 desc = panel->desc;
562 if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
563 panel_simple_parse_panel_timing_node(dev, panel, &dt);
622 drm_panel_init(&panel->base, dev, &panel_simple_funcs, connector_type);
624 err = drm_panel_of_backlight(&panel->base);
628 drm_panel_add(&panel->base);
630 dev_set_drvdata(dev, panel);
635 if (panel->ddc)
636 put_device(&panel->ddc->dev);
643 struct panel_simple *panel = dev_get_drvdata(dev);
645 drm_panel_remove(&panel->base);
646 drm_panel_disable(&panel->base);
647 drm_panel_unprepare(&panel->base);
649 if (panel->ddc)
650 put_device(&panel->ddc->dev);
657 struct panel_simple *panel = dev_get_drvdata(dev);
659 drm_panel_disable(&panel->base);
660 drm_panel_unprepare(&panel->base);
1347 * When power is first given to the panel there's a short
3017 * 800x480 CVT. The panel appears to be quite accepting, at least as far as
3724 /* The grayscale panel has 8 bit for the color .. Y (black) */
4276 .compatible = "ti,nspire-cx-lcd-panel",
4279 .compatible = "ti,nspire-classic-lcd-panel",
4316 .compatible = "panel-dpi",
4347 .name = "panel-simple",
4615 struct panel_simple *panel = dev_get_drvdata(&dsi->dev);
4617 drm_panel_remove(&panel->base);
4641 .name = "panel-simple-dsi",