Blame view

drivers/hid/hid-gyration.c 3.05 KB
949f8fef7   Jiri Slaby   HID: move gyratio...
1
2
3
4
5
6
  /*
   *  HID driver for some gyration "special" devices
   *
   *  Copyright (c) 1999 Andreas Gal
   *  Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
   *  Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
949f8fef7   Jiri Slaby   HID: move gyratio...
7
8
   *  Copyright (c) 2007 Paul Walmsley
   *  Copyright (c) 2008 Jiri Slaby
1e0932067   Jiri Kosina   HID: add support ...
9
   *  Copyright (c) 2006-2008 Jiri Kosina
949f8fef7   Jiri Slaby   HID: move gyratio...
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
   */
  
  /*
   * This program is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License as published by the Free
   * Software Foundation; either version 2 of the License, or (at your option)
   * any later version.
   */
  
  #include <linux/device.h>
  #include <linux/input.h>
  #include <linux/hid.h>
  #include <linux/module.h>
  
  #include "hid-ids.h"
  
  #define gy_map_key_clear(c)	hid_map_usage_clear(hi, usage, bit, max, \
  					EV_KEY, (c))
  static int gyration_input_mapping(struct hid_device *hdev, struct hid_input *hi,
  		struct hid_field *field, struct hid_usage *usage,
  		unsigned long **bit, int *max)
  {
  	if ((usage->hid & HID_USAGE_PAGE) != HID_UP_LOGIVENDOR)
  		return 0;
  
  	set_bit(EV_REP, hi->input->evbit);
  	switch (usage->hid & HID_USAGE) {
  	/* Reported on Gyration MCE Remote */
  	case 0x00d: gy_map_key_clear(KEY_HOME);		break;
  	case 0x024: gy_map_key_clear(KEY_DVD);		break;
  	case 0x025: gy_map_key_clear(KEY_PVR);		break;
  	case 0x046: gy_map_key_clear(KEY_MEDIA);	break;
  	case 0x047: gy_map_key_clear(KEY_MP3);		break;
1e0932067   Jiri Kosina   HID: add support ...
43
  	case 0x048: gy_map_key_clear(KEY_MEDIA);	break;
949f8fef7   Jiri Slaby   HID: move gyratio...
44
45
  	case 0x049: gy_map_key_clear(KEY_CAMERA);	break;
  	case 0x04a: gy_map_key_clear(KEY_VIDEO);	break;
6497dc3a5   Steffen Barszus   HID: Add teletext...
46
47
48
49
50
  	case 0x05a: gy_map_key_clear(KEY_TEXT);		break;
  	case 0x05b: gy_map_key_clear(KEY_RED);		break;
  	case 0x05c: gy_map_key_clear(KEY_GREEN);	break;
  	case 0x05d: gy_map_key_clear(KEY_YELLOW);	break;
  	case 0x05e: gy_map_key_clear(KEY_BLUE);		break;
949f8fef7   Jiri Slaby   HID: move gyratio...
51
52
53
54
55
56
57
58
59
60
  
  	default:
  		return 0;
  	}
  	return 1;
  }
  
  static int gyration_event(struct hid_device *hdev, struct hid_field *field,
  		struct hid_usage *usage, __s32 value)
  {
d8e4ebf8b   Jiri Kosina   HID: fix oops in ...
61
62
63
  
  	if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput)
  		return 0;
949f8fef7   Jiri Slaby   HID: move gyratio...
64
65
66
  
  	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK &&
  			(usage->hid & 0xff) == 0x82) {
d8e4ebf8b   Jiri Kosina   HID: fix oops in ...
67
  		struct input_dev *input = field->hidinput->input;
949f8fef7   Jiri Slaby   HID: move gyratio...
68
69
70
71
72
73
74
75
76
77
78
79
  		input_event(input, usage->type, usage->code, 1);
  		input_sync(input);
  		input_event(input, usage->type, usage->code, 0);
  		input_sync(input);
  		return 1;
  	}
  
  	return 0;
  }
  
  static const struct hid_device_id gyration_devices[] = {
  	{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) },
1e0932067   Jiri Kosina   HID: add support ...
80
  	{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
c2fd1a4eb   Cory Maccarrone   HID: Add the GYR4...
81
  	{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
949f8fef7   Jiri Slaby   HID: move gyratio...
82
83
84
85
86
87
88
89
90
91
  	{ }
  };
  MODULE_DEVICE_TABLE(hid, gyration_devices);
  
  static struct hid_driver gyration_driver = {
  	.name = "gyration",
  	.id_table = gyration_devices,
  	.input_mapping = gyration_input_mapping,
  	.event = gyration_event,
  };
a24f423bd   Peter Huewe   HID: adding __ini...
92
  static int __init gyration_init(void)
949f8fef7   Jiri Slaby   HID: move gyratio...
93
94
95
  {
  	return hid_register_driver(&gyration_driver);
  }
a24f423bd   Peter Huewe   HID: adding __ini...
96
  static void __exit gyration_exit(void)
949f8fef7   Jiri Slaby   HID: move gyratio...
97
98
99
100
101
102
103
  {
  	hid_unregister_driver(&gyration_driver);
  }
  
  module_init(gyration_init);
  module_exit(gyration_exit);
  MODULE_LICENSE("GPL");