X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fhwmon%2Fgl520sm.c;h=baee60e44b521c25ca5f0fe1009503759ea3fe38;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=14e810f3c2c09db43ab6687efbfaa8076c65fc5c;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/drivers/hwmon/gl520sm.c b/drivers/hwmon/gl520sm.c index 14e810f3c..baee60e44 100644 --- a/drivers/hwmon/gl520sm.c +++ b/drivers/hwmon/gl520sm.c @@ -29,7 +29,6 @@ #include #include #include -#include /* Type of the extra sensor */ static unsigned short extra_sensor_type; @@ -122,7 +121,7 @@ static struct i2c_driver gl520_driver = { struct gl520_data { struct i2c_client client; struct class_device *class_dev; - struct mutex update_lock; + struct semaphore update_lock; char valid; /* zero until the following fields are valid */ unsigned long last_updated; /* in jiffies */ @@ -304,7 +303,7 @@ static ssize_t set_in_min(struct i2c_client *client, struct gl520_data *data, co long v = simple_strtol(buf, NULL, 10); u8 r; - mutex_lock(&data->update_lock); + down(&data->update_lock); if (n == 0) r = VDD_TO_REG(v); @@ -318,7 +317,7 @@ static ssize_t set_in_min(struct i2c_client *client, struct gl520_data *data, co else gl520_write_value(client, reg, r); - mutex_unlock(&data->update_lock); + up(&data->update_lock); return count; } @@ -332,7 +331,7 @@ static ssize_t set_in_max(struct i2c_client *client, struct gl520_data *data, co else r = IN_TO_REG(v); - mutex_lock(&data->update_lock); + down(&data->update_lock); data->in_max[n] = r; @@ -341,7 +340,7 @@ static ssize_t set_in_max(struct i2c_client *client, struct gl520_data *data, co else gl520_write_value(client, reg, r); - mutex_unlock(&data->update_lock); + up(&data->update_lock); return count; } @@ -374,7 +373,7 @@ static ssize_t set_fan_min(struct i2c_client *client, struct gl520_data *data, c unsigned long v = simple_strtoul(buf, NULL, 10); u8 r; - mutex_lock(&data->update_lock); + down(&data->update_lock); r = FAN_TO_REG(v, data->fan_div[n - 1]); data->fan_min[n - 1] = r; @@ -391,7 +390,7 @@ static ssize_t set_fan_min(struct i2c_client *client, struct gl520_data *data, c data->beep_mask &= data->alarm_mask; gl520_write_value(client, GL520_REG_BEEP_MASK, data->beep_mask); - mutex_unlock(&data->update_lock); + up(&data->update_lock); return count; } @@ -410,7 +409,7 @@ static ssize_t set_fan_div(struct i2c_client *client, struct gl520_data *data, c return -EINVAL; } - mutex_lock(&data->update_lock); + down(&data->update_lock); data->fan_div[n - 1] = r; if (n == 1) @@ -418,7 +417,7 @@ static ssize_t set_fan_div(struct i2c_client *client, struct gl520_data *data, c else gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x30) | (r << 4)); - mutex_unlock(&data->update_lock); + up(&data->update_lock); return count; } @@ -426,10 +425,10 @@ static ssize_t set_fan_off(struct i2c_client *client, struct gl520_data *data, c { u8 r = simple_strtoul(buf, NULL, 10)?1:0; - mutex_lock(&data->update_lock); + down(&data->update_lock); data->fan_off = r; gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x0c) | (r << 2)); - mutex_unlock(&data->update_lock); + up(&data->update_lock); return count; } @@ -455,10 +454,10 @@ static ssize_t set_temp_max(struct i2c_client *client, struct gl520_data *data, { long v = simple_strtol(buf, NULL, 10); - mutex_lock(&data->update_lock); - data->temp_max[n - 1] = TEMP_TO_REG(v); + down(&data->update_lock); + data->temp_max[n - 1] = TEMP_TO_REG(v);; gl520_write_value(client, reg, data->temp_max[n - 1]); - mutex_unlock(&data->update_lock); + up(&data->update_lock); return count; } @@ -466,10 +465,10 @@ static ssize_t set_temp_max_hyst(struct i2c_client *client, struct gl520_data *d { long v = simple_strtol(buf, NULL, 10); - mutex_lock(&data->update_lock); + down(&data->update_lock); data->temp_max_hyst[n - 1] = TEMP_TO_REG(v); gl520_write_value(client, reg, data->temp_max_hyst[n - 1]); - mutex_unlock(&data->update_lock); + up(&data->update_lock); return count; } @@ -492,10 +491,10 @@ static ssize_t set_beep_enable(struct i2c_client *client, struct gl520_data *dat { u8 r = simple_strtoul(buf, NULL, 10)?0:1; - mutex_lock(&data->update_lock); + down(&data->update_lock); data->beep_enable = !r; gl520_write_value(client, reg, (gl520_read_value(client, reg) & ~0x04) | (r << 2)); - mutex_unlock(&data->update_lock); + up(&data->update_lock); return count; } @@ -503,11 +502,11 @@ static ssize_t set_beep_mask(struct i2c_client *client, struct gl520_data *data, { u8 r = simple_strtoul(buf, NULL, 10); - mutex_lock(&data->update_lock); + down(&data->update_lock); r &= data->alarm_mask; data->beep_mask = r; gl520_write_value(client, reg, r); - mutex_unlock(&data->update_lock); + up(&data->update_lock); return count; } @@ -562,7 +561,7 @@ static int gl520_detect(struct i2c_adapter *adapter, int address, int kind) /* Fill in the remaining client fields */ strlcpy(new_client->name, "gl520sm", I2C_NAME_SIZE); data->valid = 0; - mutex_init(&data->update_lock); + init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) @@ -686,7 +685,7 @@ static struct gl520_data *gl520_update_device(struct device *dev) struct gl520_data *data = i2c_get_clientdata(client); int val; - mutex_lock(&data->update_lock); + down(&data->update_lock); if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) { @@ -751,7 +750,7 @@ static struct gl520_data *gl520_update_device(struct device *dev) data->valid = 1; } - mutex_unlock(&data->update_lock); + up(&data->update_lock); return data; }