Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
c3d9d743
Commit
c3d9d743
authored
Oct 23, 2010
by
Jiri Kosina
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'upstream' and 'upstream-fixes' into for-linus
parents
35da7a30
569b10a5
cb174681
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
174 additions
and
98 deletions
+174
-98
drivers/hid/Kconfig
drivers/hid/Kconfig
+30
-30
drivers/hid/hid-a4tech.c
drivers/hid/hid-a4tech.c
+2
-0
drivers/hid/hid-core.c
drivers/hid/hid-core.c
+3
-0
drivers/hid/hid-debug.c
drivers/hid/hid-debug.c
+2
-0
drivers/hid/hid-ids.h
drivers/hid/hid-ids.h
+8
-0
drivers/hid/hid-input.c
drivers/hid/hid-input.c
+80
-0
drivers/hid/hid-sony.c
drivers/hid/hid-sony.c
+35
-14
drivers/hid/hid-stantum.c
drivers/hid/hid-stantum.c
+2
-0
drivers/hid/hidraw.c
drivers/hid/hidraw.c
+10
-4
drivers/hid/usbhid/hid-core.c
drivers/hid/usbhid/hid-core.c
+1
-6
drivers/hid/usbhid/hid-quirks.c
drivers/hid/usbhid/hid-quirks.c
+1
-0
drivers/hid/usbhid/hiddev.c
drivers/hid/usbhid/hiddev.c
+0
-40
include/linux/hiddev.h
include/linux/hiddev.h
+0
-4
No files found.
drivers/hid/Kconfig
View file @
c3d9d743
...
@@ -56,20 +56,20 @@ menu "Special HID drivers"
...
@@ -56,20 +56,20 @@ menu "Special HID drivers"
depends on HID
depends on HID
config HID_3M_PCT
config HID_3M_PCT
tristate "3M PCT"
tristate "3M PCT
touchscreen
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for 3M PCT touch screens.
Support for 3M PCT touch screens.
config HID_A4TECH
config HID_A4TECH
tristate "A4 tech" if EMBEDDED
tristate "A4 tech
mice
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
Support for A4 tech X5 and WOP-35 / Trust 450L mice.
Support for A4 tech X5 and WOP-35 / Trust 450L mice.
config HID_ACRUX_FF
config HID_ACRUX_FF
tristate "ACRUX force feedback
support
"
tristate "ACRUX force feedback"
depends on USB_HID
depends on USB_HID
select INPUT_FF_MEMLESS
select INPUT_FF_MEMLESS
---help---
---help---
...
@@ -77,7 +77,7 @@ config HID_ACRUX_FF
...
@@ -77,7 +77,7 @@ config HID_ACRUX_FF
game controllers.
game controllers.
config HID_APPLE
config HID_APPLE
tristate "Apple" if EMBEDDED
tristate "Apple
{i,Power,Mac}Books
" if EMBEDDED
depends on (USB_HID || BT_HIDP)
depends on (USB_HID || BT_HIDP)
default !EMBEDDED
default !EMBEDDED
---help---
---help---
...
@@ -88,7 +88,7 @@ config HID_APPLE
...
@@ -88,7 +88,7 @@ config HID_APPLE
MacBooks, MacBook Pros and Apple Aluminum.
MacBooks, MacBook Pros and Apple Aluminum.
config HID_BELKIN
config HID_BELKIN
tristate "Belkin" if EMBEDDED
tristate "Belkin
Flip KVM and Wireless keyboard
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
...
@@ -101,14 +101,14 @@ config HID_CANDO
...
@@ -101,14 +101,14 @@ config HID_CANDO
Support for Cando dual touch panel.
Support for Cando dual touch panel.
config HID_CHERRY
config HID_CHERRY
tristate "Cherry" if EMBEDDED
tristate "Cherry
Cymotion keyboard
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
Support for Cherry Cymotion keyboard.
Support for Cherry Cymotion keyboard.
config HID_CHICONY
config HID_CHICONY
tristate "Chicony" if EMBEDDED
tristate "Chicony
Tactical pad
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
...
@@ -130,20 +130,20 @@ config HID_PRODIKEYS
...
@@ -130,20 +130,20 @@ config HID_PRODIKEYS
and some additional multimedia keys.
and some additional multimedia keys.
config HID_CYPRESS
config HID_CYPRESS
tristate "Cypress" if EMBEDDED
tristate "Cypress
mouse and barcode readers
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
Support for cypress mouse and barcode readers.
Support for cypress mouse and barcode readers.
config HID_DRAGONRISE
config HID_DRAGONRISE
tristate "DragonRise Inc.
support
"
tristate "DragonRise Inc.
game controller
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Say Y here if you have DragonRise Inc.game controllers.
Say Y here if you have DragonRise Inc.game controllers.
config DRAGONRISE_FF
config DRAGONRISE_FF
bool "DragonRise Inc. force feedback
support
"
bool "DragonRise Inc. force feedback"
depends on HID_DRAGONRISE
depends on HID_DRAGONRISE
select INPUT_FF_MEMLESS
select INPUT_FF_MEMLESS
---help---
---help---
...
@@ -157,46 +157,46 @@ config HID_EGALAX
...
@@ -157,46 +157,46 @@ config HID_EGALAX
Support for the eGalax dual-touch panel.
Support for the eGalax dual-touch panel.
config HID_ELECOM
config HID_ELECOM
tristate "ELECOM"
tristate "ELECOM
BM084 bluetooth mouse
"
depends on BT_HIDP
depends on BT_HIDP
---help---
---help---
Support for the ELECOM BM084 (bluetooth mouse).
Support for the ELECOM BM084 (bluetooth mouse).
config HID_EZKEY
config HID_EZKEY
tristate "Ezkey" if EMBEDDED
tristate "Ezkey
BTC 8193 keyboard
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
Support for Ezkey BTC 8193 keyboard.
Support for Ezkey BTC 8193 keyboard.
config HID_KYE
config HID_KYE
tristate "Kye" if EMBEDDED
tristate "Kye
/Genius Ergo Mouse
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
Support for Kye/Genius Ergo Mouse.
Support for Kye/Genius Ergo Mouse.
config HID_GYRATION
config HID_GYRATION
tristate "Gyration"
tristate "Gyration
remote control
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for Gyration remote control.
Support for Gyration remote control.
config HID_TWINHAN
config HID_TWINHAN
tristate "Twinhan"
tristate "Twinhan
IR remote control
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for Twinhan IR remote control.
Support for Twinhan IR remote control.
config HID_KENSINGTON
config HID_KENSINGTON
tristate "Kensington" if EMBEDDED
tristate "Kensington
Slimblade Trackball
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
Support for Kensington Slimblade Trackball.
Support for Kensington Slimblade Trackball.
config HID_LOGITECH
config HID_LOGITECH
tristate "Logitech" if EMBEDDED
tristate "Logitech
devices
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
...
@@ -245,39 +245,39 @@ config HID_MAGICMOUSE
...
@@ -245,39 +245,39 @@ config HID_MAGICMOUSE
Apple Wireless "Magic" Mouse.
Apple Wireless "Magic" Mouse.
config HID_MICROSOFT
config HID_MICROSOFT
tristate "Microsoft" if EMBEDDED
tristate "Microsoft
non-fully HID-compliant devices
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
Support for Microsoft devices that are not fully compliant with HID standard.
Support for Microsoft devices that are not fully compliant with HID standard.
config HID_MOSART
config HID_MOSART
tristate "MosArt"
tristate "MosArt
dual-touch panels
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for MosArt dual-touch panels.
Support for MosArt dual-touch panels.
config HID_MONTEREY
config HID_MONTEREY
tristate "Monterey" if EMBEDDED
tristate "Monterey
Genius KB29E keyboard
" if EMBEDDED
depends on USB_HID
depends on USB_HID
default !EMBEDDED
default !EMBEDDED
---help---
---help---
Support for Monterey Genius KB29E.
Support for Monterey Genius KB29E.
config HID_NTRIG
config HID_NTRIG
tristate "N
Trig
"
tristate "N
-Trig touch screen
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for N-Trig touch screen.
Support for N-Trig touch screen.
config HID_ORTEK
config HID_ORTEK
tristate "Ortek"
tristate "Ortek
WKB-2000 wireless keyboard and mouse trackpad
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for Ortek WKB-2000 wireless keyboard + mouse trackpad.
Support for Ortek WKB-2000 wireless keyboard + mouse trackpad.
config HID_PANTHERLORD
config HID_PANTHERLORD
tristate "Pantherlord
support
"
tristate "Pantherlord
/GreenAsia game controller
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Say Y here if you have a PantherLord/GreenAsia based game controller
Say Y here if you have a PantherLord/GreenAsia based game controller
...
@@ -292,7 +292,7 @@ config PANTHERLORD_FF
...
@@ -292,7 +292,7 @@ config PANTHERLORD_FF
or adapter and want to enable force feedback support for it.
or adapter and want to enable force feedback support for it.
config HID_PETALYNX
config HID_PETALYNX
tristate "Petalynx"
tristate "Petalynx
Maxter remote control
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for Petalynx Maxter remote control.
Support for Petalynx Maxter remote control.
...
@@ -356,7 +356,7 @@ config HID_PICOLCD_LEDS
...
@@ -356,7 +356,7 @@ config HID_PICOLCD_LEDS
Provide access to PicoLCD's GPO pins via leds class.
Provide access to PicoLCD's GPO pins via leds class.
config HID_QUANTA
config HID_QUANTA
tristate "Quanta Optical Touch"
tristate "Quanta Optical Touch
panels
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for Quanta Optical Touch dual-touch panels.
Support for Quanta Optical Touch dual-touch panels.
...
@@ -377,31 +377,31 @@ config HID_ROCCAT_KONE
...
@@ -377,31 +377,31 @@ config HID_ROCCAT_KONE
Support for Roccat Kone mouse.
Support for Roccat Kone mouse.
config HID_SAMSUNG
config HID_SAMSUNG
tristate "Samsung"
tristate "Samsung
InfraRed remote control or keyboards
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for Samsung InfraRed remote control or keyboards.
Support for Samsung InfraRed remote control or keyboards.
config HID_SONY
config HID_SONY
tristate "Sony"
tristate "Sony
PS3 controller
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for Sony PS3 controller.
Support for Sony PS3 controller.
config HID_STANTUM
config HID_STANTUM
tristate "Stantum"
tristate "Stantum
multitouch panel
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for Stantum multitouch panel.
Support for Stantum multitouch panel.
config HID_SUNPLUS
config HID_SUNPLUS
tristate "Sunplus"
tristate "Sunplus
wireless desktop
"
depends on USB_HID
depends on USB_HID
---help---
---help---
Support for Sunplus wireless desktop.
Support for Sunplus wireless desktop.
config HID_GREENASIA
config HID_GREENASIA
tristate "GreenAsia (Product ID 0x12) support"
tristate "GreenAsia (Product ID 0x12)
game controller
support"
depends on USB_HID
depends on USB_HID
---help---
---help---
Say Y here if you have a GreenAsia (Product ID 0x12) based game
Say Y here if you have a GreenAsia (Product ID 0x12) based game
...
...
drivers/hid/hid-a4tech.c
View file @
c3d9d743
...
@@ -133,6 +133,8 @@ static const struct hid_device_id a4_devices[] = {
...
@@ -133,6 +133,8 @@ static const struct hid_device_id a4_devices[] = {
.
driver_data
=
A4_2WHEEL_MOUSE_HACK_7
},
.
driver_data
=
A4_2WHEEL_MOUSE_HACK_7
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_X5_005D
),
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_X5_005D
),
.
driver_data
=
A4_2WHEEL_MOUSE_HACK_B8
},
.
driver_data
=
A4_2WHEEL_MOUSE_HACK_B8
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_RP_649
),
.
driver_data
=
A4_2WHEEL_MOUSE_HACK_B8
},
{
}
{
}
};
};
MODULE_DEVICE_TABLE
(
hid
,
a4_devices
);
MODULE_DEVICE_TABLE
(
hid
,
a4_devices
);
...
...
drivers/hid/hid-core.c
View file @
c3d9d743
...
@@ -1241,6 +1241,7 @@ static const struct hid_device_id hid_blacklist[] = {
...
@@ -1241,6 +1241,7 @@ static const struct hid_device_id hid_blacklist[] = {
{
HID_USB_DEVICE
(
USB_VENDOR_ID_3M
,
USB_DEVICE_ID_3M2256
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_3M
,
USB_DEVICE_ID_3M2256
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_WCP32PU
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_WCP32PU
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_X5_005D
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_X5_005D
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_A4TECH
,
USB_DEVICE_ID_A4TECH_RP_649
)
},
#if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE)
#if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE)
{
HID_USB_DEVICE
(
USB_VENDOR_ID_ACRUX
,
0x0802
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_ACRUX
,
0x0802
)
},
#endif
#endif
...
@@ -1377,6 +1378,8 @@ static const struct hid_device_id hid_blacklist[] = {
...
@@ -1377,6 +1378,8 @@ static const struct hid_device_id hid_blacklist[] = {
{
HID_BLUETOOTH_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_PS3_CONTROLLER
)
},
{
HID_BLUETOOTH_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_PS3_CONTROLLER
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_STANTUM
,
USB_DEVICE_ID_MTP
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_STANTUM
,
USB_DEVICE_ID_MTP
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_STANTUM_STM
,
USB_DEVICE_ID_MTP_STM
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_STANTUM_SITRONIX
,
USB_DEVICE_ID_MTP_SITRONIX
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SUNPLUS
,
USB_DEVICE_ID_SUNPLUS_WDESKTOP
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SUNPLUS
,
USB_DEVICE_ID_SUNPLUS_WDESKTOP
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_THRUSTMASTER
,
0xb300
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_THRUSTMASTER
,
0xb300
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_THRUSTMASTER
,
0xb304
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_THRUSTMASTER
,
0xb304
)
},
...
...
drivers/hid/hid-debug.c
View file @
c3d9d743
...
@@ -570,6 +570,8 @@ void hid_debug_event(struct hid_device *hdev, char *buf)
...
@@ -570,6 +570,8 @@ void hid_debug_event(struct hid_device *hdev, char *buf)
buf
[
i
];
buf
[
i
];
list
->
tail
=
(
list
->
tail
+
i
)
%
HID_DEBUG_BUFSIZE
;
list
->
tail
=
(
list
->
tail
+
i
)
%
HID_DEBUG_BUFSIZE
;
}
}
wake_up_interruptible
(
&
hdev
->
debug_wait
);
}
}
EXPORT_SYMBOL_GPL
(
hid_debug_event
);
EXPORT_SYMBOL_GPL
(
hid_debug_event
);
...
...
drivers/hid/hid-ids.h
View file @
c3d9d743
...
@@ -25,6 +25,7 @@
...
@@ -25,6 +25,7 @@
#define USB_VENDOR_ID_A4TECH 0x09da
#define USB_VENDOR_ID_A4TECH 0x09da
#define USB_DEVICE_ID_A4TECH_WCP32PU 0x0006
#define USB_DEVICE_ID_A4TECH_WCP32PU 0x0006
#define USB_DEVICE_ID_A4TECH_X5_005D 0x000a
#define USB_DEVICE_ID_A4TECH_X5_005D 0x000a
#define USB_DEVICE_ID_A4TECH_RP_649 0x001a
#define USB_VENDOR_ID_AASHIMA 0x06d6
#define USB_VENDOR_ID_AASHIMA 0x06d6
#define USB_DEVICE_ID_AASHIMA_GAMEPAD 0x0025
#define USB_DEVICE_ID_AASHIMA_GAMEPAD 0x0025
...
@@ -142,6 +143,7 @@
...
@@ -142,6 +143,7 @@
#define USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE 0x0051
#define USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE 0x0051
#define USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE 0x00ff
#define USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE 0x00ff
#define USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK 0x00d3
#define USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK 0x00d3
#define USB_DEVICE_ID_CH_AXIS_295 0x001c
#define USB_VENDOR_ID_CHERRY 0x046a
#define USB_VENDOR_ID_CHERRY 0x046a
#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023
#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023
...
@@ -485,6 +487,12 @@
...
@@ -485,6 +487,12 @@
#define USB_VENDOR_ID_STANTUM 0x1f87
#define USB_VENDOR_ID_STANTUM 0x1f87
#define USB_DEVICE_ID_MTP 0x0002
#define USB_DEVICE_ID_MTP 0x0002
#define USB_VENDOR_ID_STANTUM_STM 0x0483
#define USB_DEVICE_ID_MTP_STM 0x3261
#define USB_VENDOR_ID_STANTUM_SITRONIX 0x1403
#define USB_DEVICE_ID_MTP_SITRONIX 0x5001
#define USB_VENDOR_ID_SUN 0x0430
#define USB_VENDOR_ID_SUN 0x0430
#define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab
#define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab
...
...
drivers/hid/hid-input.c
View file @
c3d9d743
...
@@ -149,6 +149,83 @@ static int hidinput_setkeycode(struct input_dev *dev,
...
@@ -149,6 +149,83 @@ static int hidinput_setkeycode(struct input_dev *dev,
}
}
/**
* hidinput_calc_abs_res - calculate an absolute axis resolution
* @field: the HID report field to calculate resolution for
* @code: axis code
*
* The formula is:
* (logical_maximum - logical_minimum)
* resolution = ----------------------------------------------------------
* (physical_maximum - physical_minimum) * 10 ^ unit_exponent
*
* as seen in the HID specification v1.11 6.2.2.7 Global Items.
*
* Only exponent 1 length units are processed. Centimeters are converted to
* inches. Degrees are converted to radians.
*/
static
__s32
hidinput_calc_abs_res
(
const
struct
hid_field
*
field
,
__u16
code
)
{
__s32
unit_exponent
=
field
->
unit_exponent
;
__s32
logical_extents
=
field
->
logical_maximum
-
field
->
logical_minimum
;
__s32
physical_extents
=
field
->
physical_maximum
-
field
->
physical_minimum
;
__s32
prev
;
/* Check if the extents are sane */
if
(
logical_extents
<=
0
||
physical_extents
<=
0
)
return
0
;
/*
* Verify and convert units.
* See HID specification v1.11 6.2.2.7 Global Items for unit decoding
*/
if
(
code
==
ABS_X
||
code
==
ABS_Y
||
code
==
ABS_Z
)
{
if
(
field
->
unit
==
0x11
)
{
/* If centimeters */
/* Convert to inches */
prev
=
logical_extents
;
logical_extents
*=
254
;
if
(
logical_extents
<
prev
)
return
0
;
unit_exponent
+=
2
;
}
else
if
(
field
->
unit
!=
0x13
)
{
/* If not inches */
return
0
;
}
}
else
if
(
code
==
ABS_RX
||
code
==
ABS_RY
||
code
==
ABS_RZ
)
{
if
(
field
->
unit
==
0x14
)
{
/* If degrees */
/* Convert to radians */
prev
=
logical_extents
;
logical_extents
*=
573
;
if
(
logical_extents
<
prev
)
return
0
;
unit_exponent
+=
1
;
}
else
if
(
field
->
unit
!=
0x12
)
{
/* If not radians */
return
0
;
}
}
else
{
return
0
;
}
/* Apply negative unit exponent */
for
(;
unit_exponent
<
0
;
unit_exponent
++
)
{
prev
=
logical_extents
;
logical_extents
*=
10
;
if
(
logical_extents
<
prev
)
return
0
;
}
/* Apply positive unit exponent */
for
(;
unit_exponent
>
0
;
unit_exponent
--
)
{
prev
=
physical_extents
;
physical_extents
*=
10
;
if
(
physical_extents
<
prev
)
return
0
;
}
/* Calculate resolution */
return
logical_extents
/
physical_extents
;
}
static
void
hidinput_configure_usage
(
struct
hid_input
*
hidinput
,
struct
hid_field
*
field
,
static
void
hidinput_configure_usage
(
struct
hid_input
*
hidinput
,
struct
hid_field
*
field
,
struct
hid_usage
*
usage
)
struct
hid_usage
*
usage
)
{
{
...
@@ -537,6 +614,9 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
...
@@ -537,6 +614,9 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
input_set_abs_params
(
input
,
usage
->
code
,
a
,
b
,
(
b
-
a
)
>>
8
,
(
b
-
a
)
>>
4
);
input_set_abs_params
(
input
,
usage
->
code
,
a
,
b
,
(
b
-
a
)
>>
8
,
(
b
-
a
)
>>
4
);
else
input_set_abs_params
(
input
,
usage
->
code
,
a
,
b
,
0
,
0
);
else
input_set_abs_params
(
input
,
usage
->
code
,
a
,
b
,
0
,
0
);
input_abs_set_res
(
input
,
usage
->
code
,
hidinput_calc_abs_res
(
field
,
usage
->
code
));
/* use a larger default input buffer for MT devices */
/* use a larger default input buffer for MT devices */
if
(
usage
->
code
==
ABS_MT_POSITION_X
&&
input
->
hint_events_per_packet
==
0
)
if
(
usage
->
code
==
ABS_MT_POSITION_X
&&
input
->
hint_events_per_packet
==
0
)
input_set_events_per_packet
(
input
,
60
);
input_set_events_per_packet
(
input
,
60
);
...
...
drivers/hid/hid-sony.c
View file @
c3d9d743
...
@@ -24,7 +24,9 @@
...
@@ -24,7 +24,9 @@
#include "hid-ids.h"
#include "hid-ids.h"
#define VAIO_RDESC_CONSTANT 0x0001
#define VAIO_RDESC_CONSTANT (1 << 0)
#define SIXAXIS_CONTROLLER_USB (1 << 1)
#define SIXAXIS_CONTROLLER_BT (1 << 2)
struct
sony_sc
{
struct
sony_sc
{
unsigned
long
quirks
;
unsigned
long
quirks
;
...
@@ -44,12 +46,31 @@ static void sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
...
@@ -44,12 +46,31 @@ static void sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
}
}
}
}
static
int
sixaxis_usb_output_raw_report
(
struct
hid_device
*
hid
,
__u8
*
buf
,
size_t
count
,
unsigned
char
report_type
)
{
struct
usb_interface
*
intf
=
to_usb_interface
(
hid
->
dev
.
parent
);
struct
usb_device
*
dev
=
interface_to_usbdev
(
intf
);
struct
usb_host_interface
*
interface
=
intf
->
cur_altsetting
;
int
report_id
=
buf
[
0
];
int
ret
;
ret
=
usb_control_msg
(
dev
,
usb_sndctrlpipe
(
dev
,
0
),
HID_REQ_SET_REPORT
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
((
report_type
+
1
)
<<
8
)
|
report_id
,
interface
->
desc
.
bInterfaceNumber
,
buf
,
count
,
USB_CTRL_SET_TIMEOUT
);
return
ret
;
}
/*
/*
* Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
* Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
* to "operational". Without this, the ps3 controller will not report any
* to "operational". Without this, the ps3 controller will not report any
* events.
* events.
*/
*/
static
int
s
ony
_set_operational_usb
(
struct
hid_device
*
hdev
)
static
int
s
ixaxis
_set_operational_usb
(
struct
hid_device
*
hdev
)
{
{
struct
usb_interface
*
intf
=
to_usb_interface
(
hdev
->
dev
.
parent
);
struct
usb_interface
*
intf
=
to_usb_interface
(
hdev
->
dev
.
parent
);
struct
usb_device
*
dev
=
interface_to_usbdev
(
intf
);
struct
usb_device
*
dev
=
interface_to_usbdev
(
intf
);
...
@@ -74,7 +95,7 @@ static int sony_set_operational_usb(struct hid_device *hdev)
...
@@ -74,7 +95,7 @@ static int sony_set_operational_usb(struct hid_device *hdev)
return
ret
;
return
ret
;
}
}
static
int
s
ony
_set_operational_bt
(
struct
hid_device
*
hdev
)
static
int
s
ixaxis
_set_operational_bt
(
struct
hid_device
*
hdev
)
{
{
unsigned
char
buf
[]
=
{
0xf4
,
0x42
,
0x03
,
0x00
,
0x00
};
unsigned
char
buf
[]
=
{
0xf4
,
0x42
,
0x03
,
0x00
,
0x00
};
return
hdev
->
hid_output_raw_report
(
hdev
,
buf
,
sizeof
(
buf
),
HID_FEATURE_REPORT
);
return
hdev
->
hid_output_raw_report
(
hdev
,
buf
,
sizeof
(
buf
),
HID_FEATURE_REPORT
);
...
@@ -108,16 +129,14 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
...
@@ -108,16 +129,14 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
goto
err_free
;
goto
err_free
;
}
}
switch
(
hdev
->
bus
)
{
if
(
sc
->
quirks
&
SIXAXIS_CONTROLLER_USB
)
{
case
BUS_USB
:
hdev
->
hid_output_raw_report
=
sixaxis_usb_output_raw_report
;
ret
=
sony_set_operational_usb
(
hdev
);
ret
=
sixaxis_set_operational_usb
(
hdev
);
break
;
case
BUS_BLUETOOTH
:
ret
=
sony_set_operational_bt
(
hdev
);
break
;
default:
ret
=
0
;
}
}
else
if
(
sc
->
quirks
&
SIXAXIS_CONTROLLER_BT
)
ret
=
sixaxis_set_operational_bt
(
hdev
);
else
ret
=
0
;
if
(
ret
<
0
)
if
(
ret
<
0
)
goto
err_stop
;
goto
err_stop
;
...
@@ -137,8 +156,10 @@ static void sony_remove(struct hid_device *hdev)
...
@@ -137,8 +156,10 @@ static void sony_remove(struct hid_device *hdev)
}
}
static
const
struct
hid_device_id
sony_devices
[]
=
{
static
const
struct
hid_device_id
sony_devices
[]
=
{
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_PS3_CONTROLLER
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_PS3_CONTROLLER
),
{
HID_BLUETOOTH_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_PS3_CONTROLLER
)
},
.
driver_data
=
SIXAXIS_CONTROLLER_USB
},
{
HID_BLUETOOTH_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_PS3_CONTROLLER
),
.
driver_data
=
SIXAXIS_CONTROLLER_BT
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE
),
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SONY
,
USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE
),
.
driver_data
=
VAIO_RDESC_CONSTANT
},
.
driver_data
=
VAIO_RDESC_CONSTANT
},
{
}
{
}
...
...
drivers/hid/hid-stantum.c
View file @
c3d9d743
...
@@ -249,6 +249,8 @@ static void stantum_remove(struct hid_device *hdev)
...
@@ -249,6 +249,8 @@ static void stantum_remove(struct hid_device *hdev)
static
const
struct
hid_device_id
stantum_devices
[]
=
{
static
const
struct
hid_device_id
stantum_devices
[]
=
{
{
HID_USB_DEVICE
(
USB_VENDOR_ID_STANTUM
,
USB_DEVICE_ID_MTP
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_STANTUM
,
USB_DEVICE_ID_MTP
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_STANTUM_STM
,
USB_DEVICE_ID_MTP_STM
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_STANTUM_SITRONIX
,
USB_DEVICE_ID_MTP_SITRONIX
)
},
{
}
{
}
};
};
MODULE_DEVICE_TABLE
(
hid
,
stantum_devices
);
MODULE_DEVICE_TABLE
(
hid
,
stantum_devices
);
...
...
drivers/hid/hidraw.c
View file @
c3d9d743
...
@@ -218,9 +218,13 @@ static int hidraw_release(struct inode * inode, struct file * file)
...
@@ -218,9 +218,13 @@ static int hidraw_release(struct inode * inode, struct file * file)
unsigned
int
minor
=
iminor
(
inode
);
unsigned
int
minor
=
iminor
(
inode
);
struct
hidraw
*
dev
;
struct
hidraw
*
dev
;
struct
hidraw_list
*
list
=
file
->
private_data
;
struct
hidraw_list
*
list
=
file
->
private_data
;
int
ret
;
if
(
!
hidraw_table
[
minor
])
mutex_lock
(
&
minors_lock
);
return
-
ENODEV
;
if
(
!
hidraw_table
[
minor
])
{
ret
=
-
ENODEV
;
goto
unlock
;
}
list_del
(
&
list
->
node
);
list_del
(
&
list
->
node
);
dev
=
hidraw_table
[
minor
];
dev
=
hidraw_table
[
minor
];
...
@@ -233,10 +237,12 @@ static int hidraw_release(struct inode * inode, struct file * file)
...
@@ -233,10 +237,12 @@ static int hidraw_release(struct inode * inode, struct file * file)
kfree
(
list
->
hidraw
);
kfree
(
list
->
hidraw
);
}
}
}
}
kfree
(
list
);
kfree
(
list
);
ret
=
0
;
unlock:
mutex_unlock
(
&
minors_lock
);
return
0
;
return
ret
;
}
}
static
long
hidraw_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
static
long
hidraw_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
...
...
drivers/hid/usbhid/hid-core.c
View file @
c3d9d743
...
@@ -810,6 +810,7 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co
...
@@ -810,6 +810,7 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co
if
(
usbhid
->
urbout
)
{
if
(
usbhid
->
urbout
)
{
int
actual_length
;
int
actual_length
;
int
skipped_report_id
=
0
;
int
skipped_report_id
=
0
;
if
(
buf
[
0
]
==
0x0
)
{
if
(
buf
[
0
]
==
0x0
)
{
/* Don't send the Report ID */
/* Don't send the Report ID */
buf
++
;
buf
++
;
...
@@ -1469,9 +1470,6 @@ static int __init hid_init(void)
...
@@ -1469,9 +1470,6 @@ static int __init hid_init(void)
retval
=
usbhid_quirks_init
(
quirks_param
);
retval
=
usbhid_quirks_init
(
quirks_param
);
if
(
retval
)
if
(
retval
)
goto
usbhid_quirks_init_fail
;
goto
usbhid_quirks_init_fail
;
retval
=
hiddev_init
();
if
(
retval
)
goto
hiddev_init_fail
;
retval
=
usb_register
(
&
hid_driver
);
retval
=
usb_register
(
&
hid_driver
);
if
(
retval
)
if
(
retval
)
goto
usb_register_fail
;
goto
usb_register_fail
;
...
@@ -1479,8 +1477,6 @@ static int __init hid_init(void)
...
@@ -1479,8 +1477,6 @@ static int __init hid_init(void)
return
0
;
return
0
;
usb_register_fail:
usb_register_fail:
hiddev_exit
();
hiddev_init_fail:
usbhid_quirks_exit
();
usbhid_quirks_exit
();
usbhid_quirks_init_fail:
usbhid_quirks_init_fail:
hid_unregister_driver
(
&
hid_usb_driver
);
hid_unregister_driver
(
&
hid_usb_driver
);
...
@@ -1493,7 +1489,6 @@ static int __init hid_init(void)
...
@@ -1493,7 +1489,6 @@ static int __init hid_init(void)
static
void
__exit
hid_exit
(
void
)
static
void
__exit
hid_exit
(
void
)
{
{
usb_deregister
(
&
hid_driver
);
usb_deregister
(
&
hid_driver
);
hiddev_exit
();
usbhid_quirks_exit
();
usbhid_quirks_exit
();
hid_unregister_driver
(
&
hid_usb_driver
);
hid_unregister_driver
(
&
hid_usb_driver
);
destroy_workqueue
(
resumption_waker
);
destroy_workqueue
(
resumption_waker
);
...
...
drivers/hid/usbhid/hid-quirks.c
View file @
c3d9d743
...
@@ -63,6 +63,7 @@ static const struct hid_blacklist {
...
@@ -63,6 +63,7 @@ static const struct hid_blacklist {
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_PRO_PEDALS
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_PRO_PEDALS
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_AXIS_295
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_DMI
,
USB_DEVICE_ID_DMI_ENC
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_DMI
,
USB_DEVICE_ID_DMI_ENC
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_ELO
,
USB_DEVICE_ID_ELO_TS2700
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_ELO
,
USB_DEVICE_ID_ELO_TS2700
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_PRODIGE
,
USB_DEVICE_ID_PRODIGE_CORDLESS
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_PRODIGE
,
USB_DEVICE_ID_PRODIGE_CORDLESS
,
HID_QUIRK_NOGET
},
...
...
drivers/hid/usbhid/hiddev.c
View file @
c3d9d743
...
@@ -67,8 +67,6 @@ struct hiddev_list {
...
@@ -67,8 +67,6 @@ struct hiddev_list {
struct
mutex
thread_lock
;
struct
mutex
thread_lock
;
};
};
static
struct
usb_driver
hiddev_driver
;
/*
/*
* Find a report, given the report's type and ID. The ID can be specified
* Find a report, given the report's type and ID. The ID can be specified
* indirectly by REPORT_ID_FIRST (which returns the first report of the given
* indirectly by REPORT_ID_FIRST (which returns the first report of the given
...
@@ -926,41 +924,3 @@ void hiddev_disconnect(struct hid_device *hid)
...
@@ -926,41 +924,3 @@ void hiddev_disconnect(struct hid_device *hid)
kfree
(
hiddev
);
kfree
(
hiddev
);
}
}
}
}
/* Currently this driver is a USB driver. It's not a conventional one in
* the sense that it doesn't probe at the USB level. Instead it waits to
* be connected by HID through the hiddev_connect / hiddev_disconnect
* routines. The reason to register as a USB device is to gain part of the
* minor number space from the USB major.
*
* In theory, should the HID code be generalized to more than one physical
* medium (say, IEEE 1384), this driver will probably need to register its
* own major number, and in doing so, no longer need to register with USB.
* At that point the probe routine and hiddev_driver struct below will no
* longer be useful.
*/
/* We never attach in this manner, and rely on HID to connect us. This
* is why there is no disconnect routine defined in the usb_driver either.
*/
static
int
hiddev_usbd_probe
(
struct
usb_interface
*
intf
,
const
struct
usb_device_id
*
hiddev_info
)
{
return
-
ENODEV
;
}
static
/* const */
struct
usb_driver
hiddev_driver
=
{
.
name
=
"hiddev"
,
.
probe
=
hiddev_usbd_probe
,
};
int
__init
hiddev_init
(
void
)
{
return
usb_register
(
&
hiddev_driver
);
}
void
hiddev_exit
(
void
)
{
usb_deregister
(
&
hiddev_driver
);
}
include/linux/hiddev.h
View file @
c3d9d743
...
@@ -226,8 +226,6 @@ void hiddev_disconnect(struct hid_device *);
...
@@ -226,8 +226,6 @@ void hiddev_disconnect(struct hid_device *);
void
hiddev_hid_event
(
struct
hid_device
*
hid
,
struct
hid_field
*
field
,
void
hiddev_hid_event
(
struct
hid_device
*
hid
,
struct
hid_field
*
field
,
struct
hid_usage
*
usage
,
__s32
value
);
struct
hid_usage
*
usage
,
__s32
value
);
void
hiddev_report_event
(
struct
hid_device
*
hid
,
struct
hid_report
*
report
);
void
hiddev_report_event
(
struct
hid_device
*
hid
,
struct
hid_report
*
report
);
int
__init
hiddev_init
(
void
);
void
hiddev_exit
(
void
);
#else
#else
static
inline
int
hiddev_connect
(
struct
hid_device
*
hid
,
static
inline
int
hiddev_connect
(
struct
hid_device
*
hid
,
unsigned
int
force
)
unsigned
int
force
)
...
@@ -236,8 +234,6 @@ static inline void hiddev_disconnect(struct hid_device *hid) { }
...
@@ -236,8 +234,6 @@ static inline void hiddev_disconnect(struct hid_device *hid) { }
static
inline
void
hiddev_hid_event
(
struct
hid_device
*
hid
,
struct
hid_field
*
field
,
static
inline
void
hiddev_hid_event
(
struct
hid_device
*
hid
,
struct
hid_field
*
field
,
struct
hid_usage
*
usage
,
__s32
value
)
{
}
struct
hid_usage
*
usage
,
__s32
value
)
{
}
static
inline
void
hiddev_report_event
(
struct
hid_device
*
hid
,
struct
hid_report
*
report
)
{
}
static
inline
void
hiddev_report_event
(
struct
hid_device
*
hid
,
struct
hid_report
*
report
)
{
}
static
inline
int
hiddev_init
(
void
)
{
return
0
;
}
static
inline
void
hiddev_exit
(
void
)
{
}
#endif
#endif
#endif
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment