Lines Matching refs:prmd
67 struct omap_prm_domain *prmd; member
234 static void omap_prm_domain_show_state(struct omap_prm_domain *prmd, in omap_prm_domain_show_state() argument
237 dev_dbg(prmd->dev, "%s %s: %08x/%08x\n", in omap_prm_domain_show_state()
238 prmd->pd.name, desc, in omap_prm_domain_show_state()
239 readl_relaxed(prmd->prm->base + prmd->pwrstctrl), in omap_prm_domain_show_state()
240 readl_relaxed(prmd->prm->base + prmd->pwrstst)); in omap_prm_domain_show_state()
243 static inline void omap_prm_domain_show_state(struct omap_prm_domain *prmd, in omap_prm_domain_show_state() argument
251 struct omap_prm_domain *prmd; in omap_prm_domain_power_on() local
255 prmd = genpd_to_prm_domain(domain); in omap_prm_domain_power_on()
256 if (!prmd->cap) in omap_prm_domain_power_on()
259 omap_prm_domain_show_state(prmd, "on: previous state"); in omap_prm_domain_power_on()
261 if (prmd->pwrstctrl_saved) in omap_prm_domain_power_on()
262 v = prmd->pwrstctrl_saved; in omap_prm_domain_power_on()
264 v = readl_relaxed(prmd->prm->base + prmd->pwrstctrl); in omap_prm_domain_power_on()
267 prmd->prm->base + prmd->pwrstctrl); in omap_prm_domain_power_on()
270 ret = readl_relaxed_poll_timeout(prmd->prm->base + prmd->pwrstst, in omap_prm_domain_power_on()
274 dev_err(prmd->dev, "%s: %s timed out\n", in omap_prm_domain_power_on()
275 prmd->pd.name, __func__); in omap_prm_domain_power_on()
277 omap_prm_domain_show_state(prmd, "on: new state"); in omap_prm_domain_power_on()
283 static int omap_prm_domain_find_lowest(struct omap_prm_domain *prmd) in omap_prm_domain_find_lowest() argument
285 return __ffs(prmd->cap->usable_modes); in omap_prm_domain_find_lowest()
290 struct omap_prm_domain *prmd; in omap_prm_domain_power_off() local
294 prmd = genpd_to_prm_domain(domain); in omap_prm_domain_power_off()
295 if (!prmd->cap) in omap_prm_domain_power_off()
298 omap_prm_domain_show_state(prmd, "off: previous state"); in omap_prm_domain_power_off()
300 v = readl_relaxed(prmd->prm->base + prmd->pwrstctrl); in omap_prm_domain_power_off()
301 prmd->pwrstctrl_saved = v; in omap_prm_domain_power_off()
304 v |= omap_prm_domain_find_lowest(prmd); in omap_prm_domain_power_off()
306 if (prmd->cap->statechange) in omap_prm_domain_power_off()
308 if (prmd->cap->logicretstate) in omap_prm_domain_power_off()
313 writel_relaxed(v, prmd->prm->base + prmd->pwrstctrl); in omap_prm_domain_power_off()
316 ret = readl_relaxed_poll_timeout(prmd->prm->base + prmd->pwrstst, in omap_prm_domain_power_off()
320 dev_warn(prmd->dev, "%s: %s timed out\n", in omap_prm_domain_power_off()
321 __func__, prmd->pd.name); in omap_prm_domain_power_off()
323 omap_prm_domain_show_state(prmd, "off: new state"); in omap_prm_domain_power_off()
333 struct omap_prm_domain *prmd; in omap_prm_domain_attach_dev() local
337 prmd = genpd_to_prm_domain(domain); in omap_prm_domain_attach_dev()
347 prmd->pd.name, pd_args.args_count); in omap_prm_domain_attach_dev()
366 struct omap_prm_domain *prmd; in omap_prm_domain_init() local
377 prmd = devm_kzalloc(dev, sizeof(*prmd), GFP_KERNEL); in omap_prm_domain_init()
378 if (!prmd) in omap_prm_domain_init()
385 prmd->dev = dev; in omap_prm_domain_init()
386 prmd->prm = prm; in omap_prm_domain_init()
387 prmd->cap = prmd->prm->data->dmap; in omap_prm_domain_init()
388 prmd->pwrstctrl = prmd->prm->data->pwrstctrl; in omap_prm_domain_init()
389 prmd->pwrstst = prmd->prm->data->pwrstst; in omap_prm_domain_init()
391 prmd->pd.name = name; in omap_prm_domain_init()
392 prmd->pd.power_on = omap_prm_domain_power_on; in omap_prm_domain_init()
393 prmd->pd.power_off = omap_prm_domain_power_off; in omap_prm_domain_init()
394 prmd->pd.attach_dev = omap_prm_domain_attach_dev; in omap_prm_domain_init()
395 prmd->pd.detach_dev = omap_prm_domain_detach_dev; in omap_prm_domain_init()
397 pm_genpd_init(&prmd->pd, NULL, true); in omap_prm_domain_init()
398 error = of_genpd_add_provider_simple(np, &prmd->pd); in omap_prm_domain_init()
400 pm_genpd_remove(&prmd->pd); in omap_prm_domain_init()
402 prm->prmd = prmd; in omap_prm_domain_init()
669 pm_genpd_remove(&prm->prmd->pd); in omap_prm_probe()