|
@@ -23,6 +23,7 @@
|
|
|
#include <linux/delay.h>
|
|
|
#include <linux/firmware.h>
|
|
|
#include <linux/interrupt.h>
|
|
|
+#include <linux/pci.h>
|
|
|
#include <asm/io.h>
|
|
|
#include <sound/core.h>
|
|
|
#include "pcxhr.h"
|
|
@@ -132,14 +133,14 @@ static int pcxhr_check_reg_bit(struct pcxhr_mgr *mgr, unsigned int reg,
|
|
|
*read = PCXHR_INPB(mgr, reg);
|
|
|
if ((*read & mask) == bit) {
|
|
|
if (i > 100)
|
|
|
- snd_printdd("ATTENTION! check_reg(%x) "
|
|
|
- "loopcount=%d\n",
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "ATTENTION! check_reg(%x) loopcount=%d\n",
|
|
|
reg, i);
|
|
|
return 0;
|
|
|
}
|
|
|
i++;
|
|
|
} while (time_after_eq(end_time, jiffies));
|
|
|
- snd_printk(KERN_ERR
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
"pcxhr_check_reg_bit: timeout, reg=%x, mask=0x%x, val=%x\n",
|
|
|
reg, mask, *read);
|
|
|
return -EIO;
|
|
@@ -216,7 +217,7 @@ static int pcxhr_send_it_dsp(struct pcxhr_mgr *mgr,
|
|
|
err = pcxhr_check_reg_bit(mgr, PCXHR_DSP_CVR, PCXHR_CVR_HI08_HC, 0,
|
|
|
PCXHR_TIMEOUT_DSP, ®);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR "pcxhr_send_it_dsp : TIMEOUT CVR\n");
|
|
|
+ dev_err(&mgr->pci->dev, "pcxhr_send_it_dsp : TIMEOUT CVR\n");
|
|
|
return err;
|
|
|
}
|
|
|
if (itdsp & PCXHR_MASK_IT_MANAGE_HF5) {
|
|
@@ -227,7 +228,7 @@ static int pcxhr_send_it_dsp(struct pcxhr_mgr *mgr,
|
|
|
PCXHR_TIMEOUT_DSP,
|
|
|
®);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
"pcxhr_send_it_dsp : TIMEOUT HF5\n");
|
|
|
return err;
|
|
|
}
|
|
@@ -294,7 +295,7 @@ int pcxhr_load_xilinx_binary(struct pcxhr_mgr *mgr,
|
|
|
*/
|
|
|
if(second) {
|
|
|
if ((chipsc & PCXHR_CHIPSC_GPI_USERI) == 0) {
|
|
|
- snd_printk(KERN_ERR "error loading first xilinx\n");
|
|
|
+ dev_err(&mgr->pci->dev, "error loading first xilinx\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
/* activate second xilinx */
|
|
@@ -360,7 +361,7 @@ static int pcxhr_download_dsp(struct pcxhr_mgr *mgr, const struct firmware *dsp)
|
|
|
PCXHR_ISR_HI08_TRDY,
|
|
|
PCXHR_TIMEOUT_DSP, &dummy);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
"dsp loading error at position %d\n", i);
|
|
|
return err;
|
|
|
}
|
|
@@ -396,7 +397,7 @@ int pcxhr_load_eeprom_binary(struct pcxhr_mgr *mgr,
|
|
|
msleep(PCXHR_WAIT_DEFAULT);
|
|
|
PCXHR_OUTPB(mgr, PCXHR_DSP_ICR, reg);
|
|
|
msleep(PCXHR_WAIT_DEFAULT);
|
|
|
- snd_printdd("no need to load eeprom boot\n");
|
|
|
+ dev_dbg(&mgr->pci->dev, "no need to load eeprom boot\n");
|
|
|
return 0;
|
|
|
}
|
|
|
PCXHR_OUTPB(mgr, PCXHR_DSP_ICR, reg);
|
|
@@ -561,9 +562,9 @@ static int pcxhr_read_rmh_status(struct pcxhr_mgr *mgr, struct pcxhr_rmh *rmh)
|
|
|
PCXHR_ISR_HI08_RXDF,
|
|
|
PCXHR_TIMEOUT_DSP, ®);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR "ERROR RMH stat: "
|
|
|
- "ISR:RXDF=1 (ISR = %x; i=%d )\n",
|
|
|
- reg, i);
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
+ "ERROR RMH stat: ISR:RXDF=1 (ISR = %x; i=%d )\n",
|
|
|
+ reg, i);
|
|
|
return err;
|
|
|
}
|
|
|
/* read data */
|
|
@@ -591,13 +592,13 @@ static int pcxhr_read_rmh_status(struct pcxhr_mgr *mgr, struct pcxhr_rmh *rmh)
|
|
|
}
|
|
|
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
|
|
if (rmh->cmd_idx < CMD_LAST_INDEX)
|
|
|
- snd_printdd(" stat[%d]=%x\n", i, data);
|
|
|
+ dev_dbg(&mgr->pci->dev, " stat[%d]=%x\n", i, data);
|
|
|
#endif
|
|
|
if (i < max_stat_len)
|
|
|
rmh->stat[i] = data;
|
|
|
}
|
|
|
if (rmh->stat_len > max_stat_len) {
|
|
|
- snd_printdd("PCXHR : rmh->stat_len=%x too big\n",
|
|
|
+ dev_dbg(&mgr->pci->dev, "PCXHR : rmh->stat_len=%x too big\n",
|
|
|
rmh->stat_len);
|
|
|
rmh->stat_len = max_stat_len;
|
|
|
}
|
|
@@ -615,7 +616,8 @@ static int pcxhr_send_msg_nolock(struct pcxhr_mgr *mgr, struct pcxhr_rmh *rmh)
|
|
|
return -EINVAL;
|
|
|
err = pcxhr_send_it_dsp(mgr, PCXHR_IT_MESSAGE, 1);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR "pcxhr_send_message : ED_DSP_CRASHED\n");
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
+ "pcxhr_send_message : ED_DSP_CRASHED\n");
|
|
|
return err;
|
|
|
}
|
|
|
/* wait for chk bit */
|
|
@@ -641,7 +643,7 @@ static int pcxhr_send_msg_nolock(struct pcxhr_mgr *mgr, struct pcxhr_rmh *rmh)
|
|
|
data &= 0xff7fff; /* MASK_1_WORD_COMMAND */
|
|
|
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
|
|
if (rmh->cmd_idx < CMD_LAST_INDEX)
|
|
|
- snd_printdd("MSG cmd[0]=%x (%s)\n",
|
|
|
+ dev_dbg(&mgr->pci->dev, "MSG cmd[0]=%x (%s)\n",
|
|
|
data, cmd_names[rmh->cmd_idx]);
|
|
|
#endif
|
|
|
|
|
@@ -671,7 +673,8 @@ static int pcxhr_send_msg_nolock(struct pcxhr_mgr *mgr, struct pcxhr_rmh *rmh)
|
|
|
data = rmh->cmd[i];
|
|
|
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
|
|
if (rmh->cmd_idx < CMD_LAST_INDEX)
|
|
|
- snd_printdd(" cmd[%d]=%x\n", i, data);
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ " cmd[%d]=%x\n", i, data);
|
|
|
#endif
|
|
|
err = pcxhr_check_reg_bit(mgr, PCXHR_DSP_ISR,
|
|
|
PCXHR_ISR_HI08_TRDY,
|
|
@@ -697,14 +700,15 @@ static int pcxhr_send_msg_nolock(struct pcxhr_mgr *mgr, struct pcxhr_rmh *rmh)
|
|
|
PCXHR_ISR_HI08_RXDF,
|
|
|
PCXHR_TIMEOUT_DSP, ®);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR "ERROR RMH: ISR:RXDF=1 (ISR = %x)\n", reg);
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
+ "ERROR RMH: ISR:RXDF=1 (ISR = %x)\n", reg);
|
|
|
return err;
|
|
|
}
|
|
|
/* read error code */
|
|
|
data = PCXHR_INPB(mgr, PCXHR_DSP_TXH) << 16;
|
|
|
data |= PCXHR_INPB(mgr, PCXHR_DSP_TXM) << 8;
|
|
|
data |= PCXHR_INPB(mgr, PCXHR_DSP_TXL);
|
|
|
- snd_printk(KERN_ERR "ERROR RMH(%d): 0x%x\n",
|
|
|
+ dev_err(&mgr->pci->dev, "ERROR RMH(%d): 0x%x\n",
|
|
|
rmh->cmd_idx, data);
|
|
|
err = -EINVAL;
|
|
|
} else {
|
|
@@ -780,7 +784,7 @@ static inline int pcxhr_pipes_running(struct pcxhr_mgr *mgr)
|
|
|
* (PCXHR_PIPE_STATE_CAPTURE_OFFSET)
|
|
|
*/
|
|
|
start_mask &= 0xffffff;
|
|
|
- snd_printdd("CMD_PIPE_STATE MBOX2=0x%06x\n", start_mask);
|
|
|
+ dev_dbg(&mgr->pci->dev, "CMD_PIPE_STATE MBOX2=0x%06x\n", start_mask);
|
|
|
return start_mask;
|
|
|
}
|
|
|
|
|
@@ -809,7 +813,7 @@ static int pcxhr_prepair_pipe_start(struct pcxhr_mgr *mgr,
|
|
|
}
|
|
|
err = pcxhr_send_msg(mgr, &rmh);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
"error pipe start "
|
|
|
"(CMD_CAN_START_PIPE) err=%x!\n",
|
|
|
err);
|
|
@@ -847,7 +851,7 @@ static int pcxhr_stop_pipes(struct pcxhr_mgr *mgr, int audio_mask)
|
|
|
}
|
|
|
err = pcxhr_send_msg(mgr, &rmh);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
"error pipe stop "
|
|
|
"(CMD_STOP_PIPE) err=%x!\n", err);
|
|
|
return err;
|
|
@@ -876,7 +880,7 @@ static int pcxhr_toggle_pipes(struct pcxhr_mgr *mgr, int audio_mask)
|
|
|
1 << (audio - PCXHR_PIPE_STATE_CAPTURE_OFFSET));
|
|
|
err = pcxhr_send_msg(mgr, &rmh);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
"error pipe start "
|
|
|
"(CMD_CONF_PIPE) err=%x!\n", err);
|
|
|
return err;
|
|
@@ -889,7 +893,7 @@ static int pcxhr_toggle_pipes(struct pcxhr_mgr *mgr, int audio_mask)
|
|
|
pcxhr_init_rmh(&rmh, CMD_SEND_IRQA);
|
|
|
err = pcxhr_send_msg(mgr, &rmh);
|
|
|
if (err) {
|
|
|
- snd_printk(KERN_ERR
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
"error pipe start (CMD_SEND_IRQA) err=%x!\n",
|
|
|
err);
|
|
|
return err;
|
|
@@ -913,7 +917,8 @@ int pcxhr_set_pipe_state(struct pcxhr_mgr *mgr, int playback_mask,
|
|
|
(capture_mask << PCXHR_PIPE_STATE_CAPTURE_OFFSET));
|
|
|
/* current pipe state (playback + record) */
|
|
|
state = pcxhr_pipes_running(mgr);
|
|
|
- snd_printdd("pcxhr_set_pipe_state %s (mask %x current %x)\n",
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "pcxhr_set_pipe_state %s (mask %x current %x)\n",
|
|
|
start ? "START" : "STOP", audio_mask, state);
|
|
|
if (start) {
|
|
|
/* start only pipes that are not yet started */
|
|
@@ -944,7 +949,7 @@ int pcxhr_set_pipe_state(struct pcxhr_mgr *mgr, int playback_mask,
|
|
|
if ((state & audio_mask) == (start ? audio_mask : 0))
|
|
|
break;
|
|
|
if (++i >= MAX_WAIT_FOR_DSP * 100) {
|
|
|
- snd_printk(KERN_ERR "error pipe start/stop\n");
|
|
|
+ dev_err(&mgr->pci->dev, "error pipe start/stop\n");
|
|
|
return -EBUSY;
|
|
|
}
|
|
|
udelay(10); /* wait 10 microseconds */
|
|
@@ -956,7 +961,7 @@ int pcxhr_set_pipe_state(struct pcxhr_mgr *mgr, int playback_mask,
|
|
|
}
|
|
|
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
|
|
do_gettimeofday(&my_tv2);
|
|
|
- snd_printdd("***SET PIPE STATE*** TIME = %ld (err = %x)\n",
|
|
|
+ dev_dbg(&mgr->pci->dev, "***SET PIPE STATE*** TIME = %ld (err = %x)\n",
|
|
|
(long)(my_tv2.tv_usec - my_tv1.tv_usec), err);
|
|
|
#endif
|
|
|
return 0;
|
|
@@ -971,7 +976,8 @@ int pcxhr_write_io_num_reg_cont(struct pcxhr_mgr *mgr, unsigned int mask,
|
|
|
|
|
|
spin_lock_irqsave(&mgr->msg_lock, flags);
|
|
|
if ((mgr->io_num_reg_cont & mask) == value) {
|
|
|
- snd_printdd("IO_NUM_REG_CONT mask %x already is set to %x\n",
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "IO_NUM_REG_CONT mask %x already is set to %x\n",
|
|
|
mask, value);
|
|
|
if (changed)
|
|
|
*changed = 0;
|
|
@@ -1024,7 +1030,7 @@ static int pcxhr_handle_async_err(struct pcxhr_mgr *mgr, u32 err,
|
|
|
err = ((err >> 12) & 0xfff);
|
|
|
if (!err)
|
|
|
return 0;
|
|
|
- snd_printdd("CMD_ASYNC : Error %s %s Pipe %d err=%x\n",
|
|
|
+ dev_dbg(&mgr->pci->dev, "CMD_ASYNC : Error %s %s Pipe %d err=%x\n",
|
|
|
err_src_name[err_src],
|
|
|
is_capture ? "Record" : "Play", pipe, err);
|
|
|
if (err == 0xe01)
|
|
@@ -1045,20 +1051,24 @@ void pcxhr_msg_tasklet(unsigned long arg)
|
|
|
int i, j;
|
|
|
|
|
|
if (mgr->src_it_dsp & PCXHR_IRQ_FREQ_CHANGE)
|
|
|
- snd_printdd("TASKLET : PCXHR_IRQ_FREQ_CHANGE event occurred\n");
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "TASKLET : PCXHR_IRQ_FREQ_CHANGE event occurred\n");
|
|
|
if (mgr->src_it_dsp & PCXHR_IRQ_TIME_CODE)
|
|
|
- snd_printdd("TASKLET : PCXHR_IRQ_TIME_CODE event occurred\n");
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "TASKLET : PCXHR_IRQ_TIME_CODE event occurred\n");
|
|
|
if (mgr->src_it_dsp & PCXHR_IRQ_NOTIFY)
|
|
|
- snd_printdd("TASKLET : PCXHR_IRQ_NOTIFY event occurred\n");
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "TASKLET : PCXHR_IRQ_NOTIFY event occurred\n");
|
|
|
if (mgr->src_it_dsp & (PCXHR_IRQ_FREQ_CHANGE | PCXHR_IRQ_TIME_CODE)) {
|
|
|
/* clear events FREQ_CHANGE and TIME_CODE */
|
|
|
pcxhr_init_rmh(prmh, CMD_TEST_IT);
|
|
|
err = pcxhr_send_msg(mgr, prmh);
|
|
|
- snd_printdd("CMD_TEST_IT : err=%x, stat=%x\n",
|
|
|
+ dev_dbg(&mgr->pci->dev, "CMD_TEST_IT : err=%x, stat=%x\n",
|
|
|
err, prmh->stat[0]);
|
|
|
}
|
|
|
if (mgr->src_it_dsp & PCXHR_IRQ_ASYNC) {
|
|
|
- snd_printdd("TASKLET : PCXHR_IRQ_ASYNC event occurred\n");
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "TASKLET : PCXHR_IRQ_ASYNC event occurred\n");
|
|
|
|
|
|
pcxhr_init_rmh(prmh, CMD_ASYNC);
|
|
|
prmh->cmd[0] |= 1; /* add SEL_ASYNC_EVENTS */
|
|
@@ -1066,7 +1076,7 @@ void pcxhr_msg_tasklet(unsigned long arg)
|
|
|
prmh->stat_len = PCXHR_SIZE_MAX_LONG_STATUS;
|
|
|
err = pcxhr_send_msg(mgr, prmh);
|
|
|
if (err)
|
|
|
- snd_printk(KERN_ERR "ERROR pcxhr_msg_tasklet=%x;\n",
|
|
|
+ dev_err(&mgr->pci->dev, "ERROR pcxhr_msg_tasklet=%x;\n",
|
|
|
err);
|
|
|
i = 1;
|
|
|
while (i < prmh->stat_len) {
|
|
@@ -1079,7 +1089,8 @@ void pcxhr_msg_tasklet(unsigned long arg)
|
|
|
u32 err2;
|
|
|
|
|
|
if (prmh->stat[i] & 0x800000) { /* if BIT_END */
|
|
|
- snd_printdd("TASKLET : End%sPipe %d\n",
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "TASKLET : End%sPipe %d\n",
|
|
|
is_capture ? "Record" : "Play",
|
|
|
pipe);
|
|
|
}
|
|
@@ -1136,7 +1147,8 @@ static u_int64_t pcxhr_stream_read_position(struct pcxhr_mgr *mgr,
|
|
|
hw_sample_count = ((u_int64_t)rmh.stat[0]) << 24;
|
|
|
hw_sample_count += (u_int64_t)rmh.stat[1];
|
|
|
|
|
|
- snd_printdd("stream %c%d : abs samples real(%llu) timer(%llu)\n",
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "stream %c%d : abs samples real(%llu) timer(%llu)\n",
|
|
|
stream->pipe->is_capture ? 'C' : 'P',
|
|
|
stream->substream->number,
|
|
|
hw_sample_count,
|
|
@@ -1202,7 +1214,7 @@ static void pcxhr_update_timer_pos(struct pcxhr_mgr *mgr,
|
|
|
(u_int32_t)(new_sample_count -
|
|
|
stream->timer_abs_periods);
|
|
|
} else {
|
|
|
- snd_printk(KERN_ERR
|
|
|
+ dev_err(&mgr->pci->dev,
|
|
|
"ERROR new_sample_count too small ??? %ld\n",
|
|
|
(long unsigned int)new_sample_count);
|
|
|
}
|
|
@@ -1247,33 +1259,39 @@ irqreturn_t pcxhr_interrupt(int irq, void *dev_id)
|
|
|
(mgr->dsp_time_last != PCXHR_DSP_TIME_INVALID)) {
|
|
|
/* handle dsp counter wraparound without resync */
|
|
|
int tmp_diff = dsp_time_diff + PCXHR_DSP_TIME_MASK + 1;
|
|
|
- snd_printdd("WARNING DSP timestamp old(%d) new(%d)",
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "WARNING DSP timestamp old(%d) new(%d)",
|
|
|
mgr->dsp_time_last, dsp_time_new);
|
|
|
if (tmp_diff > 0 && tmp_diff <= (2*mgr->granularity)) {
|
|
|
- snd_printdd("-> timestamp wraparound OK: "
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "-> timestamp wraparound OK: "
|
|
|
"diff=%d\n", tmp_diff);
|
|
|
dsp_time_diff = tmp_diff;
|
|
|
} else {
|
|
|
- snd_printdd("-> resynchronize all streams\n");
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "-> resynchronize all streams\n");
|
|
|
mgr->dsp_time_err++;
|
|
|
}
|
|
|
}
|
|
|
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
|
|
if (dsp_time_diff == 0)
|
|
|
- snd_printdd("ERROR DSP TIME NO DIFF time(%d)\n",
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "ERROR DSP TIME NO DIFF time(%d)\n",
|
|
|
dsp_time_new);
|
|
|
else if (dsp_time_diff >= (2*mgr->granularity))
|
|
|
- snd_printdd("ERROR DSP TIME TOO BIG old(%d) add(%d)\n",
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "ERROR DSP TIME TOO BIG old(%d) add(%d)\n",
|
|
|
mgr->dsp_time_last,
|
|
|
dsp_time_new - mgr->dsp_time_last);
|
|
|
else if (dsp_time_diff % mgr->granularity)
|
|
|
- snd_printdd("ERROR DSP TIME increased by %d\n",
|
|
|
+ dev_dbg(&mgr->pci->dev,
|
|
|
+ "ERROR DSP TIME increased by %d\n",
|
|
|
dsp_time_diff);
|
|
|
#endif
|
|
|
mgr->dsp_time_last = dsp_time_new;
|
|
|
|
|
|
if (timer_toggle == mgr->timer_toggle) {
|
|
|
- snd_printdd("ERROR TIMER TOGGLE\n");
|
|
|
+ dev_dbg(&mgr->pci->dev, "ERROR TIMER TOGGLE\n");
|
|
|
mgr->dsp_time_err++;
|
|
|
}
|
|
|
mgr->timer_toggle = timer_toggle;
|
|
@@ -1308,7 +1326,7 @@ irqreturn_t pcxhr_interrupt(int irq, void *dev_id)
|
|
|
}
|
|
|
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
|
|
if (reg & PCXHR_FATAL_DSP_ERR)
|
|
|
- snd_printdd("FATAL DSP ERROR : %x\n", reg);
|
|
|
+ dev_dbg(&mgr->pci->dev, "FATAL DSP ERROR : %x\n", reg);
|
|
|
#endif
|
|
|
spin_unlock(&mgr->lock);
|
|
|
return IRQ_HANDLED; /* this device caused the interrupt */
|