• Home
  • Raw
  • Download

Lines Matching +full:power +full:- +full:management

2  * drivers/base/power/clock_ops.c - Generic clock manipulation PM callbacks
38 * pm_clk_enable - Enable a clock, reporting any errors
46 if (ce->status < PCE_STATUS_ERROR) { in __pm_clk_enable()
47 ret = clk_enable(ce->clk); in __pm_clk_enable()
49 ce->status = PCE_STATUS_ENABLED; in __pm_clk_enable()
52 __func__, ce->clk, ret); in __pm_clk_enable()
57 * pm_clk_acquire - Acquire a device clock.
63 if (!ce->clk) in pm_clk_acquire()
64 ce->clk = clk_get(dev, ce->con_id); in pm_clk_acquire()
65 if (IS_ERR(ce->clk)) { in pm_clk_acquire()
66 ce->status = PCE_STATUS_ERROR; in pm_clk_acquire()
68 clk_prepare(ce->clk); in pm_clk_acquire()
69 ce->status = PCE_STATUS_ACQUIRED; in pm_clk_acquire()
71 ce->clk, ce->con_id); in pm_clk_acquire()
82 return -EINVAL; in __pm_clk_add()
86 return -ENOMEM; in __pm_clk_add()
89 ce->con_id = kstrdup(con_id, GFP_KERNEL); in __pm_clk_add()
90 if (!ce->con_id) { in __pm_clk_add()
94 return -ENOMEM; in __pm_clk_add()
99 return -ENOENT; in __pm_clk_add()
101 ce->clk = clk; in __pm_clk_add()
106 spin_lock_irq(&psd->lock); in __pm_clk_add()
107 list_add_tail(&ce->node, &psd->clock_list); in __pm_clk_add()
108 spin_unlock_irq(&psd->lock); in __pm_clk_add()
113 * pm_clk_add - Start using a device clock for power management.
114 * @dev: Device whose clock is going to be used for power management.
118 * the power management of @dev.
127 * pm_clk_add_clk - Start using a device clock for power management.
128 * @dev: Device whose clock is going to be used for power management.
131 * Add the clock to the list of clocks used for the power management of @dev.
132 * The power-management code will take control of the clock reference, so
144 * of_pm_clk_add_clk - Start using a device clock for power management.
145 * @dev: Device whose clock is going to be used for power management.
146 * @name: Name of clock that is going to be used for power management.
148 * Add the clock described in the 'clocks' device-tree node that matches
149 * with the 'name' provided, to the list of clocks used for the power
150 * management of @dev. On success, returns 0. Returns a negative error
158 if (!dev || !dev->of_node || !name) in of_pm_clk_add_clk()
159 return -EINVAL; in of_pm_clk_add_clk()
161 clk = of_clk_get_by_name(dev->of_node, name); in of_pm_clk_add_clk()
176 * of_pm_clk_add_clks - Start using device clock(s) for power management.
177 * @dev: Device whose clock(s) is going to be used for power management.
179 * Add a series of clocks described in the 'clocks' device-tree node for
180 * a device to the list of clocks used for the power management of @dev.
191 if (!dev || !dev->of_node) in of_pm_clk_add_clks()
192 return -EINVAL; in of_pm_clk_add_clks()
194 count = of_count_phandle_with_args(dev->of_node, "clocks", in of_pm_clk_add_clks()
195 "#clock-cells"); in of_pm_clk_add_clks()
197 return -ENODEV; in of_pm_clk_add_clks()
201 return -ENOMEM; in of_pm_clk_add_clks()
204 clks[i] = of_clk_get(dev->of_node, i); in of_pm_clk_add_clks()
222 while (i--) in of_pm_clk_add_clks()
232 * __pm_clk_remove - Destroy PM clock entry.
240 if (ce->status < PCE_STATUS_ERROR) { in __pm_clk_remove()
241 if (ce->status == PCE_STATUS_ENABLED) in __pm_clk_remove()
242 clk_disable(ce->clk); in __pm_clk_remove()
244 if (ce->status >= PCE_STATUS_ACQUIRED) { in __pm_clk_remove()
245 clk_unprepare(ce->clk); in __pm_clk_remove()
246 clk_put(ce->clk); in __pm_clk_remove()
250 kfree(ce->con_id); in __pm_clk_remove()
255 * pm_clk_remove - Stop using a device clock for power management.
260 * the power management of @dev.
270 spin_lock_irq(&psd->lock); in pm_clk_remove()
272 list_for_each_entry(ce, &psd->clock_list, node) { in pm_clk_remove()
273 if (!con_id && !ce->con_id) in pm_clk_remove()
275 else if (!con_id || !ce->con_id) in pm_clk_remove()
277 else if (!strcmp(con_id, ce->con_id)) in pm_clk_remove()
281 spin_unlock_irq(&psd->lock); in pm_clk_remove()
285 list_del(&ce->node); in pm_clk_remove()
286 spin_unlock_irq(&psd->lock); in pm_clk_remove()
293 * pm_clk_remove_clk - Stop using a device clock for power management.
298 * the power management of @dev.
308 spin_lock_irq(&psd->lock); in pm_clk_remove_clk()
310 list_for_each_entry(ce, &psd->clock_list, node) { in pm_clk_remove_clk()
311 if (clk == ce->clk) in pm_clk_remove_clk()
315 spin_unlock_irq(&psd->lock); in pm_clk_remove_clk()
319 list_del(&ce->node); in pm_clk_remove_clk()
320 spin_unlock_irq(&psd->lock); in pm_clk_remove_clk()
327 * pm_clk_init - Initialize a device's list of power management clocks.
337 INIT_LIST_HEAD(&psd->clock_list); in pm_clk_init()
342 * pm_clk_create - Create and initialize a device's list of PM clocks.
346 * members and make the @dev's power.subsys_data field point to it.
355 * pm_clk_destroy - Destroy a device's list of power management clocks.
358 * Clear the @dev's power.subsys_data field, remove the list of clock entries
373 spin_lock_irq(&psd->lock); in pm_clk_destroy()
375 list_for_each_entry_safe_reverse(ce, c, &psd->clock_list, node) in pm_clk_destroy()
376 list_move(&ce->node, &list); in pm_clk_destroy()
378 spin_unlock_irq(&psd->lock); in pm_clk_destroy()
383 list_del(&ce->node); in pm_clk_destroy()
390 * pm_clk_suspend - Disable clocks in a device's PM clock list.
404 spin_lock_irqsave(&psd->lock, flags); in pm_clk_suspend()
406 list_for_each_entry_reverse(ce, &psd->clock_list, node) { in pm_clk_suspend()
407 if (ce->status < PCE_STATUS_ERROR) { in pm_clk_suspend()
408 if (ce->status == PCE_STATUS_ENABLED) in pm_clk_suspend()
409 clk_disable(ce->clk); in pm_clk_suspend()
410 ce->status = PCE_STATUS_ACQUIRED; in pm_clk_suspend()
414 spin_unlock_irqrestore(&psd->lock, flags); in pm_clk_suspend()
421 * pm_clk_resume - Enable clocks in a device's PM clock list.
435 spin_lock_irqsave(&psd->lock, flags); in pm_clk_resume()
437 list_for_each_entry(ce, &psd->clock_list, node) in pm_clk_resume()
440 spin_unlock_irqrestore(&psd->lock, flags); in pm_clk_resume()
447 * pm_clk_notify - Notify routine for device addition and removal.
476 if (dev->pm_domain) in pm_clk_notify()
483 dev_pm_domain_set(dev, clknb->pm_domain); in pm_clk_notify()
484 if (clknb->con_ids[0]) { in pm_clk_notify()
485 for (con_id = clknb->con_ids; *con_id; con_id++) in pm_clk_notify()
493 if (dev->pm_domain != clknb->pm_domain) in pm_clk_notify()
546 * enable_clock - Enable a device clock.
563 * disable_clock - Disable a device clock.
580 * pm_clk_notify - Notify routine for device addition and removal.
603 if (clknb->con_ids[0]) { in pm_clk_notify()
604 for (con_id = clknb->con_ids; *con_id; con_id++) in pm_clk_notify()
612 if (clknb->con_ids[0]) { in pm_clk_notify()
613 for (con_id = clknb->con_ids; *con_id; con_id++) in pm_clk_notify()
627 * pm_clk_add_notifier - Add bus type notifier for power management clocks.
642 clknb->nb.notifier_call = pm_clk_notify; in pm_clk_add_notifier()
643 bus_register_notifier(bus, &clknb->nb); in pm_clk_add_notifier()