drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c- Extension
.c- Size
- 48266 bytes
- Lines
- 1648
- Domain
- Driver Families
- Bucket
- drivers/media
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/delay.hlinux/pm_runtime.hmedia/v4l2-common.hmedia/v4l2-event.hmedia/v4l2-fh.hmedia/v4l2-ioctl.hmedia/v4l2-mc.hmedia/v4l2-subdev.hmedia/videobuf2-dma-contig.hrkisp1-common.h
Detected Declarations
struct rkisp1_capture_fmt_cfgstruct rkisp1_capture_opsstruct rkisp1_capture_configenum rkisp1_planefunction rkisp1_vdev_to_nodefunction rkisp1_cap_enum_mbus_codesfunction rkisp1_mi_config_ctrlfunction rkisp1_pixfmt_comp_sizefunction rkisp1_irq_frame_end_enablefunction rkisp1_mp_configfunction rkisp1_sp_configfunction rkisp1_mp_disablefunction rkisp1_sp_disablefunction rkisp1_mp_enablefunction rkisp1_sp_enablefunction rkisp1_mp_sp_stopfunction rkisp1_mp_is_stoppedfunction rkisp1_sp_is_stoppedfunction rkisp1_mp_set_data_pathfunction rkisp1_sp_set_data_pathfunction rkisp1_dummy_buf_createfunction rkisp1_dummy_buf_destroyfunction rkisp1_set_next_buffunction rkisp1_handle_bufferfunction rkisp1_capture_isrfunction wake_upfunction rkisp1_vb2_queue_setupfunction rkisp1_vb2_buf_initfunction rkisp1_vb2_buf_queuefunction rkisp1_vb2_buf_preparefunction rkisp1_return_all_buffersfunction rkisp1_cap_stream_enablefunction bufferfunction rkisp1_cap_stream_disablefunction s_streamfunction s_streamfunction rkisp1_vb2_stop_streamingfunction rkisp1_vb2_start_streamingfunction rkisp1_fill_pixfmtfunction rkisp1_find_fmt_cfgfunction rkisp1_try_fmtfunction rkisp1_set_fmtfunction rkisp1_try_fmt_vid_cap_mplanefunction rkisp1_enum_fmt_vid_cap_mplanefunction rkisp1_enum_framesizesfunction rkisp1_s_fmt_vid_cap_mplanefunction rkisp1_g_fmt_vid_cap_mplanefunction rkisp1_querycap
Annotated Snippet
struct rkisp1_capture_fmt_cfg {
u32 fourcc;
u32 uv_swap : 1;
u32 yc_swap : 1;
u32 byte_swap : 1;
u32 write_format;
u32 output_format;
u32 mbus;
};
struct rkisp1_capture_ops {
void (*config)(struct rkisp1_capture *cap);
void (*stop)(struct rkisp1_capture *cap);
void (*enable)(struct rkisp1_capture *cap);
void (*disable)(struct rkisp1_capture *cap);
void (*set_data_path)(struct rkisp1_capture *cap);
bool (*is_stopped)(struct rkisp1_capture *cap);
};
struct rkisp1_capture_config {
const struct rkisp1_capture_fmt_cfg *fmts;
int fmt_size;
struct {
u32 y_size_init;
u32 cb_size_init;
u32 cr_size_init;
u32 y_base_ad_init;
u32 cb_base_ad_init;
u32 cr_base_ad_init;
u32 y_offs_cnt_init;
u32 cb_offs_cnt_init;
u32 cr_offs_cnt_init;
} mi;
};
/*
* The supported pixel formats for mainpath. NOTE, pixel formats with identical 'mbus'
* are grouped together. This is assumed and used by the function rkisp1_cap_enum_mbus_codes
*/
static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
/* yuv422 */
{
.fourcc = V4L2_PIX_FMT_YUYV,
.uv_swap = 0,
.write_format = RKISP1_MI_CTRL_MP_WRITE_YUVINT,
.output_format = RKISP1_CIF_MI_INIT_MP_OUTPUT_YUV422,
.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
}, {
.fourcc = V4L2_PIX_FMT_UYVY,
.uv_swap = 0,
.yc_swap = 1,
.write_format = RKISP1_MI_CTRL_MP_WRITE_YUVINT,
.output_format = RKISP1_CIF_MI_INIT_MP_OUTPUT_YUV422,
.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
}, {
.fourcc = V4L2_PIX_FMT_YUV422P,
.uv_swap = 0,
.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
.output_format = RKISP1_CIF_MI_INIT_MP_OUTPUT_YUV422,
.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
}, {
.fourcc = V4L2_PIX_FMT_NV16,
.uv_swap = 0,
.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
.output_format = RKISP1_CIF_MI_INIT_MP_OUTPUT_YUV422,
.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
}, {
.fourcc = V4L2_PIX_FMT_NV61,
.uv_swap = 1,
.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
.output_format = RKISP1_CIF_MI_INIT_MP_OUTPUT_YUV422,
.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
}, {
.fourcc = V4L2_PIX_FMT_NV16M,
.uv_swap = 0,
.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
.output_format = RKISP1_CIF_MI_INIT_MP_OUTPUT_YUV422,
.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
}, {
.fourcc = V4L2_PIX_FMT_NV61M,
.uv_swap = 1,
.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_SPLA,
.output_format = RKISP1_CIF_MI_INIT_MP_OUTPUT_YUV422,
.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
}, {
.fourcc = V4L2_PIX_FMT_YVU422M,
.uv_swap = 1,
.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
.output_format = RKISP1_CIF_MI_INIT_MP_OUTPUT_YUV422,
.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
Annotation
- Immediate include surface: `linux/delay.h`, `linux/pm_runtime.h`, `media/v4l2-common.h`, `media/v4l2-event.h`, `media/v4l2-fh.h`, `media/v4l2-ioctl.h`, `media/v4l2-mc.h`, `media/v4l2-subdev.h`.
- Detected declarations: `struct rkisp1_capture_fmt_cfg`, `struct rkisp1_capture_ops`, `struct rkisp1_capture_config`, `enum rkisp1_plane`, `function rkisp1_vdev_to_node`, `function rkisp1_cap_enum_mbus_codes`, `function rkisp1_mi_config_ctrl`, `function rkisp1_pixfmt_comp_size`, `function rkisp1_irq_frame_end_enable`, `function rkisp1_mp_config`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.