我加载adc驱动的时候,怎么不能注册呢?3.14的内核,
按照这个配置的http://processors.wiki.ti.com/index.php/Linux_Core_ADC_User%27s_Guide#Sample_Application
把adc配成模块,手动安装,无法进入到probe函数(没有打印)。
static int tiadc_probe(struct platform_device *pdev)
{
printk("——>probe\n");
…
…
}
root@am335x-evm:/lib/modules/3.14.43-g875c69b/kernel/drivers/iio/adc# lsmod
Module Size Used by
kfifo_buf 2417 0industrialio 46890 1 kfifo_buf
bufferclass_ti 5396 0omaplfb 12042 0snd_soc_evm 5589 0pvrsrvkm 177007 2 bufferclass_ti,omaplfb
cryptodev 32483 0snd_soc_davinci_mcasp 15606 2lis3lv02d_i2c 3153 0lis3lv02d 14936 1 lis3lv02d_i2c
snd_soc_tlv320aic3x 40349 1input_polldev 3345 1 lis3lv02d
root@am335x-evm:/lib/modules/3.14.43-g875c69b/kernel/drivers/iio/adc# ls
ti_am335x_adc.ko
am335x_adc.ko m:/lib/modules/3.14.43-g875c69b/kernel/drivers/iio/adc# insmod ti_a
root@am335x-evm:/lib/modules/3.14.43-g875c69b/kernel/drivers/iio/adc#root@am335x-evm:/lib/modules/3.14.43-g875c69b/kernel/drivers/iio/adc#root@am335x-evm:/lib/modules/3.14.43-g875c69b/kernel/drivers/iio/adc#root@am335x-evm:/lib/modules/3.14.43-g875c69b/kernel/drivers/iio/adc# lsmod
Module Size Used by
ti_am335x_adc 4562 0kfifo_buf 2417 1 ti_am335x_adc
industrialio 46890 2 ti_am335x_adc,kfifo_buf
bufferclass_ti 5396 0omaplfb 12042 0snd_soc_evm 5589 0pvrsrvkm 177007 2 bufferclass_ti,omaplfb
cryptodev 32483 0snd_soc_davinci_mcasp 15606 2lis3lv02d_i2c 3153 0lis3lv02d 14936 1 lis3lv02d_i2c
snd_soc_tlv320aic3x 40349 1input_polldev 3345 1 lis3lv02d
root@am335x-evm:~# ls -al /sys/bus/iio/devices/iio\:device0/
ls: /sys/bus/iio/devices/iio:device0/: No such file or directory
root@am335x-evm:~# ls -al /sys/bus/iio/devices/drwxr-xr-x 2 root root 0 Jul 6 22:15 .
drwxr-xr-x 4 root root 0 Jul 6 22:15 ..
root@am335x-evm:~#
下面是dts:
。。
&tscadc {
adc {
ti,adc-channels = <4 5 6 7>;
};
};
。。
Jian Zhou:
是不是printk()这个函数没有打开啊
user4701968:
回复 Jian Zhou:
打开了,测试过了printk可以正常打印信息。
insmod后还是没有反应,还找不到对应的文件,
root@am335x-evm:~# ls -al /sys/bus/iio/devices/iio\:device0
ls: /sys/bus/iio/devices/iio:device0: No such file or directory
这个文件下是空的:/sys/bus/iio/devices/
另外这个驱动ti_am335x_adc.ko是怎么跟dts匹配的?dts已经按照文档修改了。
如果要读取adc的值有几种操作方法?
Steven Liu1:
回复 user4701968:
wiki上面已经写的很详细了,如果你没有设备,先确认adc是否已经被配置,初始化成功。
http://processors.wiki.ti.com/index.php/Linux_Core_ADC_User%27s_Guide
http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_ADC
user4701968:
回复 Steven Liu1:
都按照文档做了,该配置的也都配置好了,还是无法生成设备文件,/sys/bus/iio/devices/这个目录还是空的,我的理解是adc驱动在加载的时候会去匹配.DTS里面相对应内容,如果有相同的name,寄存器也是正确的话,驱动程序就会进入到probe函数中执行,不知道我理解对不对。dts还有dtsi对应的内容如下:
am-335x-evmsk.dts:
&tscadc { status = "okay"; tsc { ti,wires = <4>; ti,x-plate-resistance = <200>; ti,coordinate-readouts = <5>; ti,wire-config = <0x00 0x11 0x22 0x33>; ti,charge-delay = <0xb000>; }; //下面三行是加上去的。 adc { ti,adc-channels = <4 5 6 7>; };};
—————————————————————————-
am33xx.dtsi:
tscadc: tscadc@44e0d000 { compatible = "ti,am3359-tscadc"; reg = <0x44e0d000 0x1000>; interrupt-parent = <&intc>; interrupts = <16>; ti,hwmods = "adc_tsc"; status = "disabled";
tsc { compatible = "ti,am3359-tsc"; }; am335x_adc: adc { #io-channel-cells = <1>; compatible = "ti,am3359-adc"; }; };
——————————-
ti_am335x_adc.c:
…..
static const struct of_device_id ti_adc_dt_ids[] = { { .compatible = "ti,am3359-adc", }, { }};MODULE_DEVICE_TABLE(of, ti_adc_dt_ids);
static struct platform_driver tiadc_driver = { .driver = { .name = "TI-am335x-adc", .owner = THIS_MODULE, .pm = TIADC_PM_OPS, .of_match_table = ti_adc_dt_ids, }, .probe = tiadc_probe, .remove = tiadc_remove,};module_platform_driver(tiadc_driver);
MODULE_DESCRIPTION("TI ADC controller driver");MODULE_AUTHOR("Rachna Patil <rachna@ti.com>");MODULE_LICENSE("GPL");
我不知道怎么回事,应该可以执行probe函数的。不知道我哪里出来问题,
另外我明明选中把adc driver编译进内核,但是启动后还是要手动加载,是不是这里导致的问题?
急等。。。
feng wang16:
回复 user4701968:
你好,请问你的tiadc无法创建的问题解决了吗?
我现在也碰到了类似的问题,查代码发现是在devices.c里am33xx_register_mfd_tscadc这个函数导致的,他在查找之后会直接创建ti_tscadc 这个设备,这个设备是否直接进行读取就可以的了还是说需要其他的操作才能读取到数据?