drivers/media/usb/ttusb-dec/ttusbdecfe.c
Source file repositories/reference/linux-study-clean/drivers/media/usb/ttusb-dec/ttusbdecfe.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/usb/ttusb-dec/ttusbdecfe.c- Extension
.c- Size
- 7241 bytes
- Lines
- 290
- 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.
- 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
media/dvb_frontend.httusbdecfe.h
Detected Declarations
struct ttusbdecfe_statefunction ttusbdecfe_dvbs_read_statusfunction ttusbdecfe_dvbt_read_statusfunction ttusbdecfe_dvbt_set_frontendfunction ttusbdecfe_dvbt_get_tune_settingsfunction ttusbdecfe_dvbs_set_frontendfunction ttusbdecfe_dvbs_diseqc_send_master_cmdfunction ttusbdecfe_dvbs_set_tonefunction ttusbdecfe_dvbs_set_voltagefunction ttusbdecfe_releasefunction ttusbdecfe_dvbt_attachfunction ttusbdecfe_dvbs_attachexport ttusbdecfe_dvbt_attachexport ttusbdecfe_dvbs_attach
Annotated Snippet
struct ttusbdecfe_state {
/* configuration settings */
const struct ttusbdecfe_config* config;
struct dvb_frontend frontend;
u8 hi_band;
u8 voltage;
};
static int ttusbdecfe_dvbs_read_status(struct dvb_frontend *fe,
enum fe_status *status)
{
*status = FE_HAS_SIGNAL | FE_HAS_VITERBI |
FE_HAS_SYNC | FE_HAS_CARRIER | FE_HAS_LOCK;
return 0;
}
static int ttusbdecfe_dvbt_read_status(struct dvb_frontend *fe,
enum fe_status *status)
{
struct ttusbdecfe_state* state = fe->demodulator_priv;
u8 b[] = { 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00 };
u8 result[4];
int len, ret;
*status=0;
ret=state->config->send_command(fe, 0x73, sizeof(b), b, &len, result);
if(ret)
return ret;
if(len != 4) {
printk(KERN_ERR "%s: unexpected reply\n", __func__);
return -EIO;
}
switch(result[3]) {
case 1: /* not tuned yet */
case 2: /* no signal/no lock*/
break;
case 3: /* signal found and locked*/
*status = FE_HAS_SIGNAL | FE_HAS_VITERBI |
FE_HAS_SYNC | FE_HAS_CARRIER | FE_HAS_LOCK;
break;
case 4:
*status = FE_TIMEDOUT;
break;
default:
pr_info("%s: returned unknown value: %d\n",
__func__, result[3]);
return -EIO;
}
return 0;
}
static int ttusbdecfe_dvbt_set_frontend(struct dvb_frontend *fe)
{
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
struct ttusbdecfe_state *state = fe->demodulator_priv;
u8 b[] = { 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0xff,
0x00, 0x00, 0x00, 0xff };
__be32 freq = htonl(p->frequency / 1000);
memcpy(&b[4], &freq, sizeof (u32));
state->config->send_command(fe, 0x71, sizeof(b), b, NULL, NULL);
return 0;
}
static int ttusbdecfe_dvbt_get_tune_settings(struct dvb_frontend* fe,
struct dvb_frontend_tune_settings* fesettings)
{
fesettings->min_delay_ms = 1500;
/* Drift compensation makes no sense for DVB-T */
fesettings->step_size = 0;
fesettings->max_drift = 0;
return 0;
}
static int ttusbdecfe_dvbs_set_frontend(struct dvb_frontend *fe)
{
Annotation
- Immediate include surface: `media/dvb_frontend.h`, `ttusbdecfe.h`.
- Detected declarations: `struct ttusbdecfe_state`, `function ttusbdecfe_dvbs_read_status`, `function ttusbdecfe_dvbt_read_status`, `function ttusbdecfe_dvbt_set_frontend`, `function ttusbdecfe_dvbt_get_tune_settings`, `function ttusbdecfe_dvbs_set_frontend`, `function ttusbdecfe_dvbs_diseqc_send_master_cmd`, `function ttusbdecfe_dvbs_set_tone`, `function ttusbdecfe_dvbs_set_voltage`, `function ttusbdecfe_release`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: integration 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.