drivers/media/pci/bt8xx/dst.c
Source file repositories/reference/linux-study-clean/drivers/media/pci/bt8xx/dst.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/pci/bt8xx/dst.c- Extension
.c- Size
- 46679 bytes
- Lines
- 1840
- Domain
- Driver Families
- Bucket
- drivers/media
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- 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/kernel.hlinux/module.hlinux/init.hlinux/string.hlinux/slab.hlinux/vmalloc.hlinux/delay.hasm/div64.hmedia/dvb_frontend.hdst_priv.hdst_common.h
Detected Declarations
function dst_packsizefunction dst_gpio_outbfunction dst_gpio_inbfunction rdc_reset_statefunction rdc_8820_resetfunction dst_pio_enablefunction dst_pio_disablefunction dst_wait_dst_readyfunction dst_error_recoveryfunction dst_error_bailoutfunction dst_comm_initfunction write_dstfunction read_dstfunction dst_set_polarizationfunction dst_set_freqfunction dst_set_bandwidthfunction dst_set_inversionfunction dst_set_fecfunction dst_get_fecfunction dst_set_symbolratefunction dst_set_modulationfunction dst_get_modulationfunction dst_check_sumfunction dst_type_flags_printfunction dst_type_printfunction dst_get_macfunction dst_fw_verfunction dst_card_typefunction dst_get_vendorfunction debug_dst_bufferfunction dst_check_stv0299function dst_check_mb86a15function dst_get_tuner_infofunction dst_get_device_idfunction dst_probefunction dst_commandfunction dst_get_signalfunction dst_tone_power_cmdfunction dst_get_tunafunction dst_write_tunafunction dst_set_diseqcfunction dst_set_voltagefunction dst_set_tonefunction dst_send_burstfunction bt8xx_dst_initfunction dst_read_statusfunction dst_read_signal_strengthfunction dst_read_snr
Annotated Snippet
if (dst_gpio_inb(state, &reply) < 0) {
pr_err("dst_gpio_inb ERROR !\n");
return -1;
}
if ((reply & RDC_8820_PIO_0_ENABLE) == 0) {
dprintk(2, "dst wait ready after %d\n", i);
return 1;
}
msleep(10);
}
dprintk(1, "dst wait NOT ready after %d\n", i);
return 0;
}
EXPORT_SYMBOL(dst_wait_dst_ready);
int dst_error_recovery(struct dst_state *state)
{
dprintk(1, "Trying to return from previous errors.\n");
dst_pio_disable(state);
msleep(10);
dst_pio_enable(state);
msleep(10);
return 0;
}
EXPORT_SYMBOL(dst_error_recovery);
int dst_error_bailout(struct dst_state *state)
{
dprintk(2, "Trying to bailout from previous error.\n");
rdc_8820_reset(state);
dst_pio_disable(state);
msleep(10);
return 0;
}
EXPORT_SYMBOL(dst_error_bailout);
int dst_comm_init(struct dst_state *state)
{
dprintk(2, "Initializing DST.\n");
if ((dst_pio_enable(state)) < 0) {
pr_err("PIO Enable Failed\n");
return -1;
}
if ((rdc_reset_state(state)) < 0) {
pr_err("RDC 8820 State RESET Failed.\n");
return -1;
}
if (state->type_flags & DST_TYPE_HAS_FW_1)
msleep(100);
else
msleep(5);
return 0;
}
EXPORT_SYMBOL(dst_comm_init);
int write_dst(struct dst_state *state, u8 *data, u8 len)
{
struct i2c_msg msg = {
.addr = state->config->demod_address,
.flags = 0,
.buf = data,
.len = len
};
int err;
u8 cnt;
dprintk(1, "writing [ %*ph ]\n", len, data);
for (cnt = 0; cnt < 2; cnt++) {
if ((err = i2c_transfer(state->i2c, &msg, 1)) < 0) {
dprintk(2, "_write_dst error (err == %i, len == 0x%02x, b0 == 0x%02x)\n",
err, len, data[0]);
dst_error_recovery(state);
continue;
} else
break;
}
if (cnt >= 2) {
dprintk(2, "RDC 8820 RESET\n");
dst_error_bailout(state);
return -1;
}
return 0;
Annotation
- Immediate include surface: `linux/kernel.h`, `linux/module.h`, `linux/init.h`, `linux/string.h`, `linux/slab.h`, `linux/vmalloc.h`, `linux/delay.h`, `asm/div64.h`.
- Detected declarations: `function dst_packsize`, `function dst_gpio_outb`, `function dst_gpio_inb`, `function rdc_reset_state`, `function rdc_8820_reset`, `function dst_pio_enable`, `function dst_pio_disable`, `function dst_wait_dst_ready`, `function dst_error_recovery`, `function dst_error_bailout`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: integration 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.