Skip to content

Commit 419c5a9

Browse files
Igor Grinbergmtx512
Igor Grinberg
authored and
mtx512
committed
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 2297ad1 commit 419c5a9

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

drivers/video/backlight/scf0403.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ struct scf0403_priv {
3636

3737
static void scf0403_gpio_reset(unsigned int gpio)
3838
{
39+
if (!gpio_is_valid(gpio))
40+
return;
41+
3942
gpio_set_value_cansleep(gpio, 1);
4043
msleep(100);
4144
gpio_set_value_cansleep(gpio, 0);

0 commit comments

Comments
 (0)