RE: BBB IIO ADC access not working

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

 



 

> -----Original Message-----
> From: Michael Welling [mailto:mwelling79@xxxxxxxxx] On Behalf 
> Of Michael Welling
> Sent: Wednesday, August 19, 2015 1:49 PM
> To: Greg Wilson-Lindberg
> Cc: Daniel Baluta; linux-iio@xxxxxxxxxxxxxxx
> Subject: Re: BBB IIO ADC access not working
> 
> On Wed, Aug 19, 2015 at 01:35:10PM -0700, Greg Wilson-Lindberg wrote:
> >  
> > 
> > > -----Original Message-----
> > > From: Michael Welling [mailto:mwelling79@xxxxxxxxx] On Behalf Of 
> > > Michael Welling
> > > Sent: Wednesday, August 19, 2015 10:53 AM
> > > To: Greg Wilson-Lindberg
> > > Cc: Daniel Baluta; linux-iio@xxxxxxxxxxxxxxx
> > > Subject: Re: BBB IIO ADC access not working
> > > 
> > > On Wed, Aug 19, 2015 at 09:27:02AM -0700, Greg 
> Wilson-Lindberg wrote:
> > > >  
> > > > 
> > > > > -----Original Message-----
> > > > > From: Michael Welling [mailto:mwelling79@xxxxxxxxx] 
> On Behalf Of 
> > > > > Michael Welling
> > > > > Sent: Tuesday, August 18, 2015 3:31 PM
> > > > > To: Greg Wilson-Lindberg
> > > > > Cc: Daniel Baluta; linux-iio@xxxxxxxxxxxxxxx
> > > > > Subject: Re: BBB IIO ADC access not working
> > > > > 
> > > > > On Tue, Aug 18, 2015 at 03:11:13PM -0700, Greg
> > > Wilson-Lindberg wrote:
> > > > > >  
> > > > > > 
> > > > > > > I found that handling the IRQENB_EOS interrupt in the ADC
> > > > > is causing
> > > > > > > an undesired effect. After enabling the ADC 
> buffer mode and 
> > > > > > > disabling it the coordinate readings work but the touch
> > > > > release is
> > > > > > > no longer detected.
> > > > > > 
> > > > > > Can we put your code in the touch screen handler? The tsc
> > > > > code is writing to the IRQSTATUS register, not the IRQCLR
> > > register.
> > > > > > 
> > > > > 
> > > > > Actually using the IRQCLR disables the IRQ instead of 
> clearing 
> > > > > it and that was not my intent. This is why the pen releases
> > > where not
> > > > > working, the tsc driver relies on the EOS interrupt 
> to write the 
> > > > > step register because it is using a one shot hardware mode.
> > > > > 
> > > > > Since the IRQENB_EOS is not used by the ADC driver it can be 
> > > > > disabled when in buffered mode which is triggering faster
> > > than the
> > > > > isr can handle it.
> > > > > 
> > > > > See patch below.
> > > > > 
> > > > > Though it allows for the repeated enabling and 
> disabling of the 
> > > > > buffer the touchscreen gets a bunch of unexpected
> > > releases and the
> > > > > readings are very jittery.
> > > > > 
> > > > > diff --git a/drivers/iio/adc/ti_am335x_adc.c 
> > > > > b/drivers/iio/adc/ti_am335x_adc.c index 
> a0e7161..9945e4a 100644
> > > > > --- a/drivers/iio/adc/ti_am335x_adc.c
> > > > > +++ b/drivers/iio/adc/ti_am335x_adc.c
> > > > > @@ -177,6 +177,7 @@ static int
> > > tiadc_buffer_preenable(struct iio_dev
> > > > > *indio_dev)
> > > > >  				IRQENB_FIFO1OVRRUN |
> > > > >  				IRQENB_FIFO1UNDRFLW));
> > > > >  
> > > > > +	tiadc_writel(adc_dev, REG_IRQCLR, IRQENB_EOS);
> > > > >  	/* Flush FIFO. Needed in corner cases in simultaneous
> > > tsc/adc use
> > > > > */
> > > > >  	fifo1count = tiadc_readl(adc_dev, REG_FIFO1CNT);
> > > > >  	for (i = 0; i < fifo1count; i++) @@ -213,6 
> +214,7 @@ static 
> > > > > int tiadc_buffer_predisable(struct iio_dev *indio_dev)
> > > > >  
> > > > >  	tiadc_writel(adc_dev, REG_IRQCLR, (IRQENB_FIFO1THRES |
> > > > >  				IRQENB_FIFO1OVRRUN |
> > > > > IRQENB_FIFO1UNDRFLW));
> > > > > +	tiadc_writel(adc_dev, REG_IRQENABLE, IRQENB_EOS);
> > > > >  	am335x_tsc_se_clr(adc_dev->mfd_tscadc,
> > > > > adc_dev->buffer_en_ch_steps);
> > > > >  	adc_dev->buffer_en_ch_steps = 0;
> > > > >  
> > > > > 
> > > > 
> > > > I'm not sure that it's better, but it is different.  The
> > > touch screen still locks up, but mouse clicks work.
> > > 
> > > This is very disappointing.
> > > 
> > > Have you tried reading the ADCs using one shot mode recently?
> > > 
> > > IE cat /sys/bus/iio/devices/iio:device0/in_voltageX_raw
> > 
> > I tried that after the system had locked up and what I get 
> back is the 
> > Device or resource is busy.  I restarted the BBB and tried before 
> > starting my application and it worked just fine. I started 
> up the app 
> > and the touch screen was locked up immediately, mouse 
> clicks delayed about 1/2 second. And I get Device or resource 
> busy from the cat.
> >
> 
> Is the using while using 
> /sys/bus/iio/devices/iio:device0/in_voltageX_raw in your program?

I'm not using /sys/bus/iio/devices/iio:device0/in_voltageX_raw in my program, 
I'm using the iio buffer system.

I tried using cat /sys/bus/iio/devices/iio:device0/in_voltageX_raw while my
program was running and it worked a couple of times, and got busy a bit also,
then the touch screen locked up.

I have not tried to use /sys/bus/iio/devices/iio:device0/in_voltageX_raw from
in my program, I was hoping for a lighter weight access that didn't require 
so many opens & closes. I'm under the impression that I can only get one 
reading per open if I try to read /sys/bus/iio/devices/iio:device0/in_voltageX_raw.
Or can I get multiple readings if I do multiple reads.

>  
> > > 
> > > > 
> > > > > 
> > > > > 
> > > > > 
> > > 
> --
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



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux