linux/drivers/hwmon/lm90.c
<<
>>
Prefs
   1/*
   2 * lm90.c - Part of lm_sensors, Linux kernel modules for hardware
   3 *          monitoring
   4 * Copyright (C) 2003-2008  Jean Delvare <khali@linux-fr.org>
   5 *
   6 * Based on the lm83 driver. The LM90 is a sensor chip made by National
   7 * Semiconductor. It reports up to two temperatures (its own plus up to
   8 * one external one) with a 0.125 deg resolution (1 deg for local
   9 * temperature) and a 3-4 deg accuracy.
  10 *
  11 * This driver also supports the LM89 and LM99, two other sensor chips
  12 * made by National Semiconductor. Both have an increased remote
  13 * temperature measurement accuracy (1 degree), and the LM99
  14 * additionally shifts remote temperatures (measured and limits) by 16
  15 * degrees, which allows for higher temperatures measurement.
  16 * Note that there is no way to differentiate between both chips.
  17 * When device is auto-detected, the driver will assume an LM99.
  18 *
  19 * This driver also supports the LM86, another sensor chip made by
  20 * National Semiconductor. It is exactly similar to the LM90 except it
  21 * has a higher accuracy.
  22 *
  23 * This driver also supports the ADM1032, a sensor chip made by Analog
  24 * Devices. That chip is similar to the LM90, with a few differences
  25 * that are not handled by this driver. Among others, it has a higher
  26 * accuracy than the LM90, much like the LM86 does.
  27 *
  28 * This driver also supports the MAX6657, MAX6658 and MAX6659 sensor
  29 * chips made by Maxim. These chips are similar to the LM86.
  30 * Note that there is no easy way to differentiate between the three
  31 * variants. The extra address and features of the MAX6659 are not
  32 * supported by this driver. These chips lack the remote temperature
  33 * offset feature.
  34 *
  35 * This driver also supports the MAX6646, MAX6647, MAX6648, MAX6649 and
  36 * MAX6692 chips made by Maxim.  These are again similar to the LM86,
  37 * but they use unsigned temperature values and can report temperatures
  38 * from 0 to 145 degrees.
  39 *
  40 * This driver also supports the MAX6680 and MAX6681, two other sensor
  41 * chips made by Maxim. These are quite similar to the other Maxim
  42 * chips. The MAX6680 and MAX6681 only differ in the pinout so they can
  43 * be treated identically.
  44 *
  45 * This driver also supports the ADT7461 chip from Analog Devices.
  46 * It's supported in both compatibility and extended mode. It is mostly
  47 * compatible with LM90 except for a data format difference for the
  48 * temperature value registers.
  49 *
  50 * Since the LM90 was the first chipset supported by this driver, most
  51 * comments will refer to this chipset, but are actually general and
  52 * concern all supported chipsets, unless mentioned otherwise.
  53 *
  54 * This program is free software; you can redistribute it and/or modify
  55 * it under the terms of the GNU General Public License as published by
  56 * the Free Software Foundation; either version 2 of the License, or
  57 * (at your option) any later version.
  58 *
  59 * This program is distributed in the hope that it will be useful,
  60 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  61 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  62 * GNU General Public License for more details.
  63 *
  64 * You should have received a copy of the GNU General Public License
  65 * along with this program; if not, write to the Free Software
  66 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  67 */
  68
  69#include <linux/module.h>
  70#include <linux/init.h>
  71#include <linux/slab.h>
  72#include <linux/jiffies.h>
  73#include <linux/i2c.h>
  74#include <linux/hwmon-sysfs.h>
  75#include <linux/hwmon.h>
  76#include <linux/err.h>
  77#include <linux/mutex.h>
  78#include <linux/sysfs.h>
  79
  80/*
  81 * Addresses to scan
  82 * Address is fully defined internally and cannot be changed except for
  83 * MAX6659, MAX6680 and MAX6681.
  84 * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, MAX6649, MAX6657
  85 * and MAX6658 have address 0x4c.
  86 * ADM1032-2, ADT7461-2, LM89-1, LM99-1 and MAX6646 have address 0x4d.
  87 * MAX6647 has address 0x4e.
  88 * MAX6659 can have address 0x4c, 0x4d or 0x4e (unsupported).
  89 * MAX6680 and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b,
  90 * 0x4c, 0x4d or 0x4e.
  91 */
  92
  93static const unsigned short normal_i2c[] = {
  94        0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
  95
  96/*
  97 * Insmod parameters
  98 */
  99
 100I2C_CLIENT_INSMOD_8(lm90, adm1032, lm99, lm86, max6657, adt7461, max6680,
 101                    max6646);
 102
 103/*
 104 * The LM90 registers
 105 */
 106
 107#define LM90_REG_R_MAN_ID               0xFE
 108#define LM90_REG_R_CHIP_ID              0xFF
 109#define LM90_REG_R_CONFIG1              0x03
 110#define LM90_REG_W_CONFIG1              0x09
 111#define LM90_REG_R_CONFIG2              0xBF
 112#define LM90_REG_W_CONFIG2              0xBF
 113#define LM90_REG_R_CONVRATE             0x04
 114#define LM90_REG_W_CONVRATE             0x0A
 115#define LM90_REG_R_STATUS               0x02
 116#define LM90_REG_R_LOCAL_TEMP           0x00
 117#define LM90_REG_R_LOCAL_HIGH           0x05
 118#define LM90_REG_W_LOCAL_HIGH           0x0B
 119#define LM90_REG_R_LOCAL_LOW            0x06
 120#define LM90_REG_W_LOCAL_LOW            0x0C
 121#define LM90_REG_R_LOCAL_CRIT           0x20
 122#define LM90_REG_W_LOCAL_CRIT           0x20
 123#define LM90_REG_R_REMOTE_TEMPH         0x01
 124#define LM90_REG_R_REMOTE_TEMPL         0x10
 125#define LM90_REG_R_REMOTE_OFFSH         0x11
 126#define LM90_REG_W_REMOTE_OFFSH         0x11
 127#define LM90_REG_R_REMOTE_OFFSL         0x12
 128#define LM90_REG_W_REMOTE_OFFSL         0x12
 129#define LM90_REG_R_REMOTE_HIGHH         0x07
 130#define LM90_REG_W_REMOTE_HIGHH         0x0D
 131#define LM90_REG_R_REMOTE_HIGHL         0x13
 132#define LM90_REG_W_REMOTE_HIGHL         0x13
 133#define LM90_REG_R_REMOTE_LOWH          0x08
 134#define LM90_REG_W_REMOTE_LOWH          0x0E
 135#define LM90_REG_R_REMOTE_LOWL          0x14
 136#define LM90_REG_W_REMOTE_LOWL          0x14
 137#define LM90_REG_R_REMOTE_CRIT          0x19
 138#define LM90_REG_W_REMOTE_CRIT          0x19
 139#define LM90_REG_R_TCRIT_HYST           0x21
 140#define LM90_REG_W_TCRIT_HYST           0x21
 141
 142/* MAX6646/6647/6649/6657/6658/6659 registers */
 143
 144#define MAX6657_REG_R_LOCAL_TEMPL       0x11
 145
 146/*
 147 * Device flags
 148 */
 149#define LM90_FLAG_ADT7461_EXT           0x01    /* ADT7461 extended mode */
 150
 151/*
 152 * Functions declaration
 153 */
 154
 155static int lm90_detect(struct i2c_client *client, int kind,
 156                       struct i2c_board_info *info);
 157static int lm90_probe(struct i2c_client *client,
 158                      const struct i2c_device_id *id);
 159static void lm90_init_client(struct i2c_client *client);
 160static int lm90_remove(struct i2c_client *client);
 161static struct lm90_data *lm90_update_device(struct device *dev);
 162
 163/*
 164 * Driver data (common to all clients)
 165 */
 166
 167static const struct i2c_device_id lm90_id[] = {
 168        { "adm1032", adm1032 },
 169        { "adt7461", adt7461 },
 170        { "lm90", lm90 },
 171        { "lm86", lm86 },
 172        { "lm89", lm86 },
 173        { "lm99", lm99 },
 174        { "max6646", max6646 },
 175        { "max6647", max6646 },
 176        { "max6649", max6646 },
 177        { "max6657", max6657 },
 178        { "max6658", max6657 },
 179        { "max6659", max6657 },
 180        { "max6680", max6680 },
 181        { "max6681", max6680 },
 182        { }
 183};
 184MODULE_DEVICE_TABLE(i2c, lm90_id);
 185
 186static struct i2c_driver lm90_driver = {
 187        .class          = I2C_CLASS_HWMON,
 188        .driver = {
 189                .name   = "lm90",
 190        },
 191        .probe          = lm90_probe,
 192        .remove         = lm90_remove,
 193        .id_table       = lm90_id,
 194        .detect         = lm90_detect,
 195        .address_data   = &addr_data,
 196};
 197
 198/*
 199 * Client data (each client gets its own)
 200 */
 201
 202struct lm90_data {
 203        struct device *hwmon_dev;
 204        struct mutex update_lock;
 205        char valid; /* zero until following fields are valid */
 206        unsigned long last_updated; /* in jiffies */
 207        int kind;
 208        int flags;
 209
 210        /* registers values */
 211        s8 temp8[4];    /* 0: local low limit
 212                           1: local high limit
 213                           2: local critical limit
 214                           3: remote critical limit */
 215        s16 temp11[5];  /* 0: remote input
 216                           1: remote low limit
 217                           2: remote high limit
 218                           3: remote offset (except max6646 and max6657)
 219                           4: local input */
 220        u8 temp_hyst;
 221        u8 alarms; /* bitvector */
 222};
 223
 224/*
 225 * Conversions
 226 * For local temperatures and limits, critical limits and the hysteresis
 227 * value, the LM90 uses signed 8-bit values with LSB = 1 degree Celsius.
 228 * For remote temperatures and limits, it uses signed 11-bit values with
 229 * LSB = 0.125 degree Celsius, left-justified in 16-bit registers.  Some
 230 * Maxim chips use unsigned values.
 231 */
 232
 233static inline int temp_from_s8(s8 val)
 234{
 235        return val * 1000;
 236}
 237
 238static inline int temp_from_u8(u8 val)
 239{
 240        return val * 1000;
 241}
 242
 243static inline int temp_from_s16(s16 val)
 244{
 245        return val / 32 * 125;
 246}
 247
 248static inline int temp_from_u16(u16 val)
 249{
 250        return val / 32 * 125;
 251}
 252
 253static s8 temp_to_s8(long val)
 254{
 255        if (val <= -128000)
 256                return -128;
 257        if (val >= 127000)
 258                return 127;
 259        if (val < 0)
 260                return (val - 500) / 1000;
 261        return (val + 500) / 1000;
 262}
 263
 264static u8 temp_to_u8(long val)
 265{
 266        if (val <= 0)
 267                return 0;
 268        if (val >= 255000)
 269                return 255;
 270        return (val + 500) / 1000;
 271}
 272
 273static s16 temp_to_s16(long val)
 274{
 275        if (val <= -128000)
 276                return 0x8000;
 277        if (val >= 127875)
 278                return 0x7FE0;
 279        if (val < 0)
 280                return (val - 62) / 125 * 32;
 281        return (val + 62) / 125 * 32;
 282}
 283
 284static u8 hyst_to_reg(long val)
 285{
 286        if (val <= 0)
 287                return 0;
 288        if (val >= 30500)
 289                return 31;
 290        return (val + 500) / 1000;
 291}
 292
 293/*
 294 * ADT7461 in compatibility mode is almost identical to LM90 except that
 295 * attempts to write values that are outside the range 0 < temp < 127 are
 296 * treated as the boundary value.
 297 *
 298 * ADT7461 in "extended mode" operation uses unsigned integers offset by
 299 * 64 (e.g., 0 -> -64 degC).  The range is restricted to -64..191 degC.
 300 */
 301static inline int temp_from_u8_adt7461(struct lm90_data *data, u8 val)
 302{
 303        if (data->flags & LM90_FLAG_ADT7461_EXT)
 304                return (val - 64) * 1000;
 305        else
 306                return temp_from_s8(val);
 307}
 308
 309static inline int temp_from_u16_adt7461(struct lm90_data *data, u16 val)
 310{
 311        if (data->flags & LM90_FLAG_ADT7461_EXT)
 312                return (val - 0x4000) / 64 * 250;
 313        else
 314                return temp_from_s16(val);
 315}
 316
 317static u8 temp_to_u8_adt7461(struct lm90_data *data, long val)
 318{
 319        if (data->flags & LM90_FLAG_ADT7461_EXT) {
 320                if (val <= -64000)
 321                        return 0;
 322                if (val >= 191000)
 323                        return 0xFF;
 324                return (val + 500 + 64000) / 1000;
 325        } else {
 326                if (val <= 0)
 327                        return 0;
 328                if (val >= 127000)
 329                        return 127;
 330                return (val + 500) / 1000;
 331        }
 332}
 333
 334static u16 temp_to_u16_adt7461(struct lm90_data *data, long val)
 335{
 336        if (data->flags & LM90_FLAG_ADT7461_EXT) {
 337                if (val <= -64000)
 338                        return 0;
 339                if (val >= 191750)
 340                        return 0xFFC0;
 341                return (val + 64000 + 125) / 250 * 64;
 342        } else {
 343                if (val <= 0)
 344                        return 0;
 345                if (val >= 127750)
 346                        return 0x7FC0;
 347                return (val + 125) / 250 * 64;
 348        }
 349}
 350
 351/*
 352 * Sysfs stuff
 353 */
 354
 355static ssize_t show_temp8(struct device *dev, struct device_attribute *devattr,
 356                          char *buf)
 357{
 358        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 359        struct lm90_data *data = lm90_update_device(dev);
 360        int temp;
 361
 362        if (data->kind == adt7461)
 363                temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
 364        else if (data->kind == max6646)
 365                temp = temp_from_u8(data->temp8[attr->index]);
 366        else
 367                temp = temp_from_s8(data->temp8[attr->index]);
 368
 369        /* +16 degrees offset for temp2 for the LM99 */
 370        if (data->kind == lm99 && attr->index == 3)
 371                temp += 16000;
 372
 373        return sprintf(buf, "%d\n", temp);
 374}
 375
 376static ssize_t set_temp8(struct device *dev, struct device_attribute *devattr,
 377                         const char *buf, size_t count)
 378{
 379        static const u8 reg[4] = {
 380                LM90_REG_W_LOCAL_LOW,
 381                LM90_REG_W_LOCAL_HIGH,
 382                LM90_REG_W_LOCAL_CRIT,
 383                LM90_REG_W_REMOTE_CRIT,
 384        };
 385
 386        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 387        struct i2c_client *client = to_i2c_client(dev);
 388        struct lm90_data *data = i2c_get_clientdata(client);
 389        long val = simple_strtol(buf, NULL, 10);
 390        int nr = attr->index;
 391
 392        /* +16 degrees offset for temp2 for the LM99 */
 393        if (data->kind == lm99 && attr->index == 3)
 394                val -= 16000;
 395
 396        mutex_lock(&data->update_lock);
 397        if (data->kind == adt7461)
 398                data->temp8[nr] = temp_to_u8_adt7461(data, val);
 399        else if (data->kind == max6646)
 400                data->temp8[nr] = temp_to_u8(val);
 401        else
 402                data->temp8[nr] = temp_to_s8(val);
 403        i2c_smbus_write_byte_data(client, reg[nr], data->temp8[nr]);
 404        mutex_unlock(&data->update_lock);
 405        return count;
 406}
 407
 408static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr,
 409                           char *buf)
 410{
 411        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 412        struct lm90_data *data = lm90_update_device(dev);
 413        int temp;
 414
 415        if (data->kind == adt7461)
 416                temp = temp_from_u16_adt7461(data, data->temp11[attr->index]);
 417        else if (data->kind == max6646)
 418                temp = temp_from_u16(data->temp11[attr->index]);
 419        else
 420                temp = temp_from_s16(data->temp11[attr->index]);
 421
 422        /* +16 degrees offset for temp2 for the LM99 */
 423        if (data->kind == lm99 &&  attr->index <= 2)
 424                temp += 16000;
 425
 426        return sprintf(buf, "%d\n", temp);
 427}
 428
 429static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
 430                          const char *buf, size_t count)
 431{
 432        static const u8 reg[6] = {
 433                LM90_REG_W_REMOTE_LOWH,
 434                LM90_REG_W_REMOTE_LOWL,
 435                LM90_REG_W_REMOTE_HIGHH,
 436                LM90_REG_W_REMOTE_HIGHL,
 437                LM90_REG_W_REMOTE_OFFSH,
 438                LM90_REG_W_REMOTE_OFFSL,
 439        };
 440
 441        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 442        struct i2c_client *client = to_i2c_client(dev);
 443        struct lm90_data *data = i2c_get_clientdata(client);
 444        long val = simple_strtol(buf, NULL, 10);
 445        int nr = attr->index;
 446
 447        /* +16 degrees offset for temp2 for the LM99 */
 448        if (data->kind == lm99 && attr->index <= 2)
 449                val -= 16000;
 450
 451        mutex_lock(&data->update_lock);
 452        if (data->kind == adt7461)
 453                data->temp11[nr] = temp_to_u16_adt7461(data, val);
 454        else if (data->kind == max6657 || data->kind == max6680)
 455                data->temp11[nr] = temp_to_s8(val) << 8;
 456        else if (data->kind == max6646)
 457                data->temp11[nr] = temp_to_u8(val) << 8;
 458        else
 459                data->temp11[nr] = temp_to_s16(val);
 460
 461        i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2],
 462                                  data->temp11[nr] >> 8);
 463        if (data->kind != max6657 && data->kind != max6680
 464            && data->kind != max6646)
 465                i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
 466                                          data->temp11[nr] & 0xff);
 467        mutex_unlock(&data->update_lock);
 468        return count;
 469}
 470
 471static ssize_t show_temphyst(struct device *dev, struct device_attribute *devattr,
 472                             char *buf)
 473{
 474        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 475        struct lm90_data *data = lm90_update_device(dev);
 476        int temp;
 477
 478        if (data->kind == adt7461)
 479                temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
 480        else if (data->kind == max6646)
 481                temp = temp_from_u8(data->temp8[attr->index]);
 482        else
 483                temp = temp_from_s8(data->temp8[attr->index]);
 484
 485        /* +16 degrees offset for temp2 for the LM99 */
 486        if (data->kind == lm99 && attr->index == 3)
 487                temp += 16000;
 488
 489        return sprintf(buf, "%d\n", temp - temp_from_s8(data->temp_hyst));
 490}
 491
 492static ssize_t set_temphyst(struct device *dev, struct device_attribute *dummy,
 493                            const char *buf, size_t count)
 494{
 495        struct i2c_client *client = to_i2c_client(dev);
 496        struct lm90_data *data = i2c_get_clientdata(client);
 497        long val = simple_strtol(buf, NULL, 10);
 498        int temp;
 499
 500        mutex_lock(&data->update_lock);
 501        if (data->kind == adt7461)
 502                temp = temp_from_u8_adt7461(data, data->temp8[2]);
 503        else if (data->kind == max6646)
 504                temp = temp_from_u8(data->temp8[2]);
 505        else
 506                temp = temp_from_s8(data->temp8[2]);
 507
 508        data->temp_hyst = hyst_to_reg(temp - val);
 509        i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST,
 510                                  data->temp_hyst);
 511        mutex_unlock(&data->update_lock);
 512        return count;
 513}
 514
 515static ssize_t show_alarms(struct device *dev, struct device_attribute *dummy,
 516                           char *buf)
 517{
 518        struct lm90_data *data = lm90_update_device(dev);
 519        return sprintf(buf, "%d\n", data->alarms);
 520}
 521
 522static ssize_t show_alarm(struct device *dev, struct device_attribute
 523                          *devattr, char *buf)
 524{
 525        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 526        struct lm90_data *data = lm90_update_device(dev);
 527        int bitnr = attr->index;
 528
 529        return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
 530}
 531
 532static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp11, NULL, 4);
 533static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp11, NULL, 0);
 534static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp8,
 535        set_temp8, 0);
 536static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11,
 537        set_temp11, 1);
 538static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8,
 539        set_temp8, 1);
 540static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11,
 541        set_temp11, 2);
 542static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp8,
 543        set_temp8, 2);
 544static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp8,
 545        set_temp8, 3);
 546static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temphyst,
 547        set_temphyst, 2);
 548static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL, 3);
 549static SENSOR_DEVICE_ATTR(temp2_offset, S_IWUSR | S_IRUGO, show_temp11,
 550        set_temp11, 3);
 551
 552/* Individual alarm files */
 553static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0);
 554static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1);
 555static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 2);
 556static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3);
 557static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4);
 558static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 5);
 559static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6);
 560/* Raw alarm file for compatibility */
 561static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
 562
 563static struct attribute *lm90_attributes[] = {
 564        &sensor_dev_attr_temp1_input.dev_attr.attr,
 565        &sensor_dev_attr_temp2_input.dev_attr.attr,
 566        &sensor_dev_attr_temp1_min.dev_attr.attr,
 567        &sensor_dev_attr_temp2_min.dev_attr.attr,
 568        &sensor_dev_attr_temp1_max.dev_attr.attr,
 569        &sensor_dev_attr_temp2_max.dev_attr.attr,
 570        &sensor_dev_attr_temp1_crit.dev_attr.attr,
 571        &sensor_dev_attr_temp2_crit.dev_attr.attr,
 572        &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr,
 573        &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr,
 574
 575        &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr,
 576        &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr,
 577        &sensor_dev_attr_temp2_fault.dev_attr.attr,
 578        &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
 579        &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
 580        &sensor_dev_attr_temp1_min_alarm.dev_attr.attr,
 581        &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
 582        &dev_attr_alarms.attr,
 583        NULL
 584};
 585
 586static const struct attribute_group lm90_group = {
 587        .attrs = lm90_attributes,
 588};
 589
 590/* pec used for ADM1032 only */
 591static ssize_t show_pec(struct device *dev, struct device_attribute *dummy,
 592                        char *buf)
 593{
 594        struct i2c_client *client = to_i2c_client(dev);
 595        return sprintf(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC));
 596}
 597
 598static ssize_t set_pec(struct device *dev, struct device_attribute *dummy,
 599                       const char *buf, size_t count)
 600{
 601        struct i2c_client *client = to_i2c_client(dev);
 602        long val = simple_strtol(buf, NULL, 10);
 603
 604        switch (val) {
 605        case 0:
 606                client->flags &= ~I2C_CLIENT_PEC;
 607                break;
 608        case 1:
 609                client->flags |= I2C_CLIENT_PEC;
 610                break;
 611        default:
 612                return -EINVAL;
 613        }
 614
 615        return count;
 616}
 617
 618static DEVICE_ATTR(pec, S_IWUSR | S_IRUGO, show_pec, set_pec);
 619
 620/*
 621 * Real code
 622 */
 623
 624/* The ADM1032 supports PEC but not on write byte transactions, so we need
 625   to explicitly ask for a transaction without PEC. */
 626static inline s32 adm1032_write_byte(struct i2c_client *client, u8 value)
 627{
 628        return i2c_smbus_xfer(client->adapter, client->addr,
 629                              client->flags & ~I2C_CLIENT_PEC,
 630                              I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
 631}
 632
 633/* It is assumed that client->update_lock is held (unless we are in
 634   detection or initialization steps). This matters when PEC is enabled,
 635   because we don't want the address pointer to change between the write
 636   byte and the read byte transactions. */
 637static int lm90_read_reg(struct i2c_client* client, u8 reg, u8 *value)
 638{
 639        int err;
 640
 641        if (client->flags & I2C_CLIENT_PEC) {
 642                err = adm1032_write_byte(client, reg);
 643                if (err >= 0)
 644                        err = i2c_smbus_read_byte(client);
 645        } else
 646                err = i2c_smbus_read_byte_data(client, reg);
 647
 648        if (err < 0) {
 649                dev_warn(&client->dev, "Register %#02x read failed (%d)\n",
 650                         reg, err);
 651                return err;
 652        }
 653        *value = err;
 654
 655        return 0;
 656}
 657
 658/* Return 0 if detection is successful, -ENODEV otherwise */
 659static int lm90_detect(struct i2c_client *new_client, int kind,
 660                       struct i2c_board_info *info)
 661{
 662        struct i2c_adapter *adapter = new_client->adapter;
 663        int address = new_client->addr;
 664        const char *name = "";
 665
 666        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 667                return -ENODEV;
 668
 669        /*
 670         * Now we do the remaining detection. A negative kind means that
 671         * the driver was loaded with no force parameter (default), so we
 672         * must both detect and identify the chip. A zero kind means that
 673         * the driver was loaded with the force parameter, the detection
 674         * step shall be skipped. A positive kind means that the driver
 675         * was loaded with the force parameter and a given kind of chip is
 676         * requested, so both the detection and the identification steps
 677         * are skipped.
 678         */
 679
 680        /* Default to an LM90 if forced */
 681        if (kind == 0)
 682                kind = lm90;
 683
 684        if (kind < 0) { /* detection and identification */
 685                int man_id, chip_id, reg_config1, reg_convrate;
 686
 687                if ((man_id = i2c_smbus_read_byte_data(new_client,
 688                                                LM90_REG_R_MAN_ID)) < 0
 689                 || (chip_id = i2c_smbus_read_byte_data(new_client,
 690                                                LM90_REG_R_CHIP_ID)) < 0
 691                 || (reg_config1 = i2c_smbus_read_byte_data(new_client,
 692                                                LM90_REG_R_CONFIG1)) < 0
 693                 || (reg_convrate = i2c_smbus_read_byte_data(new_client,
 694                                                LM90_REG_R_CONVRATE)) < 0)
 695                        return -ENODEV;
 696                
 697                if ((address == 0x4C || address == 0x4D)
 698                 && man_id == 0x01) { /* National Semiconductor */
 699                        int reg_config2;
 700
 701                        if ((reg_config2 = i2c_smbus_read_byte_data(new_client,
 702                                                LM90_REG_R_CONFIG2)) < 0)
 703                                return -ENODEV;
 704
 705                        if ((reg_config1 & 0x2A) == 0x00
 706                         && (reg_config2 & 0xF8) == 0x00
 707                         && reg_convrate <= 0x09) {
 708                                if (address == 0x4C
 709                                 && (chip_id & 0xF0) == 0x20) { /* LM90 */
 710                                        kind = lm90;
 711                                } else
 712                                if ((chip_id & 0xF0) == 0x30) { /* LM89/LM99 */
 713                                        kind = lm99;
 714                                        dev_info(&adapter->dev,
 715                                                 "Assuming LM99 chip at "
 716                                                 "0x%02x\n", address);
 717                                        dev_info(&adapter->dev,
 718                                                 "If it is an LM89, pass "
 719                                                 "force_lm86=%d,0x%02x when "
 720                                                 "loading the lm90 driver\n",
 721                                                 i2c_adapter_id(adapter),
 722                                                 address);
 723                                } else
 724                                if (address == 0x4C
 725                                 && (chip_id & 0xF0) == 0x10) { /* LM86 */
 726                                        kind = lm86;
 727                                }
 728                        }
 729                } else
 730                if ((address == 0x4C || address == 0x4D)
 731                 && man_id == 0x41) { /* Analog Devices */
 732                        if ((chip_id & 0xF0) == 0x40 /* ADM1032 */
 733                         && (reg_config1 & 0x3F) == 0x00
 734                         && reg_convrate <= 0x0A) {
 735                                kind = adm1032;
 736                        } else
 737                        if (chip_id == 0x51 /* ADT7461 */
 738                         && (reg_config1 & 0x1B) == 0x00
 739                         && reg_convrate <= 0x0A) {
 740                                kind = adt7461;
 741                        }
 742                } else
 743                if (man_id == 0x4D) { /* Maxim */
 744                        /*
 745                         * The MAX6657, MAX6658 and MAX6659 do NOT have a
 746                         * chip_id register. Reading from that address will
 747                         * return the last read value, which in our case is
 748                         * those of the man_id register. Likewise, the config1
 749                         * register seems to lack a low nibble, so the value
 750                         * will be those of the previous read, so in our case
 751                         * those of the man_id register.
 752                         */
 753                        if (chip_id == man_id
 754                         && (address == 0x4C || address == 0x4D)
 755                         && (reg_config1 & 0x1F) == (man_id & 0x0F)
 756                         && reg_convrate <= 0x09) {
 757                                kind = max6657;
 758                        } else
 759                        /* The chip_id register of the MAX6680 and MAX6681
 760                         * holds the revision of the chip.
 761                         * the lowest bit of the config1 register is unused
 762                         * and should return zero when read, so should the
 763                         * second to last bit of config1 (software reset)
 764                         */
 765                        if (chip_id == 0x01
 766                         && (reg_config1 & 0x03) == 0x00
 767                         && reg_convrate <= 0x07) {
 768                                kind = max6680;
 769                        } else
 770                        /* The chip_id register of the MAX6646/6647/6649
 771                         * holds the revision of the chip.
 772                         * The lowest 6 bits of the config1 register are
 773                         * unused and should return zero when read.
 774                         */
 775                        if (chip_id == 0x59
 776                         && (reg_config1 & 0x3f) == 0x00
 777                         && reg_convrate <= 0x07) {
 778                                kind = max6646;
 779                        }
 780                }
 781
 782                if (kind <= 0) { /* identification failed */
 783                        dev_dbg(&adapter->dev,
 784                                "Unsupported chip at 0x%02x (man_id=0x%02X, "
 785                                "chip_id=0x%02X)\n", address, man_id, chip_id);
 786                        return -ENODEV;
 787                }
 788        }
 789
 790        /* Fill the i2c board info */
 791        if (kind == lm90) {
 792                name = "lm90";
 793        } else if (kind == adm1032) {
 794                name = "adm1032";
 795                /* The ADM1032 supports PEC, but only if combined
 796                   transactions are not used. */
 797                if (i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
 798                        info->flags |= I2C_CLIENT_PEC;
 799        } else if (kind == lm99) {
 800                name = "lm99";
 801        } else if (kind == lm86) {
 802                name = "lm86";
 803        } else if (kind == max6657) {
 804                name = "max6657";
 805        } else if (kind == max6680) {
 806                name = "max6680";
 807        } else if (kind == adt7461) {
 808                name = "adt7461";
 809        } else if (kind == max6646) {
 810                name = "max6646";
 811        }
 812        strlcpy(info->type, name, I2C_NAME_SIZE);
 813
 814        return 0;
 815}
 816
 817static int lm90_probe(struct i2c_client *new_client,
 818                      const struct i2c_device_id *id)
 819{
 820        struct i2c_adapter *adapter = to_i2c_adapter(new_client->dev.parent);
 821        struct lm90_data *data;
 822        int err;
 823
 824        data = kzalloc(sizeof(struct lm90_data), GFP_KERNEL);
 825        if (!data) {
 826                err = -ENOMEM;
 827                goto exit;
 828        }
 829        i2c_set_clientdata(new_client, data);
 830        mutex_init(&data->update_lock);
 831
 832        /* Set the device type */
 833        data->kind = id->driver_data;
 834        if (data->kind == adm1032) {
 835                if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
 836                        new_client->flags &= ~I2C_CLIENT_PEC;
 837        }
 838
 839        /* Initialize the LM90 chip */
 840        lm90_init_client(new_client);
 841
 842        /* Register sysfs hooks */
 843        if ((err = sysfs_create_group(&new_client->dev.kobj, &lm90_group)))
 844                goto exit_free;
 845        if (new_client->flags & I2C_CLIENT_PEC) {
 846                if ((err = device_create_file(&new_client->dev,
 847                                              &dev_attr_pec)))
 848                        goto exit_remove_files;
 849        }
 850        if (data->kind != max6657 && data->kind != max6646) {
 851                if ((err = device_create_file(&new_client->dev,
 852                                &sensor_dev_attr_temp2_offset.dev_attr)))
 853                        goto exit_remove_files;
 854        }
 855
 856        data->hwmon_dev = hwmon_device_register(&new_client->dev);
 857        if (IS_ERR(data->hwmon_dev)) {
 858                err = PTR_ERR(data->hwmon_dev);
 859                goto exit_remove_files;
 860        }
 861
 862        return 0;
 863
 864exit_remove_files:
 865        sysfs_remove_group(&new_client->dev.kobj, &lm90_group);
 866        device_remove_file(&new_client->dev, &dev_attr_pec);
 867exit_free:
 868        kfree(data);
 869exit:
 870        return err;
 871}
 872
 873static void lm90_init_client(struct i2c_client *client)
 874{
 875        u8 config, config_orig;
 876        struct lm90_data *data = i2c_get_clientdata(client);
 877
 878        /*
 879         * Start the conversions.
 880         */
 881        i2c_smbus_write_byte_data(client, LM90_REG_W_CONVRATE,
 882                                  5); /* 2 Hz */
 883        if (lm90_read_reg(client, LM90_REG_R_CONFIG1, &config) < 0) {
 884                dev_warn(&client->dev, "Initialization failed!\n");
 885                return;
 886        }
 887        config_orig = config;
 888
 889        /* Check Temperature Range Select */
 890        if (data->kind == adt7461) {
 891                if (config & 0x04)
 892                        data->flags |= LM90_FLAG_ADT7461_EXT;
 893        }
 894
 895        /*
 896         * Put MAX6680/MAX8881 into extended resolution (bit 0x10,
 897         * 0.125 degree resolution) and range (0x08, extend range
 898         * to -64 degree) mode for the remote temperature sensor.
 899         */
 900        if (data->kind == max6680) {
 901                config |= 0x18;
 902        }
 903
 904        config &= 0xBF; /* run */
 905        if (config != config_orig) /* Only write if changed */
 906                i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
 907}
 908
 909static int lm90_remove(struct i2c_client *client)
 910{
 911        struct lm90_data *data = i2c_get_clientdata(client);
 912
 913        hwmon_device_unregister(data->hwmon_dev);
 914        sysfs_remove_group(&client->dev.kobj, &lm90_group);
 915        device_remove_file(&client->dev, &dev_attr_pec);
 916        if (data->kind != max6657 && data->kind != max6646)
 917                device_remove_file(&client->dev,
 918                                   &sensor_dev_attr_temp2_offset.dev_attr);
 919
 920        kfree(data);
 921        return 0;
 922}
 923
 924static int lm90_read16(struct i2c_client *client, u8 regh, u8 regl, u16 *value)
 925{
 926        int err;
 927        u8 oldh, newh, l;
 928
 929        /*
 930         * There is a trick here. We have to read two registers to have the
 931         * sensor temperature, but we have to beware a conversion could occur
 932         * inbetween the readings. The datasheet says we should either use
 933         * the one-shot conversion register, which we don't want to do
 934         * (disables hardware monitoring) or monitor the busy bit, which is
 935         * impossible (we can't read the values and monitor that bit at the
 936         * exact same time). So the solution used here is to read the high
 937         * byte once, then the low byte, then the high byte again. If the new
 938         * high byte matches the old one, then we have a valid reading. Else
 939         * we have to read the low byte again, and now we believe we have a
 940         * correct reading.
 941         */
 942        if ((err = lm90_read_reg(client, regh, &oldh))
 943         || (err = lm90_read_reg(client, regl, &l))
 944         || (err = lm90_read_reg(client, regh, &newh)))
 945                return err;
 946        if (oldh != newh) {
 947                err = lm90_read_reg(client, regl, &l);
 948                if (err)
 949                        return err;
 950        }
 951        *value = (newh << 8) | l;
 952
 953        return 0;
 954}
 955
 956static struct lm90_data *lm90_update_device(struct device *dev)
 957{
 958        struct i2c_client *client = to_i2c_client(dev);
 959        struct lm90_data *data = i2c_get_clientdata(client);
 960
 961        mutex_lock(&data->update_lock);
 962
 963        if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
 964                u8 h, l;
 965
 966                dev_dbg(&client->dev, "Updating lm90 data.\n");
 967                lm90_read_reg(client, LM90_REG_R_LOCAL_LOW, &data->temp8[0]);
 968                lm90_read_reg(client, LM90_REG_R_LOCAL_HIGH, &data->temp8[1]);
 969                lm90_read_reg(client, LM90_REG_R_LOCAL_CRIT, &data->temp8[2]);
 970                lm90_read_reg(client, LM90_REG_R_REMOTE_CRIT, &data->temp8[3]);
 971                lm90_read_reg(client, LM90_REG_R_TCRIT_HYST, &data->temp_hyst);
 972
 973                if (data->kind == max6657 || data->kind == max6646) {
 974                        lm90_read16(client, LM90_REG_R_LOCAL_TEMP,
 975                                    MAX6657_REG_R_LOCAL_TEMPL,
 976                                    &data->temp11[4]);
 977                } else {
 978                        if (lm90_read_reg(client, LM90_REG_R_LOCAL_TEMP,
 979                                          &h) == 0)
 980                                data->temp11[4] = h << 8;
 981                }
 982                lm90_read16(client, LM90_REG_R_REMOTE_TEMPH,
 983                            LM90_REG_R_REMOTE_TEMPL, &data->temp11[0]);
 984
 985                if (lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH, &h) == 0) {
 986                        data->temp11[1] = h << 8;
 987                        if (data->kind != max6657 && data->kind != max6680
 988                         && data->kind != max6646
 989                         && lm90_read_reg(client, LM90_REG_R_REMOTE_LOWL,
 990                                          &l) == 0)
 991                                data->temp11[1] |= l;
 992                }
 993                if (lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &h) == 0) {
 994                        data->temp11[2] = h << 8;
 995                        if (data->kind != max6657 && data->kind != max6680
 996                         && data->kind != max6646
 997                         && lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL,
 998                                          &l) == 0)
 999                                data->temp11[2] |= l;
1000                }
1001
1002                if (data->kind != max6657 && data->kind != max6646) {
1003                        if (lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSH,
1004                                          &h) == 0
1005                         && lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSL,
1006                                          &l) == 0)
1007                                data->temp11[3] = (h << 8) | l;
1008                }
1009                lm90_read_reg(client, LM90_REG_R_STATUS, &data->alarms);
1010
1011                data->last_updated = jiffies;
1012                data->valid = 1;
1013        }
1014
1015        mutex_unlock(&data->update_lock);
1016
1017        return data;
1018}
1019
1020static int __init sensors_lm90_init(void)
1021{
1022        return i2c_add_driver(&lm90_driver);
1023}
1024
1025static void __exit sensors_lm90_exit(void)
1026{
1027        i2c_del_driver(&lm90_driver);
1028}
1029
1030MODULE_AUTHOR("Jean Delvare <khali@linux-fr.org>");
1031MODULE_DESCRIPTION("LM90/ADM1032 driver");
1032MODULE_LICENSE("GPL");
1033
1034module_init(sensors_lm90_init);
1035module_exit(sensors_lm90_exit);
1036
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.