Lines Matching +full:reg +full:- +full:data

1 // SPDX-License-Identifier: GPL-2.0-only
3 * motu-protocol-v3.c - a part of driver for MOTU FireWire series
5 * Copyright (c) 2015-2017 Takashi Sakamoto <o-takashi@sakamocchi.jp>
39 __be32 reg; in snd_motu_protocol_v3_get_clock_rate() local
40 u32 data; in snd_motu_protocol_v3_get_clock_rate() local
43 err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, &reg, in snd_motu_protocol_v3_get_clock_rate()
44 sizeof(reg)); in snd_motu_protocol_v3_get_clock_rate()
47 data = be32_to_cpu(reg); in snd_motu_protocol_v3_get_clock_rate()
49 data = (data & V3_CLOCK_RATE_MASK) >> V3_CLOCK_RATE_SHIFT; in snd_motu_protocol_v3_get_clock_rate()
50 if (data >= ARRAY_SIZE(snd_motu_clock_rates)) in snd_motu_protocol_v3_get_clock_rate()
51 return -EIO; in snd_motu_protocol_v3_get_clock_rate()
53 *rate = snd_motu_clock_rates[data]; in snd_motu_protocol_v3_get_clock_rate()
61 __be32 reg; in snd_motu_protocol_v3_set_clock_rate() local
62 u32 data; in snd_motu_protocol_v3_set_clock_rate() local
71 return -EINVAL; in snd_motu_protocol_v3_set_clock_rate()
73 err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, &reg, in snd_motu_protocol_v3_set_clock_rate()
74 sizeof(reg)); in snd_motu_protocol_v3_set_clock_rate()
77 data = be32_to_cpu(reg); in snd_motu_protocol_v3_set_clock_rate()
79 data &= ~(V3_CLOCK_RATE_MASK | V3_FETCH_PCM_FRAMES); in snd_motu_protocol_v3_set_clock_rate()
80 data |= i << V3_CLOCK_RATE_SHIFT; in snd_motu_protocol_v3_set_clock_rate()
82 need_to_wait = data != be32_to_cpu(reg); in snd_motu_protocol_v3_set_clock_rate()
84 reg = cpu_to_be32(data); in snd_motu_protocol_v3_set_clock_rate()
85 err = snd_motu_transaction_write(motu, V3_CLOCK_STATUS_OFFSET, &reg, in snd_motu_protocol_v3_set_clock_rate()
86 sizeof(reg)); in snd_motu_protocol_v3_set_clock_rate()
93 motu->msg = 0; in snd_motu_protocol_v3_set_clock_rate()
94 result = wait_event_interruptible_timeout(motu->hwdep_wait, in snd_motu_protocol_v3_set_clock_rate()
95 motu->msg & V3_MSG_FLAG_CLK_CHANGED, in snd_motu_protocol_v3_set_clock_rate()
100 return -ETIMEDOUT; in snd_motu_protocol_v3_set_clock_rate()
109 __be32 reg; in snd_motu_protocol_v3_get_clock_source() local
110 u32 data; in snd_motu_protocol_v3_get_clock_source() local
113 err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, &reg, in snd_motu_protocol_v3_get_clock_source()
114 sizeof(reg)); in snd_motu_protocol_v3_get_clock_source()
117 data = be32_to_cpu(reg) & V3_CLOCK_SOURCE_MASK; in snd_motu_protocol_v3_get_clock_source()
119 switch (data) { in snd_motu_protocol_v3_get_clock_source()
135 __be32 reg; in snd_motu_protocol_v3_get_clock_source() local
139 V3_OPT_IFACE_MODE_OFFSET, &reg, sizeof(reg)); in snd_motu_protocol_v3_get_clock_source()
142 options = be32_to_cpu(reg); in snd_motu_protocol_v3_get_clock_source()
144 if (data == V3_CLOCK_SRC_OPT_IFACE_A) { in snd_motu_protocol_v3_get_clock_source()
168 __be32 reg; in snd_motu_protocol_v3_switch_fetching_mode() local
169 u32 data; in snd_motu_protocol_v3_switch_fetching_mode() local
172 err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, &reg, in snd_motu_protocol_v3_switch_fetching_mode()
173 sizeof(reg)); in snd_motu_protocol_v3_switch_fetching_mode()
176 data = be32_to_cpu(reg); in snd_motu_protocol_v3_switch_fetching_mode()
179 data |= V3_FETCH_PCM_FRAMES; in snd_motu_protocol_v3_switch_fetching_mode()
181 data &= ~V3_FETCH_PCM_FRAMES; in snd_motu_protocol_v3_switch_fetching_mode()
183 reg = cpu_to_be32(data); in snd_motu_protocol_v3_switch_fetching_mode()
184 return snd_motu_transaction_write(motu, V3_CLOCK_STATUS_OFFSET, &reg, in snd_motu_protocol_v3_switch_fetching_mode()
185 sizeof(reg)); in snd_motu_protocol_v3_switch_fetching_mode()
188 static int detect_packet_formats_828mk3(struct snd_motu *motu, u32 data) in detect_packet_formats_828mk3() argument
190 if (data & V3_ENABLE_OPT_IN_IFACE_A) { in detect_packet_formats_828mk3()
191 if (data & V3_NO_ADAT_OPT_IN_IFACE_A) { in detect_packet_formats_828mk3()
192 motu->tx_packet_formats.pcm_chunks[0] += 4; in detect_packet_formats_828mk3()
193 motu->tx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
195 motu->tx_packet_formats.pcm_chunks[0] += 8; in detect_packet_formats_828mk3()
196 motu->tx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
200 if (data & V3_ENABLE_OPT_IN_IFACE_B) { in detect_packet_formats_828mk3()
201 if (data & V3_NO_ADAT_OPT_IN_IFACE_B) { in detect_packet_formats_828mk3()
202 motu->tx_packet_formats.pcm_chunks[0] += 4; in detect_packet_formats_828mk3()
203 motu->tx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
205 motu->tx_packet_formats.pcm_chunks[0] += 8; in detect_packet_formats_828mk3()
206 motu->tx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
210 if (data & V3_ENABLE_OPT_OUT_IFACE_A) { in detect_packet_formats_828mk3()
211 if (data & V3_NO_ADAT_OPT_OUT_IFACE_A) { in detect_packet_formats_828mk3()
212 motu->rx_packet_formats.pcm_chunks[0] += 4; in detect_packet_formats_828mk3()
213 motu->rx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
215 motu->rx_packet_formats.pcm_chunks[0] += 8; in detect_packet_formats_828mk3()
216 motu->rx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
220 if (data & V3_ENABLE_OPT_OUT_IFACE_B) { in detect_packet_formats_828mk3()
221 if (data & V3_NO_ADAT_OPT_OUT_IFACE_B) { in detect_packet_formats_828mk3()
222 motu->rx_packet_formats.pcm_chunks[0] += 4; in detect_packet_formats_828mk3()
223 motu->rx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
225 motu->rx_packet_formats.pcm_chunks[0] += 8; in detect_packet_formats_828mk3()
226 motu->rx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
235 __be32 reg; in snd_motu_protocol_v3_cache_packet_formats() local
236 u32 data; in snd_motu_protocol_v3_cache_packet_formats() local
239 motu->tx_packet_formats.pcm_byte_offset = 10; in snd_motu_protocol_v3_cache_packet_formats()
240 motu->rx_packet_formats.pcm_byte_offset = 10; in snd_motu_protocol_v3_cache_packet_formats()
242 motu->tx_packet_formats.msg_chunks = 2; in snd_motu_protocol_v3_cache_packet_formats()
243 motu->rx_packet_formats.msg_chunks = 2; in snd_motu_protocol_v3_cache_packet_formats()
245 err = snd_motu_transaction_read(motu, V3_OPT_IFACE_MODE_OFFSET, &reg, in snd_motu_protocol_v3_cache_packet_formats()
246 sizeof(reg)); in snd_motu_protocol_v3_cache_packet_formats()
249 data = be32_to_cpu(reg); in snd_motu_protocol_v3_cache_packet_formats()
251 memcpy(motu->tx_packet_formats.pcm_chunks, in snd_motu_protocol_v3_cache_packet_formats()
252 motu->spec->tx_fixed_pcm_chunks, in snd_motu_protocol_v3_cache_packet_formats()
253 sizeof(motu->tx_packet_formats.pcm_chunks)); in snd_motu_protocol_v3_cache_packet_formats()
254 memcpy(motu->rx_packet_formats.pcm_chunks, in snd_motu_protocol_v3_cache_packet_formats()
255 motu->spec->rx_fixed_pcm_chunks, in snd_motu_protocol_v3_cache_packet_formats()
256 sizeof(motu->rx_packet_formats.pcm_chunks)); in snd_motu_protocol_v3_cache_packet_formats()
258 if (motu->spec == &snd_motu_spec_828mk3_fw || motu->spec == &snd_motu_spec_828mk3_hybrid) in snd_motu_protocol_v3_cache_packet_formats()
259 return detect_packet_formats_828mk3(motu, data); in snd_motu_protocol_v3_cache_packet_formats()