root/drivers/hwmon/max16065.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ADC_TO_MV
  2. LIMIT_TO_MV
  3. MV_TO_LIMIT
  4. ADC_TO_CURR
  5. max16065_read_adc
  6. max16065_update_device
  7. max16065_alarm_show
  8. max16065_input_show
  9. max16065_current_show
  10. max16065_limit_store
  11. max16065_limit_show
  12. max16065_basic_is_visible
  13. max16065_secondary_is_visible
  14. max16065_probe

   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 
  24 enum 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 
  54 static 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 
  63 static 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 
  72 static 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 
  81 struct 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 
  99 static const int max16065_adc_range[] = { 5560, 2780, 1390, 0 };
 100 static const int max16065_csp_adc_range[] = { 7000, 14000 };
 101 
 102 /* ADC registers have 10 bit resolution. */
 103 static 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  */
 112 static inline int LIMIT_TO_MV(int limit, int range)
 113 {
 114         return limit * range / 256;
 115 }
 116 
 117 static inline int MV_TO_LIMIT(int mv, int range)
 118 {
 119         return clamp_val(DIV_ROUND_CLOSEST(mv * 256, range), 0, 255);
 120 }
 121 
 122 static 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  */
 133 static 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 
 143 static 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 
 175 static 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 
 193 static 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 
 207 static 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 
 219 static 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 
 246 static 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 */
 259 static SENSOR_DEVICE_ATTR_RO(in0_input, max16065_input, 0);
 260 static SENSOR_DEVICE_ATTR_RO(in1_input, max16065_input, 1);
 261 static SENSOR_DEVICE_ATTR_RO(in2_input, max16065_input, 2);
 262 static SENSOR_DEVICE_ATTR_RO(in3_input, max16065_input, 3);
 263 static SENSOR_DEVICE_ATTR_RO(in4_input, max16065_input, 4);
 264 static SENSOR_DEVICE_ATTR_RO(in5_input, max16065_input, 5);
 265 static SENSOR_DEVICE_ATTR_RO(in6_input, max16065_input, 6);
 266 static SENSOR_DEVICE_ATTR_RO(in7_input, max16065_input, 7);
 267 static SENSOR_DEVICE_ATTR_RO(in8_input, max16065_input, 8);
 268 static SENSOR_DEVICE_ATTR_RO(in9_input, max16065_input, 9);
 269 static SENSOR_DEVICE_ATTR_RO(in10_input, max16065_input, 10);
 270 static SENSOR_DEVICE_ATTR_RO(in11_input, max16065_input, 11);
 271 static SENSOR_DEVICE_ATTR_RO(in12_input, max16065_input, 12);
 272 
 273 /* Input voltages lcrit */
 274 static SENSOR_DEVICE_ATTR_2_RW(in0_lcrit, max16065_limit, 2, 0);
 275 static SENSOR_DEVICE_ATTR_2_RW(in1_lcrit, max16065_limit, 2, 1);
 276 static SENSOR_DEVICE_ATTR_2_RW(in2_lcrit, max16065_limit, 2, 2);
 277 static SENSOR_DEVICE_ATTR_2_RW(in3_lcrit, max16065_limit, 2, 3);
 278 static SENSOR_DEVICE_ATTR_2_RW(in4_lcrit, max16065_limit, 2, 4);
 279 static SENSOR_DEVICE_ATTR_2_RW(in5_lcrit, max16065_limit, 2, 5);
 280 static SENSOR_DEVICE_ATTR_2_RW(in6_lcrit, max16065_limit, 2, 6);
 281 static SENSOR_DEVICE_ATTR_2_RW(in7_lcrit, max16065_limit, 2, 7);
 282 static SENSOR_DEVICE_ATTR_2_RW(in8_lcrit, max16065_limit, 2, 8);
 283 static SENSOR_DEVICE_ATTR_2_RW(in9_lcrit, max16065_limit, 2, 9);
 284 static SENSOR_DEVICE_ATTR_2_RW(in10_lcrit, max16065_limit, 2, 10);
 285 static SENSOR_DEVICE_ATTR_2_RW(in11_lcrit, max16065_limit, 2, 11);
 286 
 287 /* Input voltages crit */
 288 static SENSOR_DEVICE_ATTR_2_RW(in0_crit, max16065_limit, 1, 0);
 289 static SENSOR_DEVICE_ATTR_2_RW(in1_crit, max16065_limit, 1, 1);
 290 static SENSOR_DEVICE_ATTR_2_RW(in2_crit, max16065_limit, 1, 2);
 291 static SENSOR_DEVICE_ATTR_2_RW(in3_crit, max16065_limit, 1, 3);
 292 static SENSOR_DEVICE_ATTR_2_RW(in4_crit, max16065_limit, 1, 4);
 293 static SENSOR_DEVICE_ATTR_2_RW(in5_crit, max16065_limit, 1, 5);
 294 static SENSOR_DEVICE_ATTR_2_RW(in6_crit, max16065_limit, 1, 6);
 295 static SENSOR_DEVICE_ATTR_2_RW(in7_crit, max16065_limit, 1, 7);
 296 static SENSOR_DEVICE_ATTR_2_RW(in8_crit, max16065_limit, 1, 8);
 297 static SENSOR_DEVICE_ATTR_2_RW(in9_crit, max16065_limit, 1, 9);
 298 static SENSOR_DEVICE_ATTR_2_RW(in10_crit, max16065_limit, 1, 10);
 299 static SENSOR_DEVICE_ATTR_2_RW(in11_crit, max16065_limit, 1, 11);
 300 
 301 /* Input voltages min */
 302 static SENSOR_DEVICE_ATTR_2_RW(in0_min, max16065_limit, 0, 0);
 303 static SENSOR_DEVICE_ATTR_2_RW(in1_min, max16065_limit, 0, 1);
 304 static SENSOR_DEVICE_ATTR_2_RW(in2_min, max16065_limit, 0, 2);
 305 static SENSOR_DEVICE_ATTR_2_RW(in3_min, max16065_limit, 0, 3);
 306 static SENSOR_DEVICE_ATTR_2_RW(in4_min, max16065_limit, 0, 4);
 307 static SENSOR_DEVICE_ATTR_2_RW(in5_min, max16065_limit, 0, 5);
 308 static SENSOR_DEVICE_ATTR_2_RW(in6_min, max16065_limit, 0, 6);
 309 static SENSOR_DEVICE_ATTR_2_RW(in7_min, max16065_limit, 0, 7);
 310 static SENSOR_DEVICE_ATTR_2_RW(in8_min, max16065_limit, 0, 8);
 311 static SENSOR_DEVICE_ATTR_2_RW(in9_min, max16065_limit, 0, 9);
 312 static SENSOR_DEVICE_ATTR_2_RW(in10_min, max16065_limit, 0, 10);
 313 static SENSOR_DEVICE_ATTR_2_RW(in11_min, max16065_limit, 0, 11);
 314 
 315 /* Input voltages max */
 316 static SENSOR_DEVICE_ATTR_2_RW(in0_max, max16065_limit, 0, 0);
 317 static SENSOR_DEVICE_ATTR_2_RW(in1_max, max16065_limit, 0, 1);
 318 static SENSOR_DEVICE_ATTR_2_RW(in2_max, max16065_limit, 0, 2);
 319 static SENSOR_DEVICE_ATTR_2_RW(in3_max, max16065_limit, 0, 3);
 320 static SENSOR_DEVICE_ATTR_2_RW(in4_max, max16065_limit, 0, 4);
 321 static SENSOR_DEVICE_ATTR_2_RW(in5_max, max16065_limit, 0, 5);
 322 static SENSOR_DEVICE_ATTR_2_RW(in6_max, max16065_limit, 0, 6);
 323 static SENSOR_DEVICE_ATTR_2_RW(in7_max, max16065_limit, 0, 7);
 324 static SENSOR_DEVICE_ATTR_2_RW(in8_max, max16065_limit, 0, 8);
 325 static SENSOR_DEVICE_ATTR_2_RW(in9_max, max16065_limit, 0, 9);
 326 static SENSOR_DEVICE_ATTR_2_RW(in10_max, max16065_limit, 0, 10);
 327 static SENSOR_DEVICE_ATTR_2_RW(in11_max, max16065_limit, 0, 11);
 328 
 329 /* alarms */
 330 static SENSOR_DEVICE_ATTR_2_RO(in0_alarm, max16065_alarm, 0, 0);
 331 static SENSOR_DEVICE_ATTR_2_RO(in1_alarm, max16065_alarm, 0, 1);
 332 static SENSOR_DEVICE_ATTR_2_RO(in2_alarm, max16065_alarm, 0, 2);
 333 static SENSOR_DEVICE_ATTR_2_RO(in3_alarm, max16065_alarm, 0, 3);
 334 static SENSOR_DEVICE_ATTR_2_RO(in4_alarm, max16065_alarm, 0, 4);
 335 static SENSOR_DEVICE_ATTR_2_RO(in5_alarm, max16065_alarm, 0, 5);
 336 static SENSOR_DEVICE_ATTR_2_RO(in6_alarm, max16065_alarm, 0, 6);
 337 static SENSOR_DEVICE_ATTR_2_RO(in7_alarm, max16065_alarm, 0, 7);
 338 static SENSOR_DEVICE_ATTR_2_RO(in8_alarm, max16065_alarm, 1, 0);
 339 static SENSOR_DEVICE_ATTR_2_RO(in9_alarm, max16065_alarm, 1, 1);
 340 static SENSOR_DEVICE_ATTR_2_RO(in10_alarm, max16065_alarm, 1, 2);
 341 static SENSOR_DEVICE_ATTR_2_RO(in11_alarm, max16065_alarm, 1, 3);
 342 
 343 /* Current and alarm */
 344 static SENSOR_DEVICE_ATTR_RO(curr1_input, max16065_current, 0);
 345 static 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  */
 351 static 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 
 415 static 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 
 422 static 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 
 438 static 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 
 454 static 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 
 466 static 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 
 477 static const struct attribute_group max16065_basic_group = {
 478         .attrs = max16065_basic_attributes,
 479         .is_visible = max16065_basic_is_visible,
 480 };
 481 
 482 static const struct attribute_group max16065_current_group = {
 483         .attrs = max16065_current_attributes,
 484 };
 485 
 486 static const struct attribute_group max16065_min_group = {
 487         .attrs = max16065_min_attributes,
 488         .is_visible = max16065_secondary_is_visible,
 489 };
 490 
 491 static const struct attribute_group max16065_max_group = {
 492         .attrs = max16065_max_attributes,
 493         .is_visible = max16065_secondary_is_visible,
 494 };
 495 
 496 static 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 
 584 static 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 
 594 MODULE_DEVICE_TABLE(i2c, max16065_id);
 595 
 596 /* This is the driver that will be inserted */
 597 static struct i2c_driver max16065_driver = {
 598         .driver = {
 599                 .name = "max16065",
 600         },
 601         .probe = max16065_probe,
 602         .id_table = max16065_id,
 603 };
 604 
 605 module_i2c_driver(max16065_driver);
 606 
 607 MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");
 608 MODULE_DESCRIPTION("MAX16065 driver");
 609 MODULE_LICENSE("GPL");

/* [<][>][^][v][top][bottom][index][help] */