You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: (94 commits) USB: remove err() macro from more usb drivers USB: remove err() macro from usb misc drivers USB: remove err() macro from usb core code USB: remove err() macro from usb class drivers USB: remove use of err() in drivers/usb/serial USB: remove info() macro from usb mtd drivers USB: remove info() macro from usb input drivers USB: remove info() macro from usb network drivers USB: remove info() macro from remaining usb drivers USB: remove info() macro from usb/misc drivers USB: remove info() macro from usb/serial drivers USB: remove warn macro from HID core USB: remove warn() macro from usb drivers USB: remove warn() macro from usb net drivers USB: remove warn() macro from usb media drivers USB: remove warn() macro from usb input drivers usb/fsl_qe_udc: clear data toggle on clear halt request usb/fsl_qe_udc: fix response to get status request fsl_usb2_udc: Fix oops on probe failure. fsl_usb2_udc: Add a wmb before priming endpoint. ...
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/interface_capabilities
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/device_capabilities
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Description:
|
||||
These files show the various USB TMC capabilities as described
|
||||
by the device itself. The full description of the bitfields
|
||||
can be found in the USB TMC documents from the USB-IF entitled
|
||||
"Universal Serial Bus Test and Measurement Class Specification
|
||||
(USBTMC) Revision 1.0" section 4.2.1.8.
|
||||
|
||||
The files are read only.
|
||||
|
||||
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/usb488_interface_capabilities
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/usb488_device_capabilities
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Description:
|
||||
These files show the various USB TMC capabilities as described
|
||||
by the device itself. The full description of the bitfields
|
||||
can be found in the USB TMC documents from the USB-IF entitled
|
||||
"Universal Serial Bus Test and Measurement Class, Subclass
|
||||
USB488 Specification (USBTMC-USB488) Revision 1.0" section
|
||||
4.2.2.
|
||||
|
||||
The files are read only.
|
||||
|
||||
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/TermChar
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Description:
|
||||
This file is the TermChar value to be sent to the USB TMC
|
||||
device as described by the document, "Universal Serial Bus Test
|
||||
and Measurement Class Specification
|
||||
(USBTMC) Revision 1.0" as published by the USB-IF.
|
||||
|
||||
Note that the TermCharEnabled file determines if this value is
|
||||
sent to the device or not.
|
||||
|
||||
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/TermCharEnabled
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Description:
|
||||
This file determines if the TermChar is to be sent to the
|
||||
device on every transaction or not. For more details about
|
||||
this, please see the document, "Universal Serial Bus Test and
|
||||
Measurement Class Specification (USBTMC) Revision 1.0" as
|
||||
published by the USB-IF.
|
||||
|
||||
|
||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/auto_abort
|
||||
Date: August 2008
|
||||
Contact: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Description:
|
||||
This file determines if the the transaction of the USB TMC
|
||||
device is to be automatically aborted if there is any error.
|
||||
For more details about this, please see the document,
|
||||
"Universal Serial Bus Test and Measurement Class Specification
|
||||
(USBTMC) Revision 1.0" as published by the USB-IF.
|
||||
@@ -85,3 +85,19 @@ Description:
|
||||
Users:
|
||||
PowerTOP <power@bughost.org>
|
||||
http://www.lesswatts.org/projects/powertop/
|
||||
|
||||
What: /sys/bus/usb/device/<busnum>-<devnum>...:<config num>-<interface num>/supports_autosuspend
|
||||
Date: January 2008
|
||||
KernelVersion: 2.6.27
|
||||
Contact: Sarah Sharp <sarah.a.sharp@intel.com>
|
||||
Description:
|
||||
When read, this file returns 1 if the interface driver
|
||||
for this interface supports autosuspend. It also
|
||||
returns 1 if no driver has claimed this interface, as an
|
||||
unclaimed interface will not stop the device from being
|
||||
autosuspended if all other interface drivers are idle.
|
||||
The file returns 0 if autosuspend support has not been
|
||||
added to the driver.
|
||||
Users:
|
||||
USB PM tool
|
||||
git://git.moblin.org/users/sarah/usb-pm-tool/
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
Where: /sys/bus/usb/.../powered
|
||||
Date: August 2008
|
||||
Kernel Version: 2.6.26
|
||||
Contact: Harrison Metzger <harrisonmetz@gmail.com>
|
||||
Description: Controls whether the device's display will powered.
|
||||
A value of 0 is off and a non-zero value is on.
|
||||
|
||||
Where: /sys/bus/usb/.../mode_msb
|
||||
Where: /sys/bus/usb/.../mode_lsb
|
||||
Date: August 2008
|
||||
Kernel Version: 2.6.26
|
||||
Contact: Harrison Metzger <harrisonmetz@gmail.com>
|
||||
Description: Controls the devices display mode.
|
||||
For a 6 character display the values are
|
||||
MSB 0x06; LSB 0x3F, and
|
||||
for an 8 character display the values are
|
||||
MSB 0x08; LSB 0xFF.
|
||||
|
||||
Where: /sys/bus/usb/.../textmode
|
||||
Date: August 2008
|
||||
Kernel Version: 2.6.26
|
||||
Contact: Harrison Metzger <harrisonmetz@gmail.com>
|
||||
Description: Controls the way the device interprets its text buffer.
|
||||
raw: each character controls its segment manually
|
||||
hex: each character is between 0-15
|
||||
ascii: each character is between '0'-'9' and 'A'-'F'.
|
||||
|
||||
Where: /sys/bus/usb/.../text
|
||||
Date: August 2008
|
||||
Kernel Version: 2.6.26
|
||||
Contact: Harrison Metzger <harrisonmetz@gmail.com>
|
||||
Description: The text (or data) for the device to display
|
||||
|
||||
Where: /sys/bus/usb/.../decimals
|
||||
Date: August 2008
|
||||
Kernel Version: 2.6.26
|
||||
Contact: Harrison Metzger <harrisonmetz@gmail.com>
|
||||
Description: Controls the decimal places on the device.
|
||||
To set the nth decimal place, give this field
|
||||
the value of 10 ** n. Assume this field has
|
||||
the value k and has 1 or more decimal places set,
|
||||
to set the mth place (where m is not already set),
|
||||
change this fields value to k + 10 ** m.
|
||||
@@ -557,6 +557,9 @@ Near-term plans include converting all of them, except for "gadgetfs".
|
||||
</para>
|
||||
|
||||
!Edrivers/usb/gadget/f_acm.c
|
||||
!Edrivers/usb/gadget/f_ecm.c
|
||||
!Edrivers/usb/gadget/f_subset.c
|
||||
!Edrivers/usb/gadget/f_obex.c
|
||||
!Edrivers/usb/gadget/f_serial.c
|
||||
|
||||
</sect1>
|
||||
|
||||
@@ -2571,6 +2571,9 @@ Your cooperation is appreciated.
|
||||
160 = /dev/usb/legousbtower0 1st USB Legotower device
|
||||
...
|
||||
175 = /dev/usb/legousbtower15 16th USB Legotower device
|
||||
176 = /dev/usb/usbtmc1 First USB TMC device
|
||||
...
|
||||
192 = /dev/usb/usbtmc16 16th USB TMC device
|
||||
240 = /dev/usb/dabusb0 First daubusb device
|
||||
...
|
||||
243 = /dev/usb/dabusb3 Fourth dabusb device
|
||||
|
||||
@@ -92,6 +92,7 @@ Code Seq# Include File Comments
|
||||
'J' 00-1F drivers/scsi/gdth_ioctl.h
|
||||
'K' all linux/kd.h
|
||||
'L' 00-1F linux/loop.h
|
||||
'L' 20-2F driver/usb/misc/vstusb.h
|
||||
'L' E0-FF linux/ppdd.h encrypted disk device driver
|
||||
<http://linux01.gwdg.de/~alatham/ppdd.html>
|
||||
'M' all linux/soundcard.h
|
||||
@@ -110,6 +111,8 @@ Code Seq# Include File Comments
|
||||
'W' 00-1F linux/wanrouter.h conflict!
|
||||
'X' all linux/xfs_fs.h
|
||||
'Y' all linux/cyclades.h
|
||||
'[' 00-07 linux/usb/usbtmc.h USB Test and Measurement Devices
|
||||
<mailto:gregkh@suse.de>
|
||||
'a' all ATM on linux
|
||||
<http://lrcwww.epfl.ch/linux-atm/magic.html>
|
||||
'b' 00-FF bit3 vme host bridge
|
||||
|
||||
@@ -2253,6 +2253,25 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
autosuspended. Devices for which the delay is set
|
||||
to a negative value won't be autosuspended at all.
|
||||
|
||||
usbcore.usbfs_snoop=
|
||||
[USB] Set to log all usbfs traffic (default 0 = off).
|
||||
|
||||
usbcore.blinkenlights=
|
||||
[USB] Set to cycle leds on hubs (default 0 = off).
|
||||
|
||||
usbcore.old_scheme_first=
|
||||
[USB] Start with the old device initialization
|
||||
scheme (default 0 = off).
|
||||
|
||||
usbcore.use_both_schemes=
|
||||
[USB] Try the other device initialization scheme
|
||||
if the first one fails (default 1 = enabled).
|
||||
|
||||
usbcore.initial_descriptor_timeout=
|
||||
[USB] Specifies timeout for the initial 64-byte
|
||||
USB_REQ_GET_DESCRIPTOR request in milliseconds
|
||||
(default 5000 = 5.0 seconds).
|
||||
|
||||
usbhid.mousepoll=
|
||||
[USBHID] The interval which mice are to be polled at.
|
||||
|
||||
|
||||
@@ -52,6 +52,11 @@ Therefore no guarantee is made that the URBs have been unlinked when
|
||||
the call returns. They may be unlinked later but will be unlinked in
|
||||
finite time.
|
||||
|
||||
usb_scuttle_anchored_urbs()
|
||||
---------------------------
|
||||
|
||||
All URBs of an anchor are unanchored en masse.
|
||||
|
||||
usb_wait_anchor_empty_timeout()
|
||||
-------------------------------
|
||||
|
||||
@@ -59,4 +64,16 @@ This function waits for all URBs associated with an anchor to finish
|
||||
or a timeout, whichever comes first. Its return value will tell you
|
||||
whether the timeout was reached.
|
||||
|
||||
usb_anchor_empty()
|
||||
------------------
|
||||
|
||||
Returns true if no URBs are associated with an anchor. Locking
|
||||
is the caller's responsibility.
|
||||
|
||||
usb_get_from_anchor()
|
||||
---------------------
|
||||
|
||||
Returns the oldest anchored URB of an anchor. The URB is unanchored
|
||||
and returned with a reference. As you may mix URBs to several
|
||||
destinations in one anchor you have no guarantee the chronologically
|
||||
first submitted URB is returned.
|
||||
@@ -0,0 +1,46 @@
|
||||
USB 7-Segment Numeric Display
|
||||
Manufactured by Delcom Engineering
|
||||
|
||||
Device Information
|
||||
------------------
|
||||
USB VENDOR_ID 0x0fc5
|
||||
USB PRODUCT_ID 0x1227
|
||||
Both the 6 character and 8 character displays have PRODUCT_ID,
|
||||
and according to Delcom Engineering no queryable information
|
||||
can be obtained from the device to tell them apart.
|
||||
|
||||
Device Modes
|
||||
------------
|
||||
By default, the driver assumes the display is only 6 characters
|
||||
The mode for 6 characters is:
|
||||
MSB 0x06; LSB 0x3f
|
||||
For the 8 character display:
|
||||
MSB 0x08; LSB 0xff
|
||||
The device can accept "text" either in raw, hex, or ascii textmode.
|
||||
raw controls each segment manually,
|
||||
hex expects a value between 0-15 per character,
|
||||
ascii expects a value between '0'-'9' and 'A'-'F'.
|
||||
The default is ascii.
|
||||
|
||||
Device Operation
|
||||
----------------
|
||||
1. Turn on the device:
|
||||
echo 1 > /sys/bus/usb/.../powered
|
||||
2. Set the device's mode:
|
||||
echo $mode_msb > /sys/bus/usb/.../mode_msb
|
||||
echo $mode_lsb > /sys/bus/usb/.../mode_lsb
|
||||
3. Set the textmode:
|
||||
echo $textmode > /sys/bus/usb/.../textmode
|
||||
4. set the text (for example):
|
||||
echo "123ABC" > /sys/bus/usb/.../text (ascii)
|
||||
echo "A1B2" > /sys/bus/usb/.../text (ascii)
|
||||
echo -ne "\x01\x02\x03" > /sys/bus/usb/.../text (hex)
|
||||
5. Set the decimal places.
|
||||
The device has either 6 or 8 decimal points.
|
||||
to set the nth decimal place calculate 10 ** n
|
||||
and echo it in to /sys/bus/usb/.../decimals
|
||||
To set multiple decimals points sum up each power.
|
||||
For example, to set the 0th and 3rd decimal place
|
||||
echo 1001 > /sys/bus/usb/.../decimals
|
||||
|
||||
|
||||
@@ -350,12 +350,12 @@ without holding the mutex.
|
||||
|
||||
There also are a couple of utility routines drivers can use:
|
||||
|
||||
usb_autopm_enable() sets pm_usage_cnt to 1 and then calls
|
||||
usb_autopm_set_interface(), which will attempt an autoresume.
|
||||
|
||||
usb_autopm_disable() sets pm_usage_cnt to 0 and then calls
|
||||
usb_autopm_enable() sets pm_usage_cnt to 0 and then calls
|
||||
usb_autopm_set_interface(), which will attempt an autosuspend.
|
||||
|
||||
usb_autopm_disable() sets pm_usage_cnt to 1 and then calls
|
||||
usb_autopm_set_interface(), which will attempt an autoresume.
|
||||
|
||||
The conventional usage pattern is that a driver calls
|
||||
usb_autopm_get_interface() in its open routine and
|
||||
usb_autopm_put_interface() in its close or release routine. But
|
||||
|
||||
@@ -349,8 +349,6 @@ struct ub_dev {
|
||||
|
||||
struct work_struct reset_work;
|
||||
wait_queue_head_t reset_wait;
|
||||
|
||||
int sg_stat[6];
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -685,7 +683,6 @@ static int ub_request_fn_1(struct ub_lun *lun, struct request *rq)
|
||||
goto drop;
|
||||
}
|
||||
urq->nsg = n_elem;
|
||||
sc->sg_stat[n_elem < 5 ? n_elem : 5]++;
|
||||
|
||||
if (blk_pc_request(rq)) {
|
||||
ub_cmd_build_packet(sc, lun, cmd, urq);
|
||||
|
||||
@@ -428,7 +428,7 @@ void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, uns
|
||||
usbhid->out[usbhid->outhead].raw_report = kmalloc(len, GFP_ATOMIC);
|
||||
if (!usbhid->out[usbhid->outhead].raw_report) {
|
||||
spin_unlock_irqrestore(&usbhid->outlock, flags);
|
||||
warn("output queueing failed");
|
||||
dev_warn(&hid->dev, "output queueing failed\n");
|
||||
return;
|
||||
}
|
||||
hid_output_report(report, usbhid->out[usbhid->outhead].raw_report);
|
||||
@@ -455,7 +455,7 @@ void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, uns
|
||||
usbhid->ctrl[usbhid->ctrlhead].raw_report = kmalloc(len, GFP_ATOMIC);
|
||||
if (!usbhid->ctrl[usbhid->ctrlhead].raw_report) {
|
||||
spin_unlock_irqrestore(&usbhid->ctrllock, flags);
|
||||
warn("control queueing failed");
|
||||
dev_warn(&hid->dev, "control queueing failed\n");
|
||||
return;
|
||||
}
|
||||
hid_output_report(report, usbhid->ctrl[usbhid->ctrlhead].raw_report);
|
||||
|
||||
@@ -197,13 +197,16 @@ static unsigned char find_button(struct iforce *iforce, signed short button)
|
||||
* Analyse the changes in an effect, and tell if we need to send an condition
|
||||
* parameter packet
|
||||
*/
|
||||
static int need_condition_modifier(struct ff_effect *old, struct ff_effect *new)
|
||||
static int need_condition_modifier(struct iforce *iforce,
|
||||
struct ff_effect *old,
|
||||
struct ff_effect *new)
|
||||
{
|
||||
int ret = 0;
|
||||
int i;
|
||||
|
||||
if (new->type != FF_SPRING && new->type != FF_FRICTION) {
|
||||
warn("bad effect type in need_condition_modifier");
|
||||
dev_warn(&iforce->dev->dev, "bad effect type in %s\n",
|
||||
__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -222,10 +225,13 @@ static int need_condition_modifier(struct ff_effect *old, struct ff_effect *new)
|
||||
* Analyse the changes in an effect, and tell if we need to send a magnitude
|
||||
* parameter packet
|
||||
*/
|
||||
static int need_magnitude_modifier(struct ff_effect *old, struct ff_effect *effect)
|
||||
static int need_magnitude_modifier(struct iforce *iforce,
|
||||
struct ff_effect *old,
|
||||
struct ff_effect *effect)
|
||||
{
|
||||
if (effect->type != FF_CONSTANT) {
|
||||
warn("bad effect type in need_envelope_modifier");
|
||||
dev_warn(&iforce->dev->dev, "bad effect type in %s\n",
|
||||
__func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -236,7 +242,8 @@ static int need_magnitude_modifier(struct ff_effect *old, struct ff_effect *effe
|
||||
* Analyse the changes in an effect, and tell if we need to send an envelope
|
||||
* parameter packet
|
||||
*/
|
||||
static int need_envelope_modifier(struct ff_effect *old, struct ff_effect *effect)
|
||||
static int need_envelope_modifier(struct iforce *iforce, struct ff_effect *old,
|
||||
struct ff_effect *effect)
|
||||
{
|
||||
switch (effect->type) {
|
||||
case FF_CONSTANT:
|
||||
@@ -256,7 +263,8 @@ static int need_envelope_modifier(struct ff_effect *old, struct ff_effect *effec
|
||||
break;
|
||||
|
||||
default:
|
||||
warn("bad effect type in need_envelope_modifier");
|
||||
dev_warn(&iforce->dev->dev, "bad effect type in %s\n",
|
||||
__func__);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -266,10 +274,12 @@ static int need_envelope_modifier(struct ff_effect *old, struct ff_effect *effec
|
||||
* Analyse the changes in an effect, and tell if we need to send a periodic
|
||||
* parameter effect
|
||||
*/
|
||||
static int need_period_modifier(struct ff_effect *old, struct ff_effect *new)
|
||||
static int need_period_modifier(struct iforce *iforce, struct ff_effect *old,
|
||||
struct ff_effect *new)
|
||||
{
|
||||
if (new->type != FF_PERIODIC) {
|
||||
warn("bad effect type in need_period_modifier");
|
||||
dev_warn(&iforce->dev->dev, "bad effect type in %s\n",
|
||||
__func__);
|
||||
return 0;
|
||||
}
|
||||
return (old->u.periodic.period != new->u.periodic.period
|
||||
@@ -355,7 +365,7 @@ int iforce_upload_periodic(struct iforce *iforce, struct ff_effect *effect, stru
|
||||
int param2_err = 1;
|
||||
int core_err = 0;
|
||||
|
||||
if (!old || need_period_modifier(old, effect)) {
|
||||
if (!old || need_period_modifier(iforce, old, effect)) {
|
||||
param1_err = make_period_modifier(iforce, mod1_chunk,
|
||||
old != NULL,
|
||||
effect->u.periodic.magnitude, effect->u.periodic.offset,
|
||||
@@ -365,7 +375,7 @@ int iforce_upload_periodic(struct iforce *iforce, struct ff_effect *effect, stru
|
||||
set_bit(FF_MOD1_IS_USED, core_effect->flags);
|
||||
}
|
||||
|
||||
if (!old || need_envelope_modifier(old, effect)) {
|
||||
if (!old || need_envelope_modifier(iforce, old, effect)) {
|
||||
param2_err = make_envelope_modifier(iforce, mod2_chunk,
|
||||
old !=NULL,
|
||||
effect->u.periodic.envelope.attack_length,
|
||||
@@ -425,7 +435,7 @@ int iforce_upload_constant(struct iforce *iforce, struct ff_effect *effect, stru
|
||||
int param2_err = 1;
|
||||
int core_err = 0;
|
||||
|
||||
if (!old || need_magnitude_modifier(old, effect)) {
|
||||
if (!old || need_magnitude_modifier(iforce, old, effect)) {
|
||||
param1_err = make_magnitude_modifier(iforce, mod1_chunk,
|
||||
old != NULL,
|
||||
effect->u.constant.level);
|
||||
@@ -434,7 +444,7 @@ int iforce_upload_constant(struct iforce *iforce, struct ff_effect *effect, stru
|
||||
set_bit(FF_MOD1_IS_USED, core_effect->flags);
|
||||
}
|
||||
|
||||
if (!old || need_envelope_modifier(old, effect)) {
|
||||
if (!old || need_envelope_modifier(iforce, old, effect)) {
|
||||
param2_err = make_envelope_modifier(iforce, mod2_chunk,
|
||||
old != NULL,
|
||||
effect->u.constant.envelope.attack_length,
|
||||
@@ -487,7 +497,7 @@ int iforce_upload_condition(struct iforce *iforce, struct ff_effect *effect, str
|
||||
default: return -1;
|
||||
}
|
||||
|
||||
if (!old || need_condition_modifier(old, effect)) {
|
||||
if (!old || need_condition_modifier(iforce, old, effect)) {
|
||||
param_err = make_condition_modifier(iforce, mod1_chunk,
|
||||
old != NULL,
|
||||
effect->u.condition[0].right_saturation,
|
||||
|
||||
@@ -218,7 +218,9 @@ static void iforce_release(struct input_dev *dev)
|
||||
/* Check: no effects should be present in memory */
|
||||
for (i = 0; i < dev->ff->max_effects; i++) {
|
||||
if (test_bit(FF_CORE_IS_USED, iforce->core_effects[i].flags)) {
|
||||
warn("iforce_release: Device still owns effects");
|
||||
dev_warn(&dev->dev,
|
||||
"%s: Device still owns effects\n",
|
||||
__func__);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -335,26 +337,26 @@ int iforce_init_device(struct iforce *iforce)
|
||||
if (!iforce_get_id_packet(iforce, "M"))
|
||||
input_dev->id.vendor = (iforce->edata[2] << 8) | iforce->edata[1];
|
||||
else
|
||||
warn("Device does not respond to id packet M");
|
||||
dev_warn(&iforce->dev->dev, "Device does not respond to id packet M\n");
|
||||
|
||||
if (!iforce_get_id_packet(iforce, "P"))
|
||||
input_dev->id.product = (iforce->edata[2] << 8) | iforce->edata[1];
|
||||
else
|
||||
warn("Device does not respond to id packet P");
|
||||
dev_warn(&iforce->dev->dev, "Device does not respond to id packet P\n");
|
||||
|
||||
if (!iforce_get_id_packet(iforce, "B"))
|
||||
iforce->device_memory.end = (iforce->edata[2] << 8) | iforce->edata[1];
|
||||
else
|
||||
warn("Device does not respond to id packet B");
|
||||
dev_warn(&iforce->dev->dev, "Device does not respond to id packet B\n");
|
||||
|
||||
if (!iforce_get_id_packet(iforce, "N"))
|
||||
ff_effects = iforce->edata[1];
|
||||
else
|
||||
warn("Device does not respond to id packet N");
|
||||
dev_warn(&iforce->dev->dev, "Device does not respond to id packet N\n");
|
||||
|
||||
/* Check if the device can store more effects than the driver can really handle */
|
||||
if (ff_effects > IFORCE_EFFECTS_MAX) {
|
||||
warn("Limiting number of effects to %d (device reports %d)",
|
||||
dev_warn(&iforce->dev->dev, "Limiting number of effects to %d (device reports %d)\n",
|
||||
IFORCE_EFFECTS_MAX, ff_effects);
|
||||
ff_effects = IFORCE_EFFECTS_MAX;
|
||||
}
|
||||
|
||||
@@ -65,7 +65,8 @@ int iforce_send_packet(struct iforce *iforce, u16 cmd, unsigned char* data)
|
||||
|
||||
|
||||
if (CIRC_SPACE(head, tail, XMIT_SIZE) < n+2) {
|
||||
warn("not enough space in xmit buffer to send new packet");
|
||||
dev_warn(&iforce->dev->dev,
|
||||
"not enough space in xmit buffer to send new packet\n");
|
||||
spin_unlock_irqrestore(&iforce->xmit_lock, flags);
|
||||
return -1;
|
||||
}
|
||||
@@ -148,7 +149,7 @@ static int mark_core_as_ready(struct iforce *iforce, unsigned short addr)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
warn("unused effect %04x updated !!!", addr);
|
||||
dev_warn(&iforce->dev->dev, "unused effect %04x updated !!!\n", addr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -159,7 +160,8 @@ void iforce_process_packet(struct iforce *iforce, u16 cmd, unsigned char *data)
|
||||
static int being_used = 0;
|
||||
|
||||
if (being_used)
|
||||
warn("re-entrant call to iforce_process %d", being_used);
|
||||
dev_warn(&iforce->dev->dev,
|
||||
"re-entrant call to iforce_process %d\n", being_used);
|
||||
being_used++;
|
||||
|
||||
#ifdef CONFIG_JOYSTICK_IFORCE_232
|
||||
|
||||
@@ -64,7 +64,7 @@ void iforce_usb_xmit(struct iforce *iforce)
|
||||
|
||||
if ( (n=usb_submit_urb(iforce->out, GFP_ATOMIC)) ) {
|
||||
clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags);
|
||||
warn("usb_submit_urb failed %d\n", n);
|
||||
dev_warn(&iforce->dev->dev, "usb_submit_urb failed %d\n", n);
|
||||
}
|
||||
|
||||
/* The IFORCE_XMIT_RUNNING bit is not cleared here. That's intended.
|
||||
|
||||
@@ -911,7 +911,7 @@ static int __init usb_xpad_init(void)
|
||||
{
|
||||
int result = usb_register(&xpad_driver);
|
||||
if (result == 0)
|
||||
info(DRIVER_DESC);
|
||||
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -285,7 +285,6 @@ static const struct {
|
||||
};
|
||||
|
||||
/* Local function prototypes */
|
||||
static void ati_remote_dump (unsigned char *data, unsigned int actual_length);
|
||||
static int ati_remote_open (struct input_dev *inputdev);
|
||||
static void ati_remote_close (struct input_dev *inputdev);
|
||||
static int ati_remote_sendpacket (struct ati_remote *ati_remote, u16 cmd, unsigned char *data);
|
||||
@@ -307,15 +306,16 @@ static struct usb_driver ati_remote_driver = {
|
||||
/*
|
||||
* ati_remote_dump_input
|
||||
*/
|
||||
static void ati_remote_dump(unsigned char *data, unsigned int len)
|
||||
static void ati_remote_dump(struct device *dev, unsigned char *data,
|
||||
unsigned int len)
|
||||
{
|
||||
if ((len == 1) && (data[0] != (unsigned char)0xff) && (data[0] != 0x00))
|
||||
warn("Weird byte 0x%02x", data[0]);
|
||||
dev_warn(dev, "Weird byte 0x%02x\n", data[0]);
|
||||
else if (len == 4)
|
||||
warn("Weird key %02x %02x %02x %02x",
|
||||
dev_warn(dev, "Weird key %02x %02x %02x %02x\n",
|
||||
data[0], data[1], data[2], data[3]);
|
||||
else
|
||||
warn("Weird data, len=%d %02x %02x %02x %02x %02x %02x ...",
|
||||
dev_warn(dev, "Weird data, len=%d %02x %02x %02x %02x %02x %02x ...\n",
|
||||
len, data[0], data[1], data[2], data[3], data[4], data[5]);
|
||||
}
|
||||
|
||||
@@ -470,7 +470,7 @@ static void ati_remote_input_report(struct urb *urb)
|
||||
/* Deal with strange looking inputs */
|
||||
if ( (urb->actual_length != 4) || (data[0] != 0x14) ||
|
||||
((data[3] & 0x0f) != 0x00) ) {
|
||||
ati_remote_dump(data, urb->actual_length);
|
||||
ati_remote_dump(&urb->dev->dev, data, urb->actual_length);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -814,7 +814,7 @@ static void ati_remote_disconnect(struct usb_interface *interface)
|
||||
ati_remote = usb_get_intfdata(interface);
|
||||
usb_set_intfdata(interface, NULL);
|
||||
if (!ati_remote) {
|
||||
warn("%s - null device?\n", __func__);
|
||||
dev_warn(&interface->dev, "%s - null device?\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -834,9 +834,11 @@ static int __init ati_remote_init(void)
|
||||
|
||||
result = usb_register(&ati_remote_driver);
|
||||
if (result)
|
||||
err("usb_register error #%d\n", result);
|
||||
printk(KERN_ERR KBUILD_MODNAME
|
||||
": usb_register error #%d\n", result);
|
||||
else
|
||||
info("Registered USB driver " DRIVER_DESC " v. " DRIVER_VERSION);
|
||||
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
|
||||
DRIVER_DESC "\n");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -999,7 +999,8 @@ static int __init yealink_dev_init(void)
|
||||
{
|
||||
int ret = usb_register(&yealink_driver);
|
||||
if (ret == 0)
|
||||
info(DRIVER_DESC ":" DRIVER_VERSION);
|
||||
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
|
||||
DRIVER_DESC "\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -280,7 +280,8 @@ static int __init usb_acecad_init(void)
|
||||
{
|
||||
int result = usb_register(&usb_acecad_driver);
|
||||
if (result == 0)
|
||||
info(DRIVER_VERSION ":" DRIVER_DESC);
|
||||
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
|
||||
DRIVER_DESC "\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user