hwmon: (tmp401) Reorganize code to get rid of static forward declarations
Signed-off-by: Andre Prendel <andre.prendel@gmx.de> Acked-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
committed by
Jean Delvare
parent
2b76d80adc
commit
ea63c2b91f
@@ -91,17 +91,6 @@ static const u8 TMP411_TEMP_HIGHEST_LSB[2] = { 0x33, 0x37 };
|
|||||||
#define TMP401_DEVICE_ID 0x11
|
#define TMP401_DEVICE_ID 0x11
|
||||||
#define TMP411_DEVICE_ID 0x12
|
#define TMP411_DEVICE_ID 0x12
|
||||||
|
|
||||||
/*
|
|
||||||
* Functions declarations
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int tmp401_probe(struct i2c_client *client,
|
|
||||||
const struct i2c_device_id *id);
|
|
||||||
static int tmp401_detect(struct i2c_client *client,
|
|
||||||
struct i2c_board_info *info);
|
|
||||||
static int tmp401_remove(struct i2c_client *client);
|
|
||||||
static struct tmp401_data *tmp401_update_device(struct device *dev);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Driver data (common to all clients)
|
* Driver data (common to all clients)
|
||||||
*/
|
*/
|
||||||
@@ -113,18 +102,6 @@ static const struct i2c_device_id tmp401_id[] = {
|
|||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(i2c, tmp401_id);
|
MODULE_DEVICE_TABLE(i2c, tmp401_id);
|
||||||
|
|
||||||
static struct i2c_driver tmp401_driver = {
|
|
||||||
.class = I2C_CLASS_HWMON,
|
|
||||||
.driver = {
|
|
||||||
.name = "tmp401",
|
|
||||||
},
|
|
||||||
.probe = tmp401_probe,
|
|
||||||
.remove = tmp401_remove,
|
|
||||||
.id_table = tmp401_id,
|
|
||||||
.detect = tmp401_detect,
|
|
||||||
.address_list = normal_i2c,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Client data (each client gets its own)
|
* Client data (each client gets its own)
|
||||||
*/
|
*/
|
||||||
@@ -194,6 +171,71 @@ static u8 tmp401_crit_temp_to_register(long temp, u8 config)
|
|||||||
return (temp + 500) / 1000;
|
return (temp + 500) / 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct tmp401_data *tmp401_update_device_reg16(
|
||||||
|
struct i2c_client *client, struct tmp401_data *data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
/*
|
||||||
|
* High byte must be read first immediately followed
|
||||||
|
* by the low byte
|
||||||
|
*/
|
||||||
|
data->temp[i] = i2c_smbus_read_byte_data(client,
|
||||||
|
TMP401_TEMP_MSB[i]) << 8;
|
||||||
|
data->temp[i] |= i2c_smbus_read_byte_data(client,
|
||||||
|
TMP401_TEMP_LSB[i]);
|
||||||
|
data->temp_low[i] = i2c_smbus_read_byte_data(client,
|
||||||
|
TMP401_TEMP_LOW_LIMIT_MSB_READ[i]) << 8;
|
||||||
|
data->temp_low[i] |= i2c_smbus_read_byte_data(client,
|
||||||
|
TMP401_TEMP_LOW_LIMIT_LSB[i]);
|
||||||
|
data->temp_high[i] = i2c_smbus_read_byte_data(client,
|
||||||
|
TMP401_TEMP_HIGH_LIMIT_MSB_READ[i]) << 8;
|
||||||
|
data->temp_high[i] |= i2c_smbus_read_byte_data(client,
|
||||||
|
TMP401_TEMP_HIGH_LIMIT_LSB[i]);
|
||||||
|
data->temp_crit[i] = i2c_smbus_read_byte_data(client,
|
||||||
|
TMP401_TEMP_CRIT_LIMIT[i]);
|
||||||
|
|
||||||
|
if (data->kind == tmp411) {
|
||||||
|
data->temp_lowest[i] = i2c_smbus_read_byte_data(client,
|
||||||
|
TMP411_TEMP_LOWEST_MSB[i]) << 8;
|
||||||
|
data->temp_lowest[i] |= i2c_smbus_read_byte_data(
|
||||||
|
client, TMP411_TEMP_LOWEST_LSB[i]);
|
||||||
|
|
||||||
|
data->temp_highest[i] = i2c_smbus_read_byte_data(
|
||||||
|
client, TMP411_TEMP_HIGHEST_MSB[i]) << 8;
|
||||||
|
data->temp_highest[i] |= i2c_smbus_read_byte_data(
|
||||||
|
client, TMP411_TEMP_HIGHEST_LSB[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct tmp401_data *tmp401_update_device(struct device *dev)
|
||||||
|
{
|
||||||
|
struct i2c_client *client = to_i2c_client(dev);
|
||||||
|
struct tmp401_data *data = i2c_get_clientdata(client);
|
||||||
|
|
||||||
|
mutex_lock(&data->update_lock);
|
||||||
|
|
||||||
|
if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
|
||||||
|
data->status = i2c_smbus_read_byte_data(client, TMP401_STATUS);
|
||||||
|
data->config = i2c_smbus_read_byte_data(client,
|
||||||
|
TMP401_CONFIG_READ);
|
||||||
|
tmp401_update_device_reg16(client, data);
|
||||||
|
|
||||||
|
data->temp_crit_hyst = i2c_smbus_read_byte_data(client,
|
||||||
|
TMP401_TEMP_CRIT_HYST);
|
||||||
|
|
||||||
|
data->last_updated = jiffies;
|
||||||
|
data->valid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
mutex_unlock(&data->update_lock);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t show_temp_value(struct device *dev,
|
static ssize_t show_temp_value(struct device *dev,
|
||||||
struct device_attribute *devattr, char *buf)
|
struct device_attribute *devattr, char *buf)
|
||||||
{
|
{
|
||||||
@@ -535,6 +577,27 @@ static int tmp401_detect(struct i2c_client *client,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tmp401_remove(struct i2c_client *client)
|
||||||
|
{
|
||||||
|
struct tmp401_data *data = i2c_get_clientdata(client);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (data->hwmon_dev)
|
||||||
|
hwmon_device_unregister(data->hwmon_dev);
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(tmp401_attr); i++)
|
||||||
|
device_remove_file(&client->dev, &tmp401_attr[i].dev_attr);
|
||||||
|
|
||||||
|
if (data->kind == tmp411) {
|
||||||
|
for (i = 0; i < ARRAY_SIZE(tmp411_attr); i++)
|
||||||
|
device_remove_file(&client->dev,
|
||||||
|
&tmp411_attr[i].dev_attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
kfree(data);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int tmp401_probe(struct i2c_client *client,
|
static int tmp401_probe(struct i2c_client *client,
|
||||||
const struct i2c_device_id *id)
|
const struct i2c_device_id *id)
|
||||||
{
|
{
|
||||||
@@ -587,91 +650,17 @@ exit_remove:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tmp401_remove(struct i2c_client *client)
|
static struct i2c_driver tmp401_driver = {
|
||||||
{
|
.class = I2C_CLASS_HWMON,
|
||||||
struct tmp401_data *data = i2c_get_clientdata(client);
|
.driver = {
|
||||||
int i;
|
.name = "tmp401",
|
||||||
|
},
|
||||||
if (data->hwmon_dev)
|
.probe = tmp401_probe,
|
||||||
hwmon_device_unregister(data->hwmon_dev);
|
.remove = tmp401_remove,
|
||||||
|
.id_table = tmp401_id,
|
||||||
for (i = 0; i < ARRAY_SIZE(tmp401_attr); i++)
|
.detect = tmp401_detect,
|
||||||
device_remove_file(&client->dev, &tmp401_attr[i].dev_attr);
|
.address_list = normal_i2c,
|
||||||
|
};
|
||||||
if (data->kind == tmp411) {
|
|
||||||
for (i = 0; i < ARRAY_SIZE(tmp411_attr); i++)
|
|
||||||
device_remove_file(&client->dev,
|
|
||||||
&tmp411_attr[i].dev_attr);
|
|
||||||
}
|
|
||||||
|
|
||||||
kfree(data);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct tmp401_data *tmp401_update_device_reg16(
|
|
||||||
struct i2c_client *client, struct tmp401_data *data)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 2; i++) {
|
|
||||||
/*
|
|
||||||
* High byte must be read first immediately followed
|
|
||||||
* by the low byte
|
|
||||||
*/
|
|
||||||
data->temp[i] = i2c_smbus_read_byte_data(client,
|
|
||||||
TMP401_TEMP_MSB[i]) << 8;
|
|
||||||
data->temp[i] |= i2c_smbus_read_byte_data(client,
|
|
||||||
TMP401_TEMP_LSB[i]);
|
|
||||||
data->temp_low[i] = i2c_smbus_read_byte_data(client,
|
|
||||||
TMP401_TEMP_LOW_LIMIT_MSB_READ[i]) << 8;
|
|
||||||
data->temp_low[i] |= i2c_smbus_read_byte_data(client,
|
|
||||||
TMP401_TEMP_LOW_LIMIT_LSB[i]);
|
|
||||||
data->temp_high[i] = i2c_smbus_read_byte_data(client,
|
|
||||||
TMP401_TEMP_HIGH_LIMIT_MSB_READ[i]) << 8;
|
|
||||||
data->temp_high[i] |= i2c_smbus_read_byte_data(client,
|
|
||||||
TMP401_TEMP_HIGH_LIMIT_LSB[i]);
|
|
||||||
data->temp_crit[i] = i2c_smbus_read_byte_data(client,
|
|
||||||
TMP401_TEMP_CRIT_LIMIT[i]);
|
|
||||||
|
|
||||||
if (data->kind == tmp411) {
|
|
||||||
data->temp_lowest[i] = i2c_smbus_read_byte_data(client,
|
|
||||||
TMP411_TEMP_LOWEST_MSB[i]) << 8;
|
|
||||||
data->temp_lowest[i] |= i2c_smbus_read_byte_data(
|
|
||||||
client, TMP411_TEMP_LOWEST_LSB[i]);
|
|
||||||
|
|
||||||
data->temp_highest[i] = i2c_smbus_read_byte_data(
|
|
||||||
client, TMP411_TEMP_HIGHEST_MSB[i]) << 8;
|
|
||||||
data->temp_highest[i] |= i2c_smbus_read_byte_data(
|
|
||||||
client, TMP411_TEMP_HIGHEST_LSB[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct tmp401_data *tmp401_update_device(struct device *dev)
|
|
||||||
{
|
|
||||||
struct i2c_client *client = to_i2c_client(dev);
|
|
||||||
struct tmp401_data *data = i2c_get_clientdata(client);
|
|
||||||
|
|
||||||
mutex_lock(&data->update_lock);
|
|
||||||
|
|
||||||
if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
|
|
||||||
data->status = i2c_smbus_read_byte_data(client, TMP401_STATUS);
|
|
||||||
data->config = i2c_smbus_read_byte_data(client,
|
|
||||||
TMP401_CONFIG_READ);
|
|
||||||
tmp401_update_device_reg16(client, data);
|
|
||||||
|
|
||||||
data->temp_crit_hyst = i2c_smbus_read_byte_data(client,
|
|
||||||
TMP401_TEMP_CRIT_HYST);
|
|
||||||
|
|
||||||
data->last_updated = jiffies;
|
|
||||||
data->valid = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_unlock(&data->update_lock);
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init tmp401_init(void)
|
static int __init tmp401_init(void)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user