1

我正在使用 imx6 双光数字板。我想添加 Ad7879 触摸支持。我一直遵循以下步骤:

-首先我更改了内核配置文件,添加了对触摸屏和 ad7879 的支持。在内核配置文件中,我做了以下更改:

CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_AD7879=y
CONFIG_TOUCHSCREEN_AD7879_I2C=y

首先,我将 ad7879 配置为模块:

CONFIG_INPUT_TOUCHSCREEN=y 
CONFIG_TOUCHSCREEN_AD7879=m  
CONFIG_TOUCHSCREEN_AD7879_I2C=m

之后,我在设备树中进行了设备初始化。

在 imx6qdl-ccimx6sbc.dtsi 文件中,我放了下一个:

&i2c3 {

ad7879@2c 
{
         compatible = "adi,ad7879-1";
         reg = <0x2c>;
         interrupt-parent = <&gpio6>;
         interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
         touchscreen-max-pressure = <4096>;
         adi,resistance-plate-x = <120>;
        adi,first-conversion-delay = /bits/ 8 <3>;
         adi,acquisition-time = /bits/ 8 <1>;
        adi,median-filter-size = /bits/ 8 <2>;
         adi,averaging = /bits/ 8 <1>;
         adi,conversion-interval = /bits/ 8 <255>;

};

ad78​​79 中断控制器连接到 EXP_I2C_IRQ_N 引脚中的 imx6 即 GPIO_6_15,因此我将中断父级 = <&gpio6> 和中断 = <15 IRQ_TYPE_EDGE_FALLING>;。

在 imx6qdl-ccimx6sbc.dts 文件中我输入:

&i2c3 {
    ...



    ad7879@2c {
        status ="okay";
    };
    ...
};

然后我接着编译 linux 映像和设备树。在带有 linux 映像的 imx6 中,我将 ad7879 配置为模块,我加载了 ad7879 模块,这样做:

root:~> modprobe ad7879
root:~> modprobe ad7879-i2c

但是没有关于 ad7879 的日志消息,也没有关联的 ad7879 节点。

如果我检查设备节点以检查设备节点:

root@ccimx6sbc: ls -la /dev/input/
drwxr-xr-x    4 root     root           180 Jan  1  2000 .
drwxr-xr-x   14 root     root          3480 May 16 14:49 ..
drwxr-xr-x    2 root     root            80 Jan  1  2000 by-id
drwxr-xr-x    2 root     root           120 Jan  1  2000 by-path
crw-rw----    1 root     input      13,  64 Jan  1  2000 event0
crw-rw----    1 root     input      13,  65 Jan  1  2000 event1
crw-rw----    1 root     input      13,  66 Jan  1  2000 event2
crw-rw----    1 root     input      13,  63 Jan  1  2000 mice
crw-rw----    1 root     input      13,  32 Jan  1  2000 mouse0



root@ccimx6sbc:# cat /sys/class/input/input0/name
da9063-onkey
root@ccimx6sbc:# cat /sys/class/input/input1/name
Genius 4D Scroll Mouse
root@ccimx6sbc:# cat /sys/class/input/input2/name
sgtl5000-audio Headphone Jack

您可以看到没有关联的节点。

root@ccimx6sbc:# cat /proc/interrupts
           CPU0       CPU1       
 29:     140884      13795       GIC  29  twd
 34:        406          0       GIC  34  sdma
 35:          0          0       GIC  35  VPU_JPG_IRQ
 37:          1          0       GIC  37  2400000.ipu
 38:         12          0       GIC  38  2400000.ipu
 42:         28          0       GIC  42
 44:          0          0       GIC  44  VPU_CODEC_IRQ
 50:          0          0       GIC  50  vdoa
 51:          0          0       GIC  51  rtc alarm
 54:         52          0       GIC  54  mmc3
 55:         52          0       GIC  55  mmc1
 57:       3580          0       GIC  57  mmc0
 61:        353          0       GIC  61  21f0000.serial
 63:          0          0       GIC  63  2008000.ecspi
 69:        472          0       GIC  69  21a4000.i2c
 70:       1367          0       GIC  70  21a8000.i2c
 72:        109          0       GIC  72  2184200.usb
 75:          0          0       GIC  75  2184000.usb
 79:          0          0       GIC  79  202c000.ssi
 81:          0          0       GIC  81  imx_thermal
 87:        167          0       GIC  87  i.MX Timer Tick
112:          0          0       GIC 112  20bc000.wdog
134:          0          0       GIC 134  mipi_dsi
137:        466          0       GIC 137  2101000.jr0
138:          0          0       GIC 138  2102000.jr1
139:          0          0       GIC 139  mmdc_1
144:          0          0       GIC 144  mmdc_1
147:          0          0       GIC 147  20e0000.hdmi_video
150:      62234          0       GIC 150  2188000.ethernet
151:          0          0       GIC 151  2188000.ethernet
192:          0          0  gpio-mxc   0  headphone detect
364:          1          0  gpio-mxc  12  da9063-irq
413:          0          1  da9063-irq   3  HWMON
414:          0          0  da9063-irq   0  ONKEY
415:          0          0  da9063-irq   1  ALARM
IPI0:          0          0  CPU wakeup interrupts
IPI1:          0         58  Timer broadcast interrupts
IPI2:       1405       2387  Rescheduling interrupts
IPI3:          0          0  Function call interrupts
IPI4:         19         33  Single function call interrupts
IPI5:          0          0  CPU stop interrupts
IPI6:        426        476  IRQ work interrupts
IPI7:          0          0  completion interrupts
Err:          0

您可以确保没有与 ad7879 关联的中断。

当我使用此配置构建 linux 内核时没有区别:

CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_AD7879=y
CONFIG_TOUCHSCREEN_AD7879_I2C=y

我确实运行了 dmesg 并且没有与 ad7879 关联的日志条目。

在 imx6 linux 中,我执行了以下命令:

>root@ccimx6sbc:i2cdetect 2

有了这个回应:

WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-2.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- UU -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- 2c -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --    

如果可以看到检测到设备的标识符(0x2c)。

然后我做了:

>root@ccimx6sbc: i2cdump -r 0-0x40 2 0x2c

有了这个回应:

No size specified (using byte-data access)
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-2, address 0x2c, mode byte
Probe range limited to 0x00-0x40.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 00 00 40 00 00 00 00 00 00 00 00 00 00 00 03 00    ..@...........?.
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
40: 00  

您可以看到0x02和0x0e是ad7879寄存器的两个默认值,它们是正确的。所以我得出结论,控制器连接良好。

如果我错过了什么,我不会。

4

0 回答 0