Lines Matching refs:panel

249 static inline struct panel_edp *to_panel_edp(struct drm_panel *panel)  in to_panel_edp()  argument
251 return container_of(panel, struct panel_edp, base); in to_panel_edp()
254 static unsigned int panel_edp_get_timings_modes(struct panel_edp *panel, in panel_edp_get_timings_modes() argument
260 for (i = 0; i < panel->desc->num_timings; i++) { in panel_edp_get_timings_modes()
261 const struct display_timing *dt = &panel->desc->timings[i]; in panel_edp_get_timings_modes()
267 dev_err(panel->base.dev, "failed to add mode %ux%u\n", in panel_edp_get_timings_modes()
276 if (panel->desc->num_timings == 1) in panel_edp_get_timings_modes()
286 static unsigned int panel_edp_get_display_modes(struct panel_edp *panel, in panel_edp_get_display_modes() argument
292 for (i = 0; i < panel->desc->num_modes; i++) { in panel_edp_get_display_modes()
293 const struct drm_display_mode *m = &panel->desc->modes[i]; in panel_edp_get_display_modes()
297 dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n", in panel_edp_get_display_modes()
305 if (panel->desc->num_modes == 1) in panel_edp_get_display_modes()
317 static int panel_edp_override_edid_mode(struct panel_edp *panel, in panel_edp_override_edid_mode() argument
325 dev_err(panel->base.dev, "failed to add additional mode\n"); in panel_edp_override_edid_mode()
335 static int panel_edp_get_non_edid_modes(struct panel_edp *panel, in panel_edp_get_non_edid_modes() argument
339 bool has_override = panel->override_mode.type; in panel_edp_get_non_edid_modes()
342 if (!panel->desc) in panel_edp_get_non_edid_modes()
347 &panel->override_mode); in panel_edp_get_non_edid_modes()
352 dev_err(panel->base.dev, "failed to add override mode\n"); in panel_edp_get_non_edid_modes()
357 if (num == 0 && panel->desc->num_timings) in panel_edp_get_non_edid_modes()
358 num = panel_edp_get_timings_modes(panel, connector); in panel_edp_get_non_edid_modes()
366 WARN_ON(panel->desc->num_timings && panel->desc->num_modes); in panel_edp_get_non_edid_modes()
368 num = panel_edp_get_display_modes(panel, connector); in panel_edp_get_non_edid_modes()
370 connector->display_info.bpc = panel->desc->bpc; in panel_edp_get_non_edid_modes()
371 connector->display_info.width_mm = panel->desc->size.width; in panel_edp_get_non_edid_modes()
372 connector->display_info.height_mm = panel->desc->size.height; in panel_edp_get_non_edid_modes()
391 static int panel_edp_disable(struct drm_panel *panel) in panel_edp_disable() argument
393 struct panel_edp *p = to_panel_edp(panel); in panel_edp_disable()
413 static int panel_edp_unprepare(struct drm_panel *panel) in panel_edp_unprepare() argument
417 ret = pm_runtime_put_sync_suspend(panel->dev); in panel_edp_unprepare()
529 static int panel_edp_prepare(struct drm_panel *panel) in panel_edp_prepare() argument
533 ret = pm_runtime_get_sync(panel->dev); in panel_edp_prepare()
535 pm_runtime_put_autosuspend(panel->dev); in panel_edp_prepare()
542 static int panel_edp_enable(struct drm_panel *panel) in panel_edp_enable() argument
544 struct panel_edp *p = to_panel_edp(panel); in panel_edp_enable()
580 static int panel_edp_get_modes(struct drm_panel *panel, in panel_edp_get_modes() argument
583 struct panel_edp *p = to_panel_edp(panel); in panel_edp_get_modes()
592 pm_runtime_get_sync(panel->dev); in panel_edp_get_modes()
616 pm_runtime_mark_last_busy(panel->dev); in panel_edp_get_modes()
617 pm_runtime_put_autosuspend(panel->dev); in panel_edp_get_modes()
634 static int panel_edp_get_timings(struct drm_panel *panel, in panel_edp_get_timings() argument
638 struct panel_edp *p = to_panel_edp(panel); in panel_edp_get_timings()
651 static enum drm_panel_orientation panel_edp_get_orientation(struct drm_panel *panel) in panel_edp_get_orientation() argument
653 struct panel_edp *p = to_panel_edp(panel); in panel_edp_get_orientation()
660 struct drm_panel *panel = s->private; in detected_panel_show() local
661 struct panel_edp *p = to_panel_edp(panel); in detected_panel_show()
675 static void panel_edp_debugfs_init(struct drm_panel *panel, struct dentry *root) in panel_edp_debugfs_init() argument
677 debugfs_create_file("detected_panel", 0600, root, panel, &detected_panel_fops); in panel_edp_debugfs_init()
695 struct panel_edp *panel, in panel_edp_parse_panel_timing_node() argument
698 const struct panel_desc *desc = panel->desc; in panel_edp_parse_panel_timing_node()
711 for (i = 0; i < panel->desc->num_timings; i++) { in panel_edp_parse_panel_timing_node()
712 const struct display_timing *dt = &panel->desc->timings[i]; in panel_edp_parse_panel_timing_node()
728 drm_display_mode_from_videomode(&vm, &panel->override_mode); in panel_edp_parse_panel_timing_node()
729 panel->override_mode.type |= DRM_MODE_TYPE_DRIVER | in panel_edp_parse_panel_timing_node()
734 if (WARN_ON(!panel->override_mode.type)) in panel_edp_parse_panel_timing_node()
740 static void panel_edp_set_conservative_timings(struct panel_edp *panel, struct panel_desc *desc) in panel_edp_set_conservative_timings() argument
756 panel->detected_panel = ERR_PTR(-EINVAL); in panel_edp_set_conservative_timings()
759 static int generic_edp_panel_probe(struct device *dev, struct panel_edp *panel) in generic_edp_panel_probe() argument
773 panel->desc = desc; in generic_edp_panel_probe()
791 panel_edp_set_conservative_timings(panel, desc); in generic_edp_panel_probe()
795 base_block = drm_edid_read_base_block(panel->ddc); in generic_edp_panel_probe()
800 panel_edp_set_conservative_timings(panel, desc); in generic_edp_panel_probe()
805 panel->detected_panel = find_edp_panel(panel_id, base_block); in generic_edp_panel_probe()
814 if (WARN_ON(!panel->detected_panel)) { in generic_edp_panel_probe()
818 panel_edp_set_conservative_timings(panel, desc); in generic_edp_panel_probe()
821 vend, panel->detected_panel->ident.name, product_id); in generic_edp_panel_probe()
824 desc->delay = *panel->detected_panel->delay; in generic_edp_panel_probe()
837 struct panel_edp *panel; in panel_edp_probe() local
842 panel = devm_drm_panel_alloc(dev, struct panel_edp, base, in panel_edp_probe()
844 if (IS_ERR(panel)) in panel_edp_probe()
845 return PTR_ERR(panel); in panel_edp_probe()
847 panel->prepared_time = 0; in panel_edp_probe()
848 panel->desc = desc; in panel_edp_probe()
849 panel->aux = aux; in panel_edp_probe()
851 panel->no_hpd = of_property_read_bool(dev->of_node, "no-hpd"); in panel_edp_probe()
852 if (!panel->no_hpd) { in panel_edp_probe()
853 err = panel_edp_get_hpd_gpio(dev, panel); in panel_edp_probe()
858 panel->supply = devm_regulator_get(dev, "power"); in panel_edp_probe()
859 if (IS_ERR(panel->supply)) in panel_edp_probe()
860 return PTR_ERR(panel->supply); in panel_edp_probe()
862 panel->enable_gpio = devm_gpiod_get_optional(dev, "enable", in panel_edp_probe()
864 if (IS_ERR(panel->enable_gpio)) in panel_edp_probe()
865 return dev_err_probe(dev, PTR_ERR(panel->enable_gpio), in panel_edp_probe()
868 err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation); in panel_edp_probe()
876 panel->ddc = of_find_i2c_adapter_by_node(ddc); in panel_edp_probe()
879 if (!panel->ddc) in panel_edp_probe()
882 panel->ddc = &aux->ddc; in panel_edp_probe()
886 panel_edp_parse_panel_timing_node(dev, panel, &dt); in panel_edp_probe()
888 dev_set_drvdata(dev, panel); in panel_edp_probe()
890 err = drm_panel_of_backlight(&panel->base); in panel_edp_probe()
905 err = generic_edp_panel_probe(dev, panel); in panel_edp_probe()
912 desc = panel->desc; in panel_edp_probe()
917 if (!panel->base.backlight && panel->aux) { in panel_edp_probe()
919 err = drm_panel_dp_aux_backlight(&panel->base, panel->aux); in panel_edp_probe()
932 drm_panel_add(&panel->base); in panel_edp_probe()
940 if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc)) in panel_edp_probe()
941 put_device(&panel->ddc->dev); in panel_edp_probe()
948 struct panel_edp *panel = dev_get_drvdata(dev); in panel_edp_shutdown() local
970 if (panel->base.enabled) in panel_edp_shutdown()
971 drm_panel_disable(&panel->base); in panel_edp_shutdown()
972 if (panel->base.prepared) in panel_edp_shutdown()
973 drm_panel_unprepare(&panel->base); in panel_edp_shutdown()
978 struct panel_edp *panel = dev_get_drvdata(dev); in panel_edp_remove() local
980 drm_panel_remove(&panel->base); in panel_edp_remove()
985 if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc)) in panel_edp_remove()
986 put_device(&panel->ddc->dev); in panel_edp_remove()
988 drm_edid_free(panel->drm_edid); in panel_edp_remove()
989 panel->drm_edid = NULL; in panel_edp_remove()
2041 const struct edp_panel_entry *panel; in find_edp_panel() local
2052 for (panel = edp_panels; panel->ident.panel_id; panel++) in find_edp_panel()
2053 if (drm_edid_match(edid, &panel->ident)) in find_edp_panel()
2054 return panel; in find_edp_panel()
2056 for (panel = edp_panels; panel->ident.panel_id; panel++) in find_edp_panel()
2057 if (panel->ident.panel_id == panel_id) in find_edp_panel()
2058 return panel; in find_edp_panel()