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
Kirill Smelkov
linux
Commits
05f091ab
Commit
05f091ab
authored
May 29, 2005
by
Dmitry Torokhov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Input: whitespace fixes in drivers/usb/input
Signed-off-by:
Dmitry Torokhov
<
dtor@mail.ru
>
parent
ab0c3443
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
300 additions
and
308 deletions
+300
-308
drivers/usb/input/aiptek.c
drivers/usb/input/aiptek.c
+9
-9
drivers/usb/input/ati_remote.c
drivers/usb/input/ati_remote.c
+110
-111
drivers/usb/input/hid-core.c
drivers/usb/input/hid-core.c
+2
-2
drivers/usb/input/hid-debug.h
drivers/usb/input/hid-debug.h
+8
-8
drivers/usb/input/hid-input.c
drivers/usb/input/hid-input.c
+8
-8
drivers/usb/input/hid-lgff.c
drivers/usb/input/hid-lgff.c
+9
-9
drivers/usb/input/hid.h
drivers/usb/input/hid.h
+9
-9
drivers/usb/input/hiddev.c
drivers/usb/input/hiddev.c
+28
-28
drivers/usb/input/itmtouch.c
drivers/usb/input/itmtouch.c
+24
-31
drivers/usb/input/kbtab.c
drivers/usb/input/kbtab.c
+3
-3
drivers/usb/input/powermate.c
drivers/usb/input/powermate.c
+15
-15
drivers/usb/input/usbkbd.c
drivers/usb/input/usbkbd.c
+9
-9
drivers/usb/input/usbmouse.c
drivers/usb/input/usbmouse.c
+10
-10
drivers/usb/input/wacom.c
drivers/usb/input/wacom.c
+23
-23
drivers/usb/input/xpad.c
drivers/usb/input/xpad.c
+33
-33
No files found.
drivers/usb/input/aiptek.c
View file @
05f091ab
/*
* Native support for the Aiptek HyperPen USB Tablets
* (4000U/5000U/6000U/8000U/12000U)
*
*
* Copyright (c) 2001 Chris Atenasio <chris@crud.net>
* Copyright (c) 2002-2004 Bryan W. Headley <bwheadley@earthlink.net>
*
...
...
@@ -31,7 +31,7 @@
* - Added support for the sysfs interface, deprecating the
* procfs interface for 2.5.x kernel. Also added support for
* Wheel command. Bryan W. Headley July-15-2003.
* v1.2 - Reworked jitter timer as a kernel thread.
* v1.2 - Reworked jitter timer as a kernel thread.
* Bryan W. Headley November-28-2003/Jan-10-2004.
* v1.3 - Repaired issue of kernel thread going nuts on single-processor
* machines, introduced programmableDelay as a command line
...
...
@@ -49,10 +49,10 @@
* NOTE:
* This kernel driver is augmented by the "Aiptek" XFree86 input
* driver for your X server, as well as the Gaiptek GUI Front-end
* "Tablet Manager".
* These three products are highly interactive with one another,
* "Tablet Manager".
* These three products are highly interactive with one another,
* so therefore it's easier to document them all as one subsystem.
* Please visit the project's "home page", located at,
* Please visit the project's "home page", located at,
* http://aiptektablet.sourceforge.net.
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -156,7 +156,7 @@
* Command/Data Description Return Bytes Return Value
* 0x10/0x00 SwitchToMouse 0
* 0x10/0x01 SwitchToTablet 0
* 0x18/0x04 SetResolution 0
* 0x18/0x04 SetResolution 0
* 0x12/0xFF AutoGainOn 0
* 0x17/0x00 FilterOn 0
* 0x01/0x00 GetXExtension 2 MaxX
...
...
@@ -247,7 +247,7 @@
#define AIPTEK_DIAGNOSTIC_SENDING_ABSOLUTE_IN_RELATIVE 2
#define AIPTEK_DIAGNOSTIC_TOOL_DISALLOWED 3
/* Time to wait (in ms) to help mask hand jittering
/* Time to wait (in ms) to help mask hand jittering
* when pressing the stylus buttons.
*/
#define AIPTEK_JITTER_DELAY_DEFAULT 50
...
...
@@ -791,7 +791,7 @@ static void aiptek_irq(struct urb *urb, struct pt_regs *regs)
* specific Aiptek model numbers, because there has been overlaps,
* use, and reuse of id's in existing models. Certain models have
* been known to use more than one ID, indicative perhaps of
* manufacturing revisions. In any event, we consider these
* manufacturing revisions. In any event, we consider these
* IDs to not be model-specific nor unique.
*/
static
const
struct
usb_device_id
aiptek_ids
[]
=
{
...
...
@@ -840,7 +840,7 @@ static void aiptek_close(struct input_dev *inputdev)
}
/***********************************************************************
* aiptek_set_report and aiptek_get_report() are borrowed from Linux 2.4.x,
* aiptek_set_report and aiptek_get_report() are borrowed from Linux 2.4.x,
* where they were known as usb_set_report and usb_get_report.
*/
static
int
...
...
drivers/usb/input/ati_remote.c
View file @
05f091ab
/*
/*
* USB ATI Remote support
*
* Version 2.2.0 Copyright (c) 2004 Torrey Hoffman <thoffman@arnor.net>
* Version 2.1.1 Copyright (c) 2002 Vladimir Dergachev
*
* This 2.2.0 version is a rewrite / cleanup of the 2.1.1 driver, including
* porting to the 2.6 kernel interfaces, along with other modification
* porting to the 2.6 kernel interfaces, along with other modification
* to better match the style of the existing usb/input drivers. However, the
* protocol and hardware handling is essentially unchanged from 2.1.1.
*
* The 2.1.1 driver was derived from the usbati_remote and usbkbd drivers by
*
* The 2.1.1 driver was derived from the usbati_remote and usbkbd drivers by
* Vojtech Pavlik.
*
* Changes:
...
...
@@ -23,64 +23,64 @@
* Added support for the "Lola" remote contributed by:
* Seth Cohn <sethcohn@yahoo.com>
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Hardware & software notes
*
* These remote controls are distributed by ATI as part of their
* "All-In-Wonder" video card packages. The receiver self-identifies as a
* These remote controls are distributed by ATI as part of their
* "All-In-Wonder" video card packages. The receiver self-identifies as a
* "USB Receiver" with manufacturer "X10 Wireless Technology Inc".
*
* The "Lola" remote is available from X10. See:
* The "Lola" remote is available from X10. See:
* http://www.x10.com/products/lola_sg1.htm
* The Lola is similar to the ATI remote but has no mouse support, and slightly
* different keys.
*
* It is possible to use multiple receivers and remotes on multiple computers
* It is possible to use multiple receivers and remotes on multiple computers
* simultaneously by configuring them to use specific channels.
*
* The RF protocol used by the remote supports 16 distinct channels, 1 to 16.
* Actually, it may even support more, at least in some revisions of the
*
* The RF protocol used by the remote supports 16 distinct channels, 1 to 16.
* Actually, it may even support more, at least in some revisions of the
* hardware.
*
* Each remote can be configured to transmit on one channel as follows:
* - Press and hold the "hand icon" button.
* - When the red LED starts to blink, let go of the "hand icon" button.
* - When it stops blinking, input the channel code as two digits, from 01
* - Press and hold the "hand icon" button.
* - When the red LED starts to blink, let go of the "hand icon" button.
* - When it stops blinking, input the channel code as two digits, from 01
* to 16, and press the hand icon again.
*
*
* The timing can be a little tricky. Try loading the module with debug=1
* to have the kernel print out messages about the remote control number
* and mask. Note: debugging prints remote numbers as zero-based hexadecimal.
*
* The driver has a "channel_mask" parameter. This bitmask specifies which
* channels will be ignored by the module. To mask out channels, just add
* channels will be ignored by the module. To mask out channels, just add
* all the 2^channel_number values together.
*
* For instance, set channel_mask = 2^4 = 16 (binary 10000) to make ati_remote
* ignore signals coming from remote controls transmitting on channel 4, but
* ignore signals coming from remote controls transmitting on channel 4, but
* accept all other channels.
*
* Or, set channel_mask = 65533, (0xFFFD), and all channels except 1 will be
* Or, set channel_mask = 65533, (0xFFFD), and all channels except 1 will be
* ignored.
*
* The default is 0 (respond to all channels). Bit 0 and bits 17-32 of this
* The default is 0 (respond to all channels). Bit 0 and bits 17-32 of this
* parameter are unused.
*
*/
...
...
@@ -99,13 +99,13 @@
/*
* Module and Version Information, Module Parameters
*/
#define ATI_REMOTE_VENDOR_ID
0x0bc7
#define ATI_REMOTE_PRODUCT_ID
0x004
#define LOLA_REMOTE_PRODUCT_ID
0x002
#define ATI_REMOTE_VENDOR_ID 0x0bc7
#define ATI_REMOTE_PRODUCT_ID 0x004
#define LOLA_REMOTE_PRODUCT_ID 0x002
#define MEDION_REMOTE_PRODUCT_ID 0x006
#define DRIVER_VERSION
"2.2.1"
#define DRIVER_VERSION "2.2.1"
#define DRIVER_AUTHOR "Torrey Hoffman <thoffman@arnor.net>"
#define DRIVER_DESC "ATI/X10 RF USB Remote Control"
...
...
@@ -124,7 +124,7 @@ MODULE_PARM_DESC(debug, "Enable extra debug messages and information");
#define dbginfo(dev, format, arg...) do { if (debug) dev_info(dev , format , ## arg); } while (0)
#undef err
#define err(format, arg...) printk(KERN_ERR format , ## arg)
static
struct
usb_device_id
ati_remote_table
[]
=
{
{
USB_DEVICE
(
ATI_REMOTE_VENDOR_ID
,
ATI_REMOTE_PRODUCT_ID
)
},
{
USB_DEVICE
(
ATI_REMOTE_VENDOR_ID
,
LOLA_REMOTE_PRODUCT_ID
)
},
...
...
@@ -148,7 +148,7 @@ static char init2[] = { 0x01, 0x00, 0x20, 0x14, 0x20, 0x20, 0x20 };
/* Acceleration curve for directional control pad */
static
char
accel
[]
=
{
1
,
2
,
4
,
6
,
9
,
13
,
20
};
/* Duplicate event filtering time.
/* Duplicate event filtering time.
* Sequential, identical KIND_FILTERED inputs with less than
* FILTER_TIME jiffies between them are considered as repeat
* events. The hardware generates 5 events for the first keypress
...
...
@@ -161,10 +161,10 @@ static char accel[] = { 1, 2, 4, 6, 9, 13, 20 };
static
DECLARE_MUTEX
(
disconnect_sem
);
struct
ati_remote
{
struct
input_dev
idev
;
struct
input_dev
idev
;
struct
usb_device
*
udev
;
struct
usb_interface
*
interface
;
struct
urb
*
irq_urb
;
struct
urb
*
out_urb
;
struct
usb_endpoint_descriptor
*
endpoint_in
;
...
...
@@ -175,12 +175,12 @@ struct ati_remote {
dma_addr_t
outbuf_dma
;
int
open
;
/* open counter */
unsigned
char
old_data
[
2
];
/* Detect duplicate events */
unsigned
long
old_jiffies
;
unsigned
long
acc_jiffies
;
/* handle acceleration */
unsigned
int
repeat_count
;
char
name
[
NAME_BUFSIZE
];
char
phys
[
NAME_BUFSIZE
];
...
...
@@ -206,14 +206,14 @@ static struct
int
type
;
unsigned
int
code
;
int
value
;
}
ati_remote_tbl
[]
=
}
ati_remote_tbl
[]
=
{
/* Directional control pad axes */
{
KIND_ACCEL
,
0x35
,
0x70
,
EV_REL
,
REL_X
,
-
1
},
/* left */
{
KIND_ACCEL
,
0x36
,
0x71
,
EV_REL
,
REL_X
,
1
},
/* right */
{
KIND_ACCEL
,
0x37
,
0x72
,
EV_REL
,
REL_Y
,
-
1
},
/* up */
{
KIND_ACCEL
,
0x38
,
0x73
,
EV_REL
,
REL_Y
,
1
},
/* down */
/* Directional control pad diagonals */
/* Directional control pad diagonals */
{
KIND_LU
,
0x39
,
0x74
,
EV_REL
,
0
,
0
},
/* left up */
{
KIND_RU
,
0x3a
,
0x75
,
EV_REL
,
0
,
0
},
/* right up */
{
KIND_LD
,
0x3c
,
0x77
,
EV_REL
,
0
,
0
},
/* left down */
...
...
@@ -225,7 +225,7 @@ static struct
{
KIND_LITERAL
,
0x41
,
0x7c
,
EV_KEY
,
BTN_RIGHT
,
1
},
/* right btn down */
{
KIND_LITERAL
,
0x42
,
0x7d
,
EV_KEY
,
BTN_RIGHT
,
0
},
/* right btn up */
/* Artificial "doubleclick" events are generated by the hardware.
/* Artificial "doubleclick" events are generated by the hardware.
* They are mapped to the "side" and "extra" mouse buttons here. */
{
KIND_FILTERED
,
0x3f
,
0x7a
,
EV_KEY
,
BTN_SIDE
,
1
},
/* left dblclick */
{
KIND_FILTERED
,
0x43
,
0x7e
,
EV_KEY
,
BTN_EXTRA
,
1
},
/* right dblclick */
...
...
@@ -273,15 +273,15 @@ static struct
{
KIND_FILTERED
,
0xea
,
0x25
,
EV_KEY
,
KEY_PLAY
,
1
},
/* ( >) */
{
KIND_FILTERED
,
0xe9
,
0x24
,
EV_KEY
,
KEY_REWIND
,
1
},
/* (<<) */
{
KIND_FILTERED
,
0xeb
,
0x26
,
EV_KEY
,
KEY_FORWARD
,
1
},
/* (>>) */
{
KIND_FILTERED
,
0xed
,
0x28
,
EV_KEY
,
KEY_STOP
,
1
},
/* ([]) */
{
KIND_FILTERED
,
0xed
,
0x28
,
EV_KEY
,
KEY_STOP
,
1
},
/* ([]) */
{
KIND_FILTERED
,
0xee
,
0x29
,
EV_KEY
,
KEY_PAUSE
,
1
},
/* ('') */
{
KIND_FILTERED
,
0xf0
,
0x2b
,
EV_KEY
,
KEY_PREVIOUS
,
1
},
/* (<-) */
{
KIND_FILTERED
,
0xef
,
0x2a
,
EV_KEY
,
KEY_NEXT
,
1
},
/* (>+) */
{
KIND_FILTERED
,
0xf2
,
0x2D
,
EV_KEY
,
KEY_INFO
,
1
},
/* PLAYING */
{
KIND_FILTERED
,
0xf3
,
0x2E
,
EV_KEY
,
KEY_HOME
,
1
},
/* TOP */
{
KIND_FILTERED
,
0xf4
,
0x2F
,
EV_KEY
,
KEY_END
,
1
},
/* END */
{
KIND_FILTERED
,
0xf5
,
0x30
,
EV_KEY
,
KEY_SELECT
,
1
},
/* SELECT */
{
KIND_FILTERED
,
0xf5
,
0x30
,
EV_KEY
,
KEY_SELECT
,
1
},
/* SELECT */
{
KIND_END
,
0x00
,
0x00
,
EV_MAX
+
1
,
0
,
0
}
};
...
...
@@ -315,7 +315,7 @@ static void ati_remote_dump(unsigned char *data, unsigned int len)
if
((
len
==
1
)
&&
(
data
[
0
]
!=
(
unsigned
char
)
0xff
)
&&
(
data
[
0
]
!=
0x00
))
warn
(
"Weird byte 0x%02x"
,
data
[
0
]);
else
if
(
len
==
4
)
warn
(
"Weird key %02x %02x %02x %02x"
,
warn
(
"Weird key %02x %02x %02x %02x"
,
data
[
0
],
data
[
1
],
data
[
2
],
data
[
3
]);
else
warn
(
"Weird data, len=%d %02x %02x %02x %02x %02x %02x ..."
,
...
...
@@ -338,7 +338,7 @@ static int ati_remote_open(struct input_dev *inputdev)
/* On first open, submit the read urb which was set up previously. */
ati_remote
->
irq_urb
->
dev
=
ati_remote
->
udev
;
if
(
usb_submit_urb
(
ati_remote
->
irq_urb
,
GFP_KERNEL
))
{
dev_err
(
&
ati_remote
->
interface
->
dev
,
dev_err
(
&
ati_remote
->
interface
->
dev
,
"%s: usb_submit_urb failed!
\n
"
,
__FUNCTION__
);
ati_remote
->
open
--
;
retval
=
-
EIO
;
...
...
@@ -355,7 +355,7 @@ static int ati_remote_open(struct input_dev *inputdev)
static
void
ati_remote_close
(
struct
input_dev
*
inputdev
)
{
struct
ati_remote
*
ati_remote
=
inputdev
->
private
;
if
(
!--
ati_remote
->
open
)
usb_kill_urb
(
ati_remote
->
irq_urb
);
}
...
...
@@ -366,13 +366,13 @@ static void ati_remote_close(struct input_dev *inputdev)
static
void
ati_remote_irq_out
(
struct
urb
*
urb
,
struct
pt_regs
*
regs
)
{
struct
ati_remote
*
ati_remote
=
urb
->
context
;
if
(
urb
->
status
)
{
dev_dbg
(
&
ati_remote
->
interface
->
dev
,
"%s: status %d
\n
"
,
__FUNCTION__
,
urb
->
status
);
return
;
}
ati_remote
->
send_flags
|=
SEND_FLAG_COMPLETE
;
wmb
();
wake_up
(
&
ati_remote
->
wait
);
...
...
@@ -380,16 +380,16 @@ static void ati_remote_irq_out(struct urb *urb, struct pt_regs *regs)
/*
* ati_remote_sendpacket
*
*
* Used to send device initialization strings
*/
static
int
ati_remote_sendpacket
(
struct
ati_remote
*
ati_remote
,
u16
cmd
,
unsigned
char
*
data
)
{
int
retval
=
0
;
/* Set up out_urb */
memcpy
(
ati_remote
->
out_urb
->
transfer_buffer
+
1
,
data
,
LO
(
cmd
));
((
char
*
)
ati_remote
->
out_urb
->
transfer_buffer
)[
0
]
=
HI
(
cmd
);
((
char
*
)
ati_remote
->
out_urb
->
transfer_buffer
)[
0
]
=
HI
(
cmd
);
ati_remote
->
out_urb
->
transfer_buffer_length
=
LO
(
cmd
)
+
1
;
ati_remote
->
out_urb
->
dev
=
ati_remote
->
udev
;
...
...
@@ -397,17 +397,17 @@ static int ati_remote_sendpacket(struct ati_remote *ati_remote, u16 cmd, unsigne
retval
=
usb_submit_urb
(
ati_remote
->
out_urb
,
GFP_ATOMIC
);
if
(
retval
)
{
dev_dbg
(
&
ati_remote
->
interface
->
dev
,
dev_dbg
(
&
ati_remote
->
interface
->
dev
,
"sendpacket: usb_submit_urb failed: %d
\n
"
,
retval
);
return
retval
;
}
wait_event_timeout
(
ati_remote
->
wait
,
((
ati_remote
->
out_urb
->
status
!=
-
EINPROGRESS
)
||
(
ati_remote
->
send_flags
&
SEND_FLAG_COMPLETE
)),
(
ati_remote
->
send_flags
&
SEND_FLAG_COMPLETE
)),
HZ
);
usb_kill_urb
(
ati_remote
->
out_urb
);
return
retval
;
}
...
...
@@ -419,15 +419,15 @@ static int ati_remote_event_lookup(int rem, unsigned char d1, unsigned char d2)
int
i
;
for
(
i
=
0
;
ati_remote_tbl
[
i
].
kind
!=
KIND_END
;
i
++
)
{
/*
* Decide if the table entry matches the remote input.
/*
* Decide if the table entry matches the remote input.
*/
if
((((
ati_remote_tbl
[
i
].
data1
&
0x0f
)
==
(
d1
&
0x0f
)))
&&
((((
ati_remote_tbl
[
i
].
data1
>>
4
)
-
(
d1
>>
4
)
+
rem
)
&
0x0f
)
==
0x0f
)
&&
((((
ati_remote_tbl
[
i
].
data1
>>
4
)
-
(
d1
>>
4
)
+
rem
)
&
0x0f
)
==
0x0f
)
&&
(
ati_remote_tbl
[
i
].
data2
==
d2
))
return
i
;
}
return
-
1
;
}
...
...
@@ -435,16 +435,16 @@ static int ati_remote_event_lookup(int rem, unsigned char d1, unsigned char d2)
/*
* ati_remote_report_input
*/
static
void
ati_remote_input_report
(
struct
urb
*
urb
,
struct
pt_regs
*
regs
)
static
void
ati_remote_input_report
(
struct
urb
*
urb
,
struct
pt_regs
*
regs
)
{
struct
ati_remote
*
ati_remote
=
urb
->
context
;
unsigned
char
*
data
=
ati_remote
->
inbuf
;
struct
input_dev
*
dev
=
&
ati_remote
->
idev
;
struct
input_dev
*
dev
=
&
ati_remote
->
idev
;
int
index
,
acc
;
int
remote_num
;
/* Deal with strange looking inputs */
if
(
(
urb
->
actual_length
!=
4
)
||
(
data
[
0
]
!=
0x14
)
||
if
(
(
urb
->
actual_length
!=
4
)
||
(
data
[
0
]
!=
0x14
)
||
((
data
[
3
]
&
0x0f
)
!=
0x00
)
)
{
ati_remote_dump
(
data
,
urb
->
actual_length
);
return
;
...
...
@@ -453,7 +453,7 @@ static void ati_remote_input_report(struct urb *urb, struct pt_regs *regs)
/* Mask unwanted remote channels. */
/* note: remote_num is 0-based, channel 1 on remote == 0 here */
remote_num
=
(
data
[
3
]
>>
4
)
&
0x0f
;
if
(
channel_mask
&
(
1
<<
(
remote_num
+
1
)))
{
if
(
channel_mask
&
(
1
<<
(
remote_num
+
1
)))
{
dbginfo
(
&
ati_remote
->
interface
->
dev
,
"Masked input from channel 0x%02x: data %02x,%02x, mask= 0x%02lx
\n
"
,
remote_num
,
data
[
1
],
data
[
2
],
channel_mask
);
...
...
@@ -463,37 +463,36 @@ static void ati_remote_input_report(struct urb *urb, struct pt_regs *regs)
/* Look up event code index in translation table */
index
=
ati_remote_event_lookup
(
remote_num
,
data
[
1
],
data
[
2
]);
if
(
index
<
0
)
{
dev_warn
(
&
ati_remote
->
interface
->
dev
,
"Unknown input from channel 0x%02x: data %02x,%02x
\n
"
,
dev_warn
(
&
ati_remote
->
interface
->
dev
,
"Unknown input from channel 0x%02x: data %02x,%02x
\n
"
,
remote_num
,
data
[
1
],
data
[
2
]);
return
;
}
dbginfo
(
&
ati_remote
->
interface
->
dev
,
}
dbginfo
(
&
ati_remote
->
interface
->
dev
,
"channel 0x%02x; data %02x,%02x; index %d; keycode %d
\n
"
,
remote_num
,
data
[
1
],
data
[
2
],
index
,
ati_remote_tbl
[
index
].
code
);
if
(
ati_remote_tbl
[
index
].
kind
==
KIND_LITERAL
)
{
input_regs
(
dev
,
regs
);
input_event
(
dev
,
ati_remote_tbl
[
index
].
type
,
ati_remote_tbl
[
index
].
code
,
ati_remote_tbl
[
index
].
value
);
input_sync
(
dev
);
ati_remote
->
old_jiffies
=
jiffies
;
return
;
}
if
(
ati_remote_tbl
[
index
].
kind
==
KIND_FILTERED
)
{
/* Filter duplicate events which happen "too close" together. */
if
((
ati_remote
->
old_data
[
0
]
==
data
[
1
])
&&
(
ati_remote
->
old_data
[
1
]
==
data
[
2
])
&&
((
ati_remote
->
old_jiffies
+
FILTER_TIME
)
>
jiffies
))
{
if
((
ati_remote
->
old_data
[
0
]
==
data
[
1
])
&&
(
ati_remote
->
old_data
[
1
]
==
data
[
2
])
&&
((
ati_remote
->
old_jiffies
+
FILTER_TIME
)
>
jiffies
))
{
ati_remote
->
repeat_count
++
;
}
else
{
}
else
{
ati_remote
->
repeat_count
=
0
;
}
ati_remote
->
old_data
[
0
]
=
data
[
1
];
ati_remote
->
old_data
[
1
]
=
data
[
2
];
ati_remote
->
old_jiffies
=
jiffies
;
...
...
@@ -501,7 +500,7 @@ static void ati_remote_input_report(struct urb *urb, struct pt_regs *regs)
if
((
ati_remote
->
repeat_count
>
0
)
&&
(
ati_remote
->
repeat_count
<
5
))
return
;
input_regs
(
dev
,
regs
);
input_event
(
dev
,
ati_remote_tbl
[
index
].
type
,
...
...
@@ -511,13 +510,13 @@ static void ati_remote_input_report(struct urb *urb, struct pt_regs *regs)
input_sync
(
dev
);
return
;
}
/*
}
/*
* Other event kinds are from the directional control pad, and have an
* acceleration factor applied to them. Without this acceleration, the
* control pad is mostly unusable.
*
*
* If elapsed time since last event is > 1/4 second, user "stopped",
* so reset acceleration. Otherwise, user is probably holding the control
* pad down, so we increase acceleration, ramping up over two seconds to
...
...
@@ -559,7 +558,7 @@ static void ati_remote_input_report(struct urb *urb, struct pt_regs *regs)
input_report_rel
(
dev
,
REL_Y
,
acc
);
break
;
default:
dev_dbg
(
&
ati_remote
->
interface
->
dev
,
"ati_remote kind=%d
\n
"
,
dev_dbg
(
&
ati_remote
->
interface
->
dev
,
"ati_remote kind=%d
\n
"
,
ati_remote_tbl
[
index
].
kind
);
}
input_sync
(
dev
);
...
...
@@ -586,12 +585,12 @@ static void ati_remote_irq_in(struct urb *urb, struct pt_regs *regs)
case
-
ESHUTDOWN
:
dev_dbg
(
&
ati_remote
->
interface
->
dev
,
"%s: urb error status, unlink?
\n
"
,
__FUNCTION__
);
return
;
return
;
default:
/* error */
dev_dbg
(
&
ati_remote
->
interface
->
dev
,
"%s: Nonzero urb status %d
\n
"
,
dev_dbg
(
&
ati_remote
->
interface
->
dev
,
"%s: Nonzero urb status %d
\n
"
,
__FUNCTION__
,
urb
->
status
);
}
retval
=
usb_submit_urb
(
urb
,
SLAB_ATOMIC
);
if
(
retval
)
dev_err
(
&
ati_remote
->
interface
->
dev
,
"%s: usb_submit_urb()=%d
\n
"
,
...
...
@@ -614,16 +613,16 @@ static void ati_remote_delete(struct ati_remote *ati_remote)
input_unregister_device
(
&
ati_remote
->
idev
);
if
(
ati_remote
->
inbuf
)
usb_buffer_free
(
ati_remote
->
udev
,
DATA_BUFSIZE
,
usb_buffer_free
(
ati_remote
->
udev
,
DATA_BUFSIZE
,
ati_remote
->
inbuf
,
ati_remote
->
inbuf_dma
);
if
(
ati_remote
->
outbuf
)
usb_buffer_free
(
ati_remote
->
udev
,
DATA_BUFSIZE
,
usb_buffer_free
(
ati_remote
->
udev
,
DATA_BUFSIZE
,
ati_remote
->
outbuf
,
ati_remote
->
outbuf_dma
);
if
(
ati_remote
->
irq_urb
)
usb_free_urb
(
ati_remote
->
irq_urb
);
if
(
ati_remote
->
out_urb
)
usb_free_urb
(
ati_remote
->
out_urb
);
...
...
@@ -636,21 +635,21 @@ static void ati_remote_input_init(struct ati_remote *ati_remote)
int
i
;
idev
->
evbit
[
0
]
=
BIT
(
EV_KEY
)
|
BIT
(
EV_REL
);
idev
->
keybit
[
LONG
(
BTN_MOUSE
)]
=
(
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_RIGHT
)
|
idev
->
keybit
[
LONG
(
BTN_MOUSE
)]
=
(
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_RIGHT
)
|
BIT
(
BTN_SIDE
)
|
BIT
(
BTN_EXTRA
)
);
idev
->
relbit
[
0
]
=
BIT
(
REL_X
)
|
BIT
(
REL_Y
);
for
(
i
=
0
;
ati_remote_tbl
[
i
].
kind
!=
KIND_END
;
i
++
)
if
(
ati_remote_tbl
[
i
].
type
==
EV_KEY
)
set_bit
(
ati_remote_tbl
[
i
].
code
,
idev
->
keybit
);
idev
->
private
=
ati_remote
;
idev
->
open
=
ati_remote_open
;
idev
->
close
=
ati_remote_close
;
idev
->
name
=
ati_remote
->
name
;
idev
->
phys
=
ati_remote
->
phys
;
idev
->
id
.
bustype
=
BUS_USB
;
idev
->
id
.
bustype
=
BUS_USB
;
idev
->
id
.
vendor
=
le16_to_cpu
(
ati_remote
->
udev
->
descriptor
.
idVendor
);
idev
->
id
.
product
=
le16_to_cpu
(
ati_remote
->
udev
->
descriptor
.
idProduct
);
idev
->
id
.
version
=
le16_to_cpu
(
ati_remote
->
udev
->
descriptor
.
bcdDevice
);
...
...
@@ -660,27 +659,27 @@ static int ati_remote_initialize(struct ati_remote *ati_remote)
{
struct
usb_device
*
udev
=
ati_remote
->
udev
;
int
pipe
,
maxp
;
init_waitqueue_head
(
&
ati_remote
->
wait
);
/* Set up irq_urb */
pipe
=
usb_rcvintpipe
(
udev
,
ati_remote
->
endpoint_in
->
bEndpointAddress
);
maxp
=
usb_maxpacket
(
udev
,
pipe
,
usb_pipeout
(
pipe
));
maxp
=
(
maxp
>
DATA_BUFSIZE
)
?
DATA_BUFSIZE
:
maxp
;
usb_fill_int_urb
(
ati_remote
->
irq_urb
,
udev
,
pipe
,
ati_remote
->
inbuf
,
maxp
,
ati_remote_irq_in
,
ati_remote
,
usb_fill_int_urb
(
ati_remote
->
irq_urb
,
udev
,
pipe
,
ati_remote
->
inbuf
,
maxp
,
ati_remote_irq_in
,
ati_remote
,
ati_remote
->
endpoint_in
->
bInterval
);
ati_remote
->
irq_urb
->
transfer_dma
=
ati_remote
->
inbuf_dma
;
ati_remote
->
irq_urb
->
transfer_flags
|=
URB_NO_TRANSFER_DMA_MAP
;
/* Set up out_urb */
pipe
=
usb_sndintpipe
(
udev
,
ati_remote
->
endpoint_out
->
bEndpointAddress
);
maxp
=
usb_maxpacket
(
udev
,
pipe
,
usb_pipeout
(
pipe
));
maxp
=
(
maxp
>
DATA_BUFSIZE
)
?
DATA_BUFSIZE
:
maxp
;
usb_fill_int_urb
(
ati_remote
->
out_urb
,
udev
,
pipe
,
ati_remote
->
outbuf
,
maxp
,
ati_remote_irq_out
,
ati_remote
,
usb_fill_int_urb
(
ati_remote
->
out_urb
,
udev
,
pipe
,
ati_remote
->
outbuf
,
maxp
,
ati_remote_irq_out
,
ati_remote
,
ati_remote
->
endpoint_out
->
bInterval
);
ati_remote
->
out_urb
->
transfer_dma
=
ati_remote
->
outbuf_dma
;
ati_remote
->
out_urb
->
transfer_flags
|=
URB_NO_TRANSFER_DMA_MAP
;
...
...
@@ -688,11 +687,11 @@ static int ati_remote_initialize(struct ati_remote *ati_remote)
/* send initialization strings */
if
((
ati_remote_sendpacket
(
ati_remote
,
0x8004
,
init1
))
||
(
ati_remote_sendpacket
(
ati_remote
,
0x8007
,
init2
)))
{
dev_err
(
&
ati_remote
->
interface
->
dev
,
dev_err
(
&
ati_remote
->
interface
->
dev
,
"Initializing ati_remote hardware failed.
\n
"
);
return
1
;
}
return
0
;
}
...
...
@@ -769,7 +768,7 @@ static int ati_remote_probe(struct usb_interface *interface, const struct usb_de
if
(
!
strlen
(
ati_remote
->
name
))
sprintf
(
ati_remote
->
name
,
DRIVER_DESC
"(%04x,%04x)"
,
le16_to_cpu
(
ati_remote
->
udev
->
descriptor
.
idVendor
),
le16_to_cpu
(
ati_remote
->
udev
->
descriptor
.
idVendor
),
le16_to_cpu
(
ati_remote
->
udev
->
descriptor
.
idProduct
));
/* Device Hardware Initialization - fills in ati_remote->idev from udev. */
...
...
@@ -781,11 +780,11 @@ static int ati_remote_probe(struct usb_interface *interface, const struct usb_de
ati_remote_input_init
(
ati_remote
);
input_register_device
(
&
ati_remote
->
idev
);
dev_info
(
&
ati_remote
->
interface
->
dev
,
"Input registered: %s on %s
\n
"
,
dev_info
(
&
ati_remote
->
interface
->
dev
,
"Input registered: %s on %s
\n
"
,
ati_remote
->
name
,
path
);
usb_set_intfdata
(
interface
,
ati_remote
);
error:
if
(
retval
)
ati_remote_delete
(
ati_remote
);
...
...
@@ -808,7 +807,7 @@ static void ati_remote_disconnect(struct usb_interface *interface)
warn
(
"%s - null device?
\n
"
,
__FUNCTION__
);
return
;
}
ati_remote_delete
(
ati_remote
);
up
(
&
disconnect_sem
);
...
...
@@ -820,7 +819,7 @@ static void ati_remote_disconnect(struct usb_interface *interface)
static
int
__init
ati_remote_init
(
void
)
{
int
result
;
result
=
usb_register
(
&
ati_remote_driver
);
if
(
result
)
err
(
"usb_register error #%d
\n
"
,
result
);
...
...
@@ -838,8 +837,8 @@ static void __exit ati_remote_exit(void)
usb_deregister
(
&
ati_remote_driver
);
}
/*
* module specification
/*
* module specification
*/
module_init
(
ati_remote_init
);
...
...
drivers/usb/input/hid-core.c
View file @
05f091ab
...
...
@@ -232,7 +232,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
report
->
size
+=
parser
->
global
.
report_size
*
parser
->
global
.
report_count
;
if
(
!
parser
->
local
.
usage_index
)
/* Ignore padding fields */
return
0
;
return
0
;
usages
=
max_t
(
int
,
parser
->
local
.
usage_index
,
parser
->
global
.
report_count
);
...
...
@@ -1622,7 +1622,7 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
/* Change the polling interval of mice. */
if
(
hid
->
collection
->
usage
==
HID_GD_MOUSE
&&
hid_mousepoll_interval
>
0
)
interval
=
hid_mousepoll_interval
;
if
(
endpoint
->
bEndpointAddress
&
USB_DIR_IN
)
{
if
(
hid
->
urbin
)
continue
;
...
...
drivers/usb/input/hid-debug.h
View file @
05f091ab
...
...
@@ -67,7 +67,7 @@ static const struct hid_usage_entry hid_usage_table[] = {
{
0
,
0x44
,
"Vbry"
},
{
0
,
0x45
,
"Vbrz"
},
{
0
,
0x46
,
"Vno"
},
{
0
,
0x80
,
"SystemControl"
},
{
0
,
0x80
,
"SystemControl"
},
{
0
,
0x81
,
"SystemPowerDown"
},
{
0
,
0x82
,
"SystemSleep"
},
{
0
,
0x83
,
"SystemWakeUp"
},
...
...
@@ -347,7 +347,7 @@ __inline__ static void tab(int n) {
static
void
hid_dump_field
(
struct
hid_field
*
field
,
int
n
)
{
int
j
;
if
(
field
->
physical
)
{
tab
(
n
);
printk
(
"Physical("
);
...
...
@@ -408,7 +408,7 @@ static void hid_dump_field(struct hid_field *field, int n) {
printk
(
"%s"
,
units
[
sys
][
i
]);
if
(
nibble
!=
1
)
{
/* This is a _signed_ nibble(!) */
int
val
=
nibble
&
0x7
;
if
(
nibble
&
0x08
)
val
=
-
((
0x7
&
~
val
)
+
1
);
...
...
@@ -443,7 +443,7 @@ static void __attribute__((unused)) hid_dump_device(struct hid_device *device) {
struct
list_head
*
list
;
unsigned
i
,
k
;
static
char
*
table
[]
=
{
"INPUT"
,
"OUTPUT"
,
"FEATURE"
};
for
(
i
=
0
;
i
<
HID_REPORT_TYPES
;
i
++
)
{
report_enum
=
device
->
report_enum
+
i
;
list
=
report_enum
->
report_list
.
next
;
...
...
@@ -664,8 +664,8 @@ static char *keys[KEY_MAX + 1] = {
static
char
*
relatives
[
REL_MAX
+
1
]
=
{
[
REL_X
]
=
"X"
,
[
REL_Y
]
=
"Y"
,
[
REL_Z
]
=
"Z"
,
[
REL_HWHEEL
]
=
"HWheel"
,
[
REL_DIAL
]
=
"Dial"
,
[
REL_WHEEL
]
=
"Wheel"
,
[
REL_MISC
]
=
"Misc"
,
[
REL_DIAL
]
=
"Dial"
,
[
REL_WHEEL
]
=
"Wheel"
,
[
REL_MISC
]
=
"Misc"
,
};
static
char
*
absolutes
[
ABS_MAX
+
1
]
=
{
...
...
@@ -690,9 +690,9 @@ static char *misc[MSC_MAX + 1] = {
};
static
char
*
leds
[
LED_MAX
+
1
]
=
{
[
LED_NUML
]
=
"NumLock"
,
[
LED_CAPSL
]
=
"CapsLock"
,
[
LED_NUML
]
=
"NumLock"
,
[
LED_CAPSL
]
=
"CapsLock"
,
[
LED_SCROLLL
]
=
"ScrollLock"
,
[
LED_COMPOSE
]
=
"Compose"
,
[
LED_KANA
]
=
"Kana"
,
[
LED_SLEEP
]
=
"Sleep"
,
[
LED_KANA
]
=
"Kana"
,
[
LED_SLEEP
]
=
"Sleep"
,
[
LED_SUSPEND
]
=
"Suspend"
,
[
LED_MUTE
]
=
"Mute"
,
[
LED_MISC
]
=
"Misc"
,
};
...
...
drivers/usb/input/hid-input.c
View file @
05f091ab
...
...
@@ -164,7 +164,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
case
HID_GD_X
:
case
HID_GD_Y
:
case
HID_GD_Z
:
case
HID_GD_RX
:
case
HID_GD_RY
:
case
HID_GD_RZ
:
case
HID_GD_SLIDER
:
case
HID_GD_DIAL
:
case
HID_GD_WHEEL
:
if
(
field
->
flags
&
HID_MAIN_ITEM_RELATIVE
)
if
(
field
->
flags
&
HID_MAIN_ITEM_RELATIVE
)
map_rel
(
usage
->
hid
&
0xf
);
else
map_abs
(
usage
->
hid
&
0xf
);
...
...
@@ -297,7 +297,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
case
HID_UP_MSVENDOR
:
goto
ignore
;
case
HID_UP_PID
:
set_bit
(
EV_FF
,
input
->
evbit
);
...
...
@@ -349,7 +349,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
goto
ignore
;
if
((
device
->
quirks
&
(
HID_QUIRK_2WHEEL_MOUSE_HACK_7
|
HID_QUIRK_2WHEEL_MOUSE_HACK_5
))
&&
(
usage
->
type
==
EV_REL
)
&&
(
usage
->
code
==
REL_WHEEL
))
(
usage
->
type
==
EV_REL
)
&&
(
usage
->
code
==
REL_WHEEL
))
set_bit
(
REL_HWHEEL
,
bit
);
if
(((
device
->
quirks
&
HID_QUIRK_2WHEEL_MOUSE_HACK_5
)
&&
(
usage
->
hid
==
0x00090005
))
...
...
@@ -365,11 +365,11 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
a
=
field
->
logical_minimum
=
0
;
b
=
field
->
logical_maximum
=
255
;
}
if
(
field
->
application
==
HID_GD_GAMEPAD
||
field
->
application
==
HID_GD_JOYSTICK
)
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
);
}
if
(
usage
->
hat_min
<
usage
->
hat_max
||
usage
->
hat_dir
)
{
...
...
@@ -420,7 +420,7 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
return
;
}
if
(
usage
->
hat_min
<
usage
->
hat_max
||
usage
->
hat_dir
)
{
if
(
usage
->
hat_min
<
usage
->
hat_max
||
usage
->
hat_dir
)
{
int
hat_dir
=
usage
->
hat_dir
;
if
(
!
hat_dir
)
hat_dir
=
(
value
-
usage
->
hat_min
)
*
8
/
(
usage
->
hat_max
-
usage
->
hat_min
+
1
)
+
1
;
...
...
@@ -551,7 +551,7 @@ int hidinput_connect(struct hid_device *hid)
for
(
i
=
0
;
i
<
hid
->
maxcollection
;
i
++
)
if
(
hid
->
collection
[
i
].
type
==
HID_COLLECTION_APPLICATION
||
hid
->
collection
[
i
].
type
==
HID_COLLECTION_PHYSICAL
)
if
(
IS_INPUT_APPLICATION
(
hid
->
collection
[
i
].
usage
))
if
(
IS_INPUT_APPLICATION
(
hid
->
collection
[
i
].
usage
))
break
;
if
(
i
==
hid
->
maxcollection
)
...
...
@@ -592,7 +592,7 @@ int hidinput_connect(struct hid_device *hid)
for
(
j
=
0
;
j
<
report
->
field
[
i
]
->
maxusage
;
j
++
)
hidinput_configure_usage
(
hidinput
,
report
->
field
[
i
],
report
->
field
[
i
]
->
usage
+
j
);
if
(
hid
->
quirks
&
HID_QUIRK_MULTI_INPUT
)
{
/* This will leave hidinput NULL, so that it
* allocates another one if we have more inputs on
...
...
drivers/usb/input/hid-lgff.c
View file @
05f091ab
...
...
@@ -94,7 +94,7 @@ struct lgff_device {
isn't really necessary */
unsigned
long
flags
[
1
];
/* Contains various information about the
state of the driver for this device */
state of the driver for this device */
struct
timer_list
timer
;
};
...
...
@@ -234,7 +234,7 @@ static struct hid_report* hid_lgff_duplicate_report(struct hid_report* report)
kfree
(
ret
);
return
NULL
;
}
memset
(
ret
->
field
[
0
]
->
value
,
0
,
sizeof
(
s32
[
8
]));
memset
(
ret
->
field
[
0
]
->
value
,
0
,
sizeof
(
s32
[
8
]));
return
ret
;
}
...
...
@@ -295,11 +295,11 @@ static int hid_lgff_event(struct hid_device *hid, struct input_dev* input,
unsigned
long
flags
;
if
(
type
!=
EV_FF
)
return
-
EINVAL
;
if
(
!
LGFF_CHECK_OWNERSHIP
(
code
,
lgff
))
return
-
EACCES
;
if
(
!
LGFF_CHECK_OWNERSHIP
(
code
,
lgff
))
return
-
EACCES
;
if
(
value
<
0
)
return
-
EINVAL
;
spin_lock_irqsave
(
&
lgff
->
lock
,
flags
);
if
(
value
>
0
)
{
if
(
test_bit
(
EFFECT_STARTED
,
effect
->
flags
))
{
spin_unlock_irqrestore
(
&
lgff
->
lock
,
flags
);
...
...
@@ -345,7 +345,7 @@ static int hid_lgff_flush(struct input_dev *dev, struct file *file)
and perform ioctls on the same fd all at the same time */
if
(
current
->
pid
==
lgff
->
effects
[
i
].
owner
&&
test_bit
(
EFFECT_USED
,
lgff
->
effects
[
i
].
flags
))
{
if
(
hid_lgff_erase
(
dev
,
i
))
warn
(
"erase effect %d failed"
,
i
);
}
...
...
@@ -378,7 +378,7 @@ static int hid_lgff_upload_effect(struct input_dev* input,
struct
lgff_effect
new
;
int
id
;
unsigned
long
flags
;
dbg
(
"ioctl rumble"
);
if
(
!
test_bit
(
effect
->
type
,
input
->
ffbit
))
return
-
EINVAL
;
...
...
@@ -441,7 +441,7 @@ static void hid_lgff_timer(unsigned long timer_data)
spin_lock_irqsave
(
&
lgff
->
lock
,
flags
);
for
(
i
=
0
;
i
<
LGFF_EFFECTS
;
++
i
)
{
for
(
i
=
0
;
i
<
LGFF_EFFECTS
;
++
i
)
{
struct
lgff_effect
*
effect
=
lgff
->
effects
+
i
;
if
(
test_bit
(
EFFECT_PLAYING
,
effect
->
flags
))
{
...
...
@@ -491,7 +491,7 @@ static void hid_lgff_timer(unsigned long timer_data)
set_bit
(
EFFECT_PLAYING
,
lgff
->
effects
[
i
].
flags
);
}
}
}
}
#define CLAMP(x) if (x < 0) x = 0; if (x > 0xff) x = 0xff
...
...
@@ -524,5 +524,5 @@ static void hid_lgff_timer(unsigned long timer_data)
add_timer
(
&
lgff
->
timer
);
}
spin_unlock_irqrestore
(
&
lgff
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
lgff
->
lock
,
flags
);
}
drivers/usb/input/hid.h
View file @
05f091ab
...
...
@@ -118,7 +118,7 @@ struct hid_item {
#define HID_MAIN_ITEM_CONSTANT 0x001
#define HID_MAIN_ITEM_VARIABLE 0x002
#define HID_MAIN_ITEM_RELATIVE 0x004
#define HID_MAIN_ITEM_WRAP 0x008
#define HID_MAIN_ITEM_WRAP 0x008
#define HID_MAIN_ITEM_NONLINEAR 0x010
#define HID_MAIN_ITEM_NO_PREFERRED 0x020
#define HID_MAIN_ITEM_NULL_STATE 0x040
...
...
@@ -172,14 +172,14 @@ struct hid_item {
#define HID_USAGE_PAGE 0xffff0000
#define HID_UP_UNDEFINED 0x00000000
#define HID_UP_GENDESK
0x00010000
#define HID_UP_KEYBOARD
0x00070000
#define HID_UP_LED
0x00080000
#define HID_UP_BUTTON
0x00090000
#define HID_UP_ORDINAL
0x000a0000
#define HID_UP_GENDESK 0x00010000
#define HID_UP_KEYBOARD
0x00070000
#define HID_UP_LED 0x00080000
#define HID_UP_BUTTON 0x00090000
#define HID_UP_ORDINAL 0x000a0000
#define HID_UP_CONSUMER 0x000c0000
#define HID_UP_DIGITIZER
0x000d0000
#define HID_UP_PID
0x000f0000
#define HID_UP_DIGITIZER 0x000d0000
#define HID_UP_PID 0x000f0000
#define HID_UP_HPVENDOR 0xff7f0000
#define HID_UP_MSVENDOR 0xff000000
...
...
@@ -406,7 +406,7 @@ struct hid_device { /* device report descriptor */
dma_addr_t
outbuf_dma
;
/* Output buffer dma */
spinlock_t
outlock
;
/* Output fifo spinlock */
unsigned
claimed
;
/* Claimed by hidinput, hiddev? */
unsigned
claimed
;
/* Claimed by hidinput, hiddev? */
unsigned
quirks
;
/* Various quirks the device can pull on us */
struct
list_head
inputs
;
/* The list of inputs */
...
...
drivers/usb/input/hiddev.c
View file @
05f091ab
...
...
@@ -95,7 +95,7 @@ hiddev_lookup_report(struct hid_device *hid, struct hiddev_report_info *rinfo)
return
NULL
;
rinfo
->
report_id
=
((
struct
hid_report
*
)
list
)
->
id
;
break
;
case
HID_REPORT_ID_NEXT
:
list
=
(
struct
list_head
*
)
report_enum
->
report_id_hash
[
rinfo
->
report_id
&
HID_REPORT_ID_MASK
];
...
...
@@ -106,7 +106,7 @@ hiddev_lookup_report(struct hid_device *hid, struct hiddev_report_info *rinfo)
return
NULL
;
rinfo
->
report_id
=
((
struct
hid_report
*
)
list
)
->
id
;
break
;
default:
return
NULL
;
}
...
...
@@ -158,7 +158,7 @@ static void hiddev_send_event(struct hid_device *hid,
if
(
uref
->
field_index
!=
HID_FIELD_INDEX_NONE
||
(
list
->
flags
&
HIDDEV_FLAG_REPORT
)
!=
0
)
{
list
->
buffer
[
list
->
head
]
=
*
uref
;
list
->
head
=
(
list
->
head
+
1
)
&
list
->
head
=
(
list
->
head
+
1
)
&
(
HIDDEV_BUFFER_SIZE
-
1
);
kill_fasync
(
&
list
->
fasync
,
SIGIO
,
POLL_IN
);
}
...
...
@@ -179,9 +179,9 @@ void hiddev_hid_event(struct hid_device *hid, struct hid_field *field,
unsigned
type
=
field
->
report_type
;
struct
hiddev_usage_ref
uref
;
uref
.
report_type
=
uref
.
report_type
=
(
type
==
HID_INPUT_REPORT
)
?
HID_REPORT_TYPE_INPUT
:
((
type
==
HID_OUTPUT_REPORT
)
?
HID_REPORT_TYPE_OUTPUT
:
((
type
==
HID_OUTPUT_REPORT
)
?
HID_REPORT_TYPE_OUTPUT
:
((
type
==
HID_FEATURE_REPORT
)
?
HID_REPORT_TYPE_FEATURE
:
0
));
uref
.
report_id
=
field
->
report
->
id
;
uref
.
field_index
=
field
->
index
;
...
...
@@ -199,9 +199,9 @@ void hiddev_report_event(struct hid_device *hid, struct hid_report *report)
struct
hiddev_usage_ref
uref
;
memset
(
&
uref
,
0
,
sizeof
(
uref
));
uref
.
report_type
=
uref
.
report_type
=
(
type
==
HID_INPUT_REPORT
)
?
HID_REPORT_TYPE_INPUT
:
((
type
==
HID_OUTPUT_REPORT
)
?
HID_REPORT_TYPE_OUTPUT
:
((
type
==
HID_OUTPUT_REPORT
)
?
HID_REPORT_TYPE_OUTPUT
:
((
type
==
HID_FEATURE_REPORT
)
?
HID_REPORT_TYPE_FEATURE
:
0
));
uref
.
report_id
=
report
->
id
;
uref
.
field_index
=
HID_FIELD_INDEX_NONE
;
...
...
@@ -236,7 +236,7 @@ static int hiddev_release(struct inode * inode, struct file * file)
*
listptr
=
(
*
listptr
)
->
next
;
if
(
!--
list
->
hiddev
->
open
)
{
if
(
list
->
hiddev
->
exist
)
if
(
list
->
hiddev
->
exist
)
hid_close
(
list
->
hiddev
->
hid
);
else
kfree
(
list
->
hiddev
);
...
...
@@ -303,7 +303,7 @@ static ssize_t hiddev_read(struct file * file, char __user * buffer, size_t coun
if
(
list
->
head
==
list
->
tail
)
{
add_wait_queue
(
&
list
->
hiddev
->
wait
,
&
wait
);
set_current_state
(
TASK_INTERRUPTIBLE
);
while
(
list
->
head
==
list
->
tail
)
{
if
(
file
->
f_flags
&
O_NONBLOCK
)
{
retval
=
-
EAGAIN
;
...
...
@@ -317,7 +317,7 @@ static ssize_t hiddev_read(struct file * file, char __user * buffer, size_t coun
retval
=
-
EIO
;
break
;
}
schedule
();
}
...
...
@@ -329,7 +329,7 @@ static ssize_t hiddev_read(struct file * file, char __user * buffer, size_t coun
return
retval
;
while
(
list
->
head
!=
list
->
tail
&&
while
(
list
->
head
!=
list
->
tail
&&
retval
+
event_size
<=
count
)
{
if
((
list
->
flags
&
HIDDEV_FLAG_UREF
)
==
0
)
{
if
(
list
->
buffer
[
list
->
tail
].
field_index
!=
...
...
@@ -405,10 +405,10 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
return
-
EINVAL
;
for
(
i
=
0
;
i
<
hid
->
maxcollection
;
i
++
)
if
(
hid
->
collection
[
i
].
type
==
if
(
hid
->
collection
[
i
].
type
==
HID_COLLECTION_APPLICATION
&&
arg
--
==
0
)
break
;
if
(
i
==
hid
->
maxcollection
)
return
-
EINVAL
;
...
...
@@ -562,7 +562,7 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
if
(
!
uref_multi
)
return
-
ENOMEM
;
uref
=
&
uref_multi
->
uref
;
if
(
copy_from_user
(
uref
,
user_arg
,
sizeof
(
*
uref
)))
if
(
copy_from_user
(
uref
,
user_arg
,
sizeof
(
*
uref
)))
goto
fault
;
rinfo
.
report_type
=
uref
->
report_type
;
...
...
@@ -595,7 +595,7 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
return
-
ENOMEM
;
uref
=
&
uref_multi
->
uref
;
if
(
cmd
==
HIDIOCGUSAGES
||
cmd
==
HIDIOCSUSAGES
)
{
if
(
copy_from_user
(
uref_multi
,
user_arg
,
if
(
copy_from_user
(
uref_multi
,
user_arg
,
sizeof
(
*
uref_multi
)))
goto
fault
;
}
else
{
...
...
@@ -603,7 +603,7 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
goto
fault
;
}
if
(
cmd
!=
HIDIOCGUSAGE
&&
if
(
cmd
!=
HIDIOCGUSAGE
&&
cmd
!=
HIDIOCGUSAGES
&&
uref
->
report_type
==
HID_REPORT_TYPE_INPUT
)
goto
inval
;
...
...
@@ -651,16 +651,16 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
return
field
->
usage
[
uref
->
usage_index
].
collection_index
;
case
HIDIOCGUSAGES
:
for
(
i
=
0
;
i
<
uref_multi
->
num_values
;
i
++
)
uref_multi
->
values
[
i
]
=
uref_multi
->
values
[
i
]
=
field
->
value
[
uref
->
usage_index
+
i
];
if
(
copy_to_user
(
user_arg
,
uref_multi
,
if
(
copy_to_user
(
user_arg
,
uref_multi
,
sizeof
(
*
uref_multi
)))
goto
fault
;
goto
goodreturn
;
case
HIDIOCSUSAGES
:
for
(
i
=
0
;
i
<
uref_multi
->
num_values
;
i
++
)
field
->
value
[
uref
->
usage_index
+
i
]
=
uref_multi
->
values
[
i
];
field
->
value
[
uref
->
usage_index
+
i
]
=
uref_multi
->
values
[
i
];
goto
goodreturn
;
}
...
...
@@ -670,7 +670,7 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
fault:
kfree
(
uref_multi
);
return
-
EFAULT
;
inval:
inval:
kfree
(
uref_multi
);
return
-
EINVAL
;
...
...
@@ -734,7 +734,7 @@ static struct usb_class_driver hiddev_class = {
.
name
=
"usb/hid/hiddev%d"
,
.
fops
=
&
hiddev_fops
,
.
mode
=
S_IFCHR
|
S_IRUGO
|
S_IWUSR
,
.
minor_base
=
HIDDEV_MINOR_BASE
,
.
minor_base
=
HIDDEV_MINOR_BASE
,
};
/*
...
...
@@ -747,7 +747,7 @@ int hiddev_connect(struct hid_device *hid)
int
retval
;
for
(
i
=
0
;
i
<
hid
->
maxcollection
;
i
++
)
if
(
hid
->
collection
[
i
].
type
==
if
(
hid
->
collection
[
i
].
type
==
HID_COLLECTION_APPLICATION
&&
!
IS_INPUT_APPLICATION
(
hid
->
collection
[
i
].
usage
))
break
;
...
...
@@ -755,11 +755,11 @@ int hiddev_connect(struct hid_device *hid)
if
(
i
==
hid
->
maxcollection
&&
(
hid
->
quirks
&
HID_QUIRK_HIDDEV
)
==
0
)
return
-
1
;
if
(
!
(
hiddev
=
kmalloc
(
sizeof
(
struct
hiddev
),
GFP_KERNEL
)))
if
(
!
(
hiddev
=
kmalloc
(
sizeof
(
struct
hiddev
),
GFP_KERNEL
)))
return
-
1
;
memset
(
hiddev
,
0
,
sizeof
(
struct
hiddev
));
retval
=
usb_register_dev
(
hid
->
intf
,
&
hiddev_class
);
retval
=
usb_register_dev
(
hid
->
intf
,
&
hiddev_class
);
if
(
retval
)
{
err
(
"Not able to get a minor for this device."
);
kfree
(
hiddev
);
...
...
@@ -768,12 +768,12 @@ int hiddev_connect(struct hid_device *hid)
init_waitqueue_head
(
&
hiddev
->
wait
);
hiddev_table
[
hid
->
intf
->
minor
-
HIDDEV_MINOR_BASE
]
=
hiddev
;
hiddev_table
[
hid
->
intf
->
minor
-
HIDDEV_MINOR_BASE
]
=
hiddev
;
hiddev
->
hid
=
hid
;
hiddev
->
exist
=
1
;
hid
->
minor
=
hid
->
intf
->
minor
;
hid
->
minor
=
hid
->
intf
->
minor
;
hid
->
hiddev
=
hiddev
;
return
0
;
...
...
@@ -818,7 +818,7 @@ void hiddev_disconnect(struct hid_device *hid)
/* 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
,
static
int
hiddev_usbd_probe
(
struct
usb_interface
*
intf
,
const
struct
usb_device_id
*
hiddev_info
)
{
return
-
ENODEV
;
...
...
drivers/usb/input/itmtouch.c
View file @
05f091ab
...
...
@@ -18,14 +18,14 @@
* Based upon original work by Chris Collins <xfire-itmtouch@xware.cx>.
*
* Kudos to ITM for providing me with the datasheet for the panel,
* even though it was a day later than I had finished writing this
* even though it was a day later than I had finished writing this
* driver.
*
*
* It has meant that I've been able to correct my interpretation of the
* protocol packets however.
*
*
* CC -- 2003/9/29
*
*
* History
* 1.0 & 1.1 2003 (CC) vojtech@suse.cz
* Original version for 2.4.x kernels
...
...
@@ -33,10 +33,10 @@
* 1.2 02/03/2005 (HCE) hc@mivu.no
* Complete rewrite to support Linux 2.6.10, thanks to mtouchusb.c for hints.
* Unfortunately no calibration support at this time.
*
*
* 1.2.1 09/03/2005 (HCE) hc@mivu.no
* Code cleanup and adjusting syntax to start matching kernel standards
*
*
*****************************************************************************/
#include <linux/config.h>
...
...
@@ -71,7 +71,7 @@ MODULE_DESCRIPTION( DRIVER_DESC );
MODULE_LICENSE
(
DRIVER_LICENSE
);
struct
itmtouch_dev
{
struct
usb_device
*
usbdev
;
/* usb device */
struct
usb_device
*
usbdev
;
/* usb device */
struct
input_dev
inputdev
;
/* input device */
struct
urb
*
readurb
;
/* urb */
char
rbuf
[
ITM_BUFSIZE
];
/* data */
...
...
@@ -121,7 +121,7 @@ static void itmtouch_irq(struct urb *urb, struct pt_regs *regs)
input_report_abs
(
dev
,
ABS_X
,
(
data
[
0
]
&
0x1F
)
<<
7
|
(
data
[
3
]
&
0x7F
));
input_report_abs
(
dev
,
ABS_Y
,
(
data
[
1
]
&
0x1F
)
<<
7
|
(
data
[
4
]
&
0x7F
));
}
input_report_abs
(
dev
,
ABS_PRESSURE
,
(
data
[
2
]
&
1
)
<<
7
|
(
data
[
5
]
&
0x7F
));
input_report_key
(
dev
,
BTN_TOUCH
,
~
data
[
7
]
&
0x20
);
input_sync
(
dev
);
...
...
@@ -142,8 +142,7 @@ static int itmtouch_open(struct input_dev *input)
itmtouch
->
readurb
->
dev
=
itmtouch
->
usbdev
;
if
(
usb_submit_urb
(
itmtouch
->
readurb
,
GFP_KERNEL
))
{
if
(
usb_submit_urb
(
itmtouch
->
readurb
,
GFP_KERNEL
))
{
itmtouch
->
users
--
;
return
-
EIO
;
}
...
...
@@ -178,13 +177,13 @@ static int itmtouch_probe(struct usb_interface *intf, const struct usb_device_id
}
itmtouch
->
usbdev
=
udev
;
itmtouch
->
inputdev
.
private
=
itmtouch
;
itmtouch
->
inputdev
.
open
=
itmtouch_open
;
itmtouch
->
inputdev
.
close
=
itmtouch_close
;
usb_make_path
(
udev
,
path
,
PATH_SIZE
);
itmtouch
->
inputdev
.
evbit
[
0
]
=
BIT
(
EV_KEY
)
|
BIT
(
EV_ABS
);
itmtouch
->
inputdev
.
absbit
[
0
]
=
BIT
(
ABS_X
)
|
BIT
(
ABS_Y
)
|
BIT
(
ABS_PRESSURE
);
itmtouch
->
inputdev
.
keybit
[
LONG
(
BTN_TOUCH
)]
=
BIT
(
BTN_TOUCH
);
...
...
@@ -194,12 +193,12 @@ static int itmtouch_probe(struct usb_interface *intf, const struct usb_device_id
itmtouch
->
inputdev
.
id
.
bustype
=
BUS_USB
;
itmtouch
->
inputdev
.
id
.
vendor
=
udev
->
descriptor
.
idVendor
;
itmtouch
->
inputdev
.
id
.
product
=
udev
->
descriptor
.
idProduct
;
itmtouch
->
inputdev
.
id
.
version
=
udev
->
descriptor
.
bcdDevice
;
itmtouch
->
inputdev
.
id
.
version
=
udev
->
descriptor
.
bcdDevice
;
itmtouch
->
inputdev
.
dev
=
&
intf
->
dev
;
if
(
!
strlen
(
itmtouch
->
name
))
sprintf
(
itmtouch
->
name
,
"USB ITM touchscreen"
);
/* device limits */
/* as specified by the ITM datasheet, X and Y are 12bit,
* Z (pressure) is 8 bit. However, the fields are defined up
...
...
@@ -212,26 +211,20 @@ static int itmtouch_probe(struct usb_interface *intf, const struct usb_device_id
/* initialise the URB so we can read from the transport stream */
pipe
=
usb_rcvintpipe
(
itmtouch
->
usbdev
,
endpoint
->
bEndpointAddress
);
maxp
=
usb_maxpacket
(
udev
,
pipe
,
usb_pipeout
(
pipe
));
if
(
maxp
>
ITM_BUFSIZE
)
maxp
=
ITM_BUFSIZE
;
itmtouch
->
readurb
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
itmtouch
->
readurb
)
{
dbg
(
"%s - usb_alloc_urb failed: itmtouch->readurb"
,
__FUNCTION__
);
kfree
(
itmtouch
);
return
-
ENOMEM
;
}
usb_fill_int_urb
(
itmtouch
->
readurb
,
itmtouch
->
usbdev
,
pipe
,
itmtouch
->
rbuf
,
maxp
,
itmtouch_irq
,
itmtouch
,
endpoint
->
bInterval
);
usb_fill_int_urb
(
itmtouch
->
readurb
,
itmtouch
->
usbdev
,
pipe
,
itmtouch
->
rbuf
,
maxp
,
itmtouch_irq
,
itmtouch
,
endpoint
->
bInterval
);
input_register_device
(
&
itmtouch
->
inputdev
);
...
...
@@ -242,7 +235,7 @@ static int itmtouch_probe(struct usb_interface *intf, const struct usb_device_id
}
static
void
itmtouch_disconnect
(
struct
usb_interface
*
intf
)
{
{
struct
itmtouch_dev
*
itmtouch
=
usb_get_intfdata
(
intf
);
usb_set_intfdata
(
intf
,
NULL
);
...
...
@@ -258,11 +251,11 @@ static void itmtouch_disconnect(struct usb_interface *intf)
MODULE_DEVICE_TABLE
(
usb
,
itmtouch_ids
);
static
struct
usb_driver
itmtouch_driver
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"itmtouch"
,
.
probe
=
itmtouch_probe
,
.
disconnect
=
itmtouch_disconnect
,
.
id_table
=
itmtouch_ids
,
.
owner
=
THIS_MODULE
,
.
name
=
"itmtouch"
,
.
probe
=
itmtouch_probe
,
.
disconnect
=
itmtouch_disconnect
,
.
id_table
=
itmtouch_ids
,
};
static
int
__init
itmtouch_init
(
void
)
...
...
drivers/usb/input/kbtab.c
View file @
05f091ab
...
...
@@ -79,12 +79,12 @@ static void kbtab_irq(struct urb *urb, struct pt_regs *regs)
/*input_report_key(dev, BTN_TOUCH , data[0] & 0x01);*/
input_report_key
(
dev
,
BTN_RIGHT
,
data
[
0
]
&
0x02
);
if
(
-
1
==
kb_pressure_click
){
if
(
-
1
==
kb_pressure_click
)
{
input_report_abs
(
dev
,
ABS_PRESSURE
,
kbtab
->
pressure
);
}
else
{
input_report_key
(
dev
,
BTN_LEFT
,
(
kbtab
->
pressure
>
kb_pressure_click
)
?
1
:
0
);
};
input_sync
(
dev
);
exit:
...
...
@@ -161,7 +161,7 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i
kbtab
->
dev
.
absmax
[
ABS_X
]
=
0x2000
;
kbtab
->
dev
.
absmax
[
ABS_Y
]
=
0x1750
;
kbtab
->
dev
.
absmax
[
ABS_PRESSURE
]
=
0xff
;
kbtab
->
dev
.
absfuzz
[
ABS_X
]
=
4
;
kbtab
->
dev
.
absfuzz
[
ABS_Y
]
=
4
;
...
...
drivers/usb/input/powermate.c
View file @
05f091ab
...
...
@@ -10,7 +10,7 @@
* back to the host when polled by the USB controller.
*
* Testing with the knob I have has shown that it measures approximately 94 "clicks"
* for one full rotation. Testing with my High Speed Rotation Actuator (ok, it was
* for one full rotation. Testing with my High Speed Rotation Actuator (ok, it was
* a variable speed cordless electric drill) has shown that the device can measure
* speeds of up to 7 clicks either clockwise or anticlockwise between pollings from
* the host. If it counts more than 7 clicks before it is polled, it will wrap back
...
...
@@ -120,9 +120,9 @@ static void powermate_irq(struct urb *urb, struct pt_regs *regs)
/* Decide if we need to issue a control message and do so. Must be called with pm->lock taken */
static
void
powermate_sync_state
(
struct
powermate_device
*
pm
)
{
if
(
pm
->
requires_update
==
0
)
if
(
pm
->
requires_update
==
0
)
return
;
/* no updates are required */
if
(
pm
->
config
->
status
==
-
EINPROGRESS
)
if
(
pm
->
config
->
status
==
-
EINPROGRESS
)
return
;
/* an update is already in progress; it'll issue this update when it completes */
if
(
pm
->
requires_update
&
UPDATE_PULSE_ASLEEP
){
...
...
@@ -142,7 +142,7 @@ static void powermate_sync_state(struct powermate_device *pm)
2: multiply the speed
the argument only has an effect for operations 0 and 2, and ranges between
1 (least effect) to 255 (maximum effect).
thus, several states are equivalent and are coalesced into one state.
we map this onto a range from 0 to 510, with:
...
...
@@ -151,7 +151,7 @@ static void powermate_sync_state(struct powermate_device *pm)
256 -- 510 -- use multiple (510 = fastest).
Only values of 'arg' quite close to 255 are particularly useful/spectacular.
*/
*/
if
(
pm
->
pulse_speed
<
255
){
op
=
0
;
// divide
arg
=
255
-
pm
->
pulse_speed
;
...
...
@@ -199,14 +199,14 @@ static void powermate_config_complete(struct urb *urb, struct pt_regs *regs)
if
(
urb
->
status
)
printk
(
KERN_ERR
"powermate: config urb returned %d
\n
"
,
urb
->
status
);
spin_lock_irqsave
(
&
pm
->
lock
,
flags
);
powermate_sync_state
(
pm
);
spin_unlock_irqrestore
(
&
pm
->
lock
,
flags
);
}
/* Set the LED up as described and begin the sync with the hardware if required */
static
void
powermate_pulse_led
(
struct
powermate_device
*
pm
,
int
static_brightness
,
int
pulse_speed
,
static
void
powermate_pulse_led
(
struct
powermate_device
*
pm
,
int
static_brightness
,
int
pulse_speed
,
int
pulse_table
,
int
pulse_asleep
,
int
pulse_awake
)
{
unsigned
long
flags
;
...
...
@@ -229,7 +229,7 @@ static void powermate_pulse_led(struct powermate_device *pm, int static_brightne
/* mark state updates which are required */
if
(
static_brightness
!=
pm
->
static_brightness
){
pm
->
static_brightness
=
static_brightness
;
pm
->
requires_update
|=
UPDATE_STATIC_BRIGHTNESS
;
pm
->
requires_update
|=
UPDATE_STATIC_BRIGHTNESS
;
}
if
(
pulse_asleep
!=
pm
->
pulse_asleep
){
pm
->
pulse_asleep
=
pulse_asleep
;
...
...
@@ -246,7 +246,7 @@ static void powermate_pulse_led(struct powermate_device *pm, int static_brightne
}
powermate_sync_state
(
pm
);
spin_unlock_irqrestore
(
&
pm
->
lock
,
flags
);
}
...
...
@@ -257,19 +257,19 @@ static int powermate_input_event(struct input_dev *dev, unsigned int type, unsig
struct
powermate_device
*
pm
=
dev
->
private
;
if
(
type
==
EV_MSC
&&
code
==
MSC_PULSELED
){
/*
/*
bits 0- 7: 8 bits: LED brightness
bits 8-16: 9 bits: pulsing speed modifier (0 ... 510); 0-254 = slower, 255 = standard, 256-510 = faster.
bits 17-18: 2 bits: pulse table (0, 1, 2 valid)
bit 19: 1 bit : pulse whilst asleep?
bit 20: 1 bit : pulse constantly?
*/
*/
int
static_brightness
=
command
&
0xFF
;
// bits 0-7
int
pulse_speed
=
(
command
>>
8
)
&
0x1FF
;
// bits 8-16
int
pulse_table
=
(
command
>>
17
)
&
0x3
;
// bits 17-18
int
pulse_asleep
=
(
command
>>
19
)
&
0x1
;
// bit 19
int
pulse_awake
=
(
command
>>
20
)
&
0x1
;
// bit 20
powermate_pulse_led
(
pm
,
static_brightness
,
pulse_speed
,
pulse_table
,
pulse_asleep
,
pulse_awake
);
}
...
...
@@ -378,7 +378,7 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i
switch
(
le16_to_cpu
(
udev
->
descriptor
.
idProduct
))
{
case
POWERMATE_PRODUCT_NEW
:
pm
->
input
.
name
=
pm_name_powermate
;
break
;
case
POWERMATE_PRODUCT_OLD
:
pm
->
input
.
name
=
pm_name_soundknob
;
break
;
default:
default:
pm
->
input
.
name
=
pm_name_soundknob
;
printk
(
KERN_WARNING
"powermate: unknown product id %04x
\n
"
,
le16_to_cpu
(
udev
->
descriptor
.
idProduct
));
...
...
@@ -402,11 +402,11 @@ static int powermate_probe(struct usb_interface *intf, const struct usb_device_i
usb_make_path
(
udev
,
path
,
64
);
snprintf
(
pm
->
phys
,
64
,
"%s/input0"
,
path
);
printk
(
KERN_INFO
"input: %s on %s
\n
"
,
pm
->
input
.
name
,
pm
->
input
.
phys
);
/* force an update of everything */
pm
->
requires_update
=
UPDATE_PULSE_ASLEEP
|
UPDATE_PULSE_AWAKE
|
UPDATE_PULSE_MODE
|
UPDATE_STATIC_BRIGHTNESS
;
powermate_pulse_led
(
pm
,
0x80
,
255
,
0
,
1
,
0
);
// set default pulse parameters
usb_set_intfdata
(
intf
,
pm
);
return
0
;
}
...
...
drivers/usb/input/usbkbd.c
View file @
05f091ab
...
...
@@ -9,18 +9,18 @@
/*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* Should you need to contact me, the author, you can do so either by
* e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
...
...
@@ -166,7 +166,7 @@ static void usb_kbd_led(struct urb *urb, struct pt_regs *regs)
if
(
urb
->
status
)
warn
(
"led urb status %d received"
,
urb
->
status
);
if
(
*
(
kbd
->
leds
)
==
kbd
->
newleds
)
return
;
...
...
@@ -230,7 +230,7 @@ static void usb_kbd_free_mem(struct usb_device *dev, struct usb_kbd *kbd)
usb_buffer_free
(
dev
,
1
,
kbd
->
leds
,
kbd
->
leds_dma
);
}
static
int
usb_kbd_probe
(
struct
usb_interface
*
iface
,
static
int
usb_kbd_probe
(
struct
usb_interface
*
iface
,
const
struct
usb_device_id
*
id
)
{
struct
usb_device
*
dev
=
interface_to_usbdev
(
iface
);
...
...
@@ -272,7 +272,7 @@ static int usb_kbd_probe(struct usb_interface *iface,
for
(
i
=
0
;
i
<
255
;
i
++
)
set_bit
(
usb_kbd_keycode
[
i
],
kbd
->
dev
.
keybit
);
clear_bit
(
0
,
kbd
->
dev
.
keybit
);
kbd
->
dev
.
private
=
kbd
;
kbd
->
dev
.
event
=
usb_kbd_event
;
kbd
->
dev
.
open
=
usb_kbd_open
;
...
...
@@ -294,7 +294,7 @@ static int usb_kbd_probe(struct usb_interface *iface,
sprintf
(
kbd
->
phys
,
"%s/input0"
,
path
);
kbd
->
dev
.
name
=
kbd
->
name
;
kbd
->
dev
.
phys
=
kbd
->
phys
;
kbd
->
dev
.
phys
=
kbd
->
phys
;
kbd
->
dev
.
id
.
bustype
=
BUS_USB
;
kbd
->
dev
.
id
.
vendor
=
le16_to_cpu
(
dev
->
descriptor
.
idVendor
);
kbd
->
dev
.
id
.
product
=
le16_to_cpu
(
dev
->
descriptor
.
idProduct
);
...
...
@@ -329,7 +329,7 @@ static int usb_kbd_probe(struct usb_interface *iface,
static
void
usb_kbd_disconnect
(
struct
usb_interface
*
intf
)
{
struct
usb_kbd
*
kbd
=
usb_get_intfdata
(
intf
);
usb_set_intfdata
(
intf
,
NULL
);
if
(
kbd
)
{
usb_kill_urb
(
kbd
->
irq
);
...
...
drivers/usb/input/usbmouse.c
View file @
05f091ab
...
...
@@ -9,18 +9,18 @@
/*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* Should you need to contact me, the author, you can do so either by
* e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail:
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
...
...
@@ -132,19 +132,19 @@ static int usb_mouse_probe(struct usb_interface * intf, const struct usb_device_
interface
=
intf
->
cur_altsetting
;
if
(
interface
->
desc
.
bNumEndpoints
!=
1
)
if
(
interface
->
desc
.
bNumEndpoints
!=
1
)
return
-
ENODEV
;
endpoint
=
&
interface
->
endpoint
[
0
].
desc
;
if
(
!
(
endpoint
->
bEndpointAddress
&
0x80
))
if
(
!
(
endpoint
->
bEndpointAddress
&
0x80
))
return
-
ENODEV
;
if
((
endpoint
->
bmAttributes
&
3
)
!=
3
)
if
((
endpoint
->
bmAttributes
&
3
)
!=
3
)
return
-
ENODEV
;
pipe
=
usb_rcvintpipe
(
dev
,
endpoint
->
bEndpointAddress
);
maxp
=
usb_maxpacket
(
dev
,
pipe
,
usb_pipeout
(
pipe
));
if
(
!
(
mouse
=
kmalloc
(
sizeof
(
struct
usb_mouse
),
GFP_KERNEL
)))
if
(
!
(
mouse
=
kmalloc
(
sizeof
(
struct
usb_mouse
),
GFP_KERNEL
)))
return
-
ENOMEM
;
memset
(
mouse
,
0
,
sizeof
(
struct
usb_mouse
));
...
...
@@ -209,7 +209,7 @@ static int usb_mouse_probe(struct usb_interface * intf, const struct usb_device_
static
void
usb_mouse_disconnect
(
struct
usb_interface
*
intf
)
{
struct
usb_mouse
*
mouse
=
usb_get_intfdata
(
intf
);
usb_set_intfdata
(
intf
,
NULL
);
if
(
mouse
)
{
usb_kill_urb
(
mouse
->
irq
);
...
...
@@ -238,7 +238,7 @@ static struct usb_driver usb_mouse_driver = {
static
int
__init
usb_mouse_init
(
void
)
{
int
retval
=
usb_register
(
&
usb_mouse_driver
);
if
(
retval
==
0
)
if
(
retval
==
0
)
info
(
DRIVER_VERSION
":"
DRIVER_DESC
);
return
retval
;
}
...
...
drivers/usb/input/wacom.c
View file @
05f091ab
...
...
@@ -18,7 +18,7 @@
* v0.4 (sm) - Support for more Intuos models, menustrip
* relative mode, proximity.
* v0.5 (vp) - Big cleanup, nifty features removed,
*
they belong in userspace
* they belong in userspace
* v1.8 (vp) - Submit URB only when operating, moved to CVS,
* use input_report_key instead of report_btn and
* other cleanups
...
...
@@ -149,7 +149,7 @@ static void wacom_pl_irq(struct urb *urb, struct pt_regs *regs)
prox
=
data
[
1
]
&
0x40
;
input_regs
(
dev
,
regs
);
if
(
prox
)
{
pressure
=
(
signed
char
)((
data
[
7
]
<<
1
)
|
((
data
[
4
]
>>
2
)
&
1
));
...
...
@@ -545,7 +545,7 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
/* process general packets */
wacom_intuos_general
(
urb
);
if
((
data
[
1
]
&
0xbc
)
==
0xa8
||
(
data
[
1
]
&
0xbe
)
==
0xb0
)
{
/* 4D mouse or Lens cursor packets */
if
(
data
[
1
]
&
0x02
)
{
/* Rotation packet */
...
...
@@ -555,7 +555,7 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
}
else
{
if
((
data
[
1
]
&
0x10
)
==
0
)
{
/* 4D mouse packets */
if
((
data
[
1
]
&
0x10
)
==
0
)
{
/* 4D mouse packets */
input_report_key
(
dev
,
BTN_LEFT
,
data
[
8
]
&
0x01
);
input_report_key
(
dev
,
BTN_MIDDLE
,
data
[
8
]
&
0x02
);
...
...
@@ -567,11 +567,11 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_abs
(
dev
,
ABS_THROTTLE
,
(
data
[
8
]
&
0x08
)
?
-
t
:
t
);
}
else
{
if
(
wacom
->
tool
[
idx
]
==
BTN_TOOL_MOUSE
)
{
/* 2D mouse packets */
if
(
wacom
->
tool
[
idx
]
==
BTN_TOOL_MOUSE
)
{
/* 2D mouse packets */
input_report_key
(
dev
,
BTN_LEFT
,
data
[
8
]
&
0x04
);
input_report_key
(
dev
,
BTN_MIDDLE
,
data
[
8
]
&
0x08
);
input_report_key
(
dev
,
BTN_RIGHT
,
data
[
8
]
&
0x10
);
input_report_rel
(
dev
,
REL_WHEEL
,
input_report_rel
(
dev
,
REL_WHEEL
,
(
-
(
__u32
)(
data
[
8
]
&
0x01
)
+
(
__u32
)((
data
[
8
]
&
0x02
)
>>
1
)));
}
else
{
/* Lens cursor packets */
...
...
@@ -584,7 +584,7 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
}
}
}
input_report_key
(
dev
,
wacom
->
tool
[
idx
],
1
);
input_event
(
dev
,
EV_MSC
,
MSC_SERIAL
,
wacom
->
serial
[
idx
]);
input_sync
(
dev
);
...
...
@@ -705,20 +705,20 @@ static struct wacom_features wacom_features[] = {
{
"Wacom Penpartner"
,
7
,
5040
,
3780
,
255
,
32
,
0
,
wacom_penpartner_irq
},
{
"Wacom Graphire"
,
8
,
10206
,
7422
,
511
,
32
,
1
,
wacom_graphire_irq
},
{
"Wacom Graphire2 4x5"
,
8
,
10206
,
7422
,
511
,
32
,
1
,
wacom_graphire_irq
},
{
"Wacom Graphire2 5x7"
,
8
,
13918
,
10206
,
511
,
32
,
1
,
wacom_graphire_irq
},
{
"Wacom Graphire2 5x7"
,
8
,
13918
,
10206
,
511
,
32
,
1
,
wacom_graphire_irq
},
{
"Wacom Graphire3"
,
8
,
10208
,
7424
,
511
,
32
,
1
,
wacom_graphire_irq
},
{
"Wacom Graphire3 6x8"
,
8
,
16704
,
12064
,
511
,
32
,
1
,
wacom_graphire_irq
},
{
"Wacom Intuos 4x5"
,
10
,
12700
,
10600
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos 6x8"
,
10
,
20320
,
16240
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos 9x12"
,
10
,
30480
,
24060
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos 12x12"
,
10
,
30480
,
31680
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos 12x18"
,
10
,
45720
,
31680
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom PL400"
,
8
,
5408
,
4056
,
255
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL500"
,
8
,
6144
,
4608
,
255
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL600"
,
8
,
6126
,
4604
,
255
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL600SX"
,
8
,
6260
,
5016
,
255
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL550"
,
8
,
6144
,
4608
,
511
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL800"
,
8
,
7220
,
5780
,
511
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom Intuos 4x5"
,
10
,
12700
,
10600
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos 6x8"
,
10
,
20320
,
16240
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos 9x12"
,
10
,
30480
,
24060
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos 12x12"
,
10
,
30480
,
31680
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos 12x18"
,
10
,
45720
,
31680
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom PL400"
,
8
,
5408
,
4056
,
255
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL500"
,
8
,
6144
,
4608
,
255
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL600"
,
8
,
6126
,
4604
,
255
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL600SX"
,
8
,
6260
,
5016
,
255
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL550"
,
8
,
6144
,
4608
,
511
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom PL800"
,
8
,
7220
,
5780
,
511
,
32
,
3
,
wacom_pl_irq
},
{
"Wacom Intuos2 4x5"
,
10
,
12700
,
10600
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos2 6x8"
,
10
,
20320
,
16240
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
"Wacom Intuos2 9x12"
,
10
,
30480
,
24060
,
1023
,
15
,
2
,
wacom_intuos_irq
},
...
...
@@ -730,7 +730,7 @@ static struct wacom_features wacom_features[] = {
{
"Wacom Intuos3 6x8"
,
10
,
40640
,
30480
,
1023
,
15
,
4
,
wacom_intuos3_irq
},
{
"Wacom Intuos3 9x12"
,
10
,
60960
,
45720
,
1023
,
15
,
4
,
wacom_intuos3_irq
},
{
"Wacom Intuos2 6x8"
,
10
,
20320
,
16240
,
1023
,
15
,
2
,
wacom_intuos_irq
},
{
}
{
}
};
static
struct
usb_device_id
wacom_ids
[]
=
{
...
...
@@ -828,7 +828,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
wacom
->
dev
.
relbit
[
0
]
|=
BIT
(
REL_WHEEL
);
wacom
->
dev
.
absbit
[
0
]
|=
BIT
(
ABS_DISTANCE
);
wacom
->
dev
.
keybit
[
LONG
(
BTN_LEFT
)]
|=
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_RIGHT
)
|
BIT
(
BTN_MIDDLE
);
wacom
->
dev
.
keybit
[
LONG
(
BTN_DIGI
)]
|=
BIT
(
BTN_TOOL_RUBBER
)
|
BIT
(
BTN_TOOL_MOUSE
)
|
BIT
(
BTN_STYLUS2
);
wacom
->
dev
.
keybit
[
LONG
(
BTN_DIGI
)]
|=
BIT
(
BTN_TOOL_RUBBER
)
|
BIT
(
BTN_TOOL_MOUSE
)
|
BIT
(
BTN_STYLUS2
);
break
;
case
4
:
/* new functions for Intuos3 */
...
...
@@ -842,13 +842,13 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
wacom
->
dev
.
mscbit
[
0
]
|=
BIT
(
MSC_SERIAL
);
wacom
->
dev
.
relbit
[
0
]
|=
BIT
(
REL_WHEEL
);
wacom
->
dev
.
keybit
[
LONG
(
BTN_LEFT
)]
|=
BIT
(
BTN_LEFT
)
|
BIT
(
BTN_RIGHT
)
|
BIT
(
BTN_MIDDLE
)
|
BIT
(
BTN_SIDE
)
|
BIT
(
BTN_EXTRA
);
wacom
->
dev
.
keybit
[
LONG
(
BTN_DIGI
)]
|=
BIT
(
BTN_TOOL_RUBBER
)
|
BIT
(
BTN_TOOL_MOUSE
)
|
BIT
(
BTN_TOOL_BRUSH
)
wacom
->
dev
.
keybit
[
LONG
(
BTN_DIGI
)]
|=
BIT
(
BTN_TOOL_RUBBER
)
|
BIT
(
BTN_TOOL_MOUSE
)
|
BIT
(
BTN_TOOL_BRUSH
)
|
BIT
(
BTN_TOOL_PENCIL
)
|
BIT
(
BTN_TOOL_AIRBRUSH
)
|
BIT
(
BTN_TOOL_LENS
)
|
BIT
(
BTN_STYLUS2
);
wacom
->
dev
.
absbit
[
0
]
|=
BIT
(
ABS_DISTANCE
)
|
BIT
(
ABS_WHEEL
)
|
BIT
(
ABS_TILT_X
)
|
BIT
(
ABS_TILT_Y
)
|
BIT
(
ABS_RZ
)
|
BIT
(
ABS_THROTTLE
);
break
;
case
3
:
wacom
->
dev
.
keybit
[
LONG
(
BTN_DIGI
)]
|=
BIT
(
BTN_STYLUS2
)
|
BIT
(
BTN_TOOL_RUBBER
);
wacom
->
dev
.
keybit
[
LONG
(
BTN_DIGI
)]
|=
BIT
(
BTN_STYLUS2
)
|
BIT
(
BTN_TOOL_RUBBER
);
break
;
}
...
...
drivers/usb/input/xpad.c
View file @
05f091ab
...
...
@@ -104,11 +104,11 @@ MODULE_DEVICE_TABLE (usb, xpad_table);
struct
usb_xpad
{
struct
input_dev
dev
;
/* input device interface */
struct
usb_device
*
udev
;
/* usb device */
struct
urb
*
irq_in
;
/* urb for interrupt in report */
unsigned
char
*
idata
;
/* input data */
dma_addr_t
idata_dma
;
char
phys
[
65
];
/* physical device path */
int
open_count
;
/* reference count */
};
...
...
@@ -128,35 +128,35 @@ static void xpad_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *d
struct
input_dev
*
dev
=
&
xpad
->
dev
;
input_regs
(
dev
,
regs
);
/* left stick */
input_report_abs
(
dev
,
ABS_X
,
(
__s16
)
(((
__s16
)
data
[
13
]
<<
8
)
|
data
[
12
]));
input_report_abs
(
dev
,
ABS_Y
,
(
__s16
)
(((
__s16
)
data
[
15
]
<<
8
)
|
data
[
14
]));
/* right stick */
input_report_abs
(
dev
,
ABS_RX
,
(
__s16
)
(((
__s16
)
data
[
17
]
<<
8
)
|
data
[
16
]));
input_report_abs
(
dev
,
ABS_RY
,
(
__s16
)
(((
__s16
)
data
[
19
]
<<
8
)
|
data
[
18
]));
/* triggers left/right */
input_report_abs
(
dev
,
ABS_Z
,
data
[
10
]);
input_report_abs
(
dev
,
ABS_RZ
,
data
[
11
]);
/* digital pad */
input_report_abs
(
dev
,
ABS_HAT0X
,
!!
(
data
[
2
]
&
0x08
)
-
!!
(
data
[
2
]
&
0x04
));
input_report_abs
(
dev
,
ABS_HAT0Y
,
!!
(
data
[
2
]
&
0x02
)
-
!!
(
data
[
2
]
&
0x01
));
/* start/back buttons and stick press left/right */
input_report_key
(
dev
,
BTN_START
,
(
data
[
2
]
&
0x10
)
>>
4
);
input_report_key
(
dev
,
BTN_BACK
,
(
data
[
2
]
&
0x20
)
>>
5
);
input_report_key
(
dev
,
BTN_THUMBL
,
(
data
[
2
]
&
0x40
)
>>
6
);
input_report_key
(
dev
,
BTN_THUMBR
,
data
[
2
]
>>
7
);
/* "analog" buttons A, B, X, Y */
input_report_key
(
dev
,
BTN_A
,
data
[
4
]);
input_report_key
(
dev
,
BTN_B
,
data
[
5
]);
input_report_key
(
dev
,
BTN_X
,
data
[
6
]);
input_report_key
(
dev
,
BTN_Y
,
data
[
7
]);
/* "analog" buttons black, white */
input_report_key
(
dev
,
BTN_C
,
data
[
8
]);
input_report_key
(
dev
,
BTN_Z
,
data
[
9
]);
...
...
@@ -168,7 +168,7 @@ static void xpad_irq_in(struct urb *urb, struct pt_regs *regs)
{
struct
usb_xpad
*
xpad
=
urb
->
context
;
int
retval
;
switch
(
urb
->
status
)
{
case
0
:
/* success */
...
...
@@ -183,7 +183,7 @@ static void xpad_irq_in(struct urb *urb, struct pt_regs *regs)
dbg
(
"%s - nonzero urb status received: %d"
,
__FUNCTION__
,
urb
->
status
);
goto
exit
;
}
xpad_process_packet
(
xpad
,
0
,
xpad
->
idata
,
regs
);
exit:
...
...
@@ -196,23 +196,23 @@ static void xpad_irq_in(struct urb *urb, struct pt_regs *regs)
static
int
xpad_open
(
struct
input_dev
*
dev
)
{
struct
usb_xpad
*
xpad
=
dev
->
private
;
if
(
xpad
->
open_count
++
)
return
0
;
xpad
->
irq_in
->
dev
=
xpad
->
udev
;
if
(
usb_submit_urb
(
xpad
->
irq_in
,
GFP_KERNEL
))
{
xpad
->
open_count
--
;
return
-
EIO
;
}
return
0
;
}
static
void
xpad_close
(
struct
input_dev
*
dev
)
{
struct
usb_xpad
*
xpad
=
dev
->
private
;
if
(
!--
xpad
->
open_count
)
usb_kill_urb
(
xpad
->
irq_in
);
}
...
...
@@ -224,19 +224,19 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
struct
usb_endpoint_descriptor
*
ep_irq_in
;
char
path
[
64
];
int
i
;
for
(
i
=
0
;
xpad_device
[
i
].
idVendor
;
i
++
)
{
if
((
le16_to_cpu
(
udev
->
descriptor
.
idVendor
)
==
xpad_device
[
i
].
idVendor
)
&&
(
le16_to_cpu
(
udev
->
descriptor
.
idProduct
)
==
xpad_device
[
i
].
idProduct
))
break
;
}
if
((
xpad
=
kmalloc
(
sizeof
(
struct
usb_xpad
),
GFP_KERNEL
))
==
NULL
)
{
err
(
"cannot allocate memory for new pad"
);
return
-
ENOMEM
;
}
memset
(
xpad
,
0
,
sizeof
(
struct
usb_xpad
));
xpad
->
idata
=
usb_buffer_alloc
(
udev
,
XPAD_PKT_LEN
,
SLAB_ATOMIC
,
&
xpad
->
idata_dma
);
if
(
!
xpad
->
idata
)
{
...
...
@@ -251,18 +251,18 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
kfree
(
xpad
);
return
-
ENOMEM
;
}
ep_irq_in
=
&
intf
->
cur_altsetting
->
endpoint
[
0
].
desc
;
usb_fill_int_urb
(
xpad
->
irq_in
,
udev
,
usb_rcvintpipe
(
udev
,
ep_irq_in
->
bEndpointAddress
),
xpad
->
idata
,
XPAD_PKT_LEN
,
xpad_irq_in
,
xpad
,
ep_irq_in
->
bInterval
);
xpad
->
irq_in
->
transfer_dma
=
xpad
->
idata_dma
;
xpad
->
irq_in
->
transfer_flags
|=
URB_NO_TRANSFER_DMA_MAP
;
xpad
->
udev
=
udev
;
xpad
->
dev
.
id
.
bustype
=
BUS_USB
;
xpad
->
dev
.
id
.
vendor
=
le16_to_cpu
(
udev
->
descriptor
.
idVendor
);
xpad
->
dev
.
id
.
product
=
le16_to_cpu
(
udev
->
descriptor
.
idProduct
);
...
...
@@ -273,21 +273,21 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
xpad
->
dev
.
phys
=
xpad
->
phys
;
xpad
->
dev
.
open
=
xpad_open
;
xpad
->
dev
.
close
=
xpad_close
;
usb_make_path
(
udev
,
path
,
64
);
snprintf
(
xpad
->
phys
,
64
,
"%s/input0"
,
path
);
xpad
->
dev
.
evbit
[
0
]
=
BIT
(
EV_KEY
)
|
BIT
(
EV_ABS
);
for
(
i
=
0
;
xpad_btn
[
i
]
>=
0
;
i
++
)
set_bit
(
xpad_btn
[
i
],
xpad
->
dev
.
keybit
);
for
(
i
=
0
;
xpad_abs
[
i
]
>=
0
;
i
++
)
{
signed
short
t
=
xpad_abs
[
i
];
set_bit
(
t
,
xpad
->
dev
.
absbit
);
switch
(
t
)
{
case
ABS_X
:
case
ABS_Y
:
...
...
@@ -310,11 +310,11 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
break
;
}
}
input_register_device
(
&
xpad
->
dev
);
printk
(
KERN_INFO
"input: %s on %s"
,
xpad
->
dev
.
name
,
path
);
usb_set_intfdata
(
intf
,
xpad
);
return
0
;
}
...
...
@@ -322,7 +322,7 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
static
void
xpad_disconnect
(
struct
usb_interface
*
intf
)
{
struct
usb_xpad
*
xpad
=
usb_get_intfdata
(
intf
);
usb_set_intfdata
(
intf
,
NULL
);
if
(
xpad
)
{
usb_kill_urb
(
xpad
->
irq_in
);
...
...
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