diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 80944efc133a..d1f6d4490c35 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -267,11 +267,13 @@ class ControlInfo
 public:
 	explicit ControlInfo(const ControlValue &min = 0,
 			     const ControlValue &max = 0,
-			     const ControlValue &def = 0);
+			     const ControlValue &def = 0,
+			     const std::vector<ControlValue> &values = {});
 
 	const ControlValue &min() const { return min_; }
 	const ControlValue &max() const { return max_; }
 	const ControlValue &def() const { return def_; }
+	const std::vector<ControlValue> &values() const { return values_; }
 
 	std::string toString() const;
 
@@ -289,6 +291,7 @@ private:
 	ControlValue min_;
 	ControlValue max_;
 	ControlValue def_;
+	std::vector<ControlValue> values_;
 };
 
 using ControlIdMap = std::unordered_map<unsigned int, const ControlId *>;
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index dca782667d88..61feee37a1b8 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -479,15 +479,17 @@ void ControlValue::reserve(ControlType type, bool isArray, std::size_t numElemen
  */
 
 /**
- * \brief Construct a ControlInfo with minimum and maximum range parameters
+ * \brief Construct a ControlInfo with parameters
  * \param[in] min The control minimum value
  * \param[in] max The control maximum value
  * \param[in] def The control default value
+ * \param[in] values The control supported values
  */
 ControlInfo::ControlInfo(const ControlValue &min,
 			 const ControlValue &max,
-			 const ControlValue &def)
-	: min_(min), max_(max), def_(def)
+			 const ControlValue &def,
+			 const std::vector<ControlValue> &values)
+	: min_(min), max_(max), def_(def), values_(values)
 {
 }
 
@@ -519,6 +521,20 @@ ControlInfo::ControlInfo(const ControlValue &min,
  * \return A ControlValue with the default value for the control
  */
 
+/**
+ * \fn ControlInfo::values()
+ * \brief Retrieve the values supported by the control
+ *
+ * For controls that support a pre-defined number of values, the enumeration of
+ * those is reported through a vector of ControlValue instances accessible with
+ * this method.
+ *
+ * If the control reports a list of supported values, setting values outside
+ * of the reported ones results in undefined behaviour.
+ *
+ * \return A vector of ControlValue instances with the supported values
+ */
+
 /**
  * \brief Provide a string representation of the ControlInfo
  */
