drivers/media/usb/cx231xx/cx231xx-417.c
Source file repositories/reference/linux-study-clean/drivers/media/usb/cx231xx/cx231xx-417.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/usb/cx231xx/cx231xx-417.c- Extension
.c- Size
- 49280 bytes
- Lines
- 1792
- 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
cx231xx.hlinux/module.hlinux/moduleparam.hlinux/init.hlinux/fs.hlinux/delay.hlinux/device.hlinux/firmware.hlinux/slab.hlinux/vmalloc.hmedia/v4l2-common.hmedia/v4l2-ioctl.hmedia/v4l2-event.hmedia/drv-intf/cx2341x.hmedia/tuner.h
Detected Declarations
enum cx231xx_capture_typeenum cx231xx_capture_bitsenum cx231xx_capture_endenum cx231xx_framerateenum cx231xx_stream_portenum cx231xx_data_xfer_statusenum cx231xx_picture_maskenum cx231xx_vbi_mode_bitsenum cx231xx_vbi_insertion_bitsenum cx231xx_dma_unitenum cx231xx_dma_transfer_status_bitsenum cx231xx_pauseenum cx231xx_copyrightenum cx231xx_notification_typeenum cx231xx_notification_statusenum cx231xx_notification_mailboxenum cx231xx_field1_linesenum cx231xx_field2_linesenum cx231xx_custom_data_typeenum cx231xx_muteenum cx231xx_mute_video_maskenum cx231xx_mute_video_shiftfunction set_itvc_regfunction get_itvc_regfunction wait_for_mci_completefunction mc417_register_writefunction mc417_register_readfunction mc417_memory_writefunction mc417_memory_readfunction cx231xx_mbox_funcfunction cx231xx_api_cmdfunction cx231xx_find_mailboxfunction mci_write_memory_to_gpiofunction cx231xx_load_firmwarefunction cx231xx_codec_settingsfunction cx231xx_initialize_codecfunction queue_setupfunction buffer_copyfunction buffer_filledfunction cx231xx_isoc_copyfunction cx231xx_bulk_copyfunction buffer_queuefunction return_all_buffersfunction start_streamingfunction stop_streamingfunction vidioc_g_pixelaspectfunction vidioc_g_selectionfunction vidioc_g_std
Annotated Snippet
if (count++ > 100) {
dprintk(3, "ERROR: Timeout - gpio=%x\n", gpio);
return -EIO;
}
}
return 0;
}
static int mc417_register_write(struct cx231xx *dev, u16 address, u32 value)
{
u32 temp;
int status = 0;
temp = 0x82 | MCI_REGISTER_DATA_BYTE0 | ((value & 0x000000FF) << 8);
temp = temp << 10;
status = set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
if (status < 0)
return status;
temp = temp | (0x05 << 10);
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
/*write data byte 1;*/
temp = 0x82 | MCI_REGISTER_DATA_BYTE1 | (value & 0x0000FF00);
temp = temp << 10;
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
temp = temp | (0x05 << 10);
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
/*write data byte 2;*/
temp = 0x82 | MCI_REGISTER_DATA_BYTE2 | ((value & 0x00FF0000) >> 8);
temp = temp << 10;
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
temp = temp | (0x05 << 10);
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
/*write data byte 3;*/
temp = 0x82 | MCI_REGISTER_DATA_BYTE3 | ((value & 0xFF000000) >> 16);
temp = temp << 10;
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
temp = temp | (0x05 << 10);
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
/*write address byte 0;*/
temp = 0x82 | MCI_REGISTER_ADDRESS_BYTE0 | ((address & 0x000000FF) << 8);
temp = temp << 10;
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
temp = temp | (0x05 << 10);
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
/*write address byte 1;*/
temp = 0x82 | MCI_REGISTER_ADDRESS_BYTE1 | (address & 0x0000FF00);
temp = temp << 10;
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
temp = temp | (0x05 << 10);
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
/*Write that the mode is write.*/
temp = 0x82 | MCI_REGISTER_MODE | MCI_MODE_REGISTER_WRITE;
temp = temp << 10;
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
temp = temp | (0x05 << 10);
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
return wait_for_mci_complete(dev);
}
static int mc417_register_read(struct cx231xx *dev, u16 address, u32 *value)
{
/*write address byte 0;*/
u32 temp;
u32 return_value = 0;
int ret = 0;
temp = 0x82 | MCI_REGISTER_ADDRESS_BYTE0 | ((address & 0x00FF) << 8);
temp = temp << 10;
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
temp = temp | ((0x05) << 10);
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
/*write address byte 1;*/
temp = 0x82 | MCI_REGISTER_ADDRESS_BYTE1 | (address & 0xFF00);
temp = temp << 10;
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
temp = temp | ((0x05) << 10);
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
/*write that the mode is read;*/
temp = 0x82 | MCI_REGISTER_MODE | MCI_MODE_REGISTER_READ;
temp = temp << 10;
set_itvc_reg(dev, ITVC_WRITE_DIR, temp);
Annotation
- Immediate include surface: `cx231xx.h`, `linux/module.h`, `linux/moduleparam.h`, `linux/init.h`, `linux/fs.h`, `linux/delay.h`, `linux/device.h`, `linux/firmware.h`.
- Detected declarations: `enum cx231xx_capture_type`, `enum cx231xx_capture_bits`, `enum cx231xx_capture_end`, `enum cx231xx_framerate`, `enum cx231xx_stream_port`, `enum cx231xx_data_xfer_status`, `enum cx231xx_picture_mask`, `enum cx231xx_vbi_mode_bits`, `enum cx231xx_vbi_insertion_bits`, `enum cx231xx_dma_unit`.
- 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.