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 --- |