|
@@ -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;
|
|
@@ -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);
|