hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/mailbox/stm32-ipcc.c
....@@ -52,7 +52,6 @@
5252 struct clk *clk;
5353 spinlock_t lock; /* protect access to IPCC registers */
5454 int irqs[IPCC_IRQ_NUM];
55
- int wkp;
5655 u32 proc_id;
5756 u32 n_chans;
5857 u32 xcr;
....@@ -282,22 +281,13 @@
282281
283282 /* wakeup */
284283 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);
292285
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]);
295287 if (ret) {
296288 dev_err(dev, "Failed to set wake up irq\n");
297289 goto err_init_wkp;
298290 }
299
- } else {
300
- device_init_wakeup(dev, false);
301291 }
302292
303293 /* mailbox controller */
....@@ -319,7 +309,7 @@
319309 for (i = 0; i < ipcc->controller.num_chans; i++)
320310 ipcc->controller.chans[i].con_priv = (void *)i;
321311
322
- ret = mbox_controller_register(&ipcc->controller);
312
+ ret = devm_mbox_controller_register(dev, &ipcc->controller);
323313 if (ret)
324314 goto err_irq_wkp;
325315
....@@ -336,10 +326,10 @@
336326 return 0;
337327
338328 err_irq_wkp:
339
- if (ipcc->wkp)
329
+ if (of_property_read_bool(np, "wakeup-source"))
340330 dev_pm_clear_wake_irq(dev);
341331 err_init_wkp:
342
- device_init_wakeup(dev, false);
332
+ device_set_wakeup_capable(dev, false);
343333 err_clk:
344334 clk_disable_unprepare(ipcc->clk);
345335 return ret;
....@@ -347,29 +337,17 @@
347337
348338 static int stm32_ipcc_remove(struct platform_device *pdev)
349339 {
350
- struct stm32_ipcc *ipcc = platform_get_drvdata(pdev);
340
+ struct device *dev = &pdev->dev;
351341
352
- mbox_controller_unregister(&ipcc->controller);
353
-
354
- if (ipcc->wkp)
342
+ if (of_property_read_bool(dev->of_node, "wakeup-source"))
355343 dev_pm_clear_wake_irq(&pdev->dev);
356344
357
- device_init_wakeup(&pdev->dev, false);
345
+ device_set_wakeup_capable(dev, false);
358346
359347 return 0;
360348 }
361349
362350 #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
-
373351 static int stm32_ipcc_suspend(struct device *dev)
374352 {
375353 struct stm32_ipcc *ipcc = dev_get_drvdata(dev);
....@@ -377,16 +355,12 @@
377355 ipcc->xmr = readl_relaxed(ipcc->reg_proc + IPCC_XMR);
378356 ipcc->xcr = readl_relaxed(ipcc->reg_proc + IPCC_XCR);
379357
380
- stm32_ipcc_set_irq_wake(dev, true);
381
-
382358 return 0;
383359 }
384360
385361 static int stm32_ipcc_resume(struct device *dev)
386362 {
387363 struct stm32_ipcc *ipcc = dev_get_drvdata(dev);
388
-
389
- stm32_ipcc_set_irq_wake(dev, false);
390364
391365 writel_relaxed(ipcc->xmr, ipcc->reg_proc + IPCC_XMR);
392366 writel_relaxed(ipcc->xcr, ipcc->reg_proc + IPCC_XCR);