[bootlin/training-materials updates] master: yocto: lab-data: BBB: use correct version of Nunchuck patch (94204762)

Luca Ceresoli luca.ceresoli at bootlin.com
Tue Aug 2 11:34:07 CEST 2022


Repository : https://github.com/bootlin/training-materials
On branch  : master
Link       : https://github.com/bootlin/training-materials/commit/94204762cf90f4fea921037a8a372ebaa0f07811

>---------------------------------------------------------------

commit 94204762cf90f4fea921037a8a372ebaa0f07811
Author: Luca Ceresoli <luca.ceresoli at bootlin.com>
Date:   Tue Aug 2 11:31:11 2022 +0200

    yocto: lab-data: BBB: use correct version of Nunchuck patch
    
    The one currently committed applies with some fuzz.
    
    Signed-off-by: Luca Ceresoli <luca.ceresoli at bootlin.com>


>---------------------------------------------------------------

94204762cf90f4fea921037a8a372ebaa0f07811
 .../nunchuk/linux/0001-Add-nunchuk-driver.patch    | 108 ++++++++++++---------
 1 file changed, 64 insertions(+), 44 deletions(-)

diff --git a/lab-data/yocto/bootlin-lab-data/nunchuk/linux/0001-Add-nunchuk-driver.patch b/lab-data/yocto/bootlin-lab-data/nunchuk/linux/0001-Add-nunchuk-driver.patch
index ce488f73..292b1c6d 100644
--- a/lab-data/yocto/bootlin-lab-data/nunchuk/linux/0001-Add-nunchuk-driver.patch
+++ b/lab-data/yocto/bootlin-lab-data/nunchuk/linux/0001-Add-nunchuk-driver.patch
@@ -1,31 +1,31 @@
-From 71c7e58915a31ac44ffbef033911c27b7437cb76 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Antoine=20T=C3=A9nart?= <antoine.tenart at bootlin.com>
+From 3401d8d5b923753e54bce3581a1fcea73305bf0a Mon Sep 17 00:00:00 2001
+From: Alexandre Belloni <alexandre.belloni at bootlin.com>
 Date: Mon, 7 Apr 2014 11:55:31 +0200
 Subject: [PATCH 1/2] Add nunchuk driver
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 
-Signed-off-by: Antoine Ténart <antoine.tenart at bootlin.com>
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
+Signed-off-by: Alexandre Belloni <alexandre.belloni at bootlin.com>
 ---
  drivers/input/joystick/Kconfig    |  13 +
  drivers/input/joystick/Makefile   |   1 +
- drivers/input/joystick/wiichuck.c | 404 ++++++++++++++++++++++++++++++
- 3 files changed, 418 insertions(+)
+ drivers/input/joystick/wiichuck.c | 423 ++++++++++++++++++++++++++++++
+ 3 files changed, 437 insertions(+)
  create mode 100644 drivers/input/joystick/wiichuck.c
 
 diff --git a/drivers/input/joystick/Kconfig b/drivers/input/joystick/Kconfig
-index 3b23078bc7b5..5b6a2d219a12 100644
+index 312b854b5506..95dfbe49de75 100644
 --- a/drivers/input/joystick/Kconfig
 +++ b/drivers/input/joystick/Kconfig
-@@ -206,6 +206,18 @@ config JOYSTICK_TWIDJOY
+@@ -194,6 +194,19 @@ config JOYSTICK_TWIDJOY
  	  To compile this driver as a module, choose M here: the
  	  module will be called twidjoy.
  
 +config JOYSTICK_WIICHUCK
 +	tristate "Nintendo Wiimote Extension connector on i2c bus"
 +	depends on I2C
++	select INPUT_POLLDEV
 +	help
 +	  Say Y here if you have a Nintendo Wiimote extension connector
 +	  attached directly to an i2c bus, like the Sparcfun Wiichuck adapter
@@ -39,22 +39,23 @@ index 3b23078bc7b5..5b6a2d219a12 100644
  	tristate "5-byte Zhenhua RC transmitter"
  	select SERIO
 diff --git a/drivers/input/joystick/Makefile b/drivers/input/joystick/Makefile
-index 5174b8aba2dd..2ab4167afbd7 100644
+index 8656023f6ef5..75483596c895 100644
 --- a/drivers/input/joystick/Makefile
 +++ b/drivers/input/joystick/Makefile
