|
76 | 76 |
|
77 | 77 | #define SX9324_REG_PROX_CTRL0 0x30
|
78 | 78 | #define SX9324_REG_PROX_CTRL0_GAIN_MASK GENMASK(5, 3)
|
79 |
| -#define SX9324_REG_PROX_CTRL0_GAIN_1 0x80 |
| 79 | +#define SX9324_REG_PROX_CTRL0_GAIN_SHIFT 3 |
| 80 | +#define SX9324_REG_PROX_CTRL0_GAIN_RSVD 0x0 |
| 81 | +#define SX9324_REG_PROX_CTRL0_GAIN_1 0x1 |
| 82 | +#define SX9324_REG_PROX_CTRL0_GAIN_8 0x4 |
80 | 83 | #define SX9324_REG_PROX_CTRL0_RAWFILT_MASK GENMASK(2, 0)
|
81 | 84 | #define SX9324_REG_PROX_CTRL0_RAWFILT_1P50 0x01
|
82 | 85 | #define SX9324_REG_PROX_CTRL1 0x31
|
@@ -379,7 +382,14 @@ static int sx9324_read_gain(struct sx_common_data *data,
|
379 | 382 | if (ret)
|
380 | 383 | return ret;
|
381 | 384 |
|
382 |
| - *val = 1 << FIELD_GET(SX9324_REG_PROX_CTRL0_GAIN_MASK, regval); |
| 385 | + regval = FIELD_GET(SX9324_REG_PROX_CTRL0_GAIN_MASK, regval); |
| 386 | + if (regval) |
| 387 | + regval--; |
| 388 | + else if (regval == SX9324_REG_PROX_CTRL0_GAIN_RSVD || |
| 389 | + regval > SX9324_REG_PROX_CTRL0_GAIN_8) |
| 390 | + return -EINVAL; |
| 391 | + |
| 392 | + *val = 1 << regval; |
383 | 393 |
|
384 | 394 | return IIO_VAL_INT;
|
385 | 395 | }
|
@@ -725,8 +735,12 @@ static int sx9324_write_gain(struct sx_common_data *data,
|
725 | 735 | unsigned int gain, reg;
|
726 | 736 | int ret;
|
727 | 737 |
|
728 |
| - gain = ilog2(val); |
729 | 738 | reg = SX9324_REG_PROX_CTRL0 + chan->channel / 2;
|
| 739 | + |
| 740 | + gain = ilog2(val) + 1; |
| 741 | + if (val <= 0 || gain > SX9324_REG_PROX_CTRL0_GAIN_8) |
| 742 | + return -EINVAL; |
| 743 | + |
730 | 744 | gain = FIELD_PREP(SX9324_REG_PROX_CTRL0_GAIN_MASK, gain);
|
731 | 745 |
|
732 | 746 | mutex_lock(&data->mutex);
|
@@ -784,9 +798,11 @@ static const struct sx_common_reg_default sx9324_default_regs[] = {
|
784 | 798 | { SX9324_REG_AFE_CTRL8, SX9324_REG_AFE_CTRL8_RESFILTN_4KOHM },
|
785 | 799 | { SX9324_REG_AFE_CTRL9, SX9324_REG_AFE_CTRL9_AGAIN_1 },
|
786 | 800 |
|
787 |
| - { SX9324_REG_PROX_CTRL0, SX9324_REG_PROX_CTRL0_GAIN_1 | |
| 801 | + { SX9324_REG_PROX_CTRL0, |
| 802 | + SX9324_REG_PROX_CTRL0_GAIN_1 << SX9324_REG_PROX_CTRL0_GAIN_SHIFT | |
788 | 803 | SX9324_REG_PROX_CTRL0_RAWFILT_1P50 },
|
789 |
| - { SX9324_REG_PROX_CTRL1, SX9324_REG_PROX_CTRL0_GAIN_1 | |
| 804 | + { SX9324_REG_PROX_CTRL1, |
| 805 | + SX9324_REG_PROX_CTRL0_GAIN_1 << SX9324_REG_PROX_CTRL0_GAIN_SHIFT | |
790 | 806 | SX9324_REG_PROX_CTRL0_RAWFILT_1P50 },
|
791 | 807 | { SX9324_REG_PROX_CTRL2, SX9324_REG_PROX_CTRL2_AVGNEG_THRESH_16K },
|
792 | 808 | { SX9324_REG_PROX_CTRL3, SX9324_REG_PROX_CTRL3_AVGDEB_2SAMPLES |
|
|
0 commit comments