sound/firewire/motu/motu-protocol-v1.c
Source file repositories/reference/linux-study-clean/sound/firewire/motu/motu-protocol-v1.c
File Facts
- System
- Linux kernel
- Corpus path
sound/firewire/motu/motu-protocol-v1.c- Extension
.c- Size
- 13468 bytes
- Lines
- 468
- Domain
- Driver Families
- Bucket
- sound/firewire
- 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
motu.hlinux/delay.h
Detected Declarations
function parse_clock_rate_828function get_clock_rate_828function parse_clock_rate_896function get_clock_rate_896function snd_motu_protocol_v1_get_clock_ratefunction set_clock_rate_828function set_clock_rate_896function snd_motu_protocol_v1_set_clock_ratefunction get_clock_source_828function get_clock_source_896function snd_motu_protocol_v1_get_clock_sourcefunction switch_fetching_mode_828function switch_fetching_mode_896function snd_motu_protocol_v1_switch_fetching_modefunction detect_packet_formats_828function detect_packet_formats_896function snd_motu_protocol_v1_cache_packet_formats
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-only
// motu-protocol-v1.c - a part of driver for MOTU FireWire series
//
// Copyright (c) 2021 Takashi Sakamoto <o-takashi@sakamocchi.jp>
#include "motu.h"
#include <linux/delay.h>
// Status register for MOTU 828 (0x'ffff'f000'0b00).
//
// 0xffff0000: ISOC_COMM_CONTROL_MASK in motu-stream.c.
// 0x00008000: mode of optical input interface.
// 0x00008000: for S/PDIF signal.
// 0x00000000: disabled or for ADAT signal.
// 0x00004000: mode of optical output interface.
// 0x00004000: for S/PDIF signal.
// 0x00000000: disabled or for ADAT signal.
// 0x00003f00: monitor input mode.
// 0x00000800: analog-1/2
// 0x00001a00: analog-3/4
// 0x00002c00: analog-5/6
// 0x00003e00: analog-7/8
// 0x00000000: analog-1
// 0x00000900: analog-2
// 0x00001200: analog-3
// 0x00001b00: analog-4
// 0x00002400: analog-5
// 0x00002d00: analog-6
// 0x00003600: analog-7
// 0x00003f00: analog-8
// 0x00000080: enable stream input.
// 0x00000040: disable monitor input.
// 0x00000008: enable main out.
// 0x00000004: rate of sampling clock.
// 0x00000004: 48.0 kHz
// 0x00000000: 44.1 kHz
// 0x00000023: source of sampling clock.
// 0x00000003: source packet header (SPH)
// 0x00000002: S/PDIF on optical/coaxial interface.
// 0x00000021: ADAT on optical interface
// 0x00000001: ADAT on Dsub 9pin
// 0x00000000: internal
#define CLK_828_STATUS_OFFSET 0x0b00
#define CLK_828_STATUS_MASK 0x0000ffff
#define CLK_828_STATUS_FLAG_OPT_IN_IFACE_IS_SPDIF 0x00008000
#define CLK_828_STATUS_FLAG_OPT_OUT_IFACE_IS_SPDIF 0x00004000
#define CLK_828_STATUS_FLAG_FETCH_PCM_FRAMES 0x00000080
#define CLK_828_STATUS_FLAG_ENABLE_OUTPUT 0x00000008
#define CLK_828_STATUS_FLAG_RATE_48000 0x00000004
#define CLK_828_STATUS_MASK_SRC 0x00000023
#define CLK_828_STATUS_FLAG_SRC_ADAT_ON_OPT 0x00000021
#define CLK_828_STATUS_FLAG_SRC_SPH 0x00000003
#define CLK_828_STATUS_FLAG_SRC_SPDIF 0x00000002
#define CLK_828_STATUS_FLAG_SRC_ADAT_ON_DSUB 0x00000001
#define CLK_828_STATUS_FLAG_SRC_INTERNAL 0x00000000
// Status register for MOTU 896 (0x'ffff'f000'0b14).
//
// 0xf0000000: enable physical and stream input to DAC.
// 0x80000000: disable
// 0x40000000: disable
// 0x20000000: enable (prior to the other bits)
// 0x10000000: disable
// 0x00000000: disable
// 0x08000000: speed of word clock signal output on BNC interface.
// 0x00000000: force to low rate (44.1/48.0 kHz).
// 0x08000000: follow to system clock.
// 0x04000000: something relevant to clock.
// 0x03000000: enable output.
// 0x02000000: enabled irreversibly once standing unless the device voluntarily disables it.
// 0x01000000: enabled irreversibly once standing unless the device voluntarily disables it.
// 0x00ffff00: monitor input mode.
// 0x00000000: disabled
// 0x00004800: analog-1/2
// 0x00005a00: analog-3/4
// 0x00006c00: analog-5/6
// 0x00007e00: analog-7/8
// 0x00104800: AES/EBU-1/2
// 0x00004000: analog-1
// 0x00004900: analog-2
// 0x00005200: analog-3
// 0x00005b00: analog-4
// 0x00006400: analog-5
// 0x00006d00: analog-6
// 0x00007600: analog-7
// 0x00007f00: analog-8
// 0x00104000: AES/EBU-1
// 0x00104900: AES/EBU-2
Annotation
- Immediate include surface: `motu.h`, `linux/delay.h`.
- Detected declarations: `function parse_clock_rate_828`, `function get_clock_rate_828`, `function parse_clock_rate_896`, `function get_clock_rate_896`, `function snd_motu_protocol_v1_get_clock_rate`, `function set_clock_rate_828`, `function set_clock_rate_896`, `function snd_motu_protocol_v1_set_clock_rate`, `function get_clock_source_828`, `function get_clock_source_896`.
- Atlas domain: Driver Families / sound/firewire.
- 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.