Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging

* 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
hwmon: (fschmd) Fix a memleak on multiple opens of /dev/watchdog
hwmon: (asus_atk0110) Do not fail if MBIF is missing
hwmon: (amc6821) Double unlock bug
hwmon: (smsc47m1) Fix section mismatch

+15 -14
-1
drivers/hwmon/amc6821.c
··· 686 686 data->fan1_div = 4; 687 687 break; 688 688 default: 689 - mutex_unlock(&data->update_lock); 690 689 count = -EINVAL; 691 690 goto EXIT; 692 691 }
+9 -10
drivers/hwmon/asus_atk0110.c
··· 1329 1329 &buf, ACPI_TYPE_PACKAGE); 1330 1330 if (ret != AE_OK) { 1331 1331 dev_dbg(&device->dev, "atk: method MBIF not found\n"); 1332 - err = -ENODEV; 1333 - goto out; 1332 + } else { 1333 + obj = buf.pointer; 1334 + if (obj->package.count >= 2) { 1335 + union acpi_object *id = &obj->package.elements[1]; 1336 + if (id->type == ACPI_TYPE_STRING) 1337 + dev_dbg(&device->dev, "board ID = %s\n", 1338 + id->string.pointer); 1339 + } 1340 + ACPI_FREE(buf.pointer); 1334 1341 } 1335 - 1336 - obj = buf.pointer; 1337 - if (obj->package.count >= 2 && 1338 - obj->package.elements[1].type == ACPI_TYPE_STRING) { 1339 - dev_dbg(&device->dev, "board ID = %s\n", 1340 - obj->package.elements[1].string.pointer); 1341 - } 1342 - ACPI_FREE(buf.pointer); 1343 1342 1344 1343 err = atk_probe_if(data); 1345 1344 if (err) {
+5 -2
drivers/hwmon/fschmd.c
··· 768 768 static int watchdog_open(struct inode *inode, struct file *filp) 769 769 { 770 770 struct fschmd_data *pos, *data = NULL; 771 + int watchdog_is_open; 771 772 772 773 /* We get called from drivers/char/misc.c with misc_mtx hold, and we 773 774 call misc_register() from fschmd_probe() with watchdog_data_mutex ··· 783 782 } 784 783 } 785 784 /* Note we can never not have found data, so we don't check for this */ 786 - kref_get(&data->kref); 785 + watchdog_is_open = test_and_set_bit(0, &data->watchdog_is_open); 786 + if (!watchdog_is_open) 787 + kref_get(&data->kref); 787 788 mutex_unlock(&watchdog_data_mutex); 788 789 789 - if (test_and_set_bit(0, &data->watchdog_is_open)) 790 + if (watchdog_is_open) 790 791 return -EBUSY; 791 792 792 793 /* Start the watchdog */
+1 -1
drivers/hwmon/smsc47m1.c
··· 488 488 } 489 489 490 490 /* Restore device to its initial state */ 491 - static void __init smsc47m1_restore(const struct smsc47m1_sio_data *sio_data) 491 + static void smsc47m1_restore(const struct smsc47m1_sio_data *sio_data) 492 492 { 493 493 if ((sio_data->activate & 0x01) == 0) { 494 494 superio_enter();