summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun KS <arunks@codeaurora.org>2017-01-16 14:39:52 +0530
committerArun KS <arunks@codeaurora.org>2017-04-30 11:04:28 +0530
commit98bc7be821d179e206f57478547e63c14aa6580c (patch)
tree16f4744b5977c6d624db19a389b7dbaf0f1191d3
parent1ccabf65ac2fe97fbd2f2ca3a06905f52c16e50c (diff)
esoc: Fix integration with SSR driver
SSR driver expects subsystem descriptor device type to be struct platform_device, whereas esoc driver is passing a struct device instead. This results in a NULL pointer crash during platform_get_irq in subsystem_restart.c. Fix esoc driver to pass platform_device. Change-Id: I93d02623cb7ac14ea3171c3792a4c52c73a74dea Signed-off-by: Arun KS <arunks@codeaurora.org> Signed-off-by: Srivatsa Vaddagiri <vatsa@codeaurora.org>
-rw-r--r--drivers/esoc/esoc-mdm-4x.c3
-rw-r--r--drivers/esoc/esoc.h2
-rw-r--r--drivers/esoc/esoc_bus.c2
3 files changed, 6 insertions, 1 deletions
diff --git a/drivers/esoc/esoc-mdm-4x.c b/drivers/esoc/esoc-mdm-4x.c
index 1e5f35d8422d..9ddd91c23c0b 100644
--- a/drivers/esoc/esoc-mdm-4x.c
+++ b/drivers/esoc/esoc-mdm-4x.c
@@ -748,6 +748,7 @@ static int mdm9x25_setup_hw(struct mdm_ctrl *mdm,
dev_err(mdm->dev, "cannot allocate esoc device\n");
return PTR_ERR(esoc);
}
+ esoc->pdev = pdev;
mdm->mdm_queue = alloc_workqueue("mdm_queue", 0, 0);
if (!mdm->mdm_queue) {
dev_err(mdm->dev, "could not create mdm_queue\n");
@@ -818,6 +819,7 @@ static int mdm9x35_setup_hw(struct mdm_ctrl *mdm,
dev_err(mdm->dev, "cannot allocate esoc device\n");
return PTR_ERR(esoc);
}
+ esoc->pdev = pdev;
mdm->mdm_queue = alloc_workqueue("mdm_queue", 0, 0);
if (!mdm->mdm_queue) {
dev_err(mdm->dev, "could not create mdm_queue\n");
@@ -906,6 +908,7 @@ static int mdm9x55_setup_hw(struct mdm_ctrl *mdm,
dev_err(mdm->dev, "cannot allocate esoc device\n");
return PTR_ERR(esoc);
}
+ esoc->pdev = pdev;
mdm->mdm_queue = alloc_workqueue("mdm_queue", 0, 0);
if (!mdm->mdm_queue) {
dev_err(mdm->dev, "could not create mdm_queue\n");
diff --git a/drivers/esoc/esoc.h b/drivers/esoc/esoc.h
index 755fb24bd60a..11e36f70d4bf 100644
--- a/drivers/esoc/esoc.h
+++ b/drivers/esoc/esoc.h
@@ -49,6 +49,7 @@ struct esoc_eng {
* @link_info: additional info about the physical link.
* @parent: parent device.
* @dev: device for userspace interface.
+ * @pdev: platform device to interface with SSR driver.
* @id: id of the external device.
* @owner: owner of the device.
* @clink_ops: control operations for the control link
@@ -66,6 +67,7 @@ struct esoc_clink {
const char *link_info;
struct device *parent;
struct device dev;
+ struct platform_device *pdev;
unsigned int id;
struct module *owner;
const struct esoc_clink_ops const *clink_ops;
diff --git a/drivers/esoc/esoc_bus.c b/drivers/esoc/esoc_bus.c
index f925607511ba..94f52764c8c3 100644
--- a/drivers/esoc/esoc_bus.c
+++ b/drivers/esoc/esoc_bus.c
@@ -189,7 +189,7 @@ int esoc_clink_register_ssr(struct esoc_clink *esoc_clink)
snprintf(subsys_name, len, "esoc%d", esoc_clink->id);
esoc_clink->subsys.name = subsys_name;
esoc_clink->dev.of_node = esoc_clink->np;
- esoc_clink->subsys.dev = &esoc_clink->dev;
+ esoc_clink->subsys.dev = &esoc_clink->pdev->dev;
esoc_clink->subsys_dev = subsys_register(&esoc_clink->subsys);
if (IS_ERR_OR_NULL(esoc_clink->subsys_dev)) {
dev_err(&esoc_clink->dev, "failed to register ssr node\n");