Am Dienstag, 16. Januar 2007 18:47 schrieb Jeremy Roberson:
> +/*
> + * Called when opening the input device. This will submit the URB to
> + * the usb system so we start getting reports
> + */
> +static int gtco_input_open(struct input_dev *inputdev)
> +{
> + struct gtco *device;
> + device = inputdev->private;
> +
> + device->urbinfo->dev = device->usbdev;
> + if (usb_submit_urb(device->urbinfo, GFP_KERNEL)) {
> + return -EIO;
> + }
> + return 0;
> +}
Now you are overdoing it the other way. You need something like
static DEFINE_MUTEX(gtco_mutex);
....
static int gtco_input_open(struct input_dev *inputdev)
{
....
rv = 0;
mutex_lock(>co_mutex);
if (device->open_count++ == 0) {
rv = usb_submit_urb(device->urbinfo, GFP_KERNEL);
if (rv < 0)
device->open_count--;
}
mutex_unlock(>co_mutex);
return rv;
}
static void gtco_input_close(struct input_dev *inputdev)
{
...
mutex_lock(>co_mutex);
if (--device->open_count == 0)
usb_kill_urb(device->urbinfo);
mutex_unlock(>co_mutex);
}
> + /* Mask out the Y tilt value used for pressure */
> + device->buffer[7] = (u8)((device->buffer[7]) & 0x7F);
Is this cast needed?
How about: device->buffer[7] &= 0x7f;
> +static void gtco_disconnect(struct usb_interface *interface)
> +{
> +
> + /* Grab private device ptr */
> + struct gtco *device = usb_get_intfdata (interface);
> + struct input_dev *inputdev;
> +
> + inputdev = device->inputdevice;
> +
> + /* Now reverse all the registration stuff */
> + if (device) {
> + usb_kill_urb(device->urbinfo);
> + input_unregister_device(inputdev);
reverse the preceeding two lines. It's a race.
As long as a device is registered, it might be opened, submitting the
URB again.
Regards
Oliver
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel