diff mbox series

media: usb: uvc: fill in description for unknown pixelformats

Message ID 4b1bc0d5-808b-816d-d7de-5baa8851e74f@xs4all.nl
State New
Headers show
Series media: usb: uvc: fill in description for unknown pixelformats | expand

Commit Message

Hans Verkuil March 29, 2023, 12:28 p.m. UTC
If the fcc is 0 (indicating an unknown GUID format), then fill in the
description field in ENUM_FMT. Otherwise the V4L2 core will WARN.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Fixes: 50459f103edf ("media: uvcvideo: Remove format descriptions")
---

Comments

Hans Verkuil March 29, 2023, 5:20 p.m. UTC | #1
On 29/03/2023 18:05, Ricardo Ribalda wrote:
> Hi Hans
> 
> Thanks for the patch.
> 
> I believe the user can fetch this info from lsusb, so this is kind of
> duplicated info, and this is why it was removed.

You got to set some description, so using the GUID this seems best.

> Is there an app that uses this unknown format code ? Or the only
> complaint is that WARN() is too loud for the user?

Normally drivers do not pass on unknown formats, but if a driver does,
then I want a WARN. If a driver does this legitimately (and I understand
that's the case for UVC), then the driver should fill in the description
to avoid this WARN.

> 
> Regards!
> 
> On Wed, 29 Mar 2023 at 14:39, Hans Verkuil <hverkuil@xs4all.nl> wrote:
>>
>> If the fcc is 0 (indicating an unknown GUID format), then fill in the
>> description field in ENUM_FMT. Otherwise the V4L2 core will WARN.
>>
>> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
>> Fixes: 50459f103edf ("media: uvcvideo: Remove format descriptions")
>> ---
>> diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
>> index 7aefa76a42b3..2f1ced1212cd 100644
>> --- a/drivers/media/usb/uvc/uvc_driver.c
>> +++ b/drivers/media/usb/uvc/uvc_driver.c
>> @@ -256,6 +256,9 @@ static int uvc_parse_format(struct uvc_device *dev,
>>                 } else {
>>                         dev_info(&streaming->intf->dev,
>>                                  "Unknown video format %pUl\n", &buffer[5]);
>> +                       snprintf(format->name, sizeof(format->name), "%pUl\n",
>> +                                &buffer[5]);
> Don't we need at least 38 chars for this?

Yes. But all we have is 31 chars, so we take what we can :-)

This is what uvc did before this was removed.

Regards,

	Hans

> 
> https://docs.kernel.org/core-api/printk-formats.html#uuid-guid-addresses
> 
> 
>> +
>>                         format->fcc = 0;
>>                 }
>>
>> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
>> index 35453f81c1d9..fc6f9e7d8506 100644
>> --- a/drivers/media/usb/uvc/uvc_v4l2.c
>> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
>> @@ -713,6 +713,10 @@ static int uvc_ioctl_enum_fmt(struct uvc_streaming *stream,
>>         if (format->flags & UVC_FMT_FLAG_COMPRESSED)
>>                 fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
>>         fmt->pixelformat = format->fcc;
>> +       if (format->name[0])
>> +               strscpy(fmt->description, format->name,
>> +                       sizeof(fmt->description));
>> +
>>         return 0;
>>  }
>>
>> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
>> index 9a596c8d894a..22656755a801 100644
>> --- a/drivers/media/usb/uvc/uvcvideo.h
>> +++ b/drivers/media/usb/uvc/uvcvideo.h
>> @@ -264,6 +264,8 @@ struct uvc_format {
>>         u32 fcc;
>>         u32 flags;
>>
>> +       char name[32];
>> +
>>         unsigned int nframes;
>>         struct uvc_frame *frame;
>>  };
>>
> 
> 
> --
> Ricardo Ribalda
Hans de Goede March 29, 2023, 6:36 p.m. UTC | #2
Hi,

On 3/29/23 14:28, Hans Verkuil wrote:
> If the fcc is 0 (indicating an unknown GUID format), then fill in the
> description field in ENUM_FMT. Otherwise the V4L2 core will WARN.
> 
> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
> Fixes: 50459f103edf ("media: uvcvideo: Remove format descriptions")

Thanks, patch looks good to me:

FWIW:

Reviewed-by: Hans de Goede <hdegoede@redhat.com>

Regards,

Hans

