Good point. I guess it's going to be a while before we work out an anywhere nearTypical requirements within an application include simply polling for current
readings, and using device triggered interrupts to grab data continuously to a
ring buffer, for collection by suitable userspace code. Obviously it would be
desirable to standardize sysfs controls for various calibration parameters as
much as possible across the various devices.
Also, I'd mention that most ADC devices could report in "bunched" mode,
i.e.
1. Request ADC readings from pins X, Y, Z1, Z2.
2. Wait for single IRQ
3. Read all the results
At handhelds.org, we've wrote quite good (I think) ADC subsystem,I know that feeling!
that keeps in mind ADC capabilities. It implements two interfaces:
in-kernel (e.g. for touchscreen drivers), and userspace interface via
sysfs. I was planning to implement drivers/input/ interface too.
I always don't find time to clean it up and submit, though.
Here is ADC subsystem itself:Looking at the code (briefly admittedly, I'll have a closer look tomorrow) it looks like a nice simple and
http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/linux/kernel26/drivers/misc/adc/adc.c
http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/linux/kernel26/include/linux/adc.h
^ It is in drivers/misc/, but I think better placement would be
drivers/adc.
Some drivers for this subsystem:I'll keep these part in mind, as a the moment adding any component for testing involves me getting my soldering iron out
http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/linux/kernel26/drivers/misc/adc/ads7846_adc_ssp.c
^ ADC driver for ADS7846 chips (HP iPaq hx4700 and some HTC phones, the
driver is using SSP subsystem, switching it to the SPI is still in my enless
TODO list).
http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/linux/kernel26/drivers/misc/adc/samcop_adc.cThanks. I'll have a look at the stuff above and pester you if I need a more recent version.
^ SAMCOP (HP iPaq H5xxx) ADC driver.
http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/linux/kernel26/drivers/misc/adc/tsc2200_adc_ssp.c
^ TSC2200 ADC driver (used AFAIK in some HTC phones, or ASUS handhelds).
http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/linux/kernel26/drivers/misc/adc/ad7877.c
^ AD7877 ADC driver (HTC phones too, IIRC).
Now, The Generic ADC Touchscreen Driver (tested to work quite good with all
above ADC drivers on appropriate hardware):
http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/linux/kernel26/drivers/input/touchscreen/ts-adc.c
And finally, ADC Battery driver ("backup" batteries in the iPaq devices
usually report their voltage via ADC chip, the same used by the
touchscreen).
http://handhelds.org/cgi-bin/cvsweb.cgi/~checkout~/linux/kernel26/drivers/power/adc_battery.c
p.s.
I have more recent (for current Linus' tree) code for ADC subsystem, but
it still needs some love to be submittable.