Re: [PATCH 1/5] staging:iio:core add in kernel interface mapping and getting IIO channels.

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

 



On 02/09/2012 06:10 PM, Greg KH wrote:
> On Sun, Jan 29, 2012 at 11:46:50AM +0000, Jonathan Cameron wrote:
>> From: Jonathan Cameron <jic23@xxxxxxxxx>
>>
>> Lifted from proposal for in kernel interface built on the out of staging
>> branch.
>>
>> Two elements here:
>> * Map as defined in "inkern.h"
>> * Matching code to actually get the iio_dev and channel
>> that we want from the global list of IIO devices.
>>
>> V2: As per Greg KH suggestion, move over to registration by passing
>> the tables into the provider drivers (how regulator does it).
>> This does not prevent us using the original more flexible approach
>> if at a later date there is a usecase that demands it.
>>
>> Signed-off-by: Jonathan Cameron <jic23@xxxxxxxxxx>
>> ---
>>  drivers/staging/iio/Kconfig             |    7 +-
>>  drivers/staging/iio/Makefile            |    2 +-
>>  drivers/staging/iio/consumer.h          |  103 +++++++++++++
>>  drivers/staging/iio/driver.h            |   34 ++++
>>  drivers/staging/iio/iio_core.h          |    3 +
>>  drivers/staging/iio/industrialio-core.c |    2 +-
>>  drivers/staging/iio/inkern.c            |  256 +++++++++++++++++++++++++++++++
>>  drivers/staging/iio/machine.h           |   30 ++++
>>  8 files changed, 434 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig
>> index 90162aa..65c2a8e 100644
>> --- a/drivers/staging/iio/Kconfig
>> +++ b/drivers/staging/iio/Kconfig
>> @@ -10,8 +10,14 @@ menuconfig IIO
>>  	  drivers for many different types of embedded sensors using a
>>  	  number of different physical interfaces (i2c, spi, etc). See
>>  	  drivers/staging/iio/Documentation for more information.
>> +
>>  if IIO
>>  
>> +config IIO_INKERN
>> +	bool "In kernel support for IIO"
>> +	help
>> +	  Support in kernel users of IIO device drivers.
> 
> Of course you want this, all of the code in the kernel.org tree is "in
> kernel users" :)
> 
> Seriously, I still fail to understand what is so special here that makes
> this a totally different design pattern from all other busses,
> especially when you aren't even a bus at all, but rather a "interface"
> to userspace for different device types.
> 
> Why can't a driver just depend on this interface type, like all other
> interface types are, that way the built-in vs. as-a-module issues are
> all handled "automagically" by the config and build system.
> 
Best simple comparison is with regulators.  They provide voltages to
consumers; This iio stuff is about providing readings of voltage
(simplifying massively) to other users.  All these adc's need
their own driver to provide that voltage to those that care.
The client drivers just want to ask 'what is the voltage?'.

So to do it as a conventional module dependency we need a separate
dependency for every IIO device capable of providing a voltage
to every driver that might want to read one.

There are a number of common use cases or which I'll list a few here.
a) Soc adc's.  Typical soc might have an 8 channel adc.  On a typical
board 2 channels are used for input (touchscreen), 2 for monitoring the
battery and
4 brought out to an edge connector.  Which are used for what and how
many of each are used is entirely under control of the board designer.
Thus we could have each SoC type adc driver handle the logic necessary
to register an input device, a hwmon device (and perhaps an IIO device).
This is the usecase that Mark Brown originally brought up.  Right now
Arnd is blocking some SoC adc drivers that do this internally and
sending them in the direction of IIO.

b) High spec devices used for input.  This one we originally proposed
doing via a bridge in userspace and piping back in via uinput.
When I say high spec I meant 300+ dolar imu's etc.  People do it
for niche systems, but the part will never primarily be used for this
so normally sits better in IIO, If we have borderline devices, they
will end up in IIO.  If this stuff had been in place earlier (as
Dmitry pushed for) some of the existing parts in input might
never have been accepted.

c) The other side is generating signals.  People use arbitary waveform
generators to produce inputs for all sort of strange devices.

So the question was whether to sit another subsystem under hwmon, input
IIO etc, or to have IIO evolve into that underlying subsystem.  Given
with the channel mapping stuff we already had all the infrastructure
in place to do this, a vague consensus said do it in IIO.

Now in many ways we'd love to have the IIO userspace stuff act as
just another client, but that's a way off yet basically due to the huge
number of special cases that would need to be handled.  I'm personally
not yet sure that will ever happen.

So in summary we don't do this as a simple dependency because of the
combinatorial explosion in dependencies that would be needed and the
connection modules that would be needed to glue it all together
vs what is a simple mapping that will sit nicely in device tree etc.

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