From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Ricardo Ribalda <ribalda@chromium.org>
Cc: Hans de Goede <hdegoede@redhat.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
Sakari Ailus <sakari.ailus@linux.intel.com>,
stable@vger.kernel.org
Subject: Re: [PATCH v5 1/2] media: uvcvideo: Support partial control reads
Date: Tue, 3 Dec 2024 17:55:25 +0200 [thread overview]
Message-ID: <20241203155525.GB26936@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20241128-uvc-readless-v5-1-cf16ed282af8@chromium.org>
On Thu, Nov 28, 2024 at 08:53:41PM +0000, Ricardo Ribalda wrote:
> Some cameras, like the ELMO MX-P3, do not return all the bytes
> requested from a control if it can fit in less bytes.
> Eg: Returning 0xab instead of 0x00ab.
> usb 3-9: Failed to query (GET_DEF) UVC control 3 on unit 2: 1 (exp. 2).
>
> Extend the returned value from the camera and return it.
>
> Cc: stable@vger.kernel.org
> Fixes: a763b9fb58be ("media: uvcvideo: Do not return positive errors in uvc_query_ctrl()")
> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> drivers/media/usb/uvc/uvc_video.c | 21 +++++++++++++++++++++
> 1 file changed, 21 insertions(+)
>
> diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
> index cd9c29532fb0..67f714bca417 100644
> --- a/drivers/media/usb/uvc/uvc_video.c
> +++ b/drivers/media/usb/uvc/uvc_video.c
> @@ -79,6 +79,27 @@ int uvc_query_ctrl(struct uvc_device *dev, u8 query, u8 unit,
> if (likely(ret == size))
> return 0;
>
> + /*
> + * Some devices return shorter USB control packets than expected if the
> + * returned value can fit in less bytes. Zero all the bytes that the
> + * device has not written.
> + *
> + * This quirk is applied to all controls, regardless of their data type.
> + * Most controls are little-endian integers, in which case the missing
> + * bytes become 0 MSBs. For other data types, a different heuristic
> + * could be implemented if a device is found needing it.
> + *
> + * We exclude UVC_GET_INFO from the quirk. UVC_GET_LEN does not need
> + * to be excluded because its size is always 1.
> + */
> + if (ret > 0 && query != UVC_GET_INFO) {
> + memset(data + ret, 0, size - ret);
> + dev_warn_once(&dev->udev->dev,
> + "UVC non compliance: %s control %u on unit %u returned %d bytes when we expected %u.\n",
> + uvc_query_name(query), cs, unit, ret, size);
> + return 0;
> + }
> +
> if (ret != -EPIPE) {
> dev_err(&dev->udev->dev,
> "Failed to query (%s) UVC control %u on unit %u: %d (exp. %u).\n",
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2024-12-03 15:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-28 20:53 [PATCH v5 0/2] media: uvcvideo: Support partial control reads and minor changes Ricardo Ribalda
2024-11-28 20:53 ` [PATCH v5 1/2] media: uvcvideo: Support partial control reads Ricardo Ribalda
2024-12-03 15:55 ` Laurent Pinchart [this message]
2024-11-28 20:53 ` [PATCH v5 2/2] media: uvcvideo: Add more logging to uvc_query_ctrl() Ricardo Ribalda
2024-12-03 15:58 ` Laurent Pinchart
2024-12-02 14:54 ` [PATCH v5 0/2] media: uvcvideo: Support partial control reads and minor changes Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241203155525.GB26936@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=hdegoede@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=ribalda@chromium.org \
--cc=sakari.ailus@linux.intel.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.