Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
50b7710
AR0234: Add ACPI sensor profiles into ar0234.xml for ipu6epmtl
amirulazmy Aug 6, 2026
fcfcb2f
script: acpi: mc-setup: Add AR0234 sensor support
amirulazmy Jul 27, 2026
3269fdd
acpi: ipu6: ar0234: Add AR0234 D3 SSDT overlay
amirulazmy Jul 27, 2026
b446e89
driver: media: i2c: max96717: Add AR0234 sensor support
amirulazmy Jul 27, 2026
2146b79
Maxim-serdes: Max96724: upstream ipu6 Dphy 8x isx031
syafiqnizam25 Jul 30, 2026
0d77f0e
ipu7-drivers: Update Submodule commit
khaiwenng Jul 27, 2026
6d79d9d
patches: Fix CI failure
khaiwenng Aug 11, 2026
3632de1
Maxim-serdes: Max96724: upstream ipu6 Dphy 8x isx031
syafiqnizam25 Jul 30, 2026
bd025f4
mc-setup.sh: Add direct MIPI camera support
vunnyso Aug 5, 2026
dc7cbf6
Makefile: Add CONFIG_VIDEO_INTEL_IPU7_ISYS_RESET
khaiwenng Jul 22, 2026
49dc3c5
config: ar0234: Add IPU75XA MIPI sensor configuration
gohweikh Aug 6, 2026
999d7a0
doc: ar0234: Add IPU75XA setup instructions to userspace-mipi guide
gohweikh Aug 6, 2026
c6e9128
README: Add IPU75XA support and submodule pinning guidance
gohweikh Aug 13, 2026
011da09
config: ar0234: Add IPU8 MIPI sensor configuration
gohweikh Aug 6, 2026
c95cf97
doc: ar0234: Add IPU8 setup instructions to userspace-mipi guide
gohweikh Aug 6, 2026
98f27bb
README: Add IPU8 support and submodule pinning guidance
gohweikh Aug 13, 2026
880fbf6
acpi: ipu7: add dual ISX031 direct MIPI SSDT overlay
vunnyso Aug 5, 2026
2f03651
acpi: ipu6: add dual ISX031 direct MIPI SSDT overlay
vunnyso Aug 11, 2026
a7a3e89
acpi: ipu8: add dual ISX031 direct MIPI SSDT overlay
vunnyso Aug 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -90,18 +90,20 @@ ccflags-y := -I$(src)/include
ifneq (,$(filter 1,$(KERNEL_EQ_6_17) $(KERNEL_EQ_6_18) $(KERNEL_EQ_7_0)))
# IPU7 driver configs
export CONFIG_VIDEO_INTEL_IPU7=m
export CONFIG_VIDEO_INTEL_IPU7_ISYS_RESET=y
export CONFIG_VIDEO_INTEL_IPU6=m
export CONFIG_VIDEO_INTEL_IPU6_ISYS_RESET=y

subdir-ccflags-y += -DIPU8_INSYS_NEW_ABI
subdir-ccflags-y += -DCONFIG_VIDEO_INTEL_IPU7
subdir-ccflags-y += -DCONFIG_VIDEO_INTEL_IPU6
subdir-ccflags-$(CONFIG_VIDEO_INTEL_IPU7) += -DCONFIG_VIDEO_INTEL_IPU7 -DIPU8_INSYS_NEW_ABI
subdir-ccflags-$(CONFIG_VIDEO_INTEL_IPU7_ISYS_RESET) += -DCONFIG_VIDEO_INTEL_IPU7_ISYS_RESET
subdir-ccflags-$(CONFIG_VIDEO_INTEL_IPU6) += -DCONFIG_VIDEO_INTEL_IPU6
subdir-ccflags-$(CONFIG_VIDEO_INTEL_IPU6_ISYS_RESET) += -DCONFIG_VIDEO_INTEL_IPU6_ISYS_RESET

# Build IPU7 drivers from submodule
obj-m += ipu7-drivers/drivers/media/pci/intel/ipu7/
obj-$(CONFIG_VIDEO_INTEL_IPU7) += ipu7-drivers/drivers/media/pci/intel/ipu7/

# Build IPU6 drivers from submodule
obj-m += ipu6-drivers/drivers/media/pci/intel/ipu6/
obj-$(CONFIG_VIDEO_INTEL_IPU6) += ipu6-drivers/drivers/media/pci/intel/ipu6/

