| From foo@baz Mon Sep 17 12:33:31 CEST 2018 |
| From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> |
| Date: Fri, 15 Jun 2018 10:59:39 +0100 |
| Subject: rpmsg: core: add support to power domains for devices |
| |
| From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> |
| |
| [ Upstream commit fe782affd0f440a4e60e2cc81b8f2eccb2923113 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/rpmsg/rpmsg_core.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/drivers/rpmsg/rpmsg_core.c |
| +++ b/drivers/rpmsg/rpmsg_core.c |
| @@ -23,6 +23,7 @@ |
| #include <linux/module.h> |
| #include <linux/rpmsg.h> |
| #include <linux/of_device.h> |
| +#include <linux/pm_domain.h> |
| #include <linux/slab.h> |
| |
| #include "rpmsg_internal.h" |
| @@ -418,6 +419,10 @@ static int rpmsg_dev_probe(struct device |
| struct rpmsg_endpoint *ept = NULL; |
| int err; |
| |
| + err = dev_pm_domain_attach(dev, true); |
| + if (err) |
| + goto out; |
| + |
| if (rpdrv->callback) { |
| strncpy(chinfo.name, rpdev->id.name, RPMSG_NAME_SIZE); |
| chinfo.src = rpdev->src; |
| @@ -459,6 +464,8 @@ static int rpmsg_dev_remove(struct devic |
| |
| rpdrv->remove(rpdev); |
| |
| + dev_pm_domain_detach(dev, true); |
| + |
| if (rpdev->ept) |
| rpmsg_destroy_ept(rpdev->ept); |
| |