• Home
  • Raw
  • Download

Lines Matching +full:reset +full:- +full:synchronized

1 // SPDX-License-Identifier: GPL-2.0
2 // ff-protocol-latter - a part of driver for RME Fireface series
34 // 0x00000040: Synchronized to word clock on BNC interface
35 // 0x00000020: Synchronized to ADAT or S/PDIF on optical interface
36 // 0x00000010: Synchronized to S/PDIF on coaxial interface
44 // 0x0f000000: detected rate of ADAT-B on 2nd optical interface
45 // 0x00f00000: detected rate of ADAT-A on 1st optical interface
50 // 0x00000800: ADAT-B
51 // 0x00000600: ADAT-A
54 // 0x00000080: Synchronized to ADAT-B on 2nd optical interface
55 // 0x00000040: Synchronized to ADAT-A on 1st optical interface
56 // 0x00000020: Synchronized to AES/EBU on XLR or 2nd optical interface
57 // 0x00000010: Synchronized to word clock on BNC interface
58 // 0x00000008: Lock ADAT-B on 2nd optical interface
59 // 0x00000004: Lock ADAT-A on 1st optical interface
122 if (rate_bits == rate_entry->flag) { in parse_clock_bits()
123 *rate = rate_entry->rate; in parse_clock_bits()
128 return -EIO; in parse_clock_bits()
132 if ((data & 0x000e00) == clk_entry->flag) { in parse_clock_bits()
133 *src = clk_entry->src; in parse_clock_bits()
138 return -EIO; in parse_clock_bits()
150 err = snd_fw_transaction(ff->unit, TCODE_READ_QUADLET_REQUEST, in latter_get_clock()
156 return parse_clock_bits(data, rate, src, ff->unit_version); in latter_get_clock()
170 return snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST, in latter_switch_fetching_mode()
191 return -EINVAL; in latter_allocate_resources()
199 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST, in latter_allocate_resources()
218 return -ETIMEDOUT; in latter_allocate_resources()
225 return -EINVAL; in latter_allocate_resources()
231 // Keep resources for in-stream. in latter_allocate_resources()
232 ff->tx_resources.channels_mask = 0x00000000000000ffuLL; in latter_allocate_resources()
233 err = fw_iso_resources_allocate(&ff->tx_resources, in latter_allocate_resources()
234 amdtp_stream_get_max_payload(&ff->tx_stream), in latter_allocate_resources()
235 fw_parent_device(ff->unit)->max_speed); in latter_allocate_resources()
239 // Keep resources for out-stream. in latter_allocate_resources()
240 ff->rx_resources.channels_mask = 0x00000000000000ffuLL; in latter_allocate_resources()
241 err = fw_iso_resources_allocate(&ff->rx_resources, in latter_allocate_resources()
242 amdtp_stream_get_max_payload(&ff->rx_stream), in latter_allocate_resources()
243 fw_parent_device(ff->unit)->max_speed); in latter_allocate_resources()
245 fw_iso_resources_free(&ff->tx_resources); in latter_allocate_resources()
252 unsigned int generation = ff->rx_resources.generation; in latter_begin_session()
258 if (ff->unit_version == SND_FF_UNIT_VERSION_UCX) { in latter_begin_session()
268 return -EINVAL; in latter_begin_session()
271 // IEEE 1394a (400 Mbps), Analog 1-12 and AES are available in latter_begin_session()
280 return -EINVAL; in latter_begin_session()
283 if (generation != fw_parent_device(ff->unit)->card->generation) { in latter_begin_session()
284 err = fw_iso_resources_update(&ff->tx_resources); in latter_begin_session()
288 err = fw_iso_resources_update(&ff->rx_resources); in latter_begin_session()
293 data = (ff->tx_resources.channel << 8) | ff->rx_resources.channel; in latter_begin_session()
295 err = snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST, in latter_begin_session()
301 return snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST, in latter_begin_session()
310 snd_fw_transaction(ff->unit, TCODE_WRITE_QUADLET_REQUEST, in latter_finish_session()
327 { "ADAT-A", 0x00000004, 0x00000040, }, in latter_dump_status()
328 { "ADAT-B", 0x00000008, 0x00000080, }, in latter_dump_status()
339 err = snd_fw_transaction(ff->unit, TCODE_READ_QUADLET_REQUEST, in latter_dump_status()
347 if (ff->unit_version == SND_FF_UNIT_VERSION_UCX) { in latter_dump_status()
357 snd_iprintf(buffer, "%s: ", clk_entry->label); in latter_dump_status()
358 if (data & clk_entry->locked_mask) { in latter_dump_status()
359 if (data & clk_entry->synced_mask) in latter_dump_status()
368 err = parse_clock_bits(data, &rate, &src, ff->unit_version); in latter_dump_status()
378 // NOTE: transactions are transferred within 0x00-0x7f in allocated range of
386 // - 0x00002000: 0x'....'....'0000'0000
387 // - 0x00004000: 0x'....'....'0000'0080
388 // - 0x00008000: 0x'....'....'0000'0100
389 // - 0x00010000: 0x'....'....'0000'0180
394 // Actually, the register is write-only and includes the other settings such as
407 if (index >= ff->spec->midi_in_ports) in latter_handle_midi_msg()
433 substream = READ_ONCE(ff->tx_midi_substreams[index]); in latter_handle_midi_msg()
452 case 0xff: /* System reset. */ in calculate_message_bytes()
485 return -EINVAL; in calculate_message_bytes()
501 if (!ff->on_sysex[port]) { in latter_fill_midi_msg()
507 ff->on_sysex[port] = true; in latter_fill_midi_msg()
515 consumed -= 1; in latter_fill_midi_msg()
521 ff->on_sysex[port] = false; in latter_fill_midi_msg()
527 ff->msg_buf[port][0] = cpu_to_le32(data); in latter_fill_midi_msg()
528 ff->rx_bytes[port] = consumed; in latter_fill_midi_msg()