diff options
-rw-r--r-- | Documentation/devicetree/bindings/slimbus/slim-msm-ctrl.txt | 6 | ||||
-rw-r--r-- | drivers/slimbus/slim-msm-ngd.c | 16 |
2 files changed, 18 insertions, 4 deletions
diff --git a/Documentation/devicetree/bindings/slimbus/slim-msm-ctrl.txt b/Documentation/devicetree/bindings/slimbus/slim-msm-ctrl.txt index 53db04b0151c..90d8a359ccc0 100644 --- a/Documentation/devicetree/bindings/slimbus/slim-msm-ctrl.txt +++ b/Documentation/devicetree/bindings/slimbus/slim-msm-ctrl.txt @@ -59,6 +59,12 @@ Optional property: register and receive subsytem restart notification from mdm and follow appropriate steps to ensure communication on the bus can be resumed after mdm-restart. + - qcom,subsys-name: This value provides the subsystem name where slimbus master + is present. This property enables the slimbus driver to + register and receive subsytem restart notification from subsystem + and follow appropriate steps to ensure communication on the bus + can be resumed after subsytem restart. By default slimbus driver + register with ADSP subsystem. Example: slim@fe12f000 { cell-index = <1>; diff --git a/drivers/slimbus/slim-msm-ngd.c b/drivers/slimbus/slim-msm-ngd.c index 7cb2dcef80ef..2fbfd4c258df 100644 --- a/drivers/slimbus/slim-msm-ngd.c +++ b/drivers/slimbus/slim-msm-ngd.c @@ -1496,7 +1496,7 @@ static int ngd_slim_probe(struct platform_device *pdev) struct resource *irq, *bam_irq; bool rxreg_access = false; bool slim_mdm = false; - const char *ext_modem_id = NULL; + const char *ext_modem_id = NULL, *subsys_name = NULL; slim_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "slimbus_physical"); @@ -1679,9 +1679,17 @@ static int ngd_slim_probe(struct platform_device *pdev) pm_runtime_set_suspended(dev->dev); pm_runtime_enable(dev->dev); - dev->dsp.nb.notifier_call = dsp_ssr_notify_cb; - dev->dsp.ssr = subsys_notif_register_notifier("adsp", - &dev->dsp.nb); + ret = of_property_read_string(pdev->dev.of_node, + "qcom,subsys-name", &subsys_name); + if (ret) { + dev->dsp.nb.notifier_call = dsp_ssr_notify_cb; + dev->dsp.ssr = subsys_notif_register_notifier("adsp", + &dev->dsp.nb); + } else { + dev->dsp.nb.notifier_call = dsp_ssr_notify_cb; + dev->dsp.ssr = subsys_notif_register_notifier(subsys_name, + &dev->dsp.nb); + } if (IS_ERR_OR_NULL(dev->dsp.ssr)) dev_err(dev->dev, "subsys_notif_register_notifier failed %p", |