From: Miguel Vadillo <miguel.vadillo@intel.com>
To: linux-media@vger.kernel.org
Cc: sakari.ailus@linux.intel.com, antti.laakso@linux.intel.com,
mehdi.djait@linux.intel.com, miguel.vadillo@intel.com
Subject: [PATCH 0/2] media: i2c: cvs: Add driver of Intel Computer Vision Sensing Controller(CVS)
Date: Tue, 5 May 2026 15:30:03 -0700 [thread overview]
Message-ID: <20260505223005.84162-1-miguel.vadillo@intel.com> (raw)
Cover Letter
------------
This patch series introduces support for Intel Computer Vision Sensing
(CVS) devices found on Intel Luna Lake (LNL), Panther Lake (PTL), and
Arrow Lake (ARL) platforms.
OVERVIEW
--------
The CVS device acts as a V4L2 sub-device bridge that manages CSI-2
link ownership between the host (Linux) and firmware for camera
sensors. It provides:
1. CSI-2 link ownership arbitration between host and CVS firmware
2. MIPI CSI-2 configuration management
3. Privacy LED control coordination
4. Power management integration with runtime PM
The driver consists of two main components:
- core.c: Core driver with probe, command transport, and PM callbacks
- v4l2.c: V4L2 sub-device and media framework integration
HARDWARE DETAILS
----------------
CVS devices interface via:
- I2C for command/control communication with the device firmware
- GPIO signals for ownership handshaking (request/response)
- Optional reset and wake interrupt for full-capability variants
- Integration with Intel IPU (Image Processing Unit) via ipu_bridge
The driver supports two hardware capability levels:
- Light capability: Basic GPIO-based ownership (2 GPIOs)
- Full capability: Enhanced with reset control and wake IRQ (4 GPIOs)
In order to support both configurations and all devices on the field,
the driver detects the number of GPIOs and uses add_driver_gpios
respectively.
DEVICE QUIRKS
-------------
The driver includes a quirk table to handle device-specific variations
across different CVS implementations (e.g., Lattice, Synaptics vendors)
that may differ in:
- MIPI configuration requirements
- Buffer and header sizes
- Reset sequence requirements
FIRMWARE PROTOCOL
-----------------
The CVS firmware supports a command-response protocol over I2C with:
- Device state queries (GET_DEV_STATE, GET_DEV_CAPABILITY)
- Host identification (SET_DEV_HOST_ID)
- MIPI configuration (HOST_SET_MIPI_CONFIG, HOST_GET_MIPI_CONFIG)
- CSI ownership control (HOST_SENSOR_OWNER)
The protocol supports versioning (currently 2.2+) and optional
response prefixes for backward compatibility.
V4L2 INTEGRATION
----------------
The CVS driver registers as a V4L2 sub-device exposing:
- Sink pad: Receives frames from remote camera sensor
- Source pad: Emits frames to downstream IPU/consumers
- Async notifier: Discovers and connects to upstream sensors via ACPI
It implements standard V4L2 operations:
- enable/disable_stream: Start/stop streaming with ownership handoff
- set_fmt/get_fmt: Format negotiation with format mirroring
- get_mbus_config: CSI-2 bus configuration queries
PLATFORM SUPPORT
----------------
In addition to I2C-based operation, the driver supports platform device
instantiation for systems where CVS is exposed without I2C transport,
falling back to GPIO-only ownership control.
BIOS is presenting the device wrongly in some cases. These devices are
already on the field thus need to support as is.
POWER MANAGEMENT
----------------
Runtime PM integration allows the device to:
- Auto-suspend after 1 second of inactivity
- Resume on streaming start or firmware operations
- Coordinate with IPU power states
A PM runtime device link (DL_FLAG_PM_RUNTIME) is registered between
IPU (consumer) and CVS (supplier) so that the PM framework
automatically resumes CVS before IPU begins capture. CSI-2 link
ownership is claimed in cvs_runtime_resume() and released in
cvs_runtime_suspend(), decoupling ownership management from the V4L2
streaming path.
DEPENDENCIES
------------
- Intel IPU bridge (ipu-bridge.ko) for ACPI sensor discovery
SYSTEM DIAGRAM
--------------
Below diagram shows connections of CVS/ISH/IPU and Camera Sensor:
-----------------------------------------------------------------------
| Host Processor |
| |
| --------------- --------------- --------------- |
| | | | | | | |
| | IPU | | ISH | |camera driver|----| |
| | | | | | | | |
| --------------- --------------- --------------- | |
| | | | | |
| | | | | |
| | | --------------- | |
| | | | | | |
| | | | CVS driver | | |
| | | | | | |
| | | --------------- | |
| | | | | |
---------|-----------------|-----------------|------------|------------
| CSI | I2C | I2C |
| | | |
---------|-----------------|-----------------|---------- |
| CVS | | | |
| | | | | I2C
| ----------------------------- | | |
| | |-------------| | |
| | CVS FW | | |
| | | | |
| ----------------------------- | |
| | CSI | |
---------|--------------------------------------------- |
| CSI |
| |
-------------------------------- |
| | I2C |
| Camera Sensor |---------------------|
| |
--------------------------------
USAGE EXAMPLE
-------------
# Load driver
modprobe intel_cvs
# Configure media pipeline (example with IPU7 + ov08x40)
media-ctl -v -V \
"\"Intel CVS\":1 [fmt:SGRBG10/3856x2176]"
media-ctl -v -V \
"\"Intel IPU7 CSI2 0\":0 [fmt:SGRBG10/3856x2176]"
media-ctl -v -V \
"\"Intel IPU7 CSI2 0\":1 [fmt:SGRBG10/3856x2176]"
media-ctl -v -l \
"\"Intel CVS\":1 -> \"Intel IPU7 CSI2 0\":0[1]"
media-ctl -v -l \
"\"Intel IPU7 CSI2 0\":1 -> \"Intel IPU7 ISYS Capture 0\":0[1]"
media-ctl -v -V \
"\"ov08x40 8-0010\":0 [fmt:SGRBG10/3856x2176]"
yavta -c1 -n1 -s 3856x2176 \
--file=/tmp/frame-CSI1.bin -f SGRBG10 /dev/video0
Miguel Vadillo (2):
media: i2c: cvs: Add driver of Intel Computer Vision Sensing
Controller(CVS)
media: pci: intel: Add CVS support for IPU bridge driver
drivers/media/i2c/Kconfig | 1 +
drivers/media/i2c/Makefile | 1 +
drivers/media/i2c/cvs/Kconfig | 21 +
drivers/media/i2c/cvs/Makefile | 4 +
drivers/media/i2c/cvs/core.c | 984 +++++++++++++++++++++++++++
drivers/media/i2c/cvs/icvs.h | 515 ++++++++++++++
drivers/media/i2c/cvs/v4l2.c | 618 +++++++++++++++++
drivers/media/pci/intel/ipu-bridge.c | 13 +-
8 files changed, 2155 insertions(+), 2 deletions(-)
create mode 100644 drivers/media/i2c/cvs/Kconfig
create mode 100644 drivers/media/i2c/cvs/Makefile
create mode 100644 drivers/media/i2c/cvs/core.c
create mode 100644 drivers/media/i2c/cvs/icvs.h
create mode 100644 drivers/media/i2c/cvs/v4l2.c
--
2.43.0
next reply other threads:[~2026-05-05 22:33 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-05 22:30 Miguel Vadillo [this message]
2026-05-05 22:30 ` [PATCH 1/2] media: i2c: cvs: Add driver of Intel Computer Vision Sensing Controller(CVS) Miguel Vadillo
2026-05-06 8:38 ` Kieran Bingham
2026-05-06 21:34 ` Vadillo, Miguel
2026-05-07 7:24 ` Sakari Ailus
2026-05-05 22:30 ` [PATCH 2/2] media: pci: intel: Add CVS support for IPU bridge driver Miguel Vadillo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260505223005.84162-1-miguel.vadillo@intel.com \
--to=miguel.vadillo@intel.com \
--cc=antti.laakso@linux.intel.com \
--cc=linux-media@vger.kernel.org \
--cc=mehdi.djait@linux.intel.com \
--cc=sakari.ailus@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox