drivers/media/pci/zoran/zoran_driver.c
Source file repositories/reference/linux-study-clean/drivers/media/pci/zoran/zoran_driver.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/pci/zoran/zoran_driver.c- Extension
.c- Size
- 26909 bytes
- Lines
- 984
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/init.hlinux/module.hlinux/delay.hlinux/slab.hlinux/pci.hlinux/wait.hlinux/interrupt.hlinux/i2c.hlinux/i2c-algo-bit.hlinux/spinlock.hlinux/videodev2.hmedia/v4l2-common.hmedia/v4l2-ioctl.hmedia/v4l2-event.hvideocodec.hlinux/io.hlinux/uaccess.hlinux/mutex.hzoran.hzoran_device.hzoran_card.h
Detected Declarations
function zoran_v4l2_calc_bufsizefunction zoran_v4l_set_formatfunction zoran_set_normfunction zoran_set_inputfunction zoran_querycapfunction zoran_enum_fmtfunction zoran_enum_fmt_vid_capfunction zoran_g_fmt_vid_outfunction zoran_g_fmt_vid_capfunction zoran_try_fmt_vid_outfunction zoran_try_fmt_vid_capfunction zoran_s_fmt_vid_outfunction zoran_s_fmt_vid_capfunction zoran_g_stdfunction zoran_s_stdfunction zoran_enum_inputfunction zoran_g_inputfunction zoran_s_inputfunction zoran_g_selectionfunction zoran_s_selectionfunction zr_vb2_queue_setupfunction zr_vb2_queuefunction zr_vb2_preparefunction zr_set_buffunction zr_vb2_start_streamingfunction zr_vb2_stop_streamingfunction zoran_queue_initfunction zoran_queue_exit
Annotated Snippet
if (zoran_formats[i].flags & flag && num++ == fmt->index) {
strscpy(fmt->description, zoran_formats[i].name,
sizeof(fmt->description));
/* fmt struct pre-zeroed, so adding '\0' not needed */
fmt->pixelformat = zoran_formats[i].fourcc;
if (zoran_formats[i].flags & ZORAN_FORMAT_COMPRESSED)
fmt->flags |= V4L2_FMT_FLAG_COMPRESSED;
return 0;
}
}
return -EINVAL;
}
static int zoran_enum_fmt_vid_cap(struct file *file, void *fh,
struct v4l2_fmtdesc *f)
{
struct zoran *zr = video_drvdata(file);
return zoran_enum_fmt(zr, f, ZORAN_FORMAT_CAPTURE);
}
static int zoran_g_fmt_vid_out(struct file *file, void *fh,
struct v4l2_format *fmt)
{
struct zoran *zr = video_drvdata(file);
fmt->fmt.pix.width = zr->jpg_settings.img_width / zr->jpg_settings.hor_dcm;
fmt->fmt.pix.height = zr->jpg_settings.img_height * 2 /
(zr->jpg_settings.ver_dcm * zr->jpg_settings.tmp_dcm);
fmt->fmt.pix.sizeimage = zr->buffer_size;
fmt->fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
if (zr->jpg_settings.tmp_dcm == 1)
fmt->fmt.pix.field = (zr->jpg_settings.odd_even ?
V4L2_FIELD_SEQ_TB : V4L2_FIELD_SEQ_BT);
else
fmt->fmt.pix.field = (zr->jpg_settings.odd_even ?
V4L2_FIELD_TOP : V4L2_FIELD_BOTTOM);
fmt->fmt.pix.bytesperline = 0;
fmt->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
return 0;
}
static int zoran_g_fmt_vid_cap(struct file *file, void *fh,
struct v4l2_format *fmt)
{
struct zoran *zr = video_drvdata(file);
if (zr->map_mode != ZORAN_MAP_MODE_RAW)
return zoran_g_fmt_vid_out(file, fh, fmt);
fmt->fmt.pix.width = zr->v4l_settings.width;
fmt->fmt.pix.height = zr->v4l_settings.height;
fmt->fmt.pix.sizeimage = zr->buffer_size;
fmt->fmt.pix.pixelformat = zr->v4l_settings.format->fourcc;
fmt->fmt.pix.colorspace = zr->v4l_settings.format->colorspace;
fmt->fmt.pix.bytesperline = zr->v4l_settings.bytesperline;
if (BUZ_MAX_HEIGHT < (zr->v4l_settings.height * 2))
fmt->fmt.pix.field = V4L2_FIELD_INTERLACED;
else
fmt->fmt.pix.field = V4L2_FIELD_TOP;
return 0;
}
static int zoran_try_fmt_vid_out(struct file *file, void *fh,
struct v4l2_format *fmt)
{
struct zoran *zr = video_drvdata(file);
struct zoran_jpg_settings settings;
int res = 0;
if (fmt->fmt.pix.pixelformat != V4L2_PIX_FMT_MJPEG)
return -EINVAL;
settings = zr->jpg_settings;
/* we actually need to set 'real' parameters now */
if ((fmt->fmt.pix.height * 2) > BUZ_MAX_HEIGHT)
settings.tmp_dcm = 1;
else
settings.tmp_dcm = 2;
settings.decimation = 0;
if (fmt->fmt.pix.height <= zr->jpg_settings.img_height / 2)
settings.ver_dcm = 2;
else
settings.ver_dcm = 1;
if (fmt->fmt.pix.width <= zr->jpg_settings.img_width / 4)
settings.hor_dcm = 4;
else if (fmt->fmt.pix.width <= zr->jpg_settings.img_width / 2)
settings.hor_dcm = 2;
else
Annotation
- Immediate include surface: `linux/init.h`, `linux/module.h`, `linux/delay.h`, `linux/slab.h`, `linux/pci.h`, `linux/wait.h`, `linux/interrupt.h`, `linux/i2c.h`.
- Detected declarations: `function zoran_v4l2_calc_bufsize`, `function zoran_v4l_set_format`, `function zoran_set_norm`, `function zoran_set_input`, `function zoran_querycap`, `function zoran_enum_fmt`, `function zoran_enum_fmt_vid_cap`, `function zoran_g_fmt_vid_out`, `function zoran_g_fmt_vid_cap`, `function zoran_try_fmt_vid_out`.
- 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.
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.