From: Lo <dm81xx@gmail.com>
To: linux-iio@vger.kernel.org
Subject: continuous mode driver for spi device with interrupt
Date: Tue, 30 Jul 2013 21:55:09 +0200 [thread overview]
Message-ID: <51F81A1D.7000003@gmail.com> (raw)
Hello,
using the iio driver framework I wrote a driver for an eight channel
ADC, connected via SPI and a interrupt line.
In polling mode (reading /sys/bus/iio/..../in_voltageX_raw) everything
works fine, but this access is obviously not way I'd want to use to read
lots of data.
Looking at other drivers (in staging/ kernel v3.2) I think the most
appropriate way is to use the provided sw ring buffer ring_sw.c
I'm not sure if my ring setup is correct, can someone please comment on
this?
My _probe function does the basic setup, inits a waitqueue and requests
the irq line (a gpio):
iio->buffer = iio_sw_rb_allocate(iio);
iio->buffer->access = &ring_sw_access_funcs;
iio->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
&my_poll_handler,
IRQF_ONESHOT, //<-not sure about this flag
iio,
"my_consumer%d",//<-where is this for?
iio->id);
iio->buffer->setup_ops = &my_ring_setup_ops;
iio->modes |= INDIO_BUFFER_TRIGGERED;//<-correct mode?
Where my access funcs are:
.preenable = &my_buffer_preenable,
.postenable = &iio_triggered_buffer_postenable,
.predisable = &iio_triggered_buffer_predisable,
.postdisable = &my_buffer_postdisable
where:
preenable just sets
iio->buffer->access->set_bytes_per_datum(iio->buffer, 19);
and enables the irq
postenable disables the irq
My irq handler does basically this:
disable_irq_nosync(irq);
iio_trigger_poll(adc->trig, iio_get_time_ns());
return IRQ_HANDLED;
My poll handler does this:
ring->access->store_to(ring, (u8 *)data, pf->timestamp);
iio_trigger_notify_done(iio->trig);
enable_irq(adc->spi->irq);
return IRQ_HANDLED;
Is the approach of using the sw ring and the interrupt & poll_func more
or less correct?
I've read ring.txt but still I get most of my kernel panics somewhere in
ring of buffer management, so I must be doing something wrong there.
Is any (simple) driver recommended as reference? I see different
approaches in different drivers and I can't test them.
--Lo
next reply other threads:[~2013-07-30 19:55 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-30 19:55 Lo [this message]
2013-07-30 22:28 ` continuous mode driver for spi device with interrupt Jonathan Cameron
2013-07-31 11:22 ` Lo
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=51F81A1D.7000003@gmail.com \
--to=dm81xx@gmail.com \
--cc=linux-iio@vger.kernel.org \
/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.