Howdy! I did a test implementation of the lis302dl interrupt handler using the spi_async scheme. It doesn't quite work, but I'm sure I've just done some slight mistake in some place. But I'm still pessimistic about this work.
I took a peek at the implementation, and what spi_async() really boils down to is a call to spi_bitbang_transfer(), which is in drivers/spi/spi_bitbang.c. This in turn simply uses a workqueue to schedule the operations for later. All reg_reads are done this way via spi_sync, so while the spi_async method should be more efficient than using a plain workqueue, it still uses the same principle. The race condition is still there as it depends on the workqueue. I'll see if I can get a working version as well :-) // Simon
