| .. | .. |
|---|
| 52 | 52 | struct clk *clk; |
|---|
| 53 | 53 | spinlock_t lock; /* protect access to IPCC registers */ |
|---|
| 54 | 54 | int irqs[IPCC_IRQ_NUM]; |
|---|
| 55 | | - int wkp; |
|---|
| 56 | 55 | u32 proc_id; |
|---|
| 57 | 56 | u32 n_chans; |
|---|
| 58 | 57 | u32 xcr; |
|---|
| .. | .. |
|---|
| 282 | 281 | |
|---|
| 283 | 282 | /* wakeup */ |
|---|
| 284 | 283 | if (of_property_read_bool(np, "wakeup-source")) { |
|---|
| 285 | | - ipcc->wkp = platform_get_irq_byname(pdev, "wakeup"); |
|---|
| 286 | | - if (ipcc->wkp < 0) { |
|---|
| 287 | | - if (ipcc->wkp != -EPROBE_DEFER) |
|---|
| 288 | | - dev_err(dev, "could not get wakeup IRQ\n"); |
|---|
| 289 | | - ret = ipcc->wkp; |
|---|
| 290 | | - goto err_clk; |
|---|
| 291 | | - } |
|---|
| 284 | + device_set_wakeup_capable(dev, true); |
|---|
| 292 | 285 | |
|---|
| 293 | | - device_init_wakeup(dev, true); |
|---|
| 294 | | - ret = dev_pm_set_dedicated_wake_irq(dev, ipcc->wkp); |
|---|
| 286 | + ret = dev_pm_set_wake_irq(dev, ipcc->irqs[IPCC_IRQ_RX]); |
|---|
| 295 | 287 | if (ret) { |
|---|
| 296 | 288 | dev_err(dev, "Failed to set wake up irq\n"); |
|---|
| 297 | 289 | goto err_init_wkp; |
|---|
| 298 | 290 | } |
|---|
| 299 | | - } else { |
|---|
| 300 | | - device_init_wakeup(dev, false); |
|---|
| 301 | 291 | } |
|---|
| 302 | 292 | |
|---|
| 303 | 293 | /* mailbox controller */ |
|---|
| .. | .. |
|---|
| 319 | 309 | for (i = 0; i < ipcc->controller.num_chans; i++) |
|---|
| 320 | 310 | ipcc->controller.chans[i].con_priv = (void *)i; |
|---|
| 321 | 311 | |
|---|
| 322 | | - ret = mbox_controller_register(&ipcc->controller); |
|---|
| 312 | + ret = devm_mbox_controller_register(dev, &ipcc->controller); |
|---|
| 323 | 313 | if (ret) |
|---|
| 324 | 314 | goto err_irq_wkp; |
|---|
| 325 | 315 | |
|---|
| .. | .. |
|---|
| 336 | 326 | return 0; |
|---|
| 337 | 327 | |
|---|
| 338 | 328 | err_irq_wkp: |
|---|
| 339 | | - if (ipcc->wkp) |
|---|
| 329 | + if (of_property_read_bool(np, "wakeup-source")) |
|---|
| 340 | 330 | dev_pm_clear_wake_irq(dev); |
|---|
| 341 | 331 | err_init_wkp: |
|---|
| 342 | | - device_init_wakeup(dev, false); |
|---|
| 332 | + device_set_wakeup_capable(dev, false); |
|---|
| 343 | 333 | err_clk: |
|---|
| 344 | 334 | clk_disable_unprepare(ipcc->clk); |
|---|
| 345 | 335 | return ret; |
|---|
| .. | .. |
|---|
| 347 | 337 | |
|---|
| 348 | 338 | static int stm32_ipcc_remove(struct platform_device *pdev) |
|---|
| 349 | 339 | { |
|---|
| 350 | | - struct stm32_ipcc *ipcc = platform_get_drvdata(pdev); |
|---|
| 340 | + struct device *dev = &pdev->dev; |
|---|
| 351 | 341 | |
|---|
| 352 | | - mbox_controller_unregister(&ipcc->controller); |
|---|
| 353 | | - |
|---|
| 354 | | - if (ipcc->wkp) |
|---|
| 342 | + if (of_property_read_bool(dev->of_node, "wakeup-source")) |
|---|
| 355 | 343 | dev_pm_clear_wake_irq(&pdev->dev); |
|---|
| 356 | 344 | |
|---|
| 357 | | - device_init_wakeup(&pdev->dev, false); |
|---|
| 345 | + device_set_wakeup_capable(dev, false); |
|---|
| 358 | 346 | |
|---|
| 359 | 347 | return 0; |
|---|
| 360 | 348 | } |
|---|
| 361 | 349 | |
|---|
| 362 | 350 | #ifdef CONFIG_PM_SLEEP |
|---|
| 363 | | -static void stm32_ipcc_set_irq_wake(struct device *dev, bool enable) |
|---|
| 364 | | -{ |
|---|
| 365 | | - struct stm32_ipcc *ipcc = dev_get_drvdata(dev); |
|---|
| 366 | | - unsigned int i; |
|---|
| 367 | | - |
|---|
| 368 | | - if (device_may_wakeup(dev)) |
|---|
| 369 | | - for (i = 0; i < IPCC_IRQ_NUM; i++) |
|---|
| 370 | | - irq_set_irq_wake(ipcc->irqs[i], enable); |
|---|
| 371 | | -} |
|---|
| 372 | | - |
|---|
| 373 | 351 | static int stm32_ipcc_suspend(struct device *dev) |
|---|
| 374 | 352 | { |
|---|
| 375 | 353 | struct stm32_ipcc *ipcc = dev_get_drvdata(dev); |
|---|
| .. | .. |
|---|
| 377 | 355 | ipcc->xmr = readl_relaxed(ipcc->reg_proc + IPCC_XMR); |
|---|
| 378 | 356 | ipcc->xcr = readl_relaxed(ipcc->reg_proc + IPCC_XCR); |
|---|
| 379 | 357 | |
|---|
| 380 | | - stm32_ipcc_set_irq_wake(dev, true); |
|---|
| 381 | | - |
|---|
| 382 | 358 | return 0; |
|---|
| 383 | 359 | } |
|---|
| 384 | 360 | |
|---|
| 385 | 361 | static int stm32_ipcc_resume(struct device *dev) |
|---|
| 386 | 362 | { |
|---|
| 387 | 363 | struct stm32_ipcc *ipcc = dev_get_drvdata(dev); |
|---|
| 388 | | - |
|---|
| 389 | | - stm32_ipcc_set_irq_wake(dev, false); |
|---|
| 390 | 364 | |
|---|
| 391 | 365 | writel_relaxed(ipcc->xmr, ipcc->reg_proc + IPCC_XMR); |
|---|
| 392 | 366 | writel_relaxed(ipcc->xcr, ipcc->reg_proc + IPCC_XCR); |
|---|