mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-07-16 02:36:58 +08:00
87 lines
2.8 KiB
Diff
87 lines
2.8 KiB
Diff
From 808129b77c405db99bde9b78efd2e12204acbdf9 Mon Sep 17 00:00:00 2001
|
|
From: Janne Grunau <j@jannau.net>
|
|
Date: Thu, 16 Dec 2021 00:15:30 +0100
|
|
Subject: [PATCH 122/171] HID: magicmouse: use ops function pointers for input
|
|
functionality
|
|
|
|
Will be used for supporting MacBook trackpads connected via SPI.
|
|
|
|
Signed-off-by: Janne Grunau <j@jannau.net>
|
|
---
|
|
drivers/hid/hid-magicmouse.c | 31 ++++++++++++++++++++++++++++++-
|
|
1 file changed, 30 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
|
|
index a02bdddb64b2..734e97234890 100644
|
|
--- a/drivers/hid/hid-magicmouse.c
|
|
+++ b/drivers/hid/hid-magicmouse.c
|
|
@@ -113,6 +113,13 @@ MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
|
|
#define TRACKPAD2_RES_Y \
|
|
((TRACKPAD2_MAX_Y - TRACKPAD2_MIN_Y) / (TRACKPAD2_DIMENSION_Y / 100))
|
|
|
|
+
|
|
+struct magicmouse_input_ops {
|
|
+ int (*raw_event)(struct hid_device *hdev,
|
|
+ struct hid_report *report, u8 *data, int size);
|
|
+ int (*setup_input)(struct input_dev *input, struct hid_device *hdev);
|
|
+};
|
|
+
|
|
/**
|
|
* struct magicmouse_sc - Tracks Magic Mouse-specific data.
|
|
* @input: Input device through which we report events.
|
|
@@ -146,6 +153,7 @@ struct magicmouse_sc {
|
|
struct hid_device *hdev;
|
|
struct delayed_work work;
|
|
struct timer_list battery_timer;
|
|
+ struct magicmouse_input_ops input_ops;
|
|
};
|
|
|
|
static int magicmouse_firm_touch(struct magicmouse_sc *msc)
|
|
@@ -375,6 +383,14 @@ static int magicmouse_raw_event(struct hid_device *hdev,
|
|
struct hid_report *report, u8 *data, int size)
|
|
{
|
|
struct magicmouse_sc *msc = hid_get_drvdata(hdev);
|
|
+
|
|
+ return msc->input_ops.raw_event(hdev, report, data, size);
|
|
+}
|
|
+
|
|
+static int magicmouse_raw_event_usb(struct hid_device *hdev,
|
|
+ struct hid_report *report, u8 *data, int size)
|
|
+{
|
|
+ struct magicmouse_sc *msc = hid_get_drvdata(hdev);
|
|
struct input_dev *input = msc->input;
|
|
int x = 0, y = 0, ii, clicks = 0, npoints;
|
|
|
|
@@ -520,7 +536,17 @@ static int magicmouse_event(struct hid_device *hdev, struct hid_field *field,
|
|
return 0;
|
|
}
|
|
|
|
-static int magicmouse_setup_input(struct input_dev *input, struct hid_device *hdev)
|
|
+
|
|
+static int magicmouse_setup_input(struct input_dev *input,
|
|
+ struct hid_device *hdev)
|
|
+{
|
|
+ struct magicmouse_sc *msc = hid_get_drvdata(hdev);
|
|
+
|
|
+ return msc->input_ops.setup_input(input, hdev);
|
|
+}
|
|
+
|
|
+static int magicmouse_setup_input_usb(struct input_dev *input,
|
|
+ struct hid_device *hdev)
|
|
{
|
|
int error;
|
|
int mt_flags = 0;
|
|
@@ -807,6 +833,9 @@ static int magicmouse_probe(struct hid_device *hdev,
|
|
return -ENOMEM;
|
|
}
|
|
|
|
+ msc->input_ops.raw_event = magicmouse_raw_event_usb;
|
|
+ msc->input_ops.setup_input = magicmouse_setup_input_usb;
|
|
+
|
|
msc->scroll_accel = SCROLL_ACCEL_DEFAULT;
|
|
msc->hdev = hdev;
|
|
INIT_DEFERRABLE_WORK(&msc->work, magicmouse_enable_mt_work);
|
|
--
|
|
2.34.1
|
|
|