diff options
Diffstat (limited to 'drivers/base/power/clock_ops.c')
-rw-r--r-- | drivers/base/power/clock_ops.c | 234 |
1 files changed, 146 insertions, 88 deletions
diff --git a/drivers/base/power/clock_ops.c b/drivers/base/power/clock_ops.c index ad367c4139b..a846b2f95cf 100644 --- a/drivers/base/power/clock_ops.c +++ b/drivers/base/power/clock_ops.c | |||
@@ -15,9 +15,9 @@ | |||
15 | #include <linux/slab.h> | 15 | #include <linux/slab.h> |
16 | #include <linux/err.h> | 16 | #include <linux/err.h> |
17 | 17 | ||
18 | #ifdef CONFIG_PM_RUNTIME | 18 | #ifdef CONFIG_PM |
19 | 19 | ||
20 | struct pm_runtime_clk_data { | 20 | struct pm_clk_data { |
21 | struct list_head clock_list; | 21 | struct list_head clock_list; |
22 | struct mutex lock; | 22 | struct mutex lock; |
23 | }; | 23 | }; |
@@ -36,25 +36,25 @@ struct pm_clock_entry { | |||
36 | enum pce_status status; | 36 | enum pce_status status; |
37 | }; | 37 | }; |
38 | 38 | ||
39 | static struct pm_runtime_clk_data *__to_prd(struct device *dev) | 39 | static struct pm_clk_data *__to_pcd(struct device *dev) |
40 | { | 40 | { |
41 | return dev ? dev->power.subsys_data : NULL; | 41 | return dev ? dev->power.subsys_data : NULL; |
42 | } | 42 | } |
43 | 43 | ||
44 | /** | 44 | /** |
45 | * pm_runtime_clk_add - Start using a device clock for runtime PM. | 45 | * pm_clk_add - Start using a device clock for power management. |
46 | * @dev: Device whose clock is going to be used for runtime PM. | 46 | * @dev: Device whose clock is going to be used for power management. |
47 | * @con_id: Connection ID of the clock. | 47 | * @con_id: Connection ID of the clock. |
48 | * | 48 | * |
49 | * Add the clock represented by @con_id to the list of clocks used for | 49 | * Add the clock represented by @con_id to the list of clocks used for |
50 | * the runtime PM of @dev. | 50 | * the power management of @dev. |
51 | */ | 51 | */ |
52 | int pm_runtime_clk_add(struct device *dev, const char *con_id) | 52 | int pm_clk_add(struct device *dev, const char *con_id) |
53 | { | 53 | { |
54 | struct pm_runtime_clk_data *prd = __to_prd(dev); | 54 | struct pm_clk_data *pcd = __to_pcd(dev); |
55 | struct pm_clock_entry *ce; | 55 | struct pm_clock_entry *ce; |
56 | 56 | ||
57 | if (!prd) | 57 | if (!pcd) |
58 | return -EINVAL; | 58 | return -EINVAL; |
59 | 59 | ||
60 | ce = kzalloc(sizeof(*ce), GFP_KERNEL); | 60 | ce = kzalloc(sizeof(*ce), GFP_KERNEL); |
@@ -73,20 +73,20 @@ int pm_runtime_clk_add(struct device *dev, const char *con_id) | |||
73 | } | 73 | } |
74 | } | 74 | } |
75 | 75 | ||
76 | mutex_lock(&prd->lock); | 76 | mutex_lock(&pcd->lock); |
77 | list_add_tail(&ce->node, &prd->clock_list); | 77 | list_add_tail(&ce->node, &pcd->clock_list); |
78 | mutex_unlock(&prd->lock); | 78 | mutex_unlock(&pcd->lock); |
79 | return 0; | 79 | return 0; |
80 | } | 80 | } |
81 | 81 | ||
82 | /** | 82 | /** |
83 | * __pm_runtime_clk_remove - Destroy runtime PM clock entry. | 83 | * __pm_clk_remove - Destroy PM clock entry. |
84 | * @ce: Runtime PM clock entry to destroy. | 84 | * @ce: PM clock entry to destroy. |
85 | * | 85 | * |
86 | * This routine must be called under the mutex protecting the runtime PM list | 86 | * This routine must be called under the mutex protecting the PM list of clocks |
87 | * of clocks corresponding the the @ce's device. | 87 | * corresponding the the @ce's device. |
88 | */ | 88 | */ |
89 | static void __pm_runtime_clk_remove(struct pm_clock_entry *ce) | 89 | static void __pm_clk_remove(struct pm_clock_entry *ce) |
90 | { | 90 | { |
91 | if (!ce) | 91 | if (!ce) |
92 | return; | 92 | return; |
@@ -108,95 +108,99 @@ static void __pm_runtime_clk_remove(struct pm_clock_entry *ce) | |||
108 | } | 108 | } |
109 | 109 | ||
110 | /** | 110 | /** |
111 | * pm_runtime_clk_remove - Stop using a device clock for runtime PM. | 111 | * pm_clk_remove - Stop using a device clock for power management. |
112 | * @dev: Device whose clock should not be used for runtime PM any more. | 112 | * @dev: Device whose clock should not be used for PM any more. |
113 | * @con_id: Connection ID of the clock. | 113 | * @con_id: Connection ID of the clock. |
114 | * | 114 | * |
115 | * Remove the clock represented by @con_id from the list of clocks used for | 115 | * Remove the clock represented by @con_id from the list of clocks used for |
116 | * the runtime PM of @dev. | 116 | * the power management of @dev. |
117 | */ | 117 | */ |
118 | void pm_runtime_clk_remove(struct device *dev, const char *con_id) | 118 | void pm_clk_remove(struct device *dev, const char *con_id) |
119 | { | 119 | { |
120 | struct pm_runtime_clk_data *prd = __to_prd(dev); | 120 | struct pm_clk_data *pcd = __to_pcd(dev); |
121 | struct pm_clock_entry *ce; | 121 | struct pm_clock_entry *ce; |
122 | 122 | ||
123 | if (!prd) | 123 | if (!pcd) |
124 | return; | 124 | return; |
125 | 125 | ||
126 | mutex_lock(&prd->lock); | 126 | mutex_lock(&pcd->lock); |
127 | 127 | ||
128 | list_for_each_entry(ce, &prd->clock_list, node) { | 128 | list_for_each_entry(ce, &pcd->clock_list, node) { |
129 | if (!con_id && !ce->con_id) { | 129 | if (!con_id && !ce->con_id) { |
130 | __pm_runtime_clk_remove(ce); | 130 | __pm_clk_remove(ce); |
131 | break; | 131 | break; |
132 | } else if (!con_id || !ce->con_id) { | 132 | } else if (!con_id || !ce->con_id) { |
133 | continue; | 133 | continue; |
134 | } else if (!strcmp(con_id, ce->con_id)) { | 134 | } else if (!strcmp(con_id, ce->con_id)) { |
135 | __pm_runtime_clk_remove(ce); | 135 | __pm_clk_remove(ce); |
136 | break; | 136 | break; |
137 | } | 137 | } |
138 | } | 138 | } |
139 | 139 | ||
140 | mutex_unlock(&prd->lock); | 140 | mutex_unlock(&pcd->lock); |
141 | } | 141 | } |
142 | 142 | ||
143 | /** | 143 | /** |
144 | * pm_runtime_clk_init - Initialize a device's list of runtime PM clocks. | 144 | * pm_clk_init - Initialize a device's list of power management clocks. |
145 | * @dev: Device to initialize the list of runtime PM clocks for. | 145 | * @dev: Device to initialize the list of PM clocks for. |
146 | * | 146 | * |
147 | * Allocate a struct pm_runtime_clk_data object, initialize its lock member and | 147 | * Allocate a struct pm_clk_data object, initialize its lock member and |
148 | * make the @dev's power.subsys_data field point to it. | 148 | * make the @dev's power.subsys_data field point to it. |
149 | */ | 149 | */ |
150 | int pm_runtime_clk_init(struct device *dev) | 150 | int pm_clk_init(struct device *dev) |
151 | { | 151 | { |
152 | struct pm_runtime_clk_data *prd; | 152 | struct pm_clk_data *pcd; |
153 | 153 | ||
154 | prd = kzalloc(sizeof(*prd), GFP_KERNEL); | 154 | pcd = kzalloc(sizeof(*pcd), GFP_KERNEL); |
155 | if (!prd) { | 155 | if (!pcd) { |
156 | dev_err(dev, "Not enough memory fo runtime PM data.\n"); | 156 | dev_err(dev, "Not enough memory for PM clock data.\n"); |
157 | return -ENOMEM; | 157 | return -ENOMEM; |
158 | } | 158 | } |
159 | 159 | ||
160 | INIT_LIST_HEAD(&prd->clock_list); | 160 | INIT_LIST_HEAD(&pcd->clock_list); |
161 | mutex_init(&prd->lock); | 161 | mutex_init(&pcd->lock); |
162 | dev->power.subsys_data = prd; | 162 | dev->power.subsys_data = pcd; |
163 | return 0; | 163 | return 0; |
164 | } | 164 | } |
165 | 165 | ||
166 | /** | 166 | /** |
167 | * pm_runtime_clk_destroy - Destroy a device's list of runtime PM clocks. | 167 | * pm_clk_destroy - Destroy a device's list of power management clocks. |
168 | * @dev: Device to destroy the list of runtime PM clocks for. | 168 | * @dev: Device to destroy the list of PM clocks for. |
169 | * | 169 | * |
170 | * Clear the @dev's power.subsys_data field, remove the list of clock entries | 170 | * Clear the @dev's power.subsys_data field, remove the list of clock entries |
171 | * from the struct pm_runtime_clk_data object pointed to by it before and free | 171 | * from the struct pm_clk_data object pointed to by it before and free |
172 | * that object. | 172 | * that object. |
173 | */ | 173 | */ |
174 | void pm_runtime_clk_destroy(struct device *dev) | 174 | void pm_clk_destroy(struct device *dev) |
175 | { | 175 | { |
176 | struct pm_runtime_clk_data *prd = __to_prd(dev); | 176 | struct pm_clk_data *pcd = __to_pcd(dev); |
177 | struct pm_clock_entry *ce, *c; | 177 | struct pm_clock_entry *ce, *c; |
178 | 178 | ||
179 | if (!prd) | 179 | if (!pcd) |
180 | return; | 180 | return; |
181 | 181 | ||
182 | dev->power.subsys_data = NULL; | 182 | dev->power.subsys_data = NULL; |
183 | 183 | ||
184 | mutex_lock(&prd->lock); | 184 | mutex_lock(&pcd->lock); |
185 | 185 | ||
186 | list_for_each_entry_safe_reverse(ce, c, &prd->clock_list, node) | 186 | list_for_each_entry_safe_reverse(ce, c, &pcd->clock_list, node) |
187 | __pm_runtime_clk_remove(ce); | 187 | __pm_clk_remove(ce); |
188 | 188 | ||
189 | mutex_unlock(&prd->lock); | 189 | mutex_unlock(&pcd->lock); |
190 | 190 | ||
191 | kfree(prd); | 191 | kfree(pcd); |
192 | } | 192 | } |
193 | 193 | ||
194 | #endif /* CONFIG_PM */ | ||
195 | |||
196 | #ifdef CONFIG_PM_RUNTIME | ||
197 | |||
194 | /** | 198 | /** |
195 | * pm_runtime_clk_acquire - Acquire a device clock. | 199 | * pm_clk_acquire - Acquire a device clock. |
196 | * @dev: Device whose clock is to be acquired. | 200 | * @dev: Device whose clock is to be acquired. |
197 | * @con_id: Connection ID of the clock. | 201 | * @con_id: Connection ID of the clock. |
198 | */ | 202 | */ |
199 | static void pm_runtime_clk_acquire(struct device *dev, | 203 | static void pm_clk_acquire(struct device *dev, |
200 | struct pm_clock_entry *ce) | 204 | struct pm_clock_entry *ce) |
201 | { | 205 | { |
202 | ce->clk = clk_get(dev, ce->con_id); | 206 | ce->clk = clk_get(dev, ce->con_id); |
@@ -209,24 +213,24 @@ static void pm_runtime_clk_acquire(struct device *dev, | |||
209 | } | 213 | } |
210 | 214 | ||
211 | /** | 215 | /** |
212 | * pm_runtime_clk_suspend - Disable clocks in a device's runtime PM clock list. | 216 | * pm_clk_suspend - Disable clocks in a device's PM clock list. |
213 | * @dev: Device to disable the clocks for. | 217 | * @dev: Device to disable the clocks for. |
214 | */ | 218 | */ |
215 | int pm_runtime_clk_suspend(struct device *dev) | 219 | int pm_clk_suspend(struct device *dev) |
216 | { | 220 | { |
217 | struct pm_runtime_clk_data *prd = __to_prd(dev); | 221 | struct pm_clk_data *pcd = __to_pcd(dev); |
218 | struct pm_clock_entry *ce; | 222 | struct pm_clock_entry *ce; |
219 | 223 | ||
220 | dev_dbg(dev, "%s()\n", __func__); | 224 | dev_dbg(dev, "%s()\n", __func__); |
221 | 225 | ||
222 | if (!prd) | 226 | if (!pcd) |
223 | return 0; | 227 | return 0; |
224 | 228 | ||
225 | mutex_lock(&prd->lock); | 229 | mutex_lock(&pcd->lock); |
226 | 230 | ||
227 | list_for_each_entry_reverse(ce, &prd->clock_list, node) { | 231 | list_for_each_entry_reverse(ce, &pcd->clock_list, node) { |
228 | if (ce->status == PCE_STATUS_NONE) | 232 | if (ce->status == PCE_STATUS_NONE) |
229 | pm_runtime_clk_acquire(dev, ce); | 233 | pm_clk_acquire(dev, ce); |
230 | 234 | ||
231 | if (ce->status < PCE_STATUS_ERROR) { | 235 | if (ce->status < PCE_STATUS_ERROR) { |
232 | clk_disable(ce->clk); | 236 | clk_disable(ce->clk); |
@@ -234,30 +238,30 @@ int pm_runtime_clk_suspend(struct device *dev) | |||
234 | } | 238 | } |
235 | } | 239 | } |
236 | 240 | ||
237 | mutex_unlock(&prd->lock); | 241 | mutex_unlock(&pcd->lock); |
238 | 242 | ||
239 | return 0; | 243 | return 0; |
240 | } | 244 | } |
241 | 245 | ||
242 | /** | 246 | /** |
243 | * pm_runtime_clk_resume - Enable clocks in a device's runtime PM clock list. | 247 | * pm_clk_resume - Enable clocks in a device's PM clock list. |
244 | * @dev: Device to enable the clocks for. | 248 | * @dev: Device to enable the clocks for. |
245 | */ | 249 | */ |
246 | int pm_runtime_clk_resume(struct device *dev) | 250 | int pm_clk_resume(struct device *dev) |
247 | { | 251 | { |
248 | struct pm_runtime_clk_data *prd = __to_prd(dev); | 252 | struct pm_clk_data *pcd = __to_pcd(dev); |
249 | struct pm_clock_entry *ce; | 253 | struct pm_clock_entry *ce; |
250 | 254 | ||
251 | dev_dbg(dev, "%s()\n", __func__); | 255 | dev_dbg(dev, "%s()\n", __func__); |
252 | 256 | ||
253 | if (!prd) | 257 | if (!pcd) |
254 | return 0; | 258 | return 0; |
255 | 259 | ||
256 | mutex_lock(&prd->lock); | 260 | mutex_lock(&pcd->lock); |
257 | 261 | ||
258 | list_for_each_entry(ce, &prd->clock_list, node) { | 262 | list_for_each_entry(ce, &pcd->clock_list, node) { |
259 | if (ce->status == PCE_STATUS_NONE) | 263 | if (ce->status == PCE_STATUS_NONE) |
260 | pm_runtime_clk_acquire(dev, ce); | 264 | pm_clk_acquire(dev, ce); |
261 | 265 | ||
262 | if (ce->status < PCE_STATUS_ERROR) { | 266 | if (ce->status < PCE_STATUS_ERROR) { |
263 | clk_enable(ce->clk); | 267 | clk_enable(ce->clk); |
@@ -265,28 +269,28 @@ int pm_runtime_clk_resume(struct device *dev) | |||
265 | } | 269 | } |
266 | } | 270 | } |
267 | 271 | ||
268 | mutex_unlock(&prd->lock); | 272 | mutex_unlock(&pcd->lock); |
269 | 273 | ||
270 | return 0; | 274 | return 0; |
271 | } | 275 | } |
272 | 276 | ||
273 | /** | 277 | /** |
274 | * pm_runtime_clk_notify - Notify routine for device addition and removal. | 278 | * pm_clk_notify - Notify routine for device addition and removal. |
275 | * @nb: Notifier block object this function is a member of. | 279 | * @nb: Notifier block object this function is a member of. |
276 | * @action: Operation being carried out by the caller. | 280 | * @action: Operation being carried out by the caller. |
277 | * @data: Device the routine is being run for. | 281 | * @data: Device the routine is being run for. |
278 | * | 282 | * |
279 | * For this function to work, @nb must be a member of an object of type | 283 | * For this function to work, @nb must be a member of an object of type |
280 | * struct pm_clk_notifier_block containing all of the requisite data. | 284 | * struct pm_clk_notifier_block containing all of the requisite data. |
281 | * Specifically, the pwr_domain member of that object is copied to the device's | 285 | * Specifically, the pm_domain member of that object is copied to the device's |
282 | * pwr_domain field and its con_ids member is used to populate the device's list | 286 | * pm_domain field and its con_ids member is used to populate the device's list |
283 | * of runtime PM clocks, depending on @action. | 287 | * of PM clocks, depending on @action. |
284 | * | 288 | * |
285 | * If the device's pwr_domain field is already populated with a value different | 289 | * If the device's pm_domain field is already populated with a value different |
286 | * from the one stored in the struct pm_clk_notifier_block object, the function | 290 | * from the one stored in the struct pm_clk_notifier_block object, the function |
287 | * does nothing. | 291 | * does nothing. |
288 | */ | 292 | */ |
289 | static int pm_runtime_clk_notify(struct notifier_block *nb, | 293 | static int pm_clk_notify(struct notifier_block *nb, |
290 | unsigned long action, void *data) | 294 | unsigned long action, void *data) |
291 | { | 295 | { |
292 | struct pm_clk_notifier_block *clknb; | 296 | struct pm_clk_notifier_block *clknb; |
@@ -300,28 +304,28 @@ static int pm_runtime_clk_notify(struct notifier_block *nb, | |||
300 | 304 | ||
301 | switch (action) { | 305 | switch (action) { |
302 | case BUS_NOTIFY_ADD_DEVICE: | 306 | case BUS_NOTIFY_ADD_DEVICE: |
303 | if (dev->pwr_domain) | 307 | if (dev->pm_domain) |
304 | break; | 308 | break; |
305 | 309 | ||
306 | error = pm_runtime_clk_init(dev); | 310 | error = pm_clk_init(dev); |
307 | if (error) | 311 | if (error) |
308 | break; | 312 | break; |
309 | 313 | ||
310 | dev->pwr_domain = clknb->pwr_domain; | 314 | dev->pm_domain = clknb->pm_domain; |
311 | if (clknb->con_ids[0]) { | 315 | if (clknb->con_ids[0]) { |
312 | for (con_id = clknb->con_ids; *con_id; con_id++) | 316 | for (con_id = clknb->con_ids; *con_id; con_id++) |
313 | pm_runtime_clk_add(dev, *con_id); | 317 | pm_clk_add(dev, *con_id); |
314 | } else { | 318 | } else { |
315 | pm_runtime_clk_add(dev, NULL); | 319 | pm_clk_add(dev, NULL); |
316 | } | 320 | } |
317 | 321 | ||
318 | break; | 322 | break; |
319 | case BUS_NOTIFY_DEL_DEVICE: | 323 | case BUS_NOTIFY_DEL_DEVICE: |
320 | if (dev->pwr_domain != clknb->pwr_domain) | 324 | if (dev->pm_domain != clknb->pm_domain) |
321 | break; | 325 | break; |
322 | 326 | ||
323 | dev->pwr_domain = NULL; | 327 | dev->pm_domain = NULL; |
324 | pm_runtime_clk_destroy(dev); | 328 | pm_clk_destroy(dev); |
325 | break; | 329 | break; |
326 | } | 330 | } |
327 | 331 | ||
@@ -330,6 +334,60 @@ static int pm_runtime_clk_notify(struct notifier_block *nb, | |||
330 | 334 | ||
331 | #else /* !CONFIG_PM_RUNTIME */ | 335 | #else /* !CONFIG_PM_RUNTIME */ |
332 | 336 | ||
337 | #ifdef CONFIG_PM | ||
338 | |||
339 | /** | ||
340 | * pm_clk_suspend - Disable clocks in a device's PM clock list. | ||
341 | * @dev: Device to disable the clocks for. | ||
342 | */ | ||
343 | int pm_clk_suspend(struct device *dev) | ||
344 | { | ||
345 | struct pm_clk_data *pcd = __to_pcd(dev); | ||
346 | struct pm_clock_entry *ce; | ||
347 | |||
348 | dev_dbg(dev, "%s()\n", __func__); | ||
349 | |||
350 | /* If there is no driver, the clocks are already disabled. */ | ||
351 | if (!pcd || !dev->driver) | ||
352 | return 0; | ||
353 | |||
354 | mutex_lock(&pcd->lock); | ||
355 | |||
356 | list_for_each_entry_reverse(ce, &pcd->clock_list, node) | ||
357 | clk_disable(ce->clk); | ||
358 | |||
359 | mutex_unlock(&pcd->lock); | ||
360 | |||
361 | return 0; | ||
362 | } | ||
363 | |||
364 | /** | ||
365 | * pm_clk_resume - Enable clocks in a device's PM clock list. | ||
366 | * @dev: Device to enable the clocks for. | ||
367 | */ | ||
368 | int pm_clk_resume(struct device *dev) | ||
369 | { | ||
370 | struct pm_clk_data *pcd = __to_pcd(dev); | ||
371 | struct pm_clock_entry *ce; | ||
372 | |||
373 | dev_dbg(dev, "%s()\n", __func__); | ||
374 | |||
375 | /* If there is no driver, the clocks should remain disabled. */ | ||
376 | if (!pcd || !dev->driver) | ||
377 | return 0; | ||
378 | |||
379 | mutex_lock(&pcd->lock); | ||
380 | |||
381 | list_for_each_entry(ce, &pcd->clock_list, node) | ||
382 | clk_enable(ce->clk); | ||
383 | |||
384 | mutex_unlock(&pcd->lock); | ||
385 | |||
386 | return 0; | ||
387 | } | ||
388 | |||
389 | #endif /* CONFIG_PM */ | ||
390 | |||
333 | /** | 391 | /** |
334 | * enable_clock - Enable a device clock. | 392 | * enable_clock - Enable a device clock. |
335 | * @dev: Device whose clock is to be enabled. | 393 | * @dev: Device whose clock is to be enabled. |
@@ -365,7 +423,7 @@ static void disable_clock(struct device *dev, const char *con_id) | |||
365 | } | 423 | } |
366 | 424 | ||
367 | /** | 425 | /** |
368 | * pm_runtime_clk_notify - Notify routine for device addition and removal. | 426 | * pm_clk_notify - Notify routine for device addition and removal. |
369 | * @nb: Notifier block object this function is a member of. | 427 | * @nb: Notifier block object this function is a member of. |
370 | * @action: Operation being carried out by the caller. | 428 | * @action: Operation being carried out by the caller. |
371 | * @data: Device the routine is being run for. | 429 | * @data: Device the routine is being run for. |
@@ -375,7 +433,7 @@ static void disable_clock(struct device *dev, const char *con_id) | |||
375 | * Specifically, the con_ids member of that object is used to enable or disable | 433 | * Specifically, the con_ids member of that object is used to enable or disable |
376 | * the device's clocks, depending on @action. | 434 | * the device's clocks, depending on @action. |
377 | */ | 435 | */ |
378 | static int pm_runtime_clk_notify(struct notifier_block *nb, | 436 | static int pm_clk_notify(struct notifier_block *nb, |
379 | unsigned long action, void *data) | 437 | unsigned long action, void *data) |
380 | { | 438 | { |
381 | struct pm_clk_notifier_block *clknb; | 439 | struct pm_clk_notifier_block *clknb; |
@@ -411,21 +469,21 @@ static int pm_runtime_clk_notify(struct notifier_block *nb, | |||
411 | #endif /* !CONFIG_PM_RUNTIME */ | 469 | #endif /* !CONFIG_PM_RUNTIME */ |
412 | 470 | ||
413 | /** | 471 | /** |
414 | * pm_runtime_clk_add_notifier - Add bus type notifier for runtime PM clocks. | 472 | * pm_clk_add_notifier - Add bus type notifier for power management clocks. |
415 | * @bus: Bus type to add the notifier to. | 473 | * @bus: Bus type to add the notifier to. |
416 | * @clknb: Notifier to be added to the given bus type. | 474 | * @clknb: Notifier to be added to the given bus type. |
417 | * | 475 | * |
418 | * The nb member of @clknb is not expected to be initialized and its | 476 | * The nb member of @clknb is not expected to be initialized and its |
419 | * notifier_call member will be replaced with pm_runtime_clk_notify(). However, | 477 | * notifier_call member will be replaced with pm_clk_notify(). However, |
420 | * the remaining members of @clknb should be populated prior to calling this | 478 | * the remaining members of @clknb should be populated prior to calling this |
421 | * routine. | 479 | * routine. |
422 | */ | 480 | */ |
423 | void pm_runtime_clk_add_notifier(struct bus_type *bus, | 481 | void pm_clk_add_notifier(struct bus_type *bus, |
424 | struct pm_clk_notifier_block *clknb) | 482 | struct pm_clk_notifier_block *clknb) |
425 | { | 483 | { |
426 | if (!bus || !clknb) | 484 | if (!bus || !clknb) |
427 | return; | 485 | return; |
428 | 486 | ||
429 | clknb->nb.notifier_call = pm_runtime_clk_notify; | 487 | clknb->nb.notifier_call = pm_clk_notify; |
430 | bus_register_notifier(bus, &clknb->nb); | 488 | bus_register_notifier(bus, &clknb->nb); |
431 | } | 489 | } |