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/b212c72a-39e1-4144-8fdf-bf81d41225c0n%40googlegroups.com.

Reply via email to