Hi Roland, 
I am not sure that I completely understand your question but have you 
looked at the iio_generic_buffer 
(https://github.com/torvalds/linux/blob/master/tools/iio/iio_generic_buffer.c)? 
I did something similar 3 years ago and used this example to sample the BBB 
ADC using the iio driver and read the results in userspace after.
 Sorry if I am way off the mark here. 
Best 
Pierrick
Le lundi 8 mars 2021 à 10:21:03 UTC-5, droland a écrit :

> Hello,
>
> I find an "adc" device by the following code:
>
>
> *struct device dev;*
> *static int custom_match_dev(struct device *dev, const void *data)*
>
>
>
>
> *{    // this function implements the comaparison logic. Return not zero 
> if found.    const char *name = data;    int result = 0;*
>
> *    if (dev == NULL)*
>
>
>
>
>
>
>
>
> *        return result;    if (dev->of_node == NULL)        return 
> result;    if (dev->of_node->name == NULL)        return result;*
> *    result = sysfs_streq(name, dev->of_node->name);*
>
>
>
>
>
>
>
>
> *    return result;}static struct device *find_dev(const char *name){    
> struct device *dev = NULL;    dev = bus_find_device(&platform_bus_type, 
> NULL, name, custom_match_dev);    return dev;*
>
> *}*
>
> and there is an "adc" here:
> ~# 
>
> *cat /sys/bus/platform/devices/TI-am335x-adc.2.auto/of_node/nameadc*
>
>
>
> *~# ls 
> /sys/bus/platform/devices/TI-am335x-adc.2.auto/of_node/#io-channel-cells  
> compatible         name               ti,adc-channels*
>
>
>
>
> *~# ls /sys/bus/platform/devices/TI-am335x-adc.2.autodriver           
> iio:device0      of_node          subsystemdriver_override  
> modalias         power            uevent*
>
>
>
>
>
>
>
> *~# ls /sys/bus/iio/devices/iio\:device0/buffer/          in_voltage2_raw  
> in_voltage6_raw  power/dev              in_voltage3_raw  in_voltage7_raw  
> scan_elements/in_voltage0_raw  in_voltage4_raw  name             
> subsystem/in_voltage1_raw  in_voltage5_raw  of_node/         uevent*
> When I try to get the iio channels with *devm_IIo_channel_get *or* 
> devm_IIo_channel_get_all. *I always get -19 answer (no such device). I 
> also tried the *iio_channel_get *and* iio_channel_get_all *and the result 
> is same.
>
>
>
>
>
>
>
>
>
> *struct iio_channel *channels;channels = iio_channel_get(dev, 
> "iio:device0");    if (IS_ERR(channels))    {        printk(KERN_ERR 
> "channels: %d\n", (int)channels);        //return 0;       return 
> PTR_ERR(channels);    }*
>
> At the iio_channel_get second parameter I tried various stings like 
> channel number and other strings I found under /sys/bus/iio.... and path 
> above.
>
> What is wrong with this code? 
> Please give me any advice how I read adc channels in kernel space.
>
> Thank you in advance.
> Roland Dobak
>
>
>
>
> droland a következőt írta (2021. február 25., csütörtök, 13:17:22 UTC+1):
>
>>
>> Hello,
>>
>> I can read/write gpio pins from the kernel module, but now I should 
>> read/access ADC channels from the kernel modules.
>> I found some examples, but each uses file access with the open / read / 
>> close commands. they work well in user space but not in kernel space.
>> Some sample code uses sysfs_open with changing code segment (KERNEL_DS)  
>> (Unfortunately) I could not compile my module because the sysfs commands 
>> were not exported in Linux source and I think the file operations is not a 
>> good idea in kernel space. 
>>
>> I'm working on a custom build Linux with 5.4 kernel on Beaglebone Black. 
>> Thanks to some articles by Derek Molloy, I can access to gpio, but I got 
>> stuck at the ADC (iio).
>> (I see and I can read the 
>> /sys/bus/iio/devices/iio\:device0/in_voltageX_raw and in user space works 
>> fine.)
>>
>> What is the correct mode or how can I read ADC channels from the kernel 
>> space/module (without segment manipulation)?
>> (I'm also interested in using the UART in kernel module...)
>>
>> Please, anyone help me with any useful information.
>>
>> Thank you in advance.
>>
>> Roland Dobak
>>
>>
>>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/2d0a2417-08e3-4008-bdf9-03636e62c663n%40googlegroups.com.

Reply via email to