Re: Firmware (devicetree/ACPI interface) for marking camera sensors being on the front/back of a device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,

On Tue, Jan 18, 2022 at 01:19:05PM +0100, Hans de Goede wrote:
> On 1/17/22 16:35, Laurent Pinchart wrote:
> > Hi Hans,
> > 
> > (CC'ing Sakari)
> > 
> > On Mon, Jan 17, 2022 at 10:26:54AM +0100, Hans de Goede wrote:
> >> On 1/16/22 23:20, Laurent Pinchart wrote:
> >>> On Sun, Jan 16, 2022 at 10:43:25PM +0100, Hans de Goede wrote:
> >>>> Hi All,
> >>>>
> >>>> IIRC there was some discussion about $subject a while ago,
> >>>> esp. being pushed by the ChromeOS folks (IIRC). If you know what
> >>>> I'm talking about, please add relevant folks to the Cc.
> >>>>
> >>>> While doing some work on atomisp support I noticed that the
> >>>> ACPI device fwnode-s describing the sensors have an ACPI _PLD
> >>>> method, which is a standardized ACPI method to retreive an
> >>>> package (ACPI for struct) describing the location of things
> >>>> like USB ports; and in this case of the camera sensors.
> >>>>
> >>>> And upon checking the Surface Go DSDT the sensors there seem to
> >>>> have the _PLD bits to. And in both cases at least the following
> >>>> PLD field (bits 67-69) seems to contain valid and relevant info,
> >>>> quoting from the ACPI spec 6.2 version, page 329:
> >>>>
> >>>> """
> >>>> Panel: Describes which panel surface of the system’s housing
> >>>> the device connection point resides on:
> >>>> 0 – Top
> >>>> 1 – Bottom
> >>>> 2 – Left
> >>>> 3 – Right
> >>>> 4 – Front
> >>>> 5 – Back
> >>>> 6 – Unknown
> >>>> """
> >>>>
> >>>> This seems to be consistently set to 4 or 5 for the _PLD method
> >>>> of the sensor ACPI nodes which I checked.
> >>>>
> >>>> So rather then defining a new devicetree property for this and
> >>>> embedding that inside the ACPI tables, IMHO it would be best if
> >>>> the ChromeOS devices would use the standardized _PLD ACPI method
> >>>> for this too.
> >>>
> >>> I have no specific objection to this, given that the _PLD is
> >>> standardized. In your experience, is the rotation also populated
> >>> correctly ? That's important information too.
> >>
> >> That is a good question, so I just checked what the IPU3 does and
> >> it uses a field in the SSDB ACPI package for this.
> >>
> >> And I'm not sure that the _PLD is the right place for this, the _PLD
> >> is about how the ACPI object appears to the user, so that
> >> the operating-system can describe e.g. external connectors in
> >> a dialog box using this info. E.g. the _PLD also contains information
> >> about the color of the connector.
> >>
> >> And an upside-down sensor, does not look upside-down to the user when
> >> looking at it from the outside of the device. So based on this reading
> >> of the spec I don't expect the rotation field to contain what we are
> >> looking for (as is shown by the IPU3 driver using a SSDB field for this).
> > 
> > Your interpretation of the _PLD makes sense, but that's also the problem
> > with ACPI: there are many interpretation that make sense (at least to
> > the OEMs), leading to lack of standardization in practice :-S I suppose
> > I'm a bit concerned that the _PLD rotation, defined in the spec, would
> > be interpreted by some OEMs as being the right place to expose this
> > information, while others would use a different mechanism. I don't care
> > much about where the information ends up being stored, but I care about
> > avoiding proliferation of different solutions as much as possible.
> 
> The DSDTs / _PLDs which I have checked seem to all set the rotation
> field to plain 0 / 0 degrees. But I have only checked atomisp2 / ipu3
> based DSDTs. There are indeed no guarantees that some vendor
> will not use the _PLD rotation, but this does seem somewhat unlikely,
> the rotation field is described as: "Rotates the Shape" note the
> captical S, so this seems to refer to the "Shape" field (Round / Oval /
> Square / Rectangle) which gives the shape of the object as observed by
> the user.

Let's hope everybody will understand the spec correctly. Fingers crossed
:-)

> > One think I do *not* want to see is all sensor drivers being poluted
> > with OEM-specific code because an OEM has decided to store data using a
> > custom representation.
> 
> Ack, ATM for the IPU3 the _PLD back/front parsing is done in the
> bridge driver. If this becomes a common pattern we may need to offer
> a helper for bridge drivers, or maybe even move it to the core.

That's fine, as long as it doesn't end up in sensor drivers.

> > One question here is if we should try to fix this at the ACPI level, to
> > avoid every vendor coming up with its own SSDB-like solution, or leave
> > it as-is. In the latter case, I wouldn't be surprised if some OEMs would
> > end up not populating the location correctly in the _PLD. 
> 
> Reading the ACPI spec a second time I'm convinced that the rotation
> really does not belong in the _PLD. So to fix this at the ACPI level
> would me doing some proposal there with some camera sensor specific
> standardized ACPI fields/methods.

Sakari, are you aware of any effort in this area ?

> >>> It we go in that direction, we should try to push OEMs to also populate
> >>> the vertical offset and horizontal offset fields, as I expect it to
> >>> become useful when multiple cameras are present in the same location.
> >>
> >> That is a good point.
> >>
> >> Note that my main reason for advertising using _PLD for the front/back
> >> info is that that is what is already being used in Windows laptops
> >> ACPI tables, so we need support for it regardless.
> > 
> > Is the information available in the SSDB too, or only in the _PLD ?
> 
> The front/back info is only available in the _PLD.

Good, at least we won't have to deal with duplicate and contradictory
information.

> > In
> > the latter case, what should we do for systems that don't populate the
> > _PLD correctly ?
> 
> Currently for unknown _PLD values the IPU3 driver sets
> V4L2_FWNODE_ORIENTATION_EXTERNAL, which I guess is the same as not
> setting any value at all ?

OK, let's continue with that for now. In the worst case, we can always
use a DMI-based quirks system, as we already use DMI to infer how
regulators are wired up.

> >> Actually your rotation question made me wonder what we are doing
> >> for IPU3 here and we already have code parsing the _PLD in
> >> drivers/media/pci/intel/ipu3/cio2-bridge.c to set
> >> V4L2_FWNODE_ORIENTATION_FRONT / V4L2_FWNODE_ORIENTATION_BACK :)
> >>
> >> Since at least atomisp2 is going to need this to we probably need to
> >> factor this out into some shared helper.
> > 
> > I wonder if the atomisp2 driver will ever get out of staging. There's so
> > much work to be done there.
> 
> I would be more then happy if we can get it mostly functional, ever
> getting it out of staging indeed is unlikely.

:-)

Does it require image processing algorithms in userspace, or is it all
handled by firmware ?

-- 
Regards,

Laurent Pinchart



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux