linux/drivers/hwmon/lm75.c
<<
>>
Prefs
   1/*
   2 * lm75.c - Part of lm_sensors, Linux kernel modules for hardware
   3 *       monitoring
   4 * Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19 */
  20
  21#include <linux/module.h>
  22#include <linux/init.h>
  23#include <linux/slab.h>
  24#include <linux/jiffies.h>
  25#include <linux/i2c.h>
  26#include <linux/hwmon.h>
  27#include <linux/hwmon-sysfs.h>
  28#include <linux/err.h>
  29#include <linux/mutex.h>
  30#include "lm75.h"
  31
  32
  33/*
  34 * This driver handles the LM75 and compatible digital temperature sensors.
  35 */
  36
  37enum lm75_type {                /* keep sorted in alphabetical order */
  38        adt75,
  39        ds1775,
  40        ds75,
  41        ds7505,
  42        lm75,
  43        lm75a,
  44        max6625,
  45        max6626,
  46        mcp980x,
  47        stds75,
  48        tcn75,
  49        tmp100,
  50        tmp101,
  51        tmp105,
  52        tmp175,
  53        tmp275,
  54        tmp75,
  55};
  56
  57/* Addresses scanned */
  58static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c,
  59                                        0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
  60
  61
  62/* The LM75 registers */
  63#define LM75_REG_CONF           0x01
  64static const u8 LM75_REG_TEMP[3] = {
  65        0x00,           /* input */
  66        0x03,           /* max */
  67        0x02,           /* hyst */
  68};
  69
  70/* Each client has this additional data */
  71struct lm75_data {
  72        struct device           *hwmon_dev;
  73        struct mutex            update_lock;
  74        u8                      orig_conf;
  75        u8                      resolution;     /* In bits, between 9 and 12 */
  76        u8                      resolution_limits;
  77        char                    valid;          /* !=0 if registers are valid */
  78        unsigned long           last_updated;   /* In jiffies */
  79        unsigned long           sample_time;    /* In jiffies */
  80        s16                     temp[3];        /* Register values,
  81                                                   0 = input
  82                                                   1 = max
  83                                                   2 = hyst */
  84};
  85
  86static int lm75_read_value(struct i2c_client *client, u8 reg);
  87static int lm75_write_value(struct i2c_client *client, u8 reg, u16 value);
  88static struct lm75_data *lm75_update_device(struct device *dev);
  89
  90
  91/*-----------------------------------------------------------------------*/
  92
  93/* sysfs attributes for hwmon */
  94
  95static ssize_t show_temp(struct device *dev, struct device_attribute *da,
  96                         char *buf)
  97{
  98        struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
  99        struct lm75_data *data = lm75_update_device(dev);
 100        long temp;
 101
 102        if (IS_ERR(data))
 103                return PTR_ERR(data);
 104
 105        temp = ((data->temp[attr->index] >> (16 - data->resolution)) * 1000)
 106               >> (data->resolution - 8);
 107
 108        return sprintf(buf, "%ld\n", temp);
 109}
 110
 111static ssize_t set_temp(struct device *dev, struct device_attribute *da,
 112                        const char *buf, size_t count)
 113{
 114        struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
 115        struct i2c_client *client = to_i2c_client(dev);
 116        struct lm75_data *data = i2c_get_clientdata(client);
 117        int nr = attr->index;
 118        long temp;
 119        int error;
 120        u8 resolution;
 121
 122        error = kstrtol(buf, 10, &temp);
 123        if (error)
 124                return error;
 125
 126        /*
 127         * Resolution of limit registers is assumed to be the same as the
 128         * temperature input register resolution unless given explicitly.
 129         */
 130        if (attr->index && data->resolution_limits)
 131                resolution = data->resolution_limits;
 132        else
 133                resolution = data->resolution;
 134
 135        mutex_lock(&data->update_lock);
 136        temp = clamp_val(temp, LM75_TEMP_MIN, LM75_TEMP_MAX);
 137        data->temp[nr] = DIV_ROUND_CLOSEST(temp  << (resolution - 8),
 138                                           1000) << (16 - resolution);
 139        lm75_write_value(client, LM75_REG_TEMP[nr], data->temp[nr]);
 140        mutex_unlock(&data->update_lock);
 141        return count;
 142}
 143
 144static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO,
 145                        show_temp, set_temp, 1);
 146static SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IWUSR | S_IRUGO,
 147                        show_temp, set_temp, 2);
 148static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
 149
 150static struct attribute *lm75_attributes[] = {
 151        &sensor_dev_attr_temp1_input.dev_attr.attr,
 152        &sensor_dev_attr_temp1_max.dev_attr.attr,
 153        &sensor_dev_attr_temp1_max_hyst.dev_attr.attr,
 154
 155        NULL
 156};
 157
 158static const struct attribute_group lm75_group = {
 159        .attrs = lm75_attributes,
 160};
 161
 162/*-----------------------------------------------------------------------*/
 163
 164/* device probe and removal */
 165
 166static int
 167lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
 168{
 169        struct lm75_data *data;
 170        int status;
 171        u8 set_mask, clr_mask;
 172        int new;
 173        enum lm75_type kind = id->driver_data;
 174
 175        if (!i2c_check_functionality(client->adapter,
 176                        I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA))
 177                return -EIO;
 178
 179        data = devm_kzalloc(&client->dev, sizeof(struct lm75_data), GFP_KERNEL);
 180        if (!data)
 181                return -ENOMEM;
 182
 183        i2c_set_clientdata(client, data);
 184        mutex_init(&data->update_lock);
 185
 186        /* Set to LM75 resolution (9 bits, 1/2 degree C) and range.
 187         * Then tweak to be more precise when appropriate.
 188         */
 189        set_mask = 0;
 190        clr_mask = LM75_SHUTDOWN;               /* continuous conversions */
 191
 192        switch (kind) {
 193        case adt75:
 194                clr_mask |= 1 << 5;             /* not one-shot mode */
 195                data->resolution = 12;
 196                data->sample_time = HZ / 8;
 197                break;
 198        case ds1775:
 199        case ds75:
 200        case stds75:
 201                clr_mask |= 3 << 5;
 202                set_mask |= 2 << 5;             /* 11-bit mode */
 203                data->resolution = 11;
 204                data->sample_time = HZ;
 205                break;
 206        case ds7505:
 207                set_mask |= 3 << 5;             /* 12-bit mode */
 208                data->resolution = 12;
 209                data->sample_time = HZ / 4;
 210                break;
 211        case lm75:
 212        case lm75a:
 213                data->resolution = 9;
 214                data->sample_time = HZ / 2;
 215                break;
 216        case max6625:
 217                data->resolution = 9;
 218                data->sample_time = HZ / 4;
 219                break;
 220        case max6626:
 221                data->resolution = 12;
 222                data->resolution_limits = 9;
 223                data->sample_time = HZ / 4;
 224                break;
 225        case tcn75:
 226                data->resolution = 9;
 227                data->sample_time = HZ / 8;
 228                break;
 229        case mcp980x:
 230                data->resolution_limits = 9;
 231                /* fall through */
 232        case tmp100:
 233        case tmp101:
 234                set_mask |= 3 << 5;             /* 12-bit mode */
 235                data->resolution = 12;
 236                data->sample_time = HZ;
 237                clr_mask |= 1 << 7;             /* not one-shot mode */
 238                break;
 239        case tmp105:
 240        case tmp175:
 241        case tmp275:
 242        case tmp75:
 243                set_mask |= 3 << 5;             /* 12-bit mode */
 244                clr_mask |= 1 << 7;             /* not one-shot mode */
 245                data->resolution = 12;
 246                data->sample_time = HZ / 2;
 247                break;
 248        }
 249
 250        /* configure as specified */
 251        status = lm75_read_value(client, LM75_REG_CONF);
 252        if (status < 0) {
 253                dev_dbg(&client->dev, "Can't read config? %d\n", status);
 254                return status;
 255        }
 256        data->orig_conf = status;
 257        new = status & ~clr_mask;
 258        new |= set_mask;
 259        if (status != new)
 260                lm75_write_value(client, LM75_REG_CONF, new);
 261        dev_dbg(&client->dev, "Config %02x\n", new);
 262
 263        /* Register sysfs hooks */
 264        status = sysfs_create_group(&client->dev.kobj, &lm75_group);
 265        if (status)
 266                return status;
 267
 268        data->hwmon_dev = hwmon_device_register(&client->dev);
 269        if (IS_ERR(data->hwmon_dev)) {
 270                status = PTR_ERR(data->hwmon_dev);
 271                goto exit_remove;
 272        }
 273
 274        dev_info(&client->dev, "%s: sensor '%s'\n",
 275                 dev_name(data->hwmon_dev), client->name);
 276
 277        return 0;
 278
 279exit_remove:
 280        sysfs_remove_group(&client->dev.kobj, &lm75_group);
 281        return status;
 282}
 283
 284static int lm75_remove(struct i2c_client *client)
 285{
 286        struct lm75_data *data = i2c_get_clientdata(client);
 287
 288        hwmon_device_unregister(data->hwmon_dev);
 289        sysfs_remove_group(&client->dev.kobj, &lm75_group);
 290        lm75_write_value(client, LM75_REG_CONF, data->orig_conf);
 291        return 0;
 292}
 293
 294static const struct i2c_device_id lm75_ids[] = {
 295        { "adt75", adt75, },
 296        { "ds1775", ds1775, },
 297        { "ds75", ds75, },
 298        { "ds7505", ds7505, },
 299        { "lm75", lm75, },
 300        { "lm75a", lm75a, },
 301        { "max6625", max6625, },
 302        { "max6626", max6626, },
 303        { "mcp980x", mcp980x, },
 304        { "stds75", stds75, },
 305        { "tcn75", tcn75, },
 306        { "tmp100", tmp100, },
 307        { "tmp101", tmp101, },
 308        { "tmp105", tmp105, },
 309        { "tmp175", tmp175, },
 310        { "tmp275", tmp275, },
 311        { "tmp75", tmp75, },
 312        { /* LIST END */ }
 313};
 314MODULE_DEVICE_TABLE(i2c, lm75_ids);
 315
 316#define LM75A_ID 0xA1
 317
 318/* Return 0 if detection is successful, -ENODEV otherwise */
 319static int lm75_detect(struct i2c_client *new_client,
 320                       struct i2c_board_info *info)
 321{
 322        struct i2c_adapter *adapter = new_client->adapter;
 323        int i;
 324        int conf, hyst, os;
 325        bool is_lm75a = 0;
 326
 327        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
 328                                     I2C_FUNC_SMBUS_WORD_DATA))
 329                return -ENODEV;
 330
 331        /*
 332         * Now, we do the remaining detection. There is no identification-
 333         * dedicated register so we have to rely on several tricks:
 334         * unused bits, registers cycling over 8-address boundaries,
 335         * addresses 0x04-0x07 returning the last read value.
 336         * The cycling+unused addresses combination is not tested,
 337         * since it would significantly slow the detection down and would
 338         * hardly add any value.
 339         *
 340         * The National Semiconductor LM75A is different than earlier
 341         * LM75s.  It has an ID byte of 0xaX (where X is the chip
 342         * revision, with 1 being the only revision in existence) in
 343         * register 7, and unused registers return 0xff rather than the
 344         * last read value.
 345         *
 346         * Note that this function only detects the original National
 347         * Semiconductor LM75 and the LM75A. Clones from other vendors
 348         * aren't detected, on purpose, because they are typically never
 349         * found on PC hardware. They are found on embedded designs where
 350         * they can be instantiated explicitly so detection is not needed.
 351         * The absence of identification registers on all these clones
 352         * would make their exhaustive detection very difficult and weak,
 353         * and odds are that the driver would bind to unsupported devices.
 354         */
 355
 356        /* Unused bits */
 357        conf = i2c_smbus_read_byte_data(new_client, 1);
 358        if (conf & 0xe0)
 359                return -ENODEV;
 360
 361        /* First check for LM75A */
 362        if (i2c_smbus_read_byte_data(new_client, 7) == LM75A_ID) {
 363                /* LM75A returns 0xff on unused registers so
 364                   just to be sure we check for that too. */
 365                if (i2c_smbus_read_byte_data(new_client, 4) != 0xff
 366                 || i2c_smbus_read_byte_data(new_client, 5) != 0xff
 367                 || i2c_smbus_read_byte_data(new_client, 6) != 0xff)
 368                        return -ENODEV;
 369                is_lm75a = 1;
 370                hyst = i2c_smbus_read_byte_data(new_client, 2);
 371                os = i2c_smbus_read_byte_data(new_client, 3);
 372        } else { /* Traditional style LM75 detection */
 373                /* Unused addresses */
 374                hyst = i2c_smbus_read_byte_data(new_client, 2);
 375                if (i2c_smbus_read_byte_data(new_client, 4) != hyst
 376                 || i2c_smbus_read_byte_data(new_client, 5) != hyst
 377                 || i2c_smbus_read_byte_data(new_client, 6) != hyst
 378                 || i2c_smbus_read_byte_data(new_client, 7) != hyst)
 379                        return -ENODEV;
 380                os = i2c_smbus_read_byte_data(new_client, 3);
 381                if (i2c_smbus_read_byte_data(new_client, 4) != os
 382                 || i2c_smbus_read_byte_data(new_client, 5) != os
 383                 || i2c_smbus_read_byte_data(new_client, 6) != os
 384                 || i2c_smbus_read_byte_data(new_client, 7) != os)
 385                        return -ENODEV;
 386        }
 387
 388        /* Addresses cycling */
 389        for (i = 8; i <= 248; i += 40) {
 390                if (i2c_smbus_read_byte_data(new_client, i + 1) != conf
 391                 || i2c_smbus_read_byte_data(new_client, i + 2) != hyst
 392                 || i2c_smbus_read_byte_data(new_client, i + 3) != os)
 393                        return -ENODEV;
 394                if (is_lm75a && i2c_smbus_read_byte_data(new_client, i + 7)
 395                                != LM75A_ID)
 396                        return -ENODEV;
 397        }
 398
 399        strlcpy(info->type, is_lm75a ? "lm75a" : "lm75", I2C_NAME_SIZE);
 400
 401        return 0;
 402}
 403
 404#ifdef CONFIG_PM
 405static int lm75_suspend(struct device *dev)
 406{
 407        int status;
 408        struct i2c_client *client = to_i2c_client(dev);
 409        status = lm75_read_value(client, LM75_REG_CONF);
 410        if (status < 0) {
 411                dev_dbg(&client->dev, "Can't read config? %d\n", status);
 412                return status;
 413        }
 414        status = status | LM75_SHUTDOWN;
 415        lm75_write_value(client, LM75_REG_CONF, status);
 416        return 0;
 417}
 418
 419static int lm75_resume(struct device *dev)
 420{
 421        int status;
 422        struct i2c_client *client = to_i2c_client(dev);
 423        status = lm75_read_value(client, LM75_REG_CONF);
 424        if (status < 0) {
 425                dev_dbg(&client->dev, "Can't read config? %d\n", status);
 426                return status;
 427        }
 428        status = status & ~LM75_SHUTDOWN;
 429        lm75_write_value(client, LM75_REG_CONF, status);
 430        return 0;
 431}
 432
 433static const struct dev_pm_ops lm75_dev_pm_ops = {
 434        .suspend        = lm75_suspend,
 435        .resume         = lm75_resume,
 436};
 437#define LM75_DEV_PM_OPS (&lm75_dev_pm_ops)
 438#else
 439#define LM75_DEV_PM_OPS NULL
 440#endif /* CONFIG_PM */
 441
 442static struct i2c_driver lm75_driver = {
 443        .class          = I2C_CLASS_HWMON,
 444        .driver = {
 445                .name   = "lm75",
 446                .pm     = LM75_DEV_PM_OPS,
 447        },
 448        .probe          = lm75_probe,
 449        .remove         = lm75_remove,
 450        .id_table       = lm75_ids,
 451        .detect         = lm75_detect,
 452        .address_list   = normal_i2c,
 453};
 454
 455/*-----------------------------------------------------------------------*/
 456
 457/* register access */
 458
 459/*
 460 * All registers are word-sized, except for the configuration register.
 461 * LM75 uses a high-byte first convention, which is exactly opposite to
 462 * the SMBus standard.
 463 */
 464static int lm75_read_value(struct i2c_client *client, u8 reg)
 465{
 466        if (reg == LM75_REG_CONF)
 467                return i2c_smbus_read_byte_data(client, reg);
 468        else
 469                return i2c_smbus_read_word_swapped(client, reg);
 470}
 471
 472static int lm75_write_value(struct i2c_client *client, u8 reg, u16 value)
 473{
 474        if (reg == LM75_REG_CONF)
 475                return i2c_smbus_write_byte_data(client, reg, value);
 476        else
 477                return i2c_smbus_write_word_swapped(client, reg, value);
 478}
 479
 480static struct lm75_data *lm75_update_device(struct device *dev)
 481{
 482        struct i2c_client *client = to_i2c_client(dev);
 483        struct lm75_data *data = i2c_get_clientdata(client);
 484        struct lm75_data *ret = data;
 485
 486        mutex_lock(&data->update_lock);
 487
 488        if (time_after(jiffies, data->last_updated + data->sample_time)
 489            || !data->valid) {
 490                int i;
 491                dev_dbg(&client->dev, "Starting lm75 update\n");
 492
 493                for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
 494                        int status;
 495
 496                        status = lm75_read_value(client, LM75_REG_TEMP[i]);
 497                        if (unlikely(status < 0)) {
 498                                dev_dbg(dev,
 499                                        "LM75: Failed to read value: reg %d, error %d\n",
 500                                        LM75_REG_TEMP[i], status);
 501                                ret = ERR_PTR(status);
 502                                data->valid = 0;
 503                                goto abort;
 504                        }
 505                        data->temp[i] = status;
 506                }
 507                data->last_updated = jiffies;
 508                data->valid = 1;
 509        }
 510
 511abort:
 512        mutex_unlock(&data->update_lock);
 513        return ret;
 514}
 515
 516module_i2c_driver(lm75_driver);
 517
 518MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl>");
 519MODULE_DESCRIPTION("LM75 driver");
 520MODULE_LICENSE("GPL");
 521
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.