diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c index 83a5036b990b..82611f197b0a 100644 --- a/drivers/w1/slaves/w1_therm.c +++ b/drivers/w1/slaves/w1_therm.c @@ -66,7 +66,7 @@ struct w1_therm_family_data { /* return the address of the refcnt in the family data */ #define THERM_REFCNT(family_data) \ - (&((struct w1_therm_family_data*)family_data)->refcnt) + (&((struct w1_therm_family_data *)family_data)->refcnt) static int w1_therm_add_slave(struct w1_slave *sl) { @@ -81,6 +81,7 @@ static int w1_therm_add_slave(struct w1_slave *sl) static void w1_therm_remove_slave(struct w1_slave *sl) { int refcnt = atomic_sub_return(1, THERM_REFCNT(sl->family_data)); + while (refcnt) { msleep(1000); refcnt = atomic_read(THERM_REFCNT(sl->family_data)); @@ -366,6 +367,7 @@ static inline int w1_DS18B20_precision(struct device *device, int val) static inline int w1_DS18B20_convert_temp(u8 rom[9]) { s16 t = le16_to_cpup((__le16 *)rom); + return t*1000/16; } @@ -415,7 +417,7 @@ static ssize_t w1_slave_store(struct device *device, for (i = 0; i < ARRAY_SIZE(w1_therm_families); ++i) { if (w1_therm_families[i].f->fid == sl->family->fid) { /* zero value indicates to write current configuration to eeprom */ - if (0 == val) + if (val == 0) ret = w1_therm_families[i].eeprom(device); else ret = w1_therm_families[i].precision(device, val);