diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom
index d3375333baa0..8c0fc2165baa 100644
--- a/include/libcamera/ipa/core.mojom
+++ b/include/libcamera/ipa/core.mojom
@@ -152,6 +152,11 @@ module libcamera;
  * RGB for sensors that don't have a CFA.
  */
 
+/**
+ * \var IPACameraSensorInfo::pixelArraySize
+ * \brief The size of the physical pixel array of the sensor in pixels
+ */
+
 /**
  * \var IPACameraSensorInfo::activeArea
  * \brief The active pixel area of the sensor, relative to the physical pixel
@@ -250,6 +255,7 @@ struct IPACameraSensorInfo {
 	uint32 bitsPerPixel;
 	uint32 cfaPattern;
 
+	Size pixelArraySize;
 	Rectangle activeArea;
 	Rectangle analogCrop;
 	Size outputSize;
diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp
index 9e32f798c2dd..18941666fb4c 100644
--- a/src/libcamera/sensor/camera_sensor_legacy.cpp
+++ b/src/libcamera/sensor/camera_sensor_legacy.cpp
@@ -881,6 +881,7 @@ int CameraSensorLegacy::sensorInfo(IPACameraSensorInfo *info) const
 		return -EINVAL;
 
 	info->model = model();
+	info->pixelArraySize = pixelArraySize_;
 
 	/*
 	 * The active area is a static property, while the crop rectangle needs
diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp
index a1f48b5ff557..4b0b8ff6fc2b 100644
--- a/src/libcamera/sensor/camera_sensor_raw.cpp
+++ b/src/libcamera/sensor/camera_sensor_raw.cpp
@@ -1007,6 +1007,7 @@ int CameraSensorRaw::setEmbeddedDataEnabled(bool enable)
 int CameraSensorRaw::sensorInfo(IPACameraSensorInfo *info) const
 {
 	info->model = model();
+	info->pixelArraySize = pixelArraySize_;
 
 	/*
 	 * The active area is a static property, while the crop rectangle needs
