hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/sound/pci/rme32.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * ALSA driver for RME Digi32, Digi32/8 and Digi32 PRO audio interfaces
34 *
....@@ -8,21 +9,6 @@
89 * Henk Hesselink <henk@anda.nl>
910 * for writing the digi96-driver
1011 * and RME for all informations.
11
- *
12
- * This program is free software; you can redistribute it and/or modify
13
- * it under the terms of the GNU General Public License as published by
14
- * the Free Software Foundation; either version 2 of the License, or
15
- * (at your option) any later version.
16
- *
17
- * This program is distributed in the hope that it will be useful,
18
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
- * GNU General Public License for more details.
21
- *
22
- * You should have received a copy of the GNU General Public License
23
- * along with this program; if not, write to the Free Software
24
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25
- *
2612 *
2713 * ****************************************************************************
2814 *
....@@ -319,7 +305,8 @@
319305 SNDRV_PCM_INFO_MMAP_VALID |
320306 SNDRV_PCM_INFO_INTERLEAVED |
321307 SNDRV_PCM_INFO_PAUSE |
322
- SNDRV_PCM_INFO_SYNC_START),
308
+ SNDRV_PCM_INFO_SYNC_START |
309
+ SNDRV_PCM_INFO_SYNC_APPLPTR),
323310 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
324311 SNDRV_PCM_FMTBIT_S32_LE),
325312 .rates = (SNDRV_PCM_RATE_32000 |
....@@ -346,7 +333,8 @@
346333 SNDRV_PCM_INFO_MMAP_VALID |
347334 SNDRV_PCM_INFO_INTERLEAVED |
348335 SNDRV_PCM_INFO_PAUSE |
349
- SNDRV_PCM_INFO_SYNC_START),
336
+ SNDRV_PCM_INFO_SYNC_START |
337
+ SNDRV_PCM_INFO_SYNC_APPLPTR),
350338 .formats= SNDRV_PCM_FMTBIT_S16_LE,
351339 .rates = (SNDRV_PCM_RATE_44100 |
352340 SNDRV_PCM_RATE_48000),
....@@ -370,7 +358,8 @@
370358 SNDRV_PCM_INFO_MMAP_VALID |
371359 SNDRV_PCM_INFO_INTERLEAVED |
372360 SNDRV_PCM_INFO_PAUSE |
373
- SNDRV_PCM_INFO_SYNC_START),
361
+ SNDRV_PCM_INFO_SYNC_START |
362
+ SNDRV_PCM_INFO_SYNC_APPLPTR),
374363 .formats = (SNDRV_PCM_FMTBIT_S16_LE |
375364 SNDRV_PCM_FMTBIT_S32_LE),
376365 .rates = (SNDRV_PCM_RATE_32000 |
....@@ -397,7 +386,8 @@
397386 SNDRV_PCM_INFO_MMAP_VALID |
398387 SNDRV_PCM_INFO_INTERLEAVED |
399388 SNDRV_PCM_INFO_PAUSE |
400
- SNDRV_PCM_INFO_SYNC_START),
389
+ SNDRV_PCM_INFO_SYNC_START |
390
+ SNDRV_PCM_INFO_SYNC_APPLPTR),
401391 .formats= SNDRV_PCM_FMTBIT_S16_LE,
402392 .rates = (SNDRV_PCM_RATE_44100 |
403393 SNDRV_PCM_RATE_48000),
....@@ -672,11 +662,7 @@
672662 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
673663 struct snd_pcm_runtime *runtime = substream->runtime;
674664
675
- if (rme32->fullduplex_mode) {
676
- err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params));
677
- if (err < 0)
678
- return err;
679
- } else {
665
+ if (!rme32->fullduplex_mode) {
680666 runtime->dma_area = (void __force *)(rme32->iobase +
681667 RME32_IO_DATA_BUFFER);
682668 runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER;
....@@ -727,11 +713,7 @@
727713 struct rme32 *rme32 = snd_pcm_substream_chip(substream);
728714 struct snd_pcm_runtime *runtime = substream->runtime;
729715
730
- if (rme32->fullduplex_mode) {
731
- err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params));
732
- if (err < 0)
733
- return err;
734
- } else {
716
+ if (!rme32->fullduplex_mode) {
735717 runtime->dma_area = (void __force *)rme32->iobase +
736718 RME32_IO_DATA_BUFFER;
737719 runtime->dma_addr = rme32->port + RME32_IO_DATA_BUFFER;
....@@ -779,14 +761,6 @@
779761 spin_unlock_irq(&rme32->lock);
780762
781763 return 0;
782
-}
783
-
784
-static int snd_rme32_pcm_hw_free(struct snd_pcm_substream *substream)
785
-{
786
- struct rme32 *rme32 = snd_pcm_substream_chip(substream);
787
- if (! rme32->fullduplex_mode)
788
- return 0;
789
- return snd_pcm_lib_free_pages(substream);
790764 }
791765
792766 static void snd_rme32_pcm_start(struct rme32 * rme32, int from_pause)
....@@ -1104,16 +1078,6 @@
11041078 snd_pcm_trigger_done(s, substream);
11051079 }
11061080
1107
- /* prefill playback buffer */
1108
- if (cmd == SNDRV_PCM_TRIGGER_START && rme32->fullduplex_mode) {
1109
- snd_pcm_group_for_each_entry(s, substream) {
1110
- if (s == rme32->playback_substream) {
1111
- s->ops->ack(s);
1112
- break;
1113
- }
1114
- }
1115
- }
1116
-
11171081 switch (cmd) {
11181082 case SNDRV_PCM_TRIGGER_START:
11191083 if (rme32->running && ! RME32_ISWORKING(rme32))
....@@ -1213,9 +1177,7 @@
12131177 static const struct snd_pcm_ops snd_rme32_playback_spdif_ops = {
12141178 .open = snd_rme32_playback_spdif_open,
12151179 .close = snd_rme32_playback_close,
1216
- .ioctl = snd_pcm_lib_ioctl,
12171180 .hw_params = snd_rme32_playback_hw_params,
1218
- .hw_free = snd_rme32_pcm_hw_free,
12191181 .prepare = snd_rme32_playback_prepare,
12201182 .trigger = snd_rme32_pcm_trigger,
12211183 .pointer = snd_rme32_playback_pointer,
....@@ -1228,9 +1190,7 @@
12281190 static const struct snd_pcm_ops snd_rme32_capture_spdif_ops = {
12291191 .open = snd_rme32_capture_spdif_open,
12301192 .close = snd_rme32_capture_close,
1231
- .ioctl = snd_pcm_lib_ioctl,
12321193 .hw_params = snd_rme32_capture_hw_params,
1233
- .hw_free = snd_rme32_pcm_hw_free,
12341194 .prepare = snd_rme32_capture_prepare,
12351195 .trigger = snd_rme32_pcm_trigger,
12361196 .pointer = snd_rme32_capture_pointer,
....@@ -1242,7 +1202,6 @@
12421202 static const struct snd_pcm_ops snd_rme32_playback_adat_ops = {
12431203 .open = snd_rme32_playback_adat_open,
12441204 .close = snd_rme32_playback_close,
1245
- .ioctl = snd_pcm_lib_ioctl,
12461205 .hw_params = snd_rme32_playback_hw_params,
12471206 .prepare = snd_rme32_playback_prepare,
12481207 .trigger = snd_rme32_pcm_trigger,
....@@ -1256,7 +1215,6 @@
12561215 static const struct snd_pcm_ops snd_rme32_capture_adat_ops = {
12571216 .open = snd_rme32_capture_adat_open,
12581217 .close = snd_rme32_capture_close,
1259
- .ioctl = snd_pcm_lib_ioctl,
12601218 .hw_params = snd_rme32_capture_hw_params,
12611219 .prepare = snd_rme32_capture_prepare,
12621220 .trigger = snd_rme32_pcm_trigger,
....@@ -1270,9 +1228,7 @@
12701228 static const struct snd_pcm_ops snd_rme32_playback_spdif_fd_ops = {
12711229 .open = snd_rme32_playback_spdif_open,
12721230 .close = snd_rme32_playback_close,
1273
- .ioctl = snd_pcm_lib_ioctl,
12741231 .hw_params = snd_rme32_playback_hw_params,
1275
- .hw_free = snd_rme32_pcm_hw_free,
12761232 .prepare = snd_rme32_playback_prepare,
12771233 .trigger = snd_rme32_pcm_trigger,
12781234 .pointer = snd_rme32_playback_fd_pointer,
....@@ -1282,9 +1238,7 @@
12821238 static const struct snd_pcm_ops snd_rme32_capture_spdif_fd_ops = {
12831239 .open = snd_rme32_capture_spdif_open,
12841240 .close = snd_rme32_capture_close,
1285
- .ioctl = snd_pcm_lib_ioctl,
12861241 .hw_params = snd_rme32_capture_hw_params,
1287
- .hw_free = snd_rme32_pcm_hw_free,
12881242 .prepare = snd_rme32_capture_prepare,
12891243 .trigger = snd_rme32_pcm_trigger,
12901244 .pointer = snd_rme32_capture_fd_pointer,
....@@ -1294,7 +1248,6 @@
12941248 static const struct snd_pcm_ops snd_rme32_playback_adat_fd_ops = {
12951249 .open = snd_rme32_playback_adat_open,
12961250 .close = snd_rme32_playback_close,
1297
- .ioctl = snd_pcm_lib_ioctl,
12981251 .hw_params = snd_rme32_playback_hw_params,
12991252 .prepare = snd_rme32_playback_prepare,
13001253 .trigger = snd_rme32_pcm_trigger,
....@@ -1305,7 +1258,6 @@
13051258 static const struct snd_pcm_ops snd_rme32_capture_adat_fd_ops = {
13061259 .open = snd_rme32_capture_adat_open,
13071260 .close = snd_rme32_capture_close,
1308
- .ioctl = snd_pcm_lib_ioctl,
13091261 .hw_params = snd_rme32_capture_hw_params,
13101262 .prepare = snd_rme32_capture_prepare,
13111263 .trigger = snd_rme32_pcm_trigger,
....@@ -1364,7 +1316,7 @@
13641316 return err;
13651317 rme32->port = pci_resource_start(rme32->pci, 0);
13661318
1367
- rme32->iobase = ioremap_nocache(rme32->port, RME32_IO_SIZE);
1319
+ rme32->iobase = ioremap(rme32->port, RME32_IO_SIZE);
13681320 if (!rme32->iobase) {
13691321 dev_err(rme32->card->dev,
13701322 "unable to remap memory region 0x%lx-0x%lx\n",
....@@ -1378,6 +1330,7 @@
13781330 return -EBUSY;
13791331 }
13801332 rme32->irq = pci->irq;
1333
+ rme32->card->sync_irq = rme32->irq;
13811334
13821335 /* read the card's revision number */
13831336 pci_read_config_byte(pci, 8, &rme32->rev);
....@@ -1394,9 +1347,8 @@
13941347 &snd_rme32_playback_spdif_fd_ops);
13951348 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_CAPTURE,
13961349 &snd_rme32_capture_spdif_fd_ops);
1397
- snd_pcm_lib_preallocate_pages_for_all(rme32->spdif_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
1398
- snd_dma_continuous_data(GFP_KERNEL),
1399
- 0, RME32_MID_BUFFER_SIZE);
1350
+ snd_pcm_set_managed_buffer_all(rme32->spdif_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
1351
+ NULL, 0, RME32_MID_BUFFER_SIZE);
14001352 rme32->spdif_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
14011353 } else {
14021354 snd_pcm_set_ops(rme32->spdif_pcm, SNDRV_PCM_STREAM_PLAYBACK,
....@@ -1426,9 +1378,9 @@
14261378 &snd_rme32_playback_adat_fd_ops);
14271379 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_CAPTURE,
14281380 &snd_rme32_capture_adat_fd_ops);
1429
- snd_pcm_lib_preallocate_pages_for_all(rme32->adat_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
1430
- snd_dma_continuous_data(GFP_KERNEL),
1431
- 0, RME32_MID_BUFFER_SIZE);
1381
+ snd_pcm_set_managed_buffer_all(rme32->adat_pcm, SNDRV_DMA_TYPE_CONTINUOUS,
1382
+ NULL,
1383
+ 0, RME32_MID_BUFFER_SIZE);
14321384 rme32->adat_pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
14331385 } else {
14341386 snd_pcm_set_ops(rme32->adat_pcm, SNDRV_PCM_STREAM_PLAYBACK,
....@@ -1574,10 +1526,7 @@
15741526
15751527 static void snd_rme32_proc_init(struct rme32 *rme32)
15761528 {
1577
- struct snd_info_entry *entry;
1578
-
1579
- if (! snd_card_proc_new(rme32->card, "rme32", &entry))
1580
- snd_info_set_text_ops(entry, rme32, snd_rme32_proc_read);
1529
+ snd_card_ro_proc_new(rme32->card, "rme32", rme32, snd_rme32_proc_read);
15811530 }
15821531
15831532 /*
....@@ -1847,7 +1796,7 @@
18471796 return 0;
18481797 }
18491798
1850
-static struct snd_kcontrol_new snd_rme32_controls[] = {
1799
+static const struct snd_kcontrol_new snd_rme32_controls[] = {
18511800 {
18521801 .iface = SNDRV_CTL_ELEM_IFACE_PCM,
18531802 .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT),