]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: pci: intel: Add CVS support for IPU bridge driver
authorMiguel Vadillo <miguel.vadillo@intel.com>
Wed, 27 May 2026 17:05:30 +0000 (10:05 -0700)
committerSakari Ailus <sakari.ailus@linux.intel.com>
Thu, 28 May 2026 18:18:34 +0000 (21:18 +0300)
CVS is located between IPU device and sensors and is available in
existing commercial platforms from multiple OEMs. The connection
information between them in firmware is not enough to build a V4L2
connection graph. This patch parses the connection properties from the
SSDB buffer in DSDT and builds the connection using software nodes.

From the IPU bridge point of view, CVS is just like IVSC.

Signed-off-by: Miguel Vadillo <miguel.vadillo@intel.com>
Tested-by: Mehdi Djait <mehdi.djait@linux.intel.com> # Dell XPS 13 9350 + IPU7
Reviewed-by: Mehdi Djait <mehdi.djait@linux.intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
drivers/media/pci/intel/ipu-bridge.c

index fc6608e33de40aadd67a2b88c6bc2b30464f7a5e..88581a4c081d6bdd9f11e24a8a66b1772c24079c 100644 (file)
@@ -168,6 +168,9 @@ static const struct acpi_device_id ivsc_acpi_ids[] = {
        { "INTC1095" },
        { "INTC100A" },
        { "INTC10CF" },
+       { "INTC10DE" }, /* LNL */
+       { "INTC10E0" }, /* ARL */
+       { "INTC10E1" }, /* PTL */
 };
 
 static struct acpi_device *ipu_bridge_get_ivsc_acpi_dev(struct acpi_device *adev)
@@ -221,7 +224,13 @@ static struct device *ipu_bridge_get_ivsc_csi_dev(struct acpi_device *adev)
                return csi_dev;
        }
 
-       return NULL;
+       /* Try to locate CVS device on the I2C bus */
+       csi_dev = bus_find_device_by_acpi_dev(&i2c_bus_type, adev);
+       if (csi_dev)
+               return csi_dev;
+
+       /* Fallback to platform bus for CVS device */
+       return bus_find_device_by_acpi_dev(&platform_bus_type, adev);
 }
 
 static int ipu_bridge_check_ivsc_dev(struct ipu_sensor *sensor,
@@ -235,7 +244,7 @@ static int ipu_bridge_check_ivsc_dev(struct ipu_sensor *sensor,
                csi_dev = ipu_bridge_get_ivsc_csi_dev(adev);
                if (!csi_dev) {
                        acpi_dev_put(adev);
-                       dev_err(ADEV_DEV(adev), "Failed to find MEI CSI dev\n");
+                       dev_err(ADEV_DEV(adev), "Failed to find MEI or CVS CSI dev\n");
                        return -ENODEV;
                }