[PATCH v3 46/76] media: imx-jpeg: Access v4l2_fh from file

Frank Li Frank.li at nxp.com
Mon Aug 11 08:05:49 PDT 2025


On Sun, Aug 10, 2025 at 04:30:28AM +0300, Laurent Pinchart wrote:
> From: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
>
> The v4l2_fh associated with an open file handle is now guaranteed
> to be available in file->private_data, initialised by v4l2_fh_add().
>
> Access the v4l2_fh, and from there the driver-specific structure,
> from the file * in all ioctl handlers.
>
> Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
> Reviewed-by: Ming Qian <ming.qian at oss.nxp.com>
> Co-developed-by: Laurent Pinchart <laurent.pinchart+renesas at ideasonboard.com>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas at ideasonboard.com>
> ---

Reviewed-by: Frank Li <Frank.Li at nxp.com>

> Changes since v1:
>
> - Update file-to-ctx macro due to removal of fh-to-ctx macro
> ---
>  .../media/platform/nxp/imx-jpeg/mxc-jpeg.c    | 35 ++++++++-----------
>  1 file changed, 15 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
> index a34e644b2cb1..df3ccdf767ba 100644
> --- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
> +++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
> @@ -644,14 +644,9 @@ static void print_mxc_buf(struct mxc_jpeg_dev *jpeg, struct vb2_buffer *buf,
>  	}
>  }
>
> -static inline struct mxc_jpeg_ctx *mxc_jpeg_fh_to_ctx(struct v4l2_fh *fh)
> -{
> -	return container_of(fh, struct mxc_jpeg_ctx, fh);
> -}
> -
>  static inline struct mxc_jpeg_ctx *mxc_jpeg_file_to_ctx(struct file *filp)
>  {
> -	return mxc_jpeg_fh_to_ctx(file_to_v4l2_fh(filp));
> +	return container_of(file_to_v4l2_fh(filp), struct mxc_jpeg_ctx, fh);
>  }
>
>  static int enum_fmt(const struct mxc_jpeg_fmt *mxc_formats, int n,
> @@ -1610,7 +1605,7 @@ static int mxc_jpeg_decoder_cmd(struct file *file, void *priv,
>  				struct v4l2_decoder_cmd *cmd)
>  {
>  	struct v4l2_fh *fh = file_to_v4l2_fh(file);
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(fh);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	unsigned long flags;
>  	int ret;
>
> @@ -1643,7 +1638,7 @@ static int mxc_jpeg_encoder_cmd(struct file *file, void *priv,
>  				struct v4l2_encoder_cmd *cmd)
>  {
>  	struct v4l2_fh *fh = file_to_v4l2_fh(file);
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(fh);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	unsigned long flags;
>  	int ret;
>
> @@ -2260,7 +2255,7 @@ static int mxc_jpeg_querycap(struct file *file, void *priv,
>  static int mxc_jpeg_enum_fmt_vid_cap(struct file *file, void *priv,
>  				     struct v4l2_fmtdesc *f)
>  {
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(priv);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	struct mxc_jpeg_q_data *q_data = mxc_jpeg_get_q_data(ctx, f->type);
>
>  	if (ctx->mxc_jpeg->mode == MXC_JPEG_ENCODE) {
> @@ -2300,7 +2295,7 @@ static int mxc_jpeg_enum_fmt_vid_cap(struct file *file, void *priv,
>  static int mxc_jpeg_enum_fmt_vid_out(struct file *file, void *priv,
>  				     struct v4l2_fmtdesc *f)
>  {
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(priv);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	u32 type = ctx->mxc_jpeg->mode == MXC_JPEG_DECODE ?  MXC_JPEG_FMT_TYPE_ENC :
>  							     MXC_JPEG_FMT_TYPE_RAW;
>  	int ret;
> @@ -2441,7 +2436,7 @@ static int mxc_jpeg_try_fmt(struct v4l2_format *f,
>  static int mxc_jpeg_try_fmt_vid_cap(struct file *file, void *priv,
>  				    struct v4l2_format *f)
>  {
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(priv);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg;
>  	struct device *dev = jpeg->dev;
>  	struct mxc_jpeg_q_data tmp_q;
> @@ -2460,7 +2455,7 @@ static int mxc_jpeg_try_fmt_vid_cap(struct file *file, void *priv,
>  static int mxc_jpeg_try_fmt_vid_out(struct file *file, void *priv,
>  				    struct v4l2_format *f)
>  {
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(priv);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg;
>  	struct device *dev = jpeg->dev;
>  	struct mxc_jpeg_q_data tmp_q;
> @@ -2512,20 +2507,20 @@ static int mxc_jpeg_s_fmt(struct mxc_jpeg_ctx *ctx,
>  static int mxc_jpeg_s_fmt_vid_cap(struct file *file, void *priv,
>  				  struct v4l2_format *f)
>  {
> -	return mxc_jpeg_s_fmt(mxc_jpeg_fh_to_ctx(priv), f);
> +	return mxc_jpeg_s_fmt(mxc_jpeg_file_to_ctx(file), f);
>  }
>
>  static int mxc_jpeg_s_fmt_vid_out(struct file *file, void *priv,
>  				  struct v4l2_format *f)
>  {
>  	int ret;
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(priv);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	struct vb2_queue *dst_vq;
>  	struct mxc_jpeg_q_data *q_data_cap;
>  	enum v4l2_buf_type cap_type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
>  	struct v4l2_format fc;
>
> -	ret = mxc_jpeg_s_fmt(mxc_jpeg_fh_to_ctx(priv), f);
> +	ret = mxc_jpeg_s_fmt(ctx, f);
>  	if (ret)
>  		return ret;
>
> @@ -2554,7 +2549,7 @@ static int mxc_jpeg_s_fmt_vid_out(struct file *file, void *priv,
>  static int mxc_jpeg_g_fmt_vid(struct file *file, void *priv,
>  			      struct v4l2_format *f)
>  {
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(priv);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	struct mxc_jpeg_dev *jpeg = ctx->mxc_jpeg;
>  	struct device *dev = jpeg->dev;
>  	struct v4l2_pix_format_mplane   *pix_mp = &f->fmt.pix_mp;
> @@ -2592,7 +2587,7 @@ static int mxc_jpeg_g_fmt_vid(struct file *file, void *priv,
>
>  static int mxc_jpeg_dec_g_selection(struct file *file, void *fh, struct v4l2_selection *s)
>  {
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(fh);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	struct mxc_jpeg_q_data *q_data_cap;
>
>  	if (s->type != V4L2_BUF_TYPE_VIDEO_CAPTURE && s->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
> @@ -2621,7 +2616,7 @@ static int mxc_jpeg_dec_g_selection(struct file *file, void *fh, struct v4l2_sel
>
>  static int mxc_jpeg_enc_g_selection(struct file *file, void *fh, struct v4l2_selection *s)
>  {
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(fh);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	struct mxc_jpeg_q_data *q_data_out;
>
>  	if (s->type != V4L2_BUF_TYPE_VIDEO_OUTPUT && s->type != V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
> @@ -2649,7 +2644,7 @@ static int mxc_jpeg_enc_g_selection(struct file *file, void *fh, struct v4l2_sel
>
>  static int mxc_jpeg_g_selection(struct file *file, void *fh, struct v4l2_selection *s)
>  {
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(fh);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>
>  	if (ctx->mxc_jpeg->mode == MXC_JPEG_DECODE)
>  		return mxc_jpeg_dec_g_selection(file, fh, s);
> @@ -2659,7 +2654,7 @@ static int mxc_jpeg_g_selection(struct file *file, void *fh, struct v4l2_selecti
>
>  static int mxc_jpeg_s_selection(struct file *file, void *fh, struct v4l2_selection *s)
>  {
> -	struct mxc_jpeg_ctx *ctx = mxc_jpeg_fh_to_ctx(fh);
> +	struct mxc_jpeg_ctx *ctx = mxc_jpeg_file_to_ctx(file);
>  	struct mxc_jpeg_q_data *q_data_out;
>
>  	if (ctx->mxc_jpeg->mode != MXC_JPEG_ENCODE)
> --
> Regards,
>
> Laurent Pinchart
>



More information about the linux-arm-kernel mailing list