summaryrefslogtreecommitdiffstats
path: root/drivers/rpmsg
diff options
context:
space:
mode:
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2018-06-15 05:59:39 -0400
committerBjorn Andersson <bjorn.andersson@linaro.org>2018-07-31 02:32:03 -0400
commitfe782affd0f440a4e60e2cc81b8f2eccb2923113 (patch)
treed6a2717a0c24066ac9bae52531215831d48723e6 /drivers/rpmsg
parent82eca590cf5bf6eb1d1f2a282f5eb0f80ec0e57c (diff)
rpmsg: core: add support to power domains for devices
Some of the rpmsg devices need to switch on power domains to communicate with remote processor. For example on Qualcomm DB820c platform LPASS power domain needs to switched on for any kind of audio services. This patch adds the missing power domain support in rpmsg core. Without this patch attempting to play audio via QDSP on DB820c would reboot the system. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Diffstat (limited to 'drivers/rpmsg')
-rw-r--r--drivers/rpmsg/rpmsg_core.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
index b714a543a91d..8122807db380 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -15,6 +15,7 @@
15#include <linux/module.h> 15#include <linux/module.h>
16#include <linux/rpmsg.h> 16#include <linux/rpmsg.h>
17#include <linux/of_device.h> 17#include <linux/of_device.h>
18#include <linux/pm_domain.h>
18#include <linux/slab.h> 19#include <linux/slab.h>
19 20
20#include "rpmsg_internal.h" 21#include "rpmsg_internal.h"
@@ -449,6 +450,10 @@ static int rpmsg_dev_probe(struct device *dev)
449 struct rpmsg_endpoint *ept = NULL; 450 struct rpmsg_endpoint *ept = NULL;
450 int err; 451 int err;
451 452
453 err = dev_pm_domain_attach(dev, true);
454 if (err)
455 goto out;
456
452 if (rpdrv->callback) { 457 if (rpdrv->callback) {
453 strncpy(chinfo.name, rpdev->id.name, RPMSG_NAME_SIZE); 458 strncpy(chinfo.name, rpdev->id.name, RPMSG_NAME_SIZE);
454 chinfo.src = rpdev->src; 459 chinfo.src = rpdev->src;
@@ -490,6 +495,8 @@ static int rpmsg_dev_remove(struct device *dev)
490 495
491 rpdrv->remove(rpdev); 496 rpdrv->remove(rpdev);
492 497
498 dev_pm_domain_detach(dev, true);
499
493 if (rpdev->ept) 500 if (rpdev->ept)
494 rpmsg_destroy_ept(rpdev->ept); 501 rpmsg_destroy_ept(rpdev->ept);
495 502