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>
33 __be32 reg; in snd_motu_protocol_v3_get_clock_rate() local
34 u32 data; in snd_motu_protocol_v3_get_clock_rate() local
37 err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, ®, in snd_motu_protocol_v3_get_clock_rate()
38 sizeof(reg)); in snd_motu_protocol_v3_get_clock_rate()
41 data = be32_to_cpu(reg); in snd_motu_protocol_v3_get_clock_rate()
43 data = (data & V3_CLOCK_RATE_MASK) >> V3_CLOCK_RATE_SHIFT; in snd_motu_protocol_v3_get_clock_rate()
44 if (data >= ARRAY_SIZE(snd_motu_clock_rates)) in snd_motu_protocol_v3_get_clock_rate()
45 return -EIO; in snd_motu_protocol_v3_get_clock_rate()
47 *rate = snd_motu_clock_rates[data]; in snd_motu_protocol_v3_get_clock_rate()
55 __be32 reg; in snd_motu_protocol_v3_set_clock_rate() local
56 u32 data; in snd_motu_protocol_v3_set_clock_rate() local
65 return -EINVAL; in snd_motu_protocol_v3_set_clock_rate()
67 err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, ®, in snd_motu_protocol_v3_set_clock_rate()
68 sizeof(reg)); in snd_motu_protocol_v3_set_clock_rate()
71 data = be32_to_cpu(reg); in snd_motu_protocol_v3_set_clock_rate()
73 data &= ~(V3_CLOCK_RATE_MASK | V3_FETCH_PCM_FRAMES); in snd_motu_protocol_v3_set_clock_rate()
74 data |= i << V3_CLOCK_RATE_SHIFT; in snd_motu_protocol_v3_set_clock_rate()
76 need_to_wait = data != be32_to_cpu(reg); in snd_motu_protocol_v3_set_clock_rate()
78 reg = cpu_to_be32(data); in snd_motu_protocol_v3_set_clock_rate()
79 err = snd_motu_transaction_write(motu, V3_CLOCK_STATUS_OFFSET, ®, in snd_motu_protocol_v3_set_clock_rate()
80 sizeof(reg)); in snd_motu_protocol_v3_set_clock_rate()
87 motu->msg = 0; in snd_motu_protocol_v3_set_clock_rate()
88 result = wait_event_interruptible_timeout(motu->hwdep_wait, in snd_motu_protocol_v3_set_clock_rate()
89 motu->msg & V3_MSG_FLAG_CLK_CHANGED, in snd_motu_protocol_v3_set_clock_rate()
94 return -ETIMEDOUT; in snd_motu_protocol_v3_set_clock_rate()
100 static int detect_clock_source_828mk3(struct snd_motu *motu, u32 data, in detect_clock_source_828mk3() argument
103 switch (data) { in detect_clock_source_828mk3()
119 __be32 reg; in detect_clock_source_828mk3() local
124 V3_OPT_IFACE_MODE_OFFSET, ®, sizeof(reg)); in detect_clock_source_828mk3()
127 options = be32_to_cpu(reg); in detect_clock_source_828mk3()
129 if (data == 0x18) { in detect_clock_source_828mk3()
151 static int v3_detect_clock_source(struct snd_motu *motu, u32 data, in v3_detect_clock_source() argument
154 switch (data) { in v3_detect_clock_source()
178 __be32 reg; in snd_motu_protocol_v3_get_clock_source() local
179 u32 data; in snd_motu_protocol_v3_get_clock_source() local
182 err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, ®, in snd_motu_protocol_v3_get_clock_source()
183 sizeof(reg)); in snd_motu_protocol_v3_get_clock_source()
186 data = be32_to_cpu(reg) & V3_CLOCK_SOURCE_MASK; in snd_motu_protocol_v3_get_clock_source()
188 if (motu->spec == &snd_motu_spec_828mk3) in snd_motu_protocol_v3_get_clock_source()
189 return detect_clock_source_828mk3(motu, data, src); in snd_motu_protocol_v3_get_clock_source()
191 return v3_detect_clock_source(motu, data, src); in snd_motu_protocol_v3_get_clock_source()
197 __be32 reg; in snd_motu_protocol_v3_switch_fetching_mode() local
198 u32 data; in snd_motu_protocol_v3_switch_fetching_mode() local
201 err = snd_motu_transaction_read(motu, V3_CLOCK_STATUS_OFFSET, ®, in snd_motu_protocol_v3_switch_fetching_mode()
202 sizeof(reg)); in snd_motu_protocol_v3_switch_fetching_mode()
205 data = be32_to_cpu(reg); in snd_motu_protocol_v3_switch_fetching_mode()
208 data |= V3_FETCH_PCM_FRAMES; in snd_motu_protocol_v3_switch_fetching_mode()
210 data &= ~V3_FETCH_PCM_FRAMES; in snd_motu_protocol_v3_switch_fetching_mode()
212 reg = cpu_to_be32(data); in snd_motu_protocol_v3_switch_fetching_mode()
213 return snd_motu_transaction_write(motu, V3_CLOCK_STATUS_OFFSET, ®, in snd_motu_protocol_v3_switch_fetching_mode()
214 sizeof(reg)); in snd_motu_protocol_v3_switch_fetching_mode()
217 static int detect_packet_formats_828mk3(struct snd_motu *motu, u32 data) in detect_packet_formats_828mk3() argument
219 if (data & V3_ENABLE_OPT_IN_IFACE_A) { in detect_packet_formats_828mk3()
220 if (data & V3_NO_ADAT_OPT_IN_IFACE_A) { in detect_packet_formats_828mk3()
221 motu->tx_packet_formats.pcm_chunks[0] += 4; in detect_packet_formats_828mk3()
222 motu->tx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
224 motu->tx_packet_formats.pcm_chunks[0] += 8; in detect_packet_formats_828mk3()
225 motu->tx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
229 if (data & V3_ENABLE_OPT_IN_IFACE_B) { in detect_packet_formats_828mk3()
230 if (data & V3_NO_ADAT_OPT_IN_IFACE_B) { in detect_packet_formats_828mk3()
231 motu->tx_packet_formats.pcm_chunks[0] += 4; in detect_packet_formats_828mk3()
232 motu->tx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
234 motu->tx_packet_formats.pcm_chunks[0] += 8; in detect_packet_formats_828mk3()
235 motu->tx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
239 if (data & V3_ENABLE_OPT_OUT_IFACE_A) { in detect_packet_formats_828mk3()
240 if (data & V3_NO_ADAT_OPT_OUT_IFACE_A) { in detect_packet_formats_828mk3()
241 motu->rx_packet_formats.pcm_chunks[0] += 4; in detect_packet_formats_828mk3()
242 motu->rx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
244 motu->rx_packet_formats.pcm_chunks[0] += 8; in detect_packet_formats_828mk3()
245 motu->rx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
249 if (data & V3_ENABLE_OPT_OUT_IFACE_B) { in detect_packet_formats_828mk3()
250 if (data & V3_NO_ADAT_OPT_OUT_IFACE_B) { in detect_packet_formats_828mk3()
251 motu->rx_packet_formats.pcm_chunks[0] += 4; in detect_packet_formats_828mk3()
252 motu->rx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
254 motu->rx_packet_formats.pcm_chunks[0] += 8; in detect_packet_formats_828mk3()
255 motu->rx_packet_formats.pcm_chunks[1] += 4; in detect_packet_formats_828mk3()
264 __be32 reg; in snd_motu_protocol_v3_cache_packet_formats() local
265 u32 data; in snd_motu_protocol_v3_cache_packet_formats() local
268 motu->tx_packet_formats.pcm_byte_offset = 10; in snd_motu_protocol_v3_cache_packet_formats()
269 motu->rx_packet_formats.pcm_byte_offset = 10; in snd_motu_protocol_v3_cache_packet_formats()
271 motu->tx_packet_formats.msg_chunks = 2; in snd_motu_protocol_v3_cache_packet_formats()
272 motu->rx_packet_formats.msg_chunks = 2; in snd_motu_protocol_v3_cache_packet_formats()
274 err = snd_motu_transaction_read(motu, V3_OPT_IFACE_MODE_OFFSET, ®, in snd_motu_protocol_v3_cache_packet_formats()
275 sizeof(reg)); in snd_motu_protocol_v3_cache_packet_formats()
278 data = be32_to_cpu(reg); in snd_motu_protocol_v3_cache_packet_formats()
280 memcpy(motu->tx_packet_formats.pcm_chunks, in snd_motu_protocol_v3_cache_packet_formats()
281 motu->spec->tx_fixed_pcm_chunks, in snd_motu_protocol_v3_cache_packet_formats()
282 sizeof(motu->tx_packet_formats.pcm_chunks)); in snd_motu_protocol_v3_cache_packet_formats()
283 memcpy(motu->rx_packet_formats.pcm_chunks, in snd_motu_protocol_v3_cache_packet_formats()
284 motu->spec->rx_fixed_pcm_chunks, in snd_motu_protocol_v3_cache_packet_formats()
285 sizeof(motu->rx_packet_formats.pcm_chunks)); in snd_motu_protocol_v3_cache_packet_formats()
287 if (motu->spec == &snd_motu_spec_828mk3) in snd_motu_protocol_v3_cache_packet_formats()
288 return detect_packet_formats_828mk3(motu, data); in snd_motu_protocol_v3_cache_packet_formats()