1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Copyright (C) 2013--2024 Intel Corporation */
4 #ifndef IPU6_ISYS_SUBDEV_H
5 #define IPU6_ISYS_SUBDEV_H
7 #include <linux/container_of.h>
9 #include <media/media-entity.h>
10 #include <media/v4l2-ctrls.h>
11 #include <media/v4l2-subdev.h>
15 struct ipu6_isys_subdev
{
16 struct v4l2_subdev sd
;
17 struct ipu6_isys
*isys
;
18 u32
const *supported_codes
;
19 struct media_pad
*pad
;
20 struct v4l2_ctrl_handler ctrl_handler
;
21 void (*ctrl_init
)(struct v4l2_subdev
*sd
);
22 int source
; /* SSI stream source; -1 if unset */
25 #define to_ipu6_isys_subdev(__sd) \
26 container_of(__sd, struct ipu6_isys_subdev, sd)
28 unsigned int ipu6_isys_mbus_code_to_bpp(u32 code
);
29 unsigned int ipu6_isys_mbus_code_to_mipi(u32 code
);
30 bool ipu6_isys_is_bayer_format(u32 code
);
31 u32
ipu6_isys_convert_bayer_order(u32 code
, int x
, int y
);
33 int ipu6_isys_subdev_set_fmt(struct v4l2_subdev
*sd
,
34 struct v4l2_subdev_state
*state
,
35 struct v4l2_subdev_format
*fmt
);
36 int ipu6_isys_subdev_enum_mbus_code(struct v4l2_subdev
*sd
,
37 struct v4l2_subdev_state
*state
,
38 struct v4l2_subdev_mbus_code_enum
40 int ipu6_isys_subdev_link_validate(struct v4l2_subdev
*sd
,
41 struct media_link
*link
,
42 struct v4l2_subdev_format
*source_fmt
,
43 struct v4l2_subdev_format
*sink_fmt
);
44 u32
ipu6_isys_get_src_stream_by_src_pad(struct v4l2_subdev
*sd
, u32 pad
);
45 int ipu6_isys_get_stream_pad_fmt(struct v4l2_subdev
*sd
, u32 pad
, u32 stream
,
46 struct v4l2_mbus_framefmt
*format
);
47 int ipu6_isys_get_stream_pad_crop(struct v4l2_subdev
*sd
, u32 pad
, u32 stream
,
48 struct v4l2_rect
*crop
);
49 int ipu6_isys_subdev_set_routing(struct v4l2_subdev
*sd
,
50 struct v4l2_subdev_state
*state
,
51 enum v4l2_subdev_format_whence which
,
52 struct v4l2_subdev_krouting
*routing
);
53 int ipu6_isys_subdev_init(struct ipu6_isys_subdev
*asd
,
54 const struct v4l2_subdev_ops
*ops
,
55 unsigned int nr_ctrls
,
56 unsigned int num_sink_pads
,
57 unsigned int num_source_pads
);
58 void ipu6_isys_subdev_cleanup(struct ipu6_isys_subdev
*asd
);
59 #endif /* IPU6_ISYS_SUBDEV_H */