diff options
author | Luca Stefani | 2020-08-25 12:19:53 +0200 |
---|---|---|
committer | Luca Stefani | 2020-08-25 12:20:17 +0200 |
commit | 882f3ff4cd1eed7a679b33803e5f5893c2c15a42 (patch) | |
tree | 866a827f449fd3efbb899bcd4adfe9168a87c2ae /0010-HID-nintendo-set-controller-uniq-to-MAC.patch | |
parent | 60f72f2a3d98d9abe77090384606d66e8141689f (diff) | |
download | aur-882f3ff4cd1eed7a679b33803e5f5893c2c15a42.tar.gz |
Enable HID Nitendo
Diffstat (limited to '0010-HID-nintendo-set-controller-uniq-to-MAC.patch')
-rw-r--r-- | 0010-HID-nintendo-set-controller-uniq-to-MAC.patch | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/0010-HID-nintendo-set-controller-uniq-to-MAC.patch b/0010-HID-nintendo-set-controller-uniq-to-MAC.patch new file mode 100644 index 000000000000..ec5401f1d2f7 --- /dev/null +++ b/0010-HID-nintendo-set-controller-uniq-to-MAC.patch @@ -0,0 +1,95 @@ +From 0c4a9a01aae68896296b8456c09203643a5dcf01 Mon Sep 17 00:00:00 2001 +From: "Daniel J. Ogorchock" <djogorchock@gmail.com> +Date: Sat, 2 Nov 2019 18:19:47 -0500 +Subject: [PATCH 10/14] HID: nintendo: set controller uniq to MAC + +This patch sets the input device's uniq identifier to the controller's +MAC address. This is useful for future association between an IMU input +device with the normal input device as well as associating the +controller with any serial joy-con driver. + +Signed-off-by: Daniel J. Ogorchock <djogorchock@gmail.com> +--- + drivers/hid/hid-nintendo.c | 45 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c +index c2f7dc83d875..85870569cb49 100644 +--- a/drivers/hid/hid-nintendo.c ++++ b/drivers/hid/hid-nintendo.c +@@ -319,6 +319,8 @@ struct joycon_ctlr { + struct led_classdev home_led; + enum joycon_ctlr_state ctlr_state; + spinlock_t lock; ++ u8 mac_addr[6]; ++ char *mac_addr_str; + + /* The following members are used for synchronous sends/receives */ + enum joycon_msg_type msg_type; +@@ -1005,6 +1007,7 @@ static int joycon_input_create(struct joycon_ctlr *ctlr) + ctlr->input->id.vendor = hdev->vendor; + ctlr->input->id.product = hdev->product; + ctlr->input->id.version = hdev->version; ++ ctlr->input->uniq = ctlr->mac_addr_str; + ctlr->input->name = name; + input_set_drvdata(ctlr->input, ctlr); + +@@ -1317,6 +1320,41 @@ static int joycon_power_supply_create(struct joycon_ctlr *ctlr) + return 0; + } + ++static int joycon_read_mac(struct joycon_ctlr *ctlr) ++{ ++ int ret; ++ int i; ++ int j; ++ struct joycon_subcmd_request req = { 0 }; ++ struct joycon_input_report *report; ++ ++ req.subcmd_id = JC_SUBCMD_REQ_DEV_INFO; ++ ret = joycon_send_subcmd(ctlr, &req, 0, HZ); ++ if (ret) { ++ hid_err(ctlr->hdev, "Failed to get joycon info; ret=%d\n", ret); ++ return ret; ++ } ++ ++ report = (struct joycon_input_report *)ctlr->input_buf; ++ ++ for (i = 4, j = 0; j < 6; i++, j++) ++ ctlr->mac_addr[j] = report->reply.data[i]; ++ ++ ctlr->mac_addr_str = devm_kasprintf(&ctlr->hdev->dev, GFP_KERNEL, ++ "%02X:%02X:%02X:%02X:%02X:%02X", ++ ctlr->mac_addr[0], ++ ctlr->mac_addr[1], ++ ctlr->mac_addr[2], ++ ctlr->mac_addr[3], ++ ctlr->mac_addr[4], ++ ctlr->mac_addr[5]); ++ if (!ctlr->mac_addr_str) ++ return -ENOMEM; ++ hid_info(ctlr->hdev, "controller MAC = %s\n", ctlr->mac_addr_str); ++ ++ return 0; ++} ++ + /* Common handler for parsing inputs */ + static int joycon_ctlr_read_handler(struct joycon_ctlr *ctlr, u8 *data, + int size) +@@ -1495,6 +1533,13 @@ static int nintendo_hid_probe(struct hid_device *hdev, + goto err_mutex; + } + ++ ret = joycon_read_mac(ctlr); ++ if (ret) { ++ hid_err(hdev, "Failed to retrieve controller MAC; ret=%d\n", ++ ret); ++ goto err_close; ++ } ++ + mutex_unlock(&ctlr->output_mutex); + + /* Initialize the leds */ +-- +2.28.0 + |