diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 2fca975f7512..40a29189ba01 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -158,8 +158,8 @@ public:
 
 private:
 	ControlType type_ : 8;
-	bool isArray_ : 1;
-	std::size_t numElements_ : 16;
+	bool isArray_;
+	std::size_t numElements_ : 32;
 	union {
 		uint64_t value_;
 		void *storage_;
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 4615e71d7e3c..3c910d38f05d 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -83,6 +83,7 @@ static constexpr size_t ControlValueSize[] = {
  * \brief Abstract type representing the value of a control
  */
 
+/** \todo Revisit the ControlValue layout when stabilizing the ABI */
 static_assert(sizeof(ControlValue) == 16, "Invalid size of ControlValue class");
 
 /**
