@@ -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.
@@ -126,6 +133,7 @@ MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
126133 * @hdev: Pointer to the underlying HID device.
127134 * @work: Workqueue to handle initialization retry for quirky devices.
128135 * @battery_timer: Timer for obtaining battery level information.
136+ * @input_ops: Input ops based on device type.
129137 */
130138struct magicmouse_sc {
131139 struct input_dev * input ;
@@ -150,6 +158,7 @@ struct magicmouse_sc {
150158 struct hid_device * hdev ;
151159 struct delayed_work work ;
152160 struct timer_list battery_timer ;
161+ struct magicmouse_input_ops input_ops ;
153162};
154163
155164static int magicmouse_firm_touch (struct magicmouse_sc * msc )
@@ -386,6 +395,14 @@ static int magicmouse_raw_event(struct hid_device *hdev,
386395 struct hid_report * report , u8 * data , int size )
387396{
388397 struct magicmouse_sc * msc = hid_get_drvdata (hdev );
398+
399+ return msc -> input_ops .raw_event (hdev , report , data , size );
400+ }
401+
402+ static int magicmouse_raw_event_usb (struct hid_device * hdev ,
403+ struct hid_report * report , u8 * data , int size )
404+ {
405+ struct magicmouse_sc * msc = hid_get_drvdata (hdev );
389406 struct input_dev * input = msc -> input ;
390407 int x = 0 , y = 0 , ii , clicks = 0 , npoints ;
391408
@@ -533,7 +550,17 @@ static int magicmouse_event(struct hid_device *hdev, struct hid_field *field,
533550 return 0 ;
534551}
535552
536- static int magicmouse_setup_input (struct input_dev * input , struct hid_device * hdev )
553+
554+ static int magicmouse_setup_input (struct input_dev * input ,
555+ struct hid_device * hdev )
556+ {
557+ struct magicmouse_sc * msc = hid_get_drvdata (hdev );
558+
559+ return msc -> input_ops .setup_input (input , hdev );
560+ }
561+
562+ static int magicmouse_setup_input_usb (struct input_dev * input ,
563+ struct hid_device * hdev )
537564{
538565 int error ;
539566 int mt_flags = 0 ;
@@ -829,6 +856,9 @@ static int magicmouse_probe(struct hid_device *hdev,
829856 return - ENOMEM ;
830857 }
831858
859+ msc -> input_ops .raw_event = magicmouse_raw_event_usb ;
860+ msc -> input_ops .setup_input = magicmouse_setup_input_usb ;
861+
832862 msc -> scroll_accel = SCROLL_ACCEL_DEFAULT ;
833863 msc -> hdev = hdev ;
834864 INIT_DEFERRABLE_WORK (& msc -> work , magicmouse_enable_mt_work );
0 commit comments