summaryrefslogtreecommitdiffstats
path: root/sys/dev/smbus/smbconf.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/smbus/smbconf.c')
-rw-r--r--sys/dev/smbus/smbconf.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/dev/smbus/smbconf.c b/sys/dev/smbus/smbconf.c
index d97305c..1d44ef3 100644
--- a/sys/dev/smbus/smbconf.c
+++ b/sys/dev/smbus/smbconf.c
@@ -132,8 +132,12 @@ smbus_request_bus(device_t bus, device_t dev, int how)
int s, error = 0;
/* first, ask the underlying layers if the request is ok */
- error = SMBUS_CALLBACK(device_get_parent(bus), SMB_REQUEST_BUS,
- (caddr_t)&how);
+ do {
+ error = SMBUS_CALLBACK(device_get_parent(bus),
+ SMB_REQUEST_BUS, (caddr_t)&how);
+ if (error)
+ error = smbus_poll(sc, how);
+ } while (error == EWOULDBLOCK);
while (!error) {
s = splhigh();
OpenPOWER on IntegriCloud