[ALSA] sparc dbri: fixed setting of burst size after reset
A proper way to set DBRI's burst size. The size must be set after each chip reset. Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
parent
470f1f1a1c
commit
d1fdf07e22
1 changed files with 9 additions and 8 deletions
|
@ -690,6 +690,7 @@ static void dbri_cmdsend(struct snd_dbri * dbri, volatile s32 * cmd)
|
||||||
static void dbri_reset(struct snd_dbri * dbri)
|
static void dbri_reset(struct snd_dbri * dbri)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
u32 tmp;
|
||||||
|
|
||||||
dprintk(D_GEN, "reset 0:%x 2:%x 8:%x 9:%x\n",
|
dprintk(D_GEN, "reset 0:%x 2:%x 8:%x 9:%x\n",
|
||||||
sbus_readl(dbri->regs + REG0),
|
sbus_readl(dbri->regs + REG0),
|
||||||
|
@ -699,13 +700,20 @@ static void dbri_reset(struct snd_dbri * dbri)
|
||||||
sbus_writel(D_R, dbri->regs + REG0); /* Soft Reset */
|
sbus_writel(D_R, dbri->regs + REG0); /* Soft Reset */
|
||||||
for (i = 0; (sbus_readl(dbri->regs + REG0) & D_R) && i < 64; i++)
|
for (i = 0; (sbus_readl(dbri->regs + REG0) & D_R) && i < 64; i++)
|
||||||
udelay(10);
|
udelay(10);
|
||||||
|
|
||||||
|
/* A brute approach - DBRI falls back to working burst size by itself
|
||||||
|
* On SS20 D_S does not work, so do not try so high. */
|
||||||
|
tmp = sbus_readl(dbri->regs + REG0);
|
||||||
|
tmp |= D_G | D_E;
|
||||||
|
tmp &= ~D_S;
|
||||||
|
sbus_writel(tmp, dbri->regs + REG0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lock must not be held before calling this */
|
/* Lock must not be held before calling this */
|
||||||
static void dbri_initialize(struct snd_dbri * dbri)
|
static void dbri_initialize(struct snd_dbri * dbri)
|
||||||
{
|
{
|
||||||
volatile s32 *cmd;
|
volatile s32 *cmd;
|
||||||
u32 dma_addr, tmp;
|
u32 dma_addr;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
@ -721,13 +729,6 @@ static void dbri_initialize(struct snd_dbri * dbri)
|
||||||
for (n = 0; n < DBRI_NO_PIPES; n++)
|
for (n = 0; n < DBRI_NO_PIPES; n++)
|
||||||
dbri->pipes[n].desc = dbri->pipes[n].first_desc = -1;
|
dbri->pipes[n].desc = dbri->pipes[n].first_desc = -1;
|
||||||
|
|
||||||
/* A brute approach - DBRI falls back to working burst size by itself
|
|
||||||
* On SS20 D_S does not work, so do not try so high. */
|
|
||||||
tmp = sbus_readl(dbri->regs + REG0);
|
|
||||||
tmp |= D_G | D_E;
|
|
||||||
tmp &= ~D_S;
|
|
||||||
sbus_writel(tmp, dbri->regs + REG0);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the interrupt ringbuffer.
|
* Initialize the interrupt ringbuffer.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue