[PATCH] Staging: iio: adc: fix macro and sysfs files modes in ad7280a.c

From: Boyan Vladinov
Date: Sun Nov 27 2016 - 04:14:42 EST


Fixes warnings found by checkpatch.pl:
- AD7280A_DEVADDR macro to use typeof, because of possible side effects
- sysfs entries user/group modes to use their octal representation
- coding style (open parenthesis alignment, CamelCase...)

Signed-off-by: Boyan Vladinov <nayobix@xxxxxxxxxxx>
---
drivers/staging/iio/adc/ad7280a.c | 141 +++++++++++++++++++++++++-------------
drivers/staging/iio/adc/ad7280a.h | 6 ++
2 files changed, 101 insertions(+), 46 deletions(-)

diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
index ee679ac0368f..5f687c6aaaeb 100644
--- a/drivers/staging/iio/adc/ad7280a.c
+++ b/drivers/staging/iio/adc/ad7280a.c
@@ -99,9 +99,11 @@
#define AD7280A_DEVADDR_MASTER 0
#define AD7280A_DEVADDR_ALL 0x1F
/* 5-bit device address is sent LSB first */
-#define AD7280A_DEVADDR(addr) (((addr & 0x1) << 4) | ((addr & 0x2) << 3) | \
- (addr & 0x4) | ((addr & 0x8) >> 3) | \
- ((addr & 0x10) >> 4))
+#define AD7280A_DEVADDR(addr) \
+ ({ typeof(addr) _addr = (addr); \
+ ((_addr & 0x1) << 4) | ((_addr & 0x2) << 3) | \
+ (_addr & 0x4) | ((_addr & 0x8) >> 3) | \
+ ((_addr & 0x10) >> 4); })

/* During a read a valid write is mandatory.
* So writing to the highest available address (Address 0x1F)
@@ -159,8 +161,8 @@ static unsigned char ad7280_calc_crc8(unsigned char *crc_tab, unsigned int val)
{
unsigned char crc;

- crc = crc_tab[val >> 16 & 0xFF];
- crc = crc_tab[crc ^ (val >> 8 & 0xFF)];
+ crc = crc_tab[val >> 16 & 0xff];
+ crc = crc_tab[crc ^ (val >> 8 & 0xff)];

return crc ^ (val & 0xFF);
}
@@ -559,7 +561,7 @@ static int ad7280_attr_init(struct ad7280_state *st)
st->iio_attr[cnt].address =
AD7280A_DEVADDR(dev) << 8 | ch;
st->iio_attr[cnt].dev_attr.attr.mode =
- S_IWUSR | S_IRUGO;
+ 0644;
st->iio_attr[cnt].dev_attr.show =
ad7280_show_balance_sw;
st->iio_attr[cnt].dev_attr.store =
@@ -576,7 +578,7 @@ static int ad7280_attr_init(struct ad7280_state *st)
AD7280A_DEVADDR(dev) << 8 |
(AD7280A_CB1_TIMER + ch);
st->iio_attr[cnt].dev_attr.attr.mode =
- S_IWUSR | S_IRUGO;
+ 0644;
st->iio_attr[cnt].dev_attr.show =
ad7280_show_balance_timer;
st->iio_attr[cnt].dev_attr.store =
@@ -679,6 +681,51 @@ static ssize_t ad7280_write_channel_config(struct device *dev,
return ret ? ret : len;
}

+static void ad7280a_push_event(struct iio_dev *indio_dev,
+ enum event_code_type event_code_t,
+ enum iio_chan_type iio_chan_t,
+ int diff,
+ int modifier,
+ enum iio_event_direction iio_event_dir,
+ enum iio_event_type iio_event_t,
+ int chan,
+ int chan1,
+ int chan2,
+ int number)
+{
+ switch (event_code_t) {
+ case AD7280A_IIO_EVENT_CODE:
+ iio_push_event(indio_dev,
+ IIO_EVENT_CODE(iio_chan_t,
+ diff,
+ modifier,
+ iio_event_dir,
+ iio_event_t,
+ chan,
+ chan1,
+ chan2),
+ iio_get_time_ns(indio_dev));
+ break;
+ case AD7280A_IIO_MOD_EVENT_CODE:
+ iio_push_event(indio_dev,
+ IIO_MOD_EVENT_CODE(iio_chan_t,
+ number,
+ modifier,
+ iio_event_t,
+ iio_event_dir),
+ iio_get_time_ns(indio_dev));
+ break;
+ case AD7280A_IIO_UNMOD_EVENT_CODE:
+ iio_push_event(indio_dev,
+ IIO_UNMOD_EVENT_CODE(iio_chan_t,
+ number,
+ iio_event_t,
+ iio_event_dir),
+ iio_get_time_ns(indio_dev));
+ break;
+ }
+}
+
static irqreturn_t ad7280_event_handler(int irq, void *private)
{
struct iio_dev *indio_dev = private;
@@ -698,42 +745,44 @@ static irqreturn_t ad7280_event_handler(int irq, void *private)
if (((channels[i] >> 23) & 0xF) <= AD7280A_CELL_VOLTAGE_6) {
if (((channels[i] >> 11) & 0xFFF) >=
st->cell_threshhigh)
- iio_push_event(indio_dev,
- IIO_EVENT_CODE(IIO_VOLTAGE,
- 1,
- 0,
- IIO_EV_DIR_RISING,
- IIO_EV_TYPE_THRESH,
- 0, 0, 0),
- iio_get_time_ns(indio_dev));
+ ad7280a_push_event(indio_dev,
+ AD7280A_IIO_EVENT_CODE,
+ IIO_VOLTAGE,
+ 1,
+ 0,
+ IIO_EV_DIR_RISING,
+ IIO_EV_TYPE_THRESH,
+ 0, 0, 0, 0);
else if (((channels[i] >> 11) & 0xFFF) <=
st->cell_threshlow)
- iio_push_event(indio_dev,
- IIO_EVENT_CODE(IIO_VOLTAGE,
- 1,
- 0,
- IIO_EV_DIR_FALLING,
- IIO_EV_TYPE_THRESH,
- 0, 0, 0),
- iio_get_time_ns(indio_dev));
+ ad7280a_push_event(indio_dev,
+ AD7280A_IIO_EVENT_CODE,
+ IIO_VOLTAGE,
+ 1,
+ 0,
+ IIO_EV_DIR_FALLING,
+ IIO_EV_TYPE_THRESH,
+ 0, 0, 0, 0);
} else {
if (((channels[i] >> 11) & 0xFFF) >= st->aux_threshhigh)
- iio_push_event(indio_dev,
- IIO_UNMOD_EVENT_CODE(
- IIO_TEMP,
- 0,
- IIO_EV_TYPE_THRESH,
- IIO_EV_DIR_RISING),
- iio_get_time_ns(indio_dev));
+ ad7280a_push_event(indio_dev,
+ AD7280A_IIO_UNMOD_EVENT_CODE,
+ IIO_TEMP,
+ 0,
+ 0,
+ IIO_EV_DIR_RISING,
+ IIO_EV_TYPE_THRESH,
+ 0, 0, 0, 0);
else if (((channels[i] >> 11) & 0xFFF) <=
st->aux_threshlow)
- iio_push_event(indio_dev,
- IIO_UNMOD_EVENT_CODE(
- IIO_TEMP,
- 0,
- IIO_EV_TYPE_THRESH,
- IIO_EV_DIR_FALLING),
- iio_get_time_ns(indio_dev));
+ ad7280a_push_event(indio_dev,
+ AD7280A_IIO_UNMOD_EVENT_CODE,
+ IIO_TEMP,
+ 0,
+ 0,
+ IIO_EV_DIR_FALLING,
+ IIO_EV_TYPE_THRESH,
+ 0, 0, 0, 0);
}
}

@@ -745,26 +794,26 @@ static irqreturn_t ad7280_event_handler(int irq, void *private)

static IIO_DEVICE_ATTR_NAMED(in_thresh_low_value,
in_voltage-voltage_thresh_low_value,
- S_IRUGO | S_IWUSR,
+ 0644,
ad7280_read_channel_config,
ad7280_write_channel_config,
AD7280A_CELL_UNDERVOLTAGE);

static IIO_DEVICE_ATTR_NAMED(in_thresh_high_value,
in_voltage-voltage_thresh_high_value,
- S_IRUGO | S_IWUSR,
+ 0644,
ad7280_read_channel_config,
ad7280_write_channel_config,
AD7280A_CELL_OVERVOLTAGE);

static IIO_DEVICE_ATTR(in_temp_thresh_low_value,
- S_IRUGO | S_IWUSR,
+ 0644,
ad7280_read_channel_config,
ad7280_write_channel_config,
AD7280A_AUX_ADC_UNDERVOLTAGE);

static IIO_DEVICE_ATTR(in_temp_thresh_high_value,
- S_IRUGO | S_IWUSR,
+ 0644,
ad7280_read_channel_config,
ad7280_write_channel_config,
AD7280A_AUX_ADC_OVERVOLTAGE);
@@ -836,8 +885,8 @@ static int ad7280_probe(struct spi_device *spi)
const struct ad7280_platform_data *pdata = dev_get_platdata(&spi->dev);
struct ad7280_state *st;
int ret;
- const unsigned short tACQ_ns[4] = {465, 1010, 1460, 1890};
- const unsigned short nAVG[4] = {1, 2, 4, 8};
+ const unsigned short t_acq_ns[4] = {465, 1010, 1460, 1890};
+ const unsigned short n_avg[4] = {1, 2, 4, 8};
struct iio_dev *indio_dev;

indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
@@ -880,9 +929,9 @@ static int ad7280_probe(struct spi_device *spi)
*/

st->readback_delay_us =
- ((tACQ_ns[pdata->acquisition_time & 0x3] + 695) *
- (AD7280A_NUM_CH * nAVG[pdata->conversion_averaging & 0x3]))
- - tACQ_ns[pdata->acquisition_time & 0x3] +
+ ((t_acq_ns[pdata->acquisition_time & 0x3] + 695) *
+ (AD7280A_NUM_CH * n_avg[pdata->conversion_averaging & 0x3]))
+ - t_acq_ns[pdata->acquisition_time & 0x3] +
st->slave_num * 250;

/* Convert to usecs */
diff --git a/drivers/staging/iio/adc/ad7280a.h b/drivers/staging/iio/adc/ad7280a.h
index ccfb90d20e71..157c33e0e128 100644
--- a/drivers/staging/iio/adc/ad7280a.h
+++ b/drivers/staging/iio/adc/ad7280a.h
@@ -35,4 +35,10 @@ struct ad7280_platform_data {
bool thermistor_term_en;
};

+enum event_code_type {
+ AD7280A_IIO_EVENT_CODE,
+ AD7280A_IIO_MOD_EVENT_CODE,
+ AD7280A_IIO_UNMOD_EVENT_CODE,
+};
+
#endif /* IIO_ADC_AD7280_H_ */
--
2.7.4