@@ -14,8 +14,10 @@ 
 #include <libcamera/base/class.h>
 #include <libcamera/base/log.h>
 
+#include <libcamera/control_ids.h>
 #include <libcamera/controls.h>
 #include <libcamera/geometry.h>
+
 #include <libcamera/ipa/core_ipa_interface.h>
 
 #include "libcamera/internal/formats.h"
@@ -40,7 +42,8 @@  public:
 	const std::vector<unsigned int> &mbusCodes() const { return mbusCodes_; }
 	const std::vector<Size> sizes(unsigned int mbusCode) const;
 	Size resolution() const;
-	const std::vector<int32_t> &testPatternModes() const
+	const std::vector<controls::draft::TestPatternModeEnum>
+		&testPatternModes() const
 	{
 		return testPatternModes_;
 	}
@@ -71,7 +74,8 @@  private:
 	void initVimcDefaultProperties();
 	void initStaticProperties();
 	void initTestPatternModes(
-		const std::map<int32_t, int32_t> &testPatternModeMap);
+		const std::map<controls::draft::TestPatternModeEnum, int32_t>
+			&testPatternModeMap);
 	int initProperties();
 
 	const MediaEntity *entity_;
@@ -84,7 +88,7 @@  private:
 	V4L2Subdevice::Formats formats_;
 	std::vector<unsigned int> mbusCodes_;
 	std::vector<Size> sizes_;
-	std::vector<int32_t> testPatternModes_;
+	std::vector<controls::draft::TestPatternModeEnum> testPatternModes_;
 
 	Size pixelArraySize_;
 	Rectangle activeArea_;
@@ -10,6 +10,7 @@ 
 #include <map>
 #include <string>
 
+#include <libcamera/control_ids.h>
 #include <libcamera/geometry.h>
 
 namespace libcamera {
@@ -18,7 +19,7 @@  struct CameraSensorProperties {
 	static const CameraSensorProperties *get(const std::string &sensor);
 
 	Size unitCellSize;
-	std::map<int32_t, int32_t> testPatternModes;
+	std::map<controls::draft::TestPatternModeEnum, int32_t> testPatternModes;
 };
 
 } /* namespace libcamera */
@@ -311,7 +311,7 @@  void CameraSensor::initStaticProperties()
 }
 
 void CameraSensor::initTestPatternModes(
-	const std::map<int32_t, int32_t> &testPatternModes)
+	const std::map<controls::draft::TestPatternModeEnum, int32_t> &testPatternModes)
 {
 	const auto &v4l2TestPattern = controls().find(V4L2_CID_TEST_PATTERN);
 	if (v4l2TestPattern == controls().end()) {
@@ -327,7 +327,7 @@  void CameraSensor::initTestPatternModes(
 	 * control index is supported in the below for loop that creates the
 	 * list of supported test patterns.
 	 */
-	std::map<int32_t, int32_t> indexToTestPatternMode;
+	std::map<int32_t, controls::draft::TestPatternModeEnum> indexToTestPatternMode;
 	for (const auto &it : testPatternModes)
 		indexToTestPatternMode[it.second] = it.first;
 
@@ -981,13 +981,14 @@  int PipelineHandlerIPU3::updateControls(IPU3CameraData *data)
 		return ret;
 
 	ControlInfoMap::Map controls = IPU3Controls;
-	const std::vector<int32_t> &testPatternModes = sensor->testPatternModes();
+	const std::vector<controls::draft::TestPatternModeEnum>
+		&testPatternModes = sensor->testPatternModes();
 	if (!testPatternModes.empty()) {
 		std::vector<ControlValue> values;
 		values.reserve(testPatternModes.size());
 
-		for (int32_t pattern : testPatternModes)
-			values.emplace_back(pattern);
+		for (auto pattern : testPatternModes)
+			values.emplace_back(static_cast<int32_t>(pattern));
 
 		controls[&controls::draft::TestPatternMode] = ControlInfo(values);
 	}