diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 9f8a9031bd74..9d93064c11b2 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -223,8 +223,8 @@ public:
 		return val->get<T>();
 	}
 
-	template<typename T>
-	void set(const Control<T> &ctrl, const T &value)
+	template<typename T, typename V>
+	void set(const Control<T> &ctrl, const V &value)
 	{
 		ControlValue *val = find(ctrl.id());
 		if (!val)
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index f632d60adc8b..a136ebd2653b 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -735,7 +735,7 @@ bool ControlList::contains(unsigned int id) const
  */
 
 /**
- * \fn template<typename T> void ControlList::set(const Control<T> &ctrl, const T &value)
+ * \fn template<typename T, typename V> void ControlList::set(const Control<T> &ctrl, const V &value)
  * \brief Set the control \a ctrl value to \a value
  * \param[in] ctrl The control
  * \param[in] value The control value
