[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