> ---
> diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> index 7aefa76a42b3..2f1ced1212cd 100644
> --- a/drivers/media/usb/uvc/uvc_driver.c
> +++ b/drivers/media/usb/uvc/uvc_driver.c
> @@ -256,6 +256,9 @@ static int uvc_parse_format(struct uvc_device *dev,
>  		} else {
>  			dev_info(&streaming->intf->dev,
>  				 "Unknown video format %pUl\n", &buffer[5]);
> +			snprintf(format->name, sizeof(format->name), "%pUl\n",
> +				 &buffer[5]);
> +
>  			format->fcc = 0;
>  		}
> 
> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
> index 35453f81c1d9..fc6f9e7d8506 100644
> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> @@ -713,6 +713,10 @@ static int uvc_ioctl_enum_fmt(struct uvc_streaming *stream,
>  	if (format->flags & UVC_FMT_FLAG_COMPRESSED)
>  		fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
>  	fmt->pixelformat = format->fcc;
> +	if (format->name[0])
> +		strscpy(fmt->description, format->name,
> +			sizeof(fmt->description));
> +
>  	return 0;
>  }
> 
> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> index 9a596c8d894a..22656755a801 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -264,6 +264,8 @@ struct uvc_format {
>  	u32 fcc;
>  	u32 flags;
> 
> +	char name[32];
> +
>  	unsigned int nframes;
>  	struct uvc_frame *frame;
>  };
>
Laurent Pinchart April 19, 2023, 6:23 a.m. UTC | #3
Hi Hans,

On Wed, Apr 05, 2023 at 09:40:20AM +0300, Laurent Pinchart wrote:
> On Wed, Mar 29, 2023 at 07:20:59PM +0200, Hans Verkuil wrote:
> > On 29/03/2023 18:05, Ricardo Ribalda wrote:
> > > Hi Hans
> > > 
> > > Thanks for the patch.
> > > 
> > > I believe the user can fetch this info from lsusb, so this is kind of
> > > duplicated info, and this is why it was removed.
> > 
> > You got to set some description, so using the GUID this seems best.
> > 
> > > Is there an app that uses this unknown format code ? Or the only
> > > complaint is that WARN() is too loud for the user?
> > 
> > Normally drivers do not pass on unknown formats, but if a driver does,
> > then I want a WARN. If a driver does this legitimately (and I understand
> > that's the case for UVC), then the driver should fill in the description
> > to avoid this WARN.
> 
> In hindsight we shouldn't have added a text description to formats :-)
> 
> > > On Wed, 29 Mar 2023 at 14:39, Hans Verkuil wrote:
> > >>
> > >> If the fcc is 0 (indicating an unknown GUID format), then fill in the
> > >> description field in ENUM_FMT. Otherwise the V4L2 core will WARN.
> > >>
> > >> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
> > >> Fixes: 50459f103edf ("media: uvcvideo: Remove format descriptions")
> > >> ---
> > >> diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> > >> index 7aefa76a42b3..2f1ced1212cd 100644
> > >> --- a/drivers/media/usb/uvc/uvc_driver.c
> > >> +++ b/drivers/media/usb/uvc/uvc_driver.c
> > >> @@ -256,6 +256,9 @@ static int uvc_parse_format(struct uvc_device *dev,
> > >>                 } else {
> > >>                         dev_info(&streaming->intf->dev,
> > >>                                  "Unknown video format %pUl\n", &buffer[5]);
> > >> +                       snprintf(format->name, sizeof(format->name), "%pUl\n",
> > >> +                                &buffer[5]);
> > > Don't we need at least 38 chars for this?
> > 
> > Yes. But all we have is 31 chars, so we take what we can :-)
> > 
> > This is what uvc did before this was removed.
> > 
> > Regards,
> > 
> > 	Hans
> > 
> > > https://docs.kernel.org/core-api/printk-formats.html#uuid-guid-addresses
> > > 
> > >> +
> > >>                         format->fcc = 0;
> > >>                 }
> > >>
> > >> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
> > >> index 35453f81c1d9..fc6f9e7d8506 100644
> > >> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> > >> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> > >> @@ -713,6 +713,10 @@ static int uvc_ioctl_enum_fmt(struct uvc_streaming *stream,
> > >>         if (format->flags & UVC_FMT_FLAG_COMPRESSED)
> > >>                 fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
> > >>         fmt->pixelformat = format->fcc;
> > >> +       if (format->name[0])
> > >> +               strscpy(fmt->description, format->name,
> > >> +                       sizeof(fmt->description));
> > >> +
> > >>         return 0;
> > >>  }
> > >>
> > >> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> > >> index 9a596c8d894a..22656755a801 100644
> > >> --- a/drivers/media/usb/uvc/uvcvideo.h
> > >> +++ b/drivers/media/usb/uvc/uvcvideo.h
> > >> @@ -264,6 +264,8 @@ struct uvc_format {
> > >>         u32 fcc;
> > >>         u32 flags;
> > >>
> > >> +       char name[32];
> > >> +
> 
> I'd not really nice to have to store the name for every format, when we
> know it will very rarely be used.
> 
> One alternative option would be to store the GUID, which would halve the
> amount of memory. Another option would be to stop reporting those
> formats to userspace in uvc_ioctl_enum_fmt(). They can't be selected
> anyway, they have no unique 4CC.

Any opinion on this ? I'm increasingly tempted by not reporting
unsupported formats to userspace.

> > >>         unsigned int nframes;
> > >>         struct uvc_frame *frame;
> > >>  };
Hans Verkuil April 19, 2023, 6:48 a.m. UTC | #4
On 19/04/2023 08:23, Laurent Pinchart wrote:
> Hi Hans,
> 
> On Wed, Apr 05, 2023 at 09:40:20AM +0300, Laurent Pinchart wrote:
>> On Wed, Mar 29, 2023 at 07:20:59PM +0200, Hans Verkuil wrote:
>>> On 29/03/2023 18:05, Ricardo Ribalda wrote:
>>>> Hi Hans
>>>>
>>>> Thanks for the patch.
>>>>
>>>> I believe the user can fetch this info from lsusb, so this is kind of
>>>> duplicated info, and this is why it was removed.
>>>
>>> You got to set some description, so using the GUID this seems best.
>>>
>>>> Is there an app that uses this unknown format code ? Or the only
>>>> complaint is that WARN() is too loud for the user?
>>>
>>> Normally drivers do not pass on unknown formats, but if a driver does,
>>> then I want a WARN. If a driver does this legitimately (and I understand
>>> that's the case for UVC), then the driver should fill in the description
>>> to avoid this WARN.
>>
>> In hindsight we shouldn't have added a text description to formats :-)
>>
>>>> On Wed, 29 Mar 2023 at 14:39, Hans Verkuil wrote:
>>>>>
>>>>> If the fcc is 0 (indicating an unknown GUID format), then fill in the
>>>>> description field in ENUM_FMT. Otherwise the V4L2 core will WARN.
>>>>>
>>>>> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
>>>>> Fixes: 50459f103edf ("media: uvcvideo: Remove format descriptions")
>>>>> ---
>>>>> diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
>>>>> index 7aefa76a42b3..2f1ced1212cd 100644
>>>>> --- a/drivers/media/usb/uvc/uvc_driver.c
>>>>> +++ b/drivers/media/usb/uvc/uvc_driver.c
>>>>> @@ -256,6 +256,9 @@ static int uvc_parse_format(struct uvc_device *dev,
>>>>>                 } else {
>>>>>                         dev_info(&streaming->intf->dev,
>>>>>                                  "Unknown video format %pUl\n", &buffer[5]);
>>>>> +                       snprintf(format->name, sizeof(format->name), "%pUl\n",
>>>>> +                                &buffer[5]);
>>>> Don't we need at least 38 chars for this?
>>>
>>> Yes. But all we have is 31 chars, so we take what we can :-)
>>>
>>> This is what uvc did before this was removed.
>>>
>>> Regards,
>>>
>>> 	Hans
>>>
>>>> https://docs.kernel.org/core-api/printk-formats.html#uuid-guid-addresses
>>>>
>>>>> +
>>>>>                         format->fcc = 0;
>>>>>                 }
>>>>>
>>>>> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
>>>>> index 35453f81c1d9..fc6f9e7d8506 100644
>>>>> --- a/drivers/media/usb/uvc/uvc_v4l2.c
>>>>> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
>>>>> @@ -713,6 +713,10 @@ static int uvc_ioctl_enum_fmt(struct uvc_streaming *stream,
>>>>>         if (format->flags & UVC_FMT_FLAG_COMPRESSED)
>>>>>                 fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
>>>>>         fmt->pixelformat = format->fcc;
>>>>> +       if (format->name[0])
>>>>> +               strscpy(fmt->description, format->name,
>>>>> +                       sizeof(fmt->description));
>>>>> +
>>>>>         return 0;
>>>>>  }
>>>>>
>>>>> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
>>>>> index 9a596c8d894a..22656755a801 100644
>>>>> --- a/drivers/media/usb/uvc/uvcvideo.h
>>>>> +++ b/drivers/media/usb/uvc/uvcvideo.h
>>>>> @@ -264,6 +264,8 @@ struct uvc_format {
>>>>>         u32 fcc;
>>>>>         u32 flags;
>>>>>
>>>>> +       char name[32];
>>>>> +
>>
>> I'd not really nice to have to store the name for every format, when we
>> know it will very rarely be used.
>>
>> One alternative option would be to store the GUID, which would halve the
>> amount of memory. Another option would be to stop reporting those
>> formats to userspace in uvc_ioctl_enum_fmt(). They can't be selected
>> anyway, they have no unique 4CC.
> 
> Any opinion on this ? I'm increasingly tempted by not reporting
> unsupported formats to userspace.

Since they cannot be selected, I think that is the best approach.
Perhaps only show them in the kernel log if debugging is enabled.

Regards,

	Hans

> 
>>>>>         unsigned int nframes;
>>>>>         struct uvc_frame *frame;
>>>>>  };
>
Linux regression tracking (Thorsten Leemhuis) May 31, 2023, 11:48 a.m. UTC | #5
On 29.03.23 14:28, Hans Verkuil wrote:
> If the fcc is 0 (indicating an unknown GUID format), then fill in the
> description field in ENUM_FMT. Otherwise the V4L2 core will WARN.

What happened to this? It seems this fall through the cracks.

BTW:

> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>

Afaics it might be good to have these in here:

Link: https://bugzilla.kernel.org/show_bug.cgi?id=217252
Link: https://bugzilla.redhat.com/show_bug.cgi?id=2180107

A comment in the former is what brought me here.

Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
--
Everything you wanna know about Linux kernel regression tracking:
https://linux-regtracking.leemhuis.info/about/#tldr
If I did something stupid, please tell me, as explained on that page.

#regzbot ^backmonitor:
https://lore.kernel.org/lkml/dc8e5276-ef88-648f-9f0d-10151ea62c90@leemhuis.info/
#regzbot poke

> Fixes: 50459f103edf ("media: uvcvideo: Remove format descriptions")
> ---
> diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> index 7aefa76a42b3..2f1ced1212cd 100644
> --- a/drivers/media/usb/uvc/uvc_driver.c
> +++ b/drivers/media/usb/uvc/uvc_driver.c
> @@ -256,6 +256,9 @@ static int uvc_parse_format(struct uvc_device *dev,
>  		} else {
>  			dev_info(&streaming->intf->dev,
>  				 "Unknown video format %pUl\n", &buffer[5]);
> +			snprintf(format->name, sizeof(format->name), "%pUl\n",
> +				 &buffer[5]);
> +
>  			format->fcc = 0;
>  		}
> 
> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
> index 35453f81c1d9..fc6f9e7d8506 100644
> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> @@ -713,6 +713,10 @@ static int uvc_ioctl_enum_fmt(struct uvc_streaming *stream,
>  	if (format->flags & UVC_FMT_FLAG_COMPRESSED)
>  		fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
>  	fmt->pixelformat = format->fcc;
> +	if (format->name[0])
> +		strscpy(fmt->description, format->name,
> +			sizeof(fmt->description));
> +
>  	return 0;
>  }
> 
> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> index 9a596c8d894a..22656755a801 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -264,6 +264,8 @@ struct uvc_format {
>  	u32 fcc;
>  	u32 flags;
> 
> +	char name[32];
> +
>  	unsigned int nframes;
>  	struct uvc_frame *frame;
>  };
>
Linux regression tracking (Thorsten Leemhuis) May 31, 2023, 12:54 p.m. UTC | #6
On 31.05.23 14:44, Laurent Pinchart wrote:
> Hi Thorsten,
> 
> On Wed, May 31, 2023 at 01:48:51PM +0200, Linux regression tracking (Thorsten Leemhuis) wrote:
>> On 29.03.23 14:28, Hans Verkuil wrote:
>>> If the fcc is 0 (indicating an unknown GUID format), then fill in the
>>> description field in ENUM_FMT. Otherwise the V4L2 core will WARN.
>>
>> What happened to this? It seems this fall through the cracks.
> 
> I've posted a better fix,

You mean an even better fix, as this one already was a better fix for a
earlier fix ;)

> see
> https://lore.kernel.org/linux-media/20230506065809.24645-1-laurent.pinchart@ideasonboard.com/.
> Of course, fate had it that it got reviewed exactly on the day when I started by holidays :-S

:-D

> I'm now back, and will send a pull request.

In that case: welcome back.

>> BTW:
>>
>>> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
>>
>> Afaics it might be good to have these in here:
>>
>> Link: https://bugzilla.kernel.org/show_bug.cgi?id=217252
>> Link: https://bugzilla.redhat.com/show_bug.cgi?id=2180107
> 
> I'll add those two links.

Great, many thx!

Ciao, Thorsten

>> A comment in the former is what brought me here.
>>
>> Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
>> --
>> Everything you wanna know about Linux kernel regression tracking:
>> https://linux-regtracking.leemhuis.info/about/#tldr
>> If I did something stupid, please tell me, as explained on that page.
>>
>> #regzbot ^backmonitor:
>> https://lore.kernel.org/lkml/dc8e5276-ef88-648f-9f0d-10151ea62c90@leemhuis.info/
>> #regzbot poke
>>
>>> Fixes: 50459f103edf ("media: uvcvideo: Remove format descriptions")
>>> ---
>>> diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
>>> index 7aefa76a42b3..2f1ced1212cd 100644
>>> --- a/drivers/media/usb/uvc/uvc_driver.c
>>> +++ b/drivers/media/usb/uvc/uvc_driver.c
>>> @@ -256,6 +256,9 @@ static int uvc_parse_format(struct uvc_device *dev,
>>>  		} else {
>>>  			dev_info(&streaming->intf->dev,
>>>  				 "Unknown video format %pUl\n", &buffer[5]);
>>> +			snprintf(format->name, sizeof(format->name), "%pUl\n",
>>> +				 &buffer[5]);
>>> +
>>>  			format->fcc = 0;
>>>  		}
>>>
>>> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
>>> index 35453f81c1d9..fc6f9e7d8506 100644
>>> --- a/drivers/media/usb/uvc/uvc_v4l2.c
>>> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
>>> @@ -713,6 +713,10 @@ static int uvc_ioctl_enum_fmt(struct uvc_streaming *stream,
>>>  	if (format->flags & UVC_FMT_FLAG_COMPRESSED)
>>>  		fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
>>>  	fmt->pixelformat = format->fcc;
>>> +	if (format->name[0])
>>> +		strscpy(fmt->description, format->name,
>>> +			sizeof(fmt->description));
>>> +
>>>  	return 0;
>>>  }
>>>
>>> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
>>> index 9a596c8d894a..22656755a801 100644
>>> --- a/drivers/media/usb/uvc/uvcvideo.h
>>> +++ b/drivers/media/usb/uvc/uvcvideo.h
>>> @@ -264,6 +264,8 @@ struct uvc_format {
>>>  	u32 fcc;
>>>  	u32 flags;
>>>
>>> +	char name[32];
>>> +
>>>  	unsigned int nframes;
>>>  	struct uvc_frame *frame;
>>>  };
>
diff mbox series

Patch

diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
index 7aefa76a42b3..2f1ced1212cd 100644
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -256,6 +256,9 @@  static int uvc_parse_format(struct uvc_device *dev,
 		} else {
 			dev_info(&streaming->intf->dev,
 				 "Unknown video format %pUl\n", &buffer[5]);
+			snprintf(format->name, sizeof(format->name), "%pUl\n",
+				 &buffer[5]);
+
 			format->fcc = 0;
 		}

diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
index 35453f81c1d9..fc6f9e7d8506 100644
--- a/drivers/media/usb/uvc/uvc_v4l2.c
+++ b/drivers/media/usb/uvc/uvc_v4l2.c
@@ -713,6 +713,10 @@  static int uvc_ioctl_enum_fmt(struct uvc_streaming *stream,
 	if (format->flags & UVC_FMT_FLAG_COMPRESSED)
 		fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
 	fmt->pixelformat = format->fcc;
+	if (format->name[0])
+		strscpy(fmt->description, format->name,
+			sizeof(fmt->description));
+
 	return 0;
 }

diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
index 9a596c8d894a..22656755a801 100644
--- a/drivers/media/usb/uvc/uvcvideo.h
+++ b/drivers/media/usb/uvc/uvcvideo.h
@@ -264,6 +264,8 @@  struct uvc_format {
 	u32 fcc;
 	u32 flags;

+	char name[32];
+
 	unsigned int nframes;
 	struct uvc_frame *frame;
 };