sound/pci/emu10k1/emumixer.c
Source file repositories/reference/linux-study-clean/sound/pci/emu10k1/emumixer.c
File Facts
- System
- Linux kernel
- Corpus path
sound/pci/emu10k1/emumixer.c- Extension
.c- Size
- 70865 bytes
- Lines
- 2377
- Domain
- Driver Families
- Bucket
- sound/pci
- 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
linux/time.hlinux/init.hlinux/string.hsound/core.hsound/emu10k1.hlinux/delay.hsound/tlv.hp17v.h
Detected Declarations
struct snd_emu1010_routing_infostruct snd_emu1010_pads_infostruct snd_emu1010_clock_infofunction add_ctlsfunction snd_emu10k1_spdif_infofunction snd_emu10k1_spdif_getfunction snd_emu10k1_spdif_get_maskfunction emu1010_idxfunction snd_emu1010_output_source_applyfunction snd_emu1010_input_source_applyfunction snd_emu1010_apply_sourcesfunction emu1010_map_sourcefunction snd_emu1010_input_output_source_infofunction snd_emu1010_output_source_getfunction snd_emu1010_output_source_putfunction snd_emu1010_input_source_getfunction snd_emu1010_input_source_putfunction add_emu1010_source_mixersfunction snd_emu1010_adc_pads_getfunction snd_emu1010_adc_pads_putfunction snd_emu1010_dac_pads_getfunction snd_emu1010_dac_pads_putfunction snd_emu1010_clock_source_infofunction snd_emu1010_clock_source_getfunction snd_emu1010_clock_source_putfunction snd_emu1010_clock_fallback_infofunction snd_emu1010_clock_fallback_getfunction snd_emu1010_clock_fallback_putfunction snd_emu1010_optical_out_infofunction snd_emu1010_optical_out_getfunction snd_emu1010_optical_out_putfunction snd_emu1010_optical_in_infofunction snd_emu1010_optical_in_getfunction snd_emu1010_optical_in_putfunction snd_audigy_i2c_capture_source_infofunction snd_audigy_i2c_capture_source_getfunction snd_audigy_i2c_capture_source_putfunction scoped_guardfunction snd_audigy_i2c_volume_infofunction snd_audigy_i2c_volume_getfunction snd_audigy_i2c_volume_putfunction snd_audigy_spdif_output_rate_infofunction snd_audigy_spdif_output_rate_getfunction snd_audigy_spdif_output_rate_putfunction snd_emu10k1_spdif_putfunction update_emu10k1_fxrtfunction update_emu10k1_send_volumefunction snd_emu10k1_send_routing_info
Annotated Snippet
struct snd_emu1010_routing_info {
const char * const *src_texts;
const char * const *out_texts;
const unsigned short *src_regs;
const unsigned short *out_regs;
const unsigned short *in_regs;
const unsigned short *out_dflts;
const unsigned short *in_dflts;
unsigned n_srcs;
unsigned n_outs;
unsigned n_ins;
};
static const struct snd_emu1010_routing_info emu1010_routing_info[] = {
{
/* rev1 1010 */
.src_regs = emu1010_src_regs,
.src_texts = emu1010_src_texts,
.n_srcs = ARRAY_SIZE(emu1010_src_texts),
.out_dflts = emu1010_output_dflt,
.out_regs = emu1010_output_dst,
.out_texts = emu1010_output_texts,
.n_outs = ARRAY_SIZE(emu1010_output_dst),
.in_dflts = emu1010_input_dflt,
.in_regs = emu1010_input_dst,
.n_ins = ARRAY_SIZE(emu1010_input_dst),
},
{
/* rev2 1010 */
.src_regs = emu1010b_src_regs,
.src_texts = emu1010b_src_texts,
.n_srcs = ARRAY_SIZE(emu1010b_src_texts),
.out_dflts = emu1010b_output_dflt,
.out_regs = emu1010b_output_dst,
.out_texts = snd_emu1010b_output_texts,
.n_outs = ARRAY_SIZE(emu1010b_output_dst),
.in_dflts = emu1010_input_dflt,
.in_regs = emu1010_input_dst,
.n_ins = ARRAY_SIZE(emu1010_input_dst) - 6,
},
{
/* 1616(m) cardbus */
.src_regs = emu1616_src_regs,
.src_texts = emu1616_src_texts,
.n_srcs = ARRAY_SIZE(emu1616_src_texts),
.out_dflts = emu1616_output_dflt,
.out_regs = emu1616_output_dst,
.out_texts = snd_emu1616_output_texts,
.n_outs = ARRAY_SIZE(emu1616_output_dst),
.in_dflts = emu1010_input_dflt,
.in_regs = emu1010_input_dst,
.n_ins = ARRAY_SIZE(emu1010_input_dst) - 6,
},
{
/* 0404 */
.src_regs = emu0404_src_regs,
.src_texts = emu0404_src_texts,
.n_srcs = ARRAY_SIZE(emu0404_src_texts),
.out_dflts = emu0404_output_dflt,
.out_regs = emu0404_output_dst,
.out_texts = snd_emu0404_output_texts,
.n_outs = ARRAY_SIZE(emu0404_output_dflt),
.in_dflts = emu0404_input_dflt,
.in_regs = emu1010_input_dst,
.n_ins = ARRAY_SIZE(emu1010_input_dst) - 6,
},
};
static unsigned emu1010_idx(struct snd_emu10k1 *emu)
{
return emu->card_capabilities->emu_model - 1;
}
static void snd_emu1010_output_source_apply(struct snd_emu10k1 *emu,
int channel, int src)
{
const struct snd_emu1010_routing_info *emu_ri =
&emu1010_routing_info[emu1010_idx(emu)];
snd_emu1010_fpga_link_dst_src_write(emu,
emu_ri->out_regs[channel], emu_ri->src_regs[src]);
}
Annotation
- Immediate include surface: `linux/time.h`, `linux/init.h`, `linux/string.h`, `sound/core.h`, `sound/emu10k1.h`, `linux/delay.h`, `sound/tlv.h`, `p17v.h`.
- Detected declarations: `struct snd_emu1010_routing_info`, `struct snd_emu1010_pads_info`, `struct snd_emu1010_clock_info`, `function add_ctls`, `function snd_emu10k1_spdif_info`, `function snd_emu10k1_spdif_get`, `function snd_emu10k1_spdif_get_mask`, `function emu1010_idx`, `function snd_emu1010_output_source_apply`, `function snd_emu1010_input_source_apply`.
- Atlas domain: Driver Families / sound/pci.
- 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.