aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2018-09-12 18:41:39 +0100
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2018-09-13 11:06:58 +0100
commit52a0aa47169b44ff0d884558a9e1f9cb7fa79365 (patch)
treea3022c2fc6bbdb009b644d5c4bccff2095a2c107
parent39bc518fb34add78a00ef41eae9fa8dfc3d22c8d (diff)
slimbus: core: call status after probe
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-rw-r--r--drivers/slimbus/core.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
index 688f0d28305ff..35339697f6d0b 100644
--- a/drivers/slimbus/core.c
+++ b/drivers/slimbus/core.c
@@ -48,6 +48,23 @@ static int slim_device_probe(struct device *dev)
ret = sbdrv->probe(sbdev);
mutex_unlock(&ctrl->lock);
+ if (ret)
+ return ret;
+
+ /* try getting the logical address after probe */
+ ret = slim_get_logical_addr(sbdev);
+ if (!ret) {
+ if (sbdrv->device_status) {
+ mutex_lock(&ctrl->lock);
+ sbdrv->device_status(sbdev, sbdev->status);
+ mutex_unlock(&ctrl->lock);
+ }
+
+ } else {
+ dev_err(&sbdev->dev, "Failed to get logical address\n");
+ ret = -EPROBE_DEFER;
+ }
+
return ret;
}
@@ -321,10 +338,10 @@ void slim_report_absent(struct slim_device *sbdev)
/* invalidate logical addresses */
mutex_lock(&ctrl->lock);
sbdev->is_laddr_valid = false;
- mutex_unlock(&ctrl->lock);
ida_simple_remove(&ctrl->laddr_ida, sbdev->laddr);
slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_DOWN);
+ mutex_unlock(&ctrl->lock);
}
EXPORT_SYMBOL_GPL(slim_report_absent);