Symbol: hdsp
sound/pci/rme9652/hdsp.c
1011
static void hdsp_compute_period_size(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
1013
hdsp->period_bytes = 1 << ((hdsp_decode_latency(hdsp->control_register) + 8));
sound/pci/rme9652/hdsp.c
1016
static snd_pcm_uframes_t hdsp_hw_pointer(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
1020
position = hdsp_read(hdsp, HDSP_statusRegister);
sound/pci/rme9652/hdsp.c
1022
if (!hdsp->precise_ptr)
sound/pci/rme9652/hdsp.c
1023
return (position & HDSP_BufferID) ? (hdsp->period_bytes / 4) : 0;
sound/pci/rme9652/hdsp.c
1027
position &= (hdsp->period_bytes/2) - 1;
sound/pci/rme9652/hdsp.c
1031
static void hdsp_reset_hw_pointer(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
1033
hdsp_write (hdsp, HDSP_resetPointer, 0);
sound/pci/rme9652/hdsp.c
1034
if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152)
sound/pci/rme9652/hdsp.c
1038
hdsp_write (hdsp, HDSP_freqReg, hdsp->dds_value);
sound/pci/rme9652/hdsp.c
1041
static void hdsp_start_audio(struct hdsp *s)
sound/pci/rme9652/hdsp.c
1047
static void hdsp_stop_audio(struct hdsp *s)
sound/pci/rme9652/hdsp.c
1053
static void hdsp_silence_playback(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
1055
memset(hdsp->playback_buffer, 0, HDSP_DMA_AREA_BYTES);
sound/pci/rme9652/hdsp.c
1058
static int hdsp_set_interrupt_interval(struct hdsp *s, unsigned int frames)
sound/pci/rme9652/hdsp.c
1079
static void hdsp_set_dds_value(struct hdsp *hdsp, int rate)
sound/pci/rme9652/hdsp.c
1094
hdsp->dds_value = n;
sound/pci/rme9652/hdsp.c
1095
hdsp_write(hdsp, HDSP_freqReg, hdsp->dds_value);
sound/pci/rme9652/hdsp.c
1098
static int hdsp_set_rate(struct hdsp *hdsp, int rate, int called_internally)
sound/pci/rme9652/hdsp.c
1109
if (!(hdsp->control_register & HDSP_ClockModeMaster)) {
sound/pci/rme9652/hdsp.c
1112
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
1117
int external_freq = hdsp_external_sample_rate(hdsp);
sound/pci/rme9652/hdsp.c
1118
int spdif_freq = hdsp_spdif_sample_rate(hdsp);
sound/pci/rme9652/hdsp.c
1120
if ((spdif_freq == external_freq*2) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
sound/pci/rme9652/hdsp.c
1121
dev_info(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
1123
else if (hdsp->io_type == H9632 && (spdif_freq == external_freq*4) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1))
sound/pci/rme9652/hdsp.c
1124
dev_info(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
1127
dev_info(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
1134
current_rate = hdsp->system_sample_rate;
sound/pci/rme9652/hdsp.c
1146
if (rate > 96000 && hdsp->io_type != H9632)
sound/pci/rme9652/hdsp.c
1199
if (reject_if_open && (hdsp->capture_pid >= 0 || hdsp->playback_pid >= 0)) {
sound/pci/rme9652/hdsp.c
1200
dev_warn(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
1202
hdsp->capture_pid,
sound/pci/rme9652/hdsp.c
1203
hdsp->playback_pid);
sound/pci/rme9652/hdsp.c
1207
hdsp->control_register &= ~HDSP_FrequencyMask;
sound/pci/rme9652/hdsp.c
1208
hdsp->control_register |= rate_bits;
sound/pci/rme9652/hdsp.c
1209
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
1212
if (hdsp->io_type == H9632 && hdsp->firmware_rev >= 152)
sound/pci/rme9652/hdsp.c
1213
hdsp_set_dds_value(hdsp, rate);
sound/pci/rme9652/hdsp.c
1216
hdsp->channel_map = channel_map_H9632_qs;
sound/pci/rme9652/hdsp.c
1218
if (hdsp->io_type == H9632)
sound/pci/rme9652/hdsp.c
1219
hdsp->channel_map = channel_map_H9632_ds;
sound/pci/rme9652/hdsp.c
1221
hdsp->channel_map = channel_map_ds;
sound/pci/rme9652/hdsp.c
1223
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
1226
hdsp->channel_map = channel_map_mf_ss;
sound/pci/rme9652/hdsp.c
1230
hdsp->channel_map = channel_map_df_ss;
sound/pci/rme9652/hdsp.c
1233
hdsp->channel_map = channel_map_H9632_ss;
sound/pci/rme9652/hdsp.c
1241
hdsp->system_sample_rate = rate;
sound/pci/rme9652/hdsp.c
1250
static unsigned char snd_hdsp_midi_read_byte (struct hdsp *hdsp, int id)
sound/pci/rme9652/hdsp.c
1254
return hdsp_read(hdsp, HDSP_midiDataIn1);
sound/pci/rme9652/hdsp.c
1256
return hdsp_read(hdsp, HDSP_midiDataIn0);
sound/pci/rme9652/hdsp.c
1259
static void snd_hdsp_midi_write_byte (struct hdsp *hdsp, int id, int val)
sound/pci/rme9652/hdsp.c
1263
hdsp_write(hdsp, HDSP_midiDataOut1, val);
sound/pci/rme9652/hdsp.c
1265
hdsp_write(hdsp, HDSP_midiDataOut0, val);
sound/pci/rme9652/hdsp.c
1268
static int snd_hdsp_midi_input_available (struct hdsp *hdsp, int id)
sound/pci/rme9652/hdsp.c
1271
return (hdsp_read(hdsp, HDSP_midiStatusIn1) & 0xff);
sound/pci/rme9652/hdsp.c
1273
return (hdsp_read(hdsp, HDSP_midiStatusIn0) & 0xff);
sound/pci/rme9652/hdsp.c
1276
static int snd_hdsp_midi_output_possible (struct hdsp *hdsp, int id)
sound/pci/rme9652/hdsp.c
1281
fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut1) & 0xff;
sound/pci/rme9652/hdsp.c
1283
fifo_bytes_used = hdsp_read(hdsp, HDSP_midiStatusOut0) & 0xff;
sound/pci/rme9652/hdsp.c
1291
static void snd_hdsp_flush_midi_input (struct hdsp *hdsp, int id)
sound/pci/rme9652/hdsp.c
1295
while (snd_hdsp_midi_input_available(hdsp, id) && --count)
sound/pci/rme9652/hdsp.c
1296
snd_hdsp_midi_read_byte(hdsp, id);
sound/pci/rme9652/hdsp.c
1311
n_pending = snd_hdsp_midi_output_possible(hmidi->hdsp, hmidi->id);
sound/pci/rme9652/hdsp.c
1319
snd_hdsp_midi_write_byte (hmidi->hdsp, hmidi->id, buf[i]);
sound/pci/rme9652/hdsp.c
1334
n_pending = snd_hdsp_midi_input_available(hmidi->hdsp, hmidi->id);
sound/pci/rme9652/hdsp.c
1340
buf[i] = snd_hdsp_midi_read_byte(hmidi->hdsp, hmidi->id);
sound/pci/rme9652/hdsp.c
1346
snd_hdsp_midi_read_byte(hmidi->hdsp, hmidi->id);
sound/pci/rme9652/hdsp.c
1351
hmidi->hdsp->control_register |= HDSP_Midi1InterruptEnable;
sound/pci/rme9652/hdsp.c
1353
hmidi->hdsp->control_register |= HDSP_Midi0InterruptEnable;
sound/pci/rme9652/hdsp.c
1354
hdsp_write(hmidi->hdsp, HDSP_controlRegister, hmidi->hdsp->control_register);
sound/pci/rme9652/hdsp.c
1361
struct hdsp *hdsp;
sound/pci/rme9652/hdsp.c
1366
hdsp = hmidi->hdsp;
sound/pci/rme9652/hdsp.c
1368
guard(spinlock_irqsave)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
1370
if (!(hdsp->control_register & ie)) {
sound/pci/rme9652/hdsp.c
1371
snd_hdsp_flush_midi_input (hdsp, hmidi->id);
sound/pci/rme9652/hdsp.c
1372
hdsp->control_register |= ie;
sound/pci/rme9652/hdsp.c
1375
hdsp->control_register &= ~ie;
sound/pci/rme9652/hdsp.c
1378
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
1426
snd_hdsp_flush_midi_input (hmidi->hdsp, hmidi->id);
sound/pci/rme9652/hdsp.c
1483
static int snd_hdsp_create_midi (struct snd_card *card, struct hdsp *hdsp, int id)
sound/pci/rme9652/hdsp.c
1487
hdsp->midi[id].id = id;
sound/pci/rme9652/hdsp.c
1488
hdsp->midi[id].rmidi = NULL;
sound/pci/rme9652/hdsp.c
1489
hdsp->midi[id].input = NULL;
sound/pci/rme9652/hdsp.c
1490
hdsp->midi[id].output = NULL;
sound/pci/rme9652/hdsp.c
1491
hdsp->midi[id].hdsp = hdsp;
sound/pci/rme9652/hdsp.c
1492
hdsp->midi[id].istimer = 0;
sound/pci/rme9652/hdsp.c
1493
hdsp->midi[id].pending = 0;
sound/pci/rme9652/hdsp.c
1494
spin_lock_init (&hdsp->midi[id].lock);
sound/pci/rme9652/hdsp.c
1497
if (snd_rawmidi_new (card, buf, id, 1, 1, &hdsp->midi[id].rmidi) < 0)
sound/pci/rme9652/hdsp.c
1500
sprintf(hdsp->midi[id].rmidi->name, "HDSP MIDI %d", id+1);
sound/pci/rme9652/hdsp.c
1501
hdsp->midi[id].rmidi->private_data = &hdsp->midi[id];
sound/pci/rme9652/hdsp.c
1503
snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_hdsp_midi_output);
sound/pci/rme9652/hdsp.c
1504
snd_rawmidi_set_ops (hdsp->midi[id].rmidi, SNDRV_RAWMIDI_STREAM_INPUT, &snd_hdsp_midi_input);
sound/pci/rme9652/hdsp.c
1506
hdsp->midi[id].rmidi->info_flags |= SNDRV_RAWMIDI_INFO_OUTPUT |
sound/pci/rme9652/hdsp.c
1548
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1550
snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif);
sound/pci/rme9652/hdsp.c
1556
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1561
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
1562
change = val != hdsp->creg_spdif;
sound/pci/rme9652/hdsp.c
1563
hdsp->creg_spdif = val;
sound/pci/rme9652/hdsp.c
1576
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1578
snd_hdsp_convert_to_aes(&ucontrol->value.iec958, hdsp->creg_spdif_stream);
sound/pci/rme9652/hdsp.c
1584
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1589
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
1590
change = val != hdsp->creg_spdif_stream;
sound/pci/rme9652/hdsp.c
1591
hdsp->creg_spdif_stream = val;
sound/pci/rme9652/hdsp.c
1592
hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis);
sound/pci/rme9652/hdsp.c
1593
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= val);
sound/pci/rme9652/hdsp.c
1618
static unsigned int hdsp_spdif_in(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
1620
return hdsp_decode_spdif_in(hdsp->control_register & HDSP_SPDIFInputMask);
sound/pci/rme9652/hdsp.c
1623
static int hdsp_set_spdif_input(struct hdsp *hdsp, int in)
sound/pci/rme9652/hdsp.c
1625
hdsp->control_register &= ~HDSP_SPDIFInputMask;
sound/pci/rme9652/hdsp.c
1626
hdsp->control_register |= hdsp_encode_spdif_in(in);
sound/pci/rme9652/hdsp.c
1627
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
1636
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1638
return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 4 : 3,
sound/pci/rme9652/hdsp.c
1644
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1646
ucontrol->value.enumerated.item[0] = hdsp_spdif_in(hdsp);
sound/pci/rme9652/hdsp.c
1652
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1656
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
1658
val = ucontrol->value.enumerated.item[0] % ((hdsp->io_type == H9632) ? 4 : 3);
sound/pci/rme9652/hdsp.c
1659
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
1660
change = val != hdsp_spdif_in(hdsp);
sound/pci/rme9652/hdsp.c
1662
hdsp_set_spdif_input(hdsp, val);
sound/pci/rme9652/hdsp.c
1675
static int hdsp_toggle_setting(struct hdsp *hdsp, u32 regmask)
sound/pci/rme9652/hdsp.c
1677
return (hdsp->control_register & regmask) ? 1 : 0;
sound/pci/rme9652/hdsp.c
1680
static int hdsp_set_toggle_setting(struct hdsp *hdsp, u32 regmask, int out)
sound/pci/rme9652/hdsp.c
1683
hdsp->control_register |= regmask;
sound/pci/rme9652/hdsp.c
1685
hdsp->control_register &= ~regmask;
sound/pci/rme9652/hdsp.c
1686
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
1696
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1699
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
1700
ucontrol->value.integer.value[0] = hdsp_toggle_setting(hdsp, regmask);
sound/pci/rme9652/hdsp.c
1707
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1712
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
1715
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
1716
change = (int) val != hdsp_toggle_setting(hdsp, regmask);
sound/pci/rme9652/hdsp.c
1718
hdsp_set_toggle_setting(hdsp, regmask, val);
sound/pci/rme9652/hdsp.c
1737
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1739
return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 10 : 7,
sound/pci/rme9652/hdsp.c
1745
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1747
switch (hdsp_spdif_sample_rate(hdsp)) {
sound/pci/rme9652/hdsp.c
1799
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1801
ucontrol->value.enumerated.item[0] = hdsp->system_sample_rate;
sound/pci/rme9652/hdsp.c
1816
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1822
return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 10 : 7,
sound/pci/rme9652/hdsp.c
1828
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1830
switch (hdsp_external_sample_rate(hdsp)) {
sound/pci/rme9652/hdsp.c
1873
static int hdsp_system_clock_mode(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
1875
if (hdsp->control_register & HDSP_ClockModeMaster)
sound/pci/rme9652/hdsp.c
1877
else if (hdsp_external_sample_rate(hdsp) != hdsp->system_sample_rate)
sound/pci/rme9652/hdsp.c
1891
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1893
ucontrol->value.enumerated.item[0] = hdsp_system_clock_mode(hdsp);
sound/pci/rme9652/hdsp.c
1906
static int hdsp_clock_source(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
1908
if (hdsp->control_register & HDSP_ClockModeMaster) {
sound/pci/rme9652/hdsp.c
1909
switch (hdsp->system_sample_rate) {
sound/pci/rme9652/hdsp.c
1936
static int hdsp_set_clock_source(struct hdsp *hdsp, int mode)
sound/pci/rme9652/hdsp.c
1941
if (hdsp_external_sample_rate(hdsp) != 0) {
sound/pci/rme9652/hdsp.c
1942
if (!hdsp_set_rate(hdsp, hdsp_external_sample_rate(hdsp), 1)) {
sound/pci/rme9652/hdsp.c
1943
hdsp->control_register &= ~HDSP_ClockModeMaster;
sound/pci/rme9652/hdsp.c
1944
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
1979
hdsp->control_register |= HDSP_ClockModeMaster;
sound/pci/rme9652/hdsp.c
1980
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
1981
hdsp_set_rate(hdsp, rate, 1);
sound/pci/rme9652/hdsp.c
1993
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
1995
return snd_ctl_enum_info(uinfo, 1, (hdsp->io_type == H9632) ? 10 : 7,
sound/pci/rme9652/hdsp.c
2001
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2003
ucontrol->value.enumerated.item[0] = hdsp_clock_source(hdsp);
sound/pci/rme9652/hdsp.c
2009
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2013
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2017
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
2024
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2025
if (val != hdsp_clock_source(hdsp))
sound/pci/rme9652/hdsp.c
2026
change = (hdsp_set_clock_source(hdsp, val) == 0) ? 1 : 0;
sound/pci/rme9652/hdsp.c
2036
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2038
ucontrol->value.integer.value[0] = hdsp->clock_source_locked;
sound/pci/rme9652/hdsp.c
2044
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2047
change = (int)ucontrol->value.integer.value[0] != hdsp->clock_source_locked;
sound/pci/rme9652/hdsp.c
2049
hdsp->clock_source_locked = !!ucontrol->value.integer.value[0];
sound/pci/rme9652/hdsp.c
2062
static int hdsp_da_gain(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2064
switch (hdsp->control_register & HDSP_DAGainMask) {
sound/pci/rme9652/hdsp.c
2076
static int hdsp_set_da_gain(struct hdsp *hdsp, int mode)
sound/pci/rme9652/hdsp.c
2078
hdsp->control_register &= ~HDSP_DAGainMask;
sound/pci/rme9652/hdsp.c
2081
hdsp->control_register |= HDSP_DAGainHighGain;
sound/pci/rme9652/hdsp.c
2084
hdsp->control_register |= HDSP_DAGainPlus4dBu;
sound/pci/rme9652/hdsp.c
2087
hdsp->control_register |= HDSP_DAGainMinus10dBV;
sound/pci/rme9652/hdsp.c
2093
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
2106
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2108
ucontrol->value.enumerated.item[0] = hdsp_da_gain(hdsp);
sound/pci/rme9652/hdsp.c
2114
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2118
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2123
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2124
if (val != hdsp_da_gain(hdsp))
sound/pci/rme9652/hdsp.c
2125
change = (hdsp_set_da_gain(hdsp, val) == 0) ? 1 : 0;
sound/pci/rme9652/hdsp.c
2140
static int hdsp_ad_gain(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2142
switch (hdsp->control_register & HDSP_ADGainMask) {
sound/pci/rme9652/hdsp.c
2154
static int hdsp_set_ad_gain(struct hdsp *hdsp, int mode)
sound/pci/rme9652/hdsp.c
2156
hdsp->control_register &= ~HDSP_ADGainMask;
sound/pci/rme9652/hdsp.c
2159
hdsp->control_register |= HDSP_ADGainMinus10dBV;
sound/pci/rme9652/hdsp.c
2162
hdsp->control_register |= HDSP_ADGainPlus4dBu;
sound/pci/rme9652/hdsp.c
2165
hdsp->control_register |= HDSP_ADGainLowGain;
sound/pci/rme9652/hdsp.c
2171
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
2184
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2186
ucontrol->value.enumerated.item[0] = hdsp_ad_gain(hdsp);
sound/pci/rme9652/hdsp.c
2192
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2196
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2201
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2202
if (val != hdsp_ad_gain(hdsp))
sound/pci/rme9652/hdsp.c
2203
change = (hdsp_set_ad_gain(hdsp, val) == 0) ? 1 : 0;
sound/pci/rme9652/hdsp.c
2218
static int hdsp_phone_gain(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2220
switch (hdsp->control_register & HDSP_PhoneGainMask) {
sound/pci/rme9652/hdsp.c
2232
static int hdsp_set_phone_gain(struct hdsp *hdsp, int mode)
sound/pci/rme9652/hdsp.c
2234
hdsp->control_register &= ~HDSP_PhoneGainMask;
sound/pci/rme9652/hdsp.c
2237
hdsp->control_register |= HDSP_PhoneGain0dB;
sound/pci/rme9652/hdsp.c
2240
hdsp->control_register |= HDSP_PhoneGainMinus6dB;
sound/pci/rme9652/hdsp.c
2243
hdsp->control_register |= HDSP_PhoneGainMinus12dB;
sound/pci/rme9652/hdsp.c
2249
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
2262
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2264
ucontrol->value.enumerated.item[0] = hdsp_phone_gain(hdsp);
sound/pci/rme9652/hdsp.c
2270
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2274
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2279
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2280
if (val != hdsp_phone_gain(hdsp))
sound/pci/rme9652/hdsp.c
2281
change = (hdsp_set_phone_gain(hdsp, val) == 0) ? 1 : 0;
sound/pci/rme9652/hdsp.c
2296
static int hdsp_pref_sync_ref(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2302
switch (hdsp->control_register & HDSP_SyncRefMask) {
sound/pci/rme9652/hdsp.c
2321
static int hdsp_set_pref_sync_ref(struct hdsp *hdsp, int pref)
sound/pci/rme9652/hdsp.c
2323
hdsp->control_register &= ~HDSP_SyncRefMask;
sound/pci/rme9652/hdsp.c
2326
hdsp->control_register &= ~HDSP_SyncRefMask; /* clear SyncRef bits */
sound/pci/rme9652/hdsp.c
2329
hdsp->control_register |= HDSP_SyncRef_ADAT2;
sound/pci/rme9652/hdsp.c
2332
hdsp->control_register |= HDSP_SyncRef_ADAT3;
sound/pci/rme9652/hdsp.c
2335
hdsp->control_register |= HDSP_SyncRef_SPDIF;
sound/pci/rme9652/hdsp.c
2338
hdsp->control_register |= HDSP_SyncRef_WORD;
sound/pci/rme9652/hdsp.c
2341
hdsp->control_register |= HDSP_SyncRef_ADAT_SYNC;
sound/pci/rme9652/hdsp.c
2346
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
2355
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2358
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
2378
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2380
ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp);
sound/pci/rme9652/hdsp.c
2386
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2390
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2393
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
2409
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2410
change = (int)val != hdsp_pref_sync_ref(hdsp);
sound/pci/rme9652/hdsp.c
2411
hdsp_set_pref_sync_ref(hdsp, val);
sound/pci/rme9652/hdsp.c
2424
static int hdsp_autosync_ref(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2427
unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register);
sound/pci/rme9652/hdsp.c
2461
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2463
ucontrol->value.enumerated.item[0] = hdsp_autosync_ref(hdsp);
sound/pci/rme9652/hdsp.c
2476
static int hdsp_set_precise_pointer(struct hdsp *hdsp, int precise)
sound/pci/rme9652/hdsp.c
2479
hdsp->precise_ptr = 1;
sound/pci/rme9652/hdsp.c
2481
hdsp->precise_ptr = 0;
sound/pci/rme9652/hdsp.c
2489
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2491
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2492
ucontrol->value.integer.value[0] = hdsp->precise_ptr;
sound/pci/rme9652/hdsp.c
2498
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2502
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2505
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2506
change = (int)val != hdsp->precise_ptr;
sound/pci/rme9652/hdsp.c
2507
hdsp_set_precise_pointer(hdsp, val);
sound/pci/rme9652/hdsp.c
2520
static int hdsp_set_use_midi_work(struct hdsp *hdsp, int use_work)
sound/pci/rme9652/hdsp.c
2523
hdsp->use_midi_work = 1;
sound/pci/rme9652/hdsp.c
2525
hdsp->use_midi_work = 0;
sound/pci/rme9652/hdsp.c
2533
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2535
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2536
ucontrol->value.integer.value[0] = hdsp->use_midi_work;
sound/pci/rme9652/hdsp.c
2542
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2546
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2549
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2550
change = (int)val != hdsp->use_midi_work;
sound/pci/rme9652/hdsp.c
2551
hdsp_set_use_midi_work(hdsp, val);
sound/pci/rme9652/hdsp.c
2579
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2587
if (source >= hdsp->max_channels)
sound/pci/rme9652/hdsp.c
2588
addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels,destination);
sound/pci/rme9652/hdsp.c
2590
addr = hdsp_input_to_output_key(hdsp,source, destination);
sound/pci/rme9652/hdsp.c
2592
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2593
ucontrol->value.integer.value[2] = hdsp_read_gain (hdsp, addr);
sound/pci/rme9652/hdsp.c
2599
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2606
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2612
if (source >= hdsp->max_channels)
sound/pci/rme9652/hdsp.c
2613
addr = hdsp_playback_to_output_key(hdsp,source-hdsp->max_channels, destination);
sound/pci/rme9652/hdsp.c
2615
addr = hdsp_input_to_output_key(hdsp,source, destination);
sound/pci/rme9652/hdsp.c
2619
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2620
change = gain != hdsp_read_gain(hdsp, addr);
sound/pci/rme9652/hdsp.c
2622
hdsp_write_gain(hdsp, addr, gain);
sound/pci/rme9652/hdsp.c
2642
static int hdsp_wc_sync_check(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2644
int status2 = hdsp_read(hdsp, HDSP_status2Register);
sound/pci/rme9652/hdsp.c
2657
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2659
ucontrol->value.enumerated.item[0] = hdsp_wc_sync_check(hdsp);
sound/pci/rme9652/hdsp.c
2672
static int hdsp_spdif_sync_check(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2674
int status = hdsp_read(hdsp, HDSP_statusRegister);
sound/pci/rme9652/hdsp.c
2688
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2690
ucontrol->value.enumerated.item[0] = hdsp_spdif_sync_check(hdsp);
sound/pci/rme9652/hdsp.c
2703
static int hdsp_adatsync_sync_check(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2705
int status = hdsp_read(hdsp, HDSP_statusRegister);
sound/pci/rme9652/hdsp.c
2717
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2719
ucontrol->value.enumerated.item[0] = hdsp_adatsync_sync_check(hdsp);
sound/pci/rme9652/hdsp.c
2730
static int hdsp_adat_sync_check(struct hdsp *hdsp, int idx)
sound/pci/rme9652/hdsp.c
2732
int status = hdsp_read(hdsp, HDSP_statusRegister);
sound/pci/rme9652/hdsp.c
2746
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2752
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
2767
ucontrol->value.enumerated.item[0] = hdsp_adat_sync_check(hdsp, offset);
sound/pci/rme9652/hdsp.c
2780
static int hdsp_dds_offset(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2783
unsigned int dds_value = hdsp->dds_value;
sound/pci/rme9652/hdsp.c
2784
int system_sample_rate = hdsp->system_sample_rate;
sound/pci/rme9652/hdsp.c
2802
static int hdsp_set_dds_offset(struct hdsp *hdsp, int offset_hz)
sound/pci/rme9652/hdsp.c
2804
int rate = hdsp->system_sample_rate + offset_hz;
sound/pci/rme9652/hdsp.c
2805
hdsp_set_dds_value(hdsp, rate);
sound/pci/rme9652/hdsp.c
2820
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2822
ucontrol->value.integer.value[0] = hdsp_dds_offset(hdsp);
sound/pci/rme9652/hdsp.c
2828
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2832
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2835
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2836
if (val != hdsp_dds_offset(hdsp))
sound/pci/rme9652/hdsp.c
2837
change = (hdsp_set_dds_offset(hdsp, val) == 0) ? 1 : 0;
sound/pci/rme9652/hdsp.c
2918
static int hdsp_rpm_input12(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
2920
switch (hdsp->control_register & HDSP_RPM_Inp12) {
sound/pci/rme9652/hdsp.c
2936
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2938
ucontrol->value.enumerated.item[0] = hdsp_rpm_input12(hdsp);
sound/pci/rme9652/hdsp.c
2943
static int hdsp_set_rpm_input12(struct hdsp *hdsp, int mode)
sound/pci/rme9652/hdsp.c
2945
hdsp->control_register &= ~HDSP_RPM_Inp12;
sound/pci/rme9652/hdsp.c
2948
hdsp->control_register |= HDSP_RPM_Inp12_Phon_6dB;
sound/pci/rme9652/hdsp.c
2953
hdsp->control_register |= HDSP_RPM_Inp12_Phon_n6dB;
sound/pci/rme9652/hdsp.c
2956
hdsp->control_register |= HDSP_RPM_Inp12_Line_0dB;
sound/pci/rme9652/hdsp.c
2959
hdsp->control_register |= HDSP_RPM_Inp12_Line_n6dB;
sound/pci/rme9652/hdsp.c
2965
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
2972
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
2976
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
2983
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
2984
if (val != hdsp_rpm_input12(hdsp))
sound/pci/rme9652/hdsp.c
2985
change = (hdsp_set_rpm_input12(hdsp, val) == 0) ? 1 : 0;
sound/pci/rme9652/hdsp.c
3002
static int hdsp_rpm_input34(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
3004
switch (hdsp->control_register & HDSP_RPM_Inp34) {
sound/pci/rme9652/hdsp.c
3020
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
3022
ucontrol->value.enumerated.item[0] = hdsp_rpm_input34(hdsp);
sound/pci/rme9652/hdsp.c
3027
static int hdsp_set_rpm_input34(struct hdsp *hdsp, int mode)
sound/pci/rme9652/hdsp.c
3029
hdsp->control_register &= ~HDSP_RPM_Inp34;
sound/pci/rme9652/hdsp.c
3032
hdsp->control_register |= HDSP_RPM_Inp34_Phon_6dB;
sound/pci/rme9652/hdsp.c
3037
hdsp->control_register |= HDSP_RPM_Inp34_Phon_n6dB;
sound/pci/rme9652/hdsp.c
3040
hdsp->control_register |= HDSP_RPM_Inp34_Line_0dB;
sound/pci/rme9652/hdsp.c
3043
hdsp->control_register |= HDSP_RPM_Inp34_Line_n6dB;
sound/pci/rme9652/hdsp.c
3049
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
3056
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
3060
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
3067
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
3068
if (val != hdsp_rpm_input34(hdsp))
sound/pci/rme9652/hdsp.c
3069
change = (hdsp_set_rpm_input34(hdsp, val) == 0) ? 1 : 0;
sound/pci/rme9652/hdsp.c
3077
static int hdsp_rpm_bypass(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
3079
return (hdsp->control_register & HDSP_RPM_Bypass) ? 1 : 0;
sound/pci/rme9652/hdsp.c
3085
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
3087
ucontrol->value.integer.value[0] = hdsp_rpm_bypass(hdsp);
sound/pci/rme9652/hdsp.c
3092
static int hdsp_set_rpm_bypass(struct hdsp *hdsp, int on)
sound/pci/rme9652/hdsp.c
3095
hdsp->control_register |= HDSP_RPM_Bypass;
sound/pci/rme9652/hdsp.c
3097
hdsp->control_register &= ~HDSP_RPM_Bypass;
sound/pci/rme9652/hdsp.c
3098
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
3105
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
3109
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
3112
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
3113
change = (int)val != hdsp_rpm_bypass(hdsp);
sound/pci/rme9652/hdsp.c
3114
hdsp_set_rpm_bypass(hdsp, val);
sound/pci/rme9652/hdsp.c
3128
static int hdsp_rpm_disconnect(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
3130
return (hdsp->control_register & HDSP_RPM_Disconnect) ? 1 : 0;
sound/pci/rme9652/hdsp.c
3136
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
3138
ucontrol->value.integer.value[0] = hdsp_rpm_disconnect(hdsp);
sound/pci/rme9652/hdsp.c
3143
static int hdsp_set_rpm_disconnect(struct hdsp *hdsp, int on)
sound/pci/rme9652/hdsp.c
3146
hdsp->control_register |= HDSP_RPM_Disconnect;
sound/pci/rme9652/hdsp.c
3148
hdsp->control_register &= ~HDSP_RPM_Disconnect;
sound/pci/rme9652/hdsp.c
3149
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
3156
struct hdsp *hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
3160
if (!snd_hdsp_use_is_exclusive(hdsp))
sound/pci/rme9652/hdsp.c
3163
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
3164
change = (int)val != hdsp_rpm_disconnect(hdsp);
sound/pci/rme9652/hdsp.c
3165
hdsp_set_rpm_disconnect(hdsp, val);
sound/pci/rme9652/hdsp.c
3215
static bool hdsp_loopback_get(struct hdsp *const hdsp, const u8 channel)
sound/pci/rme9652/hdsp.c
3217
return hdsp->io_loopback & (1 << channel);
sound/pci/rme9652/hdsp.c
3220
static int hdsp_loopback_set(struct hdsp *const hdsp, const u8 channel, const bool enable)
sound/pci/rme9652/hdsp.c
3222
if (hdsp_loopback_get(hdsp, channel) == enable)
sound/pci/rme9652/hdsp.c
3225
hdsp->io_loopback ^= (1 << channel);
sound/pci/rme9652/hdsp.c
3227
hdsp_write(hdsp, HDSP_inputEnable + (4 * (hdsp->max_channels + channel)), enable);
sound/pci/rme9652/hdsp.c
3235
struct hdsp *const hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
3238
if (channel >= hdsp->max_channels)
sound/pci/rme9652/hdsp.c
3241
ucontrol->value.integer.value[0] = hdsp_loopback_get(hdsp, channel);
sound/pci/rme9652/hdsp.c
3249
struct hdsp *const hdsp = snd_kcontrol_chip(kcontrol);
sound/pci/rme9652/hdsp.c
3253
if (channel >= hdsp->max_channels)
sound/pci/rme9652/hdsp.c
3256
return hdsp_loopback_set(hdsp, channel, enable);
sound/pci/rme9652/hdsp.c
3268
static int snd_hdsp_create_controls(struct snd_card *card, struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
3274
if (hdsp->io_type == RPM) {
sound/pci/rme9652/hdsp.c
3277
err = snd_ctl_add(card, snd_ctl_new1(&snd_hdsp_rpm_controls[idx], hdsp));
sound/pci/rme9652/hdsp.c
3285
kctl = snd_ctl_new1(&snd_hdsp_controls[idx], hdsp);
sound/pci/rme9652/hdsp.c
3290
hdsp->spdif_ctl = kctl;
sound/pci/rme9652/hdsp.c
3296
kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp);
sound/pci/rme9652/hdsp.c
3300
if (hdsp->io_type == Digiface || hdsp->io_type == H9652) {
sound/pci/rme9652/hdsp.c
3303
kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp);
sound/pci/rme9652/hdsp.c
3311
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
3313
kctl = snd_ctl_new1(&snd_hdsp_9632_controls[idx], hdsp);
sound/pci/rme9652/hdsp.c
3321
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
3322
snd_hdsp_loopback_control.count = hdsp->max_channels;
sound/pci/rme9652/hdsp.c
3323
kctl = snd_ctl_new1(&snd_hdsp_loopback_control, hdsp);
sound/pci/rme9652/hdsp.c
3332
if (hdsp->io_type == H9632 || hdsp->io_type == H9652) {
sound/pci/rme9652/hdsp.c
3333
kctl = snd_ctl_new1(&snd_hdsp_96xx_aeb, hdsp);
sound/pci/rme9652/hdsp.c
3349
struct hdsp *hdsp = entry->private_data;
sound/pci/rme9652/hdsp.c
3358
status = hdsp_read(hdsp, HDSP_statusRegister);
sound/pci/rme9652/hdsp.c
3359
status2 = hdsp_read(hdsp, HDSP_status2Register);
sound/pci/rme9652/hdsp.c
3361
snd_iprintf(buffer, "%s (Card #%d)\n", hdsp->card_name,
sound/pci/rme9652/hdsp.c
3362
hdsp->card->number + 1);
sound/pci/rme9652/hdsp.c
3364
hdsp->capture_buffer, hdsp->playback_buffer);
sound/pci/rme9652/hdsp.c
3366
hdsp->irq, hdsp->port, (unsigned long)hdsp->iobase);
sound/pci/rme9652/hdsp.c
3367
snd_iprintf(buffer, "Control register: 0x%x\n", hdsp->control_register);
sound/pci/rme9652/hdsp.c
3369
hdsp->control2_register);
sound/pci/rme9652/hdsp.c
3373
if (hdsp_check_for_iobox(hdsp)) {
sound/pci/rme9652/hdsp.c
3379
if (hdsp_check_for_firmware(hdsp, 0)) {
sound/pci/rme9652/hdsp.c
3380
if (hdsp->state & HDSP_FirmwareCached) {
sound/pci/rme9652/hdsp.c
3381
if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) {
sound/pci/rme9652/hdsp.c
3390
err = hdsp_request_fw_loader(hdsp);
sound/pci/rme9652/hdsp.c
3400
snd_iprintf(buffer, "FIFO status: %d\n", hdsp_read(hdsp, HDSP_fifoStatus) & 0xff);
sound/pci/rme9652/hdsp.c
3401
snd_iprintf(buffer, "MIDI1 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut0));
sound/pci/rme9652/hdsp.c
3402
snd_iprintf(buffer, "MIDI1 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn0));
sound/pci/rme9652/hdsp.c
3403
snd_iprintf(buffer, "MIDI2 Output status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusOut1));
sound/pci/rme9652/hdsp.c
3404
snd_iprintf(buffer, "MIDI2 Input status: 0x%x\n", hdsp_read(hdsp, HDSP_midiStatusIn1));
sound/pci/rme9652/hdsp.c
3405
snd_iprintf(buffer, "Use Midi Tasklet: %s\n", str_on_off(hdsp->use_midi_work));
sound/pci/rme9652/hdsp.c
3409
x = 1 << (6 + hdsp_decode_latency(hdsp->control_register & HDSP_LatencyMask));
sound/pci/rme9652/hdsp.c
3411
snd_iprintf(buffer, "Buffer Size (Latency): %d samples (2 periods of %lu bytes)\n", x, (unsigned long) hdsp->period_bytes);
sound/pci/rme9652/hdsp.c
3412
snd_iprintf(buffer, "Hardware pointer (frames): %ld\n", hdsp_hw_pointer(hdsp));
sound/pci/rme9652/hdsp.c
3413
snd_iprintf(buffer, "Precise pointer: %s\n", str_on_off(hdsp->precise_ptr));
sound/pci/rme9652/hdsp.c
3414
snd_iprintf(buffer, "Line out: %s\n", str_on_off(hdsp->control_register & HDSP_LineOut));
sound/pci/rme9652/hdsp.c
3420
switch (hdsp_clock_source(hdsp)) {
sound/pci/rme9652/hdsp.c
3456
if (hdsp_system_clock_mode(hdsp))
sound/pci/rme9652/hdsp.c
3461
switch (hdsp_pref_sync_ref (hdsp)) {
sound/pci/rme9652/hdsp.c
3486
switch (hdsp_autosync_ref (hdsp)) {
sound/pci/rme9652/hdsp.c
3514
snd_iprintf (buffer, "AutoSync Frequency: %d\n", hdsp_external_sample_rate(hdsp));
sound/pci/rme9652/hdsp.c
3518
snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate);
sound/pci/rme9652/hdsp.c
3519
snd_iprintf (buffer, "System Clock Locked: %s\n", hdsp->clock_source_locked ? "Yes" : "No");
sound/pci/rme9652/hdsp.c
3523
if (hdsp->io_type != RPM) {
sound/pci/rme9652/hdsp.c
3524
switch (hdsp_spdif_in(hdsp)) {
sound/pci/rme9652/hdsp.c
3543
if (RPM == hdsp->io_type) {
sound/pci/rme9652/hdsp.c
3544
if (hdsp->control_register & HDSP_RPM_Bypass)
sound/pci/rme9652/hdsp.c
3548
if (hdsp->control_register & HDSP_RPM_Disconnect)
sound/pci/rme9652/hdsp.c
3553
switch (hdsp->control_register & HDSP_RPM_Inp12) {
sound/pci/rme9652/hdsp.c
3573
switch (hdsp->control_register & HDSP_RPM_Inp34) {
sound/pci/rme9652/hdsp.c
3594
if (hdsp->control_register & HDSP_SPDIFOpticalOut)
sound/pci/rme9652/hdsp.c
3599
if (hdsp->control_register & HDSP_SPDIFProfessional)
sound/pci/rme9652/hdsp.c
3604
if (hdsp->control_register & HDSP_SPDIFEmphasis)
sound/pci/rme9652/hdsp.c
3609
if (hdsp->control_register & HDSP_SPDIFNonAudio)
sound/pci/rme9652/hdsp.c
3613
x = hdsp_spdif_sample_rate(hdsp);
sound/pci/rme9652/hdsp.c
3628
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
3668
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
3671
switch (hdsp_ad_gain(hdsp)) {
sound/pci/rme9652/hdsp.c
3684
switch (hdsp_da_gain(hdsp)) {
sound/pci/rme9652/hdsp.c
3697
switch (hdsp_phone_gain(hdsp)) {
sound/pci/rme9652/hdsp.c
3711
str_yes_no(hdsp_toggle_setting(hdsp,
sound/pci/rme9652/hdsp.c
3714
if (hdsp->control_register & HDSP_AnalogExtensionBoard)
sound/pci/rme9652/hdsp.c
3723
static void snd_hdsp_proc_init(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
3725
snd_card_ro_proc_new(hdsp->card, "hdsp", hdsp, snd_hdsp_proc_read);
sound/pci/rme9652/hdsp.c
3728
static int snd_hdsp_initialize_memory(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
3732
capture_dma = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES);
sound/pci/rme9652/hdsp.c
3733
playback_dma = snd_hammerfall_get_buffer(hdsp->pci, HDSP_DMA_AREA_BYTES);
sound/pci/rme9652/hdsp.c
3735
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
3736
"%s: no buffers available\n", hdsp->card_name);
sound/pci/rme9652/hdsp.c
3741
hdsp->capture_dma_buf = *capture_dma;
sound/pci/rme9652/hdsp.c
3742
hdsp->playback_dma_buf = *playback_dma;
sound/pci/rme9652/hdsp.c
3745
hdsp->capture_dma_buf.addr = ALIGN(capture_dma->addr, 0x10000ul);
sound/pci/rme9652/hdsp.c
3746
hdsp->playback_dma_buf.addr = ALIGN(playback_dma->addr, 0x10000ul);
sound/pci/rme9652/hdsp.c
3749
hdsp_write(hdsp, HDSP_inputBufferAddress, hdsp->capture_dma_buf.addr);
sound/pci/rme9652/hdsp.c
3750
hdsp_write(hdsp, HDSP_outputBufferAddress, hdsp->playback_dma_buf.addr);
sound/pci/rme9652/hdsp.c
3752
hdsp->capture_dma_buf.area += hdsp->capture_dma_buf.addr - capture_dma->addr;
sound/pci/rme9652/hdsp.c
3753
hdsp->playback_dma_buf.area += hdsp->playback_dma_buf.addr - playback_dma->addr;
sound/pci/rme9652/hdsp.c
3754
hdsp->capture_buffer = hdsp->capture_dma_buf.area;
sound/pci/rme9652/hdsp.c
3755
hdsp->playback_buffer = hdsp->playback_dma_buf.area;
sound/pci/rme9652/hdsp.c
3760
static int snd_hdsp_set_defaults(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
3778
hdsp->control_register = HDSP_ClockModeMaster |
sound/pci/rme9652/hdsp.c
3784
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
3787
hdsp->control2_register = HDSP_BIGENDIAN_MODE;
sound/pci/rme9652/hdsp.c
3789
hdsp->control2_register = 0;
sound/pci/rme9652/hdsp.c
3791
if (hdsp->io_type == H9652)
sound/pci/rme9652/hdsp.c
3792
snd_hdsp_9652_enable_mixer (hdsp);
sound/pci/rme9652/hdsp.c
3794
hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
sound/pci/rme9652/hdsp.c
3796
hdsp_reset_hw_pointer(hdsp);
sound/pci/rme9652/hdsp.c
3797
hdsp_compute_period_size(hdsp);
sound/pci/rme9652/hdsp.c
3802
hdsp->mixer_matrix[i] = MINUS_INFINITY_GAIN;
sound/pci/rme9652/hdsp.c
3804
for (i = 0; i < ((hdsp->io_type == H9652 || hdsp->io_type == H9632) ? 1352 : HDSP_MATRIX_MIXER_SIZE); ++i) {
sound/pci/rme9652/hdsp.c
3805
if (hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN))
sound/pci/rme9652/hdsp.c
3810
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
3811
hdsp->control_register |= (HDSP_DAGainPlus4dBu | HDSP_ADGainPlus4dBu | HDSP_PhoneGain0dB);
sound/pci/rme9652/hdsp.c
3812
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
3818
hdsp_set_rate(hdsp, 48000, 1);
sound/pci/rme9652/hdsp.c
3825
struct hdsp *hdsp = container_of(work, struct hdsp, midi_work);
sound/pci/rme9652/hdsp.c
3827
if (hdsp->midi[0].pending)
sound/pci/rme9652/hdsp.c
3828
snd_hdsp_midi_input_read (&hdsp->midi[0]);
sound/pci/rme9652/hdsp.c
3829
if (hdsp->midi[1].pending)
sound/pci/rme9652/hdsp.c
3830
snd_hdsp_midi_input_read (&hdsp->midi[1]);
sound/pci/rme9652/hdsp.c
3835
struct hdsp *hdsp = (struct hdsp *) dev_id;
sound/pci/rme9652/hdsp.c
3844
status = hdsp_read(hdsp, HDSP_statusRegister);
sound/pci/rme9652/hdsp.c
3853
hdsp_write(hdsp, HDSP_interruptConfirmation, 0);
sound/pci/rme9652/hdsp.c
3855
midi0status = hdsp_read (hdsp, HDSP_midiStatusIn0) & 0xff;
sound/pci/rme9652/hdsp.c
3856
midi1status = hdsp_read (hdsp, HDSP_midiStatusIn1) & 0xff;
sound/pci/rme9652/hdsp.c
3858
if (!(hdsp->state & HDSP_InitializationComplete))
sound/pci/rme9652/hdsp.c
3862
if (hdsp->capture_substream)
sound/pci/rme9652/hdsp.c
3863
snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream);
sound/pci/rme9652/hdsp.c
3865
if (hdsp->playback_substream)
sound/pci/rme9652/hdsp.c
3866
snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream);
sound/pci/rme9652/hdsp.c
3870
if (hdsp->use_midi_work) {
sound/pci/rme9652/hdsp.c
3872
hdsp->control_register &= ~HDSP_Midi0InterruptEnable;
sound/pci/rme9652/hdsp.c
3873
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
3874
hdsp->midi[0].pending = 1;
sound/pci/rme9652/hdsp.c
3877
snd_hdsp_midi_input_read (&hdsp->midi[0]);
sound/pci/rme9652/hdsp.c
3880
if (hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632 && midi1 && midi1status) {
sound/pci/rme9652/hdsp.c
3881
if (hdsp->use_midi_work) {
sound/pci/rme9652/hdsp.c
3883
hdsp->control_register &= ~HDSP_Midi1InterruptEnable;
sound/pci/rme9652/hdsp.c
3884
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
3885
hdsp->midi[1].pending = 1;
sound/pci/rme9652/hdsp.c
3888
snd_hdsp_midi_input_read (&hdsp->midi[1]);
sound/pci/rme9652/hdsp.c
3891
if (hdsp->use_midi_work && schedule)
sound/pci/rme9652/hdsp.c
3892
queue_work(system_highpri_wq, &hdsp->midi_work);
sound/pci/rme9652/hdsp.c
3898
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
3899
return hdsp_hw_pointer(hdsp);
sound/pci/rme9652/hdsp.c
3902
static signed char *hdsp_channel_buffer_location(struct hdsp *hdsp,
sound/pci/rme9652/hdsp.c
3909
if (snd_BUG_ON(channel < 0 || channel >= hdsp->max_channels))
sound/pci/rme9652/hdsp.c
3912
mapped_channel = hdsp->channel_map[channel];
sound/pci/rme9652/hdsp.c
3917
return hdsp->capture_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
sound/pci/rme9652/hdsp.c
3919
return hdsp->playback_buffer + (mapped_channel * HDSP_CHANNEL_BUFFER_BYTES);
sound/pci/rme9652/hdsp.c
3926
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
3932
channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
sound/pci/rme9652/hdsp.c
3944
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
3950
channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
sound/pci/rme9652/hdsp.c
3962
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
3965
channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel);
sound/pci/rme9652/hdsp.c
3975
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
3978
other = hdsp->capture_substream;
sound/pci/rme9652/hdsp.c
3980
other = hdsp->playback_substream;
sound/pci/rme9652/hdsp.c
3981
if (hdsp->running)
sound/pci/rme9652/hdsp.c
3982
runtime->status->hw_ptr = hdsp_hw_pointer(hdsp);
sound/pci/rme9652/hdsp.c
4001
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
4006
if (hdsp_check_for_iobox (hdsp))
sound/pci/rme9652/hdsp.c
4009
if (hdsp_check_for_firmware(hdsp, 1))
sound/pci/rme9652/hdsp.c
4012
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
4015
hdsp->control_register &= ~(HDSP_SPDIFProfessional | HDSP_SPDIFNonAudio | HDSP_SPDIFEmphasis);
sound/pci/rme9652/hdsp.c
4016
hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register |= hdsp->creg_spdif_stream);
sound/pci/rme9652/hdsp.c
4017
this_pid = hdsp->playback_pid;
sound/pci/rme9652/hdsp.c
4018
other_pid = hdsp->capture_pid;
sound/pci/rme9652/hdsp.c
4020
this_pid = hdsp->capture_pid;
sound/pci/rme9652/hdsp.c
4021
other_pid = hdsp->playback_pid;
sound/pci/rme9652/hdsp.c
4031
if (params_rate(params) != hdsp->system_sample_rate) {
sound/pci/rme9652/hdsp.c
4036
if (params_period_size(params) != hdsp->period_bytes / 4) {
sound/pci/rme9652/hdsp.c
4050
if (! hdsp->clock_source_locked) {
sound/pci/rme9652/hdsp.c
4051
err = hdsp_set_rate(hdsp, params_rate(params), 0);
sound/pci/rme9652/hdsp.c
4058
err = hdsp_set_interrupt_interval(hdsp, params_period_size(params));
sound/pci/rme9652/hdsp.c
4070
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
4073
if (snd_BUG_ON(channel >= hdsp->max_channels))
sound/pci/rme9652/hdsp.c
4075
channel = array_index_nospec(channel, hdsp->max_channels);
sound/pci/rme9652/hdsp.c
4077
if (hdsp->channel_map[channel] < 0)
sound/pci/rme9652/hdsp.c
4080
info->offset = hdsp->channel_map[channel] * HDSP_CHANNEL_BUFFER_BYTES;
sound/pci/rme9652/hdsp.c
4103
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
4107
if (hdsp_check_for_iobox (hdsp))
sound/pci/rme9652/hdsp.c
4110
if (hdsp_check_for_firmware(hdsp, 0)) /* no auto-loading in trigger */
sound/pci/rme9652/hdsp.c
4113
guard(spinlock)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
4114
running = hdsp->running;
sound/pci/rme9652/hdsp.c
4127
other = hdsp->capture_substream;
sound/pci/rme9652/hdsp.c
4129
other = hdsp->playback_substream;
sound/pci/rme9652/hdsp.c
4146
hdsp_silence_playback(hdsp);
sound/pci/rme9652/hdsp.c
4150
hdsp_silence_playback(hdsp);
sound/pci/rme9652/hdsp.c
4154
hdsp_silence_playback(hdsp);
sound/pci/rme9652/hdsp.c
4158
if (!hdsp->running && running)
sound/pci/rme9652/hdsp.c
4159
hdsp_start_audio(hdsp);
sound/pci/rme9652/hdsp.c
4160
else if (hdsp->running && !running)
sound/pci/rme9652/hdsp.c
4161
hdsp_stop_audio(hdsp);
sound/pci/rme9652/hdsp.c
4162
hdsp->running = running;
sound/pci/rme9652/hdsp.c
4169
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
4172
if (hdsp_check_for_iobox (hdsp))
sound/pci/rme9652/hdsp.c
4175
if (hdsp_check_for_firmware(hdsp, 1))
sound/pci/rme9652/hdsp.c
4178
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
4179
if (!hdsp->running)
sound/pci/rme9652/hdsp.c
4180
hdsp_reset_hw_pointer(hdsp);
sound/pci/rme9652/hdsp.c
4254
struct hdsp *hdsp = rule->private;
sound/pci/rme9652/hdsp.c
4256
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4258
list[0] = hdsp->qs_in_channels;
sound/pci/rme9652/hdsp.c
4259
list[1] = hdsp->ds_in_channels;
sound/pci/rme9652/hdsp.c
4260
list[2] = hdsp->ss_in_channels;
sound/pci/rme9652/hdsp.c
4264
list[0] = hdsp->ds_in_channels;
sound/pci/rme9652/hdsp.c
4265
list[1] = hdsp->ss_in_channels;
sound/pci/rme9652/hdsp.c
4274
struct hdsp *hdsp = rule->private;
sound/pci/rme9652/hdsp.c
4276
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4277
list[0] = hdsp->qs_out_channels;
sound/pci/rme9652/hdsp.c
4278
list[1] = hdsp->ds_out_channels;
sound/pci/rme9652/hdsp.c
4279
list[2] = hdsp->ss_out_channels;
sound/pci/rme9652/hdsp.c
4282
list[0] = hdsp->ds_out_channels;
sound/pci/rme9652/hdsp.c
4283
list[1] = hdsp->ss_out_channels;
sound/pci/rme9652/hdsp.c
4291
struct hdsp *hdsp = rule->private;
sound/pci/rme9652/hdsp.c
4294
if (r->min > 96000 && hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4296
.min = hdsp->qs_in_channels,
sound/pci/rme9652/hdsp.c
4297
.max = hdsp->qs_in_channels,
sound/pci/rme9652/hdsp.c
4303
.min = hdsp->ds_in_channels,
sound/pci/rme9652/hdsp.c
4304
.max = hdsp->ds_in_channels,
sound/pci/rme9652/hdsp.c
431
struct hdsp *hdsp;
sound/pci/rme9652/hdsp.c
4310
.min = hdsp->ss_in_channels,
sound/pci/rme9652/hdsp.c
4311
.max = hdsp->ss_in_channels,
sound/pci/rme9652/hdsp.c
4322
struct hdsp *hdsp = rule->private;
sound/pci/rme9652/hdsp.c
4325
if (r->min > 96000 && hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4327
.min = hdsp->qs_out_channels,
sound/pci/rme9652/hdsp.c
4328
.max = hdsp->qs_out_channels,
sound/pci/rme9652/hdsp.c
4334
.min = hdsp->ds_out_channels,
sound/pci/rme9652/hdsp.c
4335
.max = hdsp->ds_out_channels,
sound/pci/rme9652/hdsp.c
4341
.min = hdsp->ss_out_channels,
sound/pci/rme9652/hdsp.c
4342
.max = hdsp->ss_out_channels,
sound/pci/rme9652/hdsp.c
4353
struct hdsp *hdsp = rule->private;
sound/pci/rme9652/hdsp.c
4356
if (c->min >= hdsp->ss_out_channels) {
sound/pci/rme9652/hdsp.c
4363
} else if (c->max <= hdsp->qs_out_channels && hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4370
} else if (c->max <= hdsp->ds_out_channels) {
sound/pci/rme9652/hdsp.c
4384
struct hdsp *hdsp = rule->private;
sound/pci/rme9652/hdsp.c
4387
if (c->min >= hdsp->ss_in_channels) {
sound/pci/rme9652/hdsp.c
4394
} else if (c->max <= hdsp->qs_in_channels && hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4401
} else if (c->max <= hdsp->ds_in_channels) {
sound/pci/rme9652/hdsp.c
4414
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
4417
if (hdsp_check_for_iobox (hdsp))
sound/pci/rme9652/hdsp.c
4420
if (hdsp_check_for_firmware(hdsp, 1))
sound/pci/rme9652/hdsp.c
4423
scoped_guard(spinlock_irq, &hdsp->lock) {
sound/pci/rme9652/hdsp.c
4427
snd_pcm_set_runtime_buffer(substream, &hdsp->playback_dma_buf);
sound/pci/rme9652/hdsp.c
4429
hdsp->playback_pid = current->pid;
sound/pci/rme9652/hdsp.c
4430
hdsp->playback_substream = substream;
sound/pci/rme9652/hdsp.c
4435
if (hdsp->clock_source_locked) {
sound/pci/rme9652/hdsp.c
4436
runtime->hw.rate_min = runtime->hw.rate_max = hdsp->system_sample_rate;
sound/pci/rme9652/hdsp.c
4437
} else if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4443
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4444
runtime->hw.channels_min = hdsp->qs_out_channels;
sound/pci/rme9652/hdsp.c
4445
runtime->hw.channels_max = hdsp->ss_out_channels;
sound/pci/rme9652/hdsp.c
4449
snd_hdsp_hw_rule_out_channels, hdsp,
sound/pci/rme9652/hdsp.c
4452
snd_hdsp_hw_rule_out_channels_rate, hdsp,
sound/pci/rme9652/hdsp.c
4455
snd_hdsp_hw_rule_rate_out_channels, hdsp,
sound/pci/rme9652/hdsp.c
4458
if (RPM != hdsp->io_type) {
sound/pci/rme9652/hdsp.c
4459
hdsp->creg_spdif_stream = hdsp->creg_spdif;
sound/pci/rme9652/hdsp.c
4460
hdsp->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
sound/pci/rme9652/hdsp.c
4461
snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE |
sound/pci/rme9652/hdsp.c
4462
SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id);
sound/pci/rme9652/hdsp.c
4469
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
4471
scoped_guard(spinlock_irq, &hdsp->lock) {
sound/pci/rme9652/hdsp.c
4472
hdsp->playback_pid = -1;
sound/pci/rme9652/hdsp.c
4473
hdsp->playback_substream = NULL;
sound/pci/rme9652/hdsp.c
4476
if (RPM != hdsp->io_type) {
sound/pci/rme9652/hdsp.c
4477
hdsp->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
sound/pci/rme9652/hdsp.c
4478
snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE |
sound/pci/rme9652/hdsp.c
4479
SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id);
sound/pci/rme9652/hdsp.c
4487
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
4490
if (hdsp_check_for_iobox (hdsp))
sound/pci/rme9652/hdsp.c
4493
if (hdsp_check_for_firmware(hdsp, 1))
sound/pci/rme9652/hdsp.c
4496
scoped_guard(spinlock_irq, &hdsp->lock) {
sound/pci/rme9652/hdsp.c
4500
snd_pcm_set_runtime_buffer(substream, &hdsp->capture_dma_buf);
sound/pci/rme9652/hdsp.c
4502
hdsp->capture_pid = current->pid;
sound/pci/rme9652/hdsp.c
4503
hdsp->capture_substream = substream;
sound/pci/rme9652/hdsp.c
4508
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4509
runtime->hw.channels_min = hdsp->qs_in_channels;
sound/pci/rme9652/hdsp.c
4510
runtime->hw.channels_max = hdsp->ss_in_channels;
sound/pci/rme9652/hdsp.c
4517
snd_hdsp_hw_rule_in_channels, hdsp,
sound/pci/rme9652/hdsp.c
4520
snd_hdsp_hw_rule_in_channels_rate, hdsp,
sound/pci/rme9652/hdsp.c
4523
snd_hdsp_hw_rule_rate_in_channels, hdsp,
sound/pci/rme9652/hdsp.c
4530
struct hdsp *hdsp = snd_pcm_substream_chip(substream);
sound/pci/rme9652/hdsp.c
4532
guard(spinlock_irq)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
4534
hdsp->capture_pid = -1;
sound/pci/rme9652/hdsp.c
4535
hdsp->capture_substream = NULL;
sound/pci/rme9652/hdsp.c
4567
static int hdsp_9652_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
sound/pci/rme9652/hdsp.c
4572
if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
sound/pci/rme9652/hdsp.c
4579
if (copy_u32_le(&peak_rms->input_peaks[i], hdsp->iobase + ofs))
sound/pci/rme9652/hdsp.c
4582
if (copy_u32_le(&peak_rms->playback_peaks[i], hdsp->iobase + ofs))
sound/pci/rme9652/hdsp.c
4585
if (copy_u32_le(&peak_rms->output_peaks[i], hdsp->iobase + ofs))
sound/pci/rme9652/hdsp.c
4588
if (copy_u48_le(&peak_rms->input_rms[i], hdsp->iobase + ofs,
sound/pci/rme9652/hdsp.c
4589
hdsp->iobase + ofs + 4))
sound/pci/rme9652/hdsp.c
4592
if (copy_u48_le(&peak_rms->playback_rms[i], hdsp->iobase + ofs,
sound/pci/rme9652/hdsp.c
4593
hdsp->iobase + ofs + 4))
sound/pci/rme9652/hdsp.c
4596
if (copy_u48_le(&peak_rms->output_rms[i], hdsp->iobase + ofs,
sound/pci/rme9652/hdsp.c
4597
hdsp->iobase + ofs + 4))
sound/pci/rme9652/hdsp.c
4604
static int hdsp_9632_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
sound/pci/rme9652/hdsp.c
4610
if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DoubleSpeedStatus)
sound/pci/rme9652/hdsp.c
4612
m = (struct hdsp_9632_meters __iomem *)(hdsp->iobase+HDSP_9632_metersBase);
sound/pci/rme9652/hdsp.c
4634
static int hdsp_get_peak(struct hdsp *hdsp, struct hdsp_peak_rms __user *peak_rms)
sound/pci/rme9652/hdsp.c
4640
hdsp->iobase + HDSP_playbackPeakLevel + i * 4))
sound/pci/rme9652/hdsp.c
4643
hdsp->iobase + HDSP_inputPeakLevel + i * 4))
sound/pci/rme9652/hdsp.c
4648
hdsp->iobase + HDSP_outputPeakLevel + i * 4))
sound/pci/rme9652/hdsp.c
4653
hdsp->iobase + HDSP_playbackRmsLevel + i * 8 + 4,
sound/pci/rme9652/hdsp.c
4654
hdsp->iobase + HDSP_playbackRmsLevel + i * 8))
sound/pci/rme9652/hdsp.c
4657
hdsp->iobase + HDSP_inputRmsLevel + i * 8 + 4,
sound/pci/rme9652/hdsp.c
4658
hdsp->iobase + HDSP_inputRmsLevel + i * 8))
sound/pci/rme9652/hdsp.c
4666
struct hdsp *hdsp = hw->private_data;
sound/pci/rme9652/hdsp.c
4674
err = hdsp_check_for_iobox(hdsp);
sound/pci/rme9652/hdsp.c
4678
err = hdsp_check_for_firmware(hdsp, 1);
sound/pci/rme9652/hdsp.c
4682
if (!(hdsp->state & HDSP_FirmwareLoaded)) {
sound/pci/rme9652/hdsp.c
4683
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
4688
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
4690
return hdsp_9652_get_peak(hdsp, peak_rms);
sound/pci/rme9652/hdsp.c
4692
return hdsp_9632_get_peak(hdsp, peak_rms);
sound/pci/rme9652/hdsp.c
4694
return hdsp_get_peak(hdsp, peak_rms);
sound/pci/rme9652/hdsp.c
4701
err = hdsp_check_for_iobox(hdsp);
sound/pci/rme9652/hdsp.c
4705
err = hdsp_check_for_firmware(hdsp, 1);
sound/pci/rme9652/hdsp.c
4710
scoped_guard(spinlock_irqsave, &hdsp->lock) {
sound/pci/rme9652/hdsp.c
4711
info.pref_sync_ref = (unsigned char)hdsp_pref_sync_ref(hdsp);
sound/pci/rme9652/hdsp.c
4712
info.wordclock_sync_check = (unsigned char)hdsp_wc_sync_check(hdsp);
sound/pci/rme9652/hdsp.c
4713
if (hdsp->io_type != H9632)
sound/pci/rme9652/hdsp.c
4714
info.adatsync_sync_check = (unsigned char)hdsp_adatsync_sync_check(hdsp);
sound/pci/rme9652/hdsp.c
4715
info.spdif_sync_check = (unsigned char)hdsp_spdif_sync_check(hdsp);
sound/pci/rme9652/hdsp.c
4716
for (i = 0; i < ((hdsp->io_type != Multiface && hdsp->io_type != RPM && hdsp->io_type != H9632) ? 3 : 1); ++i)
sound/pci/rme9652/hdsp.c
4717
info.adat_sync_check[i] = (unsigned char)hdsp_adat_sync_check(hdsp, i);
sound/pci/rme9652/hdsp.c
4718
info.spdif_in = (unsigned char)hdsp_spdif_in(hdsp);
sound/pci/rme9652/hdsp.c
4719
info.spdif_out = (unsigned char)hdsp_toggle_setting(hdsp,
sound/pci/rme9652/hdsp.c
4722
hdsp_toggle_setting(hdsp, HDSP_SPDIFProfessional);
sound/pci/rme9652/hdsp.c
4724
hdsp_toggle_setting(hdsp, HDSP_SPDIFEmphasis);
sound/pci/rme9652/hdsp.c
4726
hdsp_toggle_setting(hdsp, HDSP_SPDIFNonAudio);
sound/pci/rme9652/hdsp.c
4727
info.spdif_sample_rate = hdsp_spdif_sample_rate(hdsp);
sound/pci/rme9652/hdsp.c
4728
info.system_sample_rate = hdsp->system_sample_rate;
sound/pci/rme9652/hdsp.c
4729
info.autosync_sample_rate = hdsp_external_sample_rate(hdsp);
sound/pci/rme9652/hdsp.c
4730
info.system_clock_mode = (unsigned char)hdsp_system_clock_mode(hdsp);
sound/pci/rme9652/hdsp.c
4731
info.clock_source = (unsigned char)hdsp_clock_source(hdsp);
sound/pci/rme9652/hdsp.c
4732
info.autosync_ref = (unsigned char)hdsp_autosync_ref(hdsp);
sound/pci/rme9652/hdsp.c
4734
hdsp_toggle_setting(hdsp, HDSP_LineOut);
sound/pci/rme9652/hdsp.c
4735
if (hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
4736
info.da_gain = (unsigned char)hdsp_da_gain(hdsp);
sound/pci/rme9652/hdsp.c
4737
info.ad_gain = (unsigned char)hdsp_ad_gain(hdsp);
sound/pci/rme9652/hdsp.c
4738
info.phone_gain = (unsigned char)hdsp_phone_gain(hdsp);
sound/pci/rme9652/hdsp.c
4740
(unsigned char)hdsp_toggle_setting(hdsp,
sound/pci/rme9652/hdsp.c
4743
} else if (hdsp->io_type == RPM) {
sound/pci/rme9652/hdsp.c
4744
info.da_gain = (unsigned char) hdsp_rpm_input12(hdsp);
sound/pci/rme9652/hdsp.c
4745
info.ad_gain = (unsigned char) hdsp_rpm_input34(hdsp);
sound/pci/rme9652/hdsp.c
4747
if (hdsp->io_type == H9632 || hdsp->io_type == H9652)
sound/pci/rme9652/hdsp.c
4749
(unsigned char)hdsp_toggle_setting(hdsp,
sound/pci/rme9652/hdsp.c
4759
if (hdsp->io_type != H9632) return -EINVAL;
sound/pci/rme9652/hdsp.c
4760
h9632_aeb.aebi = hdsp->ss_in_channels - H9632_SS_CHANNELS;
sound/pci/rme9652/hdsp.c
4761
h9632_aeb.aebo = hdsp->ss_out_channels - H9632_SS_CHANNELS;
sound/pci/rme9652/hdsp.c
4770
if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
sound/pci/rme9652/hdsp.c
4771
if (hdsp->io_type == Undefined) {
sound/pci/rme9652/hdsp.c
4772
err = hdsp_get_iobox_version(hdsp);
sound/pci/rme9652/hdsp.c
4777
hdsp_version.io_type = hdsp->io_type;
sound/pci/rme9652/hdsp.c
4778
hdsp_version.firmware_rev = hdsp->firmware_rev;
sound/pci/rme9652/hdsp.c
4788
if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return -EINVAL;
sound/pci/rme9652/hdsp.c
4790
if (hdsp->io_type == Undefined) return -EINVAL;
sound/pci/rme9652/hdsp.c
4792
if (hdsp->state & (HDSP_FirmwareCached | HDSP_FirmwareLoaded))
sound/pci/rme9652/hdsp.c
4795
dev_info(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
4801
if (hdsp_check_for_iobox (hdsp))
sound/pci/rme9652/hdsp.c
4804
if (!hdsp->fw_uploaded) {
sound/pci/rme9652/hdsp.c
4805
hdsp->fw_uploaded = vmalloc(HDSP_FIRMWARE_SIZE);
sound/pci/rme9652/hdsp.c
4806
if (!hdsp->fw_uploaded)
sound/pci/rme9652/hdsp.c
4810
if (copy_from_user(hdsp->fw_uploaded, firmware_data,
sound/pci/rme9652/hdsp.c
4812
vfree(hdsp->fw_uploaded);
sound/pci/rme9652/hdsp.c
4813
hdsp->fw_uploaded = NULL;
sound/pci/rme9652/hdsp.c
4817
hdsp->state |= HDSP_FirmwareCached;
sound/pci/rme9652/hdsp.c
4819
err = snd_hdsp_load_firmware_from_cache(hdsp);
sound/pci/rme9652/hdsp.c
4823
if (!(hdsp->state & HDSP_InitializationComplete)) {
sound/pci/rme9652/hdsp.c
4824
err = snd_hdsp_enable_io(hdsp);
sound/pci/rme9652/hdsp.c
4828
snd_hdsp_initialize_channels(hdsp);
sound/pci/rme9652/hdsp.c
4829
snd_hdsp_initialize_midi_flush(hdsp);
sound/pci/rme9652/hdsp.c
4831
err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp);
sound/pci/rme9652/hdsp.c
4833
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
4842
if (copy_to_user(mixer->matrix, hdsp->mixer_matrix, sizeof(unsigned short)*HDSP_MATRIX_MIXER_SIZE))
sound/pci/rme9652/hdsp.c
4875
static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
4884
hdsp->hwdep = hw;
sound/pci/rme9652/hdsp.c
4885
hw->private_data = hdsp;
sound/pci/rme9652/hdsp.c
4894
static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
4899
err = snd_pcm_new(card, hdsp->card_name, 0, 1, 1, &pcm);
sound/pci/rme9652/hdsp.c
4903
hdsp->pcm = pcm;
sound/pci/rme9652/hdsp.c
4904
pcm->private_data = hdsp;
sound/pci/rme9652/hdsp.c
4905
strscpy(pcm->name, hdsp->card_name);
sound/pci/rme9652/hdsp.c
4915
static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
4917
hdsp->control2_register |= HDSP_9652_ENABLE_MIXER;
sound/pci/rme9652/hdsp.c
4918
hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
sound/pci/rme9652/hdsp.c
4921
static int snd_hdsp_enable_io (struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
4925
if (hdsp_fifo_wait (hdsp, 0, 100)) {
sound/pci/rme9652/hdsp.c
4926
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
4931
for (i = 0; i < hdsp->max_channels; ++i) {
sound/pci/rme9652/hdsp.c
4932
hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1);
sound/pci/rme9652/hdsp.c
4933
hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1);
sound/pci/rme9652/hdsp.c
4939
static void snd_hdsp_initialize_channels(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
4943
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
4945
hdsp->card_name = "RME Hammerfall DSP + Digiface";
sound/pci/rme9652/hdsp.c
4946
hdsp->ss_in_channels = hdsp->ss_out_channels = DIGIFACE_SS_CHANNELS;
sound/pci/rme9652/hdsp.c
4947
hdsp->ds_in_channels = hdsp->ds_out_channels = DIGIFACE_DS_CHANNELS;
sound/pci/rme9652/hdsp.c
4951
hdsp->card_name = "RME Hammerfall HDSP 9652";
sound/pci/rme9652/hdsp.c
4952
hdsp->ss_in_channels = hdsp->ss_out_channels = H9652_SS_CHANNELS;
sound/pci/rme9652/hdsp.c
4953
hdsp->ds_in_channels = hdsp->ds_out_channels = H9652_DS_CHANNELS;
sound/pci/rme9652/hdsp.c
4957
status = hdsp_read(hdsp, HDSP_statusRegister);
sound/pci/rme9652/hdsp.c
4961
hdsp->card_name = "RME Hammerfall HDSP 9632";
sound/pci/rme9652/hdsp.c
4962
hdsp->ss_in_channels = H9632_SS_CHANNELS+aebi_channels;
sound/pci/rme9652/hdsp.c
4963
hdsp->ds_in_channels = H9632_DS_CHANNELS+aebi_channels;
sound/pci/rme9652/hdsp.c
4964
hdsp->qs_in_channels = H9632_QS_CHANNELS+aebi_channels;
sound/pci/rme9652/hdsp.c
4965
hdsp->ss_out_channels = H9632_SS_CHANNELS+aebo_channels;
sound/pci/rme9652/hdsp.c
4966
hdsp->ds_out_channels = H9632_DS_CHANNELS+aebo_channels;
sound/pci/rme9652/hdsp.c
4967
hdsp->qs_out_channels = H9632_QS_CHANNELS+aebo_channels;
sound/pci/rme9652/hdsp.c
4971
hdsp->io_loopback = 0xffffffff;
sound/pci/rme9652/hdsp.c
4972
for (i = 0; i < hdsp->max_channels; ++i)
sound/pci/rme9652/hdsp.c
4973
hdsp_loopback_set(hdsp, i, false);
sound/pci/rme9652/hdsp.c
4977
hdsp->card_name = "RME Hammerfall DSP + Multiface";
sound/pci/rme9652/hdsp.c
4978
hdsp->ss_in_channels = hdsp->ss_out_channels = MULTIFACE_SS_CHANNELS;
sound/pci/rme9652/hdsp.c
4979
hdsp->ds_in_channels = hdsp->ds_out_channels = MULTIFACE_DS_CHANNELS;
sound/pci/rme9652/hdsp.c
4983
hdsp->card_name = "RME Hammerfall DSP + RPM";
sound/pci/rme9652/hdsp.c
4984
hdsp->ss_in_channels = RPM_CHANNELS-1;
sound/pci/rme9652/hdsp.c
4985
hdsp->ss_out_channels = RPM_CHANNELS;
sound/pci/rme9652/hdsp.c
4986
hdsp->ds_in_channels = RPM_CHANNELS-1;
sound/pci/rme9652/hdsp.c
4987
hdsp->ds_out_channels = RPM_CHANNELS;
sound/pci/rme9652/hdsp.c
4996
static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
4998
snd_hdsp_flush_midi_input (hdsp, 0);
sound/pci/rme9652/hdsp.c
4999
snd_hdsp_flush_midi_input (hdsp, 1);
sound/pci/rme9652/hdsp.c
5002
static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
5006
err = snd_hdsp_create_pcm(card, hdsp);
sound/pci/rme9652/hdsp.c
5014
err = snd_hdsp_create_midi(card, hdsp, 0);
sound/pci/rme9652/hdsp.c
5021
if (hdsp->io_type == Digiface || hdsp->io_type == H9652) {
sound/pci/rme9652/hdsp.c
5022
err = snd_hdsp_create_midi(card, hdsp, 1);
sound/pci/rme9652/hdsp.c
5030
err = snd_hdsp_create_controls(card, hdsp);
sound/pci/rme9652/hdsp.c
5037
snd_hdsp_proc_init(hdsp);
sound/pci/rme9652/hdsp.c
5039
hdsp->system_sample_rate = -1;
sound/pci/rme9652/hdsp.c
5040
hdsp->playback_pid = -1;
sound/pci/rme9652/hdsp.c
5041
hdsp->capture_pid = -1;
sound/pci/rme9652/hdsp.c
5042
hdsp->capture_substream = NULL;
sound/pci/rme9652/hdsp.c
5043
hdsp->playback_substream = NULL;
sound/pci/rme9652/hdsp.c
5045
err = snd_hdsp_set_defaults(hdsp);
sound/pci/rme9652/hdsp.c
5052
if (!(hdsp->state & HDSP_InitializationComplete)) {
sound/pci/rme9652/hdsp.c
5054
sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
sound/pci/rme9652/hdsp.c
5055
hdsp->port, hdsp->irq);
sound/pci/rme9652/hdsp.c
5063
hdsp->state |= HDSP_InitializationComplete;
sound/pci/rme9652/hdsp.c
5070
static int hdsp_request_fw_loader(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
5076
if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
sound/pci/rme9652/hdsp.c
5078
if (hdsp->io_type == Undefined) {
sound/pci/rme9652/hdsp.c
5079
err = hdsp_get_iobox_version(hdsp);
sound/pci/rme9652/hdsp.c
5082
if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
sound/pci/rme9652/hdsp.c
5087
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
5092
if (hdsp->firmware_rev == 0xa)
sound/pci/rme9652/hdsp.c
5098
if (hdsp->firmware_rev == 0xa)
sound/pci/rme9652/hdsp.c
5104
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
5105
"invalid io_type %d\n", hdsp->io_type);
sound/pci/rme9652/hdsp.c
5109
if (request_firmware(&fw, fwfile, &hdsp->pci->dev)) {
sound/pci/rme9652/hdsp.c
5110
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
5115
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
5122
hdsp->firmware = fw;
sound/pci/rme9652/hdsp.c
5124
hdsp->state |= HDSP_FirmwareCached;
sound/pci/rme9652/hdsp.c
5126
err = snd_hdsp_load_firmware_from_cache(hdsp);
sound/pci/rme9652/hdsp.c
5130
if (!(hdsp->state & HDSP_InitializationComplete)) {
sound/pci/rme9652/hdsp.c
5131
err = snd_hdsp_enable_io(hdsp);
sound/pci/rme9652/hdsp.c
5135
err = snd_hdsp_create_hwdep(hdsp->card, hdsp);
sound/pci/rme9652/hdsp.c
5137
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
5141
snd_hdsp_initialize_channels(hdsp);
sound/pci/rme9652/hdsp.c
5142
snd_hdsp_initialize_midi_flush(hdsp);
sound/pci/rme9652/hdsp.c
5143
err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp);
sound/pci/rme9652/hdsp.c
5145
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
5154
struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
5156
struct pci_dev *pci = hdsp->pci;
sound/pci/rme9652/hdsp.c
5161
hdsp->irq = -1;
sound/pci/rme9652/hdsp.c
5162
hdsp->state = 0;
sound/pci/rme9652/hdsp.c
5163
hdsp->midi[0].rmidi = NULL;
sound/pci/rme9652/hdsp.c
5164
hdsp->midi[1].rmidi = NULL;
sound/pci/rme9652/hdsp.c
5165
hdsp->midi[0].input = NULL;
sound/pci/rme9652/hdsp.c
5166
hdsp->midi[1].input = NULL;
sound/pci/rme9652/hdsp.c
5167
hdsp->midi[0].output = NULL;
sound/pci/rme9652/hdsp.c
5168
hdsp->midi[1].output = NULL;
sound/pci/rme9652/hdsp.c
5169
hdsp->midi[0].pending = 0;
sound/pci/rme9652/hdsp.c
5170
hdsp->midi[1].pending = 0;
sound/pci/rme9652/hdsp.c
5171
spin_lock_init(&hdsp->midi[0].lock);
sound/pci/rme9652/hdsp.c
5172
spin_lock_init(&hdsp->midi[1].lock);
sound/pci/rme9652/hdsp.c
5173
hdsp->iobase = NULL;
sound/pci/rme9652/hdsp.c
5174
hdsp->control_register = 0;
sound/pci/rme9652/hdsp.c
5175
hdsp->control2_register = 0;
sound/pci/rme9652/hdsp.c
5176
hdsp->io_type = Undefined;
sound/pci/rme9652/hdsp.c
5177
hdsp->max_channels = 26;
sound/pci/rme9652/hdsp.c
5179
hdsp->card = card;
sound/pci/rme9652/hdsp.c
5181
spin_lock_init(&hdsp->lock);
sound/pci/rme9652/hdsp.c
5183
INIT_WORK(&hdsp->midi_work, hdsp_midi_work);
sound/pci/rme9652/hdsp.c
5185
pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &hdsp->firmware_rev);
sound/pci/rme9652/hdsp.c
5186
hdsp->firmware_rev &= 0xff;
sound/pci/rme9652/hdsp.c
5195
pci_write_config_byte(hdsp->pci, PCI_LATENCY_TIMER, 0xFF);
sound/pci/rme9652/hdsp.c
5200
if (hdsp->firmware_rev < 0xa)
sound/pci/rme9652/hdsp.c
5202
else if (hdsp->firmware_rev < 0x64)
sound/pci/rme9652/hdsp.c
5203
hdsp->card_name = "RME Hammerfall DSP";
sound/pci/rme9652/hdsp.c
5204
else if (hdsp->firmware_rev < 0x96) {
sound/pci/rme9652/hdsp.c
5205
hdsp->card_name = "RME HDSP 9652";
sound/pci/rme9652/hdsp.c
5208
hdsp->card_name = "RME HDSP 9632";
sound/pci/rme9652/hdsp.c
5209
hdsp->max_channels = 16;
sound/pci/rme9652/hdsp.c
5217
pci_set_master(hdsp->pci);
sound/pci/rme9652/hdsp.c
5222
hdsp->port = pci_resource_start(pci, 0);
sound/pci/rme9652/hdsp.c
5223
hdsp->iobase = devm_ioremap(&pci->dev, hdsp->port, HDSP_IO_EXTENT);
sound/pci/rme9652/hdsp.c
5224
if (!hdsp->iobase) {
sound/pci/rme9652/hdsp.c
5225
dev_err(hdsp->card->dev, "unable to remap region 0x%lx-0x%lx\n",
sound/pci/rme9652/hdsp.c
5226
hdsp->port, hdsp->port + HDSP_IO_EXTENT - 1);
sound/pci/rme9652/hdsp.c
5231
IRQF_SHARED, KBUILD_MODNAME, hdsp)) {
sound/pci/rme9652/hdsp.c
5232
dev_err(hdsp->card->dev, "unable to use IRQ %d\n", pci->irq);
sound/pci/rme9652/hdsp.c
5236
hdsp->irq = pci->irq;
sound/pci/rme9652/hdsp.c
5237
card->sync_irq = hdsp->irq;
sound/pci/rme9652/hdsp.c
5238
hdsp->precise_ptr = 0;
sound/pci/rme9652/hdsp.c
5239
hdsp->use_midi_work = 1;
sound/pci/rme9652/hdsp.c
5240
hdsp->dds_value = 0;
sound/pci/rme9652/hdsp.c
5242
err = snd_hdsp_initialize_memory(hdsp);
sound/pci/rme9652/hdsp.c
5249
err = hdsp_wait_for_iobox(hdsp, 1000, 10);
sound/pci/rme9652/hdsp.c
5254
if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
sound/pci/rme9652/hdsp.c
5255
err = hdsp_request_fw_loader(hdsp);
sound/pci/rme9652/hdsp.c
5261
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
5267
dev_info(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
5269
err = snd_hdsp_create_hwdep(card, hdsp);
sound/pci/rme9652/hdsp.c
5274
dev_info(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
5276
if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2)
sound/pci/rme9652/hdsp.c
5277
hdsp->io_type = RPM;
sound/pci/rme9652/hdsp.c
5278
else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
sound/pci/rme9652/hdsp.c
5279
hdsp->io_type = Multiface;
sound/pci/rme9652/hdsp.c
5281
hdsp->io_type = Digiface;
sound/pci/rme9652/hdsp.c
5285
err = snd_hdsp_enable_io(hdsp);
sound/pci/rme9652/hdsp.c
5290
hdsp->io_type = H9652;
sound/pci/rme9652/hdsp.c
5293
hdsp->io_type = H9632;
sound/pci/rme9652/hdsp.c
5295
err = snd_hdsp_create_hwdep(card, hdsp);
sound/pci/rme9652/hdsp.c
5299
snd_hdsp_initialize_channels(hdsp);
sound/pci/rme9652/hdsp.c
5300
snd_hdsp_initialize_midi_flush(hdsp);
sound/pci/rme9652/hdsp.c
5302
hdsp->state |= HDSP_FirmwareLoaded;
sound/pci/rme9652/hdsp.c
5304
err = snd_hdsp_create_alsa_devices(card, hdsp);
sound/pci/rme9652/hdsp.c
5313
struct hdsp *hdsp = card->private_data;
sound/pci/rme9652/hdsp.c
5315
if (hdsp->port) {
sound/pci/rme9652/hdsp.c
5317
cancel_work_sync(&hdsp->midi_work);
sound/pci/rme9652/hdsp.c
5318
hdsp->control_register &= ~(HDSP_Start|HDSP_AudioInterruptEnable|HDSP_Midi0InterruptEnable|HDSP_Midi1InterruptEnable);
sound/pci/rme9652/hdsp.c
5319
hdsp_write (hdsp, HDSP_controlRegister, hdsp->control_register);
sound/pci/rme9652/hdsp.c
5322
release_firmware(hdsp->firmware);
sound/pci/rme9652/hdsp.c
5323
vfree(hdsp->fw_uploaded);
sound/pci/rme9652/hdsp.c
5330
struct hdsp *hdsp;
sound/pci/rme9652/hdsp.c
5342
sizeof(struct hdsp), &card);
sound/pci/rme9652/hdsp.c
5346
hdsp = card->private_data;
sound/pci/rme9652/hdsp.c
5348
hdsp->dev = dev;
sound/pci/rme9652/hdsp.c
5349
hdsp->pci = pci;
sound/pci/rme9652/hdsp.c
5350
err = snd_hdsp_create(card, hdsp);
sound/pci/rme9652/hdsp.c
5355
sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name,
sound/pci/rme9652/hdsp.c
5356
hdsp->port, hdsp->irq);
sound/pci/rme9652/hdsp.c
590
static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp);
sound/pci/rme9652/hdsp.c
591
static int snd_hdsp_create_pcm(struct snd_card *card, struct hdsp *hdsp);
sound/pci/rme9652/hdsp.c
592
static int snd_hdsp_enable_io (struct hdsp *hdsp);
sound/pci/rme9652/hdsp.c
593
static void snd_hdsp_initialize_midi_flush (struct hdsp *hdsp);
sound/pci/rme9652/hdsp.c
594
static void snd_hdsp_initialize_channels (struct hdsp *hdsp);
sound/pci/rme9652/hdsp.c
595
static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout);
sound/pci/rme9652/hdsp.c
596
static int hdsp_autosync_ref(struct hdsp *hdsp);
sound/pci/rme9652/hdsp.c
597
static int snd_hdsp_set_defaults(struct hdsp *hdsp);
sound/pci/rme9652/hdsp.c
598
static void snd_hdsp_9652_enable_mixer (struct hdsp *hdsp);
sound/pci/rme9652/hdsp.c
600
static int hdsp_playback_to_output_key (struct hdsp *hdsp, int in, int out)
sound/pci/rme9652/hdsp.c
602
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
607
if (hdsp->firmware_rev == 0xa)
sound/pci/rme9652/hdsp.c
618
static int hdsp_input_to_output_key (struct hdsp *hdsp, int in, int out)
sound/pci/rme9652/hdsp.c
620
switch (hdsp->io_type) {
sound/pci/rme9652/hdsp.c
625
if (hdsp->firmware_rev == 0xa)
sound/pci/rme9652/hdsp.c
636
static void hdsp_write(struct hdsp *hdsp, int reg, int val)
sound/pci/rme9652/hdsp.c
638
writel(val, hdsp->iobase + reg);
sound/pci/rme9652/hdsp.c
641
static unsigned int hdsp_read(struct hdsp *hdsp, int reg)
sound/pci/rme9652/hdsp.c
643
return readl (hdsp->iobase + reg);
sound/pci/rme9652/hdsp.c
646
static int hdsp_check_for_iobox (struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
650
if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
sound/pci/rme9652/hdsp.c
652
if (0 == (hdsp_read(hdsp, HDSP_statusRegister) &
sound/pci/rme9652/hdsp.c
655
dev_dbg(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
663
dev_err(hdsp->card->dev, "no IO box connected!\n");
sound/pci/rme9652/hdsp.c
664
hdsp->state &= ~HDSP_FirmwareLoaded;
sound/pci/rme9652/hdsp.c
668
static int hdsp_wait_for_iobox(struct hdsp *hdsp, unsigned int loops,
sound/pci/rme9652/hdsp.c
673
if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
sound/pci/rme9652/hdsp.c
677
if (hdsp_read(hdsp, HDSP_statusRegister) & HDSP_ConfigError)
sound/pci/rme9652/hdsp.c
680
dev_dbg(hdsp->card->dev, "iobox found after %ums!\n",
sound/pci/rme9652/hdsp.c
686
dev_info(hdsp->card->dev, "no IO box connected!\n");
sound/pci/rme9652/hdsp.c
687
hdsp->state &= ~HDSP_FirmwareLoaded;
sound/pci/rme9652/hdsp.c
691
static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
sound/pci/rme9652/hdsp.c
696
if (hdsp->fw_uploaded)
sound/pci/rme9652/hdsp.c
697
cache = hdsp->fw_uploaded;
sound/pci/rme9652/hdsp.c
699
if (!hdsp->firmware)
sound/pci/rme9652/hdsp.c
701
cache = (u32 *)hdsp->firmware->data;
sound/pci/rme9652/hdsp.c
706
if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
sound/pci/rme9652/hdsp.c
708
dev_info(hdsp->card->dev, "loading firmware\n");
sound/pci/rme9652/hdsp.c
710
hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_PROGRAM);
sound/pci/rme9652/hdsp.c
711
hdsp_write (hdsp, HDSP_fifoData, 0);
sound/pci/rme9652/hdsp.c
713
if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) {
sound/pci/rme9652/hdsp.c
714
dev_info(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
716
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
sound/pci/rme9652/hdsp.c
720
hdsp_write (hdsp, HDSP_control2Reg, HDSP_S_LOAD);
sound/pci/rme9652/hdsp.c
723
hdsp_write(hdsp, HDSP_fifoData, cache[i]);
sound/pci/rme9652/hdsp.c
724
if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) {
sound/pci/rme9652/hdsp.c
725
dev_info(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
727
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
sound/pci/rme9652/hdsp.c
732
hdsp_fifo_wait(hdsp, 3, HDSP_LONG_WAIT);
sound/pci/rme9652/hdsp.c
733
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200);
sound/pci/rme9652/hdsp.c
737
hdsp->control2_register = HDSP_BIGENDIAN_MODE;
sound/pci/rme9652/hdsp.c
739
hdsp->control2_register = 0;
sound/pci/rme9652/hdsp.c
741
hdsp_write (hdsp, HDSP_control2Reg, hdsp->control2_register);
sound/pci/rme9652/hdsp.c
742
dev_info(hdsp->card->dev, "finished firmware loading\n");
sound/pci/rme9652/hdsp.c
745
if (hdsp->state & HDSP_InitializationComplete) {
sound/pci/rme9652/hdsp.c
746
dev_info(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
748
guard(spinlock_irqsave)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
749
snd_hdsp_set_defaults(hdsp);
sound/pci/rme9652/hdsp.c
752
hdsp->state |= HDSP_FirmwareLoaded;
sound/pci/rme9652/hdsp.c
757
static int hdsp_get_iobox_version (struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
759
if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
sound/pci/rme9652/hdsp.c
761
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
sound/pci/rme9652/hdsp.c
762
hdsp_write(hdsp, HDSP_fifoData, 0);
sound/pci/rme9652/hdsp.c
764
if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) {
sound/pci/rme9652/hdsp.c
765
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
sound/pci/rme9652/hdsp.c
766
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
sound/pci/rme9652/hdsp.c
769
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200 | HDSP_PROGRAM);
sound/pci/rme9652/hdsp.c
770
hdsp_write (hdsp, HDSP_fifoData, 0);
sound/pci/rme9652/hdsp.c
771
if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
sound/pci/rme9652/hdsp.c
774
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
sound/pci/rme9652/hdsp.c
775
hdsp_write(hdsp, HDSP_fifoData, 0);
sound/pci/rme9652/hdsp.c
776
if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) {
sound/pci/rme9652/hdsp.c
777
hdsp->io_type = Digiface;
sound/pci/rme9652/hdsp.c
778
dev_info(hdsp->card->dev, "Digiface found\n");
sound/pci/rme9652/hdsp.c
782
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
sound/pci/rme9652/hdsp.c
783
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
sound/pci/rme9652/hdsp.c
784
hdsp_write(hdsp, HDSP_fifoData, 0);
sound/pci/rme9652/hdsp.c
785
if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0)
sound/pci/rme9652/hdsp.c
788
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
sound/pci/rme9652/hdsp.c
789
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
sound/pci/rme9652/hdsp.c
790
hdsp_write(hdsp, HDSP_fifoData, 0);
sound/pci/rme9652/hdsp.c
791
if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
sound/pci/rme9652/hdsp.c
794
hdsp->io_type = RPM;
sound/pci/rme9652/hdsp.c
795
dev_info(hdsp->card->dev, "RPM found\n");
sound/pci/rme9652/hdsp.c
799
if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version2)
sound/pci/rme9652/hdsp.c
800
hdsp->io_type = RPM;
sound/pci/rme9652/hdsp.c
801
else if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1)
sound/pci/rme9652/hdsp.c
802
hdsp->io_type = Multiface;
sound/pci/rme9652/hdsp.c
804
hdsp->io_type = Digiface;
sound/pci/rme9652/hdsp.c
809
hdsp->io_type = Multiface;
sound/pci/rme9652/hdsp.c
810
dev_info(hdsp->card->dev, "Multiface found\n");
sound/pci/rme9652/hdsp.c
815
static int hdsp_request_fw_loader(struct hdsp *hdsp);
sound/pci/rme9652/hdsp.c
817
static int hdsp_check_for_firmware (struct hdsp *hdsp, int load_on_demand)
sound/pci/rme9652/hdsp.c
819
if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
sound/pci/rme9652/hdsp.c
821
if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) {
sound/pci/rme9652/hdsp.c
822
hdsp->state &= ~HDSP_FirmwareLoaded;
sound/pci/rme9652/hdsp.c
825
dev_err(hdsp->card->dev, "firmware not present.\n");
sound/pci/rme9652/hdsp.c
827
if (! (hdsp->state & HDSP_FirmwareCached)) {
sound/pci/rme9652/hdsp.c
828
if (! hdsp_request_fw_loader(hdsp))
sound/pci/rme9652/hdsp.c
830
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
834
if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) {
sound/pci/rme9652/hdsp.c
835
dev_err(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
844
static int hdsp_fifo_wait(struct hdsp *hdsp, int count, int timeout)
sound/pci/rme9652/hdsp.c
854
if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count)
sound/pci/rme9652/hdsp.c
864
dev_warn(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
870
static int hdsp_read_gain (struct hdsp *hdsp, unsigned int addr)
sound/pci/rme9652/hdsp.c
875
return hdsp->mixer_matrix[addr];
sound/pci/rme9652/hdsp.c
878
static int hdsp_write_gain(struct hdsp *hdsp, unsigned int addr, unsigned short data)
sound/pci/rme9652/hdsp.c
885
if (hdsp->io_type == H9652 || hdsp->io_type == H9632) {
sound/pci/rme9652/hdsp.c
899
if (hdsp->io_type == H9632 && addr >= 512)
sound/pci/rme9652/hdsp.c
902
if (hdsp->io_type == H9652 && addr >= 1352)
sound/pci/rme9652/hdsp.c
905
hdsp->mixer_matrix[addr] = data;
sound/pci/rme9652/hdsp.c
917
hdsp_write (hdsp, 4096 + (ad*4),
sound/pci/rme9652/hdsp.c
918
(hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) +
sound/pci/rme9652/hdsp.c
919
hdsp->mixer_matrix[addr&0x7fe]);
sound/pci/rme9652/hdsp.c
927
if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT))
sound/pci/rme9652/hdsp.c
930
hdsp_write (hdsp, HDSP_fifoData, ad);
sound/pci/rme9652/hdsp.c
931
hdsp->mixer_matrix[addr] = data;
sound/pci/rme9652/hdsp.c
938
static int snd_hdsp_use_is_exclusive(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
942
guard(spinlock_irqsave)(&hdsp->lock);
sound/pci/rme9652/hdsp.c
943
if ((hdsp->playback_pid != hdsp->capture_pid) &&
sound/pci/rme9652/hdsp.c
944
(hdsp->playback_pid >= 0) && (hdsp->capture_pid >= 0))
sound/pci/rme9652/hdsp.c
949
static int hdsp_spdif_sample_rate(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
951
unsigned int status = hdsp_read(hdsp, HDSP_statusRegister);
sound/pci/rme9652/hdsp.c
955
if (hdsp->io_type == H9632)
sound/pci/rme9652/hdsp.c
969
if (hdsp->io_type == H9632) return 128000;
sound/pci/rme9652/hdsp.c
972
if (hdsp->io_type == H9632) return 176400;
sound/pci/rme9652/hdsp.c
975
if (hdsp->io_type == H9632) return 192000;
sound/pci/rme9652/hdsp.c
980
dev_warn(hdsp->card->dev,
sound/pci/rme9652/hdsp.c
986
static int hdsp_external_sample_rate(struct hdsp *hdsp)
sound/pci/rme9652/hdsp.c
988
unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register);
sound/pci/rme9652/hdsp.c
995
if (hdsp->io_type == H9632 &&
sound/pci/rme9652/hdsp.c
996
hdsp_autosync_ref(hdsp) == HDSP_AUTOSYNC_FROM_SPDIF)
sound/pci/rme9652/hdsp.c
997
return hdsp_spdif_sample_rate(hdsp);