diff options
Diffstat (limited to 'drivers/hwmon/smsc47m1.c')
| -rw-r--r-- | drivers/hwmon/smsc47m1.c | 19 | 
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/hwmon/smsc47m1.c b/drivers/hwmon/smsc47m1.c index c590c146979..b5aa38dd7ab 100644 --- a/drivers/hwmon/smsc47m1.c +++ b/drivers/hwmon/smsc47m1.c @@ -491,10 +491,10 @@ static const struct attribute_group smsc47m1_group = {  	.attrs = smsc47m1_attributes,  }; -static int __init smsc47m1_find(unsigned short *addr, -				struct smsc47m1_sio_data *sio_data) +static int __init smsc47m1_find(struct smsc47m1_sio_data *sio_data)  {  	u8 val; +	unsigned short addr;  	superio_enter();  	val = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); @@ -546,9 +546,9 @@ static int __init smsc47m1_find(unsigned short *addr,  	}  	superio_select(); -	*addr = (superio_inb(SUPERIO_REG_BASE) << 8) +	addr = (superio_inb(SUPERIO_REG_BASE) << 8)  	      |  superio_inb(SUPERIO_REG_BASE + 1); -	if (*addr == 0) { +	if (addr == 0) {  		pr_info("Device address not set, will not use\n");  		superio_exit();  		return -ENODEV; @@ -565,7 +565,7 @@ static int __init smsc47m1_find(unsigned short *addr,  	}  	superio_exit(); -	return 0; +	return addr;  }  /* Restore device to its initial state */ @@ -938,13 +938,15 @@ static int __init sm_smsc47m1_init(void)  	unsigned short address;  	struct smsc47m1_sio_data sio_data; -	if (smsc47m1_find(&address, &sio_data)) -		return -ENODEV; +	err = smsc47m1_find(&sio_data); +	if (err < 0) +		return err; +	address = err;  	/* Sets global pdev as a side effect */  	err = smsc47m1_device_add(address, &sio_data);  	if (err) -		goto exit; +		return err;  	err = platform_driver_probe(&smsc47m1_driver, smsc47m1_probe);  	if (err) @@ -955,7 +957,6 @@ static int __init sm_smsc47m1_init(void)  exit_device:  	platform_device_unregister(pdev);  	smsc47m1_restore(&sio_data); -exit:  	return err;  }  |