Lines Matching +full:autosuspend +full:- +full:delay
1 // SPDX-License-Identifier: GPL-2.0
6 * by the DRM_PANEL_SIMPLE driver because its power sequencing is non-standard.
10 #include <linux/delay.h>
70 if (p->el3_was_on)
71 atana33xc20_wait(p->el_on3_off_time, 150);
73 drm_dp_dpcd_set_powered(p->aux, false);
74 ret = regulator_disable(p->supply);
77 p->powered_off_time = ktime_get_boottime();
78 p->el3_was_on = false;
90 atana33xc20_wait(p->powered_off_time, 500);
92 ret = regulator_enable(p->supply);
95 drm_dp_dpcd_set_powered(p->aux, true);
96 p->powered_on_time = ktime_get_boottime();
98 if (p->no_hpd) {
103 if (p->hpd_gpio) {
104 ret = readx_poll_timeout(gpiod_get_value_cansleep, p->hpd_gpio,
114 } else if (p->aux->wait_hpd_asserted) {
115 ret = p->aux->wait_hpd_asserted(p->aux, HPD_MAX_US);
134 drm_dp_dpcd_set_powered(p->aux, false);
135 regulator_disable(p->supply);
144 gpiod_set_value_cansleep(p->el_on3_gpio, 0);
145 p->el_on3_off_time = ktime_get_boottime();
154 p->el3_was_on = true;
175 * non-obvious.
177 if (WARN_ON(p->el3_was_on))
178 return -EIO;
184 atana33xc20_wait(p->powered_on_time, 400);
186 gpiod_set_value_cansleep(p->el_on3_gpio, 1);
196 * Purposely do a put_sync, don't use autosuspend. The panel's tcon
200 * NOTE: we still want autosuspend for cases where we only turn on
203 ret = pm_runtime_put_sync_suspend(panel->dev);
214 ret = pm_runtime_get_sync(panel->dev);
216 pm_runtime_put_autosuspend(panel->dev);
227 struct dp_aux_ep_device *aux_ep = to_dp_aux_ep_dev(panel->dev);
230 pm_runtime_get_sync(panel->dev);
232 if (!p->drm_edid)
233 p->drm_edid = drm_edid_read_ddc(connector, &aux_ep->aux->ddc);
235 drm_edid_connector_update(connector, p->drm_edid);
239 pm_runtime_mark_last_busy(panel->dev);
240 pm_runtime_put_autosuspend(panel->dev);
266 struct device *dev = &aux_ep->dev;
277 panel->aux = aux_ep->aux;
279 panel->supply = devm_regulator_get(dev, "power");
280 if (IS_ERR(panel->supply))
281 return dev_err_probe(dev, PTR_ERR(panel->supply),
284 panel->el_on3_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
285 if (IS_ERR(panel->el_on3_gpio))
286 return dev_err_probe(dev, PTR_ERR(panel->el_on3_gpio),
289 panel->no_hpd = of_property_read_bool(dev->of_node, "no-hpd");
290 if (!panel->no_hpd) {
291 panel->hpd_gpio = devm_gpiod_get_optional(dev, "hpd", GPIOD_IN);
292 if (IS_ERR(panel->hpd_gpio))
293 return dev_err_probe(dev, PTR_ERR(panel->hpd_gpio),
308 ret = drm_panel_dp_aux_backlight(&panel->base, aux_ep->aux);
320 drm_panel_add(&panel->base);
327 struct device *dev = &aux_ep->dev;
330 drm_panel_remove(&panel->base);
332 drm_edid_free(panel->drm_edid);