# Select extracted kernel tree based on running kernel
ifeq ($(KERNEL_EQ_7_0),1)
Expand Down
21 changes: 19 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ This repository contains reference drivers and configurations for Intel MIPI CSI
|-----------------|-------------|-----------------|----------------------------------|
| AR0233+GW5300 | GMSL | Sensing | IPU6EPMTL, IPU75XA |
| AR0234 | GMSL | D3 Embedded | IPU6EPMTL |
| AR0234 | MIPI CSI-2 | D3 Embedded | IPU6EPMTL |
| AR0234 | MIPI CSI-2 | D3 Embedded | IPU6EPMTL, IPU75XA, IPU8 |
| AR0820+GW5300 | GMSL | Sensing | IPU6EPMTL, IPU75XA |
| AR0830+AP1302 | MIPI CSI-2 | Leopard Imaging | IPU6EPMTL, IPU75XA |
| ISX031 | GMSL | D3 Embedded | IPU6EP, IPU6EPMTL, IPU75XA, IPU8 |
Expand All @@ -60,6 +60,7 @@ IPU8 represents NVL platforms.
| | 26.04 | 7.0 Canonical |
| IPU75XA | 24.04.4 | 6.17 Intel BKC |
| | 24.04.4 | 6.17 Canonical |
| | 24.04.4 | 6.18 Intel BKC |
| | 26.04 | 7.0 Canonical |
| IPU8 | 24.04.4 | 6.18 Intel BKC |
| | 24.04.4 | 7.0 IOT Next |
Expand Down Expand Up @@ -101,7 +102,8 @@ Install these software dependencies in your target system:
| IPU Version | ipu-camera-bins | ipu-camera-hal | icamerasrc |
|-------------|------------------------------------------|------------------------------------------|------------------------------------------|
| IPU6 | d9421fef539f24fc80c27002d5da753e193b0670 | f93eec544a5234bf0b610b3f76d64c8fa711c364 | 867c5b6ab7925c9b69b8374873a832266d97d7e5 |
| IPU7 | d235697c3bb41d56402d4805a7b82fdc938c077a | ea085c325e7a67a811a0baa5ce2d1b8f5641ea02 | 867c5b6ab7925c9b69b8374873a832266d97d7e5 |
| IPU7 | cead7320d84ee9ade4f60d74e935b16b5a760945 | ef30767553685b83034e42325992a2442c5fcb2c | 867c5b6ab7925c9b69b8374873a832266d97d7e5 |
| IPU8 | adf55525ab9d370828723b1ff8bee76ed7a492e8 | fd1efb6f2ef25fd24775a303cc71af6139d797eb | 867c5b6ab7925c9b69b8374873a832266d97d7e5 |

## Setup Procedure

Expand All @@ -112,6 +114,21 @@ Initialize and update current repository recursively to ensure all dependencies
git checkout main
git submodule update --init --recursive

> **Note:** Workaround required for IPU7/IPU8 RAW sensor due to tuning dependency.

By default, `ipu7-drivers` submodule tracks the tip of its `main` branch.
For IPU75XA,

cd ipu7-drivers
git checkout 44bbc2de71fe5e7a5a7124d4c5e5900e70e13736
cd ..

For IPU8,

cd ipu7-drivers
git checkout bed9b71d5be56d0e24c771c7a6ec83fd0a9db433
cd ..

Build and install modules using DKMS

sudo dkms remove ipu-camera-sensor/0.1
Expand Down
97 changes: 97 additions & 0 deletions acpi/ipu6/_cam_common_ar0234.asl
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/*
* SPDX-License-Identifier: GPL-2.0
* Copyright (c) 2026 Intel Corporation.
*
* CAM-level defines expected by caller:
* DESCH_SER_REF - Path to parent SER (e.g. \_SB.PC00.DESx.CHxx.SERx), used in _DEP
* DESCH_SER_PATH - Path to parent SER (e.g. "\\_SB.PC00.DESx.CHxx.SERx"), used in CSI2Bus and GpioIo
* DESCH_SER_GPIOREF - GPIO controller path for SER (e.g. ^^SERx), used in gpio resources (e.g. reset-gpios)
* CAM_LANES - Number of MIPI data lanes for the camera
*/
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F) // bit 0: device is present, bit 1: device is enabled, bit 2: device is shown in UI, bit 3: device is functional
}

Method (_HID, 0, NotSerialized) // _HID: Hardware ID
{
Return ("INTC10C0") // AR0234
}

