Lines Matching defs:panel
46 * struct panel_delay - Describes delays for a simple panel.
52 * The time (in milliseconds) that it takes after powering the panel
56 * NOTE: on some old panel data this number appears to be much too big.
108 * @enable: Time for the panel to display a valid frame.
110 * The time (in milliseconds) that it takes for the panel to
121 * @disable: Time for the panel to turn the display off.
123 * The time (in milliseconds) that it takes for the panel to
134 * The time (in milliseconds) that it takes for the panel
148 * struct panel_desc - Describes a simple panel.
152 * @modes: Pointer to array of fixed modes appropriate for this panel.
177 /** @size: Structure containing the physical size of this panel. */
190 /** @delay: Structure containing various delay values for this panel. */
195 * struct edp_panel_entry - Maps panel ID to delay / panel name.
198 /** @panel_id: 32-bit ID for panel, encoded with drm_edid_encode_panel_id(). */
201 /** @delay: The power sequencing delays needed for this panel. */
204 /** @name: Name of this panel (for printing to logs). */
239 static inline struct panel_edp *to_panel_edp(struct drm_panel *panel)
241 return container_of(panel, struct panel_edp, base);
244 static unsigned int panel_edp_get_timings_modes(struct panel_edp *panel,
250 for (i = 0; i < panel->desc->num_timings; i++) {
251 const struct display_timing *dt = &panel->desc->timings[i];
257 dev_err(panel->base.dev, "failed to add mode %ux%u\n",
266 if (panel->desc->num_timings == 1)
276 static unsigned int panel_edp_get_display_modes(struct panel_edp *panel,
282 for (i = 0; i < panel->desc->num_modes; i++) {
283 const struct drm_display_mode *m = &panel->desc->modes[i];
287 dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n",
295 if (panel->desc->num_modes == 1)
307 static int panel_edp_override_edid_mode(struct panel_edp *panel,
315 dev_err(panel->base.dev, "failed to add additional mode\n");
325 static int panel_edp_get_non_edid_modes(struct panel_edp *panel,
329 bool has_override = panel->override_mode.type;
332 if (!panel->desc)
337 &panel->override_mode);
342 dev_err(panel->base.dev, "failed to add override mode\n");
347 if (num == 0 && panel->desc->num_timings)
348 num = panel_edp_get_timings_modes(panel, connector);
356 WARN_ON(panel->desc->num_timings && panel->desc->num_modes);
358 num = panel_edp_get_display_modes(panel, connector);
360 connector->display_info.bpc = panel->desc->bpc;
361 connector->display_info.width_mm = panel->desc->size.width;
362 connector->display_info.height_mm = panel->desc->size.height;
381 static int panel_edp_disable(struct drm_panel *panel)
383 struct panel_edp *p = to_panel_edp(panel);
407 static int panel_edp_unprepare(struct drm_panel *panel)
409 struct panel_edp *p = to_panel_edp(panel);
416 ret = pm_runtime_put_sync_suspend(panel->dev);
525 static int panel_edp_prepare(struct drm_panel *panel)
527 struct panel_edp *p = to_panel_edp(panel);
534 ret = pm_runtime_get_sync(panel->dev);
536 pm_runtime_put_autosuspend(panel->dev);
545 static int panel_edp_enable(struct drm_panel *panel)
547 struct panel_edp *p = to_panel_edp(panel);
558 * However, we can only count this if HPD is readable by the panel
586 static int panel_edp_get_modes(struct drm_panel *panel,
589 struct panel_edp *p = to_panel_edp(panel);
597 pm_runtime_get_sync(panel->dev);
614 pm_runtime_mark_last_busy(panel->dev);
615 pm_runtime_put_autosuspend(panel->dev);
619 * Add hard-coded panel modes. Don't call this if there are no timings
620 * and no modes (the generic edp-panel case) because it will clobber
637 static int panel_edp_get_timings(struct drm_panel *panel,
641 struct panel_edp *p = to_panel_edp(panel);
654 static enum drm_panel_orientation panel_edp_get_orientation(struct drm_panel *panel)
656 struct panel_edp *p = to_panel_edp(panel);
663 struct drm_panel *panel = s->private;
664 struct panel_edp *p = to_panel_edp(panel);
678 static void panel_edp_debugfs_init(struct drm_panel *panel, struct dentry *root)
680 debugfs_create_file("detected_panel", 0600, root, panel, &detected_panel_fops);
698 struct panel_edp *panel,
701 const struct panel_desc *desc = panel->desc;
706 dev_err(dev, "Reject override mode: panel has a fixed mode\n");
714 for (i = 0; i < panel->desc->num_timings; i++) {
715 const struct display_timing *dt = &panel->desc->timings[i];
731 drm_display_mode_from_videomode(&vm, &panel->override_mode);
732 panel->override_mode.type |= DRM_MODE_TYPE_DRIVER |
737 if (WARN_ON(!panel->override_mode.type))
743 static int generic_edp_panel_probe(struct device *dev, struct panel_edp *panel)
756 panel->desc = desc;
768 /* Power the panel on so we can read the EDID */
771 dev_err(dev, "Couldn't power on panel to read EDID: %d\n", ret);
775 panel_id = drm_edid_get_panel_id(panel->ddc);
777 dev_err(dev, "Couldn't identify panel via EDID\n");
783 panel->detected_panel = find_edp_panel(panel_id);
790 if (WARN_ON(!panel->detected_panel)) {
792 "Unknown panel %s %#06x, using conservative timings\n",
796 * It's highly likely that the panel will work if we use very
813 panel->detected_panel = ERR_PTR(-EINVAL);
816 vend, panel->detected_panel->name, product_id);
819 desc->delay = *panel->detected_panel->delay;
833 struct panel_edp *panel;
838 panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
839 if (!panel)
842 panel->enabled = false;
843 panel->prepared_time = 0;
844 panel->desc = desc;
845 panel->aux = aux;
847 panel->no_hpd = of_property_read_bool(dev->of_node, "no-hpd");
848 if (!panel->no_hpd) {
849 err = panel_edp_get_hpd_gpio(dev, panel);
854 panel->supply = devm_regulator_get(dev, "power");
855 if (IS_ERR(panel->supply))
856 return PTR_ERR(panel->supply);
858 panel->enable_gpio = devm_gpiod_get_optional(dev, "enable",
860 if (IS_ERR(panel->enable_gpio))
861 return dev_err_probe(dev, PTR_ERR(panel->enable_gpio),
864 err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation);
872 panel->ddc = of_find_i2c_adapter_by_node(ddc);
875 if (!panel->ddc)
878 panel->ddc = &aux->ddc;
881 if (!of_get_display_timing(dev->of_node, "panel-timing", &dt))
882 panel_edp_parse_panel_timing_node(dev, panel, &dt);
884 dev_set_drvdata(dev, panel);
886 drm_panel_init(&panel->base, dev, &panel_edp_funcs, DRM_MODE_CONNECTOR_eDP);
888 err = drm_panel_of_backlight(&panel->base);
893 * We use runtime PM for prepare / unprepare since those power the panel
895 * to optimize powering the panel on briefly to read the EDID before
896 * fully enabling the panel.
902 if (of_device_is_compatible(dev->of_node, "edp-panel")) {
903 err = generic_edp_panel_probe(dev, panel);
906 "Couldn't detect panel nor find a fallback\n");
909 /* generic_edp_panel_probe() replaces desc in the panel */
910 desc = panel->desc;
915 if (!panel->base.backlight && panel->aux) {
917 err = drm_panel_dp_aux_backlight(&panel->base, panel->aux);
924 drm_panel_add(&panel->base);
932 if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc))
933 put_device(&panel->ddc->dev);
940 struct panel_edp *panel = dev_get_drvdata(dev);
942 drm_panel_remove(&panel->base);
943 drm_panel_disable(&panel->base);
944 drm_panel_unprepare(&panel->base);
948 if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc))
949 put_device(&panel->ddc->dev);
951 kfree(panel->edid);
952 panel->edid = NULL;
957 struct panel_edp *panel = dev_get_drvdata(dev);
959 drm_panel_disable(&panel->base);
960 drm_panel_unprepare(&panel->base);
1225 * When power is first given to the panel there's a short
1729 .compatible = "edp-panel",
1877 * platform_of_match table (if a panel is listed in both places).
1930 const struct edp_panel_entry *panel;
1935 for (panel = edp_panels; panel->panel_id; panel++)
1936 if (panel->panel_id == panel_id)
1937 return panel;
1946 /* Skip one since "edp-panel" is only supported on DP AUX bus */
1972 .name = "panel-edp",
2004 .name = "panel-simple-dp-aux",