Lines Matching refs:i2sdev

18 static inline void get_pcm_info(struct i2sbus_dev *i2sdev, int in,
23 *pi = &i2sdev->in;
25 *other = &i2sdev->out;
28 *pi = &i2sdev->out;
30 *other = &i2sdev->in;
72 static int i2sbus_pcm_open(struct i2sbus_dev *i2sdev, int in)
86 mutex_lock(&i2sdev->lock);
88 get_pcm_info(i2sdev, in, &pi, &other);
91 sdev = &i2sdev->sound;
181 hw->formats &= pcm_format_to_bits(i2sdev->format);
183 hw->rate_min = i2sdev->rate;
184 hw->rate_max = i2sdev->rate;
223 mutex_unlock(&i2sdev->lock);
229 static int i2sbus_pcm_close(struct i2sbus_dev *i2sdev, int in)
235 mutex_lock(&i2sdev->lock);
237 get_pcm_info(i2sdev, in, &pi, NULL);
239 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) {
249 mutex_unlock(&i2sdev->lock);
253 static void i2sbus_wait_for_stop(struct i2sbus_dev *i2sdev,
260 spin_lock_irqsave(&i2sdev->low_lock, flags);
263 spin_unlock_irqrestore(&i2sdev->low_lock, flags);
265 spin_lock_irqsave(&i2sdev->low_lock, flags);
281 spin_unlock_irqrestore(&i2sdev->low_lock, flags);
285 void i2sbus_wait_for_stop_both(struct i2sbus_dev *i2sdev)
289 get_pcm_info(i2sdev, 0, &pi, NULL);
290 i2sbus_wait_for_stop(i2sdev, pi);
291 get_pcm_info(i2sdev, 1, &pi, NULL);
292 i2sbus_wait_for_stop(i2sdev, pi);
298 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
301 get_pcm_info(i2sdev, in, &pi, NULL);
303 i2sbus_wait_for_stop(i2sdev, pi);
317 static int i2sbus_pcm_prepare(struct i2sbus_dev *i2sdev, int in)
336 mutex_lock(&i2sdev->lock);
338 get_pcm_info(i2sdev, in, &pi, &other);
345 i2sbus_wait_for_stop(i2sdev, pi);
355 ((i2sdev->format != runtime->format)
356 || (i2sdev->rate != runtime->rate))) {
361 i2sdev->format = runtime->format;
362 i2sdev->rate = runtime->rate;
411 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) {
433 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) {
456 list_for_each_entry(cii, &i2sdev->sound.codec_list, list) {
477 if (in_le32(&i2sdev->intfregs->serial_format) == sfr
478 && in_le32(&i2sdev->intfregs->data_word_sizes) == dws)
483 list_for_each_entry(cii, &i2sdev->sound.codec_list, list)
487 i2sbus_control_enable(i2sdev->control, i2sdev);
488 i2sbus_control_cell(i2sdev->control, i2sdev, 1);
490 out_le32(&i2sdev->intfregs->intr_ctl, I2S_PENDING_CLOCKS_STOPPED);
492 i2sbus_control_clock(i2sdev->control, i2sdev, 0);
499 !(in_le32(&i2sdev->intfregs->intr_ctl) & I2S_PENDING_CLOCKS_STOPPED)) {
502 out_le32(&i2sdev->intfregs->intr_ctl, I2S_PENDING_CLOCKS_STOPPED);
505 out_le32(&i2sdev->intfregs->serial_format, sfr);
506 out_le32(&i2sdev->intfregs->data_word_sizes, dws);
508 i2sbus_control_enable(i2sdev->control, i2sdev);
509 i2sbus_control_cell(i2sdev->control, i2sdev, 1);
510 i2sbus_control_clock(i2sdev->control, i2sdev, 1);
513 list_for_each_entry(cii, &i2sdev->sound.codec_list, list)
518 mutex_unlock(&i2sdev->lock);
523 void i2sbus_pcm_prepare_both(struct i2sbus_dev *i2sdev)
525 i2sbus_pcm_prepare(i2sdev, 0);
526 i2sbus_pcm_prepare(i2sdev, 1);
530 static int i2sbus_pcm_trigger(struct i2sbus_dev *i2sdev, int in, int cmd)
537 spin_lock_irqsave(&i2sdev->low_lock, flags);
539 get_pcm_info(i2sdev, in, &pi, NULL);
548 list_for_each_entry(cii, &i2sdev->sound.codec_list, list)
577 pi->frame_count = in_le32(&i2sdev->intfregs->frame_count);
597 list_for_each_entry(cii, &i2sdev->sound.codec_list, list)
607 spin_unlock_irqrestore(&i2sdev->low_lock, flags);
611 static snd_pcm_uframes_t i2sbus_pcm_pointer(struct i2sbus_dev *i2sdev, int in)
616 get_pcm_info(i2sdev, in, &pi, NULL);
618 fc = in_le32(&i2sdev->intfregs->frame_count);
626 static inline void handle_interrupt(struct i2sbus_dev *i2sdev, int in)
635 spin_lock(&i2sdev->low_lock);
636 get_pcm_info(i2sdev, in, &pi, NULL);
662 fc = in_le32(&i2sdev->intfregs->frame_count);
692 spin_unlock(&i2sdev->low_lock);
698 spin_unlock(&i2sdev->low_lock);
715 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
717 if (!i2sdev)
719 i2sdev->out.substream = substream;
720 return i2sbus_pcm_open(i2sdev, 0);
725 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
728 if (!i2sdev)
730 if (i2sdev->out.substream != substream)
732 err = i2sbus_pcm_close(i2sdev, 0);
734 i2sdev->out.substream = NULL;
740 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
742 if (!i2sdev)
744 if (i2sdev->out.substream != substream)
746 return i2sbus_pcm_prepare(i2sdev, 0);
751 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
753 if (!i2sdev)
755 if (i2sdev->out.substream != substream)
757 return i2sbus_pcm_trigger(i2sdev, 0, cmd);
763 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
765 if (!i2sdev)
767 if (i2sdev->out.substream != substream)
769 return i2sbus_pcm_pointer(i2sdev, 0);
783 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
785 if (!i2sdev)
787 i2sdev->in.substream = substream;
788 return i2sbus_pcm_open(i2sdev, 1);
793 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
796 if (!i2sdev)
798 if (i2sdev->in.substream != substream)
800 err = i2sbus_pcm_close(i2sdev, 1);
802 i2sdev->in.substream = NULL;
808 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
810 if (!i2sdev)
812 if (i2sdev->in.substream != substream)
814 return i2sbus_pcm_prepare(i2sdev, 1);
819 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
821 if (!i2sdev)
823 if (i2sdev->in.substream != substream)
825 return i2sbus_pcm_trigger(i2sdev, 1, cmd);
831 struct i2sbus_dev *i2sdev = snd_pcm_substream_chip(substream);
833 if (!i2sdev)
835 if (i2sdev->in.substream != substream)
837 return i2sbus_pcm_pointer(i2sdev, 1);
851 struct i2sbus_dev *i2sdev = snd_pcm_chip(pcm);
854 i2sdev->sound.pcm = NULL;
855 i2sdev->out.created = 0;
856 i2sdev->in.created = 0;
857 list_for_each_entry_safe(p, tmp, &i2sdev->sound.codec_list, list) {
863 soundbus_dev_put(&i2sdev->sound);
873 struct i2sbus_dev *i2sdev = soundbus_dev_to_i2sbus_dev(dev);
962 if (!i2sdev->out.created && out) {
977 i2sdev->out.created = 1;
980 if (!i2sdev->in.created && in) {
994 i2sdev->in.created = 1;
1011 dev->pcm->private_data = i2sdev;
1017 &macio_get_pci_dev(i2sdev->macio)->dev,