Re: [PATCH v2 21/46] mfd: ti_am335x_tscadc: Reorder the initialization steps

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu,  2 Sep 2021 23:51:19 +0200
Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote:

> TI AM335X TRM [1] states that most of the configuration should be set in
> the control register in the first place, before actually enabling the
> hardware with the subsystem enable bit.
> 
> So far only half of the configuration was made in the first step (before
> enabling the "subsystem"), which does not make really sense. Also, the
> probe and the resume patch were acting differently. Let's harmonize all
> this by following these steps:
> 1/ Configure the CLKDIV register
> 2/ Configure the CTRL register
> 3/ Configure the idle configuration
> 4/ Really enable the device by rewriting the CTRL register with the
>    subsystem enable bit set.
> 
> [1] https://www.ti.com/lit/pdf/spruh73
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
This tidies up the other patches which is good. Now I haven't checked the new
order against the datasheet but it now does things as you describe so I'm assuming
that's fine.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>

> ---
>  drivers/mfd/ti_am335x_tscadc.c | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index 5f189da99468..61f878c7593b 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -221,8 +221,6 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  
>  	/* Set the control register bits */
>  	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
> -	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> -
>  	if (tsc_wires > 0) {
>  		tscadc->tsc_wires = tsc_wires;
>  		if (tsc_wires == 5)
> @@ -230,6 +228,7 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  		else
>  			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
>  	}
> +	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
>  
>  	tscadc_idle_config(tscadc);
>  
> @@ -315,9 +314,9 @@ static int __maybe_unused tscadc_resume(struct device *dev)
>  	pm_runtime_get_sync(dev);
>  
>  	/* context restore */
> -	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
> -	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> +	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
>  
> +	ctrl = CNTRLREG_STEPCONFIGWRT |	CNTRLREG_STEPID;
>  	if (tscadc->tsc_wires > 0) {
>  		if (tscadc->tsc_wires == 5)
>  			ctrl |= CNTRLREG_5WIRE | CNTRLREG_TSCENB;
> @@ -325,13 +324,13 @@ static int __maybe_unused tscadc_resume(struct device *dev)
>  			ctrl |= CNTRLREG_4WIRE | CNTRLREG_TSCENB;
>  	}
>  
> +	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
> +
>  	tscadc_idle_config(tscadc);
>  
>  	ctrl |= CNTRLREG_TSCSSENB;
>  	regmap_write(tscadc->regmap, REG_CTRL, ctrl);
>  
> -	regmap_write(tscadc->regmap, REG_CLKDIV, tscadc->clk_div);
> -
>  	return 0;
>  }
>  




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux