@@ -114,6 +114,13 @@ MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
114114#define TRACKPAD2_RES_Y \
115115 ((TRACKPAD2_MAX_Y - TRACKPAD2_MIN_Y) / (TRACKPAD2_DIMENSION_Y / 100))
116116
117+
118+ struct magicmouse_input_ops {
119+ int (* raw_event )(struct hid_device * hdev ,
120+ struct hid_report * report , u8 * data , int size );
121+ int (* setup_input )(struct input_dev * input , struct hid_device * hdev );
122+ };
123+
117124/**
118125 * struct magicmouse_sc - Tracks Magic Mouse-specific data.
119126 * @input: Input device through which we report events.
@@ -127,6 +134,7 @@ MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
127134 * @hdev: Pointer to the underlying HID device.
128135 * @work: Workqueue to handle initialization retry for quirky devices.
129136 * @battery_timer: Timer for obtaining battery level information.
137+ * @input_ops: Input ops based on device type.
130138 */
131139struct magicmouse_sc {
132140 struct input_dev * input ;
@@ -151,6 +159,7 @@ struct magicmouse_sc {
151159 struct hid_device * hdev ;
152160 struct delayed_work work ;
153161 struct timer_list battery_timer ;
162+ struct magicmouse_input_ops input_ops ;
154163};
155164
156165static int magicmouse_firm_touch (struct magicmouse_sc * msc )
@@ -387,6 +396,14 @@ static int magicmouse_raw_event(struct hid_device *hdev,
387396 struct hid_report * report , u8 * data , int size )
388397{
389398 struct magicmouse_sc * msc = hid_get_drvdata (hdev );
399+
400+ return msc -> input_ops .raw_event (hdev , report , data , size );
401+ }
402+
403+ static int magicmouse_raw_event_usb (struct hid_device * hdev ,
404+ struct hid_report * report , u8 * data , int size )
405+ {
406+ struct magicmouse_sc * msc = hid_get_drvdata (hdev );
390407 struct input_dev * input = msc -> input ;
391408 int x = 0 , y = 0 , ii , clicks = 0 , npoints ;
392409
@@ -534,7 +551,17 @@ static int magicmouse_event(struct hid_device *hdev, struct hid_field *field,
534551 return 0 ;
535552}
536553
537- static int magicmouse_setup_input (struct input_dev * input , struct hid_device * hdev )
554+
555+ static int magicmouse_setup_input (struct input_dev * input ,
556+ struct hid_device * hdev )
557+ {
558+ struct magicmouse_sc * msc = hid_get_drvdata (hdev );
559+
560+ return msc -> input_ops .setup_input (input , hdev );
561+ }
562+
563+ static int magicmouse_setup_input_usb (struct input_dev * input ,
564+ struct hid_device * hdev )
538565{
539566 int error ;
540567 int mt_flags = 0 ;
@@ -833,6 +860,9 @@ static int magicmouse_probe(struct hid_device *hdev,
833860 return - ENOMEM ;
834861 }
835862
863+ msc -> input_ops .raw_event = magicmouse_raw_event_usb ;
864+ msc -> input_ops .setup_input = magicmouse_setup_input_usb ;
865+
836866 msc -> scroll_accel = SCROLL_ACCEL_DEFAULT ;
837867 msc -> hdev = hdev ;
838868 INIT_DEFERRABLE_WORK (& msc -> work , magicmouse_enable_mt_work );
0 commit comments