sound/core/pcm_iec958.c
Source file repositories/reference/linux-study-clean/sound/core/pcm_iec958.c
File Facts
- System
- Linux kernel
- Corpus path
sound/core/pcm_iec958.c- Extension
.c- Size
- 6074 bytes
- Lines
- 214
- Domain
- Driver Families
- Bucket
- sound/core
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/export.hlinux/types.hsound/asoundef.hsound/pcm.hsound/pcm_params.hsound/pcm_iec958.h
Detected Declarations
function snd_pcm_fill_iec958_consumerfunction fill_iec958_consumerfunction snd_pcm_fill_iec958_consumerfunction snd_pcm_fill_iec958_consumer_hw_paramsfunction snd_pcm_create_iec958_consumerfunction snd_pcm_create_iec958_consumer_hw_paramsexport snd_pcm_create_iec958_consumer_defaultexport snd_pcm_fill_iec958_consumerexport snd_pcm_fill_iec958_consumer_hw_paramsexport snd_pcm_create_iec958_consumerexport snd_pcm_create_iec958_consumer_hw_params
Annotated Snippet
switch (rate) {
case 32000:
fs = IEC958_AES3_CON_FS_32000;
break;
case 44100:
fs = IEC958_AES3_CON_FS_44100;
break;
case 48000:
fs = IEC958_AES3_CON_FS_48000;
break;
case 88200:
fs = IEC958_AES3_CON_FS_88200;
break;
case 96000:
fs = IEC958_AES3_CON_FS_96000;
break;
case 176400:
fs = IEC958_AES3_CON_FS_176400;
break;
case 192000:
fs = IEC958_AES3_CON_FS_192000;
break;
default:
return -EINVAL;
}
cs[3] &= ~IEC958_AES3_CON_FS;
cs[3] |= fs;
}
if (len > 4 &&
(cs[4] & IEC958_AES4_CON_WORDLEN) == IEC958_AES4_CON_WORDLEN_NOTID) {
unsigned int ws;
switch (sample_width) {
case 16:
ws = IEC958_AES4_CON_WORDLEN_20_16;
break;
case 18:
ws = IEC958_AES4_CON_WORDLEN_22_18;
break;
case 20:
ws = IEC958_AES4_CON_WORDLEN_20_16 |
IEC958_AES4_CON_MAX_WORDLEN_24;
break;
case 24:
case 32: /* Assume 24-bit width for 32-bit samples. */
ws = IEC958_AES4_CON_WORDLEN_24_20 |
IEC958_AES4_CON_MAX_WORDLEN_24;
break;
default:
return -EINVAL;
}
cs[4] &= ~IEC958_AES4_CON_WORDLEN;
cs[4] |= ws;
}
return len;
}
/**
* snd_pcm_fill_iec958_consumer - Fill consumer format IEC958 channel status
* @runtime: pcm runtime structure with ->rate filled in
* @cs: channel status buffer, at least four bytes
* @len: length of channel status buffer
*
* Fill the unspecified bits in an IEC958 status bits array using the
* parameters of the PCM runtime @runtime.
*
* Drivers may wish to tweak the contents of the buffer after its been
* filled.
*
* Returns: length of buffer, or negative error code if something failed.
*/
int snd_pcm_fill_iec958_consumer(struct snd_pcm_runtime *runtime,
u8 *cs, size_t len)
{
return fill_iec958_consumer(runtime->rate,
snd_pcm_format_width(runtime->format),
cs, len);
}
EXPORT_SYMBOL_GPL(snd_pcm_fill_iec958_consumer);
/**
* snd_pcm_fill_iec958_consumer_hw_params - Fill consumer format IEC958 channel status
* @params: the hw_params instance for extracting rate and sample format
* @cs: channel status buffer, at least four bytes
* @len: length of channel status buffer
Annotation
- Immediate include surface: `linux/export.h`, `linux/types.h`, `sound/asoundef.h`, `sound/pcm.h`, `sound/pcm_params.h`, `sound/pcm_iec958.h`.
- Detected declarations: `function snd_pcm_fill_iec958_consumer`, `function fill_iec958_consumer`, `function snd_pcm_fill_iec958_consumer`, `function snd_pcm_fill_iec958_consumer_hw_params`, `function snd_pcm_create_iec958_consumer`, `function snd_pcm_create_iec958_consumer_hw_params`, `export snd_pcm_create_iec958_consumer_default`, `export snd_pcm_fill_iec958_consumer`, `export snd_pcm_fill_iec958_consumer_hw_params`, `export snd_pcm_create_iec958_consumer`.
- Atlas domain: Driver Families / sound/core.
- 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.