Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci-2.6.23
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci-2.6.23
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 @@ exit:
* 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 @@ exit:
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 @@ goodreturn:
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 @@ exit:
/* 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 @@ exit:
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