linux/drivers/hwmon/max16065.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Driver for
   4 *  Maxim MAX16065/MAX16066 12-Channel/8-Channel, Flash-Configurable
   5 *  System Managers with Nonvolatile Fault Registers
   6 *  Maxim MAX16067/MAX16068 6-Channel, Flash-Configurable System Managers
   7 *  with Nonvolatile Fault Registers
   8 *  Maxim MAX16070/MAX16071 12-Channel/8-Channel, Flash-Configurable System
   9 *  Monitors with Nonvolatile Fault Registers
  10 *
  11 * Copyright (C) 2011 Ericsson AB.
  12 */
  13
  14#include <linux/kernel.h>
  15#include <linux/module.h>
  16#include <linux/init.h>
  17#include <linux/err.h>
  18#include <linux/slab.h>
  19#include <linux/i2c.h>
  20#include <linux/hwmon.h>
  21#include <linux/hwmon-sysfs.h>
  22#include <linux/jiffies.h>
  23
  24enum chips { max16065, max16066, max16067, max16068, max16070, max16071 };
  25
  26/*
  27 * Registers
  28 */
  29#define MAX16065_ADC(x)         ((x) * 2)
  30
  31#define MAX16065_CURR_SENSE     0x18
  32#define MAX16065_CSP_ADC        0x19
  33#define MAX16065_FAULT(x)       (0x1b + (x))
  34#define MAX16065_SCALE(x)       (0x43 + (x))
  35#define MAX16065_CURR_CONTROL   0x47
  36#define MAX16065_LIMIT(l, x)    (0x48 + (l) + (x) * 3)  /*
  37                                                         * l: limit
  38                                                         *  0: min/max
  39                                                         *  1: crit
  40                                                         *  2: lcrit
  41                                                         * x: ADC index
  42                                                         */
  43
  44#define MAX16065_SW_ENABLE      0x73
  45
  46#define MAX16065_WARNING_OV     (1 << 3) /* Set if secondary threshold is OV
  47                                            warning */
  48
  49#define MAX16065_CURR_ENABLE    (1 << 0)
  50
  51#define MAX16065_NUM_LIMIT      3
  52#define MAX16065_NUM_ADC        12      /* maximum number of ADC channels */
  53
  54static const int max16065_num_adc[] = {
  55        [max16065] = 12,
  56        [max16066] = 8,
  57        [max16067] = 6,
  58        [max16068] = 6,
  59        [max16070] = 12,
  60        [max16071] = 8,
  61};
  62
  63static const bool max16065_have_secondary[] = {
  64        [max16065] = true,
  65        [max16066] = true,
  66        [max16067] = false,
  67        [max16068] = false,
  68        [max16070] = true,
  69        [max16071] = true,
  70};
  71
  72static const bool max16065_have_current[] = {
  73        [max16065] = true,
  74        [max16066] = true,
  75        [max16067] = false,
  76        [max16068] = false,
  77        [max16070] = true,
  78        [max16071] = true,
  79};
  80
  81struct max16065_data {
  82        enum chips type;
  83        struct i2c_client *client;
  84        const struct attribute_group *groups[4];
  85        struct mutex update_lock;
  86        bool valid;
  87        unsigned long last_updated; /* in jiffies */
  88        int num_adc;
  89        bool have_current;
  90        int curr_gain;
  91        /* limits are in mV */
  92        int limit[MAX16065_NUM_LIMIT][MAX16065_NUM_ADC];
  93        int range[MAX16065_NUM_ADC + 1];/* voltage range */
  94        int adc[MAX16065_NUM_ADC + 1];  /* adc values (raw) including csp_adc */
  95        int curr_sense;
  96        int fault[2];
  97};
  98
  99static const int max16065_adc_range[] = { 5560, 2780, 1390, 0 };
 100static const int max16065_csp_adc_range[] = { 7000, 14000 };
 101
 102/* ADC registers have 10 bit resolution. */
 103static inline int ADC_TO_MV(int adc, int range)
 104{
 105        return (adc * range) / 1024;
 106}
 107
 108/*
 109 * Limit registers have 8 bit resolution and match upper 8 bits of ADC
 110 * registers.
 111 */
 112static inline int LIMIT_TO_MV(int limit, int range)
 113{
 114        return limit * range / 256;
 115}
 116
 117static inline int MV_TO_LIMIT(int mv, int range)
 118{
 119        return clamp_val(DIV_ROUND_CLOSEST(mv * 256, range), 0, 255);
 120}
 121
 122static inline int ADC_TO_CURR(int adc, int gain)
 123{
 124        return adc * 1400000 / (gain * 255);
 125}
 126
 127/*
 128 * max16065_read_adc()
 129 *
 130 * Read 16 bit value from <reg>, <reg+1>.
 131 * Upper 8 bits are in <reg>, lower 2 bits are in bits 7:6 of <reg+1>.
 132 */
 133static int max16065_read_adc(struct i2c_client *client, int reg)
 134{
 135        int rv;
 136
 137        rv = i2c_smbus_read_word_swapped(client, reg);
 138        if (unlikely(rv < 0))
 139                return rv;
 140        return rv >> 6;
 141}
 142
 143static struct max16065_data *max16065_update_device(struct device *dev)
 144{
 145        struct max16065_data *data = dev_get_drvdata(dev);
 146        struct i2c_client *client = data->client;
 147
 148        mutex_lock(&data->update_lock);
 149        if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
 150                int i;
 151
 152                for (i = 0; i < data->num_adc; i++)
 153                        data->adc[i]
 154                          = max16065_read_adc(client, MAX16065_ADC(i));
 155
 156                if (data->have_current) {
 157                        data->adc[MAX16065_NUM_ADC]
 158                          = max16065_read_adc(client, MAX16065_CSP_ADC);
 159                        data->curr_sense
 160                          = i2c_smbus_read_byte_data(client,
 161                                                     MAX16065_CURR_SENSE);
 162                }
 163
 164                for (i = 0; i < DIV_ROUND_UP(data->num_adc, 8); i++)
 165                        data->fault[i]
 166                          = i2c_smbus_read_byte_data(client, MAX16065_FAULT(i));
 167
 168                data->last_updated = jiffies;
 169                data->valid = 1;
 170        }
 171        mutex_unlock(&data->update_lock);
 172        return data;
 173}
 174
 175static ssize_t max16065_alarm_show(struct device *dev,
 176                                   struct device_attribute *da, char *buf)
 177{
 178        struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(da);
 179        struct max16065_data *data = max16065_update_device(dev);
 180        int val = data->fault[attr2->nr];
 181
 182        if (val < 0)
 183                return val;
 184
 185        val &= (1 << attr2->index);
 186        if (val)
 187                i2c_smbus_write_byte_data(data->client,
 188                                          MAX16065_FAULT(attr2->nr), val);
 189
 190        return snprintf(buf, PAGE_SIZE, "%d\n", !!val);
 191}
 192
 193static ssize_t max16065_input_show(struct device *dev,
 194                                   struct device_attribute *da, char *buf)
 195{
 196        struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
 197        struct max16065_data *data = max16065_update_device(dev);
 198        int adc = data->adc[attr->index];
 199
 200        if (unlikely(adc < 0))
 201                return adc;
 202
 203        return snprintf(buf, PAGE_SIZE, "%d\n",
 204                        ADC_TO_MV(adc, data->range[attr->index]));
 205}
 206
 207static ssize_t max16065_current_show(struct device *dev,
 208                                     struct device_attribute *da, char *buf)
 209{
 210        struct max16065_data *data = max16065_update_device(dev);
 211
 212        if (unlikely(data->curr_sense < 0))
 213                return data->curr_sense;
 214
 215        return snprintf(buf, PAGE_SIZE, "%d\n",
 216                        ADC_TO_CURR(data->curr_sense, data->curr_gain));
 217}
 218
 219static ssize_t max16065_limit_store(struct device *dev,
 220                                    struct device_attribute *da,
 221                                    const char *buf, size_t count)
 222{
 223        struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(da);
 224        struct max16065_data *data = dev_get_drvdata(dev);
 225        unsigned long val;
 226        int err;
 227        int limit;
 228
 229        err = kstrtoul(buf, 10, &val);
 230        if (unlikely(err < 0))
 231                return err;
 232
 233        limit = MV_TO_LIMIT(val, data->range[attr2->index]);
 234
 235        mutex_lock(&data->update_lock);
 236        data->limit[attr2->nr][attr2->index]
 237          = LIMIT_TO_MV(limit, data->range[attr2->index]);
 238        i2c_smbus_write_byte_data(data->client,
 239                                  MAX16065_LIMIT(attr2->nr, attr2->index),
 240                                  limit);
 241        mutex_unlock(&data->update_lock);
 242
 243        return count;
 244}
 245
 246static ssize_t max16065_limit_show(struct device *dev,
 247                                   struct device_attribute *da, char *buf)
 248{
 249        struct sensor_device_attribute_2 *attr2 = to_sensor_dev_attr_2(da);
 250        struct max16065_data *data = dev_get_drvdata(dev);
 251
 252        return snprintf(buf, PAGE_SIZE, "%d\n",
 253                        data->limit[attr2->nr][attr2->index]);
 254}
 255
 256/* Construct a sensor_device_attribute structure for each register */
 257
 258/* Input voltages */
 259static SENSOR_DEVICE_ATTR_RO(in0_input, max16065_input, 0);
 260static SENSOR_DEVICE_ATTR_RO(in1_input, max16065_input, 1);
 261static SENSOR_DEVICE_ATTR_RO(in2_input, max16065_input, 2);
 262static SENSOR_DEVICE_ATTR_RO(in3_input, max16065_input, 3);
 263static SENSOR_DEVICE_ATTR_RO(in4_input, max16065_input, 4);
 264static SENSOR_DEVICE_ATTR_RO(in5_input, max16065_input, 5);
 265static SENSOR_DEVICE_ATTR_RO(in6_input, max16065_input, 6);
 266static SENSOR_DEVICE_ATTR_RO(in7_input, max16065_input, 7);
 267static SENSOR_DEVICE_ATTR_RO(in8_input, max16065_input, 8);
 268static SENSOR_DEVICE_ATTR_RO(in9_input, max16065_input, 9);
 269static SENSOR_DEVICE_ATTR_RO(in10_input, max16065_input, 10);
 270static SENSOR_DEVICE_ATTR_RO(in11_input, max16065_input, 11);
 271static SENSOR_DEVICE_ATTR_RO(in12_input, max16065_input, 12);
 272
 273/* Input voltages lcrit */
 274static SENSOR_DEVICE_ATTR_2_RW(in0_lcrit, max16065_limit, 2, 0);
 275static SENSOR_DEVICE_ATTR_2_RW(in1_lcrit, max16065_limit, 2, 1);
 276static SENSOR_DEVICE_ATTR_2_RW(in2_lcrit, max16065_limit, 2, 2);
 277static SENSOR_DEVICE_ATTR_2_RW(in3_lcrit, max16065_limit, 2, 3);
 278static SENSOR_DEVICE_ATTR_2_RW(in4_lcrit, max16065_limit, 2, 4);
 279static SENSOR_DEVICE_ATTR_2_RW(in5_lcrit, max16065_limit, 2, 5);
 280static SENSOR_DEVICE_ATTR_2_RW(in6_lcrit, max16065_limit, 2, 6);
 281static SENSOR_DEVICE_ATTR_2_RW(in7_lcrit, max16065_limit, 2, 7);
 282static SENSOR_DEVICE_ATTR_2_RW(in8_lcrit, max16065_limit, 2, 8);
 283static SENSOR_DEVICE_ATTR_2_RW(in9_lcrit, max16065_limit, 2, 9);
 284static SENSOR_DEVICE_ATTR_2_RW(in10_lcrit, max16065_limit, 2, 10);
 285static SENSOR_DEVICE_ATTR_2_RW(in11_lcrit, max16065_limit, 2, 11);
 286
 287/* Input voltages crit */
 288static SENSOR_DEVICE_ATTR_2_RW(in0_crit, max16065_limit, 1, 0);
 289static SENSOR_DEVICE_ATTR_2_RW(in1_crit, max16065_limit, 1, 1);
 290static SENSOR_DEVICE_ATTR_2_RW(in2_crit, max16065_limit, 1, 2);
 291static SENSOR_DEVICE_ATTR_2_RW(in3_crit, max16065_limit, 1, 3);
 292static SENSOR_DEVICE_ATTR_2_RW(in4_crit, max16065_limit, 1, 4);
 293static SENSOR_DEVICE_ATTR_2_RW(in5_crit, max16065_limit, 1, 5);
 294static SENSOR_DEVICE_ATTR_2_RW(in6_crit, max16065_limit, 1, 6);
 295static SENSOR_DEVICE_ATTR_2_RW(in7_crit, max16065_limit, 1, 7);
 296static SENSOR_DEVICE_ATTR_2_RW(in8_crit, max16065_limit, 1, 8);
 297static SENSOR_DEVICE_ATTR_2_RW(in9_crit, max16065_limit, 1, 9);
 298static SENSOR_DEVICE_ATTR_2_RW(in10_crit, max16065_limit, 1, 10);
 299static SENSOR_DEVICE_ATTR_2_RW(in11_crit, max16065_limit, 1, 11);
 300
 301/* Input voltages min */
 302static SENSOR_DEVICE_ATTR_2_RW(in0_min, max16065_limit, 0, 0);
 303static SENSOR_DEVICE_ATTR_2_RW(in1_min, max16065_limit, 0, 1);
 304static SENSOR_DEVICE_ATTR_2_RW(in2_min, max16065_limit, 0, 2);
 305static SENSOR_DEVICE_ATTR_2_RW(in3_min, max16065_limit, 0, 3);
 306static SENSOR_DEVICE_ATTR_2_RW(in4_min, max16065_limit, 0, 4);
 307static SENSOR_DEVICE_ATTR_2_RW(in5_min, max16065_limit, 0, 5);
 308static SENSOR_DEVICE_ATTR_2_RW(in6_min, max16065_limit, 0, 6);
 309static SENSOR_DEVICE_ATTR_2_RW(in7_min, max16065_limit, 0, 7);
 310static SENSOR_DEVICE_ATTR_2_RW(in8_min, max16065_limit, 0, 8);
 311static SENSOR_DEVICE_ATTR_2_RW(in9_min, max16065_limit, 0, 9);
 312static SENSOR_DEVICE_ATTR_2_RW(in10_min, max16065_limit, 0, 10);
 313static SENSOR_DEVICE_ATTR_2_RW(in11_min, max16065_limit, 0, 11);
 314
 315/* Input voltages max */
 316static SENSOR_DEVICE_ATTR_2_RW(in0_max, max16065_limit, 0, 0);
 317static SENSOR_DEVICE_ATTR_2_RW(in1_max, max16065_limit, 0, 1);
 318static SENSOR_DEVICE_ATTR_2_RW(in2_max, max16065_limit, 0, 2);
 319static SENSOR_DEVICE_ATTR_2_RW(in3_max, max16065_limit, 0, 3);
 320static SENSOR_DEVICE_ATTR_2_RW(in4_max, max16065_limit, 0, 4);
 321static SENSOR_DEVICE_ATTR_2_RW(in5_max, max16065_limit, 0, 5);
 322static SENSOR_DEVICE_ATTR_2_RW(in6_max, max16065_limit, 0, 6);
 323static SENSOR_DEVICE_ATTR_2_RW(in7_max, max16065_limit, 0, 7);
 324static SENSOR_DEVICE_ATTR_2_RW(in8_max, max16065_limit, 0, 8);
 325static SENSOR_DEVICE_ATTR_2_RW(in9_max, max16065_limit, 0, 9);
 326static SENSOR_DEVICE_ATTR_2_RW(in10_max, max16065_limit, 0, 10);
 327static SENSOR_DEVICE_ATTR_2_RW(in11_max, max16065_limit, 0, 11);
 328
 329/* alarms */
 330static SENSOR_DEVICE_ATTR_2_RO(in0_alarm, max16065_alarm, 0, 0);
 331static SENSOR_DEVICE_ATTR_2_RO(in1_alarm, max16065_alarm, 0, 1);
 332static SENSOR_DEVICE_ATTR_2_RO(in2_alarm, max16065_alarm, 0, 2);
 333static SENSOR_DEVICE_ATTR_2_RO(in3_alarm, max16065_alarm, 0, 3);
 334static SENSOR_DEVICE_ATTR_2_RO(in4_alarm, max16065_alarm, 0, 4);
 335static SENSOR_DEVICE_ATTR_2_RO(in5_alarm, max16065_alarm, 0, 5);
 336static SENSOR_DEVICE_ATTR_2_RO(in6_alarm, max16065_alarm, 0, 6);
 337static SENSOR_DEVICE_ATTR_2_RO(in7_alarm, max16065_alarm, 0, 7);
 338static SENSOR_DEVICE_ATTR_2_RO(in8_alarm, max16065_alarm, 1, 0);
 339static SENSOR_DEVICE_ATTR_2_RO(in9_alarm, max16065_alarm, 1, 1);
 340static SENSOR_DEVICE_ATTR_2_RO(in10_alarm, max16065_alarm, 1, 2);
 341static SENSOR_DEVICE_ATTR_2_RO(in11_alarm, max16065_alarm, 1, 3);
 342
 343/* Current and alarm */
 344static SENSOR_DEVICE_ATTR_RO(curr1_input, max16065_current, 0);
 345static SENSOR_DEVICE_ATTR_2_RO(curr1_alarm, max16065_alarm, 1, 4);
 346
 347/*
 348 * Finally, construct an array of pointers to members of the above objects,
 349 * as required for sysfs_create_group()
 350 */
 351static struct attribute *max16065_basic_attributes[] = {
 352        &sensor_dev_attr_in0_input.dev_attr.attr,
 353        &sensor_dev_attr_in0_lcrit.dev_attr.attr,
 354        &sensor_dev_attr_in0_crit.dev_attr.attr,
 355        &sensor_dev_attr_in0_alarm.dev_attr.attr,
 356
 357        &sensor_dev_attr_in1_input.dev_attr.attr,
 358        &sensor_dev_attr_in1_lcrit.dev_attr.attr,
 359        &sensor_dev_attr_in1_crit.dev_attr.attr,
 360        &sensor_dev_attr_in1_alarm.dev_attr.attr,
 361
 362        &sensor_dev_attr_in2_input.dev_attr.attr,
 363        &sensor_dev_attr_in2_lcrit.dev_attr.attr,
 364        &sensor_dev_attr_in2_crit.dev_attr.attr,
 365        &sensor_dev_attr_in2_alarm.dev_attr.attr,
 366
 367        &sensor_dev_attr_in3_input.dev_attr.attr,
 368        &sensor_dev_attr_in3_lcrit.dev_attr.attr,
 369        &sensor_dev_attr_in3_crit.dev_attr.attr,
 370        &sensor_dev_attr_in3_alarm.dev_attr.attr,
 371
 372        &sensor_dev_attr_in4_input.dev_attr.attr,
 373        &sensor_dev_attr_in4_lcrit.dev_attr.attr,
 374        &sensor_dev_attr_in4_crit.dev_attr.attr,
 375        &sensor_dev_attr_in4_alarm.dev_attr.attr,
 376
 377        &sensor_dev_attr_in5_input.dev_attr.attr,
 378        &sensor_dev_attr_in5_lcrit.dev_attr.attr,
 379        &sensor_dev_attr_in5_crit.dev_attr.attr,
 380        &sensor_dev_attr_in5_alarm.dev_attr.attr,
 381
 382        &sensor_dev_attr_in6_input.dev_attr.attr,
 383        &sensor_dev_attr_in6_lcrit.dev_attr.attr,
 384        &sensor_dev_attr_in6_crit.dev_attr.attr,
 385        &sensor_dev_attr_in6_alarm.dev_attr.attr,
 386
 387        &sensor_dev_attr_in7_input.dev_attr.attr,
 388        &sensor_dev_attr_in7_lcrit.dev_attr.attr,
 389        &sensor_dev_attr_in7_crit.dev_attr.attr,
 390        &sensor_dev_attr_in7_alarm.dev_attr.attr,
 391
 392        &sensor_dev_attr_in8_input.dev_attr.attr,
 393        &sensor_dev_attr_in8_lcrit.dev_attr.attr,
 394        &sensor_dev_attr_in8_crit.dev_attr.attr,
 395        &sensor_dev_attr_in8_alarm.dev_attr.attr,
 396
 397        &sensor_dev_attr_in9_input.dev_attr.attr,
 398        &sensor_dev_attr_in9_lcrit.dev_attr.attr,
 399        &sensor_dev_attr_in9_crit.dev_attr.attr,
 400        &sensor_dev_attr_in9_alarm.dev_attr.attr,
 401
 402        &sensor_dev_attr_in10_input.dev_attr.attr,
 403        &sensor_dev_attr_in10_lcrit.dev_attr.attr,
 404        &sensor_dev_attr_in10_crit.dev_attr.attr,
 405        &sensor_dev_attr_in10_alarm.dev_attr.attr,
 406
 407        &sensor_dev_attr_in11_input.dev_attr.attr,
 408        &sensor_dev_attr_in11_lcrit.dev_attr.attr,
 409        &sensor_dev_attr_in11_crit.dev_attr.attr,
 410        &sensor_dev_attr_in11_alarm.dev_attr.attr,
 411
 412        NULL
 413};
 414
 415static struct attribute *max16065_current_attributes[] = {
 416        &sensor_dev_attr_in12_input.dev_attr.attr,
 417        &sensor_dev_attr_curr1_input.dev_attr.attr,
 418        &sensor_dev_attr_curr1_alarm.dev_attr.attr,
 419        NULL
 420};
 421
 422static struct attribute *max16065_min_attributes[] = {
 423        &sensor_dev_attr_in0_min.dev_attr.attr,
 424        &sensor_dev_attr_in1_min.dev_attr.attr,
 425        &sensor_dev_attr_in2_min.dev_attr.attr,
 426        &sensor_dev_attr_in3_min.dev_attr.attr,
 427        &sensor_dev_attr_in4_min.dev_attr.attr,
 428        &sensor_dev_attr_in5_min.dev_attr.attr,
 429        &sensor_dev_attr_in6_min.dev_attr.attr,
 430        &sensor_dev_attr_in7_min.dev_attr.attr,
 431        &sensor_dev_attr_in8_min.dev_attr.attr,
 432        &sensor_dev_attr_in9_min.dev_attr.attr,
 433        &sensor_dev_attr_in10_min.dev_attr.attr,
 434        &sensor_dev_attr_in11_min.dev_attr.attr,
 435        NULL
 436};
 437
 438static struct attribute *max16065_max_attributes[] = {
 439        &sensor_dev_attr_in0_max.dev_attr.attr,
 440        &sensor_dev_attr_in1_max.dev_attr.attr,
 441        &sensor_dev_attr_in2_max.dev_attr.attr,
 442        &sensor_dev_attr_in3_max.dev_attr.attr,
 443        &sensor_dev_attr_in4_max.dev_attr.attr,
 444        &sensor_dev_attr_in5_max.dev_attr.attr,
 445        &sensor_dev_attr_in6_max.dev_attr.attr,
 446        &sensor_dev_attr_in7_max.dev_attr.attr,
 447        &sensor_dev_attr_in8_max.dev_attr.attr,
 448        &sensor_dev_attr_in9_max.dev_attr.attr,
 449        &sensor_dev_attr_in10_max.dev_attr.attr,
 450        &sensor_dev_attr_in11_max.dev_attr.attr,
 451        NULL
 452};
 453
 454static umode_t max16065_basic_is_visible(struct kobject *kobj,
 455                                         struct attribute *a, int n)
 456{
 457        struct device *dev = container_of(kobj, struct device, kobj);
 458        struct max16065_data *data = dev_get_drvdata(dev);
 459        int index = n / 4;
 460
 461        if (index >= data->num_adc || !data->range[index])
 462                return 0;
 463        return a->mode;
 464}
 465
 466static umode_t max16065_secondary_is_visible(struct kobject *kobj,
 467                                             struct attribute *a, int index)
 468{
 469        struct device *dev = container_of(kobj, struct device, kobj);
 470        struct max16065_data *data = dev_get_drvdata(dev);
 471
 472        if (index >= data->num_adc)
 473                return 0;
 474        return a->mode;
 475}
 476
 477static const struct attribute_group max16065_basic_group = {
 478        .attrs = max16065_basic_attributes,
 479        .is_visible = max16065_basic_is_visible,
 480};
 481
 482static const struct attribute_group max16065_current_group = {
 483        .attrs = max16065_current_attributes,
 484};
 485
 486static const struct attribute_group max16065_min_group = {
 487        .attrs = max16065_min_attributes,
 488        .is_visible = max16065_secondary_is_visible,
 489};
 490
 491static const struct attribute_group max16065_max_group = {
 492        .attrs = max16065_max_attributes,
 493        .is_visible = max16065_secondary_is_visible,
 494};
 495
 496static int max16065_probe(struct i2c_client *client,
 497                          const struct i2c_device_id *id)
 498{
 499        struct i2c_adapter *adapter = client->adapter;
 500        struct max16065_data *data;
 501        struct device *dev = &client->dev;
 502        struct device *hwmon_dev;
 503        int i, j, val;
 504        bool have_secondary;            /* true if chip has secondary limits */
 505        bool secondary_is_max = false;  /* secondary limits reflect max */
 506        int groups = 0;
 507
 508        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA
 509                                     | I2C_FUNC_SMBUS_READ_WORD_DATA))
 510                return -ENODEV;
 511
 512        data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
 513        if (unlikely(!data))
 514                return -ENOMEM;
 515
 516        data->client = client;
 517        mutex_init(&data->update_lock);
 518
 519        data->num_adc = max16065_num_adc[id->driver_data];
 520        data->have_current = max16065_have_current[id->driver_data];
 521        have_secondary = max16065_have_secondary[id->driver_data];
 522
 523        if (have_secondary) {
 524                val = i2c_smbus_read_byte_data(client, MAX16065_SW_ENABLE);
 525                if (unlikely(val < 0))
 526                        return val;
 527                secondary_is_max = val & MAX16065_WARNING_OV;
 528        }
 529
 530        /* Read scale registers, convert to range */
 531        for (i = 0; i < DIV_ROUND_UP(data->num_adc, 4); i++) {
 532                val = i2c_smbus_read_byte_data(client, MAX16065_SCALE(i));
 533                if (unlikely(val < 0))
 534                        return val;
 535                for (j = 0; j < 4 && i * 4 + j < data->num_adc; j++) {
 536                        data->range[i * 4 + j] =
 537                          max16065_adc_range[(val >> (j * 2)) & 0x3];
 538                }
 539        }
 540
 541        /* Read limits */
 542        for (i = 0; i < MAX16065_NUM_LIMIT; i++) {
 543                if (i == 0 && !have_secondary)
 544                        continue;
 545
 546                for (j = 0; j < data->num_adc; j++) {
 547                        val = i2c_smbus_read_byte_data(client,
 548                                                       MAX16065_LIMIT(i, j));
 549                        if (unlikely(val < 0))
 550                                return val;
 551                        data->limit[i][j] = LIMIT_TO_MV(val, data->range[j]);
 552                }
 553        }
 554
 555        /* sysfs hooks */
 556        data->groups[groups++] = &max16065_basic_group;
 557        if (have_secondary)
 558                data->groups[groups++] = secondary_is_max ?
 559                        &max16065_max_group : &max16065_min_group;
 560
 561        if (data->have_current) {
 562                val = i2c_smbus_read_byte_data(client, MAX16065_CURR_CONTROL);
 563                if (unlikely(val < 0))
 564                        return val;
 565                if (val & MAX16065_CURR_ENABLE) {
 566                        /*
 567                         * Current gain is 6, 12, 24, 48 based on values in
 568                         * bit 2,3.
 569                         */
 570                        data->curr_gain = 6 << ((val >> 2) & 0x03);
 571                        data->range[MAX16065_NUM_ADC]
 572                          = max16065_csp_adc_range[(val >> 1) & 0x01];
 573                        data->groups[groups++] = &max16065_current_group;
 574                } else {
 575                        data->have_current = false;
 576                }
 577        }
 578
 579        hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
 580                                                           data, data->groups);
 581        return PTR_ERR_OR_ZERO(hwmon_dev);
 582}
 583
 584static const struct i2c_device_id max16065_id[] = {
 585        { "max16065", max16065 },
 586        { "max16066", max16066 },
 587        { "max16067", max16067 },
 588        { "max16068", max16068 },
 589        { "max16070", max16070 },
 590        { "max16071", max16071 },
 591        { }
 592};
 593
 594MODULE_DEVICE_TABLE(i2c, max16065_id);
 595
 596/* This is the driver that will be inserted */
 597static struct i2c_driver max16065_driver = {
 598        .driver = {
 599                .name = "max16065",
 600        },
 601        .probe = max16065_probe,
 602        .id_table = max16065_id,
 603};
 604
 605module_i2c_driver(max16065_driver);
 606
 607MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");
 608MODULE_DESCRIPTION("MAX16065 driver");
 609MODULE_LICENSE("GPL");
 610