Skip to content

Commit 4076acd

Browse files
jannaumarcan
authored andcommitted
HID: magicmouse: use ops function pointers for input functionality
Will be used for supporting MacBook trackpads connected via SPI. Signed-off-by: Janne Grunau <[email protected]>
1 parent a707089 commit 4076acd

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.
@@ -146,6 +153,7 @@ struct magicmouse_sc {
146153
struct hid_device *hdev;
147154
struct delayed_work work;
148155
struct timer_list battery_timer;
156+
struct magicmouse_input_ops input_ops;
149157
};
150158

151159
static int magicmouse_firm_touch(struct magicmouse_sc *msc)
@@ -375,6 +383,14 @@ static int magicmouse_raw_event(struct hid_device *hdev,
375383
struct hid_report *report, u8 *data, int size)
376384
{
377385
struct magicmouse_sc *msc = hid_get_drvdata(hdev);
386+
387+
return msc->input_ops.raw_event(hdev, report, data, size);
388+
}
389+
390+
static int magicmouse_raw_event_usb(struct hid_device *hdev,
391+
struct hid_report *report, u8 *data, int size)
392+
{
393+
struct magicmouse_sc *msc = hid_get_drvdata(hdev);
378394
struct input_dev *input = msc->input;
379395
int x = 0, y = 0, ii, clicks = 0, npoints;
380396

@@ -520,7 +536,17 @@ static int magicmouse_event(struct hid_device *hdev, struct hid_field *field,
520536
return 0;
521537
}
522538

523-
static int magicmouse_setup_input(struct input_dev *input, struct hid_device *hdev)
539+
540+
static int magicmouse_setup_input(struct input_dev *input,
541+
struct hid_device *hdev)
542+
{
543+
struct magicmouse_sc *msc = hid_get_drvdata(hdev);
544+
545+
return msc->input_ops.setup_input(input, hdev);
546+
}
547+
548+
static int magicmouse_setup_input_usb(struct input_dev *input,
549+
struct hid_device *hdev)
524550
{
525551
int error;
526552
int mt_flags = 0;
@@ -807,6 +833,9 @@ static int magicmouse_probe(struct hid_device *hdev,
807833
return -ENOMEM;
808834
}
809835

836+
msc->input_ops.raw_event = magicmouse_raw_event_usb;
837+
msc->input_ops.setup_input = magicmouse_setup_input_usb;
838+
810839
msc->scroll_accel = SCROLL_ACCEL_DEFAULT;
811840
msc->hdev = hdev;
812841
INIT_DEFERRABLE_WORK(&msc->work, magicmouse_enable_mt_work);

0 commit comments

Comments
 (0)