AnsweredAssumed Answered

Wacom bringup issue i.MX7

Question asked by arsadhusain momin on Jan 10, 2018
Latest reply on Jan 11, 2018 by arsadhusain momin

Hi, 

 

I'm trying to run Wacom EMR sensor with the i.MX 7Dual SABRE Board. 

 

I'm able to detect the EMR on i2c bus at address 0x09. 

 

root@imx7dsabresd:~# i2cdetect -y 3 
0 1 2 3 4 5 6 7 8 9 a b c d e f 
00: -- -- -- -- -- -- 09 -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 

 


I'm using the wacom_i2c.c driver for driving the EMR sensor.

drivers/input/touchscreen/wacom_i2c.c - kernel/bcm - Git at Google 
The driver is probing fine. 

 


root@imx7dsabresd:~# insmod wacom_i2c.ko 
root@imx7dsabresd:~# echo WAC_I2C_EMR 0x09 > /sys/bus/i2c/devices/i2c-3/new_device 
input report length 15 
x_max:27040, y_max:20280, pressure:4095, fw:4434 
height:255, tilt_x:9000, tilt_y:9000 
wacom_i2c_probe feature_xmax: 27040 feature_ymax: 20280 
input: Wacom I2C Digitizer as /devices/platform/soc/30800000.aips-bus/30a50000.i2c/i2c-3/3-0009/input/input6 
i2c i2c-3: new_device: Instantiated device WAC_I2C_EMR at 0x09 

 


Now as soon as I try to use the stylus, I get an interrupt but the kernel crashes and I get a stack dump on the logs.

 

BUG: scheduling while atomic: swapper/0/0/0x00010002 
Modules linked in: wacom_i2c(O) 
Preemption disabled at:[< (null)>] (null) 

CPU: 0 PID: 0 Comm: swapper/0 Tainted: G O 4.1.15-2.1.0+g30278ab #165 
Hardware name: Freescale i.MX7 Dual (Device Tree) 
[<80015d78>] (unwind_backtrace) from [<8001271c>] (show_stack+0x10/0x14) 
[<8001271c>] (show_stack) from [<808048a8>] (dump_stack+0x84/0xc4) 
[<808048a8>] (dump_stack) from [<800530d4>] (__schedule_bug+0x6c/0xc0) 
[<800530d4>] (__schedule_bug) from [<808083f0>] (__schedule+0x450/0x508) 
[<808083f0>] (__schedule) from [<808084e8>] (schedule+0x40/0x98) 
[<808084e8>] (schedule) from [<80511d50>] (i2c_imx_bus_busy+0x64/0xec) 
[<80511d50>] (i2c_imx_bus_busy) from [<805123d0>] (i2c_imx_xfer+0x34c/0xe7c) 
[<805123d0>] (i2c_imx_xfer) from [<8050e4dc>] (__i2c_transfer+0x13c/0x278) 
[<8050e4dc>] (__i2c_transfer) from [<8050e6ac>] (i2c_transfer+0x94/0xc4) 
[<8050e6ac>] (i2c_transfer) from [<8050e768>] (i2c_master_recv+0x40/0x50) 
[<8050e768>] (i2c_master_recv) from [<7f0000a4>] (wacom_i2c_irq+0x1c/0x1ac [wacom_i2c]) 
[<7f0000a4>] (wacom_i2c_irq [wacom_i2c]) from [<8006f158>] (handle_irq_event_percpu+0x78/0x134) 
[<8006f158>] (handle_irq_event_percpu) from [<8006f250>] (handle_irq_event+0x3c/0x5c) 
[<8006f250>] (handle_irq_event) from [<80071db4>] (handle_level_irq+0xc4/0x13c) 
[<80071db4>] (handle_level_irq) from [<8006e7f8>] (generic_handle_irq+0x2c/0x3c) 
[<8006e7f8>] (generic_handle_irq) from [<802e3e90>] (mxc_gpio_irq_handler+0x38/0x100) 
[<802e3e90>] (mxc_gpio_irq_handler) from [<802e3fd8>] (mx3_gpio_irq_handler+0x80/0xcc) 
[<802e3fd8>] (mx3_gpio_irq_handler) from [<8006e7f8>] (generic_handle_irq+0x2c/0x3c) 
[<8006e7f8>] (generic_handle_irq) from [<8006eab0>] (__handle_domain_irq+0x7c/0xec) 
[<8006eab0>] (__handle_domain_irq) from [<8000944c>] (gic_handle_irq+0x24/0x5c) 
[<8000944c>] (gic_handle_irq) from [<80013200>] (__irq_svc+0x40/0x74) 
Exception stack(0x80b8ff18 to 0x80b8ff60) 
ff00: 00000000 ab722380 
ff20: 00000001 80b8e000 ab71eed0 00000002 43fec61a 00000014 4aa320a1 00000014 
ff40: 00000001 00000000 00000000 80b8ff60 8080ba34 8057a784 20060013 ffffffff 
[<80013200>] (__irq_svc) from [<8057a784>] (cpuidle_enter_state+0xd8/0x20c) 
[<8057a784>] (cpuidle_enter_state) from [<80066404>] (cpu_startup_entry+0x1fc/0x320) 
[<80066404>] (cpu_startup_entry) from [<80b20c6c>] (start_kernel+0x39c/0x3a8) 
BUG: scheduling while atomic: swapper/0/0/0x00010002 
Modules linked in: wacom_i2c(O) 
Preemption disabled at:[< (null)>] (null) 

 

 

I see a few spikes on SDA line as shown in the image.


 

 

But after that I receive nothing.

The processor loses its I2C clock.

I'm not sure if it's a processor side issue or slave device issue.

I've setup everything as per the datasheet.

I've tried it with modified I2C clock from 10Khz to 500Khz and ended up with same results.

 

Anyone have any idea about what could be wrong here.

Please help.

Thanks.

Outcomes