drivers/media/usb/dvb-usb/cxusb-analog.c
Source file repositories/reference/linux-study-clean/drivers/media/usb/dvb-usb/cxusb-analog.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/usb/dvb-usb/cxusb-analog.c- Extension
.c- Size
- 47693 bytes
- Lines
- 1837
- 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.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/bitops.hlinux/device.hlinux/slab.hlinux/string.hlinux/ktime.hlinux/vmalloc.hmedia/drv-intf/cx25840.hmedia/tuner.hmedia/v4l2-fh.hmedia/v4l2-ioctl.hmedia/v4l2-subdev.hmedia/videobuf2-vmalloc.hcxusb.h
Detected Declarations
function cxusb_medion_v_queue_setupfunction cxusb_medion_v_buf_initfunction cxusb_auxbuf_initfunction cxusb_auxbuf_head_trimfunction cxusb_auxbuf_paylenfunction cxusb_auxbuf_make_spacefunction cxusb_auxbuf_append_urbfunction cxusb_auxbuf_copyfunction cxusb_medion_cf_refc_fld_chgfunction cxusb_medion_cf_refc_start_schfunction cxusb_medion_cf_refc_line_smplfunction cxusb_medion_cf_refc_vbi_smplfunction cxusb_medion_cf_ref_codefunction cxusb_medion_cs_start_schfunction cxusb_medion_cs_line_smplfunction cxusb_medion_copy_samplesfunction cxusb_medion_copy_fieldfunction cxusb_medion_v_process_auxbuffunction cxusb_medion_v_complete_handle_urbfunction cxusb_medion_v_complete_workfunction cxusb_medion_v_completefunction cxusb_medion_urbs_freefunction cxusb_medion_return_buffersfunction list_for_each_entry_safefunction cxusb_medion_v_ss_auxbuf_allocfunction cxusb_medion_norm2field_orderfunction cxusb_medion_field_orderfunction cxusb_medion_v_start_streamingfunction cxusb_medion_v_stop_streamingfunction cxusub_medion_v_buf_queuefunction cxusb_medion_v_querycapfunction cxusb_medion_v_enum_fmt_vid_capfunction cxusb_medion_g_fmt_vid_capfunction cxusb_medion_try_s_fmt_vid_capfunction cxusb_medion_try_fmt_vid_capfunction cxusb_medion_s_fmt_vid_capfunction cxusb_medion_enum_inputfunction cxusb_medion_g_inputfunction cxusb_medion_set_normfunction cxusb_medion_s_inputfunction cxusb_medion_g_tunerfunction cxusb_medion_s_tunerfunction cxusb_medion_g_frequencyfunction cxusb_medion_s_frequencyfunction cxusb_medion_g_stdfunction cxusb_medion_s_stdfunction cxusb_medion_querystdfunction cxusb_medion_log_status
Annotated Snippet
if (bt656->buf && remsamples > 0) {
memset(bt656->buf, 0, remsamples);
bt656->buf += remsamples;
cxusb_vprintk(dvbdev, BT656,
"field %c line %u %u samples still remaining (of %u)\n",
firstfield ? '1' : '2',
bt656->line, remsamples,
maxlinesamples);
}
bt656->line++;
}
remlines = maxlines - bt656->line;
if (bt656->buf && remlines > 0) {
memset(bt656->buf, 0, remlines * maxlinesamples);
bt656->buf += remlines * maxlinesamples;
cxusb_vprintk(dvbdev, BT656,
"field %c %u lines still remaining (of %u)\n",
firstfield ? '1' : '2', remlines,
maxlines);
}
return true;
}
static void cxusb_medion_cf_refc_start_sch(struct dvb_usb_device *dvbdev,
struct cxusb_bt656_params *bt656,
bool firstfield,
unsigned char buf[4])
{
bool firstfield_code = (buf[3] & CXUSB_BT656_FIELD_MASK) ==
CXUSB_BT656_FIELD_1;
bool sav_code = (buf[3] & CXUSB_BT656_SEAV_MASK) ==
CXUSB_BT656_SEAV_SAV;
bool vbi_code = (buf[3] & CXUSB_BT656_VBI_MASK) ==
CXUSB_BT656_VBI_ON;
if (!sav_code || firstfield != firstfield_code)
return;
if (!vbi_code) {
cxusb_vprintk(dvbdev, BT656, "line start @ pos %u\n",
bt656->pos);
bt656->linesamples = 0;
bt656->fmode = LINE_SAMPLES;
} else {
cxusb_vprintk(dvbdev, BT656, "VBI start @ pos %u\n",
bt656->pos);
bt656->fmode = VBI_SAMPLES;
}
}
static void cxusb_medion_cf_refc_line_smpl(struct dvb_usb_device *dvbdev,
struct cxusb_bt656_params *bt656,
bool firstfield,
unsigned int maxlinesamples,
unsigned char buf[4])
{
bool sav_code = (buf[3] & CXUSB_BT656_SEAV_MASK) ==
CXUSB_BT656_SEAV_SAV;
unsigned int remsamples;
if (sav_code)
cxusb_vprintk(dvbdev, BT656,
"SAV in line samples @ line %u, pos %u\n",
bt656->line, bt656->pos);
remsamples = maxlinesamples - bt656->linesamples;
if (bt656->buf && remsamples > 0) {
memset(bt656->buf, 0, remsamples);
bt656->buf += remsamples;
cxusb_vprintk(dvbdev, BT656,
"field %c line %u %u samples still remaining (of %u)\n",
firstfield ? '1' : '2', bt656->line, remsamples,
maxlinesamples);
}
bt656->fmode = START_SEARCH;
bt656->line++;
}
static void cxusb_medion_cf_refc_vbi_smpl(struct dvb_usb_device *dvbdev,
struct cxusb_bt656_params *bt656,
unsigned char buf[4])
Annotation
- Immediate include surface: `linux/bitops.h`, `linux/device.h`, `linux/slab.h`, `linux/string.h`, `linux/ktime.h`, `linux/vmalloc.h`, `media/drv-intf/cx25840.h`, `media/tuner.h`.
- Detected declarations: `function cxusb_medion_v_queue_setup`, `function cxusb_medion_v_buf_init`, `function cxusb_auxbuf_init`, `function cxusb_auxbuf_head_trim`, `function cxusb_auxbuf_paylen`, `function cxusb_auxbuf_make_space`, `function cxusb_auxbuf_append_urb`, `function cxusb_auxbuf_copy`, `function cxusb_medion_cf_refc_fld_chg`, `function cxusb_medion_cf_refc_start_sch`.
- 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.