slimbus: core: update device status in probe
device status update can be racy with probe in some cases, so make sure it take lock during the probe. Also after probe the device is expected to be ready for communications, so make sure that a logical address can be assigned to it after probe. If it fails to do so then probe defer such instances. Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
14a649d33e
commit
8f3d5fcde9
|
@ -43,8 +43,23 @@ static int slim_device_probe(struct device *dev)
|
|||
{
|
||||
struct slim_device *sbdev = to_slim_device(dev);
|
||||
struct slim_driver *sbdrv = to_slim_driver(dev->driver);
|
||||
int ret;
|
||||
|
||||
return sbdrv->probe(sbdev);
|
||||
ret = sbdrv->probe(sbdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* try getting the logical address after probe */
|
||||
ret = slim_get_logical_addr(sbdev);
|
||||
if (!ret) {
|
||||
if (sbdrv->device_status)
|
||||
sbdrv->device_status(sbdev, sbdev->status);
|
||||
} else {
|
||||
dev_err(&sbdev->dev, "Failed to get logical address\n");
|
||||
ret = -EPROBE_DEFER;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int slim_device_remove(struct device *dev)
|
||||
|
|
Loading…
Reference in New Issue