-@@ -37,5 +37,6 @@ obj-$(CONFIG_JOYSTICK_TURBOGRAFX)	+= turbografx.o
+@@ -34,6 +34,7 @@ obj-$(CONFIG_JOYSTICK_TURBOGRAFX)	+= turbografx.o
  obj-$(CONFIG_JOYSTICK_TWIDJOY)		+= twidjoy.o
  obj-$(CONFIG_JOYSTICK_WARRIOR)		+= warrior.o
  obj-$(CONFIG_JOYSTICK_WALKERA0701)	+= walkera0701.o
 +obj-$(CONFIG_JOYSTICK_WIICHUCK)		+= wiichuck.o
  obj-$(CONFIG_JOYSTICK_XPAD)		+= xpad.o
  obj-$(CONFIG_JOYSTICK_ZHENHUA)		+= zhenhua.o
+ 
 diff --git a/drivers/input/joystick/wiichuck.c b/drivers/input/joystick/wiichuck.c
 new file mode 100644
-index 000000000000..ba3797396c8a
+index 000000000000..865f5ca9d941
 --- /dev/null
 +++ b/drivers/input/joystick/wiichuck.c
-@@ -0,0 +1,404 @@
+@@ -0,0 +1,423 @@
 +/*
 + * i2c Wiichuck driver (Nintendo Wiimote accessory connector)
 + *
@@ -67,7 +68,7 @@ index 000000000000..ba3797396c8a
 + * it under the terms of version 2 of the GNU General Public License as
 + * published by the Free Software Foundation.
 + *
-+ * This driver uses the input subsystem to implement an
++ * This driver uses the polled input device abstraction to implement an
 + * input driver for Nintendo expansion devices wired up to an i2c bus.
 + *
 + * A state machine implements the protocol handling.  It starts in the
@@ -90,6 +91,7 @@ index 000000000000..ba3797396c8a
 +#include <linux/i2c.h>
 +#include <linux/interrupt.h>
 +#include <linux/input.h>
++#include <linux/input-polldev.h>
 +#include <linux/mod_devicetable.h>
 +#include <linux/slab.h>
 +
@@ -110,7 +112,7 @@ index 000000000000..ba3797396c8a
 +};
 +
 +struct wiichuck_device {
-+	struct input_dev *input_dev;
++	struct input_polled_dev *poll_dev;
 +	struct i2c_client *i2c_client;
 +	int (*process)(struct wiichuck_device *wiichuck);
 +	enum wiichuck_state state;
@@ -163,7 +165,7 @@ index 000000000000..ba3797396c8a
 +
 +static int wiichuck_process_nunchuk(struct wiichuck_device *wiichuck)
 +{
-+	struct input_dev *input_dev = wiichuck->input_dev;
++	struct input_dev *input_dev = wiichuck->poll_dev->input;
 +	uint8_t *b = wiichuck->buf;
 +	int ax, ay, az, rc;
 +
@@ -192,7 +194,7 @@ index 000000000000..ba3797396c8a
 +
 +static int wiichuck_process_classic(struct wiichuck_device *wiichuck)
 +{
-+	struct input_dev *input_dev = wiichuck->input_dev;
++	struct input_dev *input_dev = wiichuck->poll_dev->input;
 +	uint8_t *b = wiichuck->buf;
 +	int lx, ly, lt, rx, ry, rt, rc;
 +
@@ -250,9 +252,9 @@ index 000000000000..ba3797396c8a
 + * back.  Using a state machine means the poll function can return and
 + * free up the worker thread while waiting for the data.
 + */
