Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * atlas-sensor.c - Support for Atlas Scientific OEM SM sensors
0004  *
0005  * Copyright (C) 2015-2019 Konsulko Group
0006  * Author: Matt Ranostay <matt.ranostay@konsulko.com>
0007  */
0008 
0009 #include <linux/module.h>
0010 #include <linux/init.h>
0011 #include <linux/interrupt.h>
0012 #include <linux/delay.h>
0013 #include <linux/mutex.h>
0014 #include <linux/err.h>
0015 #include <linux/irq.h>
0016 #include <linux/irq_work.h>
0017 #include <linux/i2c.h>
0018 #include <linux/mod_devicetable.h>
0019 #include <linux/regmap.h>
0020 #include <linux/iio/iio.h>
0021 #include <linux/iio/buffer.h>
0022 #include <linux/iio/trigger.h>
0023 #include <linux/iio/trigger_consumer.h>
0024 #include <linux/iio/triggered_buffer.h>
0025 #include <linux/pm_runtime.h>
0026 
0027 #define ATLAS_REGMAP_NAME   "atlas_regmap"
0028 #define ATLAS_DRV_NAME      "atlas"
0029 
0030 #define ATLAS_REG_DEV_TYPE      0x00
0031 #define ATLAS_REG_DEV_VERSION       0x01
0032 
0033 #define ATLAS_REG_INT_CONTROL       0x04
0034 #define ATLAS_REG_INT_CONTROL_EN    BIT(3)
0035 
0036 #define ATLAS_REG_PWR_CONTROL       0x06
0037 
0038 #define ATLAS_REG_PH_CALIB_STATUS   0x0d
0039 #define ATLAS_REG_PH_CALIB_STATUS_MASK  0x07
0040 #define ATLAS_REG_PH_CALIB_STATUS_LOW   BIT(0)
0041 #define ATLAS_REG_PH_CALIB_STATUS_MID   BIT(1)
0042 #define ATLAS_REG_PH_CALIB_STATUS_HIGH  BIT(2)
0043 
0044 #define ATLAS_REG_EC_CALIB_STATUS       0x0f
0045 #define ATLAS_REG_EC_CALIB_STATUS_MASK      0x0f
0046 #define ATLAS_REG_EC_CALIB_STATUS_DRY       BIT(0)
0047 #define ATLAS_REG_EC_CALIB_STATUS_SINGLE    BIT(1)
0048 #define ATLAS_REG_EC_CALIB_STATUS_LOW       BIT(2)
0049 #define ATLAS_REG_EC_CALIB_STATUS_HIGH      BIT(3)
0050 
0051 #define ATLAS_REG_DO_CALIB_STATUS       0x09
0052 #define ATLAS_REG_DO_CALIB_STATUS_MASK      0x03
0053 #define ATLAS_REG_DO_CALIB_STATUS_PRESSURE  BIT(0)
0054 #define ATLAS_REG_DO_CALIB_STATUS_DO        BIT(1)
0055 
0056 #define ATLAS_REG_RTD_DATA      0x0e
0057 
0058 #define ATLAS_REG_PH_TEMP_DATA      0x0e
0059 #define ATLAS_REG_PH_DATA       0x16
0060 
0061 #define ATLAS_REG_EC_PROBE      0x08
0062 #define ATLAS_REG_EC_TEMP_DATA      0x10
0063 #define ATLAS_REG_EC_DATA       0x18
0064 #define ATLAS_REG_TDS_DATA      0x1c
0065 #define ATLAS_REG_PSS_DATA      0x20
0066 
0067 #define ATLAS_REG_ORP_CALIB_STATUS  0x0d
0068 #define ATLAS_REG_ORP_DATA      0x0e
0069 
0070 #define ATLAS_REG_DO_TEMP_DATA      0x12
0071 #define ATLAS_REG_DO_DATA       0x22
0072 
0073 #define ATLAS_PH_INT_TIME_IN_MS     450
0074 #define ATLAS_EC_INT_TIME_IN_MS     650
0075 #define ATLAS_ORP_INT_TIME_IN_MS    450
0076 #define ATLAS_DO_INT_TIME_IN_MS     450
0077 #define ATLAS_RTD_INT_TIME_IN_MS    450
0078 
0079 enum {
0080     ATLAS_PH_SM,
0081     ATLAS_EC_SM,
0082     ATLAS_ORP_SM,
0083     ATLAS_DO_SM,
0084     ATLAS_RTD_SM,
0085 };
0086 
0087 struct atlas_data {
0088     struct i2c_client *client;
0089     struct iio_trigger *trig;
0090     struct atlas_device *chip;
0091     struct regmap *regmap;
0092     struct irq_work work;
0093     unsigned int interrupt_enabled;
0094     /* 96-bit data + 32-bit pad + 64-bit timestamp */
0095     __be32 buffer[6] __aligned(8);
0096 };
0097 
0098 static const struct regmap_config atlas_regmap_config = {
0099     .name = ATLAS_REGMAP_NAME,
0100     .reg_bits = 8,
0101     .val_bits = 8,
0102 };
0103 
0104 static int atlas_buffer_num_channels(const struct iio_chan_spec *spec)
0105 {
0106     int idx = 0;
0107 
0108     for (; spec->type != IIO_TIMESTAMP; spec++)
0109         idx++;
0110 
0111     return idx;
0112 };
0113 
0114 static const struct iio_chan_spec atlas_ph_channels[] = {
0115     {
0116         .type = IIO_PH,
0117         .address = ATLAS_REG_PH_DATA,
0118         .info_mask_separate =
0119             BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
0120         .scan_index = 0,
0121         .scan_type = {
0122             .sign = 'u',
0123             .realbits = 32,
0124             .storagebits = 32,
0125             .endianness = IIO_BE,
0126         },
0127     },
0128     IIO_CHAN_SOFT_TIMESTAMP(1),
0129     {
0130         .type = IIO_TEMP,
0131         .address = ATLAS_REG_PH_TEMP_DATA,
0132         .info_mask_separate =
0133             BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
0134         .output = 1,
0135         .scan_index = -1
0136     },
0137 };
0138 
0139 #define ATLAS_CONCENTRATION_CHANNEL(_idx, _addr) \
0140     {\
0141         .type = IIO_CONCENTRATION, \
0142         .indexed = 1, \
0143         .channel = _idx, \
0144         .address = _addr, \
0145         .info_mask_separate = \
0146             BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE), \
0147         .scan_index = _idx + 1, \
0148         .scan_type = { \
0149             .sign = 'u', \
0150             .realbits = 32, \
0151             .storagebits = 32, \
0152             .endianness = IIO_BE, \
0153         }, \
0154     }
0155 
0156 static const struct iio_chan_spec atlas_ec_channels[] = {
0157     {
0158         .type = IIO_ELECTRICALCONDUCTIVITY,
0159         .address = ATLAS_REG_EC_DATA,
0160         .info_mask_separate =
0161             BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
0162         .scan_index = 0,
0163         .scan_type = {
0164             .sign = 'u',
0165             .realbits = 32,
0166             .storagebits = 32,
0167             .endianness = IIO_BE,
0168         },
0169     },
0170     ATLAS_CONCENTRATION_CHANNEL(0, ATLAS_REG_TDS_DATA),
0171     ATLAS_CONCENTRATION_CHANNEL(1, ATLAS_REG_PSS_DATA),
0172     IIO_CHAN_SOFT_TIMESTAMP(3),
0173     {
0174         .type = IIO_TEMP,
0175         .address = ATLAS_REG_EC_TEMP_DATA,
0176         .info_mask_separate =
0177             BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
0178         .output = 1,
0179         .scan_index = -1
0180     },
0181 };
0182 
0183 static const struct iio_chan_spec atlas_orp_channels[] = {
0184     {
0185         .type = IIO_VOLTAGE,
0186         .address = ATLAS_REG_ORP_DATA,
0187         .info_mask_separate =
0188             BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
0189         .scan_index = 0,
0190         .scan_type = {
0191             .sign = 's',
0192             .realbits = 32,
0193             .storagebits = 32,
0194             .endianness = IIO_BE,
0195         },
0196     },
0197     IIO_CHAN_SOFT_TIMESTAMP(1),
0198 };
0199 
0200 static const struct iio_chan_spec atlas_do_channels[] = {
0201     {
0202         .type = IIO_CONCENTRATION,
0203         .address = ATLAS_REG_DO_DATA,
0204         .info_mask_separate =
0205             BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
0206         .scan_index = 0,
0207         .scan_type = {
0208             .sign = 'u',
0209             .realbits = 32,
0210             .storagebits = 32,
0211             .endianness = IIO_BE,
0212         },
0213     },
0214     IIO_CHAN_SOFT_TIMESTAMP(1),
0215     {
0216         .type = IIO_TEMP,
0217         .address = ATLAS_REG_DO_TEMP_DATA,
0218         .info_mask_separate =
0219             BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
0220         .output = 1,
0221         .scan_index = -1
0222     },
0223 };
0224 
0225 static const struct iio_chan_spec atlas_rtd_channels[] = {
0226     {
0227         .type = IIO_TEMP,
0228         .address = ATLAS_REG_RTD_DATA,
0229         .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
0230         .scan_index = 0,
0231         .scan_type = {
0232             .sign = 's',
0233             .realbits = 32,
0234             .storagebits = 32,
0235             .endianness = IIO_BE,
0236         },
0237     },
0238     IIO_CHAN_SOFT_TIMESTAMP(1),
0239 };
0240 
0241 static int atlas_check_ph_calibration(struct atlas_data *data)
0242 {
0243     struct device *dev = &data->client->dev;
0244     int ret;
0245     unsigned int val;
0246 
0247     ret = regmap_read(data->regmap, ATLAS_REG_PH_CALIB_STATUS, &val);
0248     if (ret)
0249         return ret;
0250 
0251     if (!(val & ATLAS_REG_PH_CALIB_STATUS_MASK)) {
0252         dev_warn(dev, "device has not been calibrated\n");
0253         return 0;
0254     }
0255 
0256     if (!(val & ATLAS_REG_PH_CALIB_STATUS_LOW))
0257         dev_warn(dev, "device missing low point calibration\n");
0258 
0259     if (!(val & ATLAS_REG_PH_CALIB_STATUS_MID))
0260         dev_warn(dev, "device missing mid point calibration\n");
0261 
0262     if (!(val & ATLAS_REG_PH_CALIB_STATUS_HIGH))
0263         dev_warn(dev, "device missing high point calibration\n");
0264 
0265     return 0;
0266 }
0267 
0268 static int atlas_check_ec_calibration(struct atlas_data *data)
0269 {
0270     struct device *dev = &data->client->dev;
0271     int ret;
0272     unsigned int val;
0273     __be16  rval;
0274 
0275     ret = regmap_bulk_read(data->regmap, ATLAS_REG_EC_PROBE, &rval, 2);
0276     if (ret)
0277         return ret;
0278 
0279     val = be16_to_cpu(rval);
0280     dev_info(dev, "probe set to K = %d.%.2d", val / 100, val % 100);
0281 
0282     ret = regmap_read(data->regmap, ATLAS_REG_EC_CALIB_STATUS, &val);
0283     if (ret)
0284         return ret;
0285 
0286     if (!(val & ATLAS_REG_EC_CALIB_STATUS_MASK)) {
0287         dev_warn(dev, "device has not been calibrated\n");
0288         return 0;
0289     }
0290 
0291     if (!(val & ATLAS_REG_EC_CALIB_STATUS_DRY))
0292         dev_warn(dev, "device missing dry point calibration\n");
0293 
0294     if (val & ATLAS_REG_EC_CALIB_STATUS_SINGLE) {
0295         dev_warn(dev, "device using single point calibration\n");
0296     } else {
0297         if (!(val & ATLAS_REG_EC_CALIB_STATUS_LOW))
0298             dev_warn(dev, "device missing low point calibration\n");
0299 
0300         if (!(val & ATLAS_REG_EC_CALIB_STATUS_HIGH))
0301             dev_warn(dev, "device missing high point calibration\n");
0302     }
0303 
0304     return 0;
0305 }
0306 
0307 static int atlas_check_orp_calibration(struct atlas_data *data)
0308 {
0309     struct device *dev = &data->client->dev;
0310     int ret;
0311     unsigned int val;
0312 
0313     ret = regmap_read(data->regmap, ATLAS_REG_ORP_CALIB_STATUS, &val);
0314     if (ret)
0315         return ret;
0316 
0317     if (!val)
0318         dev_warn(dev, "device has not been calibrated\n");
0319 
0320     return 0;
0321 }
0322 
0323 static int atlas_check_do_calibration(struct atlas_data *data)
0324 {
0325     struct device *dev = &data->client->dev;
0326     int ret;
0327     unsigned int val;
0328 
0329     ret = regmap_read(data->regmap, ATLAS_REG_DO_CALIB_STATUS, &val);
0330     if (ret)
0331         return ret;
0332 
0333     if (!(val & ATLAS_REG_DO_CALIB_STATUS_MASK)) {
0334         dev_warn(dev, "device has not been calibrated\n");
0335         return 0;
0336     }
0337 
0338     if (!(val & ATLAS_REG_DO_CALIB_STATUS_PRESSURE))
0339         dev_warn(dev, "device missing atmospheric pressure calibration\n");
0340 
0341     if (!(val & ATLAS_REG_DO_CALIB_STATUS_DO))
0342         dev_warn(dev, "device missing dissolved oxygen calibration\n");
0343 
0344     return 0;
0345 }
0346 
0347 struct atlas_device {
0348     const struct iio_chan_spec *channels;
0349     int num_channels;
0350     int data_reg;
0351 
0352     int (*calibration)(struct atlas_data *data);
0353     int delay;
0354 };
0355 
0356 static struct atlas_device atlas_devices[] = {
0357     [ATLAS_PH_SM] = {
0358                 .channels = atlas_ph_channels,
0359                 .num_channels = 3,
0360                 .data_reg = ATLAS_REG_PH_DATA,
0361                 .calibration = &atlas_check_ph_calibration,
0362                 .delay = ATLAS_PH_INT_TIME_IN_MS,
0363     },
0364     [ATLAS_EC_SM] = {
0365                 .channels = atlas_ec_channels,
0366                 .num_channels = 5,
0367                 .data_reg = ATLAS_REG_EC_DATA,
0368                 .calibration = &atlas_check_ec_calibration,
0369                 .delay = ATLAS_EC_INT_TIME_IN_MS,
0370     },
0371     [ATLAS_ORP_SM] = {
0372                 .channels = atlas_orp_channels,
0373                 .num_channels = 2,
0374                 .data_reg = ATLAS_REG_ORP_DATA,
0375                 .calibration = &atlas_check_orp_calibration,
0376                 .delay = ATLAS_ORP_INT_TIME_IN_MS,
0377     },
0378     [ATLAS_DO_SM] = {
0379                 .channels = atlas_do_channels,
0380                 .num_channels = 3,
0381                 .data_reg = ATLAS_REG_DO_DATA,
0382                 .calibration = &atlas_check_do_calibration,
0383                 .delay = ATLAS_DO_INT_TIME_IN_MS,
0384     },
0385     [ATLAS_RTD_SM] = {
0386                 .channels = atlas_rtd_channels,
0387                 .num_channels = 2,
0388                 .data_reg = ATLAS_REG_RTD_DATA,
0389                 .delay = ATLAS_RTD_INT_TIME_IN_MS,
0390     },
0391 };
0392 
0393 static int atlas_set_powermode(struct atlas_data *data, int on)
0394 {
0395     return regmap_write(data->regmap, ATLAS_REG_PWR_CONTROL, on);
0396 }
0397 
0398 static int atlas_set_interrupt(struct atlas_data *data, bool state)
0399 {
0400     if (!data->interrupt_enabled)
0401         return 0;
0402 
0403     return regmap_update_bits(data->regmap, ATLAS_REG_INT_CONTROL,
0404                   ATLAS_REG_INT_CONTROL_EN,
0405                   state ? ATLAS_REG_INT_CONTROL_EN : 0);
0406 }
0407 
0408 static int atlas_buffer_postenable(struct iio_dev *indio_dev)
0409 {
0410     struct atlas_data *data = iio_priv(indio_dev);
0411     int ret;
0412 
0413     ret = pm_runtime_resume_and_get(&data->client->dev);
0414     if (ret)
0415         return ret;
0416 
0417     return atlas_set_interrupt(data, true);
0418 }
0419 
0420 static int atlas_buffer_predisable(struct iio_dev *indio_dev)
0421 {
0422     struct atlas_data *data = iio_priv(indio_dev);
0423     int ret;
0424 
0425     ret = atlas_set_interrupt(data, false);
0426     if (ret)
0427         return ret;
0428 
0429     pm_runtime_mark_last_busy(&data->client->dev);
0430     ret = pm_runtime_put_autosuspend(&data->client->dev);
0431     if (ret)
0432         return ret;
0433 
0434     return 0;
0435 }
0436 
0437 static const struct iio_buffer_setup_ops atlas_buffer_setup_ops = {
0438     .postenable = atlas_buffer_postenable,
0439     .predisable = atlas_buffer_predisable,
0440 };
0441 
0442 static void atlas_work_handler(struct irq_work *work)
0443 {
0444     struct atlas_data *data = container_of(work, struct atlas_data, work);
0445 
0446     iio_trigger_poll(data->trig);
0447 }
0448 
0449 static irqreturn_t atlas_trigger_handler(int irq, void *private)
0450 {
0451     struct iio_poll_func *pf = private;
0452     struct iio_dev *indio_dev = pf->indio_dev;
0453     struct atlas_data *data = iio_priv(indio_dev);
0454     int channels = atlas_buffer_num_channels(data->chip->channels);
0455     int ret;
0456 
0457     ret = regmap_bulk_read(data->regmap, data->chip->data_reg,
0458                   &data->buffer, sizeof(__be32) * channels);
0459 
0460     if (!ret)
0461         iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
0462                 iio_get_time_ns(indio_dev));
0463 
0464     iio_trigger_notify_done(indio_dev->trig);
0465 
0466     return IRQ_HANDLED;
0467 }
0468 
0469 static irqreturn_t atlas_interrupt_handler(int irq, void *private)
0470 {
0471     struct iio_dev *indio_dev = private;
0472     struct atlas_data *data = iio_priv(indio_dev);
0473 
0474     irq_work_queue(&data->work);
0475 
0476     return IRQ_HANDLED;
0477 }
0478 
0479 static int atlas_read_measurement(struct atlas_data *data, int reg, __be32 *val)
0480 {
0481     struct device *dev = &data->client->dev;
0482     int suspended = pm_runtime_suspended(dev);
0483     int ret;
0484 
0485     ret = pm_runtime_resume_and_get(dev);
0486     if (ret)
0487         return ret;
0488 
0489     if (suspended)
0490         msleep(data->chip->delay);
0491 
0492     ret = regmap_bulk_read(data->regmap, reg, val, sizeof(*val));
0493 
0494     pm_runtime_mark_last_busy(dev);
0495     pm_runtime_put_autosuspend(dev);
0496 
0497     return ret;
0498 }
0499 
0500 static int atlas_read_raw(struct iio_dev *indio_dev,
0501               struct iio_chan_spec const *chan,
0502               int *val, int *val2, long mask)
0503 {
0504     struct atlas_data *data = iio_priv(indio_dev);
0505 
0506     switch (mask) {
0507     case IIO_CHAN_INFO_PROCESSED:
0508     case IIO_CHAN_INFO_RAW: {
0509         int ret;
0510         __be32 reg;
0511 
0512         switch (chan->type) {
0513         case IIO_TEMP:
0514             ret = regmap_bulk_read(data->regmap, chan->address,
0515                            &reg, sizeof(reg));
0516             break;
0517         case IIO_PH:
0518         case IIO_CONCENTRATION:
0519         case IIO_ELECTRICALCONDUCTIVITY:
0520         case IIO_VOLTAGE:
0521             ret = iio_device_claim_direct_mode(indio_dev);
0522             if (ret)
0523                 return ret;
0524 
0525             ret = atlas_read_measurement(data, chan->address, &reg);
0526 
0527             iio_device_release_direct_mode(indio_dev);
0528             break;
0529         default:
0530             ret = -EINVAL;
0531         }
0532 
0533         if (!ret) {
0534             *val = be32_to_cpu(reg);
0535             ret = IIO_VAL_INT;
0536         }
0537         return ret;
0538     }
0539     case IIO_CHAN_INFO_SCALE:
0540         switch (chan->type) {
0541         case IIO_TEMP:
0542             *val = 10;
0543             return IIO_VAL_INT;
0544         case IIO_PH:
0545             *val = 1; /* 0.001 */
0546             *val2 = 1000;
0547             break;
0548         case IIO_ELECTRICALCONDUCTIVITY:
0549             *val = 1; /* 0.00001 */
0550             *val2 = 100000;
0551             break;
0552         case IIO_CONCENTRATION:
0553             *val = 0; /* 0.000000001 */
0554             *val2 = 1000;
0555             return IIO_VAL_INT_PLUS_NANO;
0556         case IIO_VOLTAGE:
0557             *val = 1; /* 0.1 */
0558             *val2 = 10;
0559             break;
0560         default:
0561             return -EINVAL;
0562         }
0563         return IIO_VAL_FRACTIONAL;
0564     }
0565 
0566     return -EINVAL;
0567 }
0568 
0569 static int atlas_write_raw(struct iio_dev *indio_dev,
0570                struct iio_chan_spec const *chan,
0571                int val, int val2, long mask)
0572 {
0573     struct atlas_data *data = iio_priv(indio_dev);
0574     __be32 reg = cpu_to_be32(val / 10);
0575 
0576     if (val2 != 0 || val < 0 || val > 20000)
0577         return -EINVAL;
0578 
0579     if (mask != IIO_CHAN_INFO_RAW || chan->type != IIO_TEMP)
0580         return -EINVAL;
0581 
0582     return regmap_bulk_write(data->regmap, chan->address,
0583                  &reg, sizeof(reg));
0584 }
0585 
0586 static const struct iio_info atlas_info = {
0587     .read_raw = atlas_read_raw,
0588     .write_raw = atlas_write_raw,
0589 };
0590 
0591 static const struct i2c_device_id atlas_id[] = {
0592     { "atlas-ph-sm", ATLAS_PH_SM },
0593     { "atlas-ec-sm", ATLAS_EC_SM },
0594     { "atlas-orp-sm", ATLAS_ORP_SM },
0595     { "atlas-do-sm", ATLAS_DO_SM },
0596     { "atlas-rtd-sm", ATLAS_RTD_SM },
0597     {}
0598 };
0599 MODULE_DEVICE_TABLE(i2c, atlas_id);
0600 
0601 static const struct of_device_id atlas_dt_ids[] = {
0602     { .compatible = "atlas,ph-sm", .data = (void *)ATLAS_PH_SM, },
0603     { .compatible = "atlas,ec-sm", .data = (void *)ATLAS_EC_SM, },
0604     { .compatible = "atlas,orp-sm", .data = (void *)ATLAS_ORP_SM, },
0605     { .compatible = "atlas,do-sm", .data = (void *)ATLAS_DO_SM, },
0606     { .compatible = "atlas,rtd-sm", .data = (void *)ATLAS_RTD_SM, },
0607     { }
0608 };
0609 MODULE_DEVICE_TABLE(of, atlas_dt_ids);
0610 
0611 static int atlas_probe(struct i2c_client *client,
0612                const struct i2c_device_id *id)
0613 {
0614     struct atlas_data *data;
0615     struct atlas_device *chip;
0616     struct iio_trigger *trig;
0617     struct iio_dev *indio_dev;
0618     int ret;
0619 
0620     indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
0621     if (!indio_dev)
0622         return -ENOMEM;
0623 
0624     if (!dev_fwnode(&client->dev))
0625         chip = &atlas_devices[id->driver_data];
0626     else
0627         chip = &atlas_devices[(unsigned long)device_get_match_data(&client->dev)];
0628 
0629     indio_dev->info = &atlas_info;
0630     indio_dev->name = ATLAS_DRV_NAME;
0631     indio_dev->channels = chip->channels;
0632     indio_dev->num_channels = chip->num_channels;
0633     indio_dev->modes = INDIO_BUFFER_SOFTWARE | INDIO_DIRECT_MODE;
0634 
0635     trig = devm_iio_trigger_alloc(&client->dev, "%s-dev%d",
0636                       indio_dev->name, iio_device_id(indio_dev));
0637 
0638     if (!trig)
0639         return -ENOMEM;
0640 
0641     data = iio_priv(indio_dev);
0642     data->client = client;
0643     data->trig = trig;
0644     data->chip = chip;
0645     iio_trigger_set_drvdata(trig, indio_dev);
0646 
0647     i2c_set_clientdata(client, indio_dev);
0648 
0649     data->regmap = devm_regmap_init_i2c(client, &atlas_regmap_config);
0650     if (IS_ERR(data->regmap)) {
0651         dev_err(&client->dev, "regmap initialization failed\n");
0652         return PTR_ERR(data->regmap);
0653     }
0654 
0655     ret = pm_runtime_set_active(&client->dev);
0656     if (ret)
0657         return ret;
0658 
0659     ret = chip->calibration(data);
0660     if (ret)
0661         return ret;
0662 
0663     ret = iio_trigger_register(trig);
0664     if (ret) {
0665         dev_err(&client->dev, "failed to register trigger\n");
0666         return ret;
0667     }
0668 
0669     ret = iio_triggered_buffer_setup(indio_dev, &iio_pollfunc_store_time,
0670         &atlas_trigger_handler, &atlas_buffer_setup_ops);
0671     if (ret) {
0672         dev_err(&client->dev, "cannot setup iio trigger\n");
0673         goto unregister_trigger;
0674     }
0675 
0676     init_irq_work(&data->work, atlas_work_handler);
0677 
0678     if (client->irq > 0) {
0679         /* interrupt pin toggles on new conversion */
0680         ret = devm_request_threaded_irq(&client->dev, client->irq,
0681                 NULL, atlas_interrupt_handler,
0682                 IRQF_TRIGGER_RISING |
0683                 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
0684                 "atlas_irq",
0685                 indio_dev);
0686 
0687         if (ret)
0688             dev_warn(&client->dev,
0689                 "request irq (%d) failed\n", client->irq);
0690         else
0691             data->interrupt_enabled = 1;
0692     }
0693 
0694     ret = atlas_set_powermode(data, 1);
0695     if (ret) {
0696         dev_err(&client->dev, "cannot power device on");
0697         goto unregister_buffer;
0698     }
0699 
0700     pm_runtime_enable(&client->dev);
0701     pm_runtime_set_autosuspend_delay(&client->dev, 2500);
0702     pm_runtime_use_autosuspend(&client->dev);
0703 
0704     ret = iio_device_register(indio_dev);
0705     if (ret) {
0706         dev_err(&client->dev, "unable to register device\n");
0707         goto unregister_pm;
0708     }
0709 
0710     return 0;
0711 
0712 unregister_pm:
0713     pm_runtime_disable(&client->dev);
0714     atlas_set_powermode(data, 0);
0715 
0716 unregister_buffer:
0717     iio_triggered_buffer_cleanup(indio_dev);
0718 
0719 unregister_trigger:
0720     iio_trigger_unregister(data->trig);
0721 
0722     return ret;
0723 }
0724 
0725 static int atlas_remove(struct i2c_client *client)
0726 {
0727     struct iio_dev *indio_dev = i2c_get_clientdata(client);
0728     struct atlas_data *data = iio_priv(indio_dev);
0729     int ret;
0730 
0731     iio_device_unregister(indio_dev);
0732     iio_triggered_buffer_cleanup(indio_dev);
0733     iio_trigger_unregister(data->trig);
0734 
0735     pm_runtime_disable(&client->dev);
0736     pm_runtime_set_suspended(&client->dev);
0737 
0738     ret = atlas_set_powermode(data, 0);
0739     if (ret)
0740         dev_err(&client->dev, "Failed to power down device (%pe)\n",
0741             ERR_PTR(ret));
0742 
0743     return 0;
0744 }
0745 
0746 static int atlas_runtime_suspend(struct device *dev)
0747 {
0748     struct atlas_data *data =
0749              iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
0750 
0751     return atlas_set_powermode(data, 0);
0752 }
0753 
0754 static int atlas_runtime_resume(struct device *dev)
0755 {
0756     struct atlas_data *data =
0757              iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
0758 
0759     return atlas_set_powermode(data, 1);
0760 }
0761 
0762 static const struct dev_pm_ops atlas_pm_ops = {
0763     RUNTIME_PM_OPS(atlas_runtime_suspend, atlas_runtime_resume, NULL)
0764 };
0765 
0766 static struct i2c_driver atlas_driver = {
0767     .driver = {
0768         .name   = ATLAS_DRV_NAME,
0769         .of_match_table = atlas_dt_ids,
0770         .pm = pm_ptr(&atlas_pm_ops),
0771     },
0772     .probe      = atlas_probe,
0773     .remove     = atlas_remove,
0774     .id_table   = atlas_id,
0775 };
0776 module_i2c_driver(atlas_driver);
0777 
0778 MODULE_AUTHOR("Matt Ranostay <matt.ranostay@konsulko.com>");
0779 MODULE_DESCRIPTION("Atlas Scientific SM sensors");
0780 MODULE_LICENSE("GPL");