V3S的LRADC采样口 ,看内核里面有这个口的驱动 ,就是dtsi 和config里面要怎么去配置哦
离线
https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun8i-v3s.dtsi
lradc: lradc@1c22800 {
compatible = "allwinner,sun4i-a10-lradc-keys";
reg = <0x01c22800 0x400>;
interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
请问你有什么疑问?
在线
我就是dts中加了 因为我看到在dtsi中有lradc的配置
&lradc{
status = "okay";
};
离线
https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun8i-v3s.dtsi
lradc: lradc@1c22800 {
compatible = "allwinner,sun4i-a10-lradc-keys";
reg = <0x01c22800 0x400>;
interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};请问你有什么疑问?
dts和.config 里面不要去配置吗 只要配置这个dtsi 就可以了是吧
我刚才在dts里面设置了状态为ok了
离线
荔枝派默认配好了,启动就生成 /dev/event* 设备
我也是在找这个event设备 没有找到
离线
全局搜了下 就下面几个event0
有一个是在input下面但是这个不是这个lradc的
离线
在打印中出现这两个错误
1] sun4i-a10-lradc-keys 1c22800.lradc: keymap is missing in device tree
[ 2.179407] sun4i-a10-lradc-keys: probe of 1c22800.lradc failed with error -22
离线
在打印中出现这两个错误
1] sun4i-a10-lradc-keys 1c22800.lradc: keymap is missing in device tree
[ 2.179407] sun4i-a10-lradc-keys: probe of 1c22800.lradc failed with error -22
你应该烧 sun8i-v3s-licheepi-zero-dock.dtb: https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
&lradc {
vref-supply = <®_vcc3v0>;
status = "okay";
button-200 {
label = "Volume Up";
linux,code = <KEY_VOLUMEUP>;
channel = <0>;
voltage = <200000>;
};
button-400 {
label = "Volume Down";
linux,code = <KEY_VOLUMEDOWN>;
channel = <0>;
voltage = <400000>;
};
button-600 {
label = "Select";
linux,code = <KEY_SELECT>;
channel = <0>;
voltage = <600000>;
};
button-800 {
label = "Start";
linux,code = <KEY_OK>;
channel = <0>;
voltage = <800000>;
};
在线
晕哥 这个button-XXX是不是通过按键去设置一个输出电压??
麻烦你帮我解释下这几个button的功能是什么了
现在我的内核里面的event出来,因为我只要从这个event1里面去读取读取数据就可以了
离线
在线
这个代码我看过,主要是我只要从event1 读取数据就可以了,而且我不会通过按键去设置,是不是就是可以不用写用按键设置的啊
离线
不用了, 你读出按键值就可以了.
就是直接读取event1的就可以是吧,
离线
evtest 可以测试那四个按键:
# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: 1c22800.lradc
Select the device event number [0-0]: 0
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "1c22800.lradc"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 352 (KEY_OK)
Event code 353 (KEY_SELECT)
Properties:
Testing ... (interrupt to exit)
Event: time 2663.260991, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 1
Event: time 2663.260991, -------------- SYN_REPORT ------------
Event: time 2663.471909, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 0
Event: time 2663.471909, -------------- SYN_REPORT ------------
Event: time 2666.354566, type 1 (EV_KEY), code 353 (KEY_SELECT), value 1
Event: time 2666.354566, -------------- SYN_REPORT ------------
Event: time 2666.565488, type 1 (EV_KEY), code 353 (KEY_SELECT), value 0
Event: time 2666.565488, -------------- SYN_REPORT ------------
Event: time 2667.424816, type 1 (EV_KEY), code 352 (KEY_OK), value 1
Event: time 2667.424816, -------------- SYN_REPORT ------------
Event: time 2667.620117, type 1 (EV_KEY), code 352 (KEY_OK), value 0
Event: time 2667.620117, -------------- SYN_REPORT ------------
Event: time 2668.139619, type 1 (EV_KEY), code 352 (KEY_OK), value 1
Event: time 2668.139619, -------------- SYN_REPORT ------------
Event: time 2668.311484, type 1 (EV_KEY), code 352 (KEY_OK), value 0
Event: time 2668.311484, -------------- SYN_REPORT ------------
离线
evtest 可以测试那四个按键:
# evtest No device specified, trying to scan all of /dev/input/event* Available devices: /dev/input/event0: 1c22800.lradc Select the device event number [0-0]: 0 Input driver version is 1.0.1 Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100 Input device name: "1c22800.lradc" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 352 (KEY_OK) Event code 353 (KEY_SELECT) Properties: Testing ... (interrupt to exit) Event: time 2663.260991, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 1 Event: time 2663.260991, -------------- SYN_REPORT ------------ Event: time 2663.471909, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 0 Event: time 2663.471909, -------------- SYN_REPORT ------------ Event: time 2666.354566, type 1 (EV_KEY), code 353 (KEY_SELECT), value 1 Event: time 2666.354566, -------------- SYN_REPORT ------------ Event: time 2666.565488, type 1 (EV_KEY), code 353 (KEY_SELECT), value 0 Event: time 2666.565488, -------------- SYN_REPORT ------------ Event: time 2667.424816, type 1 (EV_KEY), code 352 (KEY_OK), value 1 Event: time 2667.424816, -------------- SYN_REPORT ------------ Event: time 2667.620117, type 1 (EV_KEY), code 352 (KEY_OK), value 0 Event: time 2667.620117, -------------- SYN_REPORT ------------ Event: time 2668.139619, type 1 (EV_KEY), code 352 (KEY_OK), value 1 Event: time 2668.139619, -------------- SYN_REPORT ------------ Event: time 2668.311484, type 1 (EV_KEY), code 352 (KEY_OK), value 0 Event: time 2668.311484, -------------- SYN_REPORT ------------
你这个evtest测试代码是内核里面吗
离线
对的
突然发现那个 ioctl这个函数无从下手啊
离线
因为这个lradc是6位 所以最大不会超过31 但是从打印数据来看好像不对
离线
你到荔枝派的板子上面测试吧, 我evtest试过键值和 dts一致。
就这几个里面的if语句 那个if 才是我读取的确切值 就是看打印跳变很大 我没有用button去控制 那我是不是可以将那个dock里面那几个button 给去掉了
最近编辑记录 无情一刀 (2019-07-23 11:34:00)
离线
怎样将那4个按键中断给去掉哦哦哦,我去掉了后报错,没有那个event 了
离线
去掉 dts 的 button, 这不问题又绕回到 6楼了吗?
是的 因为我这里不要这几个按钮中断 我就是只要读取event1里面的数据
然后读取出来那个code不一样 vaule,, 从文档里面看到 只有低6位才是数据
离线
没有 button 配置, 不就会出8楼的错误信息,
lradc->chan0_map_count = of_get_child_count(np);
if (lradc->chan0_map_count == 0) {
dev_err(dev, "keymap is missing in device tree\n");
然后不就退出初始化了吗?
只要读 ADC 值吗?
那可能要改驱动, 你看下杂项设备行不行?
在线
没有 button 配置, 不就会出8楼的错误信息,
lradc->chan0_map_count = of_get_child_count(np); if (lradc->chan0_map_count == 0) { dev_err(dev, "keymap is missing in device tree\n");
然后不就退出初始化了吗?
只要读 ADC 值吗?
那可能要改驱动, 你看下杂项设备行不行?
你说的杂项设备是???
离线
我现在直接将代码里面
error = sun4i_lradc_load_dt_keymap(dev, lradc);
if (error)
return error;
这里给屏蔽了
为什么出来的类型不是一样的哦 就是这个type 和code
离线
/dev下面有event1 我在驱动里面将那个读取中断按钮的给去掉了
error = sun4i_lradc_load_dt_keymap(dev, lradc);
if (error)
return error;
驱动能起来了 在/dev/input/event1 有这个文件。
就是读取的数据还是不对,不知道哪里还有问题
还有一个问题就是不知道为什么这里的code会不一致了 (这里是我引用层打印出来)
2222ev.type= 3 ev.code= 47 ev.value= 2
2222ev.type= 3 ev.code= 53 ev.value= 53
2222ev.type= 3 ev.code= 54 ev.value= 6
2222ev.type= 3 ev.code= 47 ev.value= 3
离线
这里是要进到中断里面才会去上报信息
如果我不借用按键的情况下 ,如何让1秒钟上报一次哦哦 通过定时器去上报这个信息
离线
event 设备不确定能不能做到这种效果。
我查了一下, adc在linux下有专门的驱动子系统 iio
使用方法:
http://kcmetercec.top/2018/08/01/linux_driver_IIO_client/
驱动程序:
https://github.com/torvalds/linux/blob/master/drivers/iio/adc/sun4i-gpadc-iio.c
设备树配置:
https://patches.linaro.org/patch/96842/
ths: ths@01c25000 {
compatible = "allwinner,sun8i-a33-ths";
reg = <0x01c25000 0x100>;
#thermal-sensor-cells = <0>;
#io-channel-cells = <0>;
};
上面是温度传感器的iio设备, 没有找到 lradc 的, 可能要改改才行
在线
顶一个
离线
离线