diff options
Diffstat (limited to 'sound/pci/riptide/riptide.c')
-rw-r--r-- | sound/pci/riptide/riptide.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c index 6a3596247348..e9f0706ed3e4 100644 --- a/sound/pci/riptide/riptide.c +++ b/sound/pci/riptide/riptide.c | |||
@@ -865,7 +865,8 @@ static int sendcmd(struct cmdif *cif, u32 flags, u32 cmd, u32 parm, | |||
865 | struct riptideport *hwport; | 865 | struct riptideport *hwport; |
866 | struct cmdport *cmdport = NULL; | 866 | struct cmdport *cmdport = NULL; |
867 | 867 | ||
868 | snd_assert(cif, return -EINVAL); | 868 | if (snd_BUG_ON(!cif)) |
869 | return -EINVAL; | ||
869 | 870 | ||
870 | hwport = cif->hwport; | 871 | hwport = cif->hwport; |
871 | if (cif->errcnt > MAX_ERROR_COUNT) { | 872 | if (cif->errcnt > MAX_ERROR_COUNT) { |
@@ -1482,7 +1483,6 @@ static int snd_riptide_prepare(struct snd_pcm_substream *substream) | |||
1482 | { | 1483 | { |
1483 | struct snd_riptide *chip = snd_pcm_substream_chip(substream); | 1484 | struct snd_riptide *chip = snd_pcm_substream_chip(substream); |
1484 | struct snd_pcm_runtime *runtime = substream->runtime; | 1485 | struct snd_pcm_runtime *runtime = substream->runtime; |
1485 | struct snd_sg_buf *sgbuf = snd_pcm_substream_sgbuf(substream); | ||
1486 | struct pcmhw *data = get_pcmhwdev(substream); | 1486 | struct pcmhw *data = get_pcmhwdev(substream); |
1487 | struct cmdif *cif = chip->cif; | 1487 | struct cmdif *cif = chip->cif; |
1488 | unsigned char *lbuspath = NULL; | 1488 | unsigned char *lbuspath = NULL; |
@@ -1490,7 +1490,8 @@ static int snd_riptide_prepare(struct snd_pcm_substream *substream) | |||
1490 | int err = 0; | 1490 | int err = 0; |
1491 | snd_pcm_format_t format; | 1491 | snd_pcm_format_t format; |
1492 | 1492 | ||
1493 | snd_assert(cif && data, return -EINVAL); | 1493 | if (snd_BUG_ON(!cif || !data)) |
1494 | return -EINVAL; | ||
1494 | 1495 | ||
1495 | snd_printdd("prepare id %d ch: %d f:0x%x r:%d\n", data->id, | 1496 | snd_printdd("prepare id %d ch: %d f:0x%x r:%d\n", data->id, |
1496 | runtime->channels, runtime->format, runtime->rate); | 1497 | runtime->channels, runtime->format, runtime->rate); |
@@ -1513,9 +1514,9 @@ static int snd_riptide_prepare(struct snd_pcm_substream *substream) | |||
1513 | lbuspath = data->paths.stereo; | 1514 | lbuspath = data->paths.stereo; |
1514 | break; | 1515 | break; |
1515 | } | 1516 | } |
1516 | snd_printdd("use sgdlist at 0x%p and buffer at 0x%p\n", | 1517 | snd_printdd("use sgdlist at 0x%p\n", |
1517 | data->sgdlist.area, sgbuf); | 1518 | data->sgdlist.area); |
1518 | if (data->sgdlist.area && sgbuf) { | 1519 | if (data->sgdlist.area) { |
1519 | unsigned int i, j, size, pages, f, pt, period; | 1520 | unsigned int i, j, size, pages, f, pt, period; |
1520 | struct sgd *c, *p = NULL; | 1521 | struct sgd *c, *p = NULL; |
1521 | 1522 | ||
@@ -1533,6 +1534,7 @@ static int snd_riptide_prepare(struct snd_pcm_substream *substream) | |||
1533 | pt = 0; | 1534 | pt = 0; |
1534 | j = 0; | 1535 | j = 0; |
1535 | for (i = 0; i < pages; i++) { | 1536 | for (i = 0; i < pages; i++) { |
1537 | unsigned int ofs, addr; | ||
1536 | c = &data->sgdbuf[i]; | 1538 | c = &data->sgdbuf[i]; |
1537 | if (p) | 1539 | if (p) |
1538 | p->dwNextLink = cpu_to_le32(data->sgdlist.addr + | 1540 | p->dwNextLink = cpu_to_le32(data->sgdlist.addr + |
@@ -1540,8 +1542,9 @@ static int snd_riptide_prepare(struct snd_pcm_substream *substream) | |||
1540 | sizeof(struct | 1542 | sizeof(struct |
1541 | sgd))); | 1543 | sgd))); |
1542 | c->dwNextLink = cpu_to_le32(data->sgdlist.addr); | 1544 | c->dwNextLink = cpu_to_le32(data->sgdlist.addr); |
1543 | c->dwSegPtrPhys = | 1545 | ofs = j << PAGE_SHIFT; |
1544 | cpu_to_le32(sgbuf->table[j].addr + pt); | 1546 | addr = snd_pcm_sgbuf_get_addr(substream, ofs) + pt; |
1547 | c->dwSegPtrPhys = cpu_to_le32(addr); | ||
1545 | pt = (pt + f) % PAGE_SIZE; | 1548 | pt = (pt + f) % PAGE_SIZE; |
1546 | if (pt == 0) | 1549 | if (pt == 0) |
1547 | j++; | 1550 | j++; |
@@ -1772,7 +1775,8 @@ snd_riptide_codec_write(struct snd_ac97 *ac97, unsigned short reg, | |||
1772 | union cmdret rptr = CMDRET_ZERO; | 1775 | union cmdret rptr = CMDRET_ZERO; |
1773 | int i = 0; | 1776 | int i = 0; |
1774 | 1777 | ||
1775 | snd_assert(cif, return); | 1778 | if (snd_BUG_ON(!cif)) |
1779 | return; | ||
1776 | 1780 | ||
1777 | snd_printdd("Write AC97 reg 0x%x 0x%x\n", reg, val); | 1781 | snd_printdd("Write AC97 reg 0x%x 0x%x\n", reg, val); |
1778 | do { | 1782 | do { |
@@ -1790,7 +1794,8 @@ static unsigned short snd_riptide_codec_read(struct snd_ac97 *ac97, | |||
1790 | struct cmdif *cif = chip->cif; | 1794 | struct cmdif *cif = chip->cif; |
1791 | union cmdret rptr = CMDRET_ZERO; | 1795 | union cmdret rptr = CMDRET_ZERO; |
1792 | 1796 | ||
1793 | snd_assert(cif, return 0); | 1797 | if (snd_BUG_ON(!cif)) |
1798 | return 0; | ||
1794 | 1799 | ||
1795 | if (SEND_RACR(cif, reg, &rptr) != 0) | 1800 | if (SEND_RACR(cif, reg, &rptr) != 0) |
1796 | SEND_RACR(cif, reg, &rptr); | 1801 | SEND_RACR(cif, reg, &rptr); |
@@ -1804,7 +1809,8 @@ static int snd_riptide_initialize(struct snd_riptide *chip) | |||
1804 | unsigned int device_id; | 1809 | unsigned int device_id; |
1805 | int err; | 1810 | int err; |
1806 | 1811 | ||
1807 | snd_assert(chip, return -EINVAL); | 1812 | if (snd_BUG_ON(!chip)) |
1813 | return -EINVAL; | ||
1808 | 1814 | ||
1809 | cif = chip->cif; | 1815 | cif = chip->cif; |
1810 | if (!cif) { | 1816 | if (!cif) { |
@@ -1836,7 +1842,8 @@ static int snd_riptide_free(struct snd_riptide *chip) | |||
1836 | { | 1842 | { |
1837 | struct cmdif *cif; | 1843 | struct cmdif *cif; |
1838 | 1844 | ||
1839 | snd_assert(chip, return 0); | 1845 | if (!chip) |
1846 | return 0; | ||
1840 | 1847 | ||
1841 | if ((cif = chip->cif)) { | 1848 | if ((cif = chip->cif)) { |
1842 | SET_GRESET(cif->hwport); | 1849 | SET_GRESET(cif->hwport); |