Skip to contentSkip to conversation

Input: adc-joystick - fix ordering in adc_joystick_probe()

PATCH In review Dmitry Torokhov 2 participants 2 messages Jul 9, 2022 – Jul 18, 2022

Subsystems (2)
lore
Share & tools
lore

Dmitry Torokhov

author maintainer
#0 lore raw

PATCH 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
index 78ebca7d400a..e0cfdc84763f 100644
@@ -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
Acked-by on v1 1/1
#1 lore raw
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.

---

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
index 78ebca7d400a..e0cfdc84763f 100644
@@ -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 -0
 		dev_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