diff options
author | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2018-09-12 18:41:39 +0100 |
---|---|---|
committer | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2018-09-13 11:06:58 +0100 |
commit | 52a0aa47169b44ff0d884558a9e1f9cb7fa79365 (patch) | |
tree | a3022c2fc6bbdb009b644d5c4bccff2095a2c107 | |
parent | 39bc518fb34add78a00ef41eae9fa8dfc3d22c8d (diff) |
slimbus: core: call status after probe
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-rw-r--r-- | drivers/slimbus/core.c | 19 |
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); |