drivers/media/dvb-frontends/si2165.c
Source file repositories/reference/linux-study-clean/drivers/media/dvb-frontends/si2165.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/dvb-frontends/si2165.c- Extension
.c- Size
- 29770 bytes
- Lines
- 1304
- 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.
- 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/delay.hlinux/errno.hlinux/init.hlinux/kernel.hlinux/module.hlinux/string.hlinux/slab.hlinux/firmware.hlinux/regmap.hmedia/dvb_frontend.hlinux/int_log.hsi2165_priv.hsi2165.h
Detected Declarations
struct si2165_statestruct si2165_reg_value_pairfunction si2165_writefunction si2165_readfunction si2165_readreg8function si2165_readreg16function si2165_readreg24function si2165_writereg8function si2165_writereg16function si2165_writereg24function si2165_writereg32function si2165_writereg_mask8function si2165_write_reg_listfunction si2165_get_tune_settingsfunction si2165_init_pllfunction si2165_adjust_pll_divlfunction si2165_get_fe_clkfunction si2165_wait_init_donefunction si2165_upload_firmware_blockfunction si2165_upload_firmwarefunction si2165_initfunction si2165_sleepfunction si2165_read_statusfunction si2165_read_snrfunction si2165_read_berfunction si2165_set_oversampfunction si2165_set_if_freq_shiftfunction si2165_set_frontend_dvbtfunction si2165_set_frontend_dvbcfunction si2165_set_frontendfunction si2165_probefunction si2165_remove
Annotated Snippet
struct si2165_state {
struct i2c_client *client;
struct regmap *regmap;
struct dvb_frontend fe;
struct si2165_config config;
u8 chip_revcode;
u8 chip_type;
/* calculated by xtal and div settings */
u32 fvco_hz;
u32 sys_clk;
u32 adc_clk;
/* DVBv3 stats */
u64 ber_prev;
bool has_dvbc;
bool has_dvbt;
bool firmware_loaded;
};
static int si2165_write(struct si2165_state *state, const u16 reg,
const u8 *src, const int count)
{
int ret;
dev_dbg(&state->client->dev, "i2c write: reg: 0x%04x, data: %*ph\n",
reg, count, src);
ret = regmap_bulk_write(state->regmap, reg, src, count);
if (ret)
dev_err(&state->client->dev, "%s: ret == %d\n", __func__, ret);
return ret;
}
static int si2165_read(struct si2165_state *state,
const u16 reg, u8 *val, const int count)
{
int ret = regmap_bulk_read(state->regmap, reg, val, count);
if (ret) {
dev_err(&state->client->dev, "%s: error (addr %02x reg %04x error (ret == %i)\n",
__func__, state->config.i2c_addr, reg, ret);
return ret;
}
dev_dbg(&state->client->dev, "i2c read: reg: 0x%04x, data: %*ph\n",
reg, count, val);
return 0;
}
static int si2165_readreg8(struct si2165_state *state,
const u16 reg, u8 *val)
{
unsigned int val_tmp;
int ret = regmap_read(state->regmap, reg, &val_tmp);
*val = (u8)val_tmp;
dev_dbg(&state->client->dev, "reg read: R(0x%04x)=0x%02x\n", reg, *val);
return ret;
}
static int si2165_readreg16(struct si2165_state *state,
const u16 reg, u16 *val)
{
u8 buf[2];
int ret = si2165_read(state, reg, buf, 2);
*val = buf[0] | buf[1] << 8;
dev_dbg(&state->client->dev, "reg read: R(0x%04x)=0x%04x\n", reg, *val);
return ret;
}
static int si2165_readreg24(struct si2165_state *state,
const u16 reg, u32 *val)
{
u8 buf[3];
int ret = si2165_read(state, reg, buf, 3);
*val = buf[0] | buf[1] << 8 | buf[2] << 16;
dev_dbg(&state->client->dev, "reg read: R(0x%04x)=0x%06x\n", reg, *val);
return ret;
}
Annotation
- Immediate include surface: `linux/delay.h`, `linux/errno.h`, `linux/init.h`, `linux/kernel.h`, `linux/module.h`, `linux/string.h`, `linux/slab.h`, `linux/firmware.h`.
- Detected declarations: `struct si2165_state`, `struct si2165_reg_value_pair`, `function si2165_write`, `function si2165_read`, `function si2165_readreg8`, `function si2165_readreg16`, `function si2165_readreg24`, `function si2165_writereg8`, `function si2165_writereg16`, `function si2165_writereg24`.
- 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.