diff mbox

iio: mxs-lradc: Do hardware initialization earlier

Message ID 1364465583-19835-1-git-send-email-alexandre.belloni@free-electrons.com (mailing list archive)
State New, archived
Headers show

Commit Message

Alexandre Belloni March 28, 2013, 10:13 a.m. UTC
We need to initialize hardware before registering the touchscreen. Else,
we end up setting registers in mxs_lradc_ts_open(), getting called just
after registering the touchscreen with input_register_device() and by
the end of mxs_lradc_probe(), we reset the LRADC block hence losing the
correct configuration.

Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Jonathan Cameron <jic23@kernel.org>
Cc: Marek Vasut <marex@denx.de>
---
 drivers/staging/iio/adc/mxs-lradc.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Alexandre Belloni March 28, 2013, 10:24 a.m. UTC | #1
On 28/03/2013 11:13, Alexandre Belloni wrote:
> We need to initialize hardware before registering the touchscreen. Else,
> we end up setting registers in mxs_lradc_ts_open(), getting called just
> after registering the touchscreen with input_register_device() and by
> the end of mxs_lradc_probe(), we reset the LRADC block hence losing the
> correct configuration.

Sorry, I fumbled and forgot my SoB:

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Jonathan Cameron <jic23@kernel.org>
> Cc: Marek Vasut <marex@denx.de>
> ---
>  drivers/staging/iio/adc/mxs-lradc.c |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
> index 55a459b..e927e3f 100644
> --- a/drivers/staging/iio/adc/mxs-lradc.c
> +++ b/drivers/staging/iio/adc/mxs-lradc.c
> @@ -933,6 +933,9 @@ static int mxs_lradc_probe(struct platform_device *pdev)
>  
>  	INIT_WORK(&lradc->ts_work, mxs_lradc_ts_work);
>  
> +	/* Configure the hardware. */
> +	mxs_lradc_hw_init(lradc);
> +
>  	/* Check if touchscreen is enabled in DT. */
>  	ret = of_property_read_u32(node, "fsl,lradc-touchscreen-wires",
>  				&ts_wires);
> @@ -995,9 +998,6 @@ static int mxs_lradc_probe(struct platform_device *pdev)
>  		goto err_ts;
>  	}
>  
> -	/* Configure the hardware. */
> -	mxs_lradc_hw_init(lradc);
> -
>  	return 0;
>  
>  err_ts:
Marek Vasut March 28, 2013, 11:22 a.m. UTC | #2
Dear Alexandre Belloni,

> We need to initialize hardware before registering the touchscreen. Else,
> we end up setting registers in mxs_lradc_ts_open(), getting called just
> after registering the touchscreen with input_register_device() and by
> the end of mxs_lradc_probe(), we reset the LRADC block hence losing the
> correct configuration.
> 
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Jonathan Cameron <jic23@kernel.org>
> Cc: Marek Vasut <marex@denx.de>
> ---
>  drivers/staging/iio/adc/mxs-lradc.c |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/staging/iio/adc/mxs-lradc.c
> b/drivers/staging/iio/adc/mxs-lradc.c index 55a459b..e927e3f 100644
> --- a/drivers/staging/iio/adc/mxs-lradc.c
> +++ b/drivers/staging/iio/adc/mxs-lradc.c
> @@ -933,6 +933,9 @@ static int mxs_lradc_probe(struct platform_device
> *pdev)
> 
>  	INIT_WORK(&lradc->ts_work, mxs_lradc_ts_work);
> 
> +	/* Configure the hardware. */
> +	mxs_lradc_hw_init(lradc);
> +
>  	/* Check if touchscreen is enabled in DT. */
>  	ret = of_property_read_u32(node, "fsl,lradc-touchscreen-wires",

Isn't this too early? At least lradc->use_touchscreen is configured only after 
you call mxs_lradc_hw_init() in this case, while mxs_lradc_hw_init() uses it's 
value.

I think mxs_lradc_hw_init() shall be called just before mxs_lradc_ts_register().

Best regards,
Marek Vasut
Alexandre Belloni March 28, 2013, 11:51 a.m. UTC | #3
On 28/03/2013 12:22, Marek Vasut wrote:
> Dear Alexandre Belloni,
>
>> We need to initialize hardware before registering the touchscreen. Else,
>> we end up setting registers in mxs_lradc_ts_open(), getting called just
>> after registering the touchscreen with input_register_device() and by
>> the end of mxs_lradc_probe(), we reset the LRADC block hence losing the
>> correct configuration.
>>
>> Cc: Fabio Estevam <fabio.estevam@freescale.com>
>> Cc: Jonathan Cameron <jic23@kernel.org>
>> Cc: Marek Vasut <marex@denx.de>
>> ---
>>  drivers/staging/iio/adc/mxs-lradc.c |    6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/staging/iio/adc/mxs-lradc.c
>> b/drivers/staging/iio/adc/mxs-lradc.c index 55a459b..e927e3f 100644
>> --- a/drivers/staging/iio/adc/mxs-lradc.c
>> +++ b/drivers/staging/iio/adc/mxs-lradc.c
>> @@ -933,6 +933,9 @@ static int mxs_lradc_probe(struct platform_device
>> *pdev)
>>
>>  	INIT_WORK(&lradc->ts_work, mxs_lradc_ts_work);
>>
>> +	/* Configure the hardware. */
>> +	mxs_lradc_hw_init(lradc);
>> +
>>  	/* Check if touchscreen is enabled in DT. */
>>  	ret = of_property_read_u32(node, "fsl,lradc-touchscreen-wires",
> Isn't this too early? At least lradc->use_touchscreen is configured only after 
> you call mxs_lradc_hw_init() in this case, while mxs_lradc_hw_init() uses it's 
> value.
>
> I think mxs_lradc_hw_init() shall be called just before mxs_lradc_ts_register().
>
>
That's right, this would break 5 wires touchscreens. I'll fix that.
Marek Vasut March 28, 2013, 11:59 a.m. UTC | #4
Dear Alexandre Belloni,

> On 28/03/2013 12:22, Marek Vasut wrote:
> > Dear Alexandre Belloni,
> > 
> >> We need to initialize hardware before registering the touchscreen. Else,
> >> we end up setting registers in mxs_lradc_ts_open(), getting called just
> >> after registering the touchscreen with input_register_device() and by
> >> the end of mxs_lradc_probe(), we reset the LRADC block hence losing the
> >> correct configuration.
> >> 
> >> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> >> Cc: Jonathan Cameron <jic23@kernel.org>
> >> Cc: Marek Vasut <marex@denx.de>
> >> ---
> >> 
> >>  drivers/staging/iio/adc/mxs-lradc.c |    6 +++---
> >>  1 file changed, 3 insertions(+), 3 deletions(-)
> >> 
> >> diff --git a/drivers/staging/iio/adc/mxs-lradc.c
> >> b/drivers/staging/iio/adc/mxs-lradc.c index 55a459b..e927e3f 100644
> >> --- a/drivers/staging/iio/adc/mxs-lradc.c
> >> +++ b/drivers/staging/iio/adc/mxs-lradc.c
> >> @@ -933,6 +933,9 @@ static int mxs_lradc_probe(struct platform_device
> >> *pdev)
> >> 
> >>  	INIT_WORK(&lradc->ts_work, mxs_lradc_ts_work);
> >> 
> >> +	/* Configure the hardware. */
> >> +	mxs_lradc_hw_init(lradc);
> >> +
> >> 
> >>  	/* Check if touchscreen is enabled in DT. */
> >>  	ret = of_property_read_u32(node, "fsl,lradc-touchscreen-wires",
> > 
> > Isn't this too early? At least lradc->use_touchscreen is configured only
> > after you call mxs_lradc_hw_init() in this case, while
> > mxs_lradc_hw_init() uses it's value.
> > 
> > I think mxs_lradc_hw_init() shall be called just before
> > mxs_lradc_ts_register().
> 
> That's right, this would break 5 wires touchscreens. I'll fix that.

Thanks!

Best regards,
Marek Vasut
diff mbox

Patch

diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c
index 55a459b..e927e3f 100644
--- a/drivers/staging/iio/adc/mxs-lradc.c
+++ b/drivers/staging/iio/adc/mxs-lradc.c
@@ -933,6 +933,9 @@  static int mxs_lradc_probe(struct platform_device *pdev)
 
 	INIT_WORK(&lradc->ts_work, mxs_lradc_ts_work);
 
+	/* Configure the hardware. */
+	mxs_lradc_hw_init(lradc);
+
 	/* Check if touchscreen is enabled in DT. */
 	ret = of_property_read_u32(node, "fsl,lradc-touchscreen-wires",
 				&ts_wires);
@@ -995,9 +998,6 @@  static int mxs_lradc_probe(struct platform_device *pdev)
 		goto err_ts;
 	}
 
-	/* Configure the hardware. */
-	mxs_lradc_hw_init(lradc);
-
 	return 0;
 
 err_ts: