On Wed, 2013-08-21 at 15:11 -0500, David Barksdale wrote:
> From: David Barksdale <[email protected]>

> +static int cp2112_wait(struct cp2112_device *dev, atomic_t *avail)
> +{
> +     int ret = 0;
> +
> +     ret = wait_event_interruptible_timeout(dev->wait,
> +             atomic_read(avail), msecs_to_jiffies(50));

A symbolic constant for the timeout please.

> +     if (-ERESTARTSYS == ret)
> +             return ret;
> +     if (!ret)
> +             return -ETIMEDOUT;
> +     atomic_set(avail, 0);
> +     return 0;
> +}
> +
> +static int cp2112_xfer_status(struct cp2112_device *dev)
> +{
> +     struct hid_device *hdev = dev->hdev;
> +     uint8_t buf[2];
> +     int ret;
> +
> +     buf[0] = TRANSFER_STATUS_REQUEST;
> +     buf[1] = 0x01;
> +     atomic_set(&dev->xfer_avail, 0);

Why an atomic here? Flags would also do the job.

> +     ret = hdev->hid_output_raw_report(hdev, buf, 2, HID_OUTPUT_REPORT);
> +     if (ret < 0) {
> +             hid_warn(hdev, "Error requesting status: %d\n", ret);
> +             return ret;
> +     }
> +     ret = cp2112_wait(dev, &dev->xfer_avail);
> +     if (ret)
> +             return ret;
> +     return dev->xfer_status;
> +}
> +
> +static int cp2112_read(struct cp2112_device *dev, uint8_t *data, size_t size)
> +{
> +     struct hid_device *hdev = dev->hdev;
> +     uint8_t buf[3];

This is DMA from the stack and iolates the DMA coherency rules.

        Regards
                Oliver


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to