hwmon: (ams) Fix device removal sequence
PATCH 1/1 hwmon: (ams) Fix device removal sequence
Some code that is in ams_exit() (the module exit code) should instead be called when the device (not module) is removed. It probably doesn't make much of a difference in the PMU case, but in the I2C case it does matter.
I make no guarantee that my fix isn't racy, I'm not familiar enough with the ams driver code to tell for sure.
---
Christian tested the I2C variant of the chip, it would be nice if someone could test the PMU variant too.
drivers/hwmon/ams/ams-core.c | 11 +++++++---- drivers/hwmon/ams/ams-i2c.c | 2 ++ drivers/hwmon/ams/ams-pmu.c | 2 ++ drivers/hwmon/ams/ams.h | 1 + 4 files changed, 12 insertions(+), 4 deletions(-)
drivers/hwmon/ams/ams-core.c +7 -4
@@ -213,7 +213,7 @@ int __init ams_init(void)return -ENODEV ; } -void ams_exit (void ) +void ams_sensor_detach (void ) {/* Remove input device */ ams_input_exit ();
@@ -221,9 +221,6 @@ void ams_exit(void)/* Remove attributes */ device_remove_file (&ams_info.of_dev->dev, &dev_attr_current); -/* Shut down implementation */ - ams_info.exit (); -/* Flush interrupt worker * * We do this after ams_info.exit(), because an interrupt might
@@ -239,6 +236,12 @@ void ams_exit(void)pmf_unregister_irq_client (&ams_freefall_client); } +static void __exit ams_exit(void) +{ +/* Shut down implementation */ + ams_info.exit (); +} +MODULE_AUTHOR ("Stelian Pop, Michael Hanselmann" );MODULE_DESCRIPTION ("Apple Motion Sensor driver" );MODULE_LICENSE ("GPL" );
drivers/hwmon/ams/ams-i2c.c +2 -0
@@ -238,6 +238,8 @@ static int ams_i2c_probe(struct i2c_cliestatic int ams_i2c_remove (struct i2c_client *client) {if (ams_info.has_device) { +ams_sensor_detach (); +/* Disable interrupts */ ams_i2c_set_irq (AMS_IRQ_ALL ,0 );
drivers/hwmon/ams/ams-pmu.c +2 -0
@@ -133,6 +133,8 @@ static void ams_pmu_get_xyz(s8 *x, s8 *ystatic void ams_pmu_exit (void ) { +ams_sensor_detach (); +/* Disable interrupts */ ams_pmu_set_irq (AMS_IRQ_ALL ,0 );
drivers/hwmon/ams/ams.h +1 -0
@@ -61,6 +61,7 @@ extern struct ams ams_info;extern void ams_sensors (s8 *x,s8 *y,s8 *z);extern int ams_sensor_attach (void ); +extern void ams_sensor_detach (void );extern int ams_pmu_init (struct device_node *np);extern int ams_i2c_init (struct device_node *np);
Signature · 6 lines
Jean Delvare _______________________________________________ lm-sensors mailing list [email protected] http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
Ben,
I cannot find those two patches from Jean [0] in your tree, I take it they'll be included and pushed to Linus in 2.6.34 then?
(Although I had hoped to see them in 2.6.33, I'm "testing"[1] them since
-rc2 on my PowerBook)
Thanks,
Christian.
[0] http://lists.ozlabs.org/pipermail/linuxppc-dev/2010-February/079958.html
http://lists.ozlabs.org/pipermail/linuxppc-dev/2010-February/079959.html
[1] http://www.mail-archive.com/[email protected]/msg40983.html
Signature · 8 lines
BOFH excuse #342: HTTPD Error 4004 : very old Intel cpu - insufficient processing power _______________________________________________ lm-sensors mailing list [email protected] http://lists.lm-sensors.org/mailman/listinfo/lm-sensors