[libcamera-devel] [PATCH] libcamera: sysfs: Fix directory exists check
Niklas Söderlund
niklas.soderlund at ragnatech.se
Sat Jan 9 07:35:50 CET 2021
Hi Sebastian,
Thanks for testing patch.
On 2021-01-09 07:12:23 +0100, Sebastian Fricke wrote:
> Hey Niklas,
>
> Thank you for the patch.
> I have tested your patch on my FriendlyElec NanoPC-T4 development board
> with the OV13850.
> *Before* I applied your patch the output looked like this:
> ```
> basti at nanopct4:~$ cam -l
> Available cameras:
> 1: Internal front camera (platform/ff110000.i2c/i2c-1/1-0010 ov13850)
> ```
> And *after* applying your patch it looks like this:
> ```
> basti at nanopct4:~$ cam -l
> Available cameras:
> 1: Internal front camera (/base/i2c at ff110000/ov13850 at 10)
> ```
It looks like the patch solves the persistent naming regression on your
platform as well. If you test a camera enumeration before
8f4e16f014c820a0 dose it match the later case
(/base/i2c at ff110000/ov13850 at 10) ?
>
> I also tested this patch on my laptop:
> *Before*:
> ```
> basti at basti-TUXEDO-Book-XA1510:~$ cam -l
> Available cameras:
> 1: External camera 'Chicony USB2.0 Camera: Chicony ' (\_SB_.PCI0.GP18.XHC0.RHUB.PRT4-4:1.0-04f2:b685)
> ```
> *After*:
> ```
> basti at basti-TUXEDO-Book-XA1510:~$ cam -l
> Available cameras:
> 1: External camera 'Chicony USB2.0 Camera: Chicony ' (\_SB_.PCI0.GP18.XHC0.RHUB.PRT4-4:1.0-04f2:b685)
> ```
>
> The output on my laptop looks a little odd, but that is another issue.
What is odd about your laptop output?
>
> Greetings
>
> Sebastian
>
> On 08.01.2021 18:00, Niklas Söderlund wrote:
> > The scope of File::exists() was changed to only validate that a file
> > exists and is therefore not usable to check if a directory exists. This
> > breaks the persistent name generation for DT based systems as it uses
> > File::exists() to check for directories, fix this by using stat()
> > directly.
> >
> > On Scarlet the persistent names of the cameras are impacted by this and
> > where incorrectly reported as:
> >
> > $ cam -l
> > Available cameras:
> > 1: Internal front camera (platform/ff160000.i2c/i2c-7/7-003c ov2685)
> > 2: Internal front camera (platform/ff160000.i2c/i2c-7/7-0036 ov5695
> >
> > While the expected ones are restored with this fix:
> >
> > $ cam -l
> > Available cameras:
> > 1: Internal front camera (/base/i2c at ff160000/camera at 3c)
> > 2: Internal front camera (/base/i2c at ff160000/camera at 36)
> >
> > Fixes: 8f4e16f014c820a0 ("test: file: Check that directories are not treated as files")
> > Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > ---
> > src/libcamera/sysfs.cpp | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/libcamera/sysfs.cpp b/src/libcamera/sysfs.cpp
> > index 3ebe66f8d69b61d4..e9004b2b59c8638d 100644
> > --- a/src/libcamera/sysfs.cpp
> > +++ b/src/libcamera/sysfs.cpp
> > @@ -70,10 +70,11 @@ std::string charDevPath(const std::string &deviceNode)
> > std::string firmwareNodePath(const std::string &device)
> > {
> > std::string fwPath, node;
> > + struct stat st;
> >
> > /* Lookup for DT-based systems */
> > node = device + "/of_node";
> > - if (File::exists(node)) {
> > + if (!stat(node.c_str(), &st)) {
> > char *ofPath = realpath(node.c_str(), nullptr);
> > if (!ofPath)
> > return {};
> > --
> > 2.30.0
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel at lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list