@@ -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
154162static 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