All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Juergen Beisert <jbe@pengutronix.de>, linux-iio@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org, devel@driverdev.osuosl.org,
	marex@denx.de, fabio.estevam@freescale.com, jic23@cam.ac.uk,
	linux-input@vger.kernel.org
Subject: Re: [PATCH 4/9] Staging/iio/adc/touchscreen/MXS: simplify register access
Date: Tue, 01 Oct 2013 12:01:52 +0100	[thread overview]
Message-ID: <524AABA0.8040807@kernel.org> (raw)
In-Reply-To: <1379946998-23041-5-git-send-email-jbe@pengutronix.de>

On 09/23/13 15:36, Juergen Beisert wrote:
> Replace the individual register access by a few shared access function to make the
> code easier to read and in order to add the i.MX23 SoC in the next step.
> 
> Signed-off-by: Juergen Beisert <jbe@pengutronix.de>
> CC: linux-arm-kernel@lists.infradead.org
> CC: linux-input@vger.kernel.org
> CC: devel@driverdev.osuosl.org
> CC: Marek Vasut <marex@denx.de>
> CC: Fabio Estevam <fabio.estevam@freescale.com>
> CC: Jonathan Cameron <jic23@cam.ac.uk>
Applied to the togreg branch of iio.git

Thanks,

Jonathan
> ---
>  drivers/staging/iio/adc/mxs-lradc.c | 204 +++++++++++++++++++++---------------
>  1 file changed, 120 insertions(+), 84 deletions(-)
> 
> diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
> index f2fb10a..dd47ec2 100644
> --- a/drivers/staging/iio/adc/mxs-lradc.c
> +++ b/drivers/staging/iio/adc/mxs-lradc.c
> @@ -238,6 +238,56 @@ struct mxs_lradc {
>  #define LRADC_RESOLUTION			12
>  #define LRADC_SINGLE_SAMPLE_MASK		((1 << LRADC_RESOLUTION) - 1)
>  
> +static void mxs_lradc_reg_set(struct mxs_lradc *lradc, u32 val, u32 reg)
> +{
> +	writel(val, lradc->base + reg + STMP_OFFSET_REG_SET);
> +}
> +
> +static void mxs_lradc_reg_clear(struct mxs_lradc *lradc, u32 val, u32 reg)
> +{
> +	writel(val, lradc->base + reg + STMP_OFFSET_REG_CLR);
> +}
> +
> +static void mxs_lradc_reg_wrt(struct mxs_lradc *lradc, u32 val, u32 reg)
> +{
> +	writel(val, lradc->base + reg);
> +}
> +
> +static u32 mxs_lradc_plate_mask(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_PLATE_MASK;
> +}
> +
> +static u32 mxs_lradc_irq_en_mask(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK;
> +}
> +
> +static u32 mxs_lradc_irq_mask(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL1_MX28_LRADC_IRQ_MASK;
> +}
> +
> +static u32 mxs_lradc_touch_detect_bit(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE;
> +}
> +
> +static u32 mxs_lradc_drive_x_plate(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_XPPSW | LRADC_CTRL0_MX28_XNNSW;
> +}
> +
> +static u32 mxs_lradc_drive_y_plate(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_YNNSW;
> +}
> +
> +static u32 mxs_lradc_drive_pressure(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_XNNSW;
> +}
> +
>  /*
>   * Raw I/O operations
>   */
> @@ -272,21 +322,19 @@ static int mxs_lradc_read_raw(struct iio_dev *iio_dev,
>  	 * Virtual channel 0 is always used here as the others are always not
>  	 * used if doing raw sampling.
>  	 */
> -	writel(LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> -	writel(0xff, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> +			LRADC_CTRL1);
> +	mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0);
>  
>  	/* Clean the slot's previous content, then set new one. */
> -	writel(LRADC_CTRL4_LRADCSELECT_MASK(0),
> -		lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_CLR);
> -	writel(chan->channel, lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL4_LRADCSELECT_MASK(0), LRADC_CTRL4);
> +	mxs_lradc_reg_set(lradc, chan->channel, LRADC_CTRL4);
>  
> -	writel(0, lradc->base + LRADC_CH(0));
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_CH(0));
>  
>  	/* Enable the IRQ and start sampling the channel. */
> -	writel(LRADC_CTRL1_LRADC_IRQ_EN(0),
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_SET);
> -	writel(1 << 0, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_set(lradc, LRADC_CTRL1_LRADC_IRQ_EN(0), LRADC_CTRL1);
> +	mxs_lradc_reg_set(lradc, 1 << 0, LRADC_CTRL0);
>  
>  	/* Wait for completion on the channel, 1 second max. */
>  	ret = wait_for_completion_killable_timeout(&lradc->completion, HZ);
> @@ -300,8 +348,7 @@ static int mxs_lradc_read_raw(struct iio_dev *iio_dev,
>  	ret = IIO_VAL_INT;
>  
>  err:
> -	writel(LRADC_CTRL1_LRADC_IRQ_EN(0),
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_LRADC_IRQ_EN(0), LRADC_CTRL1);
>  
>  	mutex_unlock(&lradc->lock);
>  
> @@ -327,10 +374,9 @@ static int mxs_lradc_ts_touched(struct mxs_lradc *lradc)
>  	uint32_t reg;
>  
>  	/* Enable touch detection. */
> -	writel(LRADC_CTRL0_MX28_PLATE_MASK,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> -	writel(LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, mxs_lradc_plate_mask(lradc), LRADC_CTRL0);
> +	mxs_lradc_reg_set(lradc, mxs_lradc_touch_detect_bit(lradc),
> +								LRADC_CTRL0);
>  
>  	msleep(LRADC_TS_SAMPLE_DELAY_MS);
>  
> @@ -375,32 +421,33 @@ static int32_t mxs_lradc_ts_sample(struct mxs_lradc *lradc,
>  	 */
>  	switch (plate) {
>  	case LRADC_SAMPLE_X:
> -		ctrl0 = LRADC_CTRL0_MX28_XPPSW | LRADC_CTRL0_MX28_XNNSW;
> +		ctrl0 = mxs_lradc_drive_x_plate(lradc);
>  		chan = 3;
>  		break;
>  	case LRADC_SAMPLE_Y:
> -		ctrl0 = LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_YNNSW;
> +		ctrl0 = mxs_lradc_drive_y_plate(lradc);
>  		chan = 4;
>  		break;
>  	case LRADC_SAMPLE_PRESSURE:
> -		ctrl0 = LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_XNNSW;
> +		ctrl0 = mxs_lradc_drive_pressure(lradc);
>  		chan = 5;
>  		break;
>  	}
>  
>  	if (change) {
> -		writel(LRADC_CTRL0_MX28_PLATE_MASK,
> -			lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> -		writel(ctrl0, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> -
> -		writel(LRADC_CTRL4_LRADCSELECT_MASK(slot),
> -			lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_CLR);
> -		writel(chan << LRADC_CTRL4_LRADCSELECT_OFFSET(slot),
> -			lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_SET);
> +		mxs_lradc_reg_clear(lradc, mxs_lradc_plate_mask(lradc),
> +						LRADC_CTRL0);
> +		mxs_lradc_reg_set(lradc, ctrl0, LRADC_CTRL0);
> +
> +		mxs_lradc_reg_clear(lradc, LRADC_CTRL4_LRADCSELECT_MASK(slot),
> +						LRADC_CTRL4);
> +		mxs_lradc_reg_set(lradc,
> +				chan << LRADC_CTRL4_LRADCSELECT_OFFSET(slot),
> +				LRADC_CTRL4);
>  	}
>  
> -	writel(0xffffffff, lradc->base + LRADC_CH(slot) + STMP_OFFSET_REG_CLR);
> -	writel(1 << slot, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, 0xffffffff, LRADC_CH(slot));
> +	mxs_lradc_reg_set(lradc, 1 << slot, LRADC_CTRL0);
>  
>  	delay = jiffies + msecs_to_jiffies(LRADC_TS_SAMPLE_DELAY_MS);
>  	do {
> @@ -410,8 +457,7 @@ static int32_t mxs_lradc_ts_sample(struct mxs_lradc *lradc,
>  			break;
>  	} while (time_before(jiff, delay));
>  
> -	writel(LRADC_CTRL1_LRADC_IRQ(slot),
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_LRADC_IRQ(slot), LRADC_CTRL1);
>  
>  	if (time_after_eq(jiff, delay))
>  		return -ETIMEDOUT;
> @@ -450,8 +496,8 @@ static void mxs_lradc_ts_work(struct work_struct *ts_work)
>  
>  	while (mxs_lradc_ts_touched(lradc)) {
>  		/* Disable touch detector so we can sample the touchscreen. */
> -		writel(LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE,
> -			lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +		mxs_lradc_reg_clear(lradc, mxs_lradc_touch_detect_bit(lradc),
> +						LRADC_CTRL0);
>  
>  		if (likely(valid)) {
>  			input_report_abs(lradc->ts_input, ABS_X, val_x);
> @@ -485,10 +531,8 @@ static void mxs_lradc_ts_work(struct work_struct *ts_work)
>  		return;
>  
>  	/* Restart the touchscreen interrupts. */
> -	writel(LRADC_CTRL1_TOUCH_DETECT_IRQ,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> -	writel(LRADC_CTRL1_TOUCH_DETECT_IRQ_EN,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ, LRADC_CTRL1);
> +	mxs_lradc_reg_set(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN, LRADC_CTRL1);
>  }
>  
>  static int mxs_lradc_ts_open(struct input_dev *dev)
> @@ -499,12 +543,11 @@ static int mxs_lradc_ts_open(struct input_dev *dev)
>  	lradc->stop_touchscreen = false;
>  
>  	/* Enable the touch-detect circuitry. */
> -	writel(LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_set(lradc, mxs_lradc_touch_detect_bit(lradc),
> +						LRADC_CTRL0);
>  
>  	/* Enable the touch-detect IRQ. */
> -	writel(LRADC_CTRL1_TOUCH_DETECT_IRQ_EN,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_set(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN, LRADC_CTRL1);
>  
>  	return 0;
>  }
> @@ -521,12 +564,11 @@ static void mxs_lradc_ts_close(struct input_dev *dev)
>  	cancel_work_sync(&lradc->ts_work);
>  
>  	/* Disable touchscreen touch-detect IRQ. */
> -	writel(LRADC_CTRL1_TOUCH_DETECT_IRQ_EN,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN,
> +						LRADC_CTRL1);
>  
>  	/* Power-down touchscreen touch-detect circuitry. */
> -	writel(LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, mxs_lradc_touch_detect_bit(lradc), LRADC_CTRL0);
>  }
>  
>  static int mxs_lradc_ts_register(struct mxs_lradc *lradc)
> @@ -589,7 +631,7 @@ static irqreturn_t mxs_lradc_handle_irq(int irq, void *data)
>  		LRADC_CTRL1_TOUCH_DETECT_IRQ_EN |
>  		LRADC_CTRL1_TOUCH_DETECT_IRQ;
>  
> -	if (!(reg & LRADC_CTRL1_MX28_LRADC_IRQ_MASK))
> +	if (!(reg & mxs_lradc_irq_mask(lradc)))
>  		return IRQ_NONE;
>  
>  	/*
> @@ -598,8 +640,7 @@ static irqreturn_t mxs_lradc_handle_irq(int irq, void *data)
>  	 * it ASAP
>  	 */
>  	if (reg & LRADC_CTRL1_TOUCH_DETECT_IRQ) {
> -		writel(ts_irq_mask,
> -			lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +		mxs_lradc_reg_clear(lradc, ts_irq_mask, LRADC_CTRL1);
>  		if (!lradc->stop_touchscreen)
>  			schedule_work(&lradc->ts_work);
>  	}
> @@ -609,8 +650,7 @@ static irqreturn_t mxs_lradc_handle_irq(int irq, void *data)
>  	else if (reg & LRADC_CTRL1_LRADC_IRQ(0))
>  		complete(&lradc->completion);
>  
> -	writel(reg & LRADC_CTRL1_MX28_LRADC_IRQ_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, reg & mxs_lradc_irq_mask(lradc), LRADC_CTRL1);
>  
>  	return IRQ_HANDLED;
>  }
> @@ -629,7 +669,7 @@ static irqreturn_t mxs_lradc_trigger_handler(int irq, void *p)
>  
>  	for_each_set_bit(i, iio->active_scan_mask, LRADC_MAX_TOTAL_CHANS) {
>  		lradc->buffer[j] = readl(lradc->base + LRADC_CH(j));
> -		writel(chan_value, lradc->base + LRADC_CH(j));
> +		mxs_lradc_reg_wrt(lradc, chan_value, LRADC_CH(j));
>  		lradc->buffer[j] &= LRADC_CH_VALUE_MASK;
>  		lradc->buffer[j] /= LRADC_DELAY_TIMER_LOOP;
>  		j++;
> @@ -654,7 +694,7 @@ static int mxs_lradc_configure_trigger(struct iio_trigger *trig, bool state)
>  	struct mxs_lradc *lradc = iio_priv(iio);
>  	const uint32_t st = state ? STMP_OFFSET_REG_SET : STMP_OFFSET_REG_CLR;
>  
> -	writel(LRADC_DELAY_KICK, lradc->base + LRADC_DELAY(0) + st);
> +	mxs_lradc_reg_wrt(lradc, LRADC_DELAY_KICK, LRADC_DELAY(0) + st);
>  
>  	return 0;
>  }
> @@ -730,29 +770,26 @@ static int mxs_lradc_buffer_preenable(struct iio_dev *iio)
>  	if (ret < 0)
>  		goto err_buf;
>  
> -	writel(LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> -	writel(0xff, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> +							LRADC_CTRL1);
> +	mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0);
>  
>  	for_each_set_bit(chan, iio->active_scan_mask, LRADC_MAX_TOTAL_CHANS) {
>  		ctrl4_set |= chan << LRADC_CTRL4_LRADCSELECT_OFFSET(ofs);
>  		ctrl4_clr |= LRADC_CTRL4_LRADCSELECT_MASK(ofs);
>  		ctrl1_irq |= LRADC_CTRL1_LRADC_IRQ_EN(ofs);
> -		writel(chan_value, lradc->base + LRADC_CH(ofs));
> +		mxs_lradc_reg_wrt(lradc, chan_value, LRADC_CH(ofs));
>  		bitmap_set(&enable, ofs, 1);
>  		ofs++;
>  	}
>  
> -	writel(LRADC_DELAY_TRIGGER_LRADCS_MASK | LRADC_DELAY_KICK,
> -		lradc->base + LRADC_DELAY(0) + STMP_OFFSET_REG_CLR);
> -
> -	writel(ctrl4_clr, lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_CLR);
> -	writel(ctrl4_set, lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_SET);
> -
> -	writel(ctrl1_irq, lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_SET);
> -
> -	writel(enable << LRADC_DELAY_TRIGGER_LRADCS_OFFSET,
> -		lradc->base + LRADC_DELAY(0) + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, LRADC_DELAY_TRIGGER_LRADCS_MASK |
> +					LRADC_DELAY_KICK, LRADC_DELAY(0));
> +	mxs_lradc_reg_clear(lradc, ctrl4_clr, LRADC_CTRL4);
> +	mxs_lradc_reg_set(lradc, ctrl4_set, LRADC_CTRL4);
> +	mxs_lradc_reg_set(lradc, ctrl1_irq, LRADC_CTRL1);
> +	mxs_lradc_reg_set(lradc, enable << LRADC_DELAY_TRIGGER_LRADCS_OFFSET,
> +					LRADC_DELAY(0));
>  
>  	return 0;
>  
> @@ -767,12 +804,12 @@ static int mxs_lradc_buffer_postdisable(struct iio_dev *iio)
>  {
>  	struct mxs_lradc *lradc = iio_priv(iio);
>  
> -	writel(LRADC_DELAY_TRIGGER_LRADCS_MASK | LRADC_DELAY_KICK,
> -		lradc->base + LRADC_DELAY(0) + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_DELAY_TRIGGER_LRADCS_MASK |
> +					LRADC_DELAY_KICK, LRADC_DELAY(0));
>  
> -	writel(0xff, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> -	writel(LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> +					LRADC_CTRL1);
>  
>  	kfree(lradc->buffer);
>  	mutex_unlock(&lradc->lock);
> @@ -867,24 +904,24 @@ static int mxs_lradc_hw_init(struct mxs_lradc *lradc)
>  		return ret;
>  
>  	/* Configure DELAY CHANNEL 0 for generic ADC sampling. */
> -	writel(adc_cfg, lradc->base + LRADC_DELAY(0));
> +	mxs_lradc_reg_wrt(lradc, adc_cfg, LRADC_DELAY(0));
>  
>  	/* Disable remaining DELAY CHANNELs */
> -	writel(0, lradc->base + LRADC_DELAY(1));
> -	writel(0, lradc->base + LRADC_DELAY(2));
> -	writel(0, lradc->base + LRADC_DELAY(3));
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(1));
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(2));
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(3));
>  
>  	/* Configure the touchscreen type */
> -	writel(LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
> +							LRADC_CTRL0);
>  
> -	if (lradc->use_touchscreen == MXS_LRADC_TOUCHSCREEN_5WIRE) {
> -		writel(LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
> -			lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	if (lradc->use_touchscreen == MXS_LRADC_TOUCHSCREEN_5WIRE)
> +		mxs_lradc_reg_set(lradc, LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
> +				LRADC_CTRL0);
>  	}
>  
>  	/* Start internal temperature sensing. */
> -	writel(0, lradc->base + LRADC_CTRL2);
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_CTRL2);
>  
>  	return 0;
>  }
> @@ -893,11 +930,10 @@ static void mxs_lradc_hw_stop(struct mxs_lradc *lradc)
>  {
>  	int i;
>  
> -	writel(LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, mxs_lradc_irq_en_mask(lradc), LRADC_CTRL1);
>  
>  	for (i = 0; i < LRADC_MAX_DELAY_CHANS; i++)
> -		writel(0, lradc->base + LRADC_DELAY(i));
> +		mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(i));
>  }
>  
>  static const struct of_device_id mxs_lradc_dt_ids[] = {
> 

WARNING: multiple messages have this Message-ID (diff)
From: jic23@kernel.org (Jonathan Cameron)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 4/9] Staging/iio/adc/touchscreen/MXS: simplify register access
Date: Tue, 01 Oct 2013 12:01:52 +0100	[thread overview]
Message-ID: <524AABA0.8040807@kernel.org> (raw)
In-Reply-To: <1379946998-23041-5-git-send-email-jbe@pengutronix.de>

On 09/23/13 15:36, Juergen Beisert wrote:
> Replace the individual register access by a few shared access function to make the
> code easier to read and in order to add the i.MX23 SoC in the next step.
> 
> Signed-off-by: Juergen Beisert <jbe@pengutronix.de>
> CC: linux-arm-kernel at lists.infradead.org
> CC: linux-input at vger.kernel.org
> CC: devel at driverdev.osuosl.org
> CC: Marek Vasut <marex@denx.de>
> CC: Fabio Estevam <fabio.estevam@freescale.com>
> CC: Jonathan Cameron <jic23@cam.ac.uk>
Applied to the togreg branch of iio.git

Thanks,

Jonathan
> ---
>  drivers/staging/iio/adc/mxs-lradc.c | 204 +++++++++++++++++++++---------------
>  1 file changed, 120 insertions(+), 84 deletions(-)
> 
> diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
> index f2fb10a..dd47ec2 100644
> --- a/drivers/staging/iio/adc/mxs-lradc.c
> +++ b/drivers/staging/iio/adc/mxs-lradc.c
> @@ -238,6 +238,56 @@ struct mxs_lradc {
>  #define LRADC_RESOLUTION			12
>  #define LRADC_SINGLE_SAMPLE_MASK		((1 << LRADC_RESOLUTION) - 1)
>  
> +static void mxs_lradc_reg_set(struct mxs_lradc *lradc, u32 val, u32 reg)
> +{
> +	writel(val, lradc->base + reg + STMP_OFFSET_REG_SET);
> +}
> +
> +static void mxs_lradc_reg_clear(struct mxs_lradc *lradc, u32 val, u32 reg)
> +{
> +	writel(val, lradc->base + reg + STMP_OFFSET_REG_CLR);
> +}
> +
> +static void mxs_lradc_reg_wrt(struct mxs_lradc *lradc, u32 val, u32 reg)
> +{
> +	writel(val, lradc->base + reg);
> +}
> +
> +static u32 mxs_lradc_plate_mask(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_PLATE_MASK;
> +}
> +
> +static u32 mxs_lradc_irq_en_mask(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK;
> +}
> +
> +static u32 mxs_lradc_irq_mask(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL1_MX28_LRADC_IRQ_MASK;
> +}
> +
> +static u32 mxs_lradc_touch_detect_bit(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE;
> +}
> +
> +static u32 mxs_lradc_drive_x_plate(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_XPPSW | LRADC_CTRL0_MX28_XNNSW;
> +}
> +
> +static u32 mxs_lradc_drive_y_plate(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_YNNSW;
> +}
> +
> +static u32 mxs_lradc_drive_pressure(struct mxs_lradc *lradc)
> +{
> +	return LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_XNNSW;
> +}
> +
>  /*
>   * Raw I/O operations
>   */
> @@ -272,21 +322,19 @@ static int mxs_lradc_read_raw(struct iio_dev *iio_dev,
>  	 * Virtual channel 0 is always used here as the others are always not
>  	 * used if doing raw sampling.
>  	 */
> -	writel(LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> -	writel(0xff, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> +			LRADC_CTRL1);
> +	mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0);
>  
>  	/* Clean the slot's previous content, then set new one. */
> -	writel(LRADC_CTRL4_LRADCSELECT_MASK(0),
> -		lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_CLR);
> -	writel(chan->channel, lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL4_LRADCSELECT_MASK(0), LRADC_CTRL4);
> +	mxs_lradc_reg_set(lradc, chan->channel, LRADC_CTRL4);
>  
> -	writel(0, lradc->base + LRADC_CH(0));
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_CH(0));
>  
>  	/* Enable the IRQ and start sampling the channel. */
> -	writel(LRADC_CTRL1_LRADC_IRQ_EN(0),
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_SET);
> -	writel(1 << 0, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_set(lradc, LRADC_CTRL1_LRADC_IRQ_EN(0), LRADC_CTRL1);
> +	mxs_lradc_reg_set(lradc, 1 << 0, LRADC_CTRL0);
>  
>  	/* Wait for completion on the channel, 1 second max. */
>  	ret = wait_for_completion_killable_timeout(&lradc->completion, HZ);
> @@ -300,8 +348,7 @@ static int mxs_lradc_read_raw(struct iio_dev *iio_dev,
>  	ret = IIO_VAL_INT;
>  
>  err:
> -	writel(LRADC_CTRL1_LRADC_IRQ_EN(0),
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_LRADC_IRQ_EN(0), LRADC_CTRL1);
>  
>  	mutex_unlock(&lradc->lock);
>  
> @@ -327,10 +374,9 @@ static int mxs_lradc_ts_touched(struct mxs_lradc *lradc)
>  	uint32_t reg;
>  
>  	/* Enable touch detection. */
> -	writel(LRADC_CTRL0_MX28_PLATE_MASK,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> -	writel(LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, mxs_lradc_plate_mask(lradc), LRADC_CTRL0);
> +	mxs_lradc_reg_set(lradc, mxs_lradc_touch_detect_bit(lradc),
> +								LRADC_CTRL0);
>  
>  	msleep(LRADC_TS_SAMPLE_DELAY_MS);
>  
> @@ -375,32 +421,33 @@ static int32_t mxs_lradc_ts_sample(struct mxs_lradc *lradc,
>  	 */
>  	switch (plate) {
>  	case LRADC_SAMPLE_X:
> -		ctrl0 = LRADC_CTRL0_MX28_XPPSW | LRADC_CTRL0_MX28_XNNSW;
> +		ctrl0 = mxs_lradc_drive_x_plate(lradc);
>  		chan = 3;
>  		break;
>  	case LRADC_SAMPLE_Y:
> -		ctrl0 = LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_YNNSW;
> +		ctrl0 = mxs_lradc_drive_y_plate(lradc);
>  		chan = 4;
>  		break;
>  	case LRADC_SAMPLE_PRESSURE:
> -		ctrl0 = LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_XNNSW;
> +		ctrl0 = mxs_lradc_drive_pressure(lradc);
>  		chan = 5;
>  		break;
>  	}
>  
>  	if (change) {
> -		writel(LRADC_CTRL0_MX28_PLATE_MASK,
> -			lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> -		writel(ctrl0, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> -
> -		writel(LRADC_CTRL4_LRADCSELECT_MASK(slot),
> -			lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_CLR);
> -		writel(chan << LRADC_CTRL4_LRADCSELECT_OFFSET(slot),
> -			lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_SET);
> +		mxs_lradc_reg_clear(lradc, mxs_lradc_plate_mask(lradc),
> +						LRADC_CTRL0);
> +		mxs_lradc_reg_set(lradc, ctrl0, LRADC_CTRL0);
> +
> +		mxs_lradc_reg_clear(lradc, LRADC_CTRL4_LRADCSELECT_MASK(slot),
> +						LRADC_CTRL4);
> +		mxs_lradc_reg_set(lradc,
> +				chan << LRADC_CTRL4_LRADCSELECT_OFFSET(slot),
> +				LRADC_CTRL4);
>  	}
>  
> -	writel(0xffffffff, lradc->base + LRADC_CH(slot) + STMP_OFFSET_REG_CLR);
> -	writel(1 << slot, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, 0xffffffff, LRADC_CH(slot));
> +	mxs_lradc_reg_set(lradc, 1 << slot, LRADC_CTRL0);
>  
>  	delay = jiffies + msecs_to_jiffies(LRADC_TS_SAMPLE_DELAY_MS);
>  	do {
> @@ -410,8 +457,7 @@ static int32_t mxs_lradc_ts_sample(struct mxs_lradc *lradc,
>  			break;
>  	} while (time_before(jiff, delay));
>  
> -	writel(LRADC_CTRL1_LRADC_IRQ(slot),
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_LRADC_IRQ(slot), LRADC_CTRL1);
>  
>  	if (time_after_eq(jiff, delay))
>  		return -ETIMEDOUT;
> @@ -450,8 +496,8 @@ static void mxs_lradc_ts_work(struct work_struct *ts_work)
>  
>  	while (mxs_lradc_ts_touched(lradc)) {
>  		/* Disable touch detector so we can sample the touchscreen. */
> -		writel(LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE,
> -			lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +		mxs_lradc_reg_clear(lradc, mxs_lradc_touch_detect_bit(lradc),
> +						LRADC_CTRL0);
>  
>  		if (likely(valid)) {
>  			input_report_abs(lradc->ts_input, ABS_X, val_x);
> @@ -485,10 +531,8 @@ static void mxs_lradc_ts_work(struct work_struct *ts_work)
>  		return;
>  
>  	/* Restart the touchscreen interrupts. */
> -	writel(LRADC_CTRL1_TOUCH_DETECT_IRQ,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> -	writel(LRADC_CTRL1_TOUCH_DETECT_IRQ_EN,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ, LRADC_CTRL1);
> +	mxs_lradc_reg_set(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN, LRADC_CTRL1);
>  }
>  
>  static int mxs_lradc_ts_open(struct input_dev *dev)
> @@ -499,12 +543,11 @@ static int mxs_lradc_ts_open(struct input_dev *dev)
>  	lradc->stop_touchscreen = false;
>  
>  	/* Enable the touch-detect circuitry. */
> -	writel(LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_set(lradc, mxs_lradc_touch_detect_bit(lradc),
> +						LRADC_CTRL0);
>  
>  	/* Enable the touch-detect IRQ. */
> -	writel(LRADC_CTRL1_TOUCH_DETECT_IRQ_EN,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_set(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN, LRADC_CTRL1);
>  
>  	return 0;
>  }
> @@ -521,12 +564,11 @@ static void mxs_lradc_ts_close(struct input_dev *dev)
>  	cancel_work_sync(&lradc->ts_work);
>  
>  	/* Disable touchscreen touch-detect IRQ. */
> -	writel(LRADC_CTRL1_TOUCH_DETECT_IRQ_EN,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN,
> +						LRADC_CTRL1);
>  
>  	/* Power-down touchscreen touch-detect circuitry. */
> -	writel(LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, mxs_lradc_touch_detect_bit(lradc), LRADC_CTRL0);
>  }
>  
>  static int mxs_lradc_ts_register(struct mxs_lradc *lradc)
> @@ -589,7 +631,7 @@ static irqreturn_t mxs_lradc_handle_irq(int irq, void *data)
>  		LRADC_CTRL1_TOUCH_DETECT_IRQ_EN |
>  		LRADC_CTRL1_TOUCH_DETECT_IRQ;
>  
> -	if (!(reg & LRADC_CTRL1_MX28_LRADC_IRQ_MASK))
> +	if (!(reg & mxs_lradc_irq_mask(lradc)))
>  		return IRQ_NONE;
>  
>  	/*
> @@ -598,8 +640,7 @@ static irqreturn_t mxs_lradc_handle_irq(int irq, void *data)
>  	 * it ASAP
>  	 */
>  	if (reg & LRADC_CTRL1_TOUCH_DETECT_IRQ) {
> -		writel(ts_irq_mask,
> -			lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +		mxs_lradc_reg_clear(lradc, ts_irq_mask, LRADC_CTRL1);
>  		if (!lradc->stop_touchscreen)
>  			schedule_work(&lradc->ts_work);
>  	}
> @@ -609,8 +650,7 @@ static irqreturn_t mxs_lradc_handle_irq(int irq, void *data)
>  	else if (reg & LRADC_CTRL1_LRADC_IRQ(0))
>  		complete(&lradc->completion);
>  
> -	writel(reg & LRADC_CTRL1_MX28_LRADC_IRQ_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, reg & mxs_lradc_irq_mask(lradc), LRADC_CTRL1);
>  
>  	return IRQ_HANDLED;
>  }
> @@ -629,7 +669,7 @@ static irqreturn_t mxs_lradc_trigger_handler(int irq, void *p)
>  
>  	for_each_set_bit(i, iio->active_scan_mask, LRADC_MAX_TOTAL_CHANS) {
>  		lradc->buffer[j] = readl(lradc->base + LRADC_CH(j));
> -		writel(chan_value, lradc->base + LRADC_CH(j));
> +		mxs_lradc_reg_wrt(lradc, chan_value, LRADC_CH(j));
>  		lradc->buffer[j] &= LRADC_CH_VALUE_MASK;
>  		lradc->buffer[j] /= LRADC_DELAY_TIMER_LOOP;
>  		j++;
> @@ -654,7 +694,7 @@ static int mxs_lradc_configure_trigger(struct iio_trigger *trig, bool state)
>  	struct mxs_lradc *lradc = iio_priv(iio);
>  	const uint32_t st = state ? STMP_OFFSET_REG_SET : STMP_OFFSET_REG_CLR;
>  
> -	writel(LRADC_DELAY_KICK, lradc->base + LRADC_DELAY(0) + st);
> +	mxs_lradc_reg_wrt(lradc, LRADC_DELAY_KICK, LRADC_DELAY(0) + st);
>  
>  	return 0;
>  }
> @@ -730,29 +770,26 @@ static int mxs_lradc_buffer_preenable(struct iio_dev *iio)
>  	if (ret < 0)
>  		goto err_buf;
>  
> -	writel(LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> -	writel(0xff, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> +							LRADC_CTRL1);
> +	mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0);
>  
>  	for_each_set_bit(chan, iio->active_scan_mask, LRADC_MAX_TOTAL_CHANS) {
>  		ctrl4_set |= chan << LRADC_CTRL4_LRADCSELECT_OFFSET(ofs);
>  		ctrl4_clr |= LRADC_CTRL4_LRADCSELECT_MASK(ofs);
>  		ctrl1_irq |= LRADC_CTRL1_LRADC_IRQ_EN(ofs);
> -		writel(chan_value, lradc->base + LRADC_CH(ofs));
> +		mxs_lradc_reg_wrt(lradc, chan_value, LRADC_CH(ofs));
>  		bitmap_set(&enable, ofs, 1);
>  		ofs++;
>  	}
>  
> -	writel(LRADC_DELAY_TRIGGER_LRADCS_MASK | LRADC_DELAY_KICK,
> -		lradc->base + LRADC_DELAY(0) + STMP_OFFSET_REG_CLR);
> -
> -	writel(ctrl4_clr, lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_CLR);
> -	writel(ctrl4_set, lradc->base + LRADC_CTRL4 + STMP_OFFSET_REG_SET);
> -
> -	writel(ctrl1_irq, lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_SET);
> -
> -	writel(enable << LRADC_DELAY_TRIGGER_LRADCS_OFFSET,
> -		lradc->base + LRADC_DELAY(0) + STMP_OFFSET_REG_SET);
> +	mxs_lradc_reg_clear(lradc, LRADC_DELAY_TRIGGER_LRADCS_MASK |
> +					LRADC_DELAY_KICK, LRADC_DELAY(0));
> +	mxs_lradc_reg_clear(lradc, ctrl4_clr, LRADC_CTRL4);
> +	mxs_lradc_reg_set(lradc, ctrl4_set, LRADC_CTRL4);
> +	mxs_lradc_reg_set(lradc, ctrl1_irq, LRADC_CTRL1);
> +	mxs_lradc_reg_set(lradc, enable << LRADC_DELAY_TRIGGER_LRADCS_OFFSET,
> +					LRADC_DELAY(0));
>  
>  	return 0;
>  
> @@ -767,12 +804,12 @@ static int mxs_lradc_buffer_postdisable(struct iio_dev *iio)
>  {
>  	struct mxs_lradc *lradc = iio_priv(iio);
>  
> -	writel(LRADC_DELAY_TRIGGER_LRADCS_MASK | LRADC_DELAY_KICK,
> -		lradc->base + LRADC_DELAY(0) + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_DELAY_TRIGGER_LRADCS_MASK |
> +					LRADC_DELAY_KICK, LRADC_DELAY(0));
>  
> -	writel(0xff, lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> -	writel(LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> +					LRADC_CTRL1);
>  
>  	kfree(lradc->buffer);
>  	mutex_unlock(&lradc->lock);
> @@ -867,24 +904,24 @@ static int mxs_lradc_hw_init(struct mxs_lradc *lradc)
>  		return ret;
>  
>  	/* Configure DELAY CHANNEL 0 for generic ADC sampling. */
> -	writel(adc_cfg, lradc->base + LRADC_DELAY(0));
> +	mxs_lradc_reg_wrt(lradc, adc_cfg, LRADC_DELAY(0));
>  
>  	/* Disable remaining DELAY CHANNELs */
> -	writel(0, lradc->base + LRADC_DELAY(1));
> -	writel(0, lradc->base + LRADC_DELAY(2));
> -	writel(0, lradc->base + LRADC_DELAY(3));
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(1));
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(2));
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(3));
>  
>  	/* Configure the touchscreen type */
> -	writel(LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
> -		lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
> +							LRADC_CTRL0);
>  
> -	if (lradc->use_touchscreen == MXS_LRADC_TOUCHSCREEN_5WIRE) {
> -		writel(LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
> -			lradc->base + LRADC_CTRL0 + STMP_OFFSET_REG_SET);
> +	if (lradc->use_touchscreen == MXS_LRADC_TOUCHSCREEN_5WIRE)
> +		mxs_lradc_reg_set(lradc, LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
> +				LRADC_CTRL0);
>  	}
>  
>  	/* Start internal temperature sensing. */
> -	writel(0, lradc->base + LRADC_CTRL2);
> +	mxs_lradc_reg_wrt(lradc, 0, LRADC_CTRL2);
>  
>  	return 0;
>  }
> @@ -893,11 +930,10 @@ static void mxs_lradc_hw_stop(struct mxs_lradc *lradc)
>  {
>  	int i;
>  
> -	writel(LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK,
> -		lradc->base + LRADC_CTRL1 + STMP_OFFSET_REG_CLR);
> +	mxs_lradc_reg_clear(lradc, mxs_lradc_irq_en_mask(lradc), LRADC_CTRL1);
>  
>  	for (i = 0; i < LRADC_MAX_DELAY_CHANS; i++)
> -		writel(0, lradc->base + LRADC_DELAY(i));
> +		mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(i));
>  }
>  
>  static const struct of_device_id mxs_lradc_dt_ids[] = {
> 

  reply	other threads:[~2013-10-01 10:01 UTC|newest]

Thread overview: 127+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-23 14:36 [PATCHv6] staging/iio/adc: change the MXS touchscreen driver implementation Juergen Beisert
2013-09-23 14:36 ` Juergen Beisert
2013-09-23 14:36 ` Juergen Beisert
2013-09-23 14:36 ` [PATCH 1/9] Staging/iio/adc/touchscreen/MXS: add proper clock handling Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-09-23 15:13   ` Fabio Estevam
2013-09-23 15:13     ` Fabio Estevam
2013-09-23 15:13     ` Fabio Estevam
     [not found]     ` <52405A7F.1050801-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-09-24  7:50       ` Jürgen Beisert
2013-09-24  7:50         ` Jürgen Beisert
2013-09-24  7:50         ` Jürgen Beisert
2013-09-24 13:50         ` Fabio Estevam
2013-09-24 13:50           ` Fabio Estevam
2013-09-24 13:50           ` Fabio Estevam
2013-10-01 10:57         ` Jonathan Cameron
2013-10-01 10:57           ` Jonathan Cameron
2013-10-01 10:57           ` Jonathan Cameron
     [not found]   ` <1379946998-23041-2-git-send-email-jbe-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-09-23 15:30     ` Lothar Waßmann
2013-09-23 15:30       ` Lothar Waßmann
2013-09-23 15:30       ` Lothar Waßmann
     [not found]       ` <21056.24202.312851.105281-VjFSrY7JcPWvSplVBqRQBQ@public.gmane.org>
2013-09-24  7:39         ` Jürgen Beisert
2013-09-24  7:39           ` Jürgen Beisert
2013-09-24  7:39           ` Jürgen Beisert
2013-09-23 14:36 ` [PATCH 2/9] Staging/iio/adc/touchscreen/MXS: distinguish i.MX23's and i.MX28's LRADC Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
     [not found]   ` <1379946998-23041-3-git-send-email-jbe-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-10-01 10:58     ` Jonathan Cameron
2013-10-01 10:58       ` Jonathan Cameron
2013-10-01 10:58       ` Jonathan Cameron
2013-09-23 14:36 ` [PATCH 3/9] Staging/iio/adc/touchscreen/MXS: separate i.MX28 specific register bits Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
     [not found]   ` <1379946998-23041-4-git-send-email-jbe-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-10-01 11:00     ` Jonathan Cameron
2013-10-01 11:00       ` Jonathan Cameron
2013-10-01 11:00       ` Jonathan Cameron
2013-09-23 14:36 ` [PATCH 4/9] Staging/iio/adc/touchscreen/MXS: simplify register access Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-10-01 11:01   ` Jonathan Cameron [this message]
2013-10-01 11:01     ` Jonathan Cameron
2013-09-23 14:36 ` [PATCH 5/9] Staging/iio/adc/touchscreen/MXS: add i.MX23 support to the LRADC touchscreen driver Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-10-01 11:02   ` Jonathan Cameron
2013-10-01 11:02     ` Jonathan Cameron
2013-09-23 14:36 ` [PATCH 6/9] Staging/iio/adc/touchscreen/MXS: add interrupt driven touch detection Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
     [not found]   ` <1379946998-23041-7-git-send-email-jbe-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-10-01  9:28     ` Jürgen Beisert
2013-10-01  9:28       ` Jürgen Beisert
2013-10-01  9:28       ` Jürgen Beisert
2013-10-01 10:51       ` Jonathan Cameron
2013-10-01 10:51         ` Jonathan Cameron
2013-10-01 10:51         ` Jonathan Cameron
     [not found]         ` <524AA91F.7000906-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-10-01 11:06           ` Jonathan Cameron
2013-10-01 11:06             ` Jonathan Cameron
2013-10-01 11:06             ` Jonathan Cameron
2013-09-23 14:36 ` [PATCH 7/9] Staging/iio/adc/touchscreen/MXS: remove old touchscreen detection implementation Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-10-01 11:13   ` Jonathan Cameron
2013-10-01 11:13     ` Jonathan Cameron
2013-10-01 11:13     ` Jonathan Cameron
2013-09-23 14:36 ` [PATCH 9/9] Staging/iio: add TODO reminder Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
2013-09-23 14:36   ` Juergen Beisert
     [not found]   ` <1379946998-23041-10-git-send-email-jbe-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-10-01 11:14     ` Jonathan Cameron
2013-10-01 11:14       ` Jonathan Cameron
2013-10-01 11:14       ` Jonathan Cameron
     [not found]       ` <524AAEA8.4090106-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-10-01 11:21         ` Jonathan Cameron
2013-10-01 11:21           ` Jonathan Cameron
2013-10-01 11:21           ` Jonathan Cameron
     [not found]           ` <524AB04C.4070409-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-10-01 11:22             ` Jonathan Cameron
2013-10-01 11:22               ` Jonathan Cameron
     [not found] ` <1379946998-23041-1-git-send-email-jbe-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-09-23 14:36   ` [PATCH 8/9] Staging/iio/adc/touchscreen/MXS: provide devicetree adaption Juergen Beisert
2013-09-23 14:36     ` Juergen Beisert
2013-09-23 14:36     ` Juergen Beisert
     [not found]     ` <1379946998-23041-9-git-send-email-jbe-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-10-01 11:14       ` Jonathan Cameron
2013-10-01 11:14         ` Jonathan Cameron
2013-10-01 11:14         ` Jonathan Cameron
2013-09-23 15:25   ` [PATCHv6] staging/iio/adc: change the MXS touchscreen driver implementation Marek Vasut
2013-09-23 15:25     ` Marek Vasut
2013-09-23 15:25     ` Marek Vasut
2013-10-01  9:25   ` Jonathan Cameron
2013-10-01  9:25     ` Jonathan Cameron
2013-10-01  9:25     ` Jonathan Cameron
     [not found]     ` <524A951A.5050606-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-10-01 10:49       ` Marek Vasut
2013-10-01 10:49         ` Marek Vasut
2013-10-01 10:49         ` Marek Vasut
2014-01-09 13:31   ` Alexandre Belloni
2014-01-09 13:31     ` Alexandre Belloni
2014-01-09 13:31     ` Alexandre Belloni
     [not found]     ` <52CEA4AA.8050503-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2014-01-10  8:55       ` Jürgen Beisert
2014-01-10  8:55         ` Jürgen Beisert
2014-01-10  8:55         ` Jürgen Beisert
2014-02-04 23:45         ` Marek Vasut
2014-02-04 23:45           ` Marek Vasut
2014-02-04 23:45           ` Marek Vasut
     [not found]         ` <201401100955.45885.jbe-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2014-02-24 13:16           ` Juergen Beisert
2014-02-24 13:16             ` Juergen Beisert
2014-02-24 13:16             ` Juergen Beisert
2014-02-24 13:33             ` Dan Carpenter
2014-02-24 13:33               ` Dan Carpenter
2014-02-24 13:33               ` Dan Carpenter
2014-02-24 14:38               ` Juergen Beisert
2014-02-24 14:38                 ` Juergen Beisert
2014-02-24 14:38                 ` Juergen Beisert
2014-02-24 14:47                 ` Dan Carpenter
2014-02-24 14:47                   ` Dan Carpenter
2014-02-24 14:47                   ` Dan Carpenter
2014-02-24 14:39               ` [PATCH] staging/iio/adc/MXS/LRADC: fix touchscreen statemachine Juergen Beisert
2014-02-24 14:39                 ` Juergen Beisert
2014-02-24 14:39                 ` Juergen Beisert
2014-02-24 16:48                 ` Alexandre Belloni
2014-02-24 16:48                   ` Alexandre Belloni
2014-02-24 16:48                   ` Alexandre Belloni
     [not found]                   ` <20140224164817.GE4436-m++hUPXGwpdeoWH0uzbU5w@public.gmane.org>
2014-02-24 21:14                     ` Jonathan Cameron
2014-02-24 21:14                       ` Jonathan Cameron
2014-02-24 21:14                       ` Jonathan Cameron
     [not found]                       ` <530BB63D.4050200-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2014-02-24 22:04                         ` Jonathan Cameron
2014-02-24 22:04                           ` Jonathan Cameron
2014-02-24 22:04                           ` Jonathan Cameron
     [not found]             ` <201402241416.24270.jbe-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2014-02-24 14:26               ` [PATCHv6] staging/iio/adc: change the MXS touchscreen driver implementation Alexandre Belloni
2014-02-24 14:26                 ` Alexandre Belloni
2014-02-24 14:26                 ` Alexandre Belloni
     [not found]                 ` <20140224142658.GD4436-m++hUPXGwpdeoWH0uzbU5w@public.gmane.org>
2014-02-24 17:14                   ` Jonathan Cameron
2014-02-24 17:14                     ` Jonathan Cameron
2014-02-24 17:14                     ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=524AABA0.8040807@kernel.org \
    --to=jic23@kernel.org \
    --cc=devel@driverdev.osuosl.org \
    --cc=fabio.estevam@freescale.com \
    --cc=jbe@pengutronix.de \
    --cc=jic23@cam.ac.uk \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=marex@denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.