Name (_DEP, Package (0x01) // _DEP: Dependencies
{
DESCH_SER_REF // Path to parent SER (e.g "\\_SB.PC00.DESx.CHxx.SERx")
})

Name(_CRS, ResourceTemplate () // _CRS: Current Resource Settings
{
/*
* mipi-disco-img.c will use the information in CSI2Bus to create fwnode.
* CAMx Local Port -> SERx Remote Port
* CAMx PRT0 -> SERx PRT0
*/
CSI2Bus(
DeviceInitiated, // SlaveMode
1, // PhyType (1 for DPHY)
0, // LocalPort (AR0234 only 1 PHY)
DESCH_SER_PATH, // ResourceSource (Path to parent SERx, e.g. "\\_SB.PC00.DESx.CHxx.SERx")
0, // ResourceSourceIndex (e.g. 0 for SERx PRT0)
, // ResourceUsage
, // DescriptorName
) // VendorData

I2cSerialBusV2 (
0x0010, // SlaveAddress (0x10 based on AR0234 hardware)
ControllerInitiated, // SlaveMode
0x00061A80, // ConnectionSpeed
AddressingMode7Bit, // AddressingMode
DESCH_SER_PATH, // ResourceSource (Path to parent SER, e.g. "\\_SB.PC00.DESx.CHxx.SERx")
0x00, // ResourceSourceIndex
ResourceConsumer, // ResourceUsage
, // DescriptorName
Exclusive, // Shared
) // VendorData
})

Name (_DSD, Package () // _DSD: Device-Specific Data
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties for _DSD
Package ()
{
Package () { "mipi-img-clock-frequency", 96000000 }, // 96 MHz

/*
* Sensor specific GPIOs, reset-gpios will be used by ar0234.c
* when devm_gpiod_get_optional is being called with "reset" consumer.
* For details, please refer to ACPI GPIO binding documentation
* https://www.kernel.org/doc/html/latest/firmware-guide/acpi/gpio-properties.html
*
* DESCH_SER_GPIOREF is the GPIO controller from parent SERx
* 0 is the GPIO pin group in parent SERx
* 0 is the index of pin in the GPIO pin group in parent SERx
* 1 is active low for reset
*
*/
Package () { "reset-gpios", Package () { DESCH_SER_GPIOREF, 0, 0, 1 } },
},
ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), // Hierarchical Data Extension
Package ()
{
/* mipi-img-port here are NOT actual MIPI ports, but is used by mipi-disco-img.c to create fwnode. */
Package () { "mipi-img-port-0", "PRT0" }, // Connected to SERx PRTx (used by CAMx CSI2Bus LocalPort)
},
})

