linux/drivers/hwmon/asc7621.c
<<
>>
Prefs
   1/*
   2 * asc7621.c - Part of lm_sensors, Linux kernel modules for hardware monitoring
   3 * Copyright (c) 2007, 2010 George Joseph  <george.joseph@fairview5.com>
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or
   8 * (at your option) any later version.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18 */
  19
  20#include <linux/module.h>
  21#include <linux/init.h>
  22#include <linux/slab.h>
  23#include <linux/jiffies.h>
  24#include <linux/i2c.h>
  25#include <linux/hwmon.h>
  26#include <linux/hwmon-sysfs.h>
  27#include <linux/err.h>
  28#include <linux/mutex.h>
  29
  30/* Addresses to scan */
  31static const unsigned short normal_i2c[] = {
  32        0x2c, 0x2d, 0x2e, I2C_CLIENT_END
  33};
  34
  35enum asc7621_type {
  36        asc7621,
  37        asc7621a
  38};
  39
  40#define INTERVAL_HIGH   (HZ + HZ / 2)
  41#define INTERVAL_LOW    (1 * 60 * HZ)
  42#define PRI_NONE        0
  43#define PRI_LOW         1
  44#define PRI_HIGH        2
  45#define FIRST_CHIP      asc7621
  46#define LAST_CHIP       asc7621a
  47
  48struct asc7621_chip {
  49        char *name;
  50        enum asc7621_type chip_type;
  51        u8 company_reg;
  52        u8 company_id;
  53        u8 verstep_reg;
  54        u8 verstep_id;
  55        const unsigned short *addresses;
  56};
  57
  58static struct asc7621_chip asc7621_chips[] = {
  59        {
  60                .name = "asc7621",
  61                .chip_type = asc7621,
  62                .company_reg = 0x3e,
  63                .company_id = 0x61,
  64                .verstep_reg = 0x3f,
  65                .verstep_id = 0x6c,
  66                .addresses = normal_i2c,
  67         },
  68        {
  69                .name = "asc7621a",
  70                .chip_type = asc7621a,
  71                .company_reg = 0x3e,
  72                .company_id = 0x61,
  73                .verstep_reg = 0x3f,
  74                .verstep_id = 0x6d,
  75                .addresses = normal_i2c,
  76         },
  77};
  78
  79/*
  80 * Defines the highest register to be used, not the count.
  81 * The actual count will probably be smaller because of gaps
  82 * in the implementation (unused register locations).
  83 * This define will safely set the array size of both the parameter
  84 * and data arrays.
  85 * This comes from the data sheet register description table.
  86 */
  87#define LAST_REGISTER 0xff
  88
  89struct asc7621_data {
  90        struct i2c_client client;
  91        struct device *class_dev;
  92        struct mutex update_lock;
  93        int valid;              /* !=0 if following fields are valid */
  94        unsigned long last_high_reading;        /* In jiffies */
  95        unsigned long last_low_reading;         /* In jiffies */
  96        /*
  97         * Registers we care about occupy the corresponding index
  98         * in the array.  Registers we don't care about are left
  99         * at 0.
 100         */
 101        u8 reg[LAST_REGISTER + 1];
 102};
 103
 104/*
 105 * Macro to get the parent asc7621_param structure
 106 * from a sensor_device_attribute passed into the
 107 * show/store functions.
 108 */
 109#define to_asc7621_param(_sda) \
 110        container_of(_sda, struct asc7621_param, sda)
 111
 112/*
 113 * Each parameter to be retrieved needs an asc7621_param structure
 114 * allocated.  It contains the sensor_device_attribute structure
 115 * and the control info needed to retrieve the value from the register map.
 116 */
 117struct asc7621_param {
 118        struct sensor_device_attribute sda;
 119        u8 priority;
 120        u8 msb[3];
 121        u8 lsb[3];
 122        u8 mask[3];
 123        u8 shift[3];
 124};
 125
 126/*
 127 * This is the map that ultimately indicates whether we'll be
 128 * retrieving a register value or not, and at what frequency.
 129 */
 130static u8 asc7621_register_priorities[255];
 131
 132static struct asc7621_data *asc7621_update_device(struct device *dev);
 133
 134static inline u8 read_byte(struct i2c_client *client, u8 reg)
 135{
 136        int res = i2c_smbus_read_byte_data(client, reg);
 137        if (res < 0) {
 138                dev_err(&client->dev,
 139                        "Unable to read from register 0x%02x.\n", reg);
 140                return 0;
 141        }
 142        return res & 0xff;
 143}
 144
 145static inline int write_byte(struct i2c_client *client, u8 reg, u8 data)
 146{
 147        int res = i2c_smbus_write_byte_data(client, reg, data);
 148        if (res < 0) {
 149                dev_err(&client->dev,
 150                        "Unable to write value 0x%02x to register 0x%02x.\n",
 151                        data, reg);
 152        }
 153        return res;
 154}
 155
 156/*
 157 * Data Handlers
 158 * Each function handles the formatting, storage
 159 * and retrieval of like parameters.
 160 */
 161
 162#define SETUP_SHOW_DATA_PARAM(d, a) \
 163        struct sensor_device_attribute *sda = to_sensor_dev_attr(a); \
 164        struct asc7621_data *data = asc7621_update_device(d); \
 165        struct asc7621_param *param = to_asc7621_param(sda)
 166
 167#define SETUP_STORE_DATA_PARAM(d, a) \
 168        struct sensor_device_attribute *sda = to_sensor_dev_attr(a); \
 169        struct i2c_client *client = to_i2c_client(d); \
 170        struct asc7621_data *data = i2c_get_clientdata(client); \
 171        struct asc7621_param *param = to_asc7621_param(sda)
 172
 173/*
 174 * u8 is just what it sounds like...an unsigned byte with no
 175 * special formatting.
 176 */
 177static ssize_t show_u8(struct device *dev, struct device_attribute *attr,
 178                       char *buf)
 179{
 180        SETUP_SHOW_DATA_PARAM(dev, attr);
 181
 182        return sprintf(buf, "%u\n", data->reg[param->msb[0]]);
 183}
 184
 185static ssize_t store_u8(struct device *dev, struct device_attribute *attr,
 186                        const char *buf, size_t count)
 187{
 188        SETUP_STORE_DATA_PARAM(dev, attr);
 189        long reqval;
 190
 191        if (kstrtol(buf, 10, &reqval))
 192                return -EINVAL;
 193
 194        reqval = clamp_val(reqval, 0, 255);
 195
 196        mutex_lock(&data->update_lock);
 197        data->reg[param->msb[0]] = reqval;
 198        write_byte(client, param->msb[0], reqval);
 199        mutex_unlock(&data->update_lock);
 200        return count;
 201}
 202
 203/*
 204 * Many of the config values occupy only a few bits of a register.
 205 */
 206static ssize_t show_bitmask(struct device *dev,
 207                            struct device_attribute *attr, char *buf)
 208{
 209        SETUP_SHOW_DATA_PARAM(dev, attr);
 210
 211        return sprintf(buf, "%u\n",
 212                       (data->reg[param->msb[0]] >> param->
 213                        shift[0]) & param->mask[0]);
 214}
 215
 216static ssize_t store_bitmask(struct device *dev,
 217                             struct device_attribute *attr,
 218                             const char *buf, size_t count)
 219{
 220        SETUP_STORE_DATA_PARAM(dev, attr);
 221        long reqval;
 222        u8 currval;
 223
 224        if (kstrtol(buf, 10, &reqval))
 225                return -EINVAL;
 226
 227        reqval = clamp_val(reqval, 0, param->mask[0]);
 228
 229        reqval = (reqval & param->mask[0]) << param->shift[0];
 230
 231        mutex_lock(&data->update_lock);
 232        currval = read_byte(client, param->msb[0]);
 233        reqval |= (currval & ~(param->mask[0] << param->shift[0]));
 234        data->reg[param->msb[0]] = reqval;
 235        write_byte(client, param->msb[0], reqval);
 236        mutex_unlock(&data->update_lock);
 237        return count;
 238}
 239
 240/*
 241 * 16 bit fan rpm values
 242 * reported by the device as the number of 11.111us periods (90khz)
 243 * between full fan rotations.  Therefore...
 244 * RPM = (90000 * 60) / register value
 245 */
 246static ssize_t show_fan16(struct device *dev,
 247                          struct device_attribute *attr, char *buf)
 248{
 249        SETUP_SHOW_DATA_PARAM(dev, attr);
 250        u16 regval;
 251
 252        mutex_lock(&data->update_lock);
 253        regval = (data->reg[param->msb[0]] << 8) | data->reg[param->lsb[0]];
 254        mutex_unlock(&data->update_lock);
 255
 256        return sprintf(buf, "%u\n",
 257                       (regval == 0 ? -1 : (regval) ==
 258                        0xffff ? 0 : 5400000 / regval));
 259}
 260
 261static ssize_t store_fan16(struct device *dev,
 262                           struct device_attribute *attr, const char *buf,
 263                           size_t count)
 264{
 265        SETUP_STORE_DATA_PARAM(dev, attr);
 266        long reqval;
 267
 268        if (kstrtol(buf, 10, &reqval))
 269                return -EINVAL;
 270
 271        /*
 272         * If a minimum RPM of zero is requested, then we set the register to
 273         * 0xffff. This value allows the fan to be stopped completely without
 274         * generating an alarm.
 275         */
 276        reqval =
 277            (reqval <= 0 ? 0xffff : clamp_val(5400000 / reqval, 0, 0xfffe));
 278
 279        mutex_lock(&data->update_lock);
 280        data->reg[param->msb[0]] = (reqval >> 8) & 0xff;
 281        data->reg[param->lsb[0]] = reqval & 0xff;
 282        write_byte(client, param->msb[0], data->reg[param->msb[0]]);
 283        write_byte(client, param->lsb[0], data->reg[param->lsb[0]]);
 284        mutex_unlock(&data->update_lock);
 285
 286        return count;
 287}
 288
 289/*
 290 * Voltages are scaled in the device so that the nominal voltage
 291 * is 3/4ths of the 0-255 range (i.e. 192).
 292 * If all voltages are 'normal' then all voltage registers will
 293 * read 0xC0.
 294 *
 295 * The data sheet provides us with the 3/4 scale value for each voltage
 296 * which is stored in in_scaling.  The sda->index parameter value provides
 297 * the index into in_scaling.
 298 *
 299 * NOTE: The chip expects the first 2 inputs be 2.5 and 2.25 volts
 300 * respectively. That doesn't mean that's what the motherboard provides. :)
 301 */
 302
 303static const int asc7621_in_scaling[] = {
 304        2500, 2250, 3300, 5000, 12000
 305};
 306
 307static ssize_t show_in10(struct device *dev, struct device_attribute *attr,
 308                         char *buf)
 309{
 310        SETUP_SHOW_DATA_PARAM(dev, attr);
 311        u16 regval;
 312        u8 nr = sda->index;
 313
 314        mutex_lock(&data->update_lock);
 315        regval = (data->reg[param->msb[0]] << 8) | (data->reg[param->lsb[0]]);
 316        mutex_unlock(&data->update_lock);
 317
 318        /* The LSB value is a 2-bit scaling of the MSB's LSbit value. */
 319        regval = (regval >> 6) * asc7621_in_scaling[nr] / (0xc0 << 2);
 320
 321        return sprintf(buf, "%u\n", regval);
 322}
 323
 324/* 8 bit voltage values (the mins and maxs) */
 325static ssize_t show_in8(struct device *dev, struct device_attribute *attr,
 326                        char *buf)
 327{
 328        SETUP_SHOW_DATA_PARAM(dev, attr);
 329        u8 nr = sda->index;
 330
 331        return sprintf(buf, "%u\n",
 332                       ((data->reg[param->msb[0]] *
 333                         asc7621_in_scaling[nr]) / 0xc0));
 334}
 335
 336static ssize_t store_in8(struct device *dev, struct device_attribute *attr,
 337                         const char *buf, size_t count)
 338{
 339        SETUP_STORE_DATA_PARAM(dev, attr);
 340        long reqval;
 341        u8 nr = sda->index;
 342
 343        if (kstrtol(buf, 10, &reqval))
 344                return -EINVAL;
 345
 346        reqval = clamp_val(reqval, 0, 0xffff);
 347
 348        reqval = reqval * 0xc0 / asc7621_in_scaling[nr];
 349
 350        reqval = clamp_val(reqval, 0, 0xff);
 351
 352        mutex_lock(&data->update_lock);
 353        data->reg[param->msb[0]] = reqval;
 354        write_byte(client, param->msb[0], reqval);
 355        mutex_unlock(&data->update_lock);
 356
 357        return count;
 358}
 359
 360static ssize_t show_temp8(struct device *dev,
 361                          struct device_attribute *attr, char *buf)
 362{
 363        SETUP_SHOW_DATA_PARAM(dev, attr);
 364
 365        return sprintf(buf, "%d\n", ((s8) data->reg[param->msb[0]]) * 1000);
 366}
 367
 368static ssize_t store_temp8(struct device *dev,
 369                           struct device_attribute *attr, const char *buf,
 370                           size_t count)
 371{
 372        SETUP_STORE_DATA_PARAM(dev, attr);
 373        long reqval;
 374        s8 temp;
 375
 376        if (kstrtol(buf, 10, &reqval))
 377                return -EINVAL;
 378
 379        reqval = clamp_val(reqval, -127000, 127000);
 380
 381        temp = reqval / 1000;
 382
 383        mutex_lock(&data->update_lock);
 384        data->reg[param->msb[0]] = temp;
 385        write_byte(client, param->msb[0], temp);
 386        mutex_unlock(&data->update_lock);
 387        return count;
 388}
 389
 390/*
 391 * Temperatures that occupy 2 bytes always have the whole
 392 * number of degrees in the MSB with some part of the LSB
 393 * indicating fractional degrees.
 394 */
 395
 396/*   mmmmmmmm.llxxxxxx */
 397static ssize_t show_temp10(struct device *dev,
 398                           struct device_attribute *attr, char *buf)
 399{
 400        SETUP_SHOW_DATA_PARAM(dev, attr);
 401        u8 msb, lsb;
 402        int temp;
 403
 404        mutex_lock(&data->update_lock);
 405        msb = data->reg[param->msb[0]];
 406        lsb = (data->reg[param->lsb[0]] >> 6) & 0x03;
 407        temp = (((s8) msb) * 1000) + (lsb * 250);
 408        mutex_unlock(&data->update_lock);
 409
 410        return sprintf(buf, "%d\n", temp);
 411}
 412
 413/*   mmmmmm.ll */
 414static ssize_t show_temp62(struct device *dev,
 415                           struct device_attribute *attr, char *buf)
 416{
 417        SETUP_SHOW_DATA_PARAM(dev, attr);
 418        u8 regval = data->reg[param->msb[0]];
 419        int temp = ((s8) (regval & 0xfc) * 1000) + ((regval & 0x03) * 250);
 420
 421        return sprintf(buf, "%d\n", temp);
 422}
 423
 424static ssize_t store_temp62(struct device *dev,
 425                            struct device_attribute *attr, const char *buf,
 426                            size_t count)
 427{
 428        SETUP_STORE_DATA_PARAM(dev, attr);
 429        long reqval, i, f;
 430        s8 temp;
 431
 432        if (kstrtol(buf, 10, &reqval))
 433                return -EINVAL;
 434
 435        reqval = clamp_val(reqval, -32000, 31750);
 436        i = reqval / 1000;
 437        f = reqval - (i * 1000);
 438        temp = i << 2;
 439        temp |= f / 250;
 440
 441        mutex_lock(&data->update_lock);
 442        data->reg[param->msb[0]] = temp;
 443        write_byte(client, param->msb[0], temp);
 444        mutex_unlock(&data->update_lock);
 445        return count;
 446}
 447
 448/*
 449 * The aSC7621 doesn't provide an "auto_point2".  Instead, you
 450 * specify the auto_point1 and a range.  To keep with the sysfs
 451 * hwmon specs, we synthesize the auto_point_2 from them.
 452 */
 453
 454static const u32 asc7621_range_map[] = {
 455        2000, 2500, 3330, 4000, 5000, 6670, 8000, 10000,
 456        13330, 16000, 20000, 26670, 32000, 40000, 53330, 80000,
 457};
 458
 459static ssize_t show_ap2_temp(struct device *dev,
 460                             struct device_attribute *attr, char *buf)
 461{
 462        SETUP_SHOW_DATA_PARAM(dev, attr);
 463        long auto_point1;
 464        u8 regval;
 465        int temp;
 466
 467        mutex_lock(&data->update_lock);
 468        auto_point1 = ((s8) data->reg[param->msb[1]]) * 1000;
 469        regval =
 470            ((data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0]);
 471        temp = auto_point1 + asc7621_range_map[clamp_val(regval, 0, 15)];
 472        mutex_unlock(&data->update_lock);
 473
 474        return sprintf(buf, "%d\n", temp);
 475
 476}
 477
 478static ssize_t store_ap2_temp(struct device *dev,
 479                              struct device_attribute *attr,
 480                              const char *buf, size_t count)
 481{
 482        SETUP_STORE_DATA_PARAM(dev, attr);
 483        long reqval, auto_point1;
 484        int i;
 485        u8 currval, newval = 0;
 486
 487        if (kstrtol(buf, 10, &reqval))
 488                return -EINVAL;
 489
 490        mutex_lock(&data->update_lock);
 491        auto_point1 = data->reg[param->msb[1]] * 1000;
 492        reqval = clamp_val(reqval, auto_point1 + 2000, auto_point1 + 80000);
 493
 494        for (i = ARRAY_SIZE(asc7621_range_map) - 1; i >= 0; i--) {
 495                if (reqval >= auto_point1 + asc7621_range_map[i]) {
 496                        newval = i;
 497                        break;
 498                }
 499        }
 500
 501        newval = (newval & param->mask[0]) << param->shift[0];
 502        currval = read_byte(client, param->msb[0]);
 503        newval |= (currval & ~(param->mask[0] << param->shift[0]));
 504        data->reg[param->msb[0]] = newval;
 505        write_byte(client, param->msb[0], newval);
 506        mutex_unlock(&data->update_lock);
 507        return count;
 508}
 509
 510static ssize_t show_pwm_ac(struct device *dev,
 511                           struct device_attribute *attr, char *buf)
 512{
 513        SETUP_SHOW_DATA_PARAM(dev, attr);
 514        u8 config, altbit, regval;
 515        static const u8 map[] = {
 516                0x01, 0x02, 0x04, 0x1f, 0x00, 0x06, 0x07, 0x10,
 517                0x08, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f
 518        };
 519
 520        mutex_lock(&data->update_lock);
 521        config = (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0];
 522        altbit = (data->reg[param->msb[1]] >> param->shift[1]) & param->mask[1];
 523        regval = config | (altbit << 3);
 524        mutex_unlock(&data->update_lock);
 525
 526        return sprintf(buf, "%u\n", map[clamp_val(regval, 0, 15)]);
 527}
 528
 529static ssize_t store_pwm_ac(struct device *dev,
 530                            struct device_attribute *attr,
 531                            const char *buf, size_t count)
 532{
 533        SETUP_STORE_DATA_PARAM(dev, attr);
 534        unsigned long reqval;
 535        u8 currval, config, altbit, newval;
 536        static const u16 map[] = {
 537                0x04, 0x00, 0x01, 0xff, 0x02, 0xff, 0x05, 0x06,
 538                0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
 539                0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 540                0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,
 541        };
 542
 543        if (kstrtoul(buf, 10, &reqval))
 544                return -EINVAL;
 545
 546        if (reqval > 31)
 547                return -EINVAL;
 548
 549        reqval = map[reqval];
 550        if (reqval == 0xff)
 551                return -EINVAL;
 552
 553        config = reqval & 0x07;
 554        altbit = (reqval >> 3) & 0x01;
 555
 556        config = (config & param->mask[0]) << param->shift[0];
 557        altbit = (altbit & param->mask[1]) << param->shift[1];
 558
 559        mutex_lock(&data->update_lock);
 560        currval = read_byte(client, param->msb[0]);
 561        newval = config | (currval & ~(param->mask[0] << param->shift[0]));
 562        newval = altbit | (newval & ~(param->mask[1] << param->shift[1]));
 563        data->reg[param->msb[0]] = newval;
 564        write_byte(client, param->msb[0], newval);
 565        mutex_unlock(&data->update_lock);
 566        return count;
 567}
 568
 569static ssize_t show_pwm_enable(struct device *dev,
 570                               struct device_attribute *attr, char *buf)
 571{
 572        SETUP_SHOW_DATA_PARAM(dev, attr);
 573        u8 config, altbit, minoff, val, newval;
 574
 575        mutex_lock(&data->update_lock);
 576        config = (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0];
 577        altbit = (data->reg[param->msb[1]] >> param->shift[1]) & param->mask[1];
 578        minoff = (data->reg[param->msb[2]] >> param->shift[2]) & param->mask[2];
 579        mutex_unlock(&data->update_lock);
 580
 581        val = config | (altbit << 3);
 582
 583        if (val == 3 || val >= 10)
 584                newval = 255;
 585        else if (val == 4)
 586                newval = 0;
 587        else if (val == 7)
 588                newval = 1;
 589        else if (minoff == 1)
 590                newval = 2;
 591        else
 592                newval = 3;
 593
 594        return sprintf(buf, "%u\n", newval);
 595}
 596
 597static ssize_t store_pwm_enable(struct device *dev,
 598                                struct device_attribute *attr,
 599                                const char *buf, size_t count)
 600{
 601        SETUP_STORE_DATA_PARAM(dev, attr);
 602        long reqval;
 603        u8 currval, config, altbit, newval, minoff = 255;
 604
 605        if (kstrtol(buf, 10, &reqval))
 606                return -EINVAL;
 607
 608        switch (reqval) {
 609        case 0:
 610                newval = 0x04;
 611                break;
 612        case 1:
 613                newval = 0x07;
 614                break;
 615        case 2:
 616                newval = 0x00;
 617                minoff = 1;
 618                break;
 619        case 3:
 620                newval = 0x00;
 621                minoff = 0;
 622                break;
 623        case 255:
 624                newval = 0x03;
 625                break;
 626        default:
 627                return -EINVAL;
 628        }
 629
 630        config = newval & 0x07;
 631        altbit = (newval >> 3) & 0x01;
 632
 633        mutex_lock(&data->update_lock);
 634        config = (config & param->mask[0]) << param->shift[0];
 635        altbit = (altbit & param->mask[1]) << param->shift[1];
 636        currval = read_byte(client, param->msb[0]);
 637        newval = config | (currval & ~(param->mask[0] << param->shift[0]));
 638        newval = altbit | (newval & ~(param->mask[1] << param->shift[1]));
 639        data->reg[param->msb[0]] = newval;
 640        write_byte(client, param->msb[0], newval);
 641        if (minoff < 255) {
 642                minoff = (minoff & param->mask[2]) << param->shift[2];
 643                currval = read_byte(client, param->msb[2]);
 644                newval =
 645                    minoff | (currval & ~(param->mask[2] << param->shift[2]));
 646                data->reg[param->msb[2]] = newval;
 647                write_byte(client, param->msb[2], newval);
 648        }
 649        mutex_unlock(&data->update_lock);
 650        return count;
 651}
 652
 653static const u32 asc7621_pwm_freq_map[] = {
 654        10, 15, 23, 30, 38, 47, 62, 94,
 655        23000, 24000, 25000, 26000, 27000, 28000, 29000, 30000
 656};
 657
 658static ssize_t show_pwm_freq(struct device *dev,
 659                             struct device_attribute *attr, char *buf)
 660{
 661        SETUP_SHOW_DATA_PARAM(dev, attr);
 662        u8 regval =
 663            (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0];
 664
 665        regval = clamp_val(regval, 0, 15);
 666
 667        return sprintf(buf, "%u\n", asc7621_pwm_freq_map[regval]);
 668}
 669
 670static ssize_t store_pwm_freq(struct device *dev,
 671                              struct device_attribute *attr,
 672                              const char *buf, size_t count)
 673{
 674        SETUP_STORE_DATA_PARAM(dev, attr);
 675        unsigned long reqval;
 676        u8 currval, newval = 255;
 677        int i;
 678
 679        if (kstrtoul(buf, 10, &reqval))
 680                return -EINVAL;
 681
 682        for (i = 0; i < ARRAY_SIZE(asc7621_pwm_freq_map); i++) {
 683                if (reqval == asc7621_pwm_freq_map[i]) {
 684                        newval = i;
 685                        break;
 686                }
 687        }
 688        if (newval == 255)
 689                return -EINVAL;
 690
 691        newval = (newval & param->mask[0]) << param->shift[0];
 692
 693        mutex_lock(&data->update_lock);
 694        currval = read_byte(client, param->msb[0]);
 695        newval |= (currval & ~(param->mask[0] << param->shift[0]));
 696        data->reg[param->msb[0]] = newval;
 697        write_byte(client, param->msb[0], newval);
 698        mutex_unlock(&data->update_lock);
 699        return count;
 700}
 701
 702static const u32 asc7621_pwm_auto_spinup_map[] =  {
 703        0, 100, 250, 400, 700, 1000, 2000, 4000
 704};
 705
 706static ssize_t show_pwm_ast(struct device *dev,
 707                            struct device_attribute *attr, char *buf)
 708{
 709        SETUP_SHOW_DATA_PARAM(dev, attr);
 710        u8 regval =
 711            (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0];
 712
 713        regval = clamp_val(regval, 0, 7);
 714
 715        return sprintf(buf, "%u\n", asc7621_pwm_auto_spinup_map[regval]);
 716
 717}
 718
 719static ssize_t store_pwm_ast(struct device *dev,
 720                             struct device_attribute *attr,
 721                             const char *buf, size_t count)
 722{
 723        SETUP_STORE_DATA_PARAM(dev, attr);
 724        long reqval;
 725        u8 currval, newval = 255;
 726        u32 i;
 727
 728        if (kstrtol(buf, 10, &reqval))
 729                return -EINVAL;
 730
 731        for (i = 0; i < ARRAY_SIZE(asc7621_pwm_auto_spinup_map); i++) {
 732                if (reqval == asc7621_pwm_auto_spinup_map[i]) {
 733                        newval = i;
 734                        break;
 735                }
 736        }
 737        if (newval == 255)
 738                return -EINVAL;
 739
 740        newval = (newval & param->mask[0]) << param->shift[0];
 741
 742        mutex_lock(&data->update_lock);
 743        currval = read_byte(client, param->msb[0]);
 744        newval |= (currval & ~(param->mask[0] << param->shift[0]));
 745        data->reg[param->msb[0]] = newval;
 746        write_byte(client, param->msb[0], newval);
 747        mutex_unlock(&data->update_lock);
 748        return count;
 749}
 750
 751static const u32 asc7621_temp_smoothing_time_map[] = {
 752        35000, 17600, 11800, 7000, 4400, 3000, 1600, 800
 753};
 754
 755static ssize_t show_temp_st(struct device *dev,
 756                            struct device_attribute *attr, char *buf)
 757{
 758        SETUP_SHOW_DATA_PARAM(dev, attr);
 759        u8 regval =
 760            (data->reg[param->msb[0]] >> param->shift[0]) & param->mask[0];
 761        regval = clamp_val(regval, 0, 7);
 762
 763        return sprintf(buf, "%u\n", asc7621_temp_smoothing_time_map[regval]);
 764}
 765
 766static ssize_t store_temp_st(struct device *dev,
 767                             struct device_attribute *attr,
 768                             const char *buf, size_t count)
 769{
 770        SETUP_STORE_DATA_PARAM(dev, attr);
 771        long reqval;
 772        u8 currval, newval = 255;
 773        u32 i;
 774
 775        if (kstrtol(buf, 10, &reqval))
 776                return -EINVAL;
 777
 778        for (i = 0; i < ARRAY_SIZE(asc7621_temp_smoothing_time_map); i++) {
 779                if (reqval == asc7621_temp_smoothing_time_map[i]) {
 780                        newval = i;
 781                        break;
 782                }
 783        }
 784
 785        if (newval == 255)
 786                return -EINVAL;
 787
 788        newval = (newval & param->mask[0]) << param->shift[0];
 789
 790        mutex_lock(&data->update_lock);
 791        currval = read_byte(client, param->msb[0]);
 792        newval |= (currval & ~(param->mask[0] << param->shift[0]));
 793        data->reg[param->msb[0]] = newval;
 794        write_byte(client, param->msb[0], newval);
 795        mutex_unlock(&data->update_lock);
 796        return count;
 797}
 798
 799/*
 800 * End of data handlers
 801 *
 802 * These defines do nothing more than make the table easier
 803 * to read when wrapped at column 80.
 804 */
 805
 806/*
 807 * Creates a variable length array inititalizer.
 808 * VAA(1,3,5,7) would produce {1,3,5,7}
 809 */
 810#define VAA(args...) {args}
 811
 812#define PREAD(name, n, pri, rm, rl, m, s, r) \
 813        {.sda = SENSOR_ATTR(name, S_IRUGO, show_##r, NULL, n), \
 814          .priority = pri, .msb[0] = rm, .lsb[0] = rl, .mask[0] = m, \
 815          .shift[0] = s,}
 816
 817#define PWRITE(name, n, pri, rm, rl, m, s, r) \
 818        {.sda = SENSOR_ATTR(name, S_IRUGO | S_IWUSR, show_##r, store_##r, n), \
 819          .priority = pri, .msb[0] = rm, .lsb[0] = rl, .mask[0] = m, \
 820          .shift[0] = s,}
 821
 822/*
 823 * PWRITEM assumes that the initializers for the .msb, .lsb, .mask and .shift
 824 * were created using the VAA macro.
 825 */
 826#define PWRITEM(name, n, pri, rm, rl, m, s, r) \
 827        {.sda = SENSOR_ATTR(name, S_IRUGO | S_IWUSR, show_##r, store_##r, n), \
 828          .priority = pri, .msb = rm, .lsb = rl, .mask = m, .shift = s,}
 829
 830static struct asc7621_param asc7621_params[] = {
 831        PREAD(in0_input, 0, PRI_HIGH, 0x20, 0x13, 0, 0, in10),
 832        PREAD(in1_input, 1, PRI_HIGH, 0x21, 0x18, 0, 0, in10),
 833        PREAD(in2_input, 2, PRI_HIGH, 0x22, 0x11, 0, 0, in10),
 834        PREAD(in3_input, 3, PRI_HIGH, 0x23, 0x12, 0, 0, in10),
 835        PREAD(in4_input, 4, PRI_HIGH, 0x24, 0x14, 0, 0, in10),
 836
 837        PWRITE(in0_min, 0, PRI_LOW, 0x44, 0, 0, 0, in8),
 838        PWRITE(in1_min, 1, PRI_LOW, 0x46, 0, 0, 0, in8),
 839        PWRITE(in2_min, 2, PRI_LOW, 0x48, 0, 0, 0, in8),
 840        PWRITE(in3_min, 3, PRI_LOW, 0x4a, 0, 0, 0, in8),
 841        PWRITE(in4_min, 4, PRI_LOW, 0x4c, 0, 0, 0, in8),
 842
 843        PWRITE(in0_max, 0, PRI_LOW, 0x45, 0, 0, 0, in8),
 844        PWRITE(in1_max, 1, PRI_LOW, 0x47, 0, 0, 0, in8),
 845        PWRITE(in2_max, 2, PRI_LOW, 0x49, 0, 0, 0, in8),
 846        PWRITE(in3_max, 3, PRI_LOW, 0x4b, 0, 0, 0, in8),
 847        PWRITE(in4_max, 4, PRI_LOW, 0x4d, 0, 0, 0, in8),
 848
 849        PREAD(in0_alarm, 0, PRI_HIGH, 0x41, 0, 0x01, 0, bitmask),
 850        PREAD(in1_alarm, 1, PRI_HIGH, 0x41, 0, 0x01, 1, bitmask),
 851        PREAD(in2_alarm, 2, PRI_HIGH, 0x41, 0, 0x01, 2, bitmask),
 852        PREAD(in3_alarm, 3, PRI_HIGH, 0x41, 0, 0x01, 3, bitmask),
 853        PREAD(in4_alarm, 4, PRI_HIGH, 0x42, 0, 0x01, 0, bitmask),
 854
 855        PREAD(fan1_input, 0, PRI_HIGH, 0x29, 0x28, 0, 0, fan16),
 856        PREAD(fan2_input, 1, PRI_HIGH, 0x2b, 0x2a, 0, 0, fan16),
 857        PREAD(fan3_input, 2, PRI_HIGH, 0x2d, 0x2c, 0, 0, fan16),
 858        PREAD(fan4_input, 3, PRI_HIGH, 0x2f, 0x2e, 0, 0, fan16),
 859
 860        PWRITE(fan1_min, 0, PRI_LOW, 0x55, 0x54, 0, 0, fan16),
 861        PWRITE(fan2_min, 1, PRI_LOW, 0x57, 0x56, 0, 0, fan16),
 862        PWRITE(fan3_min, 2, PRI_LOW, 0x59, 0x58, 0, 0, fan16),
 863        PWRITE(fan4_min, 3, PRI_LOW, 0x5b, 0x5a, 0, 0, fan16),
 864
 865        PREAD(fan1_alarm, 0, PRI_HIGH, 0x42, 0, 0x01, 2, bitmask),
 866        PREAD(fan2_alarm, 1, PRI_HIGH, 0x42, 0, 0x01, 3, bitmask),
 867        PREAD(fan3_alarm, 2, PRI_HIGH, 0x42, 0, 0x01, 4, bitmask),
 868        PREAD(fan4_alarm, 3, PRI_HIGH, 0x42, 0, 0x01, 5, bitmask),
 869
 870        PREAD(temp1_input, 0, PRI_HIGH, 0x25, 0x10, 0, 0, temp10),
 871        PREAD(temp2_input, 1, PRI_HIGH, 0x26, 0x15, 0, 0, temp10),
 872        PREAD(temp3_input, 2, PRI_HIGH, 0x27, 0x16, 0, 0, temp10),
 873        PREAD(temp4_input, 3, PRI_HIGH, 0x33, 0x17, 0, 0, temp10),
 874        PREAD(temp5_input, 4, PRI_HIGH, 0xf7, 0xf6, 0, 0, temp10),
 875        PREAD(temp6_input, 5, PRI_HIGH, 0xf9, 0xf8, 0, 0, temp10),
 876        PREAD(temp7_input, 6, PRI_HIGH, 0xfb, 0xfa, 0, 0, temp10),
 877        PREAD(temp8_input, 7, PRI_HIGH, 0xfd, 0xfc, 0, 0, temp10),
 878
 879        PWRITE(temp1_min, 0, PRI_LOW, 0x4e, 0, 0, 0, temp8),
 880        PWRITE(temp2_min, 1, PRI_LOW, 0x50, 0, 0, 0, temp8),
 881        PWRITE(temp3_min, 2, PRI_LOW, 0x52, 0, 0, 0, temp8),
 882        PWRITE(temp4_min, 3, PRI_LOW, 0x34, 0, 0, 0, temp8),
 883
 884        PWRITE(temp1_max, 0, PRI_LOW, 0x4f, 0, 0, 0, temp8),
 885        PWRITE(temp2_max, 1, PRI_LOW, 0x51, 0, 0, 0, temp8),
 886        PWRITE(temp3_max, 2, PRI_LOW, 0x53, 0, 0, 0, temp8),
 887        PWRITE(temp4_max, 3, PRI_LOW, 0x35, 0, 0, 0, temp8),
 888
 889        PREAD(temp1_alarm, 0, PRI_HIGH, 0x41, 0, 0x01, 4, bitmask),
 890        PREAD(temp2_alarm, 1, PRI_HIGH, 0x41, 0, 0x01, 5, bitmask),
 891        PREAD(temp3_alarm, 2, PRI_HIGH, 0x41, 0, 0x01, 6, bitmask),
 892        PREAD(temp4_alarm, 3, PRI_HIGH, 0x43, 0, 0x01, 0, bitmask),
 893
 894        PWRITE(temp1_source, 0, PRI_LOW, 0x02, 0, 0x07, 4, bitmask),
 895        PWRITE(temp2_source, 1, PRI_LOW, 0x02, 0, 0x07, 0, bitmask),
 896        PWRITE(temp3_source, 2, PRI_LOW, 0x03, 0, 0x07, 4, bitmask),
 897        PWRITE(temp4_source, 3, PRI_LOW, 0x03, 0, 0x07, 0, bitmask),
 898
 899        PWRITE(temp1_smoothing_enable, 0, PRI_LOW, 0x62, 0, 0x01, 3, bitmask),
 900        PWRITE(temp2_smoothing_enable, 1, PRI_LOW, 0x63, 0, 0x01, 7, bitmask),
 901        PWRITE(temp3_smoothing_enable, 2, PRI_LOW, 0x63, 0, 0x01, 3, bitmask),
 902        PWRITE(temp4_smoothing_enable, 3, PRI_LOW, 0x3c, 0, 0x01, 3, bitmask),
 903
 904        PWRITE(temp1_smoothing_time, 0, PRI_LOW, 0x62, 0, 0x07, 0, temp_st),
 905        PWRITE(temp2_smoothing_time, 1, PRI_LOW, 0x63, 0, 0x07, 4, temp_st),
 906        PWRITE(temp3_smoothing_time, 2, PRI_LOW, 0x63, 0, 0x07, 0, temp_st),
 907        PWRITE(temp4_smoothing_time, 3, PRI_LOW, 0x3c, 0, 0x07, 0, temp_st),
 908
 909        PWRITE(temp1_auto_point1_temp_hyst, 0, PRI_LOW, 0x6d, 0, 0x0f, 4,
 910               bitmask),
 911        PWRITE(temp2_auto_point1_temp_hyst, 1, PRI_LOW, 0x6d, 0, 0x0f, 0,
 912               bitmask),
 913        PWRITE(temp3_auto_point1_temp_hyst, 2, PRI_LOW, 0x6e, 0, 0x0f, 4,
 914               bitmask),
 915        PWRITE(temp4_auto_point1_temp_hyst, 3, PRI_LOW, 0x6e, 0, 0x0f, 0,
 916               bitmask),
 917
 918        PREAD(temp1_auto_point2_temp_hyst, 0, PRI_LOW, 0x6d, 0, 0x0f, 4,
 919              bitmask),
 920        PREAD(temp2_auto_point2_temp_hyst, 1, PRI_LOW, 0x6d, 0, 0x0f, 0,
 921              bitmask),
 922        PREAD(temp3_auto_point2_temp_hyst, 2, PRI_LOW, 0x6e, 0, 0x0f, 4,
 923              bitmask),
 924        PREAD(temp4_auto_point2_temp_hyst, 3, PRI_LOW, 0x6e, 0, 0x0f, 0,
 925              bitmask),
 926
 927        PWRITE(temp1_auto_point1_temp, 0, PRI_LOW, 0x67, 0, 0, 0, temp8),
 928        PWRITE(temp2_auto_point1_temp, 1, PRI_LOW, 0x68, 0, 0, 0, temp8),
 929        PWRITE(temp3_auto_point1_temp, 2, PRI_LOW, 0x69, 0, 0, 0, temp8),
 930        PWRITE(temp4_auto_point1_temp, 3, PRI_LOW, 0x3b, 0, 0, 0, temp8),
 931
 932        PWRITEM(temp1_auto_point2_temp, 0, PRI_LOW, VAA(0x5f, 0x67), VAA(0),
 933                VAA(0x0f), VAA(4), ap2_temp),
 934        PWRITEM(temp2_auto_point2_temp, 1, PRI_LOW, VAA(0x60, 0x68), VAA(0),
 935                VAA(0x0f), VAA(4), ap2_temp),
 936        PWRITEM(temp3_auto_point2_temp, 2, PRI_LOW, VAA(0x61, 0x69), VAA(0),
 937                VAA(0x0f), VAA(4), ap2_temp),
 938        PWRITEM(temp4_auto_point2_temp, 3, PRI_LOW, VAA(0x3c, 0x3b), VAA(0),
 939                VAA(0x0f), VAA(4), ap2_temp),
 940
 941        PWRITE(temp1_crit, 0, PRI_LOW, 0x6a, 0, 0, 0, temp8),
 942        PWRITE(temp2_crit, 1, PRI_LOW, 0x6b, 0, 0, 0, temp8),
 943        PWRITE(temp3_crit, 2, PRI_LOW, 0x6c, 0, 0, 0, temp8),
 944        PWRITE(temp4_crit, 3, PRI_LOW, 0x3d, 0, 0, 0, temp8),
 945
 946        PWRITE(temp5_enable, 4, PRI_LOW, 0x0e, 0, 0x01, 0, bitmask),
 947        PWRITE(temp6_enable, 5, PRI_LOW, 0x0e, 0, 0x01, 1, bitmask),
 948        PWRITE(temp7_enable, 6, PRI_LOW, 0x0e, 0, 0x01, 2, bitmask),
 949        PWRITE(temp8_enable, 7, PRI_LOW, 0x0e, 0, 0x01, 3, bitmask),
 950
 951        PWRITE(remote1_offset, 0, PRI_LOW, 0x1c, 0, 0, 0, temp62),
 952        PWRITE(remote2_offset, 1, PRI_LOW, 0x1d, 0, 0, 0, temp62),
 953
 954        PWRITE(pwm1, 0, PRI_HIGH, 0x30, 0, 0, 0, u8),
 955        PWRITE(pwm2, 1, PRI_HIGH, 0x31, 0, 0, 0, u8),
 956        PWRITE(pwm3, 2, PRI_HIGH, 0x32, 0, 0, 0, u8),
 957
 958        PWRITE(pwm1_invert, 0, PRI_LOW, 0x5c, 0, 0x01, 4, bitmask),
 959        PWRITE(pwm2_invert, 1, PRI_LOW, 0x5d, 0, 0x01, 4, bitmask),
 960        PWRITE(pwm3_invert, 2, PRI_LOW, 0x5e, 0, 0x01, 4, bitmask),
 961
 962        PWRITEM(pwm1_enable, 0, PRI_LOW, VAA(0x5c, 0x5c, 0x62), VAA(0, 0, 0),
 963                VAA(0x07, 0x01, 0x01), VAA(5, 3, 5), pwm_enable),
 964        PWRITEM(pwm2_enable, 1, PRI_LOW, VAA(0x5d, 0x5d, 0x62), VAA(0, 0, 0),
 965                VAA(0x07, 0x01, 0x01), VAA(5, 3, 6), pwm_enable),
 966        PWRITEM(pwm3_enable, 2, PRI_LOW, VAA(0x5e, 0x5e, 0x62), VAA(0, 0, 0),
 967                VAA(0x07, 0x01, 0x01), VAA(5, 3, 7), pwm_enable),
 968
 969        PWRITEM(pwm1_auto_channels, 0, PRI_LOW, VAA(0x5c, 0x5c), VAA(0, 0),
 970                VAA(0x07, 0x01), VAA(5, 3), pwm_ac),
 971        PWRITEM(pwm2_auto_channels, 1, PRI_LOW, VAA(0x5d, 0x5d), VAA(0, 0),
 972                VAA(0x07, 0x01), VAA(5, 3), pwm_ac),
 973        PWRITEM(pwm3_auto_channels, 2, PRI_LOW, VAA(0x5e, 0x5e), VAA(0, 0),
 974                VAA(0x07, 0x01), VAA(5, 3), pwm_ac),
 975
 976        PWRITE(pwm1_auto_point1_pwm, 0, PRI_LOW, 0x64, 0, 0, 0, u8),
 977        PWRITE(pwm2_auto_point1_pwm, 1, PRI_LOW, 0x65, 0, 0, 0, u8),
 978        PWRITE(pwm3_auto_point1_pwm, 2, PRI_LOW, 0x66, 0, 0, 0, u8),
 979
 980        PWRITE(pwm1_auto_point2_pwm, 0, PRI_LOW, 0x38, 0, 0, 0, u8),
 981        PWRITE(pwm2_auto_point2_pwm, 1, PRI_LOW, 0x39, 0, 0, 0, u8),
 982        PWRITE(pwm3_auto_point2_pwm, 2, PRI_LOW, 0x3a, 0, 0, 0, u8),
 983
 984        PWRITE(pwm1_freq, 0, PRI_LOW, 0x5f, 0, 0x0f, 0, pwm_freq),
 985        PWRITE(pwm2_freq, 1, PRI_LOW, 0x60, 0, 0x0f, 0, pwm_freq),
 986        PWRITE(pwm3_freq, 2, PRI_LOW, 0x61, 0, 0x0f, 0, pwm_freq),
 987
 988        PREAD(pwm1_auto_zone_assigned, 0, PRI_LOW, 0, 0, 0x03, 2, bitmask),
 989        PREAD(pwm2_auto_zone_assigned, 1, PRI_LOW, 0, 0, 0x03, 4, bitmask),
 990        PREAD(pwm3_auto_zone_assigned, 2, PRI_LOW, 0, 0, 0x03, 6, bitmask),
 991
 992        PWRITE(pwm1_auto_spinup_time, 0, PRI_LOW, 0x5c, 0, 0x07, 0, pwm_ast),
 993        PWRITE(pwm2_auto_spinup_time, 1, PRI_LOW, 0x5d, 0, 0x07, 0, pwm_ast),
 994        PWRITE(pwm3_auto_spinup_time, 2, PRI_LOW, 0x5e, 0, 0x07, 0, pwm_ast),
 995
 996        PWRITE(peci_enable, 0, PRI_LOW, 0x40, 0, 0x01, 4, bitmask),
 997        PWRITE(peci_avg, 0, PRI_LOW, 0x36, 0, 0x07, 0, bitmask),
 998        PWRITE(peci_domain, 0, PRI_LOW, 0x36, 0, 0x01, 3, bitmask),
 999        PWRITE(peci_legacy, 0, PRI_LOW, 0x36, 0, 0x01, 4, bitmask),
1000        PWRITE(peci_diode, 0, PRI_LOW, 0x0e, 0, 0x07, 4, bitmask),
1001        PWRITE(peci_4domain, 0, PRI_LOW, 0x0e, 0, 0x01, 4, bitmask),
1002
1003};
1004
1005static struct asc7621_data *asc7621_update_device(struct device *dev)
1006{
1007        struct i2c_client *client = to_i2c_client(dev);
1008        struct asc7621_data *data = i2c_get_clientdata(client);
1009        int i;
1010
1011/*
1012 * The asc7621 chips guarantee consistent reads of multi-byte values
1013 * regardless of the order of the reads.  No special logic is needed
1014 * so we can just read the registers in whatever  order they appear
1015 * in the asc7621_params array.
1016 */
1017
1018        mutex_lock(&data->update_lock);
1019
1020        /* Read all the high priority registers */
1021
1022        if (!data->valid ||
1023            time_after(jiffies, data->last_high_reading + INTERVAL_HIGH)) {
1024
1025                for (i = 0; i < ARRAY_SIZE(asc7621_register_priorities); i++) {
1026                        if (asc7621_register_priorities[i] == PRI_HIGH) {
1027                                data->reg[i] =
1028                                    i2c_smbus_read_byte_data(client, i) & 0xff;
1029                        }
1030                }
1031                data->last_high_reading = jiffies;
1032        }                       /* last_reading */
1033
1034        /* Read all the low priority registers. */
1035
1036        if (!data->valid ||
1037            time_after(jiffies, data->last_low_reading + INTERVAL_LOW)) {
1038
1039                for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) {
1040                        if (asc7621_register_priorities[i] == PRI_LOW) {
1041                                data->reg[i] =
1042                                    i2c_smbus_read_byte_data(client, i) & 0xff;
1043                        }
1044                }
1045                data->last_low_reading = jiffies;
1046        }                       /* last_reading */
1047
1048        data->valid = 1;
1049
1050        mutex_unlock(&data->update_lock);
1051
1052        return data;
1053}
1054
1055/*
1056 * Standard detection and initialization below
1057 *
1058 * Helper function that checks if an address is valid
1059 * for a particular chip.
1060 */
1061
1062static inline int valid_address_for_chip(int chip_type, int address)
1063{
1064        int i;
1065
1066        for (i = 0; asc7621_chips[chip_type].addresses[i] != I2C_CLIENT_END;
1067             i++) {
1068                if (asc7621_chips[chip_type].addresses[i] == address)
1069                        return 1;
1070        }
1071        return 0;
1072}
1073
1074static void asc7621_init_client(struct i2c_client *client)
1075{
1076        int value;
1077
1078        /* Warn if part was not "READY" */
1079
1080        value = read_byte(client, 0x40);
1081
1082        if (value & 0x02) {
1083                dev_err(&client->dev,
1084                        "Client (%d,0x%02x) config is locked.\n",
1085                        i2c_adapter_id(client->adapter), client->addr);
1086        }
1087        if (!(value & 0x04)) {
1088                dev_err(&client->dev, "Client (%d,0x%02x) is not ready.\n",
1089                        i2c_adapter_id(client->adapter), client->addr);
1090        }
1091
1092/*
1093 * Start monitoring
1094 *
1095 * Try to clear LOCK, Set START, save everything else
1096 */
1097        value = (value & ~0x02) | 0x01;
1098        write_byte(client, 0x40, value & 0xff);
1099
1100}
1101
1102static int
1103asc7621_probe(struct i2c_client *client, const struct i2c_device_id *id)
1104{
1105        struct asc7621_data *data;
1106        int i, err;
1107
1108        if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1109                return -EIO;
1110
1111        data = devm_kzalloc(&client->dev, sizeof(struct asc7621_data),
1112                            GFP_KERNEL);
1113        if (data == NULL)
1114                return -ENOMEM;
1115
1116        i2c_set_clientdata(client, data);
1117        mutex_init(&data->update_lock);
1118
1119        /* Initialize the asc7621 chip */
1120        asc7621_init_client(client);
1121
1122        /* Create the sysfs entries */
1123        for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) {
1124                err =
1125                    device_create_file(&client->dev,
1126                                       &(asc7621_params[i].sda.dev_attr));
1127                if (err)
1128                        goto exit_remove;
1129        }
1130
1131        data->class_dev = hwmon_device_register(&client->dev);
1132        if (IS_ERR(data->class_dev)) {
1133                err = PTR_ERR(data->class_dev);
1134                goto exit_remove;
1135        }
1136
1137        return 0;
1138
1139exit_remove:
1140        for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) {
1141                device_remove_file(&client->dev,
1142                                   &(asc7621_params[i].sda.dev_attr));
1143        }
1144
1145        return err;
1146}
1147
1148static int asc7621_detect(struct i2c_client *client,
1149                          struct i2c_board_info *info)
1150{
1151        struct i2c_adapter *adapter = client->adapter;
1152        int company, verstep, chip_index;
1153
1154        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1155                return -ENODEV;
1156
1157        for (chip_index = FIRST_CHIP; chip_index <= LAST_CHIP; chip_index++) {
1158
1159                if (!valid_address_for_chip(chip_index, client->addr))
1160                        continue;
1161
1162                company = read_byte(client,
1163                        asc7621_chips[chip_index].company_reg);
1164                verstep = read_byte(client,
1165                        asc7621_chips[chip_index].verstep_reg);
1166
1167                if (company == asc7621_chips[chip_index].company_id &&
1168                    verstep == asc7621_chips[chip_index].verstep_id) {
1169                        strlcpy(info->type, asc7621_chips[chip_index].name,
1170                                I2C_NAME_SIZE);
1171
1172                        dev_info(&adapter->dev, "Matched %s at 0x%02x\n",
1173                                 asc7621_chips[chip_index].name, client->addr);
1174                        return 0;
1175                }
1176        }
1177
1178        return -ENODEV;
1179}
1180
1181static int asc7621_remove(struct i2c_client *client)
1182{
1183        struct asc7621_data *data = i2c_get_clientdata(client);
1184        int i;
1185
1186        hwmon_device_unregister(data->class_dev);
1187
1188        for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) {
1189                device_remove_file(&client->dev,
1190                                   &(asc7621_params[i].sda.dev_attr));
1191        }
1192
1193        return 0;
1194}
1195
1196static const struct i2c_device_id asc7621_id[] = {
1197        {"asc7621", asc7621},
1198        {"asc7621a", asc7621a},
1199        {},
1200};
1201
1202MODULE_DEVICE_TABLE(i2c, asc7621_id);
1203
1204static struct i2c_driver asc7621_driver = {
1205        .class = I2C_CLASS_HWMON,
1206        .driver = {
1207                .name = "asc7621",
1208        },
1209        .probe = asc7621_probe,
1210        .remove = asc7621_remove,
1211        .id_table = asc7621_id,
1212        .detect = asc7621_detect,
1213        .address_list = normal_i2c,
1214};
1215
1216static int __init sm_asc7621_init(void)
1217{
1218        int i, j;
1219/*
1220 * Collect all the registers needed into a single array.
1221 * This way, if a register isn't actually used for anything,
1222 * we don't retrieve it.
1223 */
1224
1225        for (i = 0; i < ARRAY_SIZE(asc7621_params); i++) {
1226                for (j = 0; j < ARRAY_SIZE(asc7621_params[i].msb); j++)
1227                        asc7621_register_priorities[asc7621_params[i].msb[j]] =
1228                            asc7621_params[i].priority;
1229                for (j = 0; j < ARRAY_SIZE(asc7621_params[i].lsb); j++)
1230                        asc7621_register_priorities[asc7621_params[i].lsb[j]] =
1231                            asc7621_params[i].priority;
1232        }
1233        return i2c_add_driver(&asc7621_driver);
1234}
1235
1236static void __exit sm_asc7621_exit(void)
1237{
1238        i2c_del_driver(&asc7621_driver);
1239}
1240
1241MODULE_LICENSE("GPL");
1242MODULE_AUTHOR("George Joseph");
1243MODULE_DESCRIPTION("Andigilog aSC7621 and aSC7621a driver");
1244
1245module_init(sm_asc7621_init);
1246module_exit(sm_asc7621_exit);
1247