Skip to content

Commit 77e83e0

Browse files
committed
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>
1 parent 5b59b20 commit 77e83e0

1 file changed

Lines changed: 30 additions & 1 deletion

File tree

drivers/hid/hid-magicmouse.c

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
113113
#define TRACKPAD2_RES_Y \
114114
((TRACKPAD2_MAX_Y - TRACKPAD2_MIN_Y) / (TRACKPAD2_DIMENSION_Y / 100))
115115

116+
117+
struct magicmouse_input_ops {
118+
int (*raw_event)(struct hid_device *hdev,
119+
struct hid_report *report, u8 *data, int size);
120+
int (*setup_input)(struct input_dev *input, struct hid_device *hdev);
121+
};
122+
116123
/**
117124
* struct magicmouse_sc - Tracks Magic Mouse-specific data.
118125
* @input: Input device through which we report events.
@@ -149,6 +156,7 @@ struct magicmouse_sc {
149156
struct hid_device *hdev;
150157
struct delayed_work work;
151158
struct timer_list battery_timer;
159+
struct magicmouse_input_ops input_ops;
152160
};
153161

154162
static int magicmouse_firm_touch(struct magicmouse_sc *msc)
@@ -378,6 +386,14 @@ static int magicmouse_raw_event(struct hid_device *hdev,
378386
struct hid_report *report, u8 *data, int size)
379387
{
380388
struct magicmouse_sc *msc = hid_get_drvdata(hdev);
389+
390+
return msc->input_ops.raw_event(hdev, report, data, size);
391+
}
392+
393+
static int magicmouse_raw_event_usb(struct hid_device *hdev,
394+
struct hid_report *report, u8 *data, int size)
395+
{
396+
struct magicmouse_sc *msc = hid_get_drvdata(hdev);
381397
struct input_dev *input = msc->input;
382398
int x = 0, y = 0, ii, clicks = 0, npoints;
383399

@@ -523,7 +539,17 @@ static int magicmouse_event(struct hid_device *hdev, struct hid_field *field,
523539
return 0;
524540
}
525541

526-
static int magicmouse_setup_input(struct input_dev *input, struct hid_device *hdev)
542+
543+
static int magicmouse_setup_input(struct input_dev *input,
544+
struct hid_device *hdev)
545+
{
546+
struct magicmouse_sc *msc = hid_get_drvdata(hdev);
547+
548+
return msc->input_ops.setup_input(input, hdev);
549+
}
550+
551+
static int magicmouse_setup_input_usb(struct input_dev *input,
552+
struct hid_device *hdev)
527553
{
528554
int error;
529555
int mt_flags = 0;
@@ -810,6 +836,9 @@ static int magicmouse_probe(struct hid_device *hdev,
810836
return -ENOMEM;
811837
}
812838

839+
msc->input_ops.raw_event = magicmouse_raw_event_usb;
840+
msc->input_ops.setup_input = magicmouse_setup_input_usb;
841+
813842
msc->scroll_accel = SCROLL_ACCEL_DEFAULT;
814843
msc->hdev = hdev;
815844
INIT_DEFERRABLE_WORK(&msc->work, magicmouse_enable_mt_work);

0 commit comments

Comments
 (0)