Name (PRT0, Package()
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
#if CAM_LANES == 4
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
#else
Package () { "mipi-img-data-lanes", Package() { 1, 2 } },
#endif
},
})
2 changes: 1 addition & 1 deletion acpi/ipu6/_cam_common_d457.asl
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Name (PRT0, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
#if CAM_LANES == 4
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
#elif CAM_LANES == 2
Expand Down
2 changes: 1 addition & 1 deletion acpi/ipu6/_cam_common_isx031.asl
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ Name (PRT0, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
#if CAM_LANES == 4
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
#elif CAM_LANES == 2
Expand Down
55 changes: 55 additions & 0 deletions acpi/ipu6/_des_ch_common_ar0234.asl
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* SPDX-License-Identifier: GPL-2.0
* Copyright (c) 2026 Intel Corporation.
*
* Description: Common template for each AR0234 GMSL camera under each deserializer link,
* where each link is represented as an ATR channel device.
*
* DES-level defines expected by caller:
* DES_PATH - DESx ACPI path string (e.g., "\\_SB.PC00.DES0")
* DES_REF - DESx ACPI namespace reference (e.g., \_SB.PC00.DES0)
*
* Channel-level defines expected by caller:
* DESCH_CH - Channel device name (e.g., CH00)
* DESCH_SER - Serializer device name (e.g., SER0)
* DESCH_CAM - Camera device name (e.g., CAM0)
* DESCH_CH_PATH - CHxx ACPI path string (e.g., "\\_SB.PC00.DES0.CH00")
* DESCH_SER_PATH - SERx ACPI path string (e.g., "\\_SB.PC00.DES0.CH00.SER0")
* DESCH_SER_REF - SERx ACPI namespace reference (e.g., \_SB.PC00.DES0.CH00.SER0)
* DESCH_SER_I2C - SERx I2C address (e.g., 0x40)
* DESCH_LINK_NUM - Channel/link number (0, 1, 2, 3) - used for _ADR, reg, and SER remote port
* DESCH_SER_GPIOREF - SERx GPIO controller reference (e.g., ^^SER0, ^^SER1, etc.)
* CAM_LANES - CAMx Number of MIPI data lanes for the camera (e.g., 2, 4)
* Optional defines:
* DESCH_SER_EXTRA_GPIO_PIN - SERx Additional GPIO pin number (e.g., 7 for MFP7 in MAX9295A)
* DESCH_SER_X/Y/Z/U_VC - SERx VC filter for Pipe X/Y/Z/U, specifically for MAX96717 driver
*/

Device (DESCH_CH) // New CHxx Device under parent DESx device for each DES channel/link
{
/*
* Channel is the naming convention used by i2c-mux or i2c-atr in ACPI namespace
* In GMSL context, it can directly be translated as Link 0/1/2/3 of the Deserializer
*/

Name (_ADR, DESCH_LINK_NUM) // _ADR: Address for the channel (e.g. 0 for Link 0, 1 for Link 1)

Name (_DSD, Package () // _DSD: Device Specific Data
{
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "reg", DESCH_LINK_NUM }, // used by i2c-atr driver. Represents the channel / link number
}
})

Device (DESCH_SER) // SERx device under parent DESx.CHxx
{
#include "_ser_common_max9295.asl"

Device (DESCH_CAM) // CAMx device under parent DESx.CHxx.SERx
{
#include "_cam_common_ar0234.asl"
}
}
}
8 changes: 4 additions & 4 deletions acpi/ipu6/_des_common_max9296.asl
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ Name (PRT0, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
Package () { "mipi-img-data-lanes", Package () { 1, 2, 3, 4} },
},
})
Expand All @@ -100,7 +100,7 @@ Name (PRT1, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
},
})
Expand All @@ -110,7 +110,7 @@ Name (PRT2, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
#if DES_LANES == 2
Package () { "mipi-img-data-lanes", Package() { 1, 2 } },
#else
Expand All @@ -125,7 +125,7 @@ Name (PRT3, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
#if DES_LANES == 2
Package () { "mipi-img-data-lanes", Package() { 1, 2 } },
#else
Expand Down
20 changes: 10 additions & 10 deletions acpi/ipu6/_des_common_max96724.asl
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ Name (PRT0, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
Package () { "mipi-img-data-lanes", Package () { 1, 2, 3, 4} },
},
})
Expand All @@ -115,7 +115,7 @@ Name (PRT1, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
},

Expand All @@ -126,7 +126,7 @@ Name (PRT2, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
Package () { "mipi-img-data-lanes", Package () { 1, 2, 3, 4 } },
},
})
Expand All @@ -136,7 +136,7 @@ Name (PRT3, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } },
},

Expand All @@ -147,7 +147,7 @@ Name (PRT4, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0},
#if DES_LANES == 4
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } }, // 4 lanes for DPHY on Intel MIPI CRD
#else
Expand All @@ -164,13 +164,13 @@ Name (PRT5, Package()
{
#if DES_LANES == 4
#if DES_PHY_TYPE == 1
Package () { "mipi-img-clock-lanes", 5 }, // DPHY uses alternate CKCP PHY0 clock lane
Package () { "mipi-img-clock-lane", 5 }, // DPHY uses alternate CKCP PHY0 clock lane
#else
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
#endif
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } }, // 4 lanes for DPHY on Intel MIPI CRD
#else
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
Package () { "mipi-img-data-lanes", Package() { 1, 2 } }, // 2 lanes for CPHY/DPHY on Intel MIPI CRD
#endif
Package () { "mipi-img-link-frequencies", Package() { LINK_FREQ } },
Expand All @@ -182,7 +182,7 @@ Name (PRT6, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0},
#if DES_LANES == 4
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } }, // 4 lanes for DPHY on Intel MIPI CRD
#else
Expand All @@ -197,7 +197,7 @@ Name (PRT7, Package()
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), // Device Properties
Package ()
{
Package () { "mipi-img-clock-lanes", 0 },
Package () { "mipi-img-clock-lane", 0 },
#if DES_LANES == 4
Package () { "mipi-img-data-lanes", Package() { 1, 2, 3, 4 } }, // 4 lanes for DPHY on Intel MIPI CRD
#else
Expand Down
Loading