RE: Regarding iio-trigger functioning

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

 



> When you say internal do you mean in a soc or internal as in you can't
> point us to a datasheet?  Obviously if you can, a datasheet would
> save a lot of confusion rather than you having to repeat lots of
> it in this thread!

Yes , Indeed Datasheet could have saved a lot of fuss. But due to some Company's policy , i can't put it here.  But its just 10:8 ADC , nothing else... Which has two interrupts coming out of it.. One is EOC (end of conversion) and another is AWDT(analog watch dog timer) ..

EOC: will be generated for each conversion , whether voltage is reference voltage on any of the channel or fluctuated one...
AWDT: will be generated once voltage fluctuates between min and max . 

EOC will not be of use for me as It will generate thousands of time depending upon clock frequency.(that's what i am going for polling ) . and AWDT doesn't come to my CPU , instead its fed to other cpu which is not of use to me.. 

I guess it gives the clearer  picture now.. Nevertheless , if you want more stuffs which can help in designing , i will surely tell you...







> -----Original Message-----
> From: Jonathan Cameron [mailto:jic23@xxxxxxxxx]
> Sent: 18 July 2012 15:50
> To: Darshan Kumar NANDANWAR
> Cc: hennerich@xxxxxxxxxxxxxxxxxxxx; linux-iio@xxxxxxxxxxxxxxx;
> dk.manit@xxxxxxxxx; Srikrishna Pramoda ATIKUKKE
> Subject: Re: Regarding iio-trigger functioning
> 
> On 7/18/2012 11:15 AM, Jonathan Cameron wrote:
> > On 7/18/2012 10:28 AM, Darshan Kumar NANDANWAR wrote:
> >> Jonathan,
> >>> Just out of curiousity, which ADC are you working with?  Also
> >>> please note that questions such as this are best posted to the
> >>> mailing list. Everyone started from scratch once, hence there are
> >>> lots of people who might help on there! linux-iio@xxxxxxxxxxxxxxx.
> >>> Basically if there is no particularly strong reason to keep things
> >>> confidential they should be on the list.
> >>
> >> Thanks for your precious explanations.. I am working on ST's
> Internal
> >> Low Bandwidth ADC having  10bit resolution with 8 Input Analog
> >> channels ..
> When you say internal do you mean in a soc or internal as in you can't
> point us to a datasheet?  Obviously if you can, a datasheet would
> save a lot of confusion rather than you having to repeat lots of
> it in this thread!
> 
>   But has different requirement... Every channel connects
> >> to different devices(sensors,key scanner,SCART etc ) with the
> >> reference voltage will be different (~2V-5V)-can be changed
> >> on-the-fly .
> > So far not that weird which is good...
> >> So every  Analog channel  had to be configured within
> >> (conversion_cycle_per_channel+ some buffer_jiffies) ..
> > Step one. Is there actually a use case for changing an individual
> > channels reference voltage all that often? A fair bit of kit can do
> > this, but to pull it off in software you'll need to effectively run
> > a triggered DAC alongside the adc and it'll get really fiddly.
> > Or having read more of your supply are you saying that we actually
> have
> > a mux and so only sample one channel at a time (and hence have to
> change
> > the reference voltage etc)?
> >>  So my choice
> >> to design this is to use IIO subsystem.. But until i know this
> >> subsystem i will not be able to start   writing this...Meanwhile , i
> >> have copied maillist too ...
> > Sure.
> >
> >>
> >>> Note that a lot of triggers are from the devices themselves and
> >>> hence lie in the relevant drivers.. (data ready signals typically
> >>> on devices with their own clocking).
> >>
> >> Yes ,  May be in IIO terminology this is trigger , but from device
> >> point of  view these can be called interrupts viz . EOC  or analog
> >> watchdog interrupts. Right?
> > Indeed. Sometimes these are inttrupts, sometimes they are other
> things
> > entirely (e.g. input from userspace).  The terminology comes from
> > oscilloscopes where a trigger is what causes data capture to occur.
> >>
> >>
> >>> the interrupt routine fires off sub interrupts for any devices that
> >>> have attached to it (attachment usually done by name from userspace
> >>> - poke the trigger name into iio:deviceX/trigger/current_trigger
> >>> iirc).
> >> True..
> >>
> >>> These ADCs register interrupt handlers for the subirqs and it is
> >>> these that grab the data form the adc and push it into the buffers.
> >>> Current tree has pushing only to a single buffer, but there are
> >>> patches on the mailing list to do it to multiple buffers (handy for
> >>> bridging to other subsytems).
> >>
> >> ADCs are registering interrupt_handler for their Interrupt_lines
> >> right?
> > Yes if they are data ready type interrupts). These typically feed
> > triggers which in turn cause this adc (and sometime other devices)
> > to capture.
> >    And during the iio_allocate_trigger call, which in turn being
> >> called from  trigger_initialisation (referring at91_adc.c) we are
> >> doing following : irq_set_handler(trig->subirq_base + i,
> >> &handle_simple_irq);
> >>
> >> Its the generic handler for all sub_irqs.. Now during
> >> data_ready_signal or eoc , they are calling
> >> iio_trigger_poll(idev->trig, iio_get_time_ns(),if buffer is
> enabled);
> >> .. which is going to call nothing but handle_simple_irq ... But
> still
> >> when i go through this call , i see  action->handler(irq,
> >> action->dev_id); is getting called.this must be someone which you
> are
> >> pointing out.. SO far no real handler is registered which is
> >> capturing the data from ADC and  putting  the content into buffer .
> >> But during ring_buffer setup , capture(bottom_half) and
> >> hard_handler(top half) is given which are going to form
> poll_function
> >> , which is going to  be called when i do echo 1 >
> >> /sys/bus/iio/devices/iio\:device0/buffer/enable along with preenable
> >> , and postenable callbacks.. during the postenable this poll_func is
> >> getting called which is running in trigger's irq context ,right?
> > Not during post enable it isn't. That will just be setting it up as
> the
> > interrupt handler.
> >   So
> >> where does the subirq specific handlers are coming into play?
> > They are wrapped up entirely so you shouldn't care about them.
> > Trigger fires all enabled subirqs.  ONE of these triggers has the
> > pollfunc stuff registered to handle it.  So the subirq handlers are
> > the pollfunc stuff.
> >   And
> >> whats the usage? Please comment on my understanding too..
> > subirq handled by pollfunc.   So conceptually a trigger is causing a
> > device to be polled for data.
> >>
> >> For my ADC , i am prohibited to work on interrupts mechanism (EOC
> >> etc) , instead i will use polling for my device (if needed )... but
> i
> >> want to generate one soft_interrupt after
> >> (conversion_cycle+buffer_jiffies) to capture the data from device
> and
> >> sleep for next cycle...
> > So you are really dead reckoning when the capture is done?  That is
> > fine. Look at how the sysfs-trigger works - that will show you how
> > to do a soft interrupt fire and cause capture to happen and you can
> > have whatever timing you like on the trigger.  Also are we capturing
> > all channels on each of these cycles, or just one of them?
> >
> > If just one channel per 'trigger' you have three options
> > 1) register separate iio devices for each channel (thus letting you
> don
> > any scheduling you like).
> > 2) Enforce some constraints such as all enabled channels wil be
> sampled
> > in a fixed order. E.g. 0123 - sleep - 0123 - sleep - 0123
> > Then your trigger will be for the set (and the timing between
> individual
> > samples will be entirely hidden inside your driver).
> > 3) If it's slow don't do a buffered interface at all - do it all
> through
> > the sysfs interface and do stuff on demand.
> >
> >
> >>
> >>
> >> I hope , i sound legitimate..  Please make me come out of above
> >> doubts..
> >>
> >> Thanks Darshan
> >>
> >>
> >>
> >>
> >>
> >>
> >> -----Original Message----- From: Jonathan Cameron
> >> [mailto:jic23@xxxxxxxxx] Sent: 18 July 2012 12:54 To: Darshan Kumar
> >> NANDANWAR
> >> Cc: hennerich@xxxxxxxxxxxxxxxxxxxx
> >> Subject: Re: Regarding iio-trigger functioning
> >>
> >> On 7/18/2012 5:56 AM, Darshan Kumar NANDANWAR wrote:
> >>> Jonathan/Hennerich ,
> >>>
> >>>       I am trying to use IIO subsystem for one of my  ADC with
> quite
> >>> different functions.  So   traversing the code . There are few
> doubts
> >>> regarding triggers which are placed in
> *drivers/staging/iio/trigger/
> >>> directory..*
> >> Note that a lot of triggers are from the devices themselves and
> hence
> >> lie in the relevant drivers.. (data ready signals typically on
> devices
> >> with their own clocking).
> >>>
> >>> *Lets say example of iio-trig-bfin-timer.c:*
> >>>
> >>> **
> >>>
> >>> Ø*How this trigger is going to communicate with actual device (say
> >>> ADC)?*
> >> the interrupt routine fires off sub interrupts for any devices that
> have
> >> attached to it (attachment usually done by name from userspace -
> poke
> >> the trigger name into iio:deviceX/trigger/current_trigger iirc).
> >> Thus multiple ADCs or similar can run off a single trigger.
> >> These ADCs register interrupt handlers for the subirqs and it is
> these
> >> that grab the data form the adc and push it into the buffers.
> Current
> >> tree has pushing only to a single buffer, but there are patches on
> the
> >> mailing list to do it to multiple buffers (handy for bridging to
> other
> >> subsytems).
> >>>
> >>> Ø*What i see: this timer will have IRQ handler  for  its IRQ  and
> IRQ
> >>> handler implementation is  like following in this driver:*
> >>>
> >>> **
> >>>
> >>> **
> >>>
> >>> *static irqreturn_t iio_bfin_tmr_trigger_isr(int irq, void *devid)*
> >>>
> >>> *{*
> >>>
> >>> *        struct bfin_tmr_state *st = devid;*
> >>>
> >>> **
> >>>
> >>> *        clear_gptimer_intr(st->t->id);*
> >>>
> >>> *        iio_trigger_poll(st->trig, 0);*
> >>>
> >>> **
> >>>
> >>> *        return IRQ_HANDLED;*
> >>>
> >>> *}*
> >>>
> >>> **
> >>>
> >>> **
> >>>
> >>> **
> >>>
> >>> *Where iio_trigger_poll will be working on subirqs assigned to
> >>> consumers..  Unfortunately i am not able to establish the link
> between
> >>>     how does  this trigger yields  me to  capture the data from
> ring
> >>> buffer , as i don't see any such implementation in this trigger's
> ISR
> >>> routine?*
> >> The subirqs are not for 'consumers' but rather drive either
> retrieving
> >> the data from the adc or initiate the capture.  Then the data is
> pushed
> >> into buffers and on to consumers.
> >>
> >> The adc capture logic lies in the adc driver not the trigger driver
> >> (often they are the same driver, but as you've gone with blackfin
> timer
> >> they aren't here).
> >>>
> >>> **
> >>>
> >>> *Please provide me insight into this , so that i can  use this
> subsystem
> >>> to wrire a driver for my ADC...*
> >> Just out of curiousity, which ADC are you working with?  Also please
> >> note that questions such as this are best posted to the mailing
> list.
> >> Everyone started from scratch once, hence there are lots of people
> who
> >> might help on there! linux-iio@xxxxxxxxxxxxxxx.  Basically if there
> is
> >> no particularly strong reason to keep things confidential they
> should be
> >> on the list.
> >>>
> >>> **
> >>>
> >>> **
> >>>
> >>> *Thanks*
> >>>
> >>> *Darshan Kumar*
> >>>
> >>> **
> >>>
> >>> **
> >>>
> >>
> >>
> >
> >
> 

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