On 09/04/16 12:12, Slawomir Stepien wrote: > On Apr 08, 2016 23:27, Slawomir Stepien wrote: >> +static int ds1803_read_raw(struct iio_dev *indio_dev, >> + struct iio_chan_spec const *chan, >> + int *val, int *val2, long mask) >> +{ >> + struct ds1803_data *data = iio_priv(indio_dev); >> + int pot = chan->channel; >> + int ret; >> + u16 result; >> + >> + switch (mask) { >> + case IIO_CHAN_INFO_RAW: >> + ret = i2c_master_recv(data->client, (char *)&result, >> + indio_dev->num_channels); >> + if (ret < 0) >> + return ret; >> + >> + /* Get bits for given pot */ >> + *val = (pot == 0 ? result & 0xff : result >> 8); >> + return IIO_VAL_INT; >> + >> + case IIO_CHAN_INFO_SCALE: >> + *val = 1000 * data->cfg->kohms; >> + *val2 = DS1803_MAX_POS; >> + return IIO_VAL_FRACTIONAL; >> + } >> + >> + return -EINVAL; >> +} > > Or maybe this is more clean? > > static int ds1803_read_raw(struct iio_dev *indio_dev, > struct iio_chan_spec const *chan, > int *val, int *val2, long mask) > { > struct ds1803_data *data = iio_priv(indio_dev); > int pot = chan->channel; > int ret; > unsigned char result[indio_dev->num_channels]; I'd use u8 to make it of an explicit size but otherwise this is indeed a little bit cleaner. > > switch (mask) { > case IIO_CHAN_INFO_RAW: > ret = i2c_master_recv(data->client, result, > indio_dev->num_channels); > if (ret < 0) > return ret; > > *val = result[pot]; > return IIO_VAL_INT; > > case IIO_CHAN_INFO_SCALE: > *val = 1000 * data->cfg->kohms; > *val2 = DS1803_MAX_POS; > return IIO_VAL_FRACTIONAL; > } > > return -EINVAL; > } > > What do you think? > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html