Input: adc-joystick - fix ordering in adc_joystick_probe()
Subsystems (2)
Dmitry Torokhov
maintainerPATCH 1/1 Input: adc-joystick - fix ordering in adc_joystick_probe()
We should register the IIO buffer before we register the input device, because as soon as the device is registered input handlers may attach to it, resulting in a call to adc_joystick_open() which makes use of the said buffer.
---
Not tested on hardware...
drivers/input/joystick/adc-joystick.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
drivers/input/joystick/adc-joystick.c +8 -7
@@ -222,13 +222,6 @@ static int adc_joystick_probe(struct platform_device *pdev)if (error)return error; -input_set_drvdata (input, joy); - error =input_register_device (input); -if (error) { -dev_err (dev,"Unable to register input device\n" ); -return error; - } - joy->buffer =iio_channel_get_all_cb (dev, adc_joystick_handle, joy);if (IS_ERR (joy->buffer)) {dev_err (dev,"Unable to allocate callback buffer\n" );
@@ -241,6 +234,14 @@ static int adc_joystick_probe(struct platform_device *pdev)return error; } +input_set_drvdata (input, joy); + + error =input_register_device (input); +if (error) { +dev_err (dev,"Unable to register input device\n" ); +return error; + } +return 0 ; }
Signature · 5 lines
2.37.0.144.g8ac04bfd2-goog -- Dmitry
Quoted 9 lines · Dmitry Torokhov
We should register the IIO buffer before we register the input device, because as soon as the device is registered input handlers may attach to it, resulting in a call to
adc_joystick_open()which makes use of the said buffer.Signed-off-by Dmitry Torokhov <[email protected]>---
Not tested on hardware...
Hi Dmitry,
nice catch, thanks! I will verify the operation on hardware some time over the weekend. Small nitpick inline. With that changed:
Quoted 28 lines
drivers/input/joystick/adc-joystick.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)drivers/input/joystick/adc-joystick.c +0
-7@@ -222,13 +222,6 @@ static int adc_joystick_probe(struct platform_device *pdev)if (error)return error; -input_set_drvdata (input, joy); - error =input_register_device (input); -if (error) { -dev_err (dev,"Unable to register input device\n" ); -return error; - } - joy->buffer =iio_channel_get_all_cb (dev, adc_joystick_handle, joy);if (IS_ERR (joy->buffer)) {drivers/input/joystick/adc-joystick.c +0
-0dev_err (dev,"Unable to allocate callback buffer\n" );@@ -241,6 +234,14 @@ static int adc_joystick_probe(struct platform_device *pdev)return error; }
drivers/input/joystick/adc-joystick.c static int adc_joystick_probe(struct · line 246
Quoted 10 lines
drivers/input/joystick/adc-joystick.c +8
-0+input_set_drvdata (input, joy); + + error =input_register_device (input); +if (error) { +dev_err (dev,"Unable to register input device\n" ); +return error; + } +return 0 ;
Since this is now the last thing the function does, we can simplify the code a bit:
``` error = input_register_device(input); if (error) dev_err(dev, "Unable to register input device\n"); return error; ```
Cheers,
Artur
Quoted 4 lines
drivers/input/joystick/adc-joystick.c +0
-1} --2.37.0.144.g8ac04bfd2-goog