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
64673994
Commit
64673994
authored
May 14, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/gregkh/linux/linus-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
f55ae64b
bfb77631
Changes
31
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
480 additions
and
264 deletions
+480
-264
drivers/usb/class/Kconfig
drivers/usb/class/Kconfig
+1
-1
drivers/usb/class/cdc-acm.c
drivers/usb/class/cdc-acm.c
+28
-14
drivers/usb/class/usb-midi.c
drivers/usb/class/usb-midi.c
+41
-21
drivers/usb/class/usblp.c
drivers/usb/class/usblp.c
+18
-10
drivers/usb/core/hcd-pci.c
drivers/usb/core/hcd-pci.c
+2
-1
drivers/usb/gadget/Kconfig
drivers/usb/gadget/Kconfig
+10
-11
drivers/usb/gadget/net2280.c
drivers/usb/gadget/net2280.c
+32
-10
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-hcd.c
+0
-1
drivers/usb/host/ohci-hcd.c
drivers/usb/host/ohci-hcd.c
+0
-1
drivers/usb/host/ohci-sa1111.c
drivers/usb/host/ohci-sa1111.c
+4
-2
drivers/usb/input/hid-core.c
drivers/usb/input/hid-core.c
+31
-11
drivers/usb/input/hid-input.c
drivers/usb/input/hid-input.c
+2
-1
drivers/usb/input/hid-lgff.c
drivers/usb/input/hid-lgff.c
+4
-2
drivers/usb/input/hid-tmff.c
drivers/usb/input/hid-tmff.c
+2
-1
drivers/usb/input/hiddev.c
drivers/usb/input/hiddev.c
+18
-9
drivers/usb/input/pid.c
drivers/usb/input/pid.c
+4
-2
drivers/usb/input/usbkbd.c
drivers/usb/input/usbkbd.c
+2
-1
drivers/usb/media/ov511.c
drivers/usb/media/ov511.c
+206
-126
drivers/usb/media/se401.c
drivers/usb/media/se401.c
+9
-10
drivers/usb/media/vicam.c
drivers/usb/media/vicam.c
+2
-1
drivers/usb/misc/auerswald.c
drivers/usb/misc/auerswald.c
+22
-11
drivers/usb/misc/uss720.c
drivers/usb/misc/uss720.c
+1
-1
drivers/usb/net/catc.c
drivers/usb/net/catc.c
+8
-4
drivers/usb/net/kaweth.c
drivers/usb/net/kaweth.c
+2
-1
drivers/usb/serial/belkin_sa.c
drivers/usb/serial/belkin_sa.c
+5
-2
drivers/usb/serial/console.c
drivers/usb/serial/console.c
+6
-3
drivers/usb/serial/cyberjack.c
drivers/usb/serial/cyberjack.c
+6
-3
drivers/usb/serial/io_ti.c
drivers/usb/serial/io_ti.c
+2
-1
drivers/usb/serial/ir-usb.c
drivers/usb/serial/ir-usb.c
+2
-1
drivers/usb/serial/pl2303.c
drivers/usb/serial/pl2303.c
+1
-1
drivers/usb/storage/unusual_devs.h
drivers/usb/storage/unusual_devs.h
+9
-0
No files found.
drivers/usb/class/Kconfig
View file @
64673994
...
...
@@ -90,6 +90,6 @@ config USB_PRINTER
This code is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called
printer
. If you want to compile it as a
The module will be called
usblp
. If you want to compile it as a
module, say M here and read <file:Documentation/modules.txt>.
drivers/usb/class/cdc-acm.c
View file @
64673994
...
...
@@ -252,7 +252,8 @@ static void acm_read_bulk(struct urb *urb, struct pt_regs *regs)
unsigned
char
*
data
=
urb
->
transfer_buffer
;
int
i
=
0
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
urb
->
status
)
dbg
(
"nonzero read bulk status received: %d"
,
urb
->
status
);
...
...
@@ -286,7 +287,8 @@ static void acm_write_bulk(struct urb *urb, struct pt_regs *regs)
{
struct
acm
*
acm
=
(
struct
acm
*
)
urb
->
context
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
urb
->
status
)
dbg
(
"nonzero write bulk status received: %d"
,
urb
->
status
);
...
...
@@ -299,7 +301,8 @@ static void acm_softint(void *private)
struct
acm
*
acm
=
private
;
struct
tty_struct
*
tty
=
acm
->
tty
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
!
ACM_READY
(
acm
))
return
;
if
((
tty
->
flags
&
(
1
<<
TTY_DO_WRITE_WAKEUP
))
&&
tty
->
ldisc
.
write_wakeup
)
(
tty
->
ldisc
.
write_wakeup
)(
tty
);
...
...
@@ -315,7 +318,8 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
{
struct
acm
*
acm
=
acm_table
[
tty
->
index
];
if
(
!
acm
||
!
acm
->
dev
)
return
-
EINVAL
;
if
(
!
acm
||
!
acm
->
dev
)
return
-
EINVAL
;
tty
->
driver_data
=
acm
;
acm
->
tty
=
tty
;
...
...
@@ -350,7 +354,8 @@ static void acm_tty_close(struct tty_struct *tty, struct file *filp)
{
struct
acm
*
acm
=
tty
->
driver_data
;
if
(
!
acm
||
!
acm
->
used
)
return
;
if
(
!
acm
||
!
acm
->
used
)
return
;
if
(
!--
acm
->
used
)
{
if
(
acm
->
dev
)
{
...
...
@@ -373,9 +378,12 @@ static int acm_tty_write(struct tty_struct *tty, int from_user, const unsigned c
{
struct
acm
*
acm
=
tty
->
driver_data
;
if
(
!
ACM_READY
(
acm
))
return
-
EINVAL
;
if
(
acm
->
writeurb
->
status
==
-
EINPROGRESS
)
return
0
;
if
(
!
count
)
return
0
;
if
(
!
ACM_READY
(
acm
))
return
-
EINVAL
;
if
(
acm
->
writeurb
->
status
==
-
EINPROGRESS
)
return
0
;
if
(
!
count
)
return
0
;
count
=
(
count
>
acm
->
writesize
)
?
acm
->
writesize
:
count
;
...
...
@@ -397,28 +405,32 @@ static int acm_tty_write(struct tty_struct *tty, int from_user, const unsigned c
static
int
acm_tty_write_room
(
struct
tty_struct
*
tty
)
{
struct
acm
*
acm
=
tty
->
driver_data
;
if
(
!
ACM_READY
(
acm
))
return
-
EINVAL
;
if
(
!
ACM_READY
(
acm
))
return
-
EINVAL
;
return
acm
->
writeurb
->
status
==
-
EINPROGRESS
?
0
:
acm
->
writesize
;
}
static
int
acm_tty_chars_in_buffer
(
struct
tty_struct
*
tty
)
{
struct
acm
*
acm
=
tty
->
driver_data
;
if
(
!
ACM_READY
(
acm
))
return
-
EINVAL
;
if
(
!
ACM_READY
(
acm
))
return
-
EINVAL
;
return
acm
->
writeurb
->
status
==
-
EINPROGRESS
?
acm
->
writeurb
->
transfer_buffer_length
:
0
;
}
static
void
acm_tty_throttle
(
struct
tty_struct
*
tty
)
{
struct
acm
*
acm
=
tty
->
driver_data
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
!
ACM_READY
(
acm
))
return
;
acm
->
throttle
=
1
;
}
static
void
acm_tty_unthrottle
(
struct
tty_struct
*
tty
)
{
struct
acm
*
acm
=
tty
->
driver_data
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
!
ACM_READY
(
acm
))
return
;
acm
->
throttle
=
0
;
if
(
acm
->
readurb
->
status
!=
-
EINPROGRESS
)
acm_read_bulk
(
acm
->
readurb
,
NULL
);
...
...
@@ -427,7 +439,8 @@ static void acm_tty_unthrottle(struct tty_struct *tty)
static
void
acm_tty_break_ctl
(
struct
tty_struct
*
tty
,
int
state
)
{
struct
acm
*
acm
=
tty
->
driver_data
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
acm_send_break
(
acm
,
state
?
0xffff
:
0
))
dbg
(
"send break failed"
);
}
...
...
@@ -496,7 +509,8 @@ static void acm_tty_set_termios(struct tty_struct *tty, struct termios *termios_
struct
acm_line
newline
;
int
newctrl
=
acm
->
ctrlout
;
if
(
!
ACM_READY
(
acm
))
return
;
if
(
!
ACM_READY
(
acm
))
return
;
newline
.
speed
=
cpu_to_le32p
(
acm_tty_speed
+
(
termios
->
c_cflag
&
CBAUD
&
~
CBAUDEX
)
+
(
termios
->
c_cflag
&
CBAUDEX
?
15
:
0
));
...
...
drivers/usb/class/usb-midi.c
View file @
64673994
...
...
@@ -1355,8 +1355,10 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
next
=
p2
+
p2
[
0
];
length
-=
p2
[
0
];
if
(
p2
[
0
]
<
2
)
break
;
if
(
p2
[
1
]
!=
USB_DT_CS_INTERFACE
)
break
;
if
(
p2
[
0
]
<
2
)
break
;
if
(
p2
[
1
]
!=
USB_DT_CS_INTERFACE
)
break
;
if
(
p2
[
2
]
==
MIDI_IN_JACK
&&
p2
[
0
]
>=
6
)
{
jack
=
p2
[
4
];
#ifdef HAVE_JACK_STRINGS
...
...
@@ -1366,7 +1368,8 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
jack
,
(
p2
[
3
]
==
EMBEDDED_JACK
)
?
"EMBEDDED"
:
"EXTERNAL"
);
}
else
if
(
p2
[
2
]
==
MIDI_OUT_JACK
&&
p2
[
0
]
>=
6
)
{
pins
=
p2
[
5
];
if
(
p2
[
0
]
<
(
6
+
2
*
pins
)
)
continue
;
if
(
p2
[
0
]
<
(
6
+
2
*
pins
)
)
continue
;
jack
=
p2
[
4
];
#ifdef HAVE_JACK_STRINGS
jack2string
[
jack
]
=
p2
[
5
+
2
*
pins
];
...
...
@@ -1375,9 +1378,11 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
jack
,
(
p2
[
3
]
==
EMBEDDED_JACK
)
?
"EMBEDDED"
:
"EXTERNAL"
,
pins
);
}
else
if
(
p2
[
2
]
==
ELEMENT_DESCRIPTOR
&&
p2
[
0
]
>=
10
)
{
pins
=
p2
[
4
];
if
(
p2
[
0
]
<
(
9
+
2
*
pins
)
)
continue
;
if
(
p2
[
0
]
<
(
9
+
2
*
pins
)
)
continue
;
nbytes
=
p2
[
8
+
2
*
pins
];
if
(
p2
[
0
]
<
(
10
+
2
*
pins
+
nbytes
)
)
continue
;
if
(
p2
[
0
]
<
(
10
+
2
*
pins
+
nbytes
)
)
continue
;
longBits
=
0L
;
for
(
offset
=
0
,
shift
=
0
;
offset
<
nbytes
&&
offset
<
8
;
offset
++
,
shift
+=
8
)
{
longBits
|=
((
long
)(
p2
[
9
+
2
*
pins
+
offset
]))
<<
shift
;
...
...
@@ -1408,7 +1413,8 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
if
(
p2
&&
next
&&
(
p2
>
next
)
)
p2
=
0
;
if
(
p1
[
0
]
<
9
||
!
p2
||
p2
[
0
]
<
4
)
continue
;
if
(
p1
[
0
]
<
9
||
!
p2
||
p2
[
0
]
<
4
)
continue
;
if
(
(
p1
[
2
]
&
0x80
)
==
0x80
)
{
if
(
iep
<
15
)
{
...
...
@@ -1417,7 +1423,8 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
pins
=
16
;
u
->
in
[
iep
].
endpoint
=
p1
[
2
];
u
->
in
[
iep
].
cableId
=
(
1
<<
pins
)
-
1
;
if
(
u
->
in
[
iep
].
cableId
)
iep
++
;
if
(
u
->
in
[
iep
].
cableId
)
iep
++
;
if
(
iep
<
15
)
{
u
->
in
[
iep
].
endpoint
=
-
1
;
u
->
in
[
iep
].
cableId
=
-
1
;
...
...
@@ -1430,7 +1437,8 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
pins
=
16
;
u
->
out
[
oep
].
endpoint
=
p1
[
2
];
u
->
out
[
oep
].
cableId
=
(
1
<<
pins
)
-
1
;
if
(
u
->
out
[
oep
].
cableId
)
oep
++
;
if
(
u
->
out
[
oep
].
cableId
)
oep
++
;
if
(
oep
<
15
)
{
u
->
out
[
oep
].
endpoint
=
-
1
;
u
->
out
[
oep
].
cableId
=
-
1
;
...
...
@@ -1446,7 +1454,8 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
next
=
find_descriptor
(
buffer
,
bufSize
,
p1
,
USB_DT_ENDPOINT
,
ifnum
,
altSetting
);
if
(
p1
[
0
]
<
7
)
continue
;
if
(
p1
[
0
]
<
7
)
continue
;
if
(
(
p1
[
2
]
&
0x80
)
==
0x80
)
{
if
(
iep
<
15
)
{
...
...
@@ -1455,7 +1464,8 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
pins
=
16
;
u
->
in
[
iep
].
endpoint
=
p1
[
2
];
u
->
in
[
iep
].
cableId
=
(
1
<<
pins
)
-
1
;
if
(
u
->
in
[
iep
].
cableId
)
iep
++
;
if
(
u
->
in
[
iep
].
cableId
)
iep
++
;
if
(
iep
<
15
)
{
u
->
in
[
iep
].
endpoint
=
-
1
;
u
->
in
[
iep
].
cableId
=
-
1
;
...
...
@@ -1468,7 +1478,8 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
pins
=
16
;
u
->
out
[
oep
].
endpoint
=
p1
[
2
];
u
->
out
[
oep
].
cableId
=
(
1
<<
pins
)
-
1
;
if
(
u
->
out
[
oep
].
cableId
)
oep
++
;
if
(
u
->
out
[
oep
].
cableId
)
oep
++
;
if
(
oep
<
15
)
{
u
->
out
[
oep
].
endpoint
=
-
1
;
u
->
out
[
oep
].
cableId
=
-
1
;
...
...
@@ -1486,7 +1497,7 @@ static struct usb_midi_device *parse_descriptor( struct usb_device *d, unsigned
return
u
;
error_end:
if
(
u
)
kfree
(
u
);
kfree
(
u
);
return
NULL
;
}
...
...
@@ -1501,7 +1512,8 @@ static int on_bits( unsigned short v )
int
ret
=
0
;
for
(
i
=
0
;
i
<
16
;
i
++
)
{
if
(
v
&
(
1
<<
i
)
)
ret
++
;
if
(
v
&
(
1
<<
i
)
)
ret
++
;
}
return
ret
;
...
...
@@ -1578,7 +1590,8 @@ static int alloc_usb_midi_device( struct usb_device *d, struct usb_midi_state *s
if
(
alt
<
0
)
{
alt
=
get_alt_setting
(
d
,
u
->
interface
);
}
if
(
alt
<
0
)
{
return
-
ENXIO
;
}
if
(
alt
<
0
)
return
-
ENXIO
;
/* Configure interface */
if
(
usb_set_interface
(
d
,
u
->
interface
,
alt
)
<
0
)
{
...
...
@@ -1596,7 +1609,8 @@ static int alloc_usb_midi_device( struct usb_device *d, struct usb_midi_state *s
&&
u
->
in
[
inEndpoints
].
cableId
>=
0
)
{
inDevs
+=
on_bits
((
unsigned
short
)
u
->
in
[
inEndpoints
].
cableId
);
mins
[
inEndpoints
]
=
alloc_midi_in_endpoint
(
d
,
u
->
in
[
inEndpoints
].
endpoint
);
if
(
mins
[
inEndpoints
]
==
NULL
)
{
goto
error_end
;
}
if
(
mins
[
inEndpoints
]
==
NULL
)
goto
error_end
;
inEndpoints
++
;
}
...
...
@@ -1605,7 +1619,8 @@ static int alloc_usb_midi_device( struct usb_device *d, struct usb_midi_state *s
&&
u
->
out
[
outEndpoints
].
cableId
>=
0
)
{
outDevs
+=
on_bits
((
unsigned
short
)
u
->
out
[
outEndpoints
].
cableId
);
mouts
[
outEndpoints
]
=
alloc_midi_out_endpoint
(
d
,
u
->
out
[
outEndpoints
].
endpoint
);
if
(
mouts
[
outEndpoints
]
==
NULL
)
{
goto
error_end
;
}
if
(
mouts
[
outEndpoints
]
==
NULL
)
goto
error_end
;
outEndpoints
++
;
}
...
...
@@ -1707,7 +1722,8 @@ static int alloc_usb_midi_device( struct usb_device *d, struct usb_midi_state *s
mout
=
mouts
[
outEndpoint
];
mdevs
[
i
]
=
allocMidiDev
(
s
,
min
,
mout
,
inCableId
,
outCableId
);
if
(
mdevs
[
i
]
==
NULL
)
{
goto
error_end
;
}
if
(
mdevs
[
i
]
==
NULL
)
goto
error_end
;
}
...
...
@@ -1962,11 +1978,15 @@ static int detect_by_hand(struct usb_device *d, unsigned int ifnum, struct usb_m
return
-
EINVAL
;
}
if
(
ualt
<
0
)
{
ualt
=
-
1
;
}
if
(
ualt
<
0
)
ualt
=
-
1
;
if
(
umin
<
0
||
umin
>
15
)
{
umin
=
0x01
|
USB_DIR_IN
;
}
if
(
umout
<
0
||
umout
>
15
)
{
umout
=
0x01
;
}
if
(
ucable
<
0
||
ucable
>
15
)
{
ucable
=
0
;
}
if
(
umin
<
0
||
umin
>
15
)
umin
=
0x01
|
USB_DIR_IN
;
if
(
umout
<
0
||
umout
>
15
)
umout
=
0x01
;
if
(
ucable
<
0
||
ucable
>
15
)
ucable
=
0
;
u
.
deviceName
=
0
;
/* A flag for alloc_usb_midi_device to get device name
from device. */
...
...
drivers/usb/class/usblp.c
View file @
64673994
...
...
@@ -298,8 +298,10 @@ static int usblp_check_status(struct usblp *usblp, int err)
status
=
*
usblp
->
statusbuf
;
if
(
~
status
&
LP_PERRORP
)
{
newerr
=
3
;
if
(
status
&
LP_POUTPA
)
newerr
=
1
;
if
(
~
status
&
LP_PSELECD
)
newerr
=
2
;
if
(
status
&
LP_POUTPA
)
newerr
=
1
;
if
(
~
status
&
LP_PSELECD
)
newerr
=
2
;
}
if
(
newerr
!=
err
)
...
...
@@ -926,8 +928,8 @@ static int usblp_probe(struct usb_interface *intf,
if
(
usblp
->
readbuf
)
usb_buffer_free
(
usblp
->
dev
,
USBLP_BUF_SIZE
,
usblp
->
readbuf
,
usblp
->
writeurb
->
transfer_dma
);
if
(
usblp
->
statusbuf
)
kfree
(
usblp
->
statusbuf
);
if
(
usblp
->
device_id_string
)
kfree
(
usblp
->
device_id_string
);
kfree
(
usblp
->
statusbuf
);
kfree
(
usblp
->
device_id_string
);
usb_free_urb
(
usblp
->
writeurb
);
usb_free_urb
(
usblp
->
readurb
);
kfree
(
usblp
);
...
...
@@ -987,10 +989,12 @@ static int usblp_select_alts(struct usblp *usblp)
continue
;
if
(
!
(
epd
->
bEndpointAddress
&
USB_ENDPOINT_DIR_MASK
))
{
if
(
!
epwrite
)
epwrite
=
epd
;
if
(
!
epwrite
)
epwrite
=
epd
;
}
else
{
if
(
!
epread
)
epread
=
epd
;
if
(
!
epread
)
epread
=
epd
;
}
}
...
...
@@ -1020,9 +1024,12 @@ static int usblp_select_alts(struct usblp *usblp)
return
proto_bias
;
/* Ordering is important here. */
if
(
usblp
->
protocol
[
2
].
alt_setting
!=
-
1
)
return
2
;
if
(
usblp
->
protocol
[
1
].
alt_setting
!=
-
1
)
return
1
;
if
(
usblp
->
protocol
[
3
].
alt_setting
!=
-
1
)
return
3
;
if
(
usblp
->
protocol
[
2
].
alt_setting
!=
-
1
)
return
2
;
if
(
usblp
->
protocol
[
1
].
alt_setting
!=
-
1
)
return
1
;
if
(
usblp
->
protocol
[
3
].
alt_setting
!=
-
1
)
return
3
;
/* If nothing is available, then don't bind to this device. */
return
-
1
;
...
...
@@ -1036,7 +1043,8 @@ static int usblp_set_protocol(struct usblp *usblp, int protocol)
return
-
EINVAL
;
alts
=
usblp
->
protocol
[
protocol
].
alt_setting
;
if
(
alts
<
0
)
return
-
EINVAL
;
if
(
alts
<
0
)
return
-
EINVAL
;
r
=
usb_set_interface
(
usblp
->
dev
,
usblp
->
ifnum
,
alts
);
if
(
r
<
0
)
{
err
(
"can't set desired altsetting %d on interface %d"
,
...
...
drivers/usb/core/hcd-pci.c
View file @
64673994
...
...
@@ -209,7 +209,8 @@ void usb_hcd_pci_remove (struct pci_dev *dev)
return
;
dev_info
(
hcd
->
controller
,
"remove, state %x
\n
"
,
hcd
->
state
);
if
(
in_interrupt
())
BUG
();
if
(
in_interrupt
())
BUG
();
hub
=
hcd
->
self
.
root_hub
;
hcd
->
state
=
USB_STATE_QUIESCING
;
...
...
drivers/usb/gadget/Kconfig
View file @
64673994
...
...
@@ -35,9 +35,8 @@ menuconfig USB_GADGET
#
# USB Peripheral Controller Support
#
# FIXME convert to tristate choice when "choice" behaves as specified
#
comment "USB Peripheral Controller Support"
choice
prompt "USB Peripheral Controller Support"
depends on USB_GADGET
config USB_NET2280
...
...
@@ -55,19 +54,17 @@ config USB_NET2280
dynamically linked module called "net2280" and force all
gadget drivers to also be dynamically linked.
endchoice
#
# USB Gadget Drivers
#
# FIXME only one of these may be statically linked; choice/endchoice.
#
comment "USB Gadget Drivers"
choice
prompt "USB Gadget Drivers"
depends on USB_GADGET
default USB_ETH
# FIXME want better dependency/config approach for drivers. with only
# two knobs to tweak (driver y/m/n, and a hardware symbol) there's no
# good excuse for Kconfig to cause such trouble here. there are clear
# bugs (coredumps, multiple choices enabled, and more) in its (boolean)
# "choice" logic too ...
# FIXME want a cleaner dependency/config approach for drivers.
config USB_ZERO
tristate "Gadget Zero (DEVELOPMENT)"
...
...
@@ -150,4 +147,6 @@ config USB_ETH_SA1100
depends on USB_ETH && USB_SA1100
default y
endchoice
# endmenuconfig
drivers/usb/gadget/net2280.c
View file @
64673994
...
...
@@ -73,7 +73,7 @@
#include <asm/unaligned.h>
#define
DRIVER_DESC "NetChip 2280 USB Peripheral Controller"
#define
DRIVER_DESC "NetChip 2280 USB Peripheral Controller"
#define DRIVER_VERSION "May Day 2003"
#define DMA_ADDR_INVALID (~(dma_addr_t)0)
...
...
@@ -98,6 +98,15 @@ static int use_dma = 1;
/* "modprobe net2280 use_dma=n" etc */
module_param
(
use_dma
,
bool
,
S_IRUGO
|
S_IWUSR
);
/* mode 0 == ep-{a,b,c,d} 1K fifo each
* mode 1 == ep-{a,b} 2K fifo each, ep-{c,d} unavailable
* mode 2 == ep-a 2K fifo, ep-{b,c} 1K each, ep-d unavailable
*/
static
ushort
fifo_mode
=
0
;
/* "modprobe net2280 fifo_mode=1" etc */
module_param
(
fifo_mode
,
ushort
,
0644
);
#define DIR_STRING(bAddress) (((bAddress) & USB_DIR_IN) ? "in" : "out")
#if defined(USE_SYSFS_DEBUG_FILES) || defined (DEBUG)
...
...
@@ -384,7 +393,7 @@ net2280_free_request (struct usb_ep *_ep, struct usb_request *_req)
struct
net2280_request
*
req
;
ep
=
container_of
(
_ep
,
struct
net2280_ep
,
ep
);
if
(
!
ep
||
!
_req
||
(
!
ep
->
desc
&&
ep
->
num
!=
0
)
)
if
(
!
ep
||
!
_req
)
return
;
req
=
container_of
(
_req
,
struct
net2280_request
,
req
);
...
...
@@ -411,7 +420,7 @@ net2280_free_request (struct usb_ep *_ep, struct usb_request *_req)
#if defined(CONFIG_X86)
#define USE_KMALLOC
#elif define(CONFIG_PPC) && !defined(CONFIG_NOT_COHERENT_CACHE)
#elif define
d
(CONFIG_PPC) && !defined(CONFIG_NOT_COHERENT_CACHE)
#define USE_KMALLOC
/* FIXME there are other cases, including an x86-64 one ... */
...
...
@@ -493,6 +502,7 @@ write_fifo (struct net2280_ep *ep, struct usb_request *req)
{
struct
net2280_ep_regs
*
regs
=
ep
->
regs
;
u8
*
buf
;
u32
tmp
;
unsigned
count
,
total
;
/* INVARIANT: fifo is currently empty. (testable) */
...
...
@@ -516,14 +526,17 @@ write_fifo (struct net2280_ep *ep, struct usb_request *req)
* should normally be full (4 bytes) and successive partial
* lines are ok only in certain cases.
*/
writel
(
get_unaligned
((
u32
*
)
buf
),
&
regs
->
ep_data
);
tmp
=
get_unaligned
((
u32
*
)
buf
);
cpu_to_le32s
(
&
tmp
);
writel
(
tmp
,
&
regs
->
ep_data
);
buf
+=
4
;
count
-=
4
;
}
/* last fifo entry is "short" unless we wrote a full packet */
if
(
total
<
ep
->
ep
.
maxpacket
)
{
u32
tmp
=
count
?
get_unaligned
((
u32
*
)
buf
)
:
count
;
tmp
=
count
?
get_unaligned
((
u32
*
)
buf
)
:
count
;
cpu_to_le32s
(
&
tmp
);
set_fifo_bytecount
(
ep
,
count
&
0x03
);
writel
(
tmp
,
&
regs
->
ep_data
);
}
...
...
@@ -623,12 +636,15 @@ read_fifo (struct net2280_ep *ep, struct net2280_request *req)
req
,
req
->
req
.
actual
,
req
->
req
.
length
);
while
(
count
>=
4
)
{
put_unaligned
(
readl
(
&
regs
->
ep_data
),
(
u32
*
)
buf
);
tmp
=
readl
(
&
regs
->
ep_data
);
cpu_to_le32s
(
&
tmp
);
put_unaligned
(
tmp
,
(
u32
*
)
buf
);
buf
+=
4
;
count
-=
4
;
}
if
(
count
)
{
tmp
=
readl
(
&
regs
->
ep_data
);
cpu_to_le32s
(
&
tmp
);
do
{
*
buf
++
=
(
u8
)
tmp
;
tmp
>>=
8
;
...
...
@@ -1193,11 +1209,13 @@ net2280_fifo_status (struct usb_ep *_ep)
ep
=
container_of
(
_ep
,
struct
net2280_ep
,
ep
);
if
(
!
_ep
||
(
!
ep
->
desc
&&
ep
->
num
!=
0
))
return
-
E
INVAL
;
return
-
E
NODEV
;
if
(
!
ep
->
dev
->
driver
||
ep
->
dev
->
gadget
.
speed
==
USB_SPEED_UNKNOWN
)
return
-
ESHUTDOWN
;
avail
=
readl
(
&
ep
->
regs
->
ep_avail
);
avail
=
readl
(
&
ep
->
regs
->
ep_avail
)
&
((
1
<<
12
)
-
1
);
if
(
avail
>
ep
->
fifo_size
)
return
-
EOVERFLOW
;
if
(
ep
->
is_in
)
avail
=
ep
->
fifo_size
-
avail
;
return
avail
;
...
...
@@ -1260,7 +1278,7 @@ static int net2280_wakeup (struct usb_gadget *_gadget)
if
(
!
_gadget
)
return
0
;
dev
=
container_of
(
_gadget
,
struct
net2280
,
gadget
);
writel
(
1
<<
GENERATE_RESUME
,
dev
->
usb
->
usbstat
);
writel
(
1
<<
GENERATE_RESUME
,
&
dev
->
usb
->
usbstat
);
/* pci writes may still be posted */
return
0
;
...
...
@@ -1649,7 +1667,7 @@ static void usb_reset (struct net2280 *dev)
writel
(
tmp
,
&
dev
->
regs
->
devinit
);
/* standard fifo and endpoint allocations */
set_fifo_mode
(
dev
,
0
);
set_fifo_mode
(
dev
,
(
fifo_mode
<=
2
)
?
fifo_mode
:
0
);
}
static
void
usb_reinit
(
struct
net2280
*
dev
)
...
...
@@ -2119,6 +2137,10 @@ static void handle_stat0_irqs (struct net2280 *dev, u32 stat)
,
&
ep
->
regs
->
ep_stat
);
u
.
raw
[
0
]
=
readl
(
&
dev
->
usb
->
setup0123
);
u
.
raw
[
1
]
=
readl
(
&
dev
->
usb
->
setup4567
);
cpu_to_le32s
(
&
u
.
raw
[
0
]);
cpu_to_le32s
(
&
u
.
raw
[
1
]);
le16_to_cpus
(
&
u
.
r
.
wValue
);
le16_to_cpus
(
&
u
.
r
.
wIndex
);
le16_to_cpus
(
&
u
.
r
.
wLength
);
...
...
drivers/usb/host/ehci-hcd.c
View file @
64673994
...
...
@@ -887,7 +887,6 @@ ehci_endpoint_disable (struct usb_hcd *hcd, struct hcd_dev *dev, int ep)
/* ASSERT: any requests/urbs are being unlinked */
/* ASSERT: nobody can be submitting urbs for this any more */
ehci_dbg
(
ehci
,
"ep %02x disable
\n
"
,
ep
);
epnum
=
ep
&
USB_ENDPOINT_NUMBER_MASK
;
if
(
epnum
!=
0
&&
(
ep
&
USB_DIR_IN
))
epnum
|=
0x10
;
...
...
drivers/usb/host/ohci-hcd.c
View file @
64673994
...
...
@@ -323,7 +323,6 @@ ohci_endpoint_disable (struct usb_hcd *hcd, struct hcd_dev *dev, int ep)
/* ASSERT: any requests/urbs are being unlinked */
/* ASSERT: nobody can be submitting urbs for this any more */
ohci_dbg
(
ohci
,
"ep %02x disable
\n
"
,
ep
);
epnum
<<=
1
;
if
(
epnum
!=
0
&&
!
(
ep
&
USB_DIR_IN
))
epnum
|=
1
;
...
...
drivers/usb/host/ohci-sa1111.c
View file @
64673994
...
...
@@ -209,7 +209,8 @@ int usb_hcd_sa1111_probe (const struct hc_driver *driver,
err2:
hcd_buffer_destroy
(
hcd
);
if
(
hcd
)
driver
->
hcd_free
(
hcd
);
if
(
hcd
)
driver
->
hcd_free
(
hcd
);
err1:
sa1111_stop_hc
(
dev
);
release_mem_region
(
dev
->
res
.
start
,
dev
->
res
.
end
-
dev
->
res
.
start
+
1
);
...
...
@@ -237,7 +238,8 @@ void usb_hcd_sa1111_remove (struct usb_hcd *hcd, struct sa1111_dev *dev)
info
(
"remove: %s, state %x"
,
hcd
->
self
.
bus_name
,
hcd
->
state
);
if
(
in_interrupt
())
BUG
();
if
(
in_interrupt
())
BUG
();
hub
=
hcd
->
self
.
root_hub
;
hcd
->
state
=
USB_STATE_QUIESCING
;
...
...
drivers/usb/input/hid-core.c
View file @
64673994
...
...
@@ -61,7 +61,8 @@ static struct hid_report *hid_register_report(struct hid_device *device, unsigne
return
NULL
;
memset
(
report
,
0
,
sizeof
(
struct
hid_report
));
if
(
id
!=
0
)
report_enum
->
numbered
=
1
;
if
(
id
!=
0
)
report_enum
->
numbered
=
1
;
report
->
id
=
id
;
report
->
type
=
type
;
...
...
@@ -539,11 +540,13 @@ static void hid_free_device(struct hid_device *device)
for
(
j
=
0
;
j
<
256
;
j
++
)
{
struct
hid_report
*
report
=
report_enum
->
report_id_hash
[
j
];
if
(
report
)
hid_free_report
(
report
);
if
(
report
)
hid_free_report
(
report
);
}
}
if
(
device
->
rdesc
)
kfree
(
device
->
rdesc
);
if
(
device
->
rdesc
)
kfree
(
device
->
rdesc
);
kfree
(
device
);
}
...
...
@@ -741,7 +744,8 @@ static __inline__ __s32 snto32(__u32 value, unsigned n)
static
__inline__
__u32
s32ton
(
__s32
value
,
unsigned
n
)
{
__s32
a
=
value
>>
(
n
-
1
);
if
(
a
&&
a
!=
-
1
)
return
value
<
0
?
1
<<
(
n
-
1
)
:
(
1
<<
(
n
-
1
))
-
1
;
if
(
a
&&
a
!=
-
1
)
return
value
<
0
?
1
<<
(
n
-
1
)
:
(
1
<<
(
n
-
1
))
-
1
;
return
value
&
((
1
<<
n
)
-
1
);
}
...
...
@@ -769,7 +773,10 @@ static __inline__ void implement(__u8 *report, unsigned offset, unsigned n, __u3
static
__inline__
int
search
(
__s32
*
array
,
__s32
value
,
unsigned
n
)
{
while
(
n
--
)
if
(
*
array
++
==
value
)
return
0
;
while
(
n
--
)
{
if
(
*
array
++
==
value
)
return
0
;
}
return
-
1
;
}
...
...
@@ -814,9 +821,11 @@ static void hid_input_field(struct hid_device *hid, struct hid_field *field, __u
if
(
HID_MAIN_ITEM_VARIABLE
&
field
->
flags
)
{
if
(
field
->
flags
&
HID_MAIN_ITEM_RELATIVE
)
{
if
(
!
value
[
n
])
continue
;
if
(
!
value
[
n
])
continue
;
}
else
{
if
(
value
[
n
]
==
field
->
value
[
n
])
continue
;
if
(
value
[
n
]
==
field
->
value
[
n
])
continue
;
}
hid_process_event
(
hid
,
field
,
&
field
->
usage
[
n
],
value
[
n
],
regs
);
continue
;
...
...
@@ -1324,6 +1333,11 @@ void hid_init_reports(struct hid_device *hid)
#define USB_VENDOR_ID_TOPMAX 0x0663
#define USB_DEVICE_ID_TOPMAX_COBRAPAD 0x0103
#define USB_VENDOR_ID_HAPP 0x078b
#define USB_DEVICE_ID_UGCI_DRIVING 0x0010
#define USB_DEVICE_ID_UGCI_FLYING 0x0020
#define USB_DEVICE_ID_UGCI_FIGHTING 0x0030
#define USB_VENDOR_ID_MGE 0x0463
#define USB_DEVICE_ID_MGE_UPS 0xffff
#define USB_DEVICE_ID_MGE_UPS1 0x0001
...
...
@@ -1357,11 +1371,11 @@ struct hid_blacklist {
{
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_PL
+
3
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_PL
+
4
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_PL
+
5
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_INTUOS2
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_INTUOS2
+
1
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_INTUOS2
+
2
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_INTUOS2
+
3
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_INTUOS2
+
4
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_INTUOS2
+
5
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_KBGEAR
,
USB_DEVICE_ID_KBGEAR_JAMSTUDIO
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_AIPTEK
,
USB_DEVICE_ID_AIPTEK_6000
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_GRIFFIN
,
USB_DEVICE_ID_POWERMATE
,
HID_QUIRK_IGNORE
},
...
...
@@ -1373,6 +1387,9 @@ struct hid_blacklist {
{
USB_VENDOR_ID_MGE
,
USB_DEVICE_ID_MGE_UPS
,
HID_QUIRK_HIDDEV
},
{
USB_VENDOR_ID_MGE
,
USB_DEVICE_ID_MGE_UPS1
,
HID_QUIRK_HIDDEV
},
{
USB_VENDOR_ID_TOPMAX
,
USB_DEVICE_ID_TOPMAX_COBRAPAD
,
HID_QUIRK_BADPAD
},
{
USB_VENDOR_ID_HAPP
,
USB_DEVICE_ID_UGCI_DRIVING
,
HID_QUIRK_BADPAD
},
{
USB_VENDOR_ID_HAPP
,
USB_DEVICE_ID_UGCI_FLYING
,
HID_QUIRK_BADPAD
},
{
USB_VENDOR_ID_HAPP
,
USB_DEVICE_ID_UGCI_FIGHTING
,
HID_QUIRK_BADPAD
},
{
USB_VENDOR_ID_ONTRAK
,
USB_DEVICE_ID_ONTRAK_ADU100
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_ONTRAK
,
USB_DEVICE_ID_ONTRAK_ADU100
+
100
,
HID_QUIRK_IGNORE
},
{
USB_VENDOR_ID_ONTRAK
,
USB_DEVICE_ID_ONTRAK_ADU100
+
200
,
HID_QUIRK_IGNORE
},
...
...
@@ -1558,9 +1575,12 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
fail:
if
(
hid
->
urbin
)
usb_free_urb
(
hid
->
urbin
);
if
(
hid
->
urbout
)
usb_free_urb
(
hid
->
urbout
);
if
(
hid
->
urbctrl
)
usb_free_urb
(
hid
->
urbctrl
);
if
(
hid
->
urbin
)
usb_free_urb
(
hid
->
urbin
);
if
(
hid
->
urbout
)
usb_free_urb
(
hid
->
urbout
);
if
(
hid
->
urbctrl
)
usb_free_urb
(
hid
->
urbctrl
);
hid_free_buffers
(
dev
,
hid
);
hid_free_device
(
hid
);
...
...
drivers/usb/input/hid-input.c
View file @
64673994
...
...
@@ -351,7 +351,8 @@ static void hidinput_configure_usage(struct hid_device *device, struct hid_field
usage
->
code
=
find_next_zero_bit
(
bit
,
max
+
1
,
usage
->
code
);
}
if
(
usage
->
code
>
max
)
return
;
if
(
usage
->
code
>
max
)
return
;
if
(
usage
->
type
==
EV_ABS
)
{
int
a
=
field
->
logical_minimum
;
...
...
drivers/usb/input/hid-lgff.c
View file @
64673994
...
...
@@ -154,7 +154,8 @@ int hid_lgff_init(struct hid_device* hid)
}
private
=
kmalloc
(
sizeof
(
struct
lgff_device
),
GFP_KERNEL
);
if
(
!
private
)
return
-
1
;
if
(
!
private
)
return
-
1
;
memset
(
private
,
0
,
sizeof
(
struct
lgff_device
));
hid
->
ff_private
=
private
;
...
...
@@ -216,7 +217,8 @@ static struct hid_report* hid_lgff_duplicate_report(struct hid_report* report)
struct
hid_report
*
ret
;
ret
=
kmalloc
(
sizeof
(
struct
lgff_device
),
GFP_KERNEL
);
if
(
!
ret
)
return
NULL
;
if
(
!
ret
)
return
NULL
;
*
ret
=
*
report
;
ret
->
field
[
0
]
=
kmalloc
(
sizeof
(
struct
hid_field
),
GFP_KERNEL
);
...
...
drivers/usb/input/hid-tmff.c
View file @
64673994
...
...
@@ -112,7 +112,8 @@ int hid_tmff_init(struct hid_device *hid)
struct
list_head
*
pos
;
private
=
kmalloc
(
sizeof
(
struct
tmff_device
),
GFP_KERNEL
);
if
(
!
private
)
return
-
ENOMEM
;
if
(
!
private
)
return
-
ENOMEM
;
memset
(
private
,
0
,
sizeof
(
struct
tmff_device
));
hid
->
ff_private
=
private
;
...
...
drivers/usb/input/hiddev.c
View file @
64673994
...
...
@@ -96,16 +96,19 @@ hiddev_lookup_report(struct hid_device *hid, struct hiddev_report_info *rinfo)
case
HID_REPORT_ID_FIRST
:
list
=
report_enum
->
report_list
.
next
;
if
(
list
==
&
report_enum
->
report_list
)
return
NULL
;
if
(
list
==
&
report_enum
->
report_list
)
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
];
if
(
list
==
NULL
)
return
NULL
;
if
(
list
==
NULL
)
return
NULL
;
list
=
list
->
next
;
if
(
list
==
&
report_enum
->
report_list
)
return
NULL
;
if
(
list
==
&
report_enum
->
report_list
)
return
NULL
;
rinfo
->
report_id
=
((
struct
hid_report
*
)
list
)
->
id
;
break
;
...
...
@@ -311,7 +314,8 @@ static ssize_t hiddev_read(struct file * file, char * buffer, size_t count, loff
event_size
=
((
list
->
flags
&
HIDDEV_FLAG_UREF
)
!=
0
)
?
sizeof
(
struct
hiddev_usage_ref
)
:
sizeof
(
struct
hiddev_event
);
if
(
count
<
event_size
)
return
0
;
if
(
count
<
event_size
)
return
0
;
while
(
retval
==
0
)
{
if
(
list
->
head
==
list
->
tail
)
{
...
...
@@ -404,7 +408,8 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
struct
hid_field
*
field
;
int
i
;
if
(
!
hiddev
->
exist
)
return
-
EIO
;
if
(
!
hiddev
->
exist
)
return
-
EIO
;
switch
(
cmd
)
{
...
...
@@ -646,18 +651,22 @@ static int hiddev_ioctl(struct inode *inode, struct file *file, unsigned int cmd
if
(
_IOC_NR
(
cmd
)
==
_IOC_NR
(
HIDIOCGNAME
(
0
)))
{
int
len
;
if
(
!
hid
->
name
)
return
0
;
if
(
!
hid
->
name
)
return
0
;
len
=
strlen
(
hid
->
name
)
+
1
;
if
(
len
>
_IOC_SIZE
(
cmd
))
len
=
_IOC_SIZE
(
cmd
);
if
(
len
>
_IOC_SIZE
(
cmd
))
len
=
_IOC_SIZE
(
cmd
);
return
copy_to_user
((
char
*
)
arg
,
hid
->
name
,
len
)
?
-
EFAULT
:
len
;
}
if
(
_IOC_NR
(
cmd
)
==
_IOC_NR
(
HIDIOCGPHYS
(
0
)))
{
int
len
;
if
(
!
hid
->
phys
)
return
0
;
if
(
!
hid
->
phys
)
return
0
;
len
=
strlen
(
hid
->
phys
)
+
1
;
if
(
len
>
_IOC_SIZE
(
cmd
))
len
=
_IOC_SIZE
(
cmd
);
if
(
len
>
_IOC_SIZE
(
cmd
))
len
=
_IOC_SIZE
(
cmd
);
return
copy_to_user
((
char
*
)
arg
,
hid
->
phys
,
len
)
?
-
EFAULT
:
len
;
}
...
...
drivers/usb/input/pid.c
View file @
64673994
...
...
@@ -117,7 +117,8 @@ static int hid_pid_erase(struct input_dev *dev, int id)
unsigned
wanted_report
=
HID_UP_PID
|
FF_PID_USAGE_BLOCK_FREE
;
/* PID Block Free Report */
int
ret
;
if
(
!
CHECK_OWNERSHIP
(
id
,
pid
))
return
-
EACCES
;
if
(
!
CHECK_OWNERSHIP
(
id
,
pid
))
return
-
EACCES
;
/* Find report */
ret
=
hid_find_report_by_usage
(
hid
,
wanted_report
,
&
report
,
HID_OUTPUT_REPORT
);
...
...
@@ -214,7 +215,8 @@ static int hid_pid_upload_effect(struct input_dev *dev,
}
else
{
/* We want to update an effect */
if
(
!
CHECK_OWNERSHIP
(
effect
->
id
,
pid_private
))
return
-
EACCES
;
if
(
!
CHECK_OWNERSHIP
(
effect
->
id
,
pid_private
))
return
-
EACCES
;
/* Parameter type cannot be updated */
if
(
effect
->
type
!=
pid_private
->
effects
[
effect
->
id
].
effect
.
type
)
...
...
drivers/usb/input/usbkbd.c
View file @
64673994
...
...
@@ -137,7 +137,8 @@ int usb_kbd_event(struct input_dev *dev, unsigned int type, unsigned int code, i
{
struct
usb_kbd
*
kbd
=
dev
->
private
;
if
(
type
!=
EV_LED
)
return
-
1
;
if
(
type
!=
EV_LED
)
return
-
1
;
kbd
->
newleds
=
(
!!
test_bit
(
LED_KANA
,
dev
->
led
)
<<
3
)
|
(
!!
test_bit
(
LED_COMPOSE
,
dev
->
led
)
<<
3
)
|
...
...
drivers/usb/media/ov511.c
View file @
64673994
...
...
@@ -876,15 +876,18 @@ ov518_i2c_write_internal(struct usb_ov511 *ov,
/* Select camera register */
rc
=
reg_w
(
ov
,
R51x_I2C_SADDR_3
,
reg
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
/* Write "value" to I2C data port of OV511 */
rc
=
reg_w
(
ov
,
R51x_I2C_DATA
,
value
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
/* Initiate 3-byte write cycle */
rc
=
reg_w
(
ov
,
R518_I2C_CTL
,
0x01
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
return
0
;
}
...
...
@@ -903,33 +906,43 @@ ov511_i2c_write_internal(struct usb_ov511 *ov,
for
(
retries
=
OV511_I2C_RETRIES
;
;
)
{
/* Select camera register */
rc
=
reg_w
(
ov
,
R51x_I2C_SADDR_3
,
reg
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
break
;
/* Write "value" to I2C data port of OV511 */
rc
=
reg_w
(
ov
,
R51x_I2C_DATA
,
value
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
break
;
/* Initiate 3-byte write cycle */
rc
=
reg_w
(
ov
,
R511_I2C_CTL
,
0x01
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
break
;
do
rc
=
reg_r
(
ov
,
R511_I2C_CTL
);
while
(
rc
>
0
&&
((
rc
&
1
)
==
0
));
/* Retry until idle */
if
(
rc
<
0
)
return
rc
;
/* Retry until idle */
do
rc
=
reg_r
(
ov
,
R511_I2C_CTL
);
while
(
rc
>
0
&&
((
rc
&
1
)
==
0
));
if
(
rc
<
0
)
break
;
if
((
rc
&
2
)
==
0
)
/* Ack? */
/* Ack? */
if
((
rc
&
2
)
==
0
)
{
rc
=
0
;
break
;
}
#if 0
/* I2C abort */
reg_w(ov, R511_I2C_CTL, 0x10);
#endif
if
(
--
retries
<
0
)
{
err
(
"i2c write retries exhausted"
);
return
-
1
;
rc
=
-
1
;
break
;
}
}
return
0
;
return
rc
;
}
/* NOTE: Do not call this function directly!
...
...
@@ -944,15 +957,18 @@ ov518_i2c_read_internal(struct usb_ov511 *ov, unsigned char reg)
/* Select camera register */
rc
=
reg_w
(
ov
,
R51x_I2C_SADDR_2
,
reg
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
/* Initiate 2-byte write cycle */
rc
=
reg_w
(
ov
,
R518_I2C_CTL
,
0x03
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
/* Initiate 2-byte read cycle */
rc
=
reg_w
(
ov
,
R518_I2C_CTL
,
0x05
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
value
=
reg_r
(
ov
,
R51x_I2C_DATA
);
...
...
@@ -972,15 +988,20 @@ ov511_i2c_read_internal(struct usb_ov511 *ov, unsigned char reg)
for
(
retries
=
OV511_I2C_RETRIES
;
;
)
{
/* Select camera register */
rc
=
reg_w
(
ov
,
R51x_I2C_SADDR_2
,
reg
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
/* Initiate 2-byte write cycle */
rc
=
reg_w
(
ov
,
R511_I2C_CTL
,
0x03
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
do
rc
=
reg_r
(
ov
,
R511_I2C_CTL
);
while
(
rc
>
0
&&
((
rc
&
1
)
==
0
));
/* Retry until idle */
if
(
rc
<
0
)
return
rc
;
/* Retry until idle */
do
rc
=
reg_r
(
ov
,
R511_I2C_CTL
);
while
(
rc
>
0
&&
((
rc
&
1
)
==
0
));
if
(
rc
<
0
)
return
rc
;
if
((
rc
&
2
)
==
0
)
/* Ack? */
break
;
...
...
@@ -998,18 +1019,23 @@ ov511_i2c_read_internal(struct usb_ov511 *ov, unsigned char reg)
for
(
retries
=
OV511_I2C_RETRIES
;
;
)
{
/* Initiate 2-byte read cycle */
rc
=
reg_w
(
ov
,
R511_I2C_CTL
,
0x05
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
do
rc
=
reg_r
(
ov
,
R511_I2C_CTL
);
while
(
rc
>
0
&&
((
rc
&
1
)
==
0
));
/* Retry until idle */
if
(
rc
<
0
)
return
rc
;
/* Retry until idle */
do
rc
=
reg_r
(
ov
,
R511_I2C_CTL
);
while
(
rc
>
0
&&
((
rc
&
1
)
==
0
));
if
(
rc
<
0
)
return
rc
;
if
((
rc
&
2
)
==
0
)
/* Ack? */
break
;
/* I2C abort */
rc
=
reg_w
(
ov
,
R511_I2C_CTL
,
0x10
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
if
(
--
retries
<
0
)
{
err
(
"i2c read retries exhausted"
);
...
...
@@ -1127,10 +1153,12 @@ i2c_set_slave_internal(struct usb_ov511 *ov, unsigned char slave)
int
rc
;
rc
=
reg_w
(
ov
,
R51x_I2C_W_SID
,
slave
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
rc
=
reg_w
(
ov
,
R51x_I2C_R_SID
,
slave
+
1
);
if
(
rc
<
0
)
return
rc
;
if
(
rc
<
0
)
return
rc
;
return
0
;
}
...
...
@@ -1149,7 +1177,8 @@ i2c_w_slave(struct usb_ov511 *ov,
/* Set new slave IDs */
rc
=
i2c_set_slave_internal
(
ov
,
slave
);
if
(
rc
<
0
)
goto
out
;
if
(
rc
<
0
)
goto
out
;
rc
=
ov51x_i2c_write_mask_internal
(
ov
,
reg
,
value
,
mask
);
...
...
@@ -1174,7 +1203,8 @@ i2c_r_slave(struct usb_ov511 *ov,
/* Set new slave IDs */
rc
=
i2c_set_slave_internal
(
ov
,
slave
);
if
(
rc
<
0
)
goto
out
;
if
(
rc
<
0
)
goto
out
;
if
(
ov
->
bclass
==
BCL_OV518
)
rc
=
ov518_i2c_read_internal
(
ov
,
reg
);
...
...
@@ -1199,12 +1229,11 @@ ov51x_set_slave_ids(struct usb_ov511 *ov, unsigned char sid)
down
(
&
ov
->
i2c_lock
);
rc
=
i2c_set_slave_internal
(
ov
,
sid
);
if
(
rc
<
0
)
goto
out
;
if
(
rc
<
0
)
goto
out
;
// FIXME: Is this actually necessary?
rc
=
ov51x_reset
(
ov
,
OV511_RESET_NOREGS
);
if
(
rc
<
0
)
goto
out
;
out:
up
(
&
ov
->
i2c_lock
);
return
rc
;
...
...
@@ -1403,7 +1432,8 @@ init_ov_sensor(struct usb_ov511 *ov)
int
i
,
success
;
/* Reset the sensor */
if
(
i2c_w
(
ov
,
0x12
,
0x80
)
<
0
)
return
-
EIO
;
if
(
i2c_w
(
ov
,
0x12
,
0x80
)
<
0
)
return
-
EIO
;
/* Wait for it to initialize */
schedule_timeout
(
1
+
150
*
HZ
/
1000
);
...
...
@@ -1416,11 +1446,13 @@ init_ov_sensor(struct usb_ov511 *ov)
}
/* Reset the sensor */
if
(
i2c_w
(
ov
,
0x12
,
0x80
)
<
0
)
return
-
EIO
;
if
(
i2c_w
(
ov
,
0x12
,
0x80
)
<
0
)
return
-
EIO
;
/* Wait for it to initialize */
schedule_timeout
(
1
+
150
*
HZ
/
1000
);
/* Dummy read to sync I2C */
if
(
i2c_r
(
ov
,
0x00
)
<
0
)
return
-
EIO
;
if
(
i2c_r
(
ov
,
0x00
)
<
0
)
return
-
EIO
;
}
if
(
!
success
)
...
...
@@ -1442,24 +1474,37 @@ ov511_set_packet_size(struct usb_ov511 *ov, int size)
mult
=
size
>>
5
;
if
(
ov
->
bridge
==
BRG_OV511
)
{
if
(
size
==
0
)
alt
=
OV511_ALT_SIZE_0
;
else
if
(
size
==
257
)
alt
=
OV511_ALT_SIZE_257
;
else
if
(
size
==
513
)
alt
=
OV511_ALT_SIZE_513
;
else
if
(
size
==
769
)
alt
=
OV511_ALT_SIZE_769
;
else
if
(
size
==
993
)
alt
=
OV511_ALT_SIZE_993
;
if
(
size
==
0
)
alt
=
OV511_ALT_SIZE_0
;
else
if
(
size
==
257
)
alt
=
OV511_ALT_SIZE_257
;
else
if
(
size
==
513
)
alt
=
OV511_ALT_SIZE_513
;
else
if
(
size
==
769
)
alt
=
OV511_ALT_SIZE_769
;
else
if
(
size
==
993
)
alt
=
OV511_ALT_SIZE_993
;
else
{
err
(
"Set packet size: invalid size (%d)"
,
size
);
return
-
EINVAL
;
}
}
else
if
(
ov
->
bridge
==
BRG_OV511PLUS
)
{
if
(
size
==
0
)
alt
=
OV511PLUS_ALT_SIZE_0
;
else
if
(
size
==
33
)
alt
=
OV511PLUS_ALT_SIZE_33
;
else
if
(
size
==
129
)
alt
=
OV511PLUS_ALT_SIZE_129
;
else
if
(
size
==
257
)
alt
=
OV511PLUS_ALT_SIZE_257
;
else
if
(
size
==
385
)
alt
=
OV511PLUS_ALT_SIZE_385
;
else
if
(
size
==
513
)
alt
=
OV511PLUS_ALT_SIZE_513
;
else
if
(
size
==
769
)
alt
=
OV511PLUS_ALT_SIZE_769
;
else
if
(
size
==
961
)
alt
=
OV511PLUS_ALT_SIZE_961
;
if
(
size
==
0
)
alt
=
OV511PLUS_ALT_SIZE_0
;
else
if
(
size
==
33
)
alt
=
OV511PLUS_ALT_SIZE_33
;
else
if
(
size
==
129
)
alt
=
OV511PLUS_ALT_SIZE_129
;
else
if
(
size
==
257
)
alt
=
OV511PLUS_ALT_SIZE_257
;
else
if
(
size
==
385
)
alt
=
OV511PLUS_ALT_SIZE_385
;
else
if
(
size
==
513
)
alt
=
OV511PLUS_ALT_SIZE_513
;
else
if
(
size
==
769
)
alt
=
OV511PLUS_ALT_SIZE_769
;
else
if
(
size
==
961
)
alt
=
OV511PLUS_ALT_SIZE_961
;
else
{
err
(
"Set packet size: invalid size (%d)"
,
size
);
return
-
EINVAL
;
...
...
@@ -1502,14 +1547,22 @@ ov518_set_packet_size(struct usb_ov511 *ov, int size)
return
-
EIO
;
if
(
ov
->
bclass
==
BCL_OV518
)
{
if
(
size
==
0
)
alt
=
OV518_ALT_SIZE_0
;
else
if
(
size
==
128
)
alt
=
OV518_ALT_SIZE_128
;
else
if
(
size
==
256
)
alt
=
OV518_ALT_SIZE_256
;
else
if
(
size
==
384
)
alt
=
OV518_ALT_SIZE_384
;
else
if
(
size
==
512
)
alt
=
OV518_ALT_SIZE_512
;
else
if
(
size
==
640
)
alt
=
OV518_ALT_SIZE_640
;
else
if
(
size
==
768
)
alt
=
OV518_ALT_SIZE_768
;
else
if
(
size
==
896
)
alt
=
OV518_ALT_SIZE_896
;
if
(
size
==
0
)
alt
=
OV518_ALT_SIZE_0
;
else
if
(
size
==
128
)
alt
=
OV518_ALT_SIZE_128
;
else
if
(
size
==
256
)
alt
=
OV518_ALT_SIZE_256
;
else
if
(
size
==
384
)
alt
=
OV518_ALT_SIZE_384
;
else
if
(
size
==
512
)
alt
=
OV518_ALT_SIZE_512
;
else
if
(
size
==
640
)
alt
=
OV518_ALT_SIZE_640
;
else
if
(
size
==
768
)
alt
=
OV518_ALT_SIZE_768
;
else
if
(
size
==
896
)
alt
=
OV518_ALT_SIZE_896
;
else
{
err
(
"Set packet size: invalid size (%d)"
,
size
);
return
-
EINVAL
;
...
...
@@ -3939,28 +3992,40 @@ ov51x_init_isoc(struct usb_ov511 *ov)
ov
->
curframe
=
-
1
;
if
(
ov
->
bridge
==
BRG_OV511
)
{
if
(
cams
==
1
)
size
=
993
;
else
if
(
cams
==
2
)
size
=
513
;
else
if
(
cams
==
3
||
cams
==
4
)
size
=
257
;
if
(
cams
==
1
)
size
=
993
;
else
if
(
cams
==
2
)
size
=
513
;
else
if
(
cams
==
3
||
cams
==
4
)
size
=
257
;
else
{
err
(
"
\"
cams
\"
parameter too high!"
);
return
-
1
;
}
}
else
if
(
ov
->
bridge
==
BRG_OV511PLUS
)
{
if
(
cams
==
1
)
size
=
961
;
else
if
(
cams
==
2
)
size
=
513
;
else
if
(
cams
==
3
||
cams
==
4
)
size
=
257
;
else
if
(
cams
>=
5
&&
cams
<=
8
)
size
=
129
;
else
if
(
cams
>=
9
&&
cams
<=
31
)
size
=
33
;
if
(
cams
==
1
)
size
=
961
;
else
if
(
cams
==
2
)
size
=
513
;
else
if
(
cams
==
3
||
cams
==
4
)
size
=
257
;
else
if
(
cams
>=
5
&&
cams
<=
8
)
size
=
129
;
else
if
(
cams
>=
9
&&
cams
<=
31
)
size
=
33
;
else
{
err
(
"
\"
cams
\"
parameter too high!"
);
return
-
1
;
}
}
else
if
(
ov
->
bclass
==
BCL_OV518
)
{
if
(
cams
==
1
)
size
=
896
;
else
if
(
cams
==
2
)
size
=
512
;
else
if
(
cams
==
3
||
cams
==
4
)
size
=
256
;
else
if
(
cams
>=
5
&&
cams
<=
8
)
size
=
128
;
if
(
cams
==
1
)
size
=
896
;
else
if
(
cams
==
2
)
size
=
512
;
else
if
(
cams
==
3
||
cams
==
4
)
size
=
256
;
else
if
(
cams
>=
5
&&
cams
<=
8
)
size
=
128
;
else
{
err
(
"
\"
cams
\"
parameter too high!"
);
return
-
1
;
...
...
@@ -5016,7 +5081,7 @@ ov51x_control_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
struct
proc_dir_entry
*
pde
=
PDE
(
inode
);
struct
usb_ov511
*
ov
;
void
*
arg
=
(
void
*
)
ularg
;
int
rc
;
int
rc
=
0
;
if
(
!
pde
)
return
-
ENOENT
;
...
...
@@ -5037,81 +5102,79 @@ ov51x_control_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
PDEBUG
(
4
,
"Get interface version: %d"
,
ver
);
if
(
copy_to_user
(
arg
,
&
ver
,
sizeof
(
ver
)))
return
-
EFAULT
;
return
0
;
rc
=
-
EFAULT
;
break
;
}
case
OV511IOC_GUSHORT
:
{
struct
ov511_ushort_opt
opt
;
if
(
copy_from_user
(
&
opt
,
arg
,
sizeof
(
opt
)))
return
-
EFAULT
;
if
(
copy_from_user
(
&
opt
,
arg
,
sizeof
(
opt
)))
{
rc
=
-
EFAULT
;
break
;
}
switch
(
opt
.
optnum
)
{
case
OV511_USOPT_BRIGHT
:
rc
=
sensor_get_brightness
(
ov
,
&
(
opt
.
val
));
if
(
rc
)
return
rc
;
break
;
case
OV511_USOPT_SAT
:
rc
=
sensor_get_saturation
(
ov
,
&
(
opt
.
val
));
if
(
rc
)
return
rc
;
break
;
case
OV511_USOPT_HUE
:
rc
=
sensor_get_hue
(
ov
,
&
(
opt
.
val
));
if
(
rc
)
return
rc
;
break
;
case
OV511_USOPT_CONTRAST
:
rc
=
sensor_get_contrast
(
ov
,
&
(
opt
.
val
));
if
(
rc
)
return
rc
;
break
;
default:
err
(
"Invalid get short option number"
);
r
eturn
-
EINVAL
;
r
c
=
-
EINVAL
;
}
if
(
rc
<
0
)
break
;
if
(
copy_to_user
(
arg
,
&
opt
,
sizeof
(
opt
)))
return
-
EFAULT
;
return
0
;
rc
=
-
EFAULT
;
break
;
}
case
OV511IOC_SUSHORT
:
{
struct
ov511_ushort_opt
opt
;
if
(
copy_from_user
(
&
opt
,
arg
,
sizeof
(
opt
)))
return
-
EFAULT
;
if
(
copy_from_user
(
&
opt
,
arg
,
sizeof
(
opt
)))
{
rc
=
-
EFAULT
;
break
;
}
switch
(
opt
.
optnum
)
{
case
OV511_USOPT_BRIGHT
:
rc
=
sensor_set_brightness
(
ov
,
opt
.
val
);
if
(
rc
)
return
rc
;
break
;
case
OV511_USOPT_SAT
:
rc
=
sensor_set_saturation
(
ov
,
opt
.
val
);
if
(
rc
)
return
rc
;
break
;
case
OV511_USOPT_HUE
:
rc
=
sensor_set_hue
(
ov
,
opt
.
val
);
if
(
rc
)
return
rc
;
break
;
case
OV511_USOPT_CONTRAST
:
rc
=
sensor_set_contrast
(
ov
,
opt
.
val
);
if
(
rc
)
return
rc
;
break
;
default:
err
(
"Invalid set short option number"
);
r
eturn
-
EINVAL
;
r
c
=
-
EINVAL
;
}
return
0
;
break
;
}
case
OV511IOC_GUINT
:
{
struct
ov511_uint_opt
opt
;
if
(
copy_from_user
(
&
opt
,
arg
,
sizeof
(
opt
)))
return
-
EFAULT
;
if
(
copy_from_user
(
&
opt
,
arg
,
sizeof
(
opt
)))
{
rc
=
-
EFAULT
;
break
;
}
switch
(
opt
.
optnum
)
{
case
OV511_UIOPT_POWER_FREQ
:
...
...
@@ -5131,29 +5194,31 @@ ov51x_control_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
break
;
default:
err
(
"Invalid get int option number"
);
r
eturn
-
EINVAL
;
r
c
=
-
EINVAL
;
}
if
(
rc
<
0
)
break
;
if
(
copy_to_user
(
arg
,
&
opt
,
sizeof
(
opt
)))
r
eturn
-
EFAULT
;
r
c
=
-
EFAULT
;
return
0
;
break
;
}
case
OV511IOC_SUINT
:
{
struct
ov511_uint_opt
opt
;
if
(
copy_from_user
(
&
opt
,
arg
,
sizeof
(
opt
)))
return
-
EFAULT
;
if
(
copy_from_user
(
&
opt
,
arg
,
sizeof
(
opt
)))
{
rc
=
-
EFAULT
;
break
;
}
switch
(
opt
.
optnum
)
{
case
OV511_UIOPT_POWER_FREQ
:
rc
=
sensor_set_light_freq
(
ov
,
opt
.
val
);
if
(
rc
)
return
rc
;
break
;
case
OV511_UIOPT_BFILTER
:
rc
=
sensor_set_banding_filter
(
ov
,
opt
.
val
);
if
(
rc
)
return
rc
;
break
;
case
OV511_UIOPT_LED
:
if
(
opt
.
val
<=
2
)
{
...
...
@@ -5162,15 +5227,14 @@ ov51x_control_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
ov51x_led_control
(
ov
,
0
);
else
if
(
ov
->
led_policy
==
LED_ON
)
ov51x_led_control
(
ov
,
1
);
}
else
{
return
-
EINVAL
;
}
}
else
rc
=
-
EINVAL
;
break
;
case
OV511_UIOPT_DEBUG
:
if
(
opt
.
val
<=
5
)
debug
=
opt
.
val
;
else
r
eturn
-
EINVAL
;
r
c
=
-
EINVAL
;
break
;
case
OV511_UIOPT_COMPRESS
:
ov
->
compress
=
opt
.
val
;
...
...
@@ -5183,43 +5247,48 @@ ov51x_control_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
break
;
default:
err
(
"Invalid get int option number"
);
r
eturn
-
EINVAL
;
r
c
=
-
EINVAL
;
}
return
0
;
break
;
}
case
OV511IOC_WI2C
:
{
struct
ov511_i2c_struct
w
;
if
(
copy_from_user
(
&
w
,
arg
,
sizeof
(
w
)))
return
-
EFAULT
;
if
(
copy_from_user
(
&
w
,
arg
,
sizeof
(
w
)))
{
rc
=
-
EFAULT
;
break
;
}
return
i2c_w_slave
(
ov
,
w
.
slave
,
w
.
reg
,
w
.
value
,
w
.
mask
);
rc
=
i2c_w_slave
(
ov
,
w
.
slave
,
w
.
reg
,
w
.
value
,
w
.
mask
);
break
;
}
case
OV511IOC_RI2C
:
{
struct
ov511_i2c_struct
r
;
if
(
copy_from_user
(
&
r
,
arg
,
sizeof
(
r
)))
return
-
EFAULT
;
if
(
copy_from_user
(
&
r
,
arg
,
sizeof
(
r
)))
{
rc
=
-
EFAULT
;
break
;
}
rc
=
i2c_r_slave
(
ov
,
r
.
slave
,
r
.
reg
);
if
(
rc
<
0
)
return
rc
;
break
;
r
.
value
=
rc
;
if
(
copy_to_user
(
arg
,
&
r
,
sizeof
(
r
)))
r
eturn
-
EFAULT
;
r
c
=
-
EFAULT
;
return
0
;
break
;
}
default:
r
eturn
-
EINVAL
;
r
c
=
-
EINVAL
;
}
/* end switch */
return
0
;
return
rc
;
}
#endif
...
...
@@ -5358,7 +5427,8 @@ ov7xx0_configure(struct usb_ov511 *ov)
PDEBUG
(
1
,
"OV7xx0 sensor initalized (method 1)"
);
}
else
{
/* Reset the 76xx */
if
(
i2c_w
(
ov
,
0x12
,
0x80
)
<
0
)
return
-
1
;
if
(
i2c_w
(
ov
,
0x12
,
0x80
)
<
0
)
return
-
1
;
/* Wait for it to initialize */
schedule_timeout
(
1
+
150
*
HZ
/
1000
);
...
...
@@ -5822,7 +5892,8 @@ ov511_configure(struct usb_ov511 *ov)
if
(
ov
->
customid
==
70
)
/* USB Life TV (PAL/SECAM) */
ov
->
pal
=
1
;
if
(
write_regvals
(
ov
,
aRegvalsInit511
))
goto
error
;
if
(
write_regvals
(
ov
,
aRegvalsInit511
))
goto
error
;
if
(
ov
->
led_policy
==
LED_OFF
||
ov
->
led_policy
==
LED_AUTO
)
ov51x_led_control
(
ov
,
0
);
...
...
@@ -5830,14 +5901,17 @@ ov511_configure(struct usb_ov511 *ov)
/* The OV511+ has undocumented bits in the flow control register.
* Setting it to 0xff fixes the corruption with moving objects. */
if
(
ov
->
bridge
==
BRG_OV511
)
{
if
(
write_regvals
(
ov
,
aRegvalsNorm511
))
goto
error
;
if
(
write_regvals
(
ov
,
aRegvalsNorm511
))
goto
error
;
}
else
if
(
ov
->
bridge
==
BRG_OV511PLUS
)
{
if
(
write_regvals
(
ov
,
aRegvalsNorm511Plus
))
goto
error
;
if
(
write_regvals
(
ov
,
aRegvalsNorm511Plus
))
goto
error
;
}
else
{
err
(
"Invalid bridge"
);
}
if
(
ov511_init_compression
(
ov
))
goto
error
;
if
(
ov511_init_compression
(
ov
))
goto
error
;
ov
->
packet_numbering
=
1
;
ov511_set_packet_size
(
ov
,
0
);
...
...
@@ -5975,10 +6049,12 @@ ov518_configure(struct usb_ov511 *ov)
/* Give it the default description */
ov
->
desc
=
symbolic
(
camlist
,
0
);
if
(
write_regvals
(
ov
,
aRegvalsInit518
))
goto
error
;
if
(
write_regvals
(
ov
,
aRegvalsInit518
))
goto
error
;
/* Set LED GPIO pin to output mode */
if
(
reg_w_mask
(
ov
,
0x57
,
0x00
,
0x02
)
<
0
)
goto
error
;
if
(
reg_w_mask
(
ov
,
0x57
,
0x00
,
0x02
)
<
0
)
goto
error
;
/* LED is off by default with OV518; have to explicitly turn it on */
if
(
ov
->
led_policy
==
LED_OFF
||
ov
->
led_policy
==
LED_AUTO
)
...
...
@@ -5994,16 +6070,20 @@ ov518_configure(struct usb_ov511 *ov)
}
if
(
ov
->
bridge
==
BRG_OV518
)
{
if
(
write_regvals
(
ov
,
aRegvalsNorm518
))
goto
error
;
if
(
write_regvals
(
ov
,
aRegvalsNorm518
))
goto
error
;
}
else
if
(
ov
->
bridge
==
BRG_OV518PLUS
)
{
if
(
write_regvals
(
ov
,
aRegvalsNorm518Plus
))
goto
error
;
if
(
write_regvals
(
ov
,
aRegvalsNorm518Plus
))
goto
error
;
}
else
{
err
(
"Invalid bridge"
);
}
if
(
reg_w
(
ov
,
0x2f
,
0x80
)
<
0
)
goto
error
;
if
(
reg_w
(
ov
,
0x2f
,
0x80
)
<
0
)
goto
error
;
if
(
ov518_init_compression
(
ov
))
goto
error
;
if
(
ov518_init_compression
(
ov
))
goto
error
;
if
(
ov
->
bridge
==
BRG_OV518
)
{
...
...
drivers/usb/media/se401.c
View file @
64673994
...
...
@@ -170,7 +170,8 @@ static int se401_read_proc(char *page, char **start, off_t off, int count,
len
-=
off
;
if
(
len
<
count
)
{
*
eof
=
1
;
if
(
len
<=
0
)
return
0
;
if
(
len
<=
0
)
return
0
;
}
else
len
=
count
;
...
...
@@ -749,7 +750,8 @@ static inline void decode_JangGu_vlc (struct usb_se401 *se401, unsigned char *da
}
}
else
{
if
(
vlc_cod
==
2
)
{
if
(
!
bit
)
vlc_data
=-
(
1
<<
vlc_size
)
+
1
;
if
(
!
bit
)
vlc_data
=
-
(
1
<<
vlc_size
)
+
1
;
vlc_cod
--
;
}
vlc_size
--
;
...
...
@@ -1046,15 +1048,12 @@ static int se401_open(struct inode *inode, struct file *file)
if
(
se401
->
user
)
return
-
EBUSY
;
se401
->
user
=
1
;
se401
->
fbuf
=
rvmalloc
(
se401
->
maxframesize
*
SE401_NUMFRAMES
);
if
(
!
se401
->
fbuf
)
err
=-
ENOMEM
;
if
(
0
!=
err
)
{
se401
->
user
=
0
;
}
else
{
se401
->
fbuf
=
rvmalloc
(
se401
->
maxframesize
*
SE401_NUMFRAMES
);
if
(
se401
->
fbuf
)
file
->
private_data
=
dev
;
}
else
err
=
-
ENOMEM
;
se401
->
user
=
!
err
;
return
err
;
}
...
...
drivers/usb/media/vicam.c
View file @
64673994
...
...
@@ -1139,7 +1139,8 @@ vicam_create_proc_entry(struct vicam_camera *cam)
cam
->
proc_dir
=
create_proc_entry
(
name
,
S_IFDIR
,
vicam_proc_root
);
if
(
!
cam
->
proc_dir
)
return
;
// We should probably return an error here
if
(
!
cam
->
proc_dir
)
return
;
// FIXME: We should probably return an error here
ent
=
create_proc_entry
(
"shutter"
,
S_IFREG
|
S_IRUGO
,
cam
->
proc_dir
);
...
...
drivers/usb/misc/auerswald.c
View file @
64673994
...
...
@@ -572,7 +572,8 @@ static int auerchain_setup (pauerchain_t acp, unsigned int numElements)
/* fill the list of free elements */
for
(;
numElements
;
numElements
--
)
{
acep
=
(
pauerchainelement_t
)
kmalloc
(
sizeof
(
auerchainelement_t
),
GFP_KERNEL
);
if
(
!
acep
)
goto
ac_fail
;
if
(
!
acep
)
goto
ac_fail
;
memset
(
acep
,
0
,
sizeof
(
auerchainelement_t
));
INIT_LIST_HEAD
(
&
acep
->
list
);
list_add_tail
(
&
acep
->
list
,
&
acp
->
free_list
);
...
...
@@ -780,16 +781,20 @@ static int auerbuf_setup (pauerbufctl_t bcp, unsigned int numElements, unsigned
/* fill the list of free elements */
for
(;
numElements
;
numElements
--
)
{
bep
=
(
pauerbuf_t
)
kmalloc
(
sizeof
(
auerbuf_t
),
GFP_KERNEL
);
if
(
!
bep
)
goto
bl_fail
;
if
(
!
bep
)
goto
bl_fail
;
memset
(
bep
,
0
,
sizeof
(
auerbuf_t
));
bep
->
list
=
bcp
;
INIT_LIST_HEAD
(
&
bep
->
buff_list
);
bep
->
bufp
=
(
char
*
)
kmalloc
(
bufsize
,
GFP_KERNEL
);
if
(
!
bep
->
bufp
)
goto
bl_fail
;
if
(
!
bep
->
bufp
)
goto
bl_fail
;
bep
->
dr
=
(
struct
usb_ctrlrequest
*
)
kmalloc
(
sizeof
(
struct
usb_ctrlrequest
),
GFP_KERNEL
);
if
(
!
bep
->
dr
)
goto
bl_fail
;
if
(
!
bep
->
dr
)
goto
bl_fail
;
bep
->
urbp
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
bep
->
urbp
)
goto
bl_fail
;
if
(
!
bep
->
urbp
)
goto
bl_fail
;
list_add_tail
(
&
bep
->
buff_list
,
&
bcp
->
free_buff_list
);
}
return
0
;
...
...
@@ -1242,7 +1247,8 @@ static void auerchar_ctrlread_dispatch (pauerscon_t scp, pauerbuf_t bp)
static
void
auerswald_delete
(
pauerswald_t
cp
)
{
dbg
(
"auerswald_delete"
);
if
(
cp
==
NULL
)
return
;
if
(
cp
==
NULL
)
return
;
/* Wake up all processes waiting for a buffer */
wake_up
(
&
cp
->
bufferwait
);
...
...
@@ -1261,7 +1267,8 @@ static void auerswald_delete( pauerswald_t cp)
static
void
auerchar_delete
(
pauerchar_t
ccp
)
{
dbg
(
"auerchar_delete"
);
if
(
ccp
==
NULL
)
return
;
if
(
ccp
==
NULL
)
return
;
/* wake up pending synchronous reads */
ccp
->
removed
=
1
;
...
...
@@ -1335,7 +1342,8 @@ static void auerswald_removeservice (pauerswald_t cp, pauerscon_t scp)
dbg
(
"auerswald_removeservice called"
);
/* check if we have a service allocated */
if
(
scp
->
id
==
AUH_UNASSIGNED
)
return
;
if
(
scp
->
id
==
AUH_UNASSIGNED
)
return
;
/* If there is a device: close the channel */
if
(
cp
->
usbdev
)
{
...
...
@@ -1494,7 +1502,8 @@ static int auerchar_ioctl (struct inode *inode, struct file *file, unsigned int
u
=
0
;
/* no data */
if
(
ccp
->
readbuf
)
{
int
restlen
=
ccp
->
readbuf
->
len
-
ccp
->
readoffset
;
if
(
restlen
>
0
)
u
=
1
;
if
(
restlen
>
0
)
u
=
1
;
}
if
(
!
u
)
{
if
(
!
list_empty
(
&
ccp
->
bufctl
.
rec_buff_list
))
{
...
...
@@ -1787,7 +1796,8 @@ static ssize_t auerchar_write (struct file *file, const char *buf, size_t len, l
}
/* protect against too big write requests */
if
(
len
>
cp
->
maxControlLength
)
len
=
cp
->
maxControlLength
;
if
(
len
>
cp
->
maxControlLength
)
len
=
cp
->
maxControlLength
;
/* Fill the buffer */
if
(
copy_from_user
(
bp
->
bufp
+
AUH_SIZE
,
buf
,
len
))
{
...
...
@@ -2096,7 +2106,8 @@ static void auerswald_disconnect (struct usb_interface *intf)
/* Inform all waiting readers */
for
(
u
=
0
;
u
<
AUH_TYPESIZE
;
u
++
)
{
pauerscon_t
scp
=
cp
->
services
[
u
];
if
(
scp
)
scp
->
disconnect
(
scp
);
if
(
scp
)
scp
->
disconnect
(
scp
);
}
}
}
...
...
drivers/usb/misc/uss720.c
View file @
64673994
...
...
@@ -146,7 +146,7 @@ static int change_mode(struct parport *pp, int m)
if
(
m
<=
ECR_PS2
&&
!
(
priv
->
reg
[
1
]
&
0x20
))
{
/* This mode resets the FIFO, so we may
* have to wait for it to drain first. */
long
expire
=
jiffies
+
pp
->
physport
->
cad
->
timeout
;
unsigned
long
expire
=
jiffies
+
pp
->
physport
->
cad
->
timeout
;
switch
(
mode
)
{
case
ECR_PPF
:
/* Parallel Port FIFO mode */
case
ECR_ECP
:
/* ECP Parallel Port mode */
...
...
drivers/usb/net/catc.c
View file @
64673994
...
...
@@ -828,10 +828,14 @@ static int catc_probe(struct usb_interface *intf, const struct usb_device_id *id
if
((
!
catc
->
ctrl_urb
)
||
(
!
catc
->
tx_urb
)
||
(
!
catc
->
rx_urb
)
||
(
!
catc
->
irq_urb
))
{
err
(
"No free urbs available."
);
if
(
catc
->
ctrl_urb
)
usb_free_urb
(
catc
->
ctrl_urb
);
if
(
catc
->
tx_urb
)
usb_free_urb
(
catc
->
tx_urb
);
if
(
catc
->
rx_urb
)
usb_free_urb
(
catc
->
rx_urb
);
if
(
catc
->
irq_urb
)
usb_free_urb
(
catc
->
irq_urb
);
if
(
catc
->
ctrl_urb
)
usb_free_urb
(
catc
->
ctrl_urb
);
if
(
catc
->
tx_urb
)
usb_free_urb
(
catc
->
tx_urb
);
if
(
catc
->
rx_urb
)
usb_free_urb
(
catc
->
rx_urb
);
if
(
catc
->
irq_urb
)
usb_free_urb
(
catc
->
irq_urb
);
kfree
(
netdev
);
kfree
(
catc
);
return
-
ENOMEM
;
...
...
drivers/usb/net/kaweth.c
View file @
64673994
...
...
@@ -811,7 +811,8 @@ static void kaweth_async_set_rx_mode(struct kaweth_device *kaweth)
{
__u16
packet_filter_bitmap
=
kaweth
->
packet_filter_bitmap
;
kaweth
->
packet_filter_bitmap
=
0
;
if
(
packet_filter_bitmap
==
0
)
return
;
if
(
packet_filter_bitmap
==
0
)
return
;
{
int
result
;
...
...
drivers/usb/serial/belkin_sa.c
View file @
64673994
...
...
@@ -285,10 +285,13 @@ static void belkin_sa_read_int_callback (struct urb *urb, struct pt_regs *regs)
goto
exit
;
}
if
(
port_paranoia_check
(
port
,
__FUNCTION__
))
return
;
if
(
port_paranoia_check
(
port
,
__FUNCTION__
))
return
;
serial
=
port
->
serial
;
if
(
serial_paranoia_check
(
serial
,
__FUNCTION__
))
return
;
if
(
serial_paranoia_check
(
serial
,
__FUNCTION__
))
return
;
usb_serial_debug_data
(
__FILE__
,
__FUNCTION__
,
urb
->
actual_length
,
data
);
...
...
drivers/usb/serial/console.c
View file @
64673994
...
...
@@ -76,9 +76,12 @@ static int __init usb_console_setup(struct console *co, char *options)
s
=
options
;
while
(
*
s
>=
'0'
&&
*
s
<=
'9'
)
s
++
;
if
(
*
s
)
parity
=
*
s
++
;
if
(
*
s
)
bits
=
*
s
++
-
'0'
;
if
(
*
s
)
doflow
=
(
*
s
++
==
'r'
);
if
(
*
s
)
parity
=
*
s
++
;
if
(
*
s
)
bits
=
*
s
++
-
'0'
;
if
(
*
s
)
doflow
=
(
*
s
++
==
'r'
);
}
/* build a cflag setting */
...
...
drivers/usb/serial/cyberjack.c
View file @
64673994
...
...
@@ -284,7 +284,8 @@ static void cyberjack_read_int_callback( struct urb *urb, struct pt_regs *regs )
struct
usb_serial
*
serial
;
unsigned
char
*
data
=
urb
->
transfer_buffer
;
if
(
port_paranoia_check
(
port
,
__FUNCTION__
))
return
;
if
(
port_paranoia_check
(
port
,
__FUNCTION__
))
return
;
dbg
(
"%s - port %d"
,
__FUNCTION__
,
port
->
number
);
...
...
@@ -293,7 +294,8 @@ static void cyberjack_read_int_callback( struct urb *urb, struct pt_regs *regs )
return
;
serial
=
port
->
serial
;
if
(
serial_paranoia_check
(
serial
,
__FUNCTION__
))
return
;
if
(
serial_paranoia_check
(
serial
,
__FUNCTION__
))
return
;
usb_serial_debug_data
(
__FILE__
,
__FUNCTION__
,
urb
->
actual_length
,
data
);
...
...
@@ -372,7 +374,8 @@ static void cyberjack_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
/* Reduce urbs to do by one. */
priv
->
rdtodo
-=
urb
->
actual_length
;
/* Just to be sure */
if
(
priv
->
rdtodo
<
0
)
priv
->
rdtodo
=
0
;
if
(
priv
->
rdtodo
<
0
)
priv
->
rdtodo
=
0
;
dbg
(
"%s - rdtodo: %d"
,
__FUNCTION__
,
priv
->
rdtodo
);
...
...
drivers/usb/serial/io_ti.c
View file @
64673994
...
...
@@ -1553,7 +1553,8 @@ static __u8 MapLineStatus (__u8 ti_lsr)
__u8
lsr
=
0
;
#define MAP_FLAG(flagUmp, flagUart) \
if (ti_lsr & flagUmp) lsr |= flagUart;
if (ti_lsr & flagUmp) \
lsr |= flagUart;
MAP_FLAG
(
UMP_UART_LSR_OV_MASK
,
LSR_OVER_ERR
)
/* overrun */
MAP_FLAG
(
UMP_UART_LSR_PE_MASK
,
LSR_PAR_ERR
)
/* parity error */
...
...
drivers/usb/serial/ir-usb.c
View file @
64673994
...
...
@@ -461,7 +461,8 @@ static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
* contains a busy indicator and baud rate change.
* See section 5.4.1.2 of the USB IrDA spec.
*/
if
((
*
data
&
0x0f
)
>
0
)
ir_baud
=
*
data
&
0x0f
;
if
((
*
data
&
0x0f
)
>
0
)
ir_baud
=
*
data
&
0x0f
;
usb_serial_debug_data
(
__FILE__
,
...
...
drivers/usb/serial/pl2303.c
View file @
64673994
...
...
@@ -579,7 +579,7 @@ static void pl2303_break_ctl (struct usb_serial_port *port, int break_state)
state
=
BREAK_ON
;
dbg
(
"%s - turning break %s"
,
state
==
BREAK_OFF
?
"off"
:
"on"
,
__FUNCTION__
);
result
=
usb_control_msg
(
serial
->
dev
,
usb_
rcv
ctrlpipe
(
serial
->
dev
,
0
),
result
=
usb_control_msg
(
serial
->
dev
,
usb_
snd
ctrlpipe
(
serial
->
dev
,
0
),
BREAK_REQUEST
,
BREAK_REQUEST_TYPE
,
state
,
0
,
NULL
,
0
,
100
);
if
(
result
)
...
...
drivers/usb/storage/unusual_devs.h
View file @
64673994
...
...
@@ -332,6 +332,15 @@ UNUSUAL_DEV( 0x0a17, 0x0004, 0x1000, 0x1000,
US_SC_8070
,
US_PR_CBI
,
NULL
,
US_FL_FIX_INQUIRY
),
/* Pentax Optio S digital camera
* submitted by Stefan M. Brandl <smb@smbnet.de>
*/
UNUSUAL_DEV
(
0x0a17
,
0x0006
,
0x0000
,
0xffff
,
"Pentax"
,
"Optio S"
,
US_SC_8070
,
US_PR_CB
,
NULL
,
US_FL_MODE_XLATE
|
US_FL_FIX_INQUIRY
),
#ifdef CONFIG_USB_STORAGE_ISD200
UNUSUAL_DEV
(
0x05ab
,
0x0031
,
0x0100
,
0x0110
,
"In-System"
,
...
...
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