Lines Matching refs:motu
19 static bool has_dsp_event(struct snd_motu *motu) in has_dsp_event() argument
21 if (motu->spec->flags & SND_MOTU_SPEC_REGISTER_DSP) in has_dsp_event()
22 return (snd_motu_register_dsp_message_parser_count_event(motu) > 0); in has_dsp_event()
30 struct snd_motu *motu = hwdep->private_data; in hwdep_read() local
34 spin_lock_irq(&motu->lock); in hwdep_read()
36 while (!motu->dev_lock_changed && motu->msg == 0 && !has_dsp_event(motu)) { in hwdep_read()
37 prepare_to_wait(&motu->hwdep_wait, &wait, TASK_INTERRUPTIBLE); in hwdep_read()
38 spin_unlock_irq(&motu->lock); in hwdep_read()
40 finish_wait(&motu->hwdep_wait, &wait); in hwdep_read()
43 spin_lock_irq(&motu->lock); in hwdep_read()
47 if (motu->dev_lock_changed) { in hwdep_read()
49 event.lock_status.status = (motu->dev_lock_count > 0); in hwdep_read()
50 motu->dev_lock_changed = false; in hwdep_read()
51 spin_unlock_irq(&motu->lock); in hwdep_read()
56 } else if (motu->msg > 0) { in hwdep_read()
58 event.motu_notification.message = motu->msg; in hwdep_read()
59 motu->msg = 0; in hwdep_read()
60 spin_unlock_irq(&motu->lock); in hwdep_read()
65 } else if (has_dsp_event(motu)) { in hwdep_read()
70 spin_unlock_irq(&motu->lock); in hwdep_read()
76 snd_motu_register_dsp_message_parser_copy_event(motu, &ev)) { in hwdep_read()
91 spin_unlock_irq(&motu->lock); in hwdep_read()
102 struct snd_motu *motu = hwdep->private_data; in hwdep_poll() local
105 poll_wait(file, &motu->hwdep_wait, wait); in hwdep_poll()
107 spin_lock_irq(&motu->lock); in hwdep_poll()
108 if (motu->dev_lock_changed || motu->msg || has_dsp_event(motu)) in hwdep_poll()
112 spin_unlock_irq(&motu->lock); in hwdep_poll()
117 static int hwdep_get_info(struct snd_motu *motu, void __user *arg) in hwdep_get_info() argument
119 struct fw_device *dev = fw_parent_device(motu->unit); in hwdep_get_info()
136 static int hwdep_lock(struct snd_motu *motu) in hwdep_lock() argument
140 spin_lock_irq(&motu->lock); in hwdep_lock()
142 if (motu->dev_lock_count == 0) { in hwdep_lock()
143 motu->dev_lock_count = -1; in hwdep_lock()
149 spin_unlock_irq(&motu->lock); in hwdep_lock()
154 static int hwdep_unlock(struct snd_motu *motu) in hwdep_unlock() argument
158 spin_lock_irq(&motu->lock); in hwdep_unlock()
160 if (motu->dev_lock_count == -1) { in hwdep_unlock()
161 motu->dev_lock_count = 0; in hwdep_unlock()
167 spin_unlock_irq(&motu->lock); in hwdep_unlock()
174 struct snd_motu *motu = hwdep->private_data; in hwdep_release() local
176 spin_lock_irq(&motu->lock); in hwdep_release()
177 if (motu->dev_lock_count == -1) in hwdep_release()
178 motu->dev_lock_count = 0; in hwdep_release()
179 spin_unlock_irq(&motu->lock); in hwdep_release()
187 struct snd_motu *motu = hwdep->private_data; in hwdep_ioctl() local
191 return hwdep_get_info(motu, (void __user *)arg); in hwdep_ioctl()
193 return hwdep_lock(motu); in hwdep_ioctl()
195 return hwdep_unlock(motu); in hwdep_ioctl()
201 if (!(motu->spec->flags & SND_MOTU_SPEC_REGISTER_DSP)) in hwdep_ioctl()
208 snd_motu_register_dsp_message_parser_copy_meter(motu, meter); in hwdep_ioctl()
223 if (!(motu->spec->flags & SND_MOTU_SPEC_COMMAND_DSP)) in hwdep_ioctl()
230 snd_motu_command_dsp_message_parser_copy_meter(motu, meter); in hwdep_ioctl()
245 if (!(motu->spec->flags & SND_MOTU_SPEC_REGISTER_DSP)) in hwdep_ioctl()
252 snd_motu_register_dsp_message_parser_copy_parameter(motu, param); in hwdep_ioctl()
277 int snd_motu_create_hwdep_device(struct snd_motu *motu) in snd_motu_create_hwdep_device() argument
289 err = snd_hwdep_new(motu->card, motu->card->driver, 0, &hwdep); in snd_motu_create_hwdep_device()
296 hwdep->private_data = motu; in snd_motu_create_hwdep_device()
299 motu->hwdep = hwdep; in snd_motu_create_hwdep_device()