static int lpc32xx_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) { struct lpc32xx_adc_info *info = iio_priv(indio_dev); if (mask == IIO_CHAN_INFO_RAW) { mutex_lock(&indio_dev->mlock); clk_prepare_enable(info->clk); /* Measurement setup */ __raw_writel(AD_INTERNAL | (chan->address) | AD_REFp | AD_REFm, LPC32XX_ADC_SELECT(info->adc_base)); /* Trigger conversion */ __raw_writel(AD_PDN_CTRL | AD_STROBE, LPC32XX_ADC_CTRL(info->adc_base)); wait_for_completion(&info->completion); /* set by ISR */ clk_disable_unprepare(info->clk); *val = info->value; mutex_unlock(&indio_dev->mlock); return IIO_VAL_INT; } return -EINVAL; }
static int lpc32xx_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) { struct lpc32xx_adc_info *info = iio_priv(indio_dev); if (mask == 0) { mutex_lock(&indio_dev->mlock); clk_enable(info->clk); __raw_writel(AD_INTERNAL | (chan->address) | AD_REFp | AD_REFm, LPC32XX_ADC_SELECT(info->adc_base)); __raw_writel(AD_PDN_CTRL | AD_STROBE, LPC32XX_ADC_CTRL(info->adc_base)); wait_for_completion(&info->completion); clk_disable(info->clk); *val = info->value; mutex_unlock(&indio_dev->mlock); return IIO_VAL_INT; } return -EINVAL; }