diff mbox series

[v2,3/3] media: ivsc: csi: Fix link frequency control behaviour

Message ID 20240426145538.654212-4-sakari.ailus@linux.intel.com
State New
Headers show
Series Use INTEGER64 type for MEI CSI LINK_FREQ control | expand

Commit Message

Sakari Ailus April 26, 2024, 2:55 p.m. UTC
The link frequency control was an integer menu control the value of which
was hard-coded in the MEI CSI driver itself. Instead obtain the control
value from the upstream sub-device and use the CUR_LINK_FREQ INTEGER64
control type for the purpose.

Fixes: 29006e196a56 ("media: pci: intel: ivsc: Add CSI submodule")
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/pci/intel/ivsc/mei_csi.c | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

Comments

Wu, Wentong April 28, 2024, 3:22 a.m. UTC | #1
> From: Sakari Ailus <sakari.ailus@linux.intel.com>
> 
> The link frequency control was an integer menu control the value of which
> was hard-coded in the MEI CSI driver itself. Instead obtain the control value
> from the upstream sub-device and use the CUR_LINK_FREQ INTEGER64
> control type for the purpose.
> 
> Fixes: 29006e196a56 ("media: pci: intel: ivsc: Add CSI submodule")
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>

Acked-by:  Wentong Wu <wentong.wu@intel.com>

> ---
>  drivers/media/pci/intel/ivsc/mei_csi.c | 24 +++++++-----------------
>  1 file changed, 7 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/media/pci/intel/ivsc/mei_csi.c
> b/drivers/media/pci/intel/ivsc/mei_csi.c
> index 55e0c60c420c..4a35932f1cd3 100644
> --- a/drivers/media/pci/intel/ivsc/mei_csi.c
> +++ b/drivers/media/pci/intel/ivsc/mei_csi.c
> @@ -15,6 +15,7 @@
>  #include <linux/completion.h>
>  #include <linux/delay.h>
>  #include <linux/kernel.h>
> +#include <linux/limits.h>
>  #include <linux/math64.h>
>  #include <linux/mei_cl_bus.h>
>  #include <linux/module.h>
> @@ -32,8 +33,6 @@
> 
>  #define MEI_CSI_ENTITY_NAME "Intel IVSC CSI"
> 
> -#define MEI_CSI_LINK_FREQ_400MHZ 400000000ULL
> -
>  /* the 5s used here is based on experiment */  #define CSI_CMD_TIMEOUT
> (5 * HZ)
>  /* to setup CSI-2 link an extra delay needed and determined experimentally
> */ @@ -145,10 +144,6 @@ static const struct v4l2_mbus_framefmt
> mei_csi_format_mbus_default = {
>  	.field = V4L2_FIELD_NONE,
>  };
> 
> -static s64 link_freq_menu_items[] = {
> -	MEI_CSI_LINK_FREQ_400MHZ
> -};
> -
>  static inline struct mei_csi *notifier_to_csi(struct v4l2_async_notifier *n)  {
>  	return container_of(n, struct mei_csi, notifier); @@ -470,7 +465,7
> @@ static int mei_csi_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
>  	struct mei_csi *csi = ctrl_to_csi(ctrl);
>  	s64 freq;
> 
> -	if (ctrl->id == V4L2_CID_LINK_FREQ) {
> +	if (ctrl->id == V4L2_CID_CUR_LINK_FREQ) {
>  		if (!csi->remote)
>  			return -EINVAL;
> 
> @@ -481,8 +476,7 @@ static int mei_csi_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
>  			return -EINVAL;
>  		}
> 
> -		link_freq_menu_items[0] = freq;
> -		ctrl->val = 0;
> +		ctrl->p_new.p_s64[0] = csi->link_freq = freq;
> 
>  		return 0;
>  	}
> @@ -553,7 +547,6 @@ static const struct v4l2_async_notifier_operations
> mei_csi_notify_ops = {
> 
>  static int mei_csi_init_controls(struct mei_csi *csi)  {
> -	u32 max;
>  	int ret;
> 
>  	ret = v4l2_ctrl_handler_init(&csi->ctrl_handler, 2); @@ -562,13
> +555,10 @@ static int mei_csi_init_controls(struct mei_csi *csi)
> 
>  	csi->ctrl_handler.lock = &csi->lock;
> 
> -	max = ARRAY_SIZE(link_freq_menu_items) - 1;
> -	csi->freq_ctrl = v4l2_ctrl_new_int_menu(&csi->ctrl_handler,
> -						&mei_csi_ctrl_ops,
> -						V4L2_CID_LINK_FREQ,
> -						max,
> -						0,
> -						link_freq_menu_items);
> +	csi->freq_ctrl = v4l2_ctrl_new_std(&csi->ctrl_handler,
> +					   &mei_csi_ctrl_ops,
> +					   V4L2_CID_CUR_LINK_FREQ, 1,
> S64_MAX,
> +					   1, 1);
>  	if (csi->freq_ctrl)
>  		csi->freq_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY |
>  					 V4L2_CTRL_FLAG_VOLATILE;
> --
> 2.39.2
diff mbox series

Patch

diff --git a/drivers/media/pci/intel/ivsc/mei_csi.c b/drivers/media/pci/intel/ivsc/mei_csi.c
index 55e0c60c420c..4a35932f1cd3 100644
--- a/drivers/media/pci/intel/ivsc/mei_csi.c
+++ b/drivers/media/pci/intel/ivsc/mei_csi.c
@@ -15,6 +15,7 @@ 
 #include <linux/completion.h>
 #include <linux/delay.h>
 #include <linux/kernel.h>
+#include <linux/limits.h>
 #include <linux/math64.h>
 #include <linux/mei_cl_bus.h>
 #include <linux/module.h>
@@ -32,8 +33,6 @@ 
 
 #define MEI_CSI_ENTITY_NAME "Intel IVSC CSI"
 
-#define MEI_CSI_LINK_FREQ_400MHZ 400000000ULL
-
 /* the 5s used here is based on experiment */
 #define CSI_CMD_TIMEOUT (5 * HZ)
 /* to setup CSI-2 link an extra delay needed and determined experimentally */
@@ -145,10 +144,6 @@  static const struct v4l2_mbus_framefmt mei_csi_format_mbus_default = {
 	.field = V4L2_FIELD_NONE,
 };
 
-static s64 link_freq_menu_items[] = {
-	MEI_CSI_LINK_FREQ_400MHZ
-};
-
 static inline struct mei_csi *notifier_to_csi(struct v4l2_async_notifier *n)
 {
 	return container_of(n, struct mei_csi, notifier);
@@ -470,7 +465,7 @@  static int mei_csi_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
 	struct mei_csi *csi = ctrl_to_csi(ctrl);
 	s64 freq;
 
-	if (ctrl->id == V4L2_CID_LINK_FREQ) {
+	if (ctrl->id == V4L2_CID_CUR_LINK_FREQ) {
 		if (!csi->remote)
 			return -EINVAL;
 
@@ -481,8 +476,7 @@  static int mei_csi_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
 			return -EINVAL;
 		}
 
-		link_freq_menu_items[0] = freq;
-		ctrl->val = 0;
+		ctrl->p_new.p_s64[0] = csi->link_freq = freq;
 
 		return 0;
 	}
@@ -553,7 +547,6 @@  static const struct v4l2_async_notifier_operations mei_csi_notify_ops = {
 
 static int mei_csi_init_controls(struct mei_csi *csi)
 {
-	u32 max;
 	int ret;
 
 	ret = v4l2_ctrl_handler_init(&csi->ctrl_handler, 2);
@@ -562,13 +555,10 @@  static int mei_csi_init_controls(struct mei_csi *csi)
 
 	csi->ctrl_handler.lock = &csi->lock;
 
-	max = ARRAY_SIZE(link_freq_menu_items) - 1;
-	csi->freq_ctrl = v4l2_ctrl_new_int_menu(&csi->ctrl_handler,
-						&mei_csi_ctrl_ops,
-						V4L2_CID_LINK_FREQ,
-						max,
-						0,
-						link_freq_menu_items);
+	csi->freq_ctrl = v4l2_ctrl_new_std(&csi->ctrl_handler,
+					   &mei_csi_ctrl_ops,
+					   V4L2_CID_CUR_LINK_FREQ, 1, S64_MAX,
+					   1, 1);
 	if (csi->freq_ctrl)
 		csi->freq_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY |
 					 V4L2_CTRL_FLAG_VOLATILE;