projects
/
cascardo
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
925baf3
)
gpio: max730x: set gpiochip data pointer before using it
author
Christophe Leroy
<christophe.leroy@c-s.fr>
Mon, 8 Aug 2016 13:58:56 +0000
(15:58 +0200)
committer
Linus Walleij
<linus.walleij@linaro.org>
Wed, 10 Aug 2016 13:40:44 +0000
(15:40 +0200)
gpiochip_add_data() has to be called before calling
max7301_direction_input()
[ 4.389883] Unable to handle kernel paging request for data at address 0x00000018
[ 4.397282] Faulting instruction address: 0xc01a8cbc
[ 4.402023] Oops: Kernel access of bad area, sig: 11 [#1]
[ 4.407331] PREEMPT CMPC885
[ 4.410131] CPU: 0 PID: 6 Comm: kworker/u2:0 Not tainted
4.5.0-gacdfdee
#39
[ 4.418592] Workqueue: deferwq deferred_probe_work_func
[ 4.423711] task:
c60798b0
ti:
c608a000
task.ti:
c608a000
[ 4.429038] NIP:
c01a8cbc
LR:
c01a8e24
CTR:
c01ff028
[ 4.433953] REGS:
c608bad0
TRAP: 0300 Not tainted (
4.5.0-s3k-dev-gacdfdee
-svn-dirty)
[ 4.441847] MSR:
00009032
<EE,ME,IR,DR,RI> CR:
33039553
XER:
a000f940
[ 4.448395] DAR:
00000018
DSISR:
c0000000
GPR00:
c01a8e24
c608bb80
c60798b0
c60d6f6c
00000004
00000002
07de2900
00700000
GPR08:
00000000
00000000
c608a000
00001032
35039553
00000000
c002f37c
c6010b64
GPR16:
c6010a48
c6010a14
c6010a00
00000000
c0450000
c0453568
c0453438
c050db14
GPR24:
c62662bc
00000009
ffffffaa
c60d6f5d
00000001
00000000
00000000
00000000
[ 4.480371] NIP [
c01a8cbc
] max7301_direction_input+0x20/0x9c
[ 4.485951] LR [
c01a8e24
] __max730x_probe+0xec/0x138
[ 4.490812] Call Trace:
[ 4.493268] [
c608bba0
] [
c01a8e24
] __max730x_probe+0xec/0x138
[ 4.498878] [
c608bbc0
] [
c01cc368
] driver_probe_device+0x190/0x38c
[ 4.504895] [
c608bbf0
] [
c01ca918
] bus_for_each_drv+0x58/0xb4
[ 4.510489] [
c608bc20
] [
c01cc04c
] __device_attach+0x8c/0x110
[ 4.516082] [
c608bc50
] [
c01cab80
] bus_probe_device+0x34/0xb8
[ 4.521673] [
c608bc70
] [
c01c96c8
] device_add+0x3c0/0x598
[ 4.526925] [
c608bcb0
] [
c0200f90
] spi_add_device+0x114/0x160
[ 4.532512] [
c608bcd0
] [
c02018d0
] spi_register_master+0x6e0/0x7c8
[ 4.538537] [
c608bd20
] [
c02019fc
] devm_spi_register_master+0x44/0x8c
[ 4.544824] [
c608bd40
] [
c0203854
] of_fsl_spi_probe+0x458/0x57c
[ 4.550587] [
c608bda0
] [
c01cd828
] platform_drv_probe+0x30/0x74
[ 4.556366] [
c608bdb0
] [
c01cc368
] driver_probe_device+0x190/0x38c
[ 4.562383] [
c608bde0
] [
c01ca918
] bus_for_each_drv+0x58/0xb4
[ 4.567977] [
c608be10
] [
c01cc04c
] __device_attach+0x8c/0x110
[ 4.573572] [
c608be40
] [
c01cab80
] bus_probe_device+0x34/0xb8
[ 4.579170] [
c608be60
] [
c01cb9b4
] deferred_probe_work_func+0xa4/0xc4
[ 4.585438] [
c608be80
] [
c0029c04
] process_one_work+0x22c/0x414
[ 4.591201] [
c608bea0
] [
c002a100
] worker_thread+0x314/0x5c0
[ 4.596722] [
c608bef0
] [
c002f444
] kthread+0xc8/0xcc
[ 4.601538] [
c608bf40
] [
c000af84
] ret_from_kernel_thread+0x5c/0x64
[ 4.607596] Instruction dump:
[ 4.610530]
7c0803a6
bba10014
38210020
4e800020
7c0802a6
9421ffe0
38840004
bf810010
[ 4.618188]
90010024
549cf0be
83c30010
549d0f7c
<
813e0018
>
7fc3f378
7d3f2430
57ff07fe
[ 4.626041] ---[ end trace
303adb021dd4caf2
]---
Cc: stable@vger.kernel.org
fixes:
5e45e01916197
("gpio: max730x: use gpiochip data pointer")
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-max730x.c
patch
|
blob
|
history
diff --git
a/drivers/gpio/gpio-max730x.c
b/drivers/gpio/gpio-max730x.c
index
0880736
..
946d091
100644
(file)
--- a/
drivers/gpio/gpio-max730x.c
+++ b/
drivers/gpio/gpio-max730x.c
@@
-192,6
+192,10
@@
int __max730x_probe(struct max7301 *ts)
ts->chip.parent = dev;
ts->chip.owner = THIS_MODULE;
+ ret = gpiochip_add_data(&ts->chip, ts);
+ if (ret)
+ goto exit_destroy;
+
/*
* initialize pullups according to platform data and cache the
* register values for later use.
@@
-213,10
+217,6
@@
int __max730x_probe(struct max7301 *ts)
}
}
- ret = gpiochip_add_data(&ts->chip, ts);
- if (ret)
- goto exit_destroy;
-
return ret;
exit_destroy: