drivers/media/dvb-frontends/cxd2880/cxd2880_tnrdmd_dvbt2_mon.c
Source file repositories/reference/linux-study-clean/drivers/media/dvb-frontends/cxd2880/cxd2880_tnrdmd_dvbt2_mon.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/dvb-frontends/cxd2880/cxd2880_tnrdmd_dvbt2_mon.c- Extension
.c- Size
- 39659 bytes
- Lines
- 1879
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
cxd2880_tnrdmd_mon.hcxd2880_tnrdmd_dvbt2.hcxd2880_tnrdmd_dvbt2_mon.hlinux/int_log.h
Detected Declarations
function cxd2880_tnrdmd_dvbt2_mon_sync_statfunction cxd2880_tnrdmd_dvbt2_mon_sync_stat_subfunction cxd2880_tnrdmd_dvbt2_mon_carrier_offsetfunction cxd2880_tnrdmd_dvbt2_mon_carrier_offset_subfunction cxd2880_tnrdmd_dvbt2_mon_l1_prefunction cxd2880_tnrdmd_dvbt2_mon_versionfunction cxd2880_tnrdmd_dvbt2_mon_ofdmfunction cxd2880_tnrdmd_dvbt2_mon_data_plpsfunction cxd2880_tnrdmd_dvbt2_mon_active_plpfunction cxd2880_tnrdmd_dvbt2_mon_data_plp_errorfunction cxd2880_tnrdmd_dvbt2_mon_l1_changefunction cxd2880_tnrdmd_dvbt2_mon_l1_postfunction cxd2880_tnrdmd_dvbt2_mon_bbheaderfunction cxd2880_tnrdmd_dvbt2_mon_in_bandb_ts_ratefunction cxd2880_tnrdmd_dvbt2_mon_spectrum_sensefunction dvbt2_read_snr_regfunction dvbt2_calc_snrfunction cxd2880_tnrdmd_dvbt2_mon_snrfunction cxd2880_tnrdmd_dvbt2_mon_snr_diverfunction cxd2880_tnrdmd_dvbt2_mon_packet_error_numberfunction cxd2880_tnrdmd_dvbt2_mon_sampling_offsetfunction cxd2880_tnrdmd_dvbt2_mon_sampling_offset_subfunction cxd2880_tnrdmd_dvbt2_mon_qamfunction cxd2880_tnrdmd_dvbt2_mon_code_ratefunction cxd2880_tnrdmd_dvbt2_mon_profilefunction dvbt2_calc_ssifunction cxd2880_tnrdmd_dvbt2_mon_ssifunction cxd2880_tnrdmd_dvbt2_mon_ssi_sub
Annotated Snippet
if (ret) {
slvt_unfreeze_reg(tnr_dmd);
return ret;
}
if (sync_state < 5) {
slvt_unfreeze_reg(tnr_dmd);
return -EAGAIN;
}
} else {
slvt_unfreeze_reg(tnr_dmd);
return -EAGAIN;
}
}
ret = cxd2880_tnrdmd_dvbt2_mon_profile(tnr_dmd, &profile);
if (ret) {
slvt_unfreeze_reg(tnr_dmd);
return ret;
}
ret = tnr_dmd->io->write_reg(tnr_dmd->io,
CXD2880_IO_TGT_DMD,
0x00, 0x0b);
if (ret) {
slvt_unfreeze_reg(tnr_dmd);
return ret;
}
ret = tnr_dmd->io->read_regs(tnr_dmd->io,
CXD2880_IO_TGT_DMD,
0x61, data, sizeof(data));
if (ret) {
slvt_unfreeze_reg(tnr_dmd);
return ret;
}
slvt_unfreeze_reg(tnr_dmd);
l1_pre->type = (enum cxd2880_dvbt2_l1pre_type)data[0];
l1_pre->bw_ext = data[1] & 0x01;
l1_pre->s1 = (enum cxd2880_dvbt2_s1)(data[2] & 0x07);
l1_pre->s2 = data[3] & 0x0f;
l1_pre->l1_rep = data[4] & 0x01;
l1_pre->gi = (enum cxd2880_dvbt2_guard)(data[5] & 0x07);
l1_pre->papr = (enum cxd2880_dvbt2_papr)(data[6] & 0x0f);
l1_pre->mod =
(enum cxd2880_dvbt2_l1post_constell)(data[7] & 0x0f);
l1_pre->cr = (enum cxd2880_dvbt2_l1post_cr)(data[8] & 0x03);
l1_pre->fec =
(enum cxd2880_dvbt2_l1post_fec_type)(data[9] & 0x03);
l1_pre->l1_post_size = (data[10] & 0x03) << 16;
l1_pre->l1_post_size |= (data[11]) << 8;
l1_pre->l1_post_size |= (data[12]);
l1_pre->l1_post_info_size = (data[13] & 0x03) << 16;
l1_pre->l1_post_info_size |= (data[14]) << 8;
l1_pre->l1_post_info_size |= (data[15]);
l1_pre->pp = (enum cxd2880_dvbt2_pp)(data[16] & 0x0f);
l1_pre->tx_id_availability = data[17];
l1_pre->cell_id = (data[18] << 8);
l1_pre->cell_id |= (data[19]);
l1_pre->network_id = (data[20] << 8);
l1_pre->network_id |= (data[21]);
l1_pre->sys_id = (data[22] << 8);
l1_pre->sys_id |= (data[23]);
l1_pre->num_frames = data[24];
l1_pre->num_symbols = (data[25] & 0x0f) << 8;
l1_pre->num_symbols |= data[26];
l1_pre->regen = data[27] & 0x07;
l1_pre->post_ext = data[28] & 0x01;
l1_pre->num_rf_freqs = data[29] & 0x07;
l1_pre->rf_idx = data[30] & 0x07;
version = (data[31] & 0x03) << 2;
version |= (data[32] & 0xc0) >> 6;
l1_pre->t2_version = (enum cxd2880_dvbt2_version)version;
l1_pre->l1_post_scrambled = (data[32] & 0x20) >> 5;
l1_pre->t2_base_lite = (data[32] & 0x10) >> 4;
l1_pre->crc32 = (data[33] << 24);
l1_pre->crc32 |= (data[34] << 16);
l1_pre->crc32 |= (data[35] << 8);
l1_pre->crc32 |= data[36];
if (profile == CXD2880_DVBT2_PROFILE_BASE) {
switch ((l1_pre->s2 >> 1)) {
case CXD2880_DVBT2_BASE_S2_M1K_G_ANY:
l1_pre->fft_mode = CXD2880_DVBT2_M1K;
break;
case CXD2880_DVBT2_BASE_S2_M2K_G_ANY:
l1_pre->fft_mode = CXD2880_DVBT2_M2K;
break;
case CXD2880_DVBT2_BASE_S2_M4K_G_ANY:
Annotation
- Immediate include surface: `cxd2880_tnrdmd_mon.h`, `cxd2880_tnrdmd_dvbt2.h`, `cxd2880_tnrdmd_dvbt2_mon.h`, `linux/int_log.h`.
- Detected declarations: `function cxd2880_tnrdmd_dvbt2_mon_sync_stat`, `function cxd2880_tnrdmd_dvbt2_mon_sync_stat_sub`, `function cxd2880_tnrdmd_dvbt2_mon_carrier_offset`, `function cxd2880_tnrdmd_dvbt2_mon_carrier_offset_sub`, `function cxd2880_tnrdmd_dvbt2_mon_l1_pre`, `function cxd2880_tnrdmd_dvbt2_mon_version`, `function cxd2880_tnrdmd_dvbt2_mon_ofdm`, `function cxd2880_tnrdmd_dvbt2_mon_data_plps`, `function cxd2880_tnrdmd_dvbt2_mon_active_plp`, `function cxd2880_tnrdmd_dvbt2_mon_data_plp_error`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: source implementation candidate.
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.