On Wed, Dec 10, 2014 at 10:08:57AM +0800, Mark Zhang wrote: > On 12/10/2014 03:29 AM, Sean Paul wrote: > > On Sun, Dec 7, 2014 at 10:40 PM, Mark Zhang <markz@xxxxxxxxxx> wrote: [...] > >> > >> err = clk_set_rate(dsi->clk_parent, plld); > >> if (err < 0) { > [...] > >> + > >> + drm_modeset_lock_all(tegra->drm); > >> + list_for_each_entry(connector, &tegra->drm->mode_config.connector_list, > >> + head) { > >> + if (connector->funcs->dpms) > >> + connector->funcs->dpms(connector, connector->dpms); > >> + } > >> + drm_modeset_unlock_all(tegra->drm); > >> + > >> + drm_helper_resume_force_mode(tegra->drm); > >> + > >> + return 0; > >> +} > >> +#endif > > > > So this is the tricky chunk, it definitely does not belong here. I > > think it makes most sense for this to live in drm.c, however > > host1x_driver doesn't have suspend/resume hooks. > > > > Agree. drm.c is the best place for putting this. > > > I suspect the correct thing to do here is to add them to > > host1x_driver, but I'm not sure how much effort is involved in doing > > that. > > > > I thought about this before. If we do it in host1x driver, IIUC, it > means that when host1x starts suspending, it will suspend all host1x > client devices, right? Honestly I feel this is not a good thing despite > I can't tell what's the problem in this right now... I've just sent out patches for review that add the missing infrastructure to properly do suspend/resume. The idea behind this is that the DRM host1x device's ->pm_ops are responsible for dealing with the suspend/resume at a subsystem level (call connectors' ->dpms() callbacks, etc.) whereas more fine-grained suspend/resume can further be done in the ->pm_ops of the individual subdevices. The infrastructure makes sure that these get called in the right order. Thierry
Attachment:
pgp4vAv2IMT8j.pgp
Description: PGP signature