Commit 1d0045ee authored by Guenter Roeck's avatar Guenter Roeck Committed by Guenter Roeck

hwmon: (smsc47m1) Fix compiler warning

Some configurations produce the following compiler warning:

drivers/hwmon/smsc47m1.c: In function 'sm_smsc47m1_init':
drivers/hwmon/smsc47m1.c:938: warning: 'address' may be used uninitialized in this function

While this is a false positive, it can easily be fixed by overloading the return
value from smsc47m1_find with both address and error return code (the address
is an unsigned short and thus never negative). This also reduces module size by
a few bytes (46 bytes for x86_64).
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
Reviewed-by: default avatarRobert Coulson <robert.coulson@ericsson.com>
parent 776cdc11
...@@ -491,10 +491,10 @@ static const struct attribute_group smsc47m1_group = { ...@@ -491,10 +491,10 @@ static const struct attribute_group smsc47m1_group = {
.attrs = smsc47m1_attributes, .attrs = smsc47m1_attributes,
}; };
static int __init smsc47m1_find(unsigned short *addr, static int __init smsc47m1_find(struct smsc47m1_sio_data *sio_data)
struct smsc47m1_sio_data *sio_data)
{ {
u8 val; u8 val;
unsigned short addr;
superio_enter(); superio_enter();
val = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); val = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID);
...@@ -546,9 +546,9 @@ static int __init smsc47m1_find(unsigned short *addr, ...@@ -546,9 +546,9 @@ static int __init smsc47m1_find(unsigned short *addr,
} }
superio_select(); superio_select();
*addr = (superio_inb(SUPERIO_REG_BASE) << 8) addr = (superio_inb(SUPERIO_REG_BASE) << 8)
| superio_inb(SUPERIO_REG_BASE + 1); | superio_inb(SUPERIO_REG_BASE + 1);
if (*addr == 0) { if (addr == 0) {
pr_info("Device address not set, will not use\n"); pr_info("Device address not set, will not use\n");
superio_exit(); superio_exit();
return -ENODEV; return -ENODEV;
...@@ -565,7 +565,7 @@ static int __init smsc47m1_find(unsigned short *addr, ...@@ -565,7 +565,7 @@ static int __init smsc47m1_find(unsigned short *addr,
} }
superio_exit(); superio_exit();
return 0; return addr;
} }
/* Restore device to its initial state */ /* Restore device to its initial state */
...@@ -938,13 +938,15 @@ static int __init sm_smsc47m1_init(void) ...@@ -938,13 +938,15 @@ static int __init sm_smsc47m1_init(void)
unsigned short address; unsigned short address;
struct smsc47m1_sio_data sio_data; struct smsc47m1_sio_data sio_data;
if (smsc47m1_find(&address, &sio_data)) err = smsc47m1_find(&sio_data);
return -ENODEV; if (err < 0)
return err;
address = err;
/* Sets global pdev as a side effect */ /* Sets global pdev as a side effect */
err = smsc47m1_device_add(address, &sio_data); err = smsc47m1_device_add(address, &sio_data);
if (err) if (err)
goto exit; return err;
err = platform_driver_probe(&smsc47m1_driver, smsc47m1_probe); err = platform_driver_probe(&smsc47m1_driver, smsc47m1_probe);
if (err) if (err)
...@@ -955,7 +957,6 @@ static int __init sm_smsc47m1_init(void) ...@@ -955,7 +957,6 @@ static int __init sm_smsc47m1_init(void)
exit_device: exit_device:
platform_device_unregister(pdev); platform_device_unregister(pdev);
smsc47m1_restore(&sio_data); smsc47m1_restore(&sio_data);
exit:
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment