Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (c) 2014 Intel Corporation
0004  *
0005  * Driver for Semtech's SX9500 capacitive proximity/button solution.
0006  * Datasheet available at
0007  * <http://www.semtech.com/images/datasheet/sx9500.pdf>.
0008  */
0009 
0010 #include <linux/kernel.h>
0011 #include <linux/slab.h>
0012 #include <linux/module.h>
0013 #include <linux/i2c.h>
0014 #include <linux/irq.h>
0015 #include <linux/acpi.h>
0016 #include <linux/gpio/consumer.h>
0017 #include <linux/regmap.h>
0018 #include <linux/pm.h>
0019 #include <linux/delay.h>
0020 
0021 #include <linux/iio/iio.h>
0022 #include <linux/iio/buffer.h>
0023 #include <linux/iio/sysfs.h>
0024 #include <linux/iio/events.h>
0025 #include <linux/iio/trigger.h>
0026 #include <linux/iio/triggered_buffer.h>
0027 #include <linux/iio/trigger_consumer.h>
0028 
0029 #define SX9500_DRIVER_NAME      "sx9500"
0030 #define SX9500_IRQ_NAME         "sx9500_event"
0031 
0032 /* Register definitions. */
0033 #define SX9500_REG_IRQ_SRC      0x00
0034 #define SX9500_REG_STAT         0x01
0035 #define SX9500_REG_IRQ_MSK      0x03
0036 
0037 #define SX9500_REG_PROX_CTRL0       0x06
0038 #define SX9500_REG_PROX_CTRL1       0x07
0039 #define SX9500_REG_PROX_CTRL2       0x08
0040 #define SX9500_REG_PROX_CTRL3       0x09
0041 #define SX9500_REG_PROX_CTRL4       0x0a
0042 #define SX9500_REG_PROX_CTRL5       0x0b
0043 #define SX9500_REG_PROX_CTRL6       0x0c
0044 #define SX9500_REG_PROX_CTRL7       0x0d
0045 #define SX9500_REG_PROX_CTRL8       0x0e
0046 
0047 #define SX9500_REG_SENSOR_SEL       0x20
0048 #define SX9500_REG_USE_MSB      0x21
0049 #define SX9500_REG_USE_LSB      0x22
0050 #define SX9500_REG_AVG_MSB      0x23
0051 #define SX9500_REG_AVG_LSB      0x24
0052 #define SX9500_REG_DIFF_MSB     0x25
0053 #define SX9500_REG_DIFF_LSB     0x26
0054 #define SX9500_REG_OFFSET_MSB       0x27
0055 #define SX9500_REG_OFFSET_LSB       0x28
0056 
0057 #define SX9500_REG_RESET        0x7f
0058 
0059 /* Write this to REG_RESET to do a soft reset. */
0060 #define SX9500_SOFT_RESET       0xde
0061 
0062 #define SX9500_SCAN_PERIOD_MASK     GENMASK(6, 4)
0063 #define SX9500_SCAN_PERIOD_SHIFT    4
0064 
0065 /*
0066  * These serve for identifying IRQ source in the IRQ_SRC register, and
0067  * also for masking the IRQs in the IRQ_MSK register.
0068  */
0069 #define SX9500_CLOSE_IRQ        BIT(6)
0070 #define SX9500_FAR_IRQ          BIT(5)
0071 #define SX9500_CONVDONE_IRQ     BIT(3)
0072 
0073 #define SX9500_PROXSTAT_SHIFT       4
0074 #define SX9500_COMPSTAT_MASK        GENMASK(3, 0)
0075 
0076 #define SX9500_NUM_CHANNELS     4
0077 #define SX9500_CHAN_MASK        GENMASK(SX9500_NUM_CHANNELS - 1, 0)
0078 
0079 struct sx9500_data {
0080     struct mutex mutex;
0081     struct i2c_client *client;
0082     struct iio_trigger *trig;
0083     struct regmap *regmap;
0084     struct gpio_desc *gpiod_rst;
0085     /*
0086      * Last reading of the proximity status for each channel.  We
0087      * only send an event to user space when this changes.
0088      */
0089     bool prox_stat[SX9500_NUM_CHANNELS];
0090     bool event_enabled[SX9500_NUM_CHANNELS];
0091     bool trigger_enabled;
0092     u16 *buffer;
0093     /* Remember enabled channels and sample rate during suspend. */
0094     unsigned int suspend_ctrl0;
0095     struct completion completion;
0096     int data_rdy_users, close_far_users;
0097     int channel_users[SX9500_NUM_CHANNELS];
0098 };
0099 
0100 static const struct iio_event_spec sx9500_events[] = {
0101     {
0102         .type = IIO_EV_TYPE_THRESH,
0103         .dir = IIO_EV_DIR_EITHER,
0104         .mask_separate = BIT(IIO_EV_INFO_ENABLE),
0105     },
0106 };
0107 
0108 #define SX9500_CHANNEL(idx)                 \
0109     {                           \
0110         .type = IIO_PROXIMITY,              \
0111         .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),   \
0112         .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ), \
0113         .indexed = 1,                   \
0114         .channel = idx,                 \
0115         .event_spec = sx9500_events,            \
0116         .num_event_specs = ARRAY_SIZE(sx9500_events),   \
0117         .scan_index = idx,              \
0118         .scan_type = {                  \
0119             .sign = 'u',                \
0120             .realbits = 16,             \
0121             .storagebits = 16,          \
0122             .shift = 0,             \
0123         },                      \
0124     }
0125 
0126 static const struct iio_chan_spec sx9500_channels[] = {
0127     SX9500_CHANNEL(0),
0128     SX9500_CHANNEL(1),
0129     SX9500_CHANNEL(2),
0130     SX9500_CHANNEL(3),
0131     IIO_CHAN_SOFT_TIMESTAMP(4),
0132 };
0133 
0134 static const struct {
0135     int val;
0136     int val2;
0137 } sx9500_samp_freq_table[] = {
0138     {33, 333333},
0139     {16, 666666},
0140     {11, 111111},
0141     {8, 333333},
0142     {6, 666666},
0143     {5, 0},
0144     {3, 333333},
0145     {2, 500000},
0146 };
0147 
0148 static const unsigned int sx9500_scan_period_table[] = {
0149     30, 60, 90, 120, 150, 200, 300, 400,
0150 };
0151 
0152 static const struct regmap_range sx9500_writable_reg_ranges[] = {
0153     regmap_reg_range(SX9500_REG_IRQ_MSK, SX9500_REG_IRQ_MSK),
0154     regmap_reg_range(SX9500_REG_PROX_CTRL0, SX9500_REG_PROX_CTRL8),
0155     regmap_reg_range(SX9500_REG_SENSOR_SEL, SX9500_REG_SENSOR_SEL),
0156     regmap_reg_range(SX9500_REG_OFFSET_MSB, SX9500_REG_OFFSET_LSB),
0157     regmap_reg_range(SX9500_REG_RESET, SX9500_REG_RESET),
0158 };
0159 
0160 static const struct regmap_access_table sx9500_writeable_regs = {
0161     .yes_ranges = sx9500_writable_reg_ranges,
0162     .n_yes_ranges = ARRAY_SIZE(sx9500_writable_reg_ranges),
0163 };
0164 
0165 /*
0166  * All allocated registers are readable, so we just list unallocated
0167  * ones.
0168  */
0169 static const struct regmap_range sx9500_non_readable_reg_ranges[] = {
0170     regmap_reg_range(SX9500_REG_STAT + 1, SX9500_REG_STAT + 1),
0171     regmap_reg_range(SX9500_REG_IRQ_MSK + 1, SX9500_REG_PROX_CTRL0 - 1),
0172     regmap_reg_range(SX9500_REG_PROX_CTRL8 + 1, SX9500_REG_SENSOR_SEL - 1),
0173     regmap_reg_range(SX9500_REG_OFFSET_LSB + 1, SX9500_REG_RESET - 1),
0174 };
0175 
0176 static const struct regmap_access_table sx9500_readable_regs = {
0177     .no_ranges = sx9500_non_readable_reg_ranges,
0178     .n_no_ranges = ARRAY_SIZE(sx9500_non_readable_reg_ranges),
0179 };
0180 
0181 static const struct regmap_range sx9500_volatile_reg_ranges[] = {
0182     regmap_reg_range(SX9500_REG_IRQ_SRC, SX9500_REG_STAT),
0183     regmap_reg_range(SX9500_REG_USE_MSB, SX9500_REG_OFFSET_LSB),
0184     regmap_reg_range(SX9500_REG_RESET, SX9500_REG_RESET),
0185 };
0186 
0187 static const struct regmap_access_table sx9500_volatile_regs = {
0188     .yes_ranges = sx9500_volatile_reg_ranges,
0189     .n_yes_ranges = ARRAY_SIZE(sx9500_volatile_reg_ranges),
0190 };
0191 
0192 static const struct regmap_config sx9500_regmap_config = {
0193     .reg_bits = 8,
0194     .val_bits = 8,
0195 
0196     .max_register = SX9500_REG_RESET,
0197     .cache_type = REGCACHE_RBTREE,
0198 
0199     .wr_table = &sx9500_writeable_regs,
0200     .rd_table = &sx9500_readable_regs,
0201     .volatile_table = &sx9500_volatile_regs,
0202 };
0203 
0204 static int sx9500_inc_users(struct sx9500_data *data, int *counter,
0205                 unsigned int reg, unsigned int bitmask)
0206 {
0207     (*counter)++;
0208     if (*counter != 1)
0209         /* Bit is already active, nothing to do. */
0210         return 0;
0211 
0212     return regmap_update_bits(data->regmap, reg, bitmask, bitmask);
0213 }
0214 
0215 static int sx9500_dec_users(struct sx9500_data *data, int *counter,
0216                 unsigned int reg, unsigned int bitmask)
0217 {
0218     (*counter)--;
0219     if (*counter != 0)
0220         /* There are more users, do not deactivate. */
0221         return 0;
0222 
0223     return regmap_update_bits(data->regmap, reg, bitmask, 0);
0224 }
0225 
0226 static int sx9500_inc_chan_users(struct sx9500_data *data, int chan)
0227 {
0228     return sx9500_inc_users(data, &data->channel_users[chan],
0229                 SX9500_REG_PROX_CTRL0, BIT(chan));
0230 }
0231 
0232 static int sx9500_dec_chan_users(struct sx9500_data *data, int chan)
0233 {
0234     return sx9500_dec_users(data, &data->channel_users[chan],
0235                 SX9500_REG_PROX_CTRL0, BIT(chan));
0236 }
0237 
0238 static int sx9500_inc_data_rdy_users(struct sx9500_data *data)
0239 {
0240     return sx9500_inc_users(data, &data->data_rdy_users,
0241                 SX9500_REG_IRQ_MSK, SX9500_CONVDONE_IRQ);
0242 }
0243 
0244 static int sx9500_dec_data_rdy_users(struct sx9500_data *data)
0245 {
0246     return sx9500_dec_users(data, &data->data_rdy_users,
0247                 SX9500_REG_IRQ_MSK, SX9500_CONVDONE_IRQ);
0248 }
0249 
0250 static int sx9500_inc_close_far_users(struct sx9500_data *data)
0251 {
0252     return sx9500_inc_users(data, &data->close_far_users,
0253                 SX9500_REG_IRQ_MSK,
0254                 SX9500_CLOSE_IRQ | SX9500_FAR_IRQ);
0255 }
0256 
0257 static int sx9500_dec_close_far_users(struct sx9500_data *data)
0258 {
0259     return sx9500_dec_users(data, &data->close_far_users,
0260                 SX9500_REG_IRQ_MSK,
0261                 SX9500_CLOSE_IRQ | SX9500_FAR_IRQ);
0262 }
0263 
0264 static int sx9500_read_prox_data(struct sx9500_data *data,
0265                  const struct iio_chan_spec *chan,
0266                  int *val)
0267 {
0268     int ret;
0269     __be16 regval;
0270 
0271     ret = regmap_write(data->regmap, SX9500_REG_SENSOR_SEL, chan->channel);
0272     if (ret < 0)
0273         return ret;
0274 
0275     ret = regmap_bulk_read(data->regmap, SX9500_REG_USE_MSB, &regval, 2);
0276     if (ret < 0)
0277         return ret;
0278 
0279     *val = be16_to_cpu(regval);
0280 
0281     return IIO_VAL_INT;
0282 }
0283 
0284 /*
0285  * If we have no interrupt support, we have to wait for a scan period
0286  * after enabling a channel to get a result.
0287  */
0288 static int sx9500_wait_for_sample(struct sx9500_data *data)
0289 {
0290     int ret;
0291     unsigned int val;
0292 
0293     ret = regmap_read(data->regmap, SX9500_REG_PROX_CTRL0, &val);
0294     if (ret < 0)
0295         return ret;
0296 
0297     val = (val & SX9500_SCAN_PERIOD_MASK) >> SX9500_SCAN_PERIOD_SHIFT;
0298 
0299     msleep(sx9500_scan_period_table[val]);
0300 
0301     return 0;
0302 }
0303 
0304 static int sx9500_read_proximity(struct sx9500_data *data,
0305                  const struct iio_chan_spec *chan,
0306                  int *val)
0307 {
0308     int ret;
0309 
0310     mutex_lock(&data->mutex);
0311 
0312     ret = sx9500_inc_chan_users(data, chan->channel);
0313     if (ret < 0)
0314         goto out;
0315 
0316     ret = sx9500_inc_data_rdy_users(data);
0317     if (ret < 0)
0318         goto out_dec_chan;
0319 
0320     mutex_unlock(&data->mutex);
0321 
0322     if (data->client->irq > 0)
0323         ret = wait_for_completion_interruptible(&data->completion);
0324     else
0325         ret = sx9500_wait_for_sample(data);
0326 
0327     mutex_lock(&data->mutex);
0328 
0329     if (ret < 0)
0330         goto out_dec_data_rdy;
0331 
0332     ret = sx9500_read_prox_data(data, chan, val);
0333     if (ret < 0)
0334         goto out_dec_data_rdy;
0335 
0336     ret = sx9500_dec_data_rdy_users(data);
0337     if (ret < 0)
0338         goto out_dec_chan;
0339 
0340     ret = sx9500_dec_chan_users(data, chan->channel);
0341     if (ret < 0)
0342         goto out;
0343 
0344     ret = IIO_VAL_INT;
0345 
0346     goto out;
0347 
0348 out_dec_data_rdy:
0349     sx9500_dec_data_rdy_users(data);
0350 out_dec_chan:
0351     sx9500_dec_chan_users(data, chan->channel);
0352 out:
0353     mutex_unlock(&data->mutex);
0354     reinit_completion(&data->completion);
0355 
0356     return ret;
0357 }
0358 
0359 static int sx9500_read_samp_freq(struct sx9500_data *data,
0360                  int *val, int *val2)
0361 {
0362     int ret;
0363     unsigned int regval;
0364 
0365     mutex_lock(&data->mutex);
0366     ret = regmap_read(data->regmap, SX9500_REG_PROX_CTRL0, &regval);
0367     mutex_unlock(&data->mutex);
0368 
0369     if (ret < 0)
0370         return ret;
0371 
0372     regval = (regval & SX9500_SCAN_PERIOD_MASK) >> SX9500_SCAN_PERIOD_SHIFT;
0373     *val = sx9500_samp_freq_table[regval].val;
0374     *val2 = sx9500_samp_freq_table[regval].val2;
0375 
0376     return IIO_VAL_INT_PLUS_MICRO;
0377 }
0378 
0379 static int sx9500_read_raw(struct iio_dev *indio_dev,
0380                const struct iio_chan_spec *chan,
0381                int *val, int *val2, long mask)
0382 {
0383     struct sx9500_data *data = iio_priv(indio_dev);
0384     int ret;
0385 
0386     switch (chan->type) {
0387     case IIO_PROXIMITY:
0388         switch (mask) {
0389         case IIO_CHAN_INFO_RAW:
0390             ret = iio_device_claim_direct_mode(indio_dev);
0391             if (ret)
0392                 return ret;
0393             ret = sx9500_read_proximity(data, chan, val);
0394             iio_device_release_direct_mode(indio_dev);
0395             return ret;
0396         case IIO_CHAN_INFO_SAMP_FREQ:
0397             return sx9500_read_samp_freq(data, val, val2);
0398         default:
0399             return -EINVAL;
0400         }
0401     default:
0402         return -EINVAL;
0403     }
0404 }
0405 
0406 static int sx9500_set_samp_freq(struct sx9500_data *data,
0407                 int val, int val2)
0408 {
0409     int i, ret;
0410 
0411     for (i = 0; i < ARRAY_SIZE(sx9500_samp_freq_table); i++)
0412         if (val == sx9500_samp_freq_table[i].val &&
0413             val2 == sx9500_samp_freq_table[i].val2)
0414             break;
0415 
0416     if (i == ARRAY_SIZE(sx9500_samp_freq_table))
0417         return -EINVAL;
0418 
0419     mutex_lock(&data->mutex);
0420 
0421     ret = regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0,
0422                  SX9500_SCAN_PERIOD_MASK,
0423                  i << SX9500_SCAN_PERIOD_SHIFT);
0424 
0425     mutex_unlock(&data->mutex);
0426 
0427     return ret;
0428 }
0429 
0430 static int sx9500_write_raw(struct iio_dev *indio_dev,
0431                 const struct iio_chan_spec *chan,
0432                 int val, int val2, long mask)
0433 {
0434     struct sx9500_data *data = iio_priv(indio_dev);
0435 
0436     switch (chan->type) {
0437     case IIO_PROXIMITY:
0438         switch (mask) {
0439         case IIO_CHAN_INFO_SAMP_FREQ:
0440             return sx9500_set_samp_freq(data, val, val2);
0441         default:
0442             return -EINVAL;
0443         }
0444     default:
0445         return -EINVAL;
0446     }
0447 }
0448 
0449 static irqreturn_t sx9500_irq_handler(int irq, void *private)
0450 {
0451     struct iio_dev *indio_dev = private;
0452     struct sx9500_data *data = iio_priv(indio_dev);
0453 
0454     if (data->trigger_enabled)
0455         iio_trigger_poll(data->trig);
0456 
0457     /*
0458      * Even if no event is enabled, we need to wake the thread to
0459      * clear the interrupt state by reading SX9500_REG_IRQ_SRC.  It
0460      * is not possible to do that here because regmap_read takes a
0461      * mutex.
0462      */
0463     return IRQ_WAKE_THREAD;
0464 }
0465 
0466 static void sx9500_push_events(struct iio_dev *indio_dev)
0467 {
0468     int ret;
0469     unsigned int val, chan;
0470     struct sx9500_data *data = iio_priv(indio_dev);
0471 
0472     ret = regmap_read(data->regmap, SX9500_REG_STAT, &val);
0473     if (ret < 0) {
0474         dev_err(&data->client->dev, "i2c transfer error in irq\n");
0475         return;
0476     }
0477 
0478     val >>= SX9500_PROXSTAT_SHIFT;
0479     for (chan = 0; chan < SX9500_NUM_CHANNELS; chan++) {
0480         int dir;
0481         u64 ev;
0482         bool new_prox = val & BIT(chan);
0483 
0484         if (!data->event_enabled[chan])
0485             continue;
0486         if (new_prox == data->prox_stat[chan])
0487             /* No change on this channel. */
0488             continue;
0489 
0490         dir = new_prox ? IIO_EV_DIR_FALLING : IIO_EV_DIR_RISING;
0491         ev = IIO_UNMOD_EVENT_CODE(IIO_PROXIMITY, chan,
0492                       IIO_EV_TYPE_THRESH, dir);
0493         iio_push_event(indio_dev, ev, iio_get_time_ns(indio_dev));
0494         data->prox_stat[chan] = new_prox;
0495     }
0496 }
0497 
0498 static irqreturn_t sx9500_irq_thread_handler(int irq, void *private)
0499 {
0500     struct iio_dev *indio_dev = private;
0501     struct sx9500_data *data = iio_priv(indio_dev);
0502     int ret;
0503     unsigned int val;
0504 
0505     mutex_lock(&data->mutex);
0506 
0507     ret = regmap_read(data->regmap, SX9500_REG_IRQ_SRC, &val);
0508     if (ret < 0) {
0509         dev_err(&data->client->dev, "i2c transfer error in irq\n");
0510         goto out;
0511     }
0512 
0513     if (val & (SX9500_CLOSE_IRQ | SX9500_FAR_IRQ))
0514         sx9500_push_events(indio_dev);
0515 
0516     if (val & SX9500_CONVDONE_IRQ)
0517         complete(&data->completion);
0518 
0519 out:
0520     mutex_unlock(&data->mutex);
0521 
0522     return IRQ_HANDLED;
0523 }
0524 
0525 static int sx9500_read_event_config(struct iio_dev *indio_dev,
0526                     const struct iio_chan_spec *chan,
0527                     enum iio_event_type type,
0528                     enum iio_event_direction dir)
0529 {
0530     struct sx9500_data *data = iio_priv(indio_dev);
0531 
0532     if (chan->type != IIO_PROXIMITY || type != IIO_EV_TYPE_THRESH ||
0533         dir != IIO_EV_DIR_EITHER)
0534         return -EINVAL;
0535 
0536     return data->event_enabled[chan->channel];
0537 }
0538 
0539 static int sx9500_write_event_config(struct iio_dev *indio_dev,
0540                      const struct iio_chan_spec *chan,
0541                      enum iio_event_type type,
0542                      enum iio_event_direction dir,
0543                      int state)
0544 {
0545     struct sx9500_data *data = iio_priv(indio_dev);
0546     int ret;
0547 
0548     if (chan->type != IIO_PROXIMITY || type != IIO_EV_TYPE_THRESH ||
0549         dir != IIO_EV_DIR_EITHER)
0550         return -EINVAL;
0551 
0552     mutex_lock(&data->mutex);
0553 
0554     if (state == 1) {
0555         ret = sx9500_inc_chan_users(data, chan->channel);
0556         if (ret < 0)
0557             goto out_unlock;
0558         ret = sx9500_inc_close_far_users(data);
0559         if (ret < 0)
0560             goto out_undo_chan;
0561     } else {
0562         ret = sx9500_dec_chan_users(data, chan->channel);
0563         if (ret < 0)
0564             goto out_unlock;
0565         ret = sx9500_dec_close_far_users(data);
0566         if (ret < 0)
0567             goto out_undo_chan;
0568     }
0569 
0570     data->event_enabled[chan->channel] = state;
0571     goto out_unlock;
0572 
0573 out_undo_chan:
0574     if (state == 1)
0575         sx9500_dec_chan_users(data, chan->channel);
0576     else
0577         sx9500_inc_chan_users(data, chan->channel);
0578 out_unlock:
0579     mutex_unlock(&data->mutex);
0580     return ret;
0581 }
0582 
0583 static int sx9500_update_scan_mode(struct iio_dev *indio_dev,
0584                    const unsigned long *scan_mask)
0585 {
0586     struct sx9500_data *data = iio_priv(indio_dev);
0587 
0588     mutex_lock(&data->mutex);
0589     kfree(data->buffer);
0590     data->buffer = kzalloc(indio_dev->scan_bytes, GFP_KERNEL);
0591     mutex_unlock(&data->mutex);
0592 
0593     if (data->buffer == NULL)
0594         return -ENOMEM;
0595 
0596     return 0;
0597 }
0598 
0599 static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
0600     "2.500000 3.333333 5 6.666666 8.333333 11.111111 16.666666 33.333333");
0601 
0602 static struct attribute *sx9500_attributes[] = {
0603     &iio_const_attr_sampling_frequency_available.dev_attr.attr,
0604     NULL,
0605 };
0606 
0607 static const struct attribute_group sx9500_attribute_group = {
0608     .attrs = sx9500_attributes,
0609 };
0610 
0611 static const struct iio_info sx9500_info = {
0612     .attrs = &sx9500_attribute_group,
0613     .read_raw = &sx9500_read_raw,
0614     .write_raw = &sx9500_write_raw,
0615     .read_event_config = &sx9500_read_event_config,
0616     .write_event_config = &sx9500_write_event_config,
0617     .update_scan_mode = &sx9500_update_scan_mode,
0618 };
0619 
0620 static int sx9500_set_trigger_state(struct iio_trigger *trig,
0621                     bool state)
0622 {
0623     struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
0624     struct sx9500_data *data = iio_priv(indio_dev);
0625     int ret;
0626 
0627     mutex_lock(&data->mutex);
0628 
0629     if (state)
0630         ret = sx9500_inc_data_rdy_users(data);
0631     else
0632         ret = sx9500_dec_data_rdy_users(data);
0633     if (ret < 0)
0634         goto out;
0635 
0636     data->trigger_enabled = state;
0637 
0638 out:
0639     mutex_unlock(&data->mutex);
0640 
0641     return ret;
0642 }
0643 
0644 static const struct iio_trigger_ops sx9500_trigger_ops = {
0645     .set_trigger_state = sx9500_set_trigger_state,
0646 };
0647 
0648 static irqreturn_t sx9500_trigger_handler(int irq, void *private)
0649 {
0650     struct iio_poll_func *pf = private;
0651     struct iio_dev *indio_dev = pf->indio_dev;
0652     struct sx9500_data *data = iio_priv(indio_dev);
0653     int val, bit, ret, i = 0;
0654 
0655     mutex_lock(&data->mutex);
0656 
0657     for_each_set_bit(bit, indio_dev->active_scan_mask,
0658              indio_dev->masklength) {
0659         ret = sx9500_read_prox_data(data, &indio_dev->channels[bit],
0660                         &val);
0661         if (ret < 0)
0662             goto out;
0663 
0664         data->buffer[i++] = val;
0665     }
0666 
0667     iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
0668                        iio_get_time_ns(indio_dev));
0669 
0670 out:
0671     mutex_unlock(&data->mutex);
0672 
0673     iio_trigger_notify_done(indio_dev->trig);
0674 
0675     return IRQ_HANDLED;
0676 }
0677 
0678 static int sx9500_buffer_postenable(struct iio_dev *indio_dev)
0679 {
0680     struct sx9500_data *data = iio_priv(indio_dev);
0681     int ret = 0, i;
0682 
0683     mutex_lock(&data->mutex);
0684 
0685     for (i = 0; i < SX9500_NUM_CHANNELS; i++)
0686         if (test_bit(i, indio_dev->active_scan_mask)) {
0687             ret = sx9500_inc_chan_users(data, i);
0688             if (ret)
0689                 break;
0690         }
0691 
0692     if (ret)
0693         for (i = i - 1; i >= 0; i--)
0694             if (test_bit(i, indio_dev->active_scan_mask))
0695                 sx9500_dec_chan_users(data, i);
0696 
0697     mutex_unlock(&data->mutex);
0698 
0699     return ret;
0700 }
0701 
0702 static int sx9500_buffer_predisable(struct iio_dev *indio_dev)
0703 {
0704     struct sx9500_data *data = iio_priv(indio_dev);
0705     int ret = 0, i;
0706 
0707     mutex_lock(&data->mutex);
0708 
0709     for (i = 0; i < SX9500_NUM_CHANNELS; i++)
0710         if (test_bit(i, indio_dev->active_scan_mask)) {
0711             ret = sx9500_dec_chan_users(data, i);
0712             if (ret)
0713                 break;
0714         }
0715 
0716     if (ret)
0717         for (i = i - 1; i >= 0; i--)
0718             if (test_bit(i, indio_dev->active_scan_mask))
0719                 sx9500_inc_chan_users(data, i);
0720 
0721     mutex_unlock(&data->mutex);
0722 
0723     return ret;
0724 }
0725 
0726 static const struct iio_buffer_setup_ops sx9500_buffer_setup_ops = {
0727     .postenable = sx9500_buffer_postenable,
0728     .predisable = sx9500_buffer_predisable,
0729 };
0730 
0731 struct sx9500_reg_default {
0732     u8 reg;
0733     u8 def;
0734 };
0735 
0736 static const struct sx9500_reg_default sx9500_default_regs[] = {
0737     {
0738         .reg = SX9500_REG_PROX_CTRL1,
0739         /* Shield enabled, small range. */
0740         .def = 0x43,
0741     },
0742     {
0743         .reg = SX9500_REG_PROX_CTRL2,
0744         /* x8 gain, 167kHz frequency, finest resolution. */
0745         .def = 0x77,
0746     },
0747     {
0748         .reg = SX9500_REG_PROX_CTRL3,
0749         /* Doze enabled, 2x scan period doze, no raw filter. */
0750         .def = 0x40,
0751     },
0752     {
0753         .reg = SX9500_REG_PROX_CTRL4,
0754         /* Average threshold. */
0755         .def = 0x30,
0756     },
0757     {
0758         .reg = SX9500_REG_PROX_CTRL5,
0759         /*
0760          * Debouncer off, lowest average negative filter,
0761          * highest average positive filter.
0762          */
0763         .def = 0x0f,
0764     },
0765     {
0766         .reg = SX9500_REG_PROX_CTRL6,
0767         /* Proximity detection threshold: 280 */
0768         .def = 0x0e,
0769     },
0770     {
0771         .reg = SX9500_REG_PROX_CTRL7,
0772         /*
0773          * No automatic compensation, compensate each pin
0774          * independently, proximity hysteresis: 32, close
0775          * debouncer off, far debouncer off.
0776          */
0777         .def = 0x00,
0778     },
0779     {
0780         .reg = SX9500_REG_PROX_CTRL8,
0781         /* No stuck timeout, no periodic compensation. */
0782         .def = 0x00,
0783     },
0784     {
0785         .reg = SX9500_REG_PROX_CTRL0,
0786         /* Scan period: 30ms, all sensors disabled. */
0787         .def = 0x00,
0788     },
0789 };
0790 
0791 /* Activate all channels and perform an initial compensation. */
0792 static int sx9500_init_compensation(struct iio_dev *indio_dev)
0793 {
0794     struct sx9500_data *data = iio_priv(indio_dev);
0795     int i, ret;
0796     unsigned int val;
0797 
0798     ret = regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0,
0799                  SX9500_CHAN_MASK, SX9500_CHAN_MASK);
0800     if (ret < 0)
0801         return ret;
0802 
0803     for (i = 10; i >= 0; i--) {
0804         usleep_range(10000, 20000);
0805         ret = regmap_read(data->regmap, SX9500_REG_STAT, &val);
0806         if (ret < 0)
0807             goto out;
0808         if (!(val & SX9500_COMPSTAT_MASK))
0809             break;
0810     }
0811 
0812     if (i < 0) {
0813         dev_err(&data->client->dev, "initial compensation timed out");
0814         ret = -ETIMEDOUT;
0815     }
0816 
0817 out:
0818     regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0,
0819                SX9500_CHAN_MASK, 0);
0820     return ret;
0821 }
0822 
0823 static int sx9500_init_device(struct iio_dev *indio_dev)
0824 {
0825     struct sx9500_data *data = iio_priv(indio_dev);
0826     int ret, i;
0827     unsigned int val;
0828 
0829     if (data->gpiod_rst) {
0830         gpiod_set_value_cansleep(data->gpiod_rst, 0);
0831         usleep_range(1000, 2000);
0832         gpiod_set_value_cansleep(data->gpiod_rst, 1);
0833         usleep_range(1000, 2000);
0834     }
0835 
0836     ret = regmap_write(data->regmap, SX9500_REG_IRQ_MSK, 0);
0837     if (ret < 0)
0838         return ret;
0839 
0840     ret = regmap_write(data->regmap, SX9500_REG_RESET,
0841                SX9500_SOFT_RESET);
0842     if (ret < 0)
0843         return ret;
0844 
0845     ret = regmap_read(data->regmap, SX9500_REG_IRQ_SRC, &val);
0846     if (ret < 0)
0847         return ret;
0848 
0849     for (i = 0; i < ARRAY_SIZE(sx9500_default_regs); i++) {
0850         ret = regmap_write(data->regmap,
0851                    sx9500_default_regs[i].reg,
0852                    sx9500_default_regs[i].def);
0853         if (ret < 0)
0854             return ret;
0855     }
0856 
0857     return sx9500_init_compensation(indio_dev);
0858 }
0859 
0860 static const struct acpi_gpio_params reset_gpios = { 0, 0, false };
0861 static const struct acpi_gpio_params interrupt_gpios = { 2, 0, false };
0862 
0863 static const struct acpi_gpio_mapping acpi_sx9500_gpios[] = {
0864     { "reset-gpios", &reset_gpios, 1 },
0865     /*
0866      * Some platforms have a bug in ACPI GPIO description making IRQ
0867      * GPIO to be output only. Ask the GPIO core to ignore this limit.
0868      */
0869     { "interrupt-gpios", &interrupt_gpios, 1, ACPI_GPIO_QUIRK_NO_IO_RESTRICTION },
0870     { },
0871 };
0872 
0873 static void sx9500_gpio_probe(struct i2c_client *client,
0874                   struct sx9500_data *data)
0875 {
0876     struct gpio_desc *gpiod_int;
0877     struct device *dev;
0878     int ret;
0879 
0880     if (!client)
0881         return;
0882 
0883     dev = &client->dev;
0884 
0885     ret = devm_acpi_dev_add_driver_gpios(dev, acpi_sx9500_gpios);
0886     if (ret)
0887         dev_dbg(dev, "Unable to add GPIO mapping table\n");
0888 
0889     if (client->irq <= 0) {
0890         gpiod_int = devm_gpiod_get(dev, "interrupt", GPIOD_IN);
0891         if (IS_ERR(gpiod_int))
0892             dev_err(dev, "gpio get irq failed\n");
0893         else
0894             client->irq = gpiod_to_irq(gpiod_int);
0895     }
0896 
0897     data->gpiod_rst = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
0898     if (IS_ERR(data->gpiod_rst)) {
0899         dev_warn(dev, "gpio get reset pin failed\n");
0900         data->gpiod_rst = NULL;
0901     }
0902 }
0903 
0904 static int sx9500_probe(struct i2c_client *client,
0905             const struct i2c_device_id *id)
0906 {
0907     int ret;
0908     struct iio_dev *indio_dev;
0909     struct sx9500_data *data;
0910 
0911     indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
0912     if (indio_dev == NULL)
0913         return -ENOMEM;
0914 
0915     data = iio_priv(indio_dev);
0916     data->client = client;
0917     mutex_init(&data->mutex);
0918     init_completion(&data->completion);
0919     data->trigger_enabled = false;
0920 
0921     data->regmap = devm_regmap_init_i2c(client, &sx9500_regmap_config);
0922     if (IS_ERR(data->regmap))
0923         return PTR_ERR(data->regmap);
0924 
0925     indio_dev->name = SX9500_DRIVER_NAME;
0926     indio_dev->channels = sx9500_channels;
0927     indio_dev->num_channels = ARRAY_SIZE(sx9500_channels);
0928     indio_dev->info = &sx9500_info;
0929     indio_dev->modes = INDIO_DIRECT_MODE;
0930     i2c_set_clientdata(client, indio_dev);
0931 
0932     sx9500_gpio_probe(client, data);
0933 
0934     ret = sx9500_init_device(indio_dev);
0935     if (ret < 0)
0936         return ret;
0937 
0938     if (client->irq <= 0)
0939         dev_warn(&client->dev, "no valid irq found\n");
0940     else {
0941         ret = devm_request_threaded_irq(&client->dev, client->irq,
0942                 sx9500_irq_handler, sx9500_irq_thread_handler,
0943                 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
0944                 SX9500_IRQ_NAME, indio_dev);
0945         if (ret < 0)
0946             return ret;
0947 
0948         data->trig = devm_iio_trigger_alloc(&client->dev,
0949                 "%s-dev%d", indio_dev->name, iio_device_id(indio_dev));
0950         if (!data->trig)
0951             return -ENOMEM;
0952 
0953         data->trig->ops = &sx9500_trigger_ops;
0954         iio_trigger_set_drvdata(data->trig, indio_dev);
0955 
0956         ret = iio_trigger_register(data->trig);
0957         if (ret)
0958             return ret;
0959     }
0960 
0961     ret = iio_triggered_buffer_setup(indio_dev, NULL,
0962                      sx9500_trigger_handler,
0963                      &sx9500_buffer_setup_ops);
0964     if (ret < 0)
0965         goto out_trigger_unregister;
0966 
0967     ret = iio_device_register(indio_dev);
0968     if (ret < 0)
0969         goto out_buffer_cleanup;
0970 
0971     return 0;
0972 
0973 out_buffer_cleanup:
0974     iio_triggered_buffer_cleanup(indio_dev);
0975 out_trigger_unregister:
0976     if (client->irq > 0)
0977         iio_trigger_unregister(data->trig);
0978 
0979     return ret;
0980 }
0981 
0982 static int sx9500_remove(struct i2c_client *client)
0983 {
0984     struct iio_dev *indio_dev = i2c_get_clientdata(client);
0985     struct sx9500_data *data = iio_priv(indio_dev);
0986 
0987     iio_device_unregister(indio_dev);
0988     iio_triggered_buffer_cleanup(indio_dev);
0989     if (client->irq > 0)
0990         iio_trigger_unregister(data->trig);
0991     kfree(data->buffer);
0992 
0993     return 0;
0994 }
0995 
0996 static int sx9500_suspend(struct device *dev)
0997 {
0998     struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
0999     struct sx9500_data *data = iio_priv(indio_dev);
1000     int ret;
1001 
1002     mutex_lock(&data->mutex);
1003     ret = regmap_read(data->regmap, SX9500_REG_PROX_CTRL0,
1004               &data->suspend_ctrl0);
1005     if (ret < 0)
1006         goto out;
1007 
1008     /*
1009      * Scan period doesn't matter because when all the sensors are
1010      * deactivated the device is in sleep mode.
1011      */
1012     ret = regmap_write(data->regmap, SX9500_REG_PROX_CTRL0, 0);
1013 
1014 out:
1015     mutex_unlock(&data->mutex);
1016     return ret;
1017 }
1018 
1019 static int sx9500_resume(struct device *dev)
1020 {
1021     struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
1022     struct sx9500_data *data = iio_priv(indio_dev);
1023     int ret;
1024 
1025     mutex_lock(&data->mutex);
1026     ret = regmap_write(data->regmap, SX9500_REG_PROX_CTRL0,
1027                data->suspend_ctrl0);
1028     mutex_unlock(&data->mutex);
1029 
1030     return ret;
1031 }
1032 
1033 static DEFINE_SIMPLE_DEV_PM_OPS(sx9500_pm_ops, sx9500_suspend, sx9500_resume);
1034 
1035 static const struct acpi_device_id sx9500_acpi_match[] = {
1036     {"SSX9500", 0},
1037     {"SASX9500", 0},
1038     { },
1039 };
1040 MODULE_DEVICE_TABLE(acpi, sx9500_acpi_match);
1041 
1042 static const struct of_device_id sx9500_of_match[] = {
1043     { .compatible = "semtech,sx9500", },
1044     { }
1045 };
1046 MODULE_DEVICE_TABLE(of, sx9500_of_match);
1047 
1048 static const struct i2c_device_id sx9500_id[] = {
1049     {"sx9500", 0},
1050     { },
1051 };
1052 MODULE_DEVICE_TABLE(i2c, sx9500_id);
1053 
1054 static struct i2c_driver sx9500_driver = {
1055     .driver = {
1056         .name   = SX9500_DRIVER_NAME,
1057         .acpi_match_table = ACPI_PTR(sx9500_acpi_match),
1058         .of_match_table = of_match_ptr(sx9500_of_match),
1059         .pm = pm_sleep_ptr(&sx9500_pm_ops),
1060     },
1061     .probe      = sx9500_probe,
1062     .remove     = sx9500_remove,
1063     .id_table   = sx9500_id,
1064 };
1065 module_i2c_driver(sx9500_driver);
1066 
1067 MODULE_AUTHOR("Vlad Dogaru <vlad.dogaru@intel.com>");
1068 MODULE_DESCRIPTION("Driver for Semtech SX9500 proximity sensor");
1069 MODULE_LICENSE("GPL v2");