linux/drivers/hwmon/max6650.c
<<
>>
Prefs
   1/*
   2 * max6650.c - Part of lm_sensors, Linux kernel modules for hardware
   3 *             monitoring.
   4 *
   5 * (C) 2007 by Hans J. Koch <hjk@hansjkoch.de>
   6 *
   7 * based on code written by John Morris <john.morris@spirentcom.com>
   8 * Copyright (c) 2003 Spirent Communications
   9 * and Claus Gindhart <claus.gindhart@kontron.com>
  10 *
  11 * This module has only been tested with the MAX6650 chip. It should
  12 * also work with the MAX6651. It does not distinguish max6650 and max6651
  13 * chips.
  14 *
  15 * The datasheet was last seen at:
  16 *
  17 *        http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf
  18 *
  19 * This program is free software; you can redistribute it and/or modify
  20 * it under the terms of the GNU General Public License as published by
  21 * the Free Software Foundation; either version 2 of the License, or
  22 * (at your option) any later version.
  23 *
  24 * This program is distributed in the hope that it will be useful,
  25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27 * GNU General Public License for more details.
  28 *
  29 * You should have received a copy of the GNU General Public License
  30 * along with this program; if not, write to the Free Software
  31 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  32 */
  33
  34#include <linux/module.h>
  35#include <linux/init.h>
  36#include <linux/slab.h>
  37#include <linux/jiffies.h>
  38#include <linux/i2c.h>
  39#include <linux/hwmon.h>
  40#include <linux/hwmon-sysfs.h>
  41#include <linux/err.h>
  42#include <linux/of_device.h>
  43
  44/*
  45 * Insmod parameters
  46 */
  47
  48/* fan_voltage: 5=5V fan, 12=12V fan, 0=don't change */
  49static int fan_voltage;
  50/* prescaler: Possible values are 1, 2, 4, 8, 16 or 0 for don't change */
  51static int prescaler;
  52/* clock: The clock frequency of the chip (max6651 can be clocked externally) */
  53static int clock = 254000;
  54
  55module_param(fan_voltage, int, S_IRUGO);
  56module_param(prescaler, int, S_IRUGO);
  57module_param(clock, int, S_IRUGO);
  58
  59/*
  60 * MAX 6650/6651 registers
  61 */
  62
  63#define MAX6650_REG_SPEED       0x00
  64#define MAX6650_REG_CONFIG      0x02
  65#define MAX6650_REG_GPIO_DEF    0x04
  66#define MAX6650_REG_DAC         0x06
  67#define MAX6650_REG_ALARM_EN    0x08
  68#define MAX6650_REG_ALARM       0x0A
  69#define MAX6650_REG_TACH0       0x0C
  70#define MAX6650_REG_TACH1       0x0E
  71#define MAX6650_REG_TACH2       0x10
  72#define MAX6650_REG_TACH3       0x12
  73#define MAX6650_REG_GPIO_STAT   0x14
  74#define MAX6650_REG_COUNT       0x16
  75
  76/*
  77 * Config register bits
  78 */
  79
  80#define MAX6650_CFG_V12                 0x08
  81#define MAX6650_CFG_PRESCALER_MASK      0x07
  82#define MAX6650_CFG_PRESCALER_2         0x01
  83#define MAX6650_CFG_PRESCALER_4         0x02
  84#define MAX6650_CFG_PRESCALER_8         0x03
  85#define MAX6650_CFG_PRESCALER_16        0x04
  86#define MAX6650_CFG_MODE_MASK           0x30
  87#define MAX6650_CFG_MODE_ON             0x00
  88#define MAX6650_CFG_MODE_OFF            0x10
  89#define MAX6650_CFG_MODE_CLOSED_LOOP    0x20
  90#define MAX6650_CFG_MODE_OPEN_LOOP      0x30
  91#define MAX6650_COUNT_MASK              0x03
  92
  93/*
  94 * Alarm status register bits
  95 */
  96
  97#define MAX6650_ALRM_MAX        0x01
  98#define MAX6650_ALRM_MIN        0x02
  99#define MAX6650_ALRM_TACH       0x04
 100#define MAX6650_ALRM_GPIO1      0x08
 101#define MAX6650_ALRM_GPIO2      0x10
 102
 103/* Minimum and maximum values of the FAN-RPM */
 104#define FAN_RPM_MIN 240
 105#define FAN_RPM_MAX 30000
 106
 107#define DIV_FROM_REG(reg) (1 << (reg & 7))
 108
 109/*
 110 * Client data (each client gets its own)
 111 */
 112
 113struct max6650_data {
 114        struct i2c_client *client;
 115        const struct attribute_group *groups[3];
 116        struct mutex update_lock;
 117        int nr_fans;
 118        char valid; /* zero until following fields are valid */
 119        unsigned long last_updated; /* in jiffies */
 120
 121        /* register values */
 122        u8 speed;
 123        u8 config;
 124        u8 tach[4];
 125        u8 count;
 126        u8 dac;
 127        u8 alarm;
 128};
 129
 130static const u8 tach_reg[] = {
 131        MAX6650_REG_TACH0,
 132        MAX6650_REG_TACH1,
 133        MAX6650_REG_TACH2,
 134        MAX6650_REG_TACH3,
 135};
 136
 137static const struct of_device_id max6650_dt_match[] = {
 138        {
 139                .compatible = "maxim,max6650",
 140                .data = (void *)1
 141        },
 142        {
 143                .compatible = "maxim,max6651",
 144                .data = (void *)4
 145        },
 146        { },
 147};
 148MODULE_DEVICE_TABLE(of, max6650_dt_match);
 149
 150static struct max6650_data *max6650_update_device(struct device *dev)
 151{
 152        struct max6650_data *data = dev_get_drvdata(dev);
 153        struct i2c_client *client = data->client;
 154        int i;
 155
 156        mutex_lock(&data->update_lock);
 157
 158        if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
 159                data->speed = i2c_smbus_read_byte_data(client,
 160                                                       MAX6650_REG_SPEED);
 161                data->config = i2c_smbus_read_byte_data(client,
 162                                                        MAX6650_REG_CONFIG);
 163                for (i = 0; i < data->nr_fans; i++) {
 164                        data->tach[i] = i2c_smbus_read_byte_data(client,
 165                                                                 tach_reg[i]);
 166                }
 167                data->count = i2c_smbus_read_byte_data(client,
 168                                                        MAX6650_REG_COUNT);
 169                data->dac = i2c_smbus_read_byte_data(client, MAX6650_REG_DAC);
 170
 171                /*
 172                 * Alarms are cleared on read in case the condition that
 173                 * caused the alarm is removed. Keep the value latched here
 174                 * for providing the register through different alarm files.
 175                 */
 176                data->alarm |= i2c_smbus_read_byte_data(client,
 177                                                        MAX6650_REG_ALARM);
 178
 179                data->last_updated = jiffies;
 180                data->valid = 1;
 181        }
 182
 183        mutex_unlock(&data->update_lock);
 184
 185        return data;
 186}
 187
 188/*
 189 * Change the operating mode of the chip (if needed).
 190 * mode is one of the MAX6650_CFG_MODE_* values.
 191 */
 192static int max6650_set_operating_mode(struct max6650_data *data, u8 mode)
 193{
 194        int result;
 195        u8 config = data->config;
 196
 197        if (mode == (config & MAX6650_CFG_MODE_MASK))
 198                return 0;
 199
 200        config = (config & ~MAX6650_CFG_MODE_MASK) | mode;
 201
 202        result = i2c_smbus_write_byte_data(data->client, MAX6650_REG_CONFIG,
 203                                           config);
 204        if (result < 0)
 205                return result;
 206
 207        data->config = config;
 208
 209        return 0;
 210}
 211
 212static ssize_t fan_show(struct device *dev, struct device_attribute *devattr,
 213                        char *buf)
 214{
 215        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 216        struct max6650_data *data = max6650_update_device(dev);
 217        int rpm;
 218
 219        /*
 220         * Calculation details:
 221         *
 222         * Each tachometer counts over an interval given by the "count"
 223         * register (0.25, 0.5, 1 or 2 seconds). This module assumes
 224         * that the fans produce two pulses per revolution (this seems
 225         * to be the most common).
 226         */
 227
 228        rpm = ((data->tach[attr->index] * 120) / DIV_FROM_REG(data->count));
 229        return sprintf(buf, "%d\n", rpm);
 230}
 231
 232/*
 233 * Set the fan speed to the specified RPM (or read back the RPM setting).
 234 * This works in closed loop mode only. Use pwm1 for open loop speed setting.
 235 *
 236 * The MAX6650/1 will automatically control fan speed when in closed loop
 237 * mode.
 238 *
 239 * Assumptions:
 240 *
 241 * 1) The MAX6650/1 internal 254kHz clock frequency is set correctly. Use
 242 *    the clock module parameter if you need to fine tune this.
 243 *
 244 * 2) The prescaler (low three bits of the config register) has already
 245 *    been set to an appropriate value. Use the prescaler module parameter
 246 *    if your BIOS doesn't initialize the chip properly.
 247 *
 248 * The relevant equations are given on pages 21 and 22 of the datasheet.
 249 *
 250 * From the datasheet, the relevant equation when in regulation is:
 251 *
 252 *    [fCLK / (128 x (KTACH + 1))] = 2 x FanSpeed / KSCALE
 253 *
 254 * where:
 255 *
 256 *    fCLK is the oscillator frequency (either the 254kHz internal
 257 *         oscillator or the externally applied clock)
 258 *
 259 *    KTACH is the value in the speed register
 260 *
 261 *    FanSpeed is the speed of the fan in rps
 262 *
 263 *    KSCALE is the prescaler value (1, 2, 4, 8, or 16)
 264 *
 265 * When reading, we need to solve for FanSpeed. When writing, we need to
 266 * solve for KTACH.
 267 *
 268 * Note: this tachometer is completely separate from the tachometers
 269 * used to measure the fan speeds. Only one fan's speed (fan1) is
 270 * controlled.
 271 */
 272
 273static ssize_t fan1_target_show(struct device *dev,
 274                                struct device_attribute *devattr, char *buf)
 275{
 276        struct max6650_data *data = max6650_update_device(dev);
 277        int kscale, ktach, rpm;
 278
 279        /*
 280         * Use the datasheet equation:
 281         *
 282         *    FanSpeed = KSCALE x fCLK / [256 x (KTACH + 1)]
 283         *
 284         * then multiply by 60 to give rpm.
 285         */
 286
 287        kscale = DIV_FROM_REG(data->config);
 288        ktach = data->speed;
 289        rpm = 60 * kscale * clock / (256 * (ktach + 1));
 290        return sprintf(buf, "%d\n", rpm);
 291}
 292
 293static int max6650_set_target(struct max6650_data *data, unsigned long rpm)
 294{
 295        int kscale, ktach;
 296
 297        if (rpm == 0)
 298                return max6650_set_operating_mode(data, MAX6650_CFG_MODE_OFF);
 299
 300        rpm = clamp_val(rpm, FAN_RPM_MIN, FAN_RPM_MAX);
 301
 302        /*
 303         * Divide the required speed by 60 to get from rpm to rps, then
 304         * use the datasheet equation:
 305         *
 306         *     KTACH = [(fCLK x KSCALE) / (256 x FanSpeed)] - 1
 307         */
 308
 309        kscale = DIV_FROM_REG(data->config);
 310        ktach = ((clock * kscale) / (256 * rpm / 60)) - 1;
 311        if (ktach < 0)
 312                ktach = 0;
 313        if (ktach > 255)
 314                ktach = 255;
 315        data->speed = ktach;
 316
 317        return i2c_smbus_write_byte_data(data->client, MAX6650_REG_SPEED,
 318                                         data->speed);
 319}
 320
 321static ssize_t fan1_target_store(struct device *dev,
 322                                 struct device_attribute *devattr,
 323                                 const char *buf, size_t count)
 324{
 325        struct max6650_data *data = dev_get_drvdata(dev);
 326        unsigned long rpm;
 327        int err;
 328
 329        err = kstrtoul(buf, 10, &rpm);
 330        if (err)
 331                return err;
 332
 333        mutex_lock(&data->update_lock);
 334
 335        err = max6650_set_target(data, rpm);
 336
 337        mutex_unlock(&data->update_lock);
 338
 339        if (err < 0)
 340                return err;
 341
 342        return count;
 343}
 344
 345/*
 346 * Get/set the fan speed in open loop mode using pwm1 sysfs file.
 347 * Speed is given as a relative value from 0 to 255, where 255 is maximum
 348 * speed. Note that this is done by writing directly to the chip's DAC,
 349 * it won't change the closed loop speed set by fan1_target.
 350 * Also note that due to rounding errors it is possible that you don't read
 351 * back exactly the value you have set.
 352 */
 353
 354static ssize_t pwm1_show(struct device *dev, struct device_attribute *devattr,
 355                         char *buf)
 356{
 357        int pwm;
 358        struct max6650_data *data = max6650_update_device(dev);
 359
 360        /*
 361         * Useful range for dac is 0-180 for 12V fans and 0-76 for 5V fans.
 362         * Lower DAC values mean higher speeds.
 363         */
 364        if (data->config & MAX6650_CFG_V12)
 365                pwm = 255 - (255 * (int)data->dac)/180;
 366        else
 367                pwm = 255 - (255 * (int)data->dac)/76;
 368
 369        if (pwm < 0)
 370                pwm = 0;
 371
 372        return sprintf(buf, "%d\n", pwm);
 373}
 374
 375static ssize_t pwm1_store(struct device *dev,
 376                          struct device_attribute *devattr, const char *buf,
 377                          size_t count)
 378{
 379        struct max6650_data *data = dev_get_drvdata(dev);
 380        struct i2c_client *client = data->client;
 381        unsigned long pwm;
 382        int err;
 383
 384        err = kstrtoul(buf, 10, &pwm);
 385        if (err)
 386                return err;
 387
 388        pwm = clamp_val(pwm, 0, 255);
 389
 390        mutex_lock(&data->update_lock);
 391
 392        if (data->config & MAX6650_CFG_V12)
 393                data->dac = 180 - (180 * pwm)/255;
 394        else
 395                data->dac = 76 - (76 * pwm)/255;
 396        err = i2c_smbus_write_byte_data(client, MAX6650_REG_DAC, data->dac);
 397
 398        mutex_unlock(&data->update_lock);
 399
 400        return err < 0 ? err : count;
 401}
 402
 403/*
 404 * Get/Set controller mode:
 405 * Possible values:
 406 * 0 = Fan always on
 407 * 1 = Open loop, Voltage is set according to speed, not regulated.
 408 * 2 = Closed loop, RPM for all fans regulated by fan1 tachometer
 409 * 3 = Fan off
 410 */
 411static ssize_t pwm1_enable_show(struct device *dev,
 412                                struct device_attribute *devattr, char *buf)
 413{
 414        struct max6650_data *data = max6650_update_device(dev);
 415        int mode = (data->config & MAX6650_CFG_MODE_MASK) >> 4;
 416        int sysfs_modes[4] = {0, 3, 2, 1};
 417
 418        return sprintf(buf, "%d\n", sysfs_modes[mode]);
 419}
 420
 421static ssize_t pwm1_enable_store(struct device *dev,
 422                                 struct device_attribute *devattr,
 423                                 const char *buf, size_t count)
 424{
 425        struct max6650_data *data = dev_get_drvdata(dev);
 426        unsigned long mode;
 427        int err;
 428        const u8 max6650_modes[] = {
 429                MAX6650_CFG_MODE_ON,
 430                MAX6650_CFG_MODE_OPEN_LOOP,
 431                MAX6650_CFG_MODE_CLOSED_LOOP,
 432                MAX6650_CFG_MODE_OFF,
 433                };
 434
 435        err = kstrtoul(buf, 10, &mode);
 436        if (err)
 437                return err;
 438
 439        if (mode >= ARRAY_SIZE(max6650_modes))
 440                return -EINVAL;
 441
 442        mutex_lock(&data->update_lock);
 443
 444        max6650_set_operating_mode(data, max6650_modes[mode]);
 445
 446        mutex_unlock(&data->update_lock);
 447
 448        return count;
 449}
 450
 451/*
 452 * Read/write functions for fan1_div sysfs file. The MAX6650 has no such
 453 * divider. We handle this by converting between divider and counttime:
 454 *
 455 * (counttime == k) <==> (divider == 2^k), k = 0, 1, 2, or 3
 456 *
 457 * Lower values of k allow to connect a faster fan without the risk of
 458 * counter overflow. The price is lower resolution. You can also set counttime
 459 * using the module parameter. Note that the module parameter "prescaler" also
 460 * influences the behaviour. Unfortunately, there's no sysfs attribute
 461 * defined for that. See the data sheet for details.
 462 */
 463
 464static ssize_t fan1_div_show(struct device *dev,
 465                             struct device_attribute *devattr, char *buf)
 466{
 467        struct max6650_data *data = max6650_update_device(dev);
 468
 469        return sprintf(buf, "%d\n", DIV_FROM_REG(data->count));
 470}
 471
 472static ssize_t fan1_div_store(struct device *dev,
 473                              struct device_attribute *devattr,
 474                              const char *buf, size_t count)
 475{
 476        struct max6650_data *data = dev_get_drvdata(dev);
 477        struct i2c_client *client = data->client;
 478        unsigned long div;
 479        int err;
 480
 481        err = kstrtoul(buf, 10, &div);
 482        if (err)
 483                return err;
 484
 485        mutex_lock(&data->update_lock);
 486        switch (div) {
 487        case 1:
 488                data->count = 0;
 489                break;
 490        case 2:
 491                data->count = 1;
 492                break;
 493        case 4:
 494                data->count = 2;
 495                break;
 496        case 8:
 497                data->count = 3;
 498                break;
 499        default:
 500                mutex_unlock(&data->update_lock);
 501                return -EINVAL;
 502        }
 503
 504        i2c_smbus_write_byte_data(client, MAX6650_REG_COUNT, data->count);
 505        mutex_unlock(&data->update_lock);
 506
 507        return count;
 508}
 509
 510/*
 511 * Get alarm stati:
 512 * Possible values:
 513 * 0 = no alarm
 514 * 1 = alarm
 515 */
 516
 517static ssize_t alarm_show(struct device *dev,
 518                          struct device_attribute *devattr, char *buf)
 519{
 520        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 521        struct max6650_data *data = max6650_update_device(dev);
 522        struct i2c_client *client = data->client;
 523        int alarm = 0;
 524
 525        if (data->alarm & attr->index) {
 526                mutex_lock(&data->update_lock);
 527                alarm = 1;
 528                data->alarm &= ~attr->index;
 529                data->alarm |= i2c_smbus_read_byte_data(client,
 530                                                        MAX6650_REG_ALARM);
 531                mutex_unlock(&data->update_lock);
 532        }
 533
 534        return sprintf(buf, "%d\n", alarm);
 535}
 536
 537static SENSOR_DEVICE_ATTR_RO(fan1_input, fan, 0);
 538static SENSOR_DEVICE_ATTR_RO(fan2_input, fan, 1);
 539static SENSOR_DEVICE_ATTR_RO(fan3_input, fan, 2);
 540static SENSOR_DEVICE_ATTR_RO(fan4_input, fan, 3);
 541static DEVICE_ATTR_RW(fan1_target);
 542static DEVICE_ATTR_RW(fan1_div);
 543static DEVICE_ATTR_RW(pwm1_enable);
 544static DEVICE_ATTR_RW(pwm1);
 545static SENSOR_DEVICE_ATTR_RO(fan1_max_alarm, alarm, MAX6650_ALRM_MAX);
 546static SENSOR_DEVICE_ATTR_RO(fan1_min_alarm, alarm, MAX6650_ALRM_MIN);
 547static SENSOR_DEVICE_ATTR_RO(fan1_fault, alarm, MAX6650_ALRM_TACH);
 548static SENSOR_DEVICE_ATTR_RO(gpio1_alarm, alarm, MAX6650_ALRM_GPIO1);
 549static SENSOR_DEVICE_ATTR_RO(gpio2_alarm, alarm, MAX6650_ALRM_GPIO2);
 550
 551static umode_t max6650_attrs_visible(struct kobject *kobj, struct attribute *a,
 552                                    int n)
 553{
 554        struct device *dev = container_of(kobj, struct device, kobj);
 555        struct max6650_data *data = dev_get_drvdata(dev);
 556        struct i2c_client *client = data->client;
 557        u8 alarm_en = i2c_smbus_read_byte_data(client, MAX6650_REG_ALARM_EN);
 558        struct device_attribute *devattr;
 559
 560        /*
 561         * Hide the alarms that have not been enabled by the firmware
 562         */
 563
 564        devattr = container_of(a, struct device_attribute, attr);
 565        if (devattr == &sensor_dev_attr_fan1_max_alarm.dev_attr
 566         || devattr == &sensor_dev_attr_fan1_min_alarm.dev_attr
 567         || devattr == &sensor_dev_attr_fan1_fault.dev_attr
 568         || devattr == &sensor_dev_attr_gpio1_alarm.dev_attr
 569         || devattr == &sensor_dev_attr_gpio2_alarm.dev_attr) {
 570                if (!(alarm_en & to_sensor_dev_attr(devattr)->index))
 571                        return 0;
 572        }
 573
 574        return a->mode;
 575}
 576
 577static struct attribute *max6650_attrs[] = {
 578        &sensor_dev_attr_fan1_input.dev_attr.attr,
 579        &dev_attr_fan1_target.attr,
 580        &dev_attr_fan1_div.attr,
 581        &dev_attr_pwm1_enable.attr,
 582        &dev_attr_pwm1.attr,
 583        &sensor_dev_attr_fan1_max_alarm.dev_attr.attr,
 584        &sensor_dev_attr_fan1_min_alarm.dev_attr.attr,
 585        &sensor_dev_attr_fan1_fault.dev_attr.attr,
 586        &sensor_dev_attr_gpio1_alarm.dev_attr.attr,
 587        &sensor_dev_attr_gpio2_alarm.dev_attr.attr,
 588        NULL
 589};
 590
 591static const struct attribute_group max6650_group = {
 592        .attrs = max6650_attrs,
 593        .is_visible = max6650_attrs_visible,
 594};
 595
 596static struct attribute *max6651_attrs[] = {
 597        &sensor_dev_attr_fan2_input.dev_attr.attr,
 598        &sensor_dev_attr_fan3_input.dev_attr.attr,
 599        &sensor_dev_attr_fan4_input.dev_attr.attr,
 600        NULL
 601};
 602
 603static const struct attribute_group max6651_group = {
 604        .attrs = max6651_attrs,
 605};
 606
 607/*
 608 * Real code
 609 */
 610
 611static int max6650_init_client(struct max6650_data *data,
 612                               struct i2c_client *client)
 613{
 614        struct device *dev = &client->dev;
 615        int config;
 616        int err = -EIO;
 617        u32 voltage;
 618        u32 prescale;
 619        u32 target_rpm;
 620
 621        if (of_property_read_u32(dev->of_node, "maxim,fan-microvolt",
 622                                 &voltage))
 623                voltage = fan_voltage;
 624        else
 625                voltage /= 1000000; /* Microvolts to volts */
 626        if (of_property_read_u32(dev->of_node, "maxim,fan-prescale",
 627                                 &prescale))
 628                prescale = prescaler;
 629
 630        config = i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG);
 631
 632        if (config < 0) {
 633                dev_err(dev, "Error reading config, aborting.\n");
 634                return err;
 635        }
 636
 637        switch (voltage) {
 638        case 0:
 639                break;
 640        case 5:
 641                config &= ~MAX6650_CFG_V12;
 642                break;
 643        case 12:
 644                config |= MAX6650_CFG_V12;
 645                break;
 646        default:
 647                dev_err(dev, "illegal value for fan_voltage (%d)\n", voltage);
 648        }
 649
 650        switch (prescale) {
 651        case 0:
 652                break;
 653        case 1:
 654                config &= ~MAX6650_CFG_PRESCALER_MASK;
 655                break;
 656        case 2:
 657                config = (config & ~MAX6650_CFG_PRESCALER_MASK)
 658                         | MAX6650_CFG_PRESCALER_2;
 659                break;
 660        case  4:
 661                config = (config & ~MAX6650_CFG_PRESCALER_MASK)
 662                         | MAX6650_CFG_PRESCALER_4;
 663                break;
 664        case  8:
 665                config = (config & ~MAX6650_CFG_PRESCALER_MASK)
 666                         | MAX6650_CFG_PRESCALER_8;
 667                break;
 668        case 16:
 669                config = (config & ~MAX6650_CFG_PRESCALER_MASK)
 670                         | MAX6650_CFG_PRESCALER_16;
 671                break;
 672        default:
 673                dev_err(dev, "illegal value for prescaler (%d)\n", prescale);
 674        }
 675
 676        dev_info(dev, "Fan voltage: %dV, prescaler: %d.\n",
 677                 (config & MAX6650_CFG_V12) ? 12 : 5,
 678                 1 << (config & MAX6650_CFG_PRESCALER_MASK));
 679
 680        if (i2c_smbus_write_byte_data(client, MAX6650_REG_CONFIG, config)) {
 681                dev_err(dev, "Config write error, aborting.\n");
 682                return err;
 683        }
 684
 685        data->config = config;
 686        data->count = i2c_smbus_read_byte_data(client, MAX6650_REG_COUNT);
 687
 688        if (!of_property_read_u32(client->dev.of_node, "maxim,fan-target-rpm",
 689                                  &target_rpm)) {
 690                max6650_set_target(data, target_rpm);
 691                max6650_set_operating_mode(data, MAX6650_CFG_MODE_CLOSED_LOOP);
 692        }
 693
 694        return 0;
 695}
 696
 697static int max6650_probe(struct i2c_client *client,
 698                         const struct i2c_device_id *id)
 699{
 700        struct device *dev = &client->dev;
 701        const struct of_device_id *of_id =
 702                of_match_device(of_match_ptr(max6650_dt_match), dev);
 703        struct max6650_data *data;
 704        struct device *hwmon_dev;
 705        int err;
 706
 707        data = devm_kzalloc(dev, sizeof(struct max6650_data), GFP_KERNEL);
 708        if (!data)
 709                return -ENOMEM;
 710
 711        data->client = client;
 712        mutex_init(&data->update_lock);
 713        data->nr_fans = of_id ? (int)(uintptr_t)of_id->data : id->driver_data;
 714
 715        /*
 716         * Initialize the max6650 chip
 717         */
 718        err = max6650_init_client(data, client);
 719        if (err)
 720                return err;
 721
 722        data->groups[0] = &max6650_group;
 723        /* 3 additional fan inputs for the MAX6651 */
 724        if (data->nr_fans == 4)
 725                data->groups[1] = &max6651_group;
 726
 727        hwmon_dev = devm_hwmon_device_register_with_groups(dev,
 728                                                           client->name, data,
 729                                                           data->groups);
 730        return PTR_ERR_OR_ZERO(hwmon_dev);
 731}
 732
 733static const struct i2c_device_id max6650_id[] = {
 734        { "max6650", 1 },
 735        { "max6651", 4 },
 736        { }
 737};
 738MODULE_DEVICE_TABLE(i2c, max6650_id);
 739
 740static struct i2c_driver max6650_driver = {
 741        .driver = {
 742                .name   = "max6650",
 743                .of_match_table = of_match_ptr(max6650_dt_match),
 744        },
 745        .probe          = max6650_probe,
 746        .id_table       = max6650_id,
 747};
 748
 749module_i2c_driver(max6650_driver);
 750
 751MODULE_AUTHOR("Hans J. Koch");
 752MODULE_DESCRIPTION("MAX6650 sensor driver");
 753MODULE_LICENSE("GPL");
 754