Hi Hans,

On Wednesday, 11 July 2018 15:41:10 EEST Hans de Goede wrote:
> On 11-07-18 14:08, Laurent Pinchart wrote:
> > On Wednesday, 11 July 2018 14:36:48 EEST Carlos Garnacho wrote:
> >> On Wed, Jul 11, 2018 at 1:00 PM, Laurent Pinchart wrote:
> >>> On Wednesday, 11 July 2018 11:37:14 EEST Hans de Goede wrote:
> >>>> Hi Laurent,
> >>>> 
> >>>> At Guadec Carlos (in the Cc) told me that on his Acer 2-in-1 only
> >>>> the frontcam is working and it seems both are represented by a
> >>>> single UVC USB device. I've told him to check for some v4l control
> >>>> to flip between front and back.
> >>>> 
> >>>> Carlos, as I mentioned you can try gtk-v4l
> >>>> ("sudo dnf install gtk-v4l") or qv4l2
> >>>> ("sudo dnf install qv4l2") these will both show
> >>>> you various controls for the camera. One of those might do the trick.
> >>>> 
> >>>> But I recently bought a 2nd second hand Cherry Trail based HP
> >>>> X2 2-in-1 and much to my surprise that is actually using an UVC
> >>>> cam, rather then the usual ATOMISP crap and it has the same issue.
> >>>> 
> >>>> This device does not seem to have a control to flip between the
> >>>> 2 cams, instead it registers 2 /dev/video? nodes but the second
> >>>> node does not work
> >>> 
> >>> The second node is there to expose metadata to userspace, not image
> >>> data. That's a recent addition to the uvcvideo driver.
> >>> 
> >>>> and dmesg contains:
> >>>> 
> >>>> [   26.079868] uvcvideo: Found UVC 1.00 device HP TrueVision HD
> >>>> (05c8:03a3)
> >>>> [   26.095485] uvcvideo 1-4.2:1.0: Entity type for entity Extension 4
> >>>> was not initialized!
> >>>> [   26.095492] uvcvideo 1-4.2:1.0: Entity type for entity Processing 2
> >>>> was not initialized!
> >>>> [   26.095496] uvcvideo 1-4.2:1.0: Entity type for entity Camera 1 was
> >>>> not initialized!
> >>> 
> >>> You can safely ignore those messages. I need to submit a patch to get
> >>> rid of them.
> >>> 
> >>>> Laurent, I've attached lsusb -v output so that you can check the
> >>>> descriptors.
> >>> 
> >>> Thank you.
> >>> 
> >>> It's funny how UVC specifies a standard way to describe a device with
> >>> two camera sensors with dynamic selection of one of them at runtime, and
> >>> vendors instead implement vendor-specific crap :-(
> >>> 
> >>> The interesting part in the descriptors is
> >>> 
> >>>        VideoControl Interface Descriptor:
> >>>          bLength                27
> >>>          bDescriptorType        36
> >>>          bDescriptorSubtype      6 (EXTENSION_UNIT)
> >>>          bUnitID                 4
> >>>          guidExtensionCode        
> >>>          {1229a78c-47b4-4094-b0ce-db07386fb938}
> >>>          bNumControl             2
> >>>          bNrPins                 1
> >>>          baSourceID( 0)          2
> >>>          bControlSize            2
> >>>          bmControls( 0)       0x00
> >>>          bmControls( 1)       0x06
> >>>          iExtension              0
> >>> 
> >>> The extension unit exposes two controls (bmControls is a bitmask). They
> >>> can be accessed from userspace through the UVCIOC_CTRL_QUERY ioctl, or
> >>> mapped to V4L2 controls through the UVCIOC_CTRL_MAP ioctl, in which case
> >>> they will be exposed to standard V4L2 applications.
> >>> 
> >>> If you want to experiment with this, I would advise querying both
> >>> controls with UVCIOC_CTRL_QUERY. You can use the UVC_GET_CUR,
> >>> UVC_GET_MIN, UVC_GET_MAX, UVC_GET_DEF and UVC_GET_RES requests to get
> >>> the control current, minimum, maximum, default and resolution values,
> >>> and UVC_GET_LEN and UVC_GET_INFO to get the control size (in bytes) and
> >>> flags. Based on that you can start experimenting with UVC_SET_CUR to set
> >>> semi-random values.
> >>> 
> >>> I'm however worried that those two controls would be a register address
> >>> and a register value, for indirect access to all hardware registers in
> >>> the device. In that case, you would likely need information from the
> >>> device vendor, or possibly a USB traffic dump from a Windows machine
> >>> when switching between the front and back cameras.
> >>> 
> >>>> Carlos, it might be good to get Laurent your descriptors too, to do
> >>>> this do "lsusb", note what is the <vid>:<pid> for your camera and then
> >>>> run:
> >>>> 
> >>>> sudo lsusb -v -d <vid>:<pid>  > lsusb.log
> >>>> 
> >>>> And send Laurent a mail with the generated lsusb
> >>> 
> >>> That would be appreciated, but I expect the same issue :-(
> >> 
> >> Please find it attached. IIUC your last email, it might not be the
> >> exact same issue, but you can definitely judge better.
> > 
> > Your device is similar in the sense that it doesn't use the standard UVC
> > 
> > support for multiple camera sensors. It instead exposes two extension
> > units:
> >        VideoControl Interface Descriptor:
> >          bLength                27
> >          bDescriptorType        36
> >          bDescriptorSubtype      6 (EXTENSION_UNIT)
> >          bUnitID                 4
> >          guidExtensionCode         {1229a78c-47b4-4094-b0ce-db07386fb938}
> >          bNumControl             2
> >          bNrPins                 1
> >          baSourceID( 0)          2
> >          bControlSize            2
> >          bmControls( 0)       0x00
> >          bmControls( 1)       0x06
> >          iExtension              0
> >        
> >        VideoControl Interface Descriptor:
> >          bLength                29
> >          bDescriptorType        36
> >          bDescriptorSubtype      6 (EXTENSION_UNIT)
> >          bUnitID                 6
> >          guidExtensionCode         {26b8105a-0713-4870-979d-da79444bb68e}
> >          bNumControl             9
> >          bNrPins                 1
> >          baSourceID( 0)          4
> >          bControlSize            4
> >          bmControls( 0)       0x1f
> >          bmControls( 1)       0x01
> >          bmControls( 2)       0x38
> >          bmControls( 3)       0x00
> >          iExtension              6 Realtek Extended Controls Unit
> > 
> > The first one is identical to Hans', and I expect it to offer indirect
> > access to internal device registers. The second one exposes 9 controls,
> > and I expect at least some of those to have direct effects on the device.
> > What they do and how they operate is unfortunately unknown.
> 
> Laurent, thank you for your input on this. I thought it was a bit weird that
> the cam on my HP X2 only had what appears to be the debug controls, so I
> opened it up and as I suspect (after your analysis) it is using a USB
> module for the front camera, but the back camera is a sensor directly
> hooked with its CSI/MIPI bus to the PCB, so very likely it is using the
> ATOMISP stuff.
> 
> So I think that we can consider this "solved" for my 2-in-1.

Great, I'll add you to the list of potential testers for an ATOMISP solution 
:-)

> Carlos, your Acer is using a Core CPU (not an Atom) right ? And the front
> and rear cams are both centered at the same edge I guess ?  (mine had one
> in the corner and the other centered which already was a hint)

-- 
Regards,

Laurent Pinchart



Reply via email to