-+static void wiichuck_poll(struct input_dev *input_dev)
++static void wiichuck_poll(struct input_polled_dev *poll_dev)
 +{
-+	struct wiichuck_device *wiichuck = input_get_drvdata(input_dev);
++	struct wiichuck_device *wiichuck = poll_dev->private;
 +	int id;
 +
 +	switch (wiichuck->state) {
@@ -295,7 +297,7 @@ index 000000000000..ba3797396c8a
 +			return;
 +
 +		wiichuck->state = WIICHUCK_STATE_DATA;
-+		input_set_poll_interval(input_dev, WIICHUCK_CAPTURE_PERIOD);
++		poll_dev->poll_interval = WIICHUCK_CAPTURE_PERIOD;
 +		break;
 +
 +	case WIICHUCK_STATE_DATA:
@@ -316,7 +318,7 @@ index 000000000000..ba3797396c8a
 + disconnect:
 +	dev_info(&wiichuck->i2c_client->dev, "disconnected\n");
 +	wiichuck->state = WIICHUCK_STATE_DISCONNECTED;
-+	input_set_poll_interval(input_dev, WIICHUCK_POLL_PERIOD);
++	poll_dev->poll_interval = WIICHUCK_POLL_PERIOD;
 +}
 +
 +/**
@@ -327,37 +329,42 @@ index 000000000000..ba3797396c8a
 + * before reopening.  This simply clears the state to disconnected and
 + * sets the poll rate back to the slow speed
 + */
-+static int wiichuck_open(struct input_dev *input_dev)
++static void wiichuck_open(struct input_polled_dev *poll_dev)
 +{
-+	struct wiichuck_device *wiichuck = input_get_drvdata(input_dev);
++	struct wiichuck_device *wiichuck = poll_dev->private;
 +
 +	wiichuck->process = wiichuck_process_unknown;
 +	wiichuck->state = WIICHUCK_STATE_DISCONNECTED;
-+	input_set_poll_interval(input_dev, WIICHUCK_POLL_PERIOD);
-+
-+	return 0;
++	wiichuck->poll_dev->poll_interval = WIICHUCK_POLL_PERIOD;
 +}
 +
 +static int wiichuck_probe(struct i2c_client *client,
 +				const struct i2c_device_id *id)
 +{
 +	struct wiichuck_device *wiichuck;
++	struct input_polled_dev *poll_dev;
 +	struct input_dev *input_dev;
 +	int rc;
 +
-+	wiichuck = devm_kzalloc(&client->dev, sizeof(*wiichuck), GFP_KERNEL);
++	wiichuck = kzalloc(sizeof(*wiichuck), GFP_KERNEL);
 +	if (!wiichuck)
 +		return -ENOMEM;
 +
-+	input_dev = devm_input_allocate_device(&client->dev);
-+	if (!input_dev)
-+		return -ENOMEM;
++	poll_dev = input_allocate_polled_device();
++	if (!poll_dev) {
++		rc = -ENOMEM;
++		goto err_alloc;
++	}
 +
 +	wiichuck->i2c_client = client;
-+	wiichuck->input_dev = input_dev;
++	wiichuck->poll_dev = poll_dev;
 +
++	poll_dev->private = wiichuck;
++	poll_dev->poll = wiichuck_poll;
++	poll_dev->open = wiichuck_open;
++
++	input_dev = poll_dev->input;
 +	input_dev->name = "Wiichuck expansion connector";
-+	input_dev->open = wiichuck_open;
 +	input_dev->id.bustype = BUS_I2C;
 +	input_dev->dev.parent = &client->dev;
 +
@@ -417,22 +424,23 @@ index 000000000000..ba3797396c8a
 +	__set_bit(BTN_TR2, input_dev->keybit);
 +
 +	i2c_set_clientdata(client, wiichuck);
-+	input_set_drvdata(input_dev, wiichuck);
-+
-+	rc = input_setup_polling(input_dev, wiichuck_poll);
-+	if (rc) {
-+		dev_err(&client->dev, "Failed to setup polling\n");
-+		return rc;
-+	}
 +
 +	/* Register the device; it is 'live' after this point */
-+	rc = input_register_device(input_dev);
++	rc = input_register_polled_device(wiichuck->poll_dev);
 +	if (rc) {
 +		dev_err(&client->dev, "Failed to register input device\n");
-+		return rc;
++		goto err_register;
 +	}
 +
 +	return 0;
++
++ err_register:
++	i2c_set_clientdata(client, NULL);
++	input_free_polled_device(poll_dev);
++ err_alloc:
++	kfree(wiichuck);
++
++	return rc;
 +}
 +
 +static const struct i2c_device_id wiichuck_id[] = {
@@ -446,19 +454,31 @@ index 000000000000..ba3797396c8a
 +	{ .compatible = "nintendo,wiimote-extension", },
 +	{ }
 +};
-+MODULE_DEVICE_TABLE(of, nunchuk_dt_match);
++#else
++#define wiichuck_match_table NULL
 +#endif
 +
 +static struct i2c_driver wiichuck_driver = {
 +	.driver = {
 +		.name = "wiichuck",
 +		.owner = THIS_MODULE,
-+		.of_match_table = of_match_ptr(wiichuck_match_table),
++		.of_match_table = wiichuck_match_table,
 +	},
 +	.probe		= wiichuck_probe,
 +	.id_table	= wiichuck_id,
 +};
-+module_i2c_driver(wiichuck_driver);
++
++static int __init wiichuck_init(void)
++{
++	return i2c_add_driver(&wiichuck_driver);
++}
++module_init(wiichuck_init);
++
++static void __exit wiichuck_exit(void)
++{
++	i2c_del_driver(&wiichuck_driver);
++}
++module_exit(wiichuck_exit);
 -- 
-2.35.1
+2.25.1
 




More information about the training-materials-updates mailing list