[PATCH v3 4/4] media: uvcvideo: fix up missing AUTO_UPDATE on the OBSBOT Tail 2
From: Michael Jordan
Date: Mon Sep 28 2026 - 11:30:35 EST
The OBSBOT Tail 2 (3564:fefc) has the same firmware defect as the
Tiny 2: GET_INFO reports 0x03 (GET and SET, no AUTOUPDATE) for
CT_PANTILT_ABSOLUTE, CT_PANTILT_RELATIVE and CT_ZOOM_ABSOLUTE, so
uvcvideo returns the last value written by the host instead of the
current one.
As on the Tiny 2, the device changes all three controls on its own
(commanded moves, subject tracking, and zoom changed at the camera),
GET_CUR reports the live values, and no control change events are sent
on the interrupt endpoint.
Add fixup entries restoring AUTO_UPDATE for the three controls, with
the same flags as the Tiny 2 entries.
Exposure, white balance and focus are left alone for the same reason
as on the Tiny 2: their GET_CUR does not track the auto mode.
lsusb -v (device descriptor and Camera Terminal):
Bus 002 Device 003: ID 3564:fefc Remo Tech Co., Ltd. OBSBOT Tail 2
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 3.20
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2 [unknown]
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 9
idVendor 0x3564 Remo Tech Co., Ltd.
idProduct 0xfefc OBSBOT Tail 2
bcdDevice 4.19
iManufacturer 1 Remo Tech Co., Ltd.
iProduct 2 OBSBOT Tail 2
iSerial 0
bNumConfigurations 1
[...]
VideoControl Interface Descriptor:
bLength 18
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1
wTerminalType 0x0201 Camera Sensor
bAssocTerminal 0
iTerminal 0
wObjectiveFocalLengthMin 0
wObjectiveFocalLengthMax 0
wOcularFocalLength 0
bControlSize 3
bmControls 0x00023e3e
Auto-Exposure Mode
Auto-Exposure Priority
Exposure Time (Absolute)
Exposure Time (Relative)
Focus (Absolute)
Zoom (Absolute)
Zoom (Relative)
PanTilt (Absolute)
PanTilt (Relative)
Roll (Absolute)
Focus, Auto
Assisted-by: Claude:claude-fable-5
Signed-off-by: Michael Jordan <jordan.mymail@xxxxxxxxx>
---
drivers/media/usb/uvc/uvc_ctrl.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 49ea6a6bcf57..202c2c95432a 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -2888,6 +2888,18 @@ static bool uvc_ctrl_fixup_flags(struct uvc_device *dev,
UVC_CT_ZOOM_ABSOLUTE_CONTROL,
UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_RANGE |
UVC_CTRL_FLAG_RESTORE | UVC_CTRL_FLAG_AUTO_UPDATE },
+ { { USB_DEVICE(0x3564, 0xfefc) }, 1,
+ UVC_CT_PANTILT_ABSOLUTE_CONTROL,
+ UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_RANGE |
+ UVC_CTRL_FLAG_RESTORE | UVC_CTRL_FLAG_AUTO_UPDATE },
+ { { USB_DEVICE(0x3564, 0xfefc) }, 1,
+ UVC_CT_PANTILT_RELATIVE_CONTROL,
+ UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_RANGE |
+ UVC_CTRL_FLAG_AUTO_UPDATE },
+ { { USB_DEVICE(0x3564, 0xfefc) }, 1,
+ UVC_CT_ZOOM_ABSOLUTE_CONTROL,
+ UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_RANGE |
+ UVC_CTRL_FLAG_RESTORE | UVC_CTRL_FLAG_AUTO_UPDATE },
};
unsigned int i;
--
2.43.0