diff mbox series

uvc: add support for the Kaiweets KTI-W02 infrared camera

Message ID CALgV52gHPWrcBBv2m6fAAyF_i_8T7cRTtBRS+FKe4TgfRVG0DA@mail.gmail.com
State New
Headers show
Series uvc: add support for the Kaiweets KTI-W02 infrared camera | expand

Commit Message

David Given Sept. 15, 2024, 7:32 p.m. UTC
- adds support for the D3DFMT_R5G6B5 bitmap format (just RGBP but with
a different GUID)
- adds a quirk for the Kaiweets camera which uses it

The camera uses an NXP chipset (product ID 0x1fc9), but I can't find
any references to a device with vendor ID 0x009b. It may be specific
to the Kaiweets camera.

Comments

Ricardo Ribalda Sept. 16, 2024, 11:55 a.m. UTC | #1
HI David

Can you add the output of lsusb -v -d 1fc9 ?

Also, the patch should be implemented of top of
https://git.linuxtv.org/media_stage.git/log/

Could you rebase your patch and send as v2?
https://patchwork.linuxtv.org/project/linux-media/patch/CALgV52gHPWrcBBv2m6fAAyF_i_8T7cRTtBRS+FKe4TgfRVG0DA@mail.gmail.com/

Thanks!



On Sun, 15 Sept 2024 at 21:32, David Given <dg@cowlark.com> wrote:
>
> - adds support for the D3DFMT_R5G6B5 bitmap format (just RGBP but with
> a different GUID)
> - adds a quirk for the Kaiweets camera which uses it
>
> The camera uses an NXP chipset (product ID 0x1fc9), but I can't find
> any references to a device with vendor ID 0x009b. It may be specific
> to the Kaiweets camera.
>
> diff --git a/drivers/media/common/uvc.c b/drivers/media/common/uvc.c
> index c54c2268f..c12d58932 100644
> --- a/drivers/media/common/uvc.c
> +++ b/drivers/media/common/uvc.c
> @@ -96,6 +96,10 @@ static const struct uvc_format_desc uvc_fmts[] = {
>          .guid        = UVC_GUID_FORMAT_RGBP,
>          .fcc        = V4L2_PIX_FMT_RGB565,
>      },
> +    {
> +        .guid        = UVC_GUID_FORMAT_D3DFMT_R5G6B5,
> +        .fcc        = V4L2_PIX_FMT_RGB565,
> +    },
>      {
>          .guid        = UVC_GUID_FORMAT_BGR3,
>          .fcc        = V4L2_PIX_FMT_BGR24,
> diff --git a/drivers/media/usb/uvc/uvc_driver.c
> b/drivers/media/usb/uvc/uvc_driver.c
> index f0febdc08..5a29f6970 100644
> --- a/drivers/media/usb/uvc/uvc_driver.c
> +++ b/drivers/media/usb/uvc/uvc_driver.c
> @@ -3072,6 +3072,15 @@ static const struct usb_device_id uvc_ids[] = {
>        .bInterfaceSubClass    = 1,
>        .bInterfaceProtocol    = 0,
>        .driver_info        = UVC_INFO_META(V4L2_META_FMT_D4XX) },
> +    /* NXP Semiconductors IR VIDEO */
> +    { .match_flags        = USB_DEVICE_ID_MATCH_DEVICE
> +                | USB_DEVICE_ID_MATCH_INT_INFO,

The quirks are sorted by idVendor:IdProduct

> +      .idVendor        = 0x1fc9,
> +      .idProduct        = 0x009b,
> +      .bInterfaceClass    = USB_CLASS_VIDEO,
> +      .bInterfaceSubClass    = 1,
> +      .bInterfaceProtocol    = 0,
> +      .driver_info        = (kernel_ulong_t)&uvc_quirk_probe_minmax },
>      /* Generic USB Video Class */
>      { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_UNDEFINED) },
>      { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_15) },
> diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h
> index 88d96095b..01c3b2f45 100644
> --- a/include/linux/usb/uvc.h
> +++ b/include/linux/usb/uvc.h
> @@ -140,6 +140,9 @@
>  #define UVC_GUID_FORMAT_D3DFMT_L8 \
>      {0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, \
>       0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> +#define UVC_GUID_FORMAT_D3DFMT_R5G6B5 \
> +    {0x7b, 0xeb, 0x36, 0xe4, 0x4f, 0x52, 0xce, 0x11, \
> +     0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
>  #define UVC_GUID_FORMAT_KSMEDIA_L8_IR \
>      {0x32, 0x00, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, \
>       0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
>
Laurent Pinchart Sept. 16, 2024, 12:03 p.m. UTC | #2
On Mon, Sep 16, 2024 at 01:55:15PM +0200, Ricardo Ribalda wrote:
> HI David
> 
> Can you add the output of lsusb -v -d 1fc9 ?
> 
> Also, the patch should be implemented of top of
> https://git.linuxtv.org/media_stage.git/log/
> 
> Could you rebase your patch and send as v2?
> https://patchwork.linuxtv.org/project/linux-media/patch/CALgV52gHPWrcBBv2m6fAAyF_i_8T7cRTtBRS+FKe4TgfRVG0DA@mail.gmail.com/

The patch should also be split in two, one patch to add the new format
to drivers/media/common/uvc.c and include/linux/usb/uvc.c, and a second
patch to add the device quirk to drivers/media/usb/uvc/uvc_driver.c.
This follows the "one change, one patch" principle of the kernel, and
eases review as well as backporting.

Indentation looks wrong in the patch, did you format it with
git-format-patch and send it with git-send-email ?

> On Sun, 15 Sept 2024 at 21:32, David Given <dg@cowlark.com> wrote:
> >
> > - adds support for the D3DFMT_R5G6B5 bitmap format (just RGBP but with
> > a different GUID)
> > - adds a quirk for the Kaiweets camera which uses it
> >
> > The camera uses an NXP chipset (product ID 0x1fc9), but I can't find
> > any references to a device with vendor ID 0x009b. It may be specific
> > to the Kaiweets camera.
> >
> > diff --git a/drivers/media/common/uvc.c b/drivers/media/common/uvc.c
> > index c54c2268f..c12d58932 100644
> > --- a/drivers/media/common/uvc.c
> > +++ b/drivers/media/common/uvc.c
> > @@ -96,6 +96,10 @@ static const struct uvc_format_desc uvc_fmts[] = {
> >          .guid        = UVC_GUID_FORMAT_RGBP,
> >          .fcc        = V4L2_PIX_FMT_RGB565,
> >      },
> > +    {
> > +        .guid        = UVC_GUID_FORMAT_D3DFMT_R5G6B5,
> > +        .fcc        = V4L2_PIX_FMT_RGB565,
> > +    },
> >      {
> >          .guid        = UVC_GUID_FORMAT_BGR3,
> >          .fcc        = V4L2_PIX_FMT_BGR24,
> > diff --git a/drivers/media/usb/uvc/uvc_driver.c
> > b/drivers/media/usb/uvc/uvc_driver.c
> > index f0febdc08..5a29f6970 100644
> > --- a/drivers/media/usb/uvc/uvc_driver.c
> > +++ b/drivers/media/usb/uvc/uvc_driver.c
> > @@ -3072,6 +3072,15 @@ static const struct usb_device_id uvc_ids[] = {
> >        .bInterfaceSubClass    = 1,
> >        .bInterfaceProtocol    = 0,
> >        .driver_info        = UVC_INFO_META(V4L2_META_FMT_D4XX) },
> > +    /* NXP Semiconductors IR VIDEO */
> > +    { .match_flags        = USB_DEVICE_ID_MATCH_DEVICE
> > +                | USB_DEVICE_ID_MATCH_INT_INFO,
> 
> The quirks are sorted by idVendor:IdProduct
> 
> > +      .idVendor        = 0x1fc9,
> > +      .idProduct        = 0x009b,
> > +      .bInterfaceClass    = USB_CLASS_VIDEO,
> > +      .bInterfaceSubClass    = 1,
> > +      .bInterfaceProtocol    = 0,
> > +      .driver_info        = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> >      /* Generic USB Video Class */
> >      { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_UNDEFINED) },
> >      { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_15) },
> > diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h
> > index 88d96095b..01c3b2f45 100644
> > --- a/include/linux/usb/uvc.h
> > +++ b/include/linux/usb/uvc.h
> > @@ -140,6 +140,9 @@
> >  #define UVC_GUID_FORMAT_D3DFMT_L8 \
> >      {0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, \
> >       0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
> > +#define UVC_GUID_FORMAT_D3DFMT_R5G6B5 \
> > +    {0x7b, 0xeb, 0x36, 0xe4, 0x4f, 0x52, 0xce, 0x11, \
> > +     0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
> >  #define UVC_GUID_FORMAT_KSMEDIA_L8_IR \
> >      {0x32, 0x00, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, \
> >       0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
David Given Sept. 16, 2024, 7:25 p.m. UTC | #3
On Mon, 16 Sept 2024 at 14:03, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
[...]
> The patch should also be split in two, one patch to add the new format
> to drivers/media/common/uvc.c and include/linux/usb/uvc.c, and a second
> patch to add the device quirk to drivers/media/usb/uvc/uvc_driver.c.
> This follows the "one change, one patch" principle of the kernel, and
> eases review as well as backporting.

Done.

> Indentation looks wrong in the patch, did you format it with
> git-format-patch and send it with git-send-email ?

Turns out gmail expands tabs to spaces when you paste into it --- who
knew. I figured out git send-email and have used that.

https://patchwork.kernel.org/bundle/dg/kaiweets/
diff mbox series

Patch

diff --git a/drivers/media/common/uvc.c b/drivers/media/common/uvc.c
index c54c2268f..c12d58932 100644
--- a/drivers/media/common/uvc.c
+++ b/drivers/media/common/uvc.c
@@ -96,6 +96,10 @@  static const struct uvc_format_desc uvc_fmts[] = {
         .guid        = UVC_GUID_FORMAT_RGBP,
         .fcc        = V4L2_PIX_FMT_RGB565,
     },
+    {
+        .guid        = UVC_GUID_FORMAT_D3DFMT_R5G6B5,
+        .fcc        = V4L2_PIX_FMT_RGB565,
+    },
     {
         .guid        = UVC_GUID_FORMAT_BGR3,
         .fcc        = V4L2_PIX_FMT_BGR24,
diff --git a/drivers/media/usb/uvc/uvc_driver.c
b/drivers/media/usb/uvc/uvc_driver.c
index f0febdc08..5a29f6970 100644
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -3072,6 +3072,15 @@  static const struct usb_device_id uvc_ids[] = {
       .bInterfaceSubClass    = 1,
       .bInterfaceProtocol    = 0,
       .driver_info        = UVC_INFO_META(V4L2_META_FMT_D4XX) },
+    /* NXP Semiconductors IR VIDEO */
+    { .match_flags        = USB_DEVICE_ID_MATCH_DEVICE
+                | USB_DEVICE_ID_MATCH_INT_INFO,
+      .idVendor        = 0x1fc9,
+      .idProduct        = 0x009b,
+      .bInterfaceClass    = USB_CLASS_VIDEO,
+      .bInterfaceSubClass    = 1,
+      .bInterfaceProtocol    = 0,
+      .driver_info        = (kernel_ulong_t)&uvc_quirk_probe_minmax },
     /* Generic USB Video Class */
     { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_UNDEFINED) },
     { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_15) },
diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h
index 88d96095b..01c3b2f45 100644
--- a/include/linux/usb/uvc.h
+++ b/include/linux/usb/uvc.h
@@ -140,6 +140,9 @@ 
 #define UVC_GUID_FORMAT_D3DFMT_L8 \
     {0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, \
      0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
+#define UVC_GUID_FORMAT_D3DFMT_R5G6B5 \
+    {0x7b, 0xeb, 0x36, 0xe4, 0x4f, 0x52, 0xce, 0x11, \
+     0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
 #define UVC_GUID_FORMAT_KSMEDIA_L8_IR \
     {0x32, 0x00, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, \
      0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}