Imx6ul how to use ADC continues mode from the userspace with libiio

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Imx6ul how to use ADC continues mode from the userspace with libiio

2,354 Views
pavlospanagioti
Contributor I

Hi All,

I try to make the continues mode work for the embedded adc of the imx6ul. Single mode works perfectly according to my device tree configuration. I compiled libiio and tried to use the buffer mode which returns with the following error:

$ ./iio_readdev 2198000.adc

Unable to allocate buffer: Invalid argument

Then I tried to configure the buffer from the file system with the following commands 

$ echo 1 > /sys/bus/iio/devices/iio\:device0/scan_elements/in_voltage0_en
$ echo 100 > /sys/bus/iio/devices/iio\:device0/buffer/length
But when I enable the buffer I get the following error:
$ echo 1 > /sys/bus/iio/devices/iio\:device0/buffer/enable
 -sh: echo: write error: Invalid argument
The version of my kernel is 
4.12.4-BSP-Yocto

What I do know is that the adc peripheral (adc@02198000) and the kernel driver vf610-adc have buffer support. Additionally there is this document called IMX6LXRM Rev. 0, 12/2015 i.MX Linux® Reference Manual which claims that continues mode is not supported but that document is already very outdated. 

Tags (1)
0 Kudos
2 Replies

1,692 Views
igorpadykov
NXP Employee
NXP Employee

Hi  PAVLOSPANAGIOTIS

continuous conversion is enabled by bit ADCO register ADCx_GC,

described in sect.13.6.7 General control register (ADCx_GC) i.MX6UL Reference Manual

http://www.nxp.com/docs/en/reference-manual/IMX6ULRM.pdf 

One can try to add this flag to driver sources in /linux/drivers/iio/adc/vf610_adc.c

linux-imx.git - i.MX Linux Kernel 

using "of_property_read_u32", use as example "num-channels" dts property in:

linux/arch/arm/boot/dts/imx6ul.dtsi

linux-imx.git - i.MX Linux Kernel 

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

1,692 Views
pavlospanagioti
Contributor I

Hi Igor,
Thanks for the fast reply. 

I took a deeper look into the vf610_adc driver and it looks like it has full implementation of the continues mode. 
In detail there is control  register field define VF610_ADC_ADCON that enables the continues mode in vf610_adc_buffer_postenable and disables the continues mode in  vf610_adc_buffer_predisable. So in my understanding there shouldn't be any need to add any additional flag to the driver or create a dts property. From some debugging it looks like the following error 

$ echo 1 > /sys/bus/iio/devices/iio\:device0/buffer/enable
 -sh: echo: write error: Invalid argument

Is not related to the vf610 driver but the iio buffer or trigger driver. Do you know if there is a special configuration needed for the buffer except from doing the initialisation as pointed in the original post? 

Many Thanks and Kind Regards,

Pavlos

0 Kudos