Commit d1bc04a
lcd: fix crash of DataImage SCF0403 LCD driver
If platform data provides -EINVAL for gpio_reset field, the below crash
can be observed.
-------------------cut--------------------
Unable to handle kernel paging request at virtual address 0009012f
pgd = c0004000
[0009012f] *pgd=00000000
Internal error: Oops: 5 [#1] SMP
Modules linked in:
CPU: 0 Not tainted (3.0.35-cm-fx6-02054-g6dfb446-dirty #77)
PC is at gpio_set_value_cansleep+0x1c/0x34
LR is at 0x900ff
pc : [<c027db50>] lr : [<000900ff>] psr: 20000013
sp : e9fdded8 ip : ffffffea fp : 00000000
r10: 00000000 r9 : 00000000 r8 : ffffffea
r7 : ffffffea r6 : c07560dc r5 : e9ce6480 r4 : ffffffea
r3 : c07a0e00 r2 : 00000001 r1 : 00000001 r0 : ffffffbe
Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 10c53c7d Table: 1000404a DAC: 00000015
Process swapper (pid: 1, stack limit = 0xe9fdc2f0)
Stack: (0xe9fdded8 to 0xe9fde000)
dec0: e9d9ed20
c02a41f8
dee0: e9d99600 c05786fc e9d99600 e9d99608 c07661d4 c0000000 c07a4ffc
c07661d4
df00: e9d99600 c02e2730 c07661d4 c0341814 c03417fc c02e25d4 e9d99600
c07661d4
df20: e9d99634 c02e2730 c001ccf4 c02e2718 00000000 e9d99600 c07661d4
c02e27bc
df40: c07661d4 00000000 e9fddf50 c02e1dd0 e9e5f79c e9d9ed54 c075966c
c07661d4
df60: c076fab8 e9eb4e60 00000000 c02e15dc c06a1d80 c078a5a0 c078a5a0
c07661d4
df80: 00000000 00000000 c001ccf4 00000000 00000000 c02e2da8 c078a5a0
c0032dd0
dfa0: c004695c 00000000 c001ccf4 c003f4d0 00000000 c0140000 00000000
c0758880
dfc0: 000001f0 c004695c c0032bb8 c0032dd0 c004695c 00000013 00000000
00000000
dfe0: 00000000 c0008454 00000000 00000000 c000839c c004695c 29040e94
950b8a00
[<c027db50>] (gpio_set_value_cansleep+0x1c/0x34) from [<c02a41f8>]
(scf0403_gpio_reset+0x10/0x44)
[<c02a41f8>] (scf0403_gpio_reset+0x10/0x44) from [<c05786fc>]
(scf0403_probe+0xe0/0x1dc)
[<c05786fc>] (scf0403_probe+0xe0/0x1dc) from [<c0341814>]
(spi_drv_probe+0x18/0x1c)
[<c0341814>] (spi_drv_probe+0x18/0x1c) from [<c02e25d4>]
(really_probe+0x64/0x160)
[<c02e25d4>] (really_probe+0x64/0x160) from [<c02e2718>]
(driver_probe_device+0x48/0x60)
[<c02e2718>] (driver_probe_device+0x48/0x60) from [<c02e27bc>]
(__driver_attach+0x8c/0x90)
[<c02e27bc>] (__driver_attach+0x8c/0x90) from [<c02e1dd0>]
(bus_for_each_dev+0x60/0x8c)
[<c02e1dd0>] (bus_for_each_dev+0x60/0x8c) from [<c02e15dc>]
(bus_add_driver+0xa8/0x298)
[<c02e15dc>] (bus_add_driver+0xa8/0x298) from [<c02e2da8>]
(driver_register+0x78/0x18c)
[<c02e2da8>] (driver_register+0x78/0x18c) from [<c003f4d0>]
(do_one_initcall+0x34/0x180)
[<c003f4d0>] (do_one_initcall+0x34/0x180) from [<c0008454>]
(kernel_init+0xb8/0x148)
[<c0008454>] (kernel_init+0xb8/0x148) from [<c004695c>]
(kernel_thread_exit+0x0/0x8)
Code: e0800080 e34c307a e1a02001 e793e100 (e59e1030)
---[ end trace 65f8ea860415c04f ]---
Kernel panic - not syncing: Attempted to kill init!
----------------------cut--------------
Fix the above crash by checking if the GPIO is valid before toggling.
Signed-off-by: Igor Grinberg <[email protected]>1 parent 8e07493 commit d1bc04a
1 file changed
+3
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
39 | 42 | | |
40 | 43 | | |
41 | 44 | | |
| |||
0 commit comments