sound/pci/rme96.c
1000
writel(rme96->wcreg |= rme96->wcreg_spdif_stream, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1008
snd_rme96_apply_dac_volume(rme96);
sound/pci/rme96.c
1018
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1022
runtime->dma_area = (void __force *)(rme96->iobase +
sound/pci/rme96.c
1024
runtime->dma_addr = rme96->port + RME96_IO_REC_BUFFER;
sound/pci/rme96.c
1027
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1028
err = snd_rme96_capture_setformat(rme96, params_format(params));
sound/pci/rme96.c
1031
if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) {
sound/pci/rme96.c
1032
err = snd_rme96_capture_analog_setrate(rme96, params_rate(params));
sound/pci/rme96.c
1036
rate = snd_rme96_capture_getrate(rme96, &isadat);
sound/pci/rme96.c
1045
snd_rme96_setframelog(rme96, params_channels(params), 0);
sound/pci/rme96.c
1046
if (rme96->playback_periodsize != 0) {
sound/pci/rme96.c
1047
if (params_period_size(params) << rme96->capture_frlog !=
sound/pci/rme96.c
1048
rme96->playback_periodsize)
sound/pci/rme96.c
1051
rme96->capture_periodsize =
sound/pci/rme96.c
1052
params_period_size(params) << rme96->capture_frlog;
sound/pci/rme96.c
1053
snd_rme96_set_period_properties(rme96, rme96->capture_periodsize);
sound/pci/rme96.c
1059
snd_rme96_trigger(struct rme96 *rme96,
sound/pci/rme96.c
1063
writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS);
sound/pci/rme96.c
1065
writel(0, rme96->iobase + RME96_IO_RESET_REC_POS);
sound/pci/rme96.c
1067
rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1068
if (rme96->rcreg & RME96_RCR_IRQ)
sound/pci/rme96.c
1069
writel(0, rme96->iobase + RME96_IO_CONFIRM_PLAY_IRQ);
sound/pci/rme96.c
1072
rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1073
if (rme96->rcreg & RME96_RCR_IRQ_2)
sound/pci/rme96.c
1074
writel(0, rme96->iobase + RME96_IO_CONFIRM_REC_IRQ);
sound/pci/rme96.c
1077
rme96->wcreg |= RME96_WCR_START;
sound/pci/rme96.c
1079
rme96->wcreg &= ~RME96_WCR_START;
sound/pci/rme96.c
1081
rme96->wcreg |= RME96_WCR_START_2;
sound/pci/rme96.c
1083
rme96->wcreg &= ~RME96_WCR_START_2;
sound/pci/rme96.c
1084
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1093
struct rme96 *rme96 = (struct rme96 *)dev_id;
sound/pci/rme96.c
1095
rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1097
if (!((rme96->rcreg & RME96_RCR_IRQ) ||
sound/pci/rme96.c
1098
(rme96->rcreg & RME96_RCR_IRQ_2)))
sound/pci/rme96.c
1103
if (rme96->rcreg & RME96_RCR_IRQ) {
sound/pci/rme96.c
1105
snd_pcm_period_elapsed(rme96->playback_substream);
sound/pci/rme96.c
1106
writel(0, rme96->iobase + RME96_IO_CONFIRM_PLAY_IRQ);
sound/pci/rme96.c
1108
if (rme96->rcreg & RME96_RCR_IRQ_2) {
sound/pci/rme96.c
1110
snd_pcm_period_elapsed(rme96->capture_substream);
sound/pci/rme96.c
1111
writel(0, rme96->iobase + RME96_IO_CONFIRM_REC_IRQ);
sound/pci/rme96.c
1125
rme96_set_buffer_size_constraint(struct rme96 *rme96,
sound/pci/rme96.c
1132
size = rme96->playback_periodsize;
sound/pci/rme96.c
1134
size = rme96->capture_periodsize;
sound/pci/rme96.c
1149
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1153
scoped_guard(spinlock_irq, &rme96->lock) {
sound/pci/rme96.c
1154
if (rme96->playback_substream)
sound/pci/rme96.c
1156
rme96->wcreg &= ~RME96_WCR_ADAT;
sound/pci/rme96.c
1157
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1158
rme96->playback_substream = substream;
sound/pci/rme96.c
1162
if (!(rme96->wcreg & RME96_WCR_MASTER) &&
sound/pci/rme96.c
1163
snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) {
sound/pci/rme96.c
1164
rate = snd_rme96_capture_getrate(rme96, &dummy);
sound/pci/rme96.c
1172
rme96_set_buffer_size_constraint(rme96, runtime);
sound/pci/rme96.c
1174
rme96->wcreg_spdif_stream = rme96->wcreg_spdif;
sound/pci/rme96.c
1175
rme96->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
sound/pci/rme96.c
1176
snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE |
sound/pci/rme96.c
1177
SNDRV_CTL_EVENT_MASK_INFO, &rme96->spdif_ctl->id);
sound/pci/rme96.c
1185
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1190
if (snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) {
sound/pci/rme96.c
1191
rate = snd_rme96_capture_getrate(rme96, &isadat);
sound/pci/rme96.c
1201
scoped_guard(spinlock_irq, &rme96->lock) {
sound/pci/rme96.c
1202
if (rme96->capture_substream)
sound/pci/rme96.c
1204
rme96->capture_substream = substream;
sound/pci/rme96.c
1207
rme96_set_buffer_size_constraint(rme96, runtime);
sound/pci/rme96.c
1215
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1219
scoped_guard(spinlock_irq, &rme96->lock) {
sound/pci/rme96.c
1220
if (rme96->playback_substream)
sound/pci/rme96.c
1222
rme96->wcreg |= RME96_WCR_ADAT;
sound/pci/rme96.c
1223
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1224
rme96->playback_substream = substream;
sound/pci/rme96.c
1228
if (!(rme96->wcreg & RME96_WCR_MASTER) &&
sound/pci/rme96.c
1229
snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) {
sound/pci/rme96.c
1230
rate = snd_rme96_capture_getrate(rme96, &dummy);
sound/pci/rme96.c
1239
rme96_set_buffer_size_constraint(rme96, runtime);
sound/pci/rme96.c
1247
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1252
if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) {
sound/pci/rme96.c
1257
rate = snd_rme96_capture_getrate(rme96, &isadat);
sound/pci/rme96.c
1267
scoped_guard(spinlock_irq, &rme96->lock) {
sound/pci/rme96.c
1268
if (rme96->capture_substream)
sound/pci/rme96.c
1270
rme96->capture_substream = substream;
sound/pci/rme96.c
1273
rme96_set_buffer_size_constraint(rme96, runtime);
sound/pci/rme96.c
1280
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1283
scoped_guard(spinlock_irq, &rme96->lock) {
sound/pci/rme96.c
1284
if (RME96_ISPLAYING(rme96))
sound/pci/rme96.c
1285
snd_rme96_trigger(rme96, RME96_STOP_PLAYBACK);
sound/pci/rme96.c
1286
rme96->playback_substream = NULL;
sound/pci/rme96.c
1287
rme96->playback_periodsize = 0;
sound/pci/rme96.c
1288
spdif = (rme96->wcreg & RME96_WCR_ADAT) == 0;
sound/pci/rme96.c
1291
rme96->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE;
sound/pci/rme96.c
1292
snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE |
sound/pci/rme96.c
1293
SNDRV_CTL_EVENT_MASK_INFO, &rme96->spdif_ctl->id);
sound/pci/rme96.c
1301
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1303
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1304
if (RME96_ISRECORDING(rme96)) {
sound/pci/rme96.c
1305
snd_rme96_trigger(rme96, RME96_STOP_CAPTURE);
sound/pci/rme96.c
1307
rme96->capture_substream = NULL;
sound/pci/rme96.c
1308
rme96->capture_periodsize = 0;
sound/pci/rme96.c
1315
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1317
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1318
if (RME96_ISPLAYING(rme96)) {
sound/pci/rme96.c
1319
snd_rme96_trigger(rme96, RME96_STOP_PLAYBACK);
sound/pci/rme96.c
1321
writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS);
sound/pci/rme96.c
1328
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1330
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1331
if (RME96_ISRECORDING(rme96)) {
sound/pci/rme96.c
1332
snd_rme96_trigger(rme96, RME96_STOP_CAPTURE);
sound/pci/rme96.c
1334
writel(0, rme96->iobase + RME96_IO_RESET_REC_POS);
sound/pci/rme96.c
1342
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1347
if (snd_pcm_substream_chip(s) == rme96)
sound/pci/rme96.c
1351
sync = (rme96->playback_substream && rme96->capture_substream) &&
sound/pci/rme96.c
1352
(rme96->playback_substream->group ==
sound/pci/rme96.c
1353
rme96->capture_substream->group);
sound/pci/rme96.c
1357
if (!RME96_ISPLAYING(rme96)) {
sound/pci/rme96.c
1358
if (substream != rme96->playback_substream)
sound/pci/rme96.c
1360
snd_rme96_trigger(rme96, sync ? RME96_START_BOTH
sound/pci/rme96.c
1367
if (RME96_ISPLAYING(rme96)) {
sound/pci/rme96.c
1368
if (substream != rme96->playback_substream)
sound/pci/rme96.c
1370
snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH
sound/pci/rme96.c
1376
if (RME96_ISPLAYING(rme96))
sound/pci/rme96.c
1377
snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH
sound/pci/rme96.c
1383
if (!RME96_ISPLAYING(rme96))
sound/pci/rme96.c
1384
snd_rme96_trigger(rme96, sync ? RME96_RESUME_BOTH
sound/pci/rme96.c
1399
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1404
if (snd_pcm_substream_chip(s) == rme96)
sound/pci/rme96.c
1408
sync = (rme96->playback_substream && rme96->capture_substream) &&
sound/pci/rme96.c
1409
(rme96->playback_substream->group ==
sound/pci/rme96.c
1410
rme96->capture_substream->group);
sound/pci/rme96.c
1414
if (!RME96_ISRECORDING(rme96)) {
sound/pci/rme96.c
1415
if (substream != rme96->capture_substream)
sound/pci/rme96.c
1417
snd_rme96_trigger(rme96, sync ? RME96_START_BOTH
sound/pci/rme96.c
1424
if (RME96_ISRECORDING(rme96)) {
sound/pci/rme96.c
1425
if (substream != rme96->capture_substream)
sound/pci/rme96.c
1427
snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH
sound/pci/rme96.c
1433
if (RME96_ISRECORDING(rme96))
sound/pci/rme96.c
1434
snd_rme96_trigger(rme96, sync ? RME96_STOP_BOTH
sound/pci/rme96.c
1440
if (!RME96_ISRECORDING(rme96))
sound/pci/rme96.c
1441
snd_rme96_trigger(rme96, sync ? RME96_RESUME_BOTH
sound/pci/rme96.c
1455
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1456
return snd_rme96_playback_ptr(rme96);
sound/pci/rme96.c
1462
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
1463
return snd_rme96_capture_ptr(rme96);
sound/pci/rme96.c
1513
snd_rme96_free(struct rme96 *rme96)
sound/pci/rme96.c
1515
if (rme96->irq >= 0) {
sound/pci/rme96.c
1516
snd_rme96_trigger(rme96, RME96_STOP_BOTH);
sound/pci/rme96.c
1517
rme96->areg &= ~RME96_AR_DAC_EN;
sound/pci/rme96.c
1518
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
1520
vfree(rme96->playback_suspend_buffer);
sound/pci/rme96.c
1521
vfree(rme96->capture_suspend_buffer);
sound/pci/rme96.c
1527
struct rme96 *rme96 = pcm->private_data;
sound/pci/rme96.c
1528
rme96->spdif_pcm = NULL;
sound/pci/rme96.c
1534
struct rme96 *rme96 = pcm->private_data;
sound/pci/rme96.c
1535
rme96->adat_pcm = NULL;
sound/pci/rme96.c
1539
snd_rme96_create(struct rme96 *rme96)
sound/pci/rme96.c
1541
struct pci_dev *pci = rme96->pci;
sound/pci/rme96.c
1544
rme96->irq = -1;
sound/pci/rme96.c
1545
spin_lock_init(&rme96->lock);
sound/pci/rme96.c
1554
rme96->port = pci_resource_start(rme96->pci, 0);
sound/pci/rme96.c
1556
rme96->iobase = devm_ioremap(&pci->dev, rme96->port, RME96_IO_SIZE);
sound/pci/rme96.c
1557
if (!rme96->iobase) {
sound/pci/rme96.c
1558
dev_err(rme96->card->dev,
sound/pci/rme96.c
1560
rme96->port, rme96->port + RME96_IO_SIZE - 1);
sound/pci/rme96.c
1565
IRQF_SHARED, KBUILD_MODNAME, rme96)) {
sound/pci/rme96.c
1566
dev_err(rme96->card->dev, "unable to grab IRQ %d\n", pci->irq);
sound/pci/rme96.c
1569
rme96->irq = pci->irq;
sound/pci/rme96.c
1570
rme96->card->sync_irq = rme96->irq;
sound/pci/rme96.c
1573
pci_read_config_byte(pci, 8, &rme96->rev);
sound/pci/rme96.c
1576
err = snd_pcm_new(rme96->card, "Digi96 IEC958", 0,
sound/pci/rme96.c
1577
1, 1, &rme96->spdif_pcm);
sound/pci/rme96.c
1581
rme96->spdif_pcm->private_data = rme96;
sound/pci/rme96.c
1582
rme96->spdif_pcm->private_free = snd_rme96_free_spdif_pcm;
sound/pci/rme96.c
1583
strscpy(rme96->spdif_pcm->name, "Digi96 IEC958");
sound/pci/rme96.c
1584
snd_pcm_set_ops(rme96->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_rme96_playback_spdif_ops);
sound/pci/rme96.c
1585
snd_pcm_set_ops(rme96->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_rme96_capture_spdif_ops);
sound/pci/rme96.c
1587
rme96->spdif_pcm->info_flags = 0;
sound/pci/rme96.c
1592
rme96->adat_pcm = NULL;
sound/pci/rme96.c
1594
err = snd_pcm_new(rme96->card, "Digi96 ADAT", 1,
sound/pci/rme96.c
1595
1, 1, &rme96->adat_pcm);
sound/pci/rme96.c
1598
rme96->adat_pcm->private_data = rme96;
sound/pci/rme96.c
1599
rme96->adat_pcm->private_free = snd_rme96_free_adat_pcm;
sound/pci/rme96.c
1600
strscpy(rme96->adat_pcm->name, "Digi96 ADAT");
sound/pci/rme96.c
1601
snd_pcm_set_ops(rme96->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_rme96_playback_adat_ops);
sound/pci/rme96.c
1602
snd_pcm_set_ops(rme96->adat_pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_rme96_capture_adat_ops);
sound/pci/rme96.c
1604
rme96->adat_pcm->info_flags = 0;
sound/pci/rme96.c
1607
rme96->playback_periodsize = 0;
sound/pci/rme96.c
1608
rme96->capture_periodsize = 0;
sound/pci/rme96.c
1611
snd_rme96_trigger(rme96, RME96_STOP_BOTH);
sound/pci/rme96.c
1614
rme96->wcreg =
sound/pci/rme96.c
1620
rme96->areg = RME96_AR_FREQPAD_1; /* set 44.1 kHz analog capture */
sound/pci/rme96.c
1622
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1623
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
1626
writel(rme96->areg | RME96_AR_PD2,
sound/pci/rme96.c
1627
rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
1628
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
1631
snd_rme96_reset_dac(rme96);
sound/pci/rme96.c
1632
rme96->areg |= RME96_AR_DAC_EN;
sound/pci/rme96.c
1633
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
1636
writel(0, rme96->iobase + RME96_IO_RESET_PLAY_POS);
sound/pci/rme96.c
1637
writel(0, rme96->iobase + RME96_IO_RESET_REC_POS);
sound/pci/rme96.c
1640
rme96->vol[0] = rme96->vol[1] = 0;
sound/pci/rme96.c
1641
if (RME96_HAS_ANALOG_OUT(rme96)) {
sound/pci/rme96.c
1642
snd_rme96_apply_dac_volume(rme96);
sound/pci/rme96.c
1646
err = snd_rme96_create_switches(rme96->card, rme96);
sound/pci/rme96.c
1651
snd_rme96_proc_init(rme96);
sound/pci/rme96.c
1664
struct rme96 *rme96 = entry->private_data;
sound/pci/rme96.c
1666
rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1668
snd_iprintf(buffer, rme96->card->longname);
sound/pci/rme96.c
1669
snd_iprintf(buffer, " (index #%d)\n", rme96->card->number + 1);
sound/pci/rme96.c
1672
if (rme96->wcreg & RME96_WCR_IDIS) {
sound/pci/rme96.c
1675
} else if (rme96->wcreg & RME96_WCR_ISEL) {
sound/pci/rme96.c
1681
switch (snd_rme96_getinputtype(rme96)) {
sound/pci/rme96.c
1698
if (snd_rme96_capture_getrate(rme96, &n) < 0) {
sound/pci/rme96.c
1707
snd_rme96_capture_getrate(rme96, &n));
sound/pci/rme96.c
1709
if (rme96->wcreg & RME96_WCR_MODE24_2) {
sound/pci/rme96.c
1716
if (rme96->wcreg & RME96_WCR_SEL) {
sound/pci/rme96.c
1722
snd_rme96_playback_getrate(rme96));
sound/pci/rme96.c
1723
if (rme96->wcreg & RME96_WCR_MODE24) {
sound/pci/rme96.c
1728
if (rme96->areg & RME96_AR_WSEL) {
sound/pci/rme96.c
1730
} else if (rme96->wcreg & RME96_WCR_MASTER) {
sound/pci/rme96.c
1732
} else if (snd_rme96_getinputtype(rme96) == RME96_INPUT_ANALOG) {
sound/pci/rme96.c
1734
} else if (snd_rme96_capture_getrate(rme96, &n) < 0) {
sound/pci/rme96.c
1739
if (rme96->wcreg & RME96_WCR_PRO) {
sound/pci/rme96.c
1744
if (rme96->wcreg & RME96_WCR_EMP) {
sound/pci/rme96.c
1749
if (rme96->wcreg & RME96_WCR_DOLBY) {
sound/pci/rme96.c
1754
if (RME96_HAS_ANALOG_IN(rme96)) {
sound/pci/rme96.c
1756
switch (snd_rme96_getmontracks(rme96)) {
sound/pci/rme96.c
1770
switch (snd_rme96_getattenuation(rme96)) {
sound/pci/rme96.c
1784
snd_iprintf(buffer, " volume left: %u\n", rme96->vol[0]);
sound/pci/rme96.c
1785
snd_iprintf(buffer, " volume right: %u\n", rme96->vol[1]);
sound/pci/rme96.c
1789
static void snd_rme96_proc_init(struct rme96 *rme96)
sound/pci/rme96.c
1791
snd_card_ro_proc_new(rme96->card, "rme96", rme96, snd_rme96_proc_read);
sound/pci/rme96.c
1803
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
1805
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1806
ucontrol->value.integer.value[0] = rme96->wcreg & RME96_WCR_SEL ? 0 : 1;
sound/pci/rme96.c
1812
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
1817
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1818
val = (rme96->wcreg & ~RME96_WCR_SEL) | val;
sound/pci/rme96.c
1819
change = val != rme96->wcreg;
sound/pci/rme96.c
1820
rme96->wcreg = val;
sound/pci/rme96.c
1821
writel(val, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
1831
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
1837
switch (rme96->pci->device) {
sound/pci/rme96.c
1846
if (rme96->rev > 4) {
sound/pci/rme96.c
1864
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
1867
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1868
ucontrol->value.enumerated.item[0] = snd_rme96_getinputtype(rme96);
sound/pci/rme96.c
1870
switch (rme96->pci->device) {
sound/pci/rme96.c
1879
if (rme96->rev > 4) {
sound/pci/rme96.c
1902
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
1906
switch (rme96->pci->device) {
sound/pci/rme96.c
1915
if (rme96->rev > 4) {
sound/pci/rme96.c
1928
if (rme96->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST && rme96->rev > 4) {
sound/pci/rme96.c
1934
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1935
change = (int)val != snd_rme96_getinputtype(rme96);
sound/pci/rme96.c
1936
snd_rme96_setinputtype(rme96, val);
sound/pci/rme96.c
1950
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
1952
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1953
ucontrol->value.enumerated.item[0] = snd_rme96_getclockmode(rme96);
sound/pci/rme96.c
1959
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
1964
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1965
change = (int)val != snd_rme96_getclockmode(rme96);
sound/pci/rme96.c
1966
snd_rme96_setclockmode(rme96, val);
sound/pci/rme96.c
1982
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
1984
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1985
ucontrol->value.enumerated.item[0] = snd_rme96_getattenuation(rme96);
sound/pci/rme96.c
1991
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
1996
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
1998
change = (int)val != snd_rme96_getattenuation(rme96);
sound/pci/rme96.c
1999
snd_rme96_setattenuation(rme96, val);
sound/pci/rme96.c
2013
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
2015
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
2016
ucontrol->value.enumerated.item[0] = snd_rme96_getmontracks(rme96);
sound/pci/rme96.c
2022
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
2027
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
2028
change = (int)val != snd_rme96_getmontracks(rme96);
sound/pci/rme96.c
2029
snd_rme96_setmontracks(rme96, val);
sound/pci/rme96.c
2064
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
2066
snd_rme96_convert_to_aes(&ucontrol->value.iec958, rme96->wcreg_spdif);
sound/pci/rme96.c
2072
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
2077
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
2078
change = val != rme96->wcreg_spdif;
sound/pci/rme96.c
2079
rme96->wcreg_spdif = val;
sound/pci/rme96.c
2092
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
2094
snd_rme96_convert_to_aes(&ucontrol->value.iec958, rme96->wcreg_spdif_stream);
sound/pci/rme96.c
2100
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
2105
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
2106
change = val != rme96->wcreg_spdif_stream;
sound/pci/rme96.c
2107
rme96->wcreg_spdif_stream = val;
sound/pci/rme96.c
2108
rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP);
sound/pci/rme96.c
2109
rme96->wcreg |= val;
sound/pci/rme96.c
2110
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
2130
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
2135
uinfo->value.integer.max = RME96_185X_MAX_OUT(rme96);
sound/pci/rme96.c
2142
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
2144
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
2145
u->value.integer.value[0] = rme96->vol[0];
sound/pci/rme96.c
2146
u->value.integer.value[1] = rme96->vol[1];
sound/pci/rme96.c
2154
struct rme96 *rme96 = snd_kcontrol_chip(kcontrol);
sound/pci/rme96.c
2159
if (!RME96_HAS_ANALOG_OUT(rme96))
sound/pci/rme96.c
2161
maxvol = RME96_185X_MAX_OUT(rme96);
sound/pci/rme96.c
2162
guard(spinlock_irq)(&rme96->lock);
sound/pci/rme96.c
2164
if (vol != rme96->vol[0] && vol <= maxvol) {
sound/pci/rme96.c
2165
rme96->vol[0] = vol;
sound/pci/rme96.c
2169
if (vol != rme96->vol[1] && vol <= maxvol) {
sound/pci/rme96.c
2170
rme96->vol[1] = vol;
sound/pci/rme96.c
2174
snd_rme96_apply_dac_volume(rme96);
sound/pci/rme96.c
2261
struct rme96 *rme96)
sound/pci/rme96.c
2267
kctl = snd_ctl_new1(&snd_rme96_controls[idx], rme96);
sound/pci/rme96.c
2272
rme96->spdif_ctl = kctl;
sound/pci/rme96.c
2275
if (RME96_HAS_ANALOG_OUT(rme96)) {
sound/pci/rme96.c
2277
err = snd_ctl_add(card, snd_ctl_new1(&snd_rme96_controls[idx], rme96));
sound/pci/rme96.c
2293
struct rme96 *rme96 = card->private_data;
sound/pci/rme96.c
2298
rme96->playback_pointer = readl(rme96->iobase + RME96_IO_GET_PLAY_POS)
sound/pci/rme96.c
2300
rme96->capture_pointer = readl(rme96->iobase + RME96_IO_GET_REC_POS)
sound/pci/rme96.c
2304
memcpy_fromio(rme96->playback_suspend_buffer,
sound/pci/rme96.c
2305
rme96->iobase + RME96_IO_PLAY_BUFFER, RME96_BUFFER_SIZE);
sound/pci/rme96.c
2306
memcpy_fromio(rme96->capture_suspend_buffer,
sound/pci/rme96.c
2307
rme96->iobase + RME96_IO_REC_BUFFER, RME96_BUFFER_SIZE);
sound/pci/rme96.c
2310
rme96->areg &= ~RME96_AR_DAC_EN;
sound/pci/rme96.c
2311
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
2318
struct rme96 *rme96 = card->private_data;
sound/pci/rme96.c
2321
writel(0, rme96->iobase + RME96_IO_SET_PLAY_POS
sound/pci/rme96.c
2322
+ rme96->playback_pointer);
sound/pci/rme96.c
2323
writel(0, rme96->iobase + RME96_IO_SET_REC_POS
sound/pci/rme96.c
2324
+ rme96->capture_pointer);
sound/pci/rme96.c
2327
memcpy_toio(rme96->iobase + RME96_IO_PLAY_BUFFER,
sound/pci/rme96.c
2328
rme96->playback_suspend_buffer, RME96_BUFFER_SIZE);
sound/pci/rme96.c
2329
memcpy_toio(rme96->iobase + RME96_IO_REC_BUFFER,
sound/pci/rme96.c
2330
rme96->capture_suspend_buffer, RME96_BUFFER_SIZE);
sound/pci/rme96.c
2333
writel(rme96->areg | RME96_AR_PD2,
sound/pci/rme96.c
2334
rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
2335
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
2338
snd_rme96_reset_dac(rme96);
sound/pci/rme96.c
2339
rme96->areg |= RME96_AR_DAC_EN;
sound/pci/rme96.c
2340
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
2341
if (RME96_HAS_ANALOG_OUT(rme96)) {
sound/pci/rme96.c
2343
snd_rme96_apply_dac_volume(rme96);
sound/pci/rme96.c
2363
struct rme96 *rme96;
sound/pci/rme96.c
2376
sizeof(*rme96), &card);
sound/pci/rme96.c
2380
rme96 = card->private_data;
sound/pci/rme96.c
2381
rme96->card = card;
sound/pci/rme96.c
2382
rme96->pci = pci;
sound/pci/rme96.c
2383
err = snd_rme96_create(rme96);
sound/pci/rme96.c
2388
rme96->playback_suspend_buffer = vmalloc(RME96_BUFFER_SIZE);
sound/pci/rme96.c
2389
if (!rme96->playback_suspend_buffer)
sound/pci/rme96.c
2391
rme96->capture_suspend_buffer = vmalloc(RME96_BUFFER_SIZE);
sound/pci/rme96.c
2392
if (!rme96->capture_suspend_buffer)
sound/pci/rme96.c
2397
switch (rme96->pci->device) {
sound/pci/rme96.c
2408
pci_read_config_byte(rme96->pci, 8, &val);
sound/pci/rme96.c
2417
rme96->port, rme96->irq);
sound/pci/rme96.c
254
#define RME96_ISPLAYING(rme96) ((rme96)->wcreg & RME96_WCR_START)
sound/pci/rme96.c
255
#define RME96_ISRECORDING(rme96) ((rme96)->wcreg & RME96_WCR_START_2)
sound/pci/rme96.c
256
#define RME96_HAS_ANALOG_IN(rme96) ((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST)
sound/pci/rme96.c
257
#define RME96_HAS_ANALOG_OUT(rme96) ((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PRO || \
sound/pci/rme96.c
258
(rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST)
sound/pci/rme96.c
259
#define RME96_DAC_IS_1852(rme96) (RME96_HAS_ANALOG_OUT(rme96) && (rme96)->rev >= 4)
sound/pci/rme96.c
260
#define RME96_DAC_IS_1855(rme96) (((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST && (rme96)->rev < 4) || \
sound/pci/rme96.c
261
((rme96)->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PRO && (rme96)->rev == 2))
sound/pci/rme96.c
262
#define RME96_185X_MAX_OUT(rme96) ((1 << (RME96_DAC_IS_1852(rme96) ? RME96_AD1852_VOL_BITS : RME96_AD1855_VOL_BITS)) - 1)
sound/pci/rme96.c
284
static void snd_rme96_proc_init(struct rme96 *rme96);
sound/pci/rme96.c
288
struct rme96 *rme96);
sound/pci/rme96.c
291
snd_rme96_getinputtype(struct rme96 *rme96);
sound/pci/rme96.c
294
snd_rme96_playback_ptr(struct rme96 *rme96)
sound/pci/rme96.c
296
return (readl(rme96->iobase + RME96_IO_GET_PLAY_POS)
sound/pci/rme96.c
297
& RME96_RCR_AUDIO_ADDR_MASK) >> rme96->playback_frlog;
sound/pci/rme96.c
301
snd_rme96_capture_ptr(struct rme96 *rme96)
sound/pci/rme96.c
303
return (readl(rme96->iobase + RME96_IO_GET_REC_POS)
sound/pci/rme96.c
304
& RME96_RCR_AUDIO_ADDR_MASK) >> rme96->capture_frlog;
sound/pci/rme96.c
311
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
313
memset_io(rme96->iobase + RME96_IO_PLAY_BUFFER + pos,
sound/pci/rme96.c
323
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
325
if (copy_from_iter_toio(rme96->iobase + RME96_IO_PLAY_BUFFER + pos,
sound/pci/rme96.c
336
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
338
if (copy_to_iter_fromio(rme96->iobase + RME96_IO_REC_BUFFER + pos,
sound/pci/rme96.c
473
snd_rme96_write_SPI(struct rme96 *rme96, u16 val)
sound/pci/rme96.c
479
rme96->areg |= RME96_AR_CDATA;
sound/pci/rme96.c
481
rme96->areg &= ~RME96_AR_CDATA;
sound/pci/rme96.c
483
rme96->areg &= ~(RME96_AR_CCLK | RME96_AR_CLATCH);
sound/pci/rme96.c
484
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
486
rme96->areg |= RME96_AR_CCLK;
sound/pci/rme96.c
487
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
491
rme96->areg &= ~(RME96_AR_CCLK | RME96_AR_CDATA);
sound/pci/rme96.c
492
rme96->areg |= RME96_AR_CLATCH;
sound/pci/rme96.c
493
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
495
rme96->areg &= ~RME96_AR_CLATCH;
sound/pci/rme96.c
496
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
500
snd_rme96_apply_dac_volume(struct rme96 *rme96)
sound/pci/rme96.c
502
if (RME96_DAC_IS_1852(rme96)) {
sound/pci/rme96.c
503
snd_rme96_write_SPI(rme96, (rme96->vol[0] << 2) | 0x0);
sound/pci/rme96.c
504
snd_rme96_write_SPI(rme96, (rme96->vol[1] << 2) | 0x2);
sound/pci/rme96.c
505
} else if (RME96_DAC_IS_1855(rme96)) {
sound/pci/rme96.c
506
snd_rme96_write_SPI(rme96, (rme96->vol[0] & 0x3FF) | 0x000);
sound/pci/rme96.c
507
snd_rme96_write_SPI(rme96, (rme96->vol[1] & 0x3FF) | 0x400);
sound/pci/rme96.c
512
snd_rme96_reset_dac(struct rme96 *rme96)
sound/pci/rme96.c
514
writel(rme96->wcreg | RME96_WCR_PD,
sound/pci/rme96.c
515
rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
516
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
520
snd_rme96_getmontracks(struct rme96 *rme96)
sound/pci/rme96.c
522
return ((rme96->wcreg >> RME96_WCR_BITPOS_MONITOR_0) & 1) +
sound/pci/rme96.c
523
(((rme96->wcreg >> RME96_WCR_BITPOS_MONITOR_1) & 1) << 1);
sound/pci/rme96.c
527
snd_rme96_setmontracks(struct rme96 *rme96,
sound/pci/rme96.c
531
rme96->wcreg |= RME96_WCR_MONITOR_0;
sound/pci/rme96.c
533
rme96->wcreg &= ~RME96_WCR_MONITOR_0;
sound/pci/rme96.c
536
rme96->wcreg |= RME96_WCR_MONITOR_1;
sound/pci/rme96.c
538
rme96->wcreg &= ~RME96_WCR_MONITOR_1;
sound/pci/rme96.c
540
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
545
snd_rme96_getattenuation(struct rme96 *rme96)
sound/pci/rme96.c
547
return ((rme96->wcreg >> RME96_WCR_BITPOS_GAIN_0) & 1) +
sound/pci/rme96.c
548
(((rme96->wcreg >> RME96_WCR_BITPOS_GAIN_1) & 1) << 1);
sound/pci/rme96.c
552
snd_rme96_setattenuation(struct rme96 *rme96,
sound/pci/rme96.c
557
rme96->wcreg = (rme96->wcreg & ~RME96_WCR_GAIN_0) &
sound/pci/rme96.c
561
rme96->wcreg = (rme96->wcreg | RME96_WCR_GAIN_0) &
sound/pci/rme96.c
565
rme96->wcreg = (rme96->wcreg & ~RME96_WCR_GAIN_0) |
sound/pci/rme96.c
569
rme96->wcreg = (rme96->wcreg | RME96_WCR_GAIN_0) |
sound/pci/rme96.c
575
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
580
snd_rme96_capture_getrate(struct rme96 *rme96,
sound/pci/rme96.c
586
if (rme96->areg & RME96_AR_ANALOG) {
sound/pci/rme96.c
588
n = ((rme96->areg >> RME96_AR_BITPOS_F0) & 1) +
sound/pci/rme96.c
589
(((rme96->areg >> RME96_AR_BITPOS_F1) & 1) << 1);
sound/pci/rme96.c
603
return (rme96->areg & RME96_AR_BITPOS_F2) ? rate << 1 : rate;
sound/pci/rme96.c
606
rme96->rcreg = readl(rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
607
if (rme96->rcreg & RME96_RCR_LOCK) {
sound/pci/rme96.c
610
if (rme96->rcreg & RME96_RCR_T_OUT) {
sound/pci/rme96.c
616
if (rme96->rcreg & RME96_RCR_VERF) {
sound/pci/rme96.c
621
n = ((rme96->rcreg >> RME96_RCR_BITPOS_F0) & 1) +
sound/pci/rme96.c
622
(((rme96->rcreg >> RME96_RCR_BITPOS_F1) & 1) << 1) +
sound/pci/rme96.c
623
(((rme96->rcreg >> RME96_RCR_BITPOS_F2) & 1) << 2);
sound/pci/rme96.c
627
if (rme96->rcreg & RME96_RCR_T_OUT) {
sound/pci/rme96.c
643
snd_rme96_playback_getrate(struct rme96 *rme96)
sound/pci/rme96.c
647
if (!(rme96->wcreg & RME96_WCR_MASTER) &&
sound/pci/rme96.c
648
snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG) {
sound/pci/rme96.c
649
rate = snd_rme96_capture_getrate(rme96, &dummy);
sound/pci/rme96.c
656
rate = ((rme96->wcreg >> RME96_WCR_BITPOS_FREQ_0) & 1) +
sound/pci/rme96.c
657
(((rme96->wcreg >> RME96_WCR_BITPOS_FREQ_1) & 1) << 1);
sound/pci/rme96.c
671
return (rme96->wcreg & RME96_WCR_DS) ? rate << 1 : rate;
sound/pci/rme96.c
675
snd_rme96_playback_setrate(struct rme96 *rme96,
sound/pci/rme96.c
680
ds = rme96->wcreg & RME96_WCR_DS;
sound/pci/rme96.c
683
rme96->wcreg &= ~RME96_WCR_DS;
sound/pci/rme96.c
684
rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) &
sound/pci/rme96.c
688
rme96->wcreg &= ~RME96_WCR_DS;
sound/pci/rme96.c
689
rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_1) &
sound/pci/rme96.c
693
rme96->wcreg &= ~RME96_WCR_DS;
sound/pci/rme96.c
694
rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) |
sound/pci/rme96.c
698
rme96->wcreg |= RME96_WCR_DS;
sound/pci/rme96.c
699
rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) &
sound/pci/rme96.c
703
rme96->wcreg |= RME96_WCR_DS;
sound/pci/rme96.c
704
rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_1) &
sound/pci/rme96.c
708
rme96->wcreg |= RME96_WCR_DS;
sound/pci/rme96.c
709
rme96->wcreg = (rme96->wcreg | RME96_WCR_FREQ_0) |
sound/pci/rme96.c
715
if ((!ds && rme96->wcreg & RME96_WCR_DS) ||
sound/pci/rme96.c
716
(ds && !(rme96->wcreg & RME96_WCR_DS)))
sound/pci/rme96.c
719
snd_rme96_reset_dac(rme96);
sound/pci/rme96.c
722
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
728
snd_rme96_capture_analog_setrate(struct rme96 *rme96,
sound/pci/rme96.c
733
rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) &
sound/pci/rme96.c
737
rme96->areg = ((rme96->areg & ~RME96_AR_FREQPAD_0) |
sound/pci/rme96.c
741
rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) |
sound/pci/rme96.c
745
if (rme96->rev < 4) {
sound/pci/rme96.c
748
rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) &
sound/pci/rme96.c
752
if (rme96->rev < 4) {
sound/pci/rme96.c
755
rme96->areg = ((rme96->areg & ~RME96_AR_FREQPAD_0) |
sound/pci/rme96.c
759
rme96->areg = ((rme96->areg | RME96_AR_FREQPAD_0) |
sound/pci/rme96.c
765
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
770
snd_rme96_setclockmode(struct rme96 *rme96,
sound/pci/rme96.c
776
rme96->wcreg &= ~RME96_WCR_MASTER;
sound/pci/rme96.c
777
rme96->areg &= ~RME96_AR_WSEL;
sound/pci/rme96.c
781
rme96->wcreg |= RME96_WCR_MASTER;
sound/pci/rme96.c
782
rme96->areg &= ~RME96_AR_WSEL;
sound/pci/rme96.c
786
rme96->wcreg |= RME96_WCR_MASTER;
sound/pci/rme96.c
787
rme96->areg |= RME96_AR_WSEL;
sound/pci/rme96.c
792
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
793
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
798
snd_rme96_getclockmode(struct rme96 *rme96)
sound/pci/rme96.c
800
if (rme96->areg & RME96_AR_WSEL) {
sound/pci/rme96.c
803
return (rme96->wcreg & RME96_WCR_MASTER) ? RME96_CLOCKMODE_MASTER :
sound/pci/rme96.c
808
snd_rme96_setinputtype(struct rme96 *rme96,
sound/pci/rme96.c
815
rme96->wcreg = (rme96->wcreg & ~RME96_WCR_INP_0) &
sound/pci/rme96.c
819
rme96->wcreg = (rme96->wcreg | RME96_WCR_INP_0) &
sound/pci/rme96.c
823
rme96->wcreg = (rme96->wcreg & ~RME96_WCR_INP_0) |
sound/pci/rme96.c
827
if ((rme96->pci->device != PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST &&
sound/pci/rme96.c
828
rme96->pci->device != PCI_DEVICE_ID_RME_DIGI96_8_PRO) ||
sound/pci/rme96.c
829
(rme96->pci->device == PCI_DEVICE_ID_RME_DIGI96_8_PAD_OR_PST &&
sound/pci/rme96.c
830
rme96->rev > 4))
sound/pci/rme96.c
835
rme96->wcreg = (rme96->wcreg | RME96_WCR_INP_0) |
sound/pci/rme96.c
839
if (!RME96_HAS_ANALOG_IN(rme96)) {
sound/pci/rme96.c
842
rme96->areg |= RME96_AR_ANALOG;
sound/pci/rme96.c
843
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
844
if (rme96->rev < 4) {
sound/pci/rme96.c
849
if (snd_rme96_capture_getrate(rme96, &n) == 88200) {
sound/pci/rme96.c
850
snd_rme96_capture_analog_setrate(rme96, 44100);
sound/pci/rme96.c
852
if (snd_rme96_capture_getrate(rme96, &n) == 64000) {
sound/pci/rme96.c
853
snd_rme96_capture_analog_setrate(rme96, 32000);
sound/pci/rme96.c
860
if (type != RME96_INPUT_ANALOG && RME96_HAS_ANALOG_IN(rme96)) {
sound/pci/rme96.c
861
rme96->areg &= ~RME96_AR_ANALOG;
sound/pci/rme96.c
862
writel(rme96->areg, rme96->iobase + RME96_IO_ADDITIONAL_REG);
sound/pci/rme96.c
864
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
869
snd_rme96_getinputtype(struct rme96 *rme96)
sound/pci/rme96.c
871
if (rme96->areg & RME96_AR_ANALOG) {
sound/pci/rme96.c
874
return ((rme96->wcreg >> RME96_WCR_BITPOS_INP_0) & 1) +
sound/pci/rme96.c
875
(((rme96->wcreg >> RME96_WCR_BITPOS_INP_1) & 1) << 1);
sound/pci/rme96.c
879
snd_rme96_setframelog(struct rme96 *rme96,
sound/pci/rme96.c
892
frlog += (rme96->wcreg & RME96_WCR_MODE24) ? 2 : 1;
sound/pci/rme96.c
893
rme96->playback_frlog = frlog;
sound/pci/rme96.c
895
frlog += (rme96->wcreg & RME96_WCR_MODE24_2) ? 2 : 1;
sound/pci/rme96.c
896
rme96->capture_frlog = frlog;
sound/pci/rme96.c
901
snd_rme96_playback_setformat(struct rme96 *rme96, snd_pcm_format_t format)
sound/pci/rme96.c
905
rme96->wcreg &= ~RME96_WCR_MODE24;
sound/pci/rme96.c
908
rme96->wcreg |= RME96_WCR_MODE24;
sound/pci/rme96.c
913
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
918
snd_rme96_capture_setformat(struct rme96 *rme96, snd_pcm_format_t format)
sound/pci/rme96.c
922
rme96->wcreg &= ~RME96_WCR_MODE24_2;
sound/pci/rme96.c
925
rme96->wcreg |= RME96_WCR_MODE24_2;
sound/pci/rme96.c
930
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
935
snd_rme96_set_period_properties(struct rme96 *rme96,
sound/pci/rme96.c
940
rme96->wcreg &= ~RME96_WCR_ISEL;
sound/pci/rme96.c
943
rme96->wcreg |= RME96_WCR_ISEL;
sound/pci/rme96.c
949
rme96->wcreg &= ~RME96_WCR_IDIS;
sound/pci/rme96.c
950
writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
sound/pci/rme96.c
957
struct rme96 *rme96 = snd_pcm_substream_chip(substream);
sound/pci/rme96.c
962
runtime->dma_area = (void __force *)(rme96->iobase +
sound/pci/rme96.c
964
runtime->dma_addr = rme96->port + RME96_IO_PLAY_BUFFER;
sound/pci/rme96.c
967
scoped_guard(spinlock_irq, &rme96->lock) {
sound/pci/rme96.c
969
if (!(rme96->wcreg & RME96_WCR_MASTER) &&
sound/pci/rme96.c
970
snd_rme96_getinputtype(rme96) != RME96_INPUT_ANALOG)
sound/pci/rme96.c
971
rate = snd_rme96_capture_getrate(rme96, &dummy);
sound/pci/rme96.c
977
err = snd_rme96_playback_setrate(rme96, params_rate(params));
sound/pci/rme96.c
983
err = snd_rme96_playback_setformat(rme96, params_format(params));
sound/pci/rme96.c
986
snd_rme96_setframelog(rme96, params_channels(params), 1);
sound/pci/rme96.c
987
if (rme96->capture_periodsize != 0) {
sound/pci/rme96.c
988
if (params_period_size(params) << rme96->playback_frlog !=
sound/pci/rme96.c
989
rme96->capture_periodsize) {
sound/pci/rme96.c
994
rme96->playback_periodsize =
sound/pci/rme96.c
995
params_period_size(params) << rme96->playback_frlog;
sound/pci/rme96.c
996
snd_rme96_set_period_properties(rme96, rme96->playback_periodsize);
sound/pci/rme96.c
998
if ((rme96->wcreg & RME96_WCR_ADAT) == 0) {
sound/pci/rme96.c
999
rme96->wcreg &= ~(RME96_WCR_PRO | RME96_WCR_DOLBY | RME96_WCR_EMP);