rme96.c (0cce284537fb42d9c28b9b31038ffc9b464555f5) rme96.c (53945f5b8ae550d8c6f7ac8ed9b1e496778fad45)
1/*
2 * ALSA driver for RME Digi96, Digi96/8 and Digi96/8 PRO/PAD/PST audio
3 * interfaces
4 *
5 * Copyright (c) 2000, 2001 Anders Torger <torger@ludd.luth.se>
6 *
7 * Thanks to Henk Hesselink <henk@anda.nl> for the analog volume control
8 * code.

--- 313 unchanged lines hidden (view full) ---

322snd_rme96_capture_ptr(struct rme96 *rme96)
323{
324 return (readl(rme96->iobase + RME96_IO_GET_REC_POS)
325 & RME96_RCR_AUDIO_ADDR_MASK) >> rme96->capture_frlog;
326}
327
328static int
329snd_rme96_playback_silence(struct snd_pcm_substream *substream,
1/*
2 * ALSA driver for RME Digi96, Digi96/8 and Digi96/8 PRO/PAD/PST audio
3 * interfaces
4 *
5 * Copyright (c) 2000, 2001 Anders Torger <torger@ludd.luth.se>
6 *
7 * Thanks to Henk Hesselink <henk@anda.nl> for the analog volume control
8 * code.

--- 313 unchanged lines hidden (view full) ---

322snd_rme96_capture_ptr(struct rme96 *rme96)
323{
324 return (readl(rme96->iobase + RME96_IO_GET_REC_POS)
325 & RME96_RCR_AUDIO_ADDR_MASK) >> rme96->capture_frlog;
326}
327
328static int
329snd_rme96_playback_silence(struct snd_pcm_substream *substream,
330 int channel, /* not used (interleaved data) */
331 snd_pcm_uframes_t pos,
332 snd_pcm_uframes_t count)
330 int channel, unsigned long pos, unsigned long count)
333{
334 struct rme96 *rme96 = snd_pcm_substream_chip(substream);
331{
332 struct rme96 *rme96 = snd_pcm_substream_chip(substream);
335 count <<= rme96->playback_frlog;
336 pos <<= rme96->playback_frlog;
333
337 memset_io(rme96->iobase + RME96_IO_PLAY_BUFFER + pos,
338 0, count);
339 return 0;
340}
341
342static int
343snd_rme96_playback_copy(struct snd_pcm_substream *substream,
334 memset_io(rme96->iobase + RME96_IO_PLAY_BUFFER + pos,
335 0, count);
336 return 0;
337}
338
339static int
340snd_rme96_playback_copy(struct snd_pcm_substream *substream,
344 int channel, /* not used (interleaved data) */
345 snd_pcm_uframes_t pos,
346 void __user *src,
347 snd_pcm_uframes_t count)
341 int channel, unsigned long pos,
342 void __user *src, unsigned long count)
348{
349 struct rme96 *rme96 = snd_pcm_substream_chip(substream);
343{
344 struct rme96 *rme96 = snd_pcm_substream_chip(substream);
350 count <<= rme96->playback_frlog;
351 pos <<= rme96->playback_frlog;
352 return copy_from_user_toio(rme96->iobase + RME96_IO_PLAY_BUFFER + pos, src,
353 count);
345
346 return copy_from_user_toio(rme96->iobase + RME96_IO_PLAY_BUFFER + pos,
347 src, count);
354}
355
356static int
348}
349
350static int
351snd_rme96_playback_copy_kernel(struct snd_pcm_substream *substream,
352 int channel, unsigned long pos,
353 void *src, unsigned long count)
354{
355 struct rme96 *rme96 = snd_pcm_substream_chip(substream);
356
357 memcpy_toio(rme96->iobase + RME96_IO_PLAY_BUFFER + pos, src, count);
358 return 0;
359}
360
361static int
357snd_rme96_capture_copy(struct snd_pcm_substream *substream,
362snd_rme96_capture_copy(struct snd_pcm_substream *substream,
358 int channel, /* not used (interleaved data) */
359 snd_pcm_uframes_t pos,
360 void __user *dst,
361 snd_pcm_uframes_t count)
363 int channel, unsigned long pos,
364 void __user *dst, unsigned long count)
362{
363 struct rme96 *rme96 = snd_pcm_substream_chip(substream);
365{
366 struct rme96 *rme96 = snd_pcm_substream_chip(substream);
364 count <<= rme96->capture_frlog;
365 pos <<= rme96->capture_frlog;
366 return copy_to_user_fromio(dst, rme96->iobase + RME96_IO_REC_BUFFER + pos,
367
368 return copy_to_user_fromio(dst,
369 rme96->iobase + RME96_IO_REC_BUFFER + pos,
367 count);
368}
369
370 count);
371}
372
373static int
374snd_rme96_capture_copy_kernel(struct snd_pcm_substream *substream,
375 int channel, unsigned long pos,
376 void *dst, unsigned long count)
377{
378 struct rme96 *rme96 = snd_pcm_substream_chip(substream);
379
380 memcpy_fromio(dst, rme96->iobase + RME96_IO_REC_BUFFER + pos, count);
381 return 0;
382}
383
370/*
371 * Digital output capabilities (S/PDIF)
372 */
373static struct snd_pcm_hardware snd_rme96_playback_spdif_info =
374{
375 .info = (SNDRV_PCM_INFO_MMAP_IOMEM |
376 SNDRV_PCM_INFO_MMAP_VALID |
377 SNDRV_PCM_INFO_SYNC_START |

--- 1130 unchanged lines hidden (view full) ---

1508static const struct snd_pcm_ops snd_rme96_playback_spdif_ops = {
1509 .open = snd_rme96_playback_spdif_open,
1510 .close = snd_rme96_playback_close,
1511 .ioctl = snd_pcm_lib_ioctl,
1512 .hw_params = snd_rme96_playback_hw_params,
1513 .prepare = snd_rme96_playback_prepare,
1514 .trigger = snd_rme96_playback_trigger,
1515 .pointer = snd_rme96_playback_pointer,
384/*
385 * Digital output capabilities (S/PDIF)
386 */
387static struct snd_pcm_hardware snd_rme96_playback_spdif_info =
388{
389 .info = (SNDRV_PCM_INFO_MMAP_IOMEM |
390 SNDRV_PCM_INFO_MMAP_VALID |
391 SNDRV_PCM_INFO_SYNC_START |

--- 1130 unchanged lines hidden (view full) ---

1522static const struct snd_pcm_ops snd_rme96_playback_spdif_ops = {
1523 .open = snd_rme96_playback_spdif_open,
1524 .close = snd_rme96_playback_close,
1525 .ioctl = snd_pcm_lib_ioctl,
1526 .hw_params = snd_rme96_playback_hw_params,
1527 .prepare = snd_rme96_playback_prepare,
1528 .trigger = snd_rme96_playback_trigger,
1529 .pointer = snd_rme96_playback_pointer,
1516 .copy = snd_rme96_playback_copy,
1517 .silence = snd_rme96_playback_silence,
1530 .copy_user = snd_rme96_playback_copy,
1531 .copy_kernel = snd_rme96_playback_copy_kernel,
1532 .fill_silence = snd_rme96_playback_silence,
1518 .mmap = snd_pcm_lib_mmap_iomem,
1519};
1520
1521static const struct snd_pcm_ops snd_rme96_capture_spdif_ops = {
1522 .open = snd_rme96_capture_spdif_open,
1523 .close = snd_rme96_capture_close,
1524 .ioctl = snd_pcm_lib_ioctl,
1525 .hw_params = snd_rme96_capture_hw_params,
1526 .prepare = snd_rme96_capture_prepare,
1527 .trigger = snd_rme96_capture_trigger,
1528 .pointer = snd_rme96_capture_pointer,
1533 .mmap = snd_pcm_lib_mmap_iomem,
1534};
1535
1536static const struct snd_pcm_ops snd_rme96_capture_spdif_ops = {
1537 .open = snd_rme96_capture_spdif_open,
1538 .close = snd_rme96_capture_close,
1539 .ioctl = snd_pcm_lib_ioctl,
1540 .hw_params = snd_rme96_capture_hw_params,
1541 .prepare = snd_rme96_capture_prepare,
1542 .trigger = snd_rme96_capture_trigger,
1543 .pointer = snd_rme96_capture_pointer,
1529 .copy = snd_rme96_capture_copy,
1544 .copy_user = snd_rme96_capture_copy,
1545 .copy_kernel = snd_rme96_capture_copy_kernel,
1530 .mmap = snd_pcm_lib_mmap_iomem,
1531};
1532
1533static const struct snd_pcm_ops snd_rme96_playback_adat_ops = {
1534 .open = snd_rme96_playback_adat_open,
1535 .close = snd_rme96_playback_close,
1536 .ioctl = snd_pcm_lib_ioctl,
1537 .hw_params = snd_rme96_playback_hw_params,
1538 .prepare = snd_rme96_playback_prepare,
1539 .trigger = snd_rme96_playback_trigger,
1540 .pointer = snd_rme96_playback_pointer,
1546 .mmap = snd_pcm_lib_mmap_iomem,
1547};
1548
1549static const struct snd_pcm_ops snd_rme96_playback_adat_ops = {
1550 .open = snd_rme96_playback_adat_open,
1551 .close = snd_rme96_playback_close,
1552 .ioctl = snd_pcm_lib_ioctl,
1553 .hw_params = snd_rme96_playback_hw_params,
1554 .prepare = snd_rme96_playback_prepare,
1555 .trigger = snd_rme96_playback_trigger,
1556 .pointer = snd_rme96_playback_pointer,
1541 .copy = snd_rme96_playback_copy,
1542 .silence = snd_rme96_playback_silence,
1557 .copy_user = snd_rme96_playback_copy,
1558 .copy_kernel = snd_rme96_playback_copy_kernel,
1559 .fill_silence = snd_rme96_playback_silence,
1543 .mmap = snd_pcm_lib_mmap_iomem,
1544};
1545
1546static const struct snd_pcm_ops snd_rme96_capture_adat_ops = {
1547 .open = snd_rme96_capture_adat_open,
1548 .close = snd_rme96_capture_close,
1549 .ioctl = snd_pcm_lib_ioctl,
1550 .hw_params = snd_rme96_capture_hw_params,
1551 .prepare = snd_rme96_capture_prepare,
1552 .trigger = snd_rme96_capture_trigger,
1553 .pointer = snd_rme96_capture_pointer,
1560 .mmap = snd_pcm_lib_mmap_iomem,
1561};
1562
1563static const struct snd_pcm_ops snd_rme96_capture_adat_ops = {
1564 .open = snd_rme96_capture_adat_open,
1565 .close = snd_rme96_capture_close,
1566 .ioctl = snd_pcm_lib_ioctl,
1567 .hw_params = snd_rme96_capture_hw_params,
1568 .prepare = snd_rme96_capture_prepare,
1569 .trigger = snd_rme96_capture_trigger,
1570 .pointer = snd_rme96_capture_pointer,
1554 .copy = snd_rme96_capture_copy,
1571 .copy_user = snd_rme96_capture_copy,
1572 .copy_kernel = snd_rme96_capture_copy_kernel,
1555 .mmap = snd_pcm_lib_mmap_iomem,
1556};
1557
1558static void
1559snd_rme96_free(void *private_data)
1560{
1561 struct rme96 *rme96 = (struct rme96 *)private_data;
1562

--- 973 unchanged lines hidden ---
1573 .mmap = snd_pcm_lib_mmap_iomem,
1574};
1575
1576static void
1577snd_rme96_free(void *private_data)
1578{
1579 struct rme96 *rme96 = (struct rme96 *)private_data;
1580

--- 973 unchanged lines hidden ---