[lm-sensors] [PATCH v4] hwmon: Add support for Texas Instruments ADS1015
Emiliano Carnati
carnati at ebneuro.com
Tue Mar 8 16:36:37 CET 2011
It make sense...
Please correct me if I'm wrong. I should:
- start from Dirk's patch v4
- create a patch that fixes the bug
- apply this patch
- create a patch that adds the support for 1115
It's right?
> Hi Emiliano,
>
> On Tue, Mar 08, 2011 at 05:04:20AM -0500, Emiliano Carnati wrote:
>> Hi Dirk,
>> thanks for your work!
>>
>> I've used your code in my system and it works fine, except for a small
>> bug when the
>> code checks for the end of conversion flag (it should be negated)
>>
> If this is really a bug, there should be two patches - one for the bug
> fix,
> the other for ads1115 support.
>
>> I've extended it to work with ADS1115 (the 16 bit version) and below
>> there
>> is the "patch of patch v4"
>>
> Couple of comments below.
>
>> I hope it would be useful for someone else.
>>
>> Thanks again
>>
>> Emiliano.
>>
>> <<<<<< start of patch >>>>>>
>> diff --git a/drivers/hwmon/ads1015.c b/drivers/hwmon/ads1015.c
>> index 4572024..6025a90 100644
>> --- a/drivers/hwmon/ads1015.c
>> +++ b/drivers/hwmon/ads1015.c
>> @@ -53,6 +53,12 @@ struct ads1015_data {
>> struct mutex update_lock; /* mutex protect updates */
>> struct attribute *attr_table[ADS1015_CONFIG_CHANNELS + 1];
>> struct attribute_group attr_group;
>> + int id;
>> +};
>> +
>> +enum ads1015_num_id {
>> + ADS1015 = 0,
>> + ADS1115,
>> };
>
> We commonly use lowercase here.
>
>>
>> static s32 ads1015_read_reg(struct i2c_client *client, unsigned int reg)
>> @@ -78,6 +84,7 @@ static int ads1015_read_value(struct i2c_client
>> *client, unsigned int channel,
>> unsigned int k;
>> struct ads1015_data *data = i2c_get_clientdata(client);
>> int res;
>> + int msec;
>>
>> mutex_lock(&data->update_lock);
>>
>> @@ -89,6 +96,14 @@ static int ads1015_read_value(struct i2c_client
>> *client, unsigned int channel,
>> pga = (config >> 9) & 0x0007;
>> fullscale = fullscale_table[pga];
>>
>> + /* for ADS1115, get the conversion time */
>> + if(data->id == ADS1115)
>> + {
>> + msec = (config >> 5) & 0x0007;
>> + msec = 128 >> msec;
>> + }
>> + else
>> + msec = 1;
>
> Please follow Linux coding style.
> (Location of { }, and use { } in both branches of if/else)
>
>> /* set channel and start single conversion */
>> config &= ~(0x0007 << 12);
>> config |= (1 << 15) | (1 << 8) | (channel & 0x0007) << 12;
>> @@ -98,12 +113,12 @@ static int ads1015_read_value(struct i2c_client
>> *client, unsigned int channel,
>> if (res < 0)
>> goto err_unlock;
>> for (k = 0; k < 5; ++k) {
>> - schedule_timeout(msecs_to_jiffies(1));
>> + schedule_timeout(msecs_to_jiffies(msec));
>> res = ads1015_read_reg(client, ADS1015_CONFIG);
>> if (res < 0)
>> goto err_unlock;
>> config = res;
>> - if (config & (1 << 15))
>> + if (~(config) & (1 << 15))
>
> Again, please follow Linux coding style (no unnecessary () )
>
>> break;
>> }
>> if (k == 5) {
>> @@ -118,7 +133,10 @@ static int ads1015_read_value(struct i2c_client
>> *client, unsigned int channel,
>>
>> mutex_unlock(&data->update_lock);
>>
>> - *value = DIV_ROUND_CLOSEST(conversion * fullscale, 0x7ff0);
>> + if(data->id == ADS1115)
>> + *value = DIV_ROUND_CLOSEST(conversion * fullscale, 0x7fff);
>> + else
>> + *value = DIV_ROUND_CLOSEST(conversion * fullscale, 0x7ff0);
>>
>> return 0;
>>
>> @@ -133,7 +151,7 @@ static ssize_t show_in(struct device *dev, struct
>> device_attribute *da,
>> {
>> struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
>> struct i2c_client *client = to_i2c_client(dev);
>> - int in;
>> + int in = 0;
>> int res;
>>
>> res = ads1015_read_value(client, attr->index, &in);
>> @@ -239,7 +257,9 @@ static int ads1015_probe(struct i2c_client *client,
>> err = PTR_ERR(data->hwmon_dev);
>> goto exit_remove;
>> }
>> -
>> +
>> + data->id = id->driver_data;
>> +
>> return 0;
>>
>> exit_remove:
>> @@ -251,7 +271,8 @@ exit:
>> }
>>
>> static const struct i2c_device_id ads1015_id[] = {
>> - { "ads1015", 0 },
>> + { "ads1015", ADS1015 },
>> + { "ads1115", ADS1115 },
>> { }
>> };
>> MODULE_DEVICE_TABLE(i2c, ads1015_id);
>> <<<<<< end of patch >>>>>>
>>
>> -----------------------------
>>
>> Emiliano Carnati
>
>> _______________________________________________
>> lm-sensors mailing list
>> lm-sensors at lm-sensors.org
>> http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
>
>
More information about the lm-sensors
mailing list