Skip to content

Commit

Permalink
ALSA: hdsp: check for iobox and upload firmware during ioctl
Browse files Browse the repository at this point in the history
currently, the error message when trying to run hdspmixer or hdspconf
if the breakout box is not connected is somehow misleading, since it
asks the user to upload the firmware.

this patch adds a test, whether the breakout box is connected and
tries to upload the firmware in the case, that it is not present, e.g.
because of power failures of the breakout box.

[Minor coding-style fixes by tiwai]

Signed-off-by: Tim Blechmann <tim@klingt.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Tim Blechmann authored and Takashi Iwai committed Nov 9, 2008
1 parent 00c9ddd commit 3ae7e2e
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions sound/pci/rme9652/hdsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -4548,11 +4548,20 @@ static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigne
{
struct hdsp *hdsp = (struct hdsp *)hw->private_data;
void __user *argp = (void __user *)arg;
int err;

switch (cmd) {
case SNDRV_HDSP_IOCTL_GET_PEAK_RMS: {
struct hdsp_peak_rms __user *peak_rms = (struct hdsp_peak_rms __user *)arg;

err = hdsp_check_for_iobox(hdsp);
if (err < 0)
return err;

err = hdsp_check_for_firmware(hdsp, 1);
if (err < 0)
return err;

if (!(hdsp->state & HDSP_FirmwareLoaded)) {
snd_printk(KERN_ERR "Hammerfall-DSP: firmware needs to be uploaded to the card.\n");
return -EINVAL;
Expand All @@ -4572,10 +4581,14 @@ static int snd_hdsp_hwdep_ioctl(struct snd_hwdep *hw, struct file *file, unsigne
unsigned long flags;
int i;

if (!(hdsp->state & HDSP_FirmwareLoaded)) {
snd_printk(KERN_ERR "Hammerfall-DSP: Firmware needs to be uploaded to the card.\n");
return -EINVAL;
}
err = hdsp_check_for_iobox(hdsp);
if (err < 0)
return err;

err = hdsp_check_for_firmware(hdsp, 1);
if (err < 0)
return err;

spin_lock_irqsave(&hdsp->lock, flags);
info.pref_sync_ref = (unsigned char)hdsp_pref_sync_ref(hdsp);
info.wordclock_sync_check = (unsigned char)hdsp_wc_sync_check(hdsp);
Expand Down

0 comments on commit 3ae7e2e

Please sign in to comment.