drivers/media/platform/amlogic/c3/isp/c3-isp-capture.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/amlogic/c3/isp/c3-isp-capture.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/amlogic/c3/isp/c3-isp-capture.c- Extension
.c- Size
- 22683 bytes
- Lines
- 805
- 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/cleanup.hlinux/pm_runtime.hmedia/v4l2-ctrls.hmedia/v4l2-event.hmedia/v4l2-ioctl.hmedia/v4l2-mc.hmedia/videobuf2-dma-contig.hc3-isp-common.hc3-isp-regs.h
Detected Declarations
function c3_isp_cap_wrmifx3_bufffunction c3_isp_cap_wrmifx3_formatfunction c3_isp_cap_dummy_buff_createfunction c3_isp_cap_dummy_buff_destroyfunction c3_isp_cap_cfg_bufffunction c3_isp_cap_startfunction c3_isp_cap_stopfunction c3_isp_cap_donefunction c3_cap_try_fmtfunction c3_isp_cap_return_buffersfunction c3_isp_cap_querycapfunction c3_isp_cap_enum_fmtfunction c3_isp_cap_g_fmt_mplanefunction c3_isp_cap_s_fmt_mplanefunction c3_isp_cap_try_fmt_mplanefunction c3_isp_cap_enum_frmsizefunction c3_isp_cap_link_validatefunction c3_isp_vb2_queue_setupfunction c3_isp_vb2_buf_queuefunction c3_isp_vb2_buf_preparefunction c3_isp_vb2_buf_initfunction c3_isp_vb2_start_streamingfunction c3_isp_vb2_stop_streamingfunction c3_isp_register_capturefunction c3_isp_captures_registerfunction c3_isp_captures_unregisterfunction c3_isp_captures_isr
Annotated Snippet
if (index++ == f->index) {
f->pixelformat = cap_formats[i].fourcc;
return 0;
}
}
return -EINVAL;
}
static int c3_isp_cap_g_fmt_mplane(struct file *file, void *fh,
struct v4l2_format *f)
{
struct c3_isp_capture *cap = video_drvdata(file);
f->fmt.pix_mp = cap->format.pix_mp;
return 0;
}
static int c3_isp_cap_s_fmt_mplane(struct file *file, void *fh,
struct v4l2_format *f)
{
struct c3_isp_capture *cap = video_drvdata(file);
c3_cap_try_fmt(&f->fmt.pix_mp);
cap->format.pix_mp = f->fmt.pix_mp;
cap->format.info = c3_cap_find_fmt(f->fmt.pix_mp.pixelformat);
return 0;
}
static int c3_isp_cap_try_fmt_mplane(struct file *file, void *fh,
struct v4l2_format *f)
{
c3_cap_try_fmt(&f->fmt.pix_mp);
return 0;
}
static int c3_isp_cap_enum_frmsize(struct file *file, void *fh,
struct v4l2_frmsizeenum *fsize)
{
const struct c3_isp_cap_format_info *fmt;
if (fsize->index)
return -EINVAL;
fmt = c3_cap_find_fmt(fsize->pixel_format);
if (!fmt)
return -EINVAL;
fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
fsize->stepwise.min_width = C3_ISP_MIN_WIDTH;
fsize->stepwise.min_height = C3_ISP_MIN_HEIGHT;
fsize->stepwise.max_width = C3_ISP_MAX_WIDTH;
fsize->stepwise.max_height = C3_ISP_MAX_HEIGHT;
fsize->stepwise.step_width = 2;
fsize->stepwise.step_height = 2;
return 0;
}
static const struct v4l2_ioctl_ops isp_cap_v4l2_ioctl_ops = {
.vidioc_querycap = c3_isp_cap_querycap,
.vidioc_enum_fmt_vid_cap = c3_isp_cap_enum_fmt,
.vidioc_g_fmt_vid_cap_mplane = c3_isp_cap_g_fmt_mplane,
.vidioc_s_fmt_vid_cap_mplane = c3_isp_cap_s_fmt_mplane,
.vidioc_try_fmt_vid_cap_mplane = c3_isp_cap_try_fmt_mplane,
.vidioc_reqbufs = vb2_ioctl_reqbufs,
.vidioc_querybuf = vb2_ioctl_querybuf,
.vidioc_qbuf = vb2_ioctl_qbuf,
.vidioc_expbuf = vb2_ioctl_expbuf,
.vidioc_dqbuf = vb2_ioctl_dqbuf,
.vidioc_prepare_buf = vb2_ioctl_prepare_buf,
.vidioc_create_bufs = vb2_ioctl_create_bufs,
.vidioc_streamon = vb2_ioctl_streamon,
.vidioc_streamoff = vb2_ioctl_streamoff,
.vidioc_enum_framesizes = c3_isp_cap_enum_frmsize,
.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
};
static const struct v4l2_file_operations isp_cap_v4l2_fops = {
.open = v4l2_fh_open,
.release = vb2_fop_release,
.poll = vb2_fop_poll,
.unlocked_ioctl = video_ioctl2,
.mmap = vb2_fop_mmap,
};
Annotation
- Immediate include surface: `linux/cleanup.h`, `linux/pm_runtime.h`, `media/v4l2-ctrls.h`, `media/v4l2-event.h`, `media/v4l2-ioctl.h`, `media/v4l2-mc.h`, `media/videobuf2-dma-contig.h`, `c3-isp-common.h`.
- Detected declarations: `function c3_isp_cap_wrmifx3_buff`, `function c3_isp_cap_wrmifx3_format`, `function c3_isp_cap_dummy_buff_create`, `function c3_isp_cap_dummy_buff_destroy`, `function c3_isp_cap_cfg_buff`, `function c3_isp_cap_start`, `function c3_isp_cap_stop`, `function c3_isp_cap_done`, `function c3_cap_try_fmt`, `function c3_isp_cap_return_buffers`.
- 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.