Re: [PATCH 2/2] media: ccs: Add V4L2 controls from properties

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Sakari

On Tue, Mar 28, 2023 at 03:16:25PM +0300, Sakari Ailus wrote:
> Add V4L2 controls (currently CAMERA_SENSOR_ROTATION and
> CAMERA_SENSOR_ORIENTATION) from properties.
>
> Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
> ---
>  drivers/media/i2c/ccs/ccs-core.c | 35 ++++++++++++--------------------
>  drivers/media/i2c/ccs/ccs.h      | 13 ------------
>  2 files changed, 13 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
> index 431dd7d24cdc..b08938f42f61 100644
> --- a/drivers/media/i2c/ccs/ccs-core.c
> +++ b/drivers/media/i2c/ccs/ccs-core.c
> @@ -796,16 +796,24 @@ static const struct v4l2_ctrl_ops ccs_ctrl_ops = {
>  static int ccs_init_controls(struct ccs_sensor *sensor)
>  {
>  	struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd);
> -	int default_flip sensor->hwcfg.module_board_orient ==
> -		CCS_MODULE_BOARD_ORIENT_180;
> +	struct v4l2_fwnode_device_properties props;
>  	int rval;
>
> -	rval = v4l2_ctrl_handler_init(&sensor->pixel_array->ctrl_handler, 17);
> +	rval = v4l2_ctrl_handler_init(&sensor->pixel_array->ctrl_handler, 19);
>  	if (rval)
>  		return rval;
>
>  	sensor->pixel_array->ctrl_handler.lock = &sensor->mutex;
>
> +	rval = v4l2_fwnode_device_parse(&client->dev, &props);
> +	if (rval)
> +		return rval;
> +
> +	rval = v4l2_ctrl_new_fwnode_properties(&sensor->pixel_array->ctrl_handler,
> +					       &ccs_ctrl_ops, &props);
> +	if (rval)
> +		return rval;
> +
>  	switch (CCS_LIM(sensor, ANALOG_GAIN_CAPABILITY)) {
>  	case CCS_ANALOG_GAIN_CAPABILITY_GLOBAL: {
>  		struct {
> @@ -946,10 +954,10 @@ static int ccs_init_controls(struct ccs_sensor *sensor)
>
>  	sensor->hflip = v4l2_ctrl_new_std(
>  		&sensor->pixel_array->ctrl_handler, &ccs_ctrl_ops,
> -		V4L2_CID_HFLIP, 0, 1, 1, default_flip);
> +		V4L2_CID_HFLIP, 0, 1, 1, props.rotation == 180);

Ah! ignore my comments on 1/2 :)

Reviewed-by: Jacopo Mondi <jacopo.mondi@xxxxxxxxxxxxxxxx>

Thanks
  j

>  	sensor->vflip = v4l2_ctrl_new_std(
>  		&sensor->pixel_array->ctrl_handler, &ccs_ctrl_ops,
> -		V4L2_CID_VFLIP, 0, 1, 1, default_flip);
> +		V4L2_CID_VFLIP, 0, 1, 1, props.rotation == 180);
>
>  	sensor->vblank = v4l2_ctrl_new_std(
>  		&sensor->pixel_array->ctrl_handler, &ccs_ctrl_ops,
> @@ -3183,7 +3191,6 @@ static int ccs_get_hwconfig(struct ccs_sensor *sensor, struct device *dev)
>  	struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = V4L2_MBUS_UNKNOWN };
>  	struct fwnode_handle *ep;
>  	struct fwnode_handle *fwnode = dev_fwnode(dev);
> -	u32 rotation;
>  	unsigned int i;
>  	int rval;
>
> @@ -3222,22 +3229,6 @@ static int ccs_get_hwconfig(struct ccs_sensor *sensor, struct device *dev)
>  		goto out_err;
>  	}
>
> -	rval = fwnode_property_read_u32(fwnode, "rotation", &rotation);
> -	if (!rval) {
> -		switch (rotation) {
> -		case 180:
> -			hwcfg->module_board_orient =
> -				CCS_MODULE_BOARD_ORIENT_180;
> -			fallthrough;
> -		case 0:
> -			break;
> -		default:
> -			dev_err(dev, "invalid rotation %u\n", rotation);
> -			rval = -EINVAL;
> -			goto out_err;
> -		}
> -	}
> -
>  	rval = fwnode_property_read_u32(dev_fwnode(dev), "clock-frequency",
>  					&hwcfg->ext_clk);
>  	if (rval)
> diff --git a/drivers/media/i2c/ccs/ccs.h b/drivers/media/i2c/ccs/ccs.h
> index ea8909f011d9..a94c796cea48 100644
> --- a/drivers/media/i2c/ccs/ccs.h
> +++ b/drivers/media/i2c/ccs/ccs.h
> @@ -57,17 +57,6 @@
>  #define CCS_LIM_AT(sensor, limit, offset)	\
>  	ccs_get_limit(sensor, CCS_L_##limit, CCS_L_##limit##_OFFSET(offset))
>
> -/*
> - * Sometimes due to board layout considerations the camera module can be
> - * mounted rotated. The typical rotation used is 180 degrees which can be
> - * corrected by giving a default H-FLIP and V-FLIP in the sensor readout.
> - * FIXME: rotation also changes the bayer pattern.
> - */
> -enum ccs_module_board_orient {
> -	CCS_MODULE_BOARD_ORIENT_0 = 0,
> -	CCS_MODULE_BOARD_ORIENT_180,
> -};
> -
>  struct ccs_flash_strobe_parms {
>  	u8 mode;
>  	u32 strobe_width_high_us;
> @@ -90,8 +79,6 @@ struct ccs_hwconfig {
>  	u32 csi_signalling_mode;	/* CCS_CSI_SIGNALLING_MODE_* */
>  	u64 *op_sys_clock;
>
> -	enum ccs_module_board_orient module_board_orient;
> -
>  	struct ccs_flash_strobe_parms *strobe_setup;
>  };
>
> --
> 2.30.2
>



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux