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