Lines Matching refs:panel

232 static inline struct panel_edp *to_panel_edp(struct drm_panel *panel)  in to_panel_edp()  argument
234 return container_of(panel, struct panel_edp, base); in to_panel_edp()
237 static unsigned int panel_edp_get_timings_modes(struct panel_edp *panel, in panel_edp_get_timings_modes() argument
243 for (i = 0; i < panel->desc->num_timings; i++) { in panel_edp_get_timings_modes()
244 const struct display_timing *dt = &panel->desc->timings[i]; in panel_edp_get_timings_modes()
250 dev_err(panel->base.dev, "failed to add mode %ux%u\n", in panel_edp_get_timings_modes()
259 if (panel->desc->num_timings == 1) in panel_edp_get_timings_modes()
269 static unsigned int panel_edp_get_display_modes(struct panel_edp *panel, in panel_edp_get_display_modes() argument
275 for (i = 0; i < panel->desc->num_modes; i++) { in panel_edp_get_display_modes()
276 const struct drm_display_mode *m = &panel->desc->modes[i]; in panel_edp_get_display_modes()
280 dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n", in panel_edp_get_display_modes()
288 if (panel->desc->num_modes == 1) in panel_edp_get_display_modes()
300 static int panel_edp_get_non_edid_modes(struct panel_edp *panel, in panel_edp_get_non_edid_modes() argument
304 bool has_override = panel->override_mode.type; in panel_edp_get_non_edid_modes()
307 if (!panel->desc) in panel_edp_get_non_edid_modes()
312 &panel->override_mode); in panel_edp_get_non_edid_modes()
317 dev_err(panel->base.dev, "failed to add override mode\n"); in panel_edp_get_non_edid_modes()
322 if (num == 0 && panel->desc->num_timings) in panel_edp_get_non_edid_modes()
323 num = panel_edp_get_timings_modes(panel, connector); in panel_edp_get_non_edid_modes()
331 WARN_ON(panel->desc->num_timings && panel->desc->num_modes); in panel_edp_get_non_edid_modes()
333 num = panel_edp_get_display_modes(panel, connector); in panel_edp_get_non_edid_modes()
335 connector->display_info.bpc = panel->desc->bpc; in panel_edp_get_non_edid_modes()
336 connector->display_info.width_mm = panel->desc->size.width; in panel_edp_get_non_edid_modes()
337 connector->display_info.height_mm = panel->desc->size.height; in panel_edp_get_non_edid_modes()
356 static int panel_edp_disable(struct drm_panel *panel) in panel_edp_disable() argument
358 struct panel_edp *p = to_panel_edp(panel); in panel_edp_disable()
382 static int panel_edp_unprepare(struct drm_panel *panel) in panel_edp_unprepare() argument
384 struct panel_edp *p = to_panel_edp(panel); in panel_edp_unprepare()
391 pm_runtime_mark_last_busy(panel->dev); in panel_edp_unprepare()
392 ret = pm_runtime_put_autosuspend(panel->dev); in panel_edp_unprepare()
499 static int panel_edp_prepare(struct drm_panel *panel) in panel_edp_prepare() argument
501 struct panel_edp *p = to_panel_edp(panel); in panel_edp_prepare()
508 ret = pm_runtime_get_sync(panel->dev); in panel_edp_prepare()
510 pm_runtime_put_autosuspend(panel->dev); in panel_edp_prepare()
519 static int panel_edp_enable(struct drm_panel *panel) in panel_edp_enable() argument
521 struct panel_edp *p = to_panel_edp(panel); in panel_edp_enable()
556 static int panel_edp_get_modes(struct drm_panel *panel, in panel_edp_get_modes() argument
559 struct panel_edp *p = to_panel_edp(panel); in panel_edp_get_modes()
564 pm_runtime_get_sync(panel->dev); in panel_edp_get_modes()
572 pm_runtime_mark_last_busy(panel->dev); in panel_edp_get_modes()
573 pm_runtime_put_autosuspend(panel->dev); in panel_edp_get_modes()
592 static int panel_edp_get_timings(struct drm_panel *panel, in panel_edp_get_timings() argument
596 struct panel_edp *p = to_panel_edp(panel); in panel_edp_get_timings()
622 struct panel_edp *panel, in panel_edp_parse_panel_timing_node() argument
625 const struct panel_desc *desc = panel->desc; in panel_edp_parse_panel_timing_node()
638 for (i = 0; i < panel->desc->num_timings; i++) { in panel_edp_parse_panel_timing_node()
639 const struct display_timing *dt = &panel->desc->timings[i]; in panel_edp_parse_panel_timing_node()
655 drm_display_mode_from_videomode(&vm, &panel->override_mode); in panel_edp_parse_panel_timing_node()
656 panel->override_mode.type |= DRM_MODE_TYPE_DRIVER | in panel_edp_parse_panel_timing_node()
661 if (WARN_ON(!panel->override_mode.type)) in panel_edp_parse_panel_timing_node()
667 static int generic_edp_panel_probe(struct device *dev, struct panel_edp *panel) in generic_edp_panel_probe() argument
681 panel->desc = desc; in generic_edp_panel_probe()
700 panel_id = drm_edid_get_panel_id(panel->ddc); in generic_edp_panel_probe()
756 struct panel_edp *panel; in panel_edp_probe() local
761 panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL); in panel_edp_probe()
762 if (!panel) in panel_edp_probe()
765 panel->enabled = false; in panel_edp_probe()
766 panel->prepared_time = 0; in panel_edp_probe()
767 panel->desc = desc; in panel_edp_probe()
768 panel->aux = aux; in panel_edp_probe()
770 panel->no_hpd = of_property_read_bool(dev->of_node, "no-hpd"); in panel_edp_probe()
771 if (!panel->no_hpd) { in panel_edp_probe()
772 err = panel_edp_get_hpd_gpio(dev, panel); in panel_edp_probe()
777 panel->supply = devm_regulator_get(dev, "power"); in panel_edp_probe()
778 if (IS_ERR(panel->supply)) in panel_edp_probe()
779 return PTR_ERR(panel->supply); in panel_edp_probe()
781 panel->enable_gpio = devm_gpiod_get_optional(dev, "enable", in panel_edp_probe()
783 if (IS_ERR(panel->enable_gpio)) { in panel_edp_probe()
784 err = PTR_ERR(panel->enable_gpio); in panel_edp_probe()
790 err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation); in panel_edp_probe()
798 panel->ddc = of_find_i2c_adapter_by_node(ddc); in panel_edp_probe()
801 if (!panel->ddc) in panel_edp_probe()
804 panel->ddc = &aux->ddc; in panel_edp_probe()
808 panel_edp_parse_panel_timing_node(dev, panel, &dt); in panel_edp_probe()
810 dev_set_drvdata(dev, panel); in panel_edp_probe()
812 drm_panel_init(&panel->base, dev, &panel_edp_funcs, DRM_MODE_CONNECTOR_eDP); in panel_edp_probe()
814 err = drm_panel_of_backlight(&panel->base); in panel_edp_probe()
829 err = generic_edp_panel_probe(dev, panel); in panel_edp_probe()
836 desc = panel->desc; in panel_edp_probe()
841 if (!panel->base.backlight && panel->aux) { in panel_edp_probe()
843 err = drm_panel_dp_aux_backlight(&panel->base, panel->aux); in panel_edp_probe()
850 drm_panel_add(&panel->base); in panel_edp_probe()
858 if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc)) in panel_edp_probe()
859 put_device(&panel->ddc->dev); in panel_edp_probe()
866 struct panel_edp *panel = dev_get_drvdata(dev); in panel_edp_remove() local
868 drm_panel_remove(&panel->base); in panel_edp_remove()
869 drm_panel_disable(&panel->base); in panel_edp_remove()
870 drm_panel_unprepare(&panel->base); in panel_edp_remove()
874 if (panel->ddc && (!panel->aux || panel->ddc != &panel->aux->ddc)) in panel_edp_remove()
875 put_device(&panel->ddc->dev); in panel_edp_remove()
877 kfree(panel->edid); in panel_edp_remove()
878 panel->edid = NULL; in panel_edp_remove()
885 struct panel_edp *panel = dev_get_drvdata(dev); in panel_edp_shutdown() local
887 drm_panel_disable(&panel->base); in panel_edp_shutdown()
888 drm_panel_unprepare(&panel->base); in panel_edp_shutdown()
1783 const struct edp_panel_entry *panel; in find_edp_panel() local
1788 for (panel = edp_panels; panel->panel_id; panel++) in find_edp_panel()
1789 if (panel->panel_id == panel_id) in find_edp_panel()
1790 return panel; in find_edp_panel()