示例#1
0
void adm1025_update_client(struct i2c_client *client)
{
	struct adm1025_data *data = client->data;
	u8 i;

	down(&data->update_lock);

	if (
	    (jiffies - data->last_updated >
	     (data->type == adm1025 ? HZ / 2 : HZ * 2))
	    || (jiffies < data->last_updated) || !data->valid) {

#ifdef DEBUG
		printk("Starting adm1025 update\n");
#endif
		for (i = 0; i <= 5; i++) {
			data->in[i] =
			    adm1025_read_value(client, ADM1025_REG_IN(i));
			data->in_min[i] =
			    adm1025_read_value(client,
					       ADM1025_REG_IN_MIN(i));
			data->in_max[i] =
			    adm1025_read_value(client,
					       ADM1025_REG_IN_MAX(i));
		}
		data->temp =
		    adm1025_read_value(client, ADM1025_REG_TEMP);
		data->rtemp =
		    adm1025_read_value(client, ADM1025_REG_RTEMP);
#ifdef DEBUG
		printk("The temp is %2x\n",data->temp);
#endif
		data->temp_max =
		    adm1025_read_value(client, ADM1025_REG_TEMP_HIGH);
		data->temp_min =
		    adm1025_read_value(client, ADM1025_REG_TEMP_LOW);
		data->rtemp_max =
		    adm1025_read_value(client, ADM1025_REG_RTEMP_HIGH);
		data->rtemp_min =
		    adm1025_read_value(client, ADM1025_REG_RTEMP_LOW);

		i = adm1025_read_value(client, ADM1025_REG_VID);
		data->vid = i & 0x0f;
		data->vid |=
		    (adm1025_read_value(client, ADM1025_REG_VID4) & 0x01)
		    << 4;

		data->alarms =
		    adm1025_read_value(client,
				       ADM1025_REG_INT1_STAT) +
		    (adm1025_read_value(client, ADM1025_REG_INT2_STAT) <<
		     8);
		data->last_updated = jiffies;
		data->valid = 1;
	}

	up(&data->update_lock);
}
示例#2
0
文件: adm1025.c 项目: MohdVara/linux
static struct adm1025_data *adm1025_update_device(struct device *dev)
{
	struct adm1025_data *data = dev_get_drvdata(dev);
	struct i2c_client *client = data->client;

	mutex_lock(&data->update_lock);

	if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
		int i;

		dev_dbg(&client->dev, "Updating data.\n");
		for (i = 0; i < 6; i++) {
			data->in[i] = i2c_smbus_read_byte_data(client,
				      ADM1025_REG_IN(i));
			data->in_min[i] = i2c_smbus_read_byte_data(client,
					  ADM1025_REG_IN_MIN(i));
			data->in_max[i] = i2c_smbus_read_byte_data(client,
					  ADM1025_REG_IN_MAX(i));
		}
		for (i = 0; i < 2; i++) {
			data->temp[i] = i2c_smbus_read_byte_data(client,
					ADM1025_REG_TEMP(i));
			data->temp_min[i] = i2c_smbus_read_byte_data(client,
					    ADM1025_REG_TEMP_LOW(i));
			data->temp_max[i] = i2c_smbus_read_byte_data(client,
					    ADM1025_REG_TEMP_HIGH(i));
		}
		data->alarms = i2c_smbus_read_byte_data(client,
			       ADM1025_REG_STATUS1)
			     | (i2c_smbus_read_byte_data(client,
				ADM1025_REG_STATUS2) << 8);
		data->vid = (i2c_smbus_read_byte_data(client,
			     ADM1025_REG_VID) & 0x0f)
			  | ((i2c_smbus_read_byte_data(client,
			      ADM1025_REG_VID4) & 0x01) << 4);

		data->last_updated = jiffies;
		data->valid = 1;
	}

	mutex_unlock(&data->update_lock);

	return data;
}