Lines Matching refs:ml403_ac97cr
301 #define CR_REG(ml403_ac97cr, x) ((ml403_ac97cr)->port + CR_REG_##x) argument
418 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_playback_ind2_zero() local
422 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_playback_ind2_zero()
424 spin_lock(&ml403_ac97cr->reg_lock); in snd_ml403_ac97cr_playback_ind2_zero()
425 while ((full = (in_be32(CR_REG(ml403_ac97cr, STATUS)) & in snd_ml403_ac97cr_playback_ind2_zero()
427 out_be32(CR_REG(ml403_ac97cr, PLAYFIFO), 0); in snd_ml403_ac97cr_playback_ind2_zero()
431 spin_unlock(&ml403_ac97cr->reg_lock); in snd_ml403_ac97cr_playback_ind2_zero()
441 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_playback_ind2_copy() local
446 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_playback_ind2_copy()
449 spin_lock(&ml403_ac97cr->reg_lock); in snd_ml403_ac97cr_playback_ind2_copy()
450 while (((full = (in_be32(CR_REG(ml403_ac97cr, STATUS)) & in snd_ml403_ac97cr_playback_ind2_copy()
452 out_be32(CR_REG(ml403_ac97cr, PLAYFIFO), in snd_ml403_ac97cr_playback_ind2_copy()
461 spin_unlock(&ml403_ac97cr->reg_lock); in snd_ml403_ac97cr_playback_ind2_copy()
470 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_capture_ind2_null() local
474 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_capture_ind2_null()
476 spin_lock(&ml403_ac97cr->reg_lock); in snd_ml403_ac97cr_capture_ind2_null()
477 while ((empty = (in_be32(CR_REG(ml403_ac97cr, STATUS)) & in snd_ml403_ac97cr_capture_ind2_null()
481 trash = CR_RECDATA(in_be32(CR_REG(ml403_ac97cr, RECFIFO))); in snd_ml403_ac97cr_capture_ind2_null()
489 spin_unlock(&ml403_ac97cr->reg_lock); in snd_ml403_ac97cr_capture_ind2_null()
498 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_capture_ind2_copy() local
503 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_capture_ind2_copy()
506 spin_lock(&ml403_ac97cr->reg_lock); in snd_ml403_ac97cr_capture_ind2_copy()
507 while (((empty = (in_be32(CR_REG(ml403_ac97cr, STATUS)) & in snd_ml403_ac97cr_capture_ind2_copy()
509 dst[copied_words] = CR_RECDATA(in_be32(CR_REG(ml403_ac97cr, in snd_ml403_ac97cr_capture_ind2_copy()
518 spin_unlock(&ml403_ac97cr->reg_lock); in snd_ml403_ac97cr_capture_ind2_copy()
526 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_pcm_pointer() local
529 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_pcm_pointer()
531 if (substream == ml403_ac97cr->playback_substream) in snd_ml403_ac97cr_pcm_pointer()
532 ind2_rec = &ml403_ac97cr->ind_rec; in snd_ml403_ac97cr_pcm_pointer()
533 if (substream == ml403_ac97cr->capture_substream) in snd_ml403_ac97cr_pcm_pointer()
534 ind2_rec = &ml403_ac97cr->capture_ind2_rec; in snd_ml403_ac97cr_pcm_pointer()
545 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_pcm_playback_trigger() local
548 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_pcm_playback_trigger()
553 ml403_ac97cr->ind_rec.hw_ready = 1; in snd_ml403_ac97cr_pcm_playback_trigger()
556 out_be32(CR_REG(ml403_ac97cr, RESETFIFO), CR_PLAYRESET); in snd_ml403_ac97cr_pcm_playback_trigger()
559 ml403_ac97cr->enable_irq = 1; in snd_ml403_ac97cr_pcm_playback_trigger()
560 enable_irq(ml403_ac97cr->irq); in snd_ml403_ac97cr_pcm_playback_trigger()
564 ml403_ac97cr->ind_rec.hw_ready = 0; in snd_ml403_ac97cr_pcm_playback_trigger()
566 snd_pcm_indirect2_stat(substream, &ml403_ac97cr->ind_rec); in snd_ml403_ac97cr_pcm_playback_trigger()
569 disable_irq_nosync(ml403_ac97cr->irq); in snd_ml403_ac97cr_pcm_playback_trigger()
570 ml403_ac97cr->enable_irq = 0; in snd_ml403_ac97cr_pcm_playback_trigger()
584 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_pcm_capture_trigger() local
587 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_pcm_capture_trigger()
592 ml403_ac97cr->capture_ind2_rec.hw_ready = 0; in snd_ml403_ac97cr_pcm_capture_trigger()
595 out_be32(CR_REG(ml403_ac97cr, RESETFIFO), CR_RECRESET); in snd_ml403_ac97cr_pcm_capture_trigger()
598 ml403_ac97cr->enable_capture_irq = 1; in snd_ml403_ac97cr_pcm_capture_trigger()
599 enable_irq(ml403_ac97cr->capture_irq); in snd_ml403_ac97cr_pcm_capture_trigger()
603 ml403_ac97cr->capture_ind2_rec.hw_ready = 0; in snd_ml403_ac97cr_pcm_capture_trigger()
606 &ml403_ac97cr->capture_ind2_rec); in snd_ml403_ac97cr_pcm_capture_trigger()
609 disable_irq_nosync(ml403_ac97cr->capture_irq); in snd_ml403_ac97cr_pcm_capture_trigger()
610 ml403_ac97cr->enable_capture_irq = 0; in snd_ml403_ac97cr_pcm_capture_trigger()
623 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_pcm_playback_prepare() local
626 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_pcm_playback_prepare()
634 snd_ac97_set_rate(ml403_ac97cr->ac97, AC97_PCM_FRONT_DAC_RATE, in snd_ml403_ac97cr_pcm_playback_prepare()
639 memset(&ml403_ac97cr->ind_rec, 0, in snd_ml403_ac97cr_pcm_playback_prepare()
641 ml403_ac97cr->ind_rec.hw_buffer_size = CR_FIFO_SIZE; in snd_ml403_ac97cr_pcm_playback_prepare()
642 ml403_ac97cr->ind_rec.sw_buffer_size = in snd_ml403_ac97cr_pcm_playback_prepare()
644 ml403_ac97cr->ind_rec.min_periods = -1; in snd_ml403_ac97cr_pcm_playback_prepare()
645 ml403_ac97cr->ind_rec.min_multiple = in snd_ml403_ac97cr_pcm_playback_prepare()
649 CR_FIFO_SIZE, ml403_ac97cr->ind_rec.sw_buffer_size, in snd_ml403_ac97cr_pcm_playback_prepare()
650 ml403_ac97cr->ind_rec.min_multiple); in snd_ml403_ac97cr_pcm_playback_prepare()
657 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_pcm_capture_prepare() local
660 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_pcm_capture_prepare()
668 snd_ac97_set_rate(ml403_ac97cr->ac97, AC97_PCM_LR_ADC_RATE, in snd_ml403_ac97cr_pcm_capture_prepare()
673 memset(&ml403_ac97cr->capture_ind2_rec, 0, in snd_ml403_ac97cr_pcm_capture_prepare()
675 ml403_ac97cr->capture_ind2_rec.hw_buffer_size = CR_FIFO_SIZE; in snd_ml403_ac97cr_pcm_capture_prepare()
676 ml403_ac97cr->capture_ind2_rec.sw_buffer_size = in snd_ml403_ac97cr_pcm_capture_prepare()
678 ml403_ac97cr->capture_ind2_rec.min_multiple = in snd_ml403_ac97cr_pcm_capture_prepare()
682 ml403_ac97cr->capture_ind2_rec.sw_buffer_size, in snd_ml403_ac97cr_pcm_capture_prepare()
683 ml403_ac97cr->capture_ind2_rec.min_multiple); in snd_ml403_ac97cr_pcm_capture_prepare()
706 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_playback_open() local
709 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_playback_open()
713 ml403_ac97cr->playback_substream = substream; in snd_ml403_ac97cr_playback_open()
724 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_capture_open() local
727 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_capture_open()
731 ml403_ac97cr->capture_substream = substream; in snd_ml403_ac97cr_capture_open()
742 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_playback_close() local
744 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_playback_close()
747 ml403_ac97cr->playback_substream = NULL; in snd_ml403_ac97cr_playback_close()
753 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_capture_close() local
755 ml403_ac97cr = snd_pcm_substream_chip(substream); in snd_ml403_ac97cr_capture_close()
758 ml403_ac97cr->capture_substream = NULL; in snd_ml403_ac97cr_capture_close()
786 struct snd_ml403_ac97cr *ml403_ac97cr; in snd_ml403_ac97cr_irq() local
790 ml403_ac97cr = (struct snd_ml403_ac97cr *)dev_id; in snd_ml403_ac97cr_irq()
791 if (ml403_ac97cr == NULL) in snd_ml403_ac97cr_irq()
794 pfdev = ml403_ac97cr->pfdev; in snd_ml403_ac97cr_irq()
799 if (ml403_ac97cr->enable_irq) in snd_ml403_ac97cr_irq()
801 ml403_ac97cr->playback_substream, in snd_ml403_ac97cr_irq()
802 &ml403_ac97cr->ind_rec, in snd_ml403_ac97cr_irq()
811 if (ml403_ac97cr->enable_capture_irq) in snd_ml403_ac97cr_irq()
813 ml403_ac97cr->capture_substream, in snd_ml403_ac97cr_irq()
814 &ml403_ac97cr->capture_ind2_rec, in snd_ml403_ac97cr_irq()
834 struct snd_ml403_ac97cr *ml403_ac97cr = ac97->private_data; local
860 ml403_ac97cr->ac97_fake) {
873 ml403_ac97cr->ac97_write,
874 ml403_ac97cr->ac97_read);
886 if (mutex_lock_interruptible(&ml403_ac97cr->cdc_mutex) != 0)
889 ml403_ac97cr->ac97_read++;
891 spin_lock(&ml403_ac97cr->reg_lock);
892 out_be32(CR_REG(ml403_ac97cr, CODEC_ADDR),
894 spin_unlock(&ml403_ac97cr->reg_lock);
897 spin_lock(&ml403_ac97cr->reg_lock);
900 stat = in_be32(CR_REG(ml403_ac97cr, STATUS));
903 in_be32(CR_REG(ml403_ac97cr, CODEC_DATAREAD)));
908 if ((in_be32(CR_REG(ml403_ac97cr, STATUS)) &
911 in_be32(CR_REG(ml403_ac97cr, CODEC_DATAREAD)));
918 spin_unlock(&ml403_ac97cr->reg_lock);
919 mutex_unlock(&ml403_ac97cr->cdc_mutex);
922 spin_unlock(&ml403_ac97cr->reg_lock);
926 spin_lock(&ml403_ac97cr->reg_lock);
928 CR_CODEC_DATAREAD(in_be32(CR_REG(ml403_ac97cr, CODEC_DATAREAD)));
929 spin_unlock(&ml403_ac97cr->reg_lock);
936 ml403_ac97cr->ac97_write, ml403_ac97cr->ac97_read);
948 mutex_unlock(&ml403_ac97cr->cdc_mutex);
956 struct snd_ml403_ac97cr *ml403_ac97cr = ac97->private_data; local
986 ml403_ac97cr->ac97_fake) &&
994 if (mutex_lock_interruptible(&ml403_ac97cr->cdc_mutex) != 0)
997 ml403_ac97cr->ac97_write++;
999 spin_lock(&ml403_ac97cr->reg_lock);
1000 out_be32(CR_REG(ml403_ac97cr, CODEC_DATAWRITE),
1002 out_be32(CR_REG(ml403_ac97cr, CODEC_ADDR),
1004 spin_unlock(&ml403_ac97cr->reg_lock);
1011 spin_lock(&ml403_ac97cr->reg_lock);
1014 stat = in_be32(CR_REG(ml403_ac97cr, STATUS))
1017 if ((in_be32(CR_REG(ml403_ac97cr, STATUS)) &
1029 spin_unlock(&ml403_ac97cr->reg_lock);
1030 mutex_unlock(&ml403_ac97cr->cdc_mutex);
1033 spin_unlock(&ml403_ac97cr->reg_lock);
1041 reg, val, val, stat, rafaccess, ml403_ac97cr->ac97_write,
1042 ml403_ac97cr->ac97_read);
1062 mutex_unlock(&ml403_ac97cr->cdc_mutex);
1067 snd_ml403_ac97cr_chip_init(struct snd_ml403_ac97cr *ml403_ac97cr) argument
1073 if (in_be32(CR_REG(ml403_ac97cr, STATUS)) & CR_CODECREADY) {
1075 out_be32(CR_REG(ml403_ac97cr, RESETFIFO),
1088 static int snd_ml403_ac97cr_free(struct snd_ml403_ac97cr *ml403_ac97cr) argument
1092 if (ml403_ac97cr->irq >= 0)
1093 free_irq(ml403_ac97cr->irq, ml403_ac97cr);
1094 if (ml403_ac97cr->capture_irq >= 0)
1095 free_irq(ml403_ac97cr->capture_irq, ml403_ac97cr);
1097 iounmap(ml403_ac97cr->port);
1098 kfree(ml403_ac97cr);
1105 struct snd_ml403_ac97cr *ml403_ac97cr = snddev->device_data; local
1107 return snd_ml403_ac97cr_free(ml403_ac97cr);
1114 struct snd_ml403_ac97cr *ml403_ac97cr; local
1123 ml403_ac97cr = kzalloc(sizeof(*ml403_ac97cr), GFP_KERNEL);
1124 if (ml403_ac97cr == NULL)
1126 spin_lock_init(&ml403_ac97cr->reg_lock);
1127 mutex_init(&ml403_ac97cr->cdc_mutex);
1128 ml403_ac97cr->card = card;
1129 ml403_ac97cr->pfdev = pfdev;
1130 ml403_ac97cr->irq = -1;
1131 ml403_ac97cr->enable_irq = 0;
1132 ml403_ac97cr->capture_irq = -1;
1133 ml403_ac97cr->enable_capture_irq = 0;
1134 ml403_ac97cr->port = NULL;
1135 ml403_ac97cr->res_port = NULL;
1140 ml403_ac97cr->port = ioremap_nocache(resource->start,
1143 if (ml403_ac97cr->port == NULL) {
1147 snd_ml403_ac97cr_free(ml403_ac97cr);
1152 "0x%x done\n", (unsigned int)ml403_ac97cr->port);
1156 dev_name(&pfdev->dev), (void *)ml403_ac97cr)) {
1160 snd_ml403_ac97cr_free(ml403_ac97cr);
1163 ml403_ac97cr->irq = irq;
1166 ml403_ac97cr->irq);
1169 dev_name(&pfdev->dev), (void *)ml403_ac97cr)) {
1173 snd_ml403_ac97cr_free(ml403_ac97cr);
1176 ml403_ac97cr->capture_irq = irq;
1179 ml403_ac97cr->capture_irq);
1181 err = snd_ml403_ac97cr_chip_init(ml403_ac97cr);
1183 snd_ml403_ac97cr_free(ml403_ac97cr);
1187 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, ml403_ac97cr, &ops);
1190 snd_ml403_ac97cr_free(ml403_ac97cr);
1194 *rml403_ac97cr = ml403_ac97cr;
1200 struct snd_ml403_ac97cr *ml403_ac97cr = ac97->private_data; local
1202 ml403_ac97cr->ac97 = NULL;
1207 snd_ml403_ac97cr_mixer(struct snd_ml403_ac97cr *ml403_ac97cr) argument
1217 err = snd_ac97_bus(ml403_ac97cr->card, 0, &ops, NULL, &bus);
1222 ml403_ac97cr->ac97_fake = 1;
1225 ml403_ac97cr->ac97_read = 0;
1226 ml403_ac97cr->ac97_write = 0;
1228 ac97.private_data = ml403_ac97cr;
1232 err = snd_ac97_mixer(bus, &ac97, &ml403_ac97cr->ac97);
1233 ml403_ac97cr->ac97_fake = 0;
1234 lm4550_regfile_write_values_after_init(ml403_ac97cr->ac97);
1240 snd_ml403_ac97cr_pcm(struct snd_ml403_ac97cr *ml403_ac97cr, int device) argument
1245 err = snd_pcm_new(ml403_ac97cr->card, "ML403AC97CR/1", device, 1, 1,
1253 pcm->private_data = ml403_ac97cr;
1256 ml403_ac97cr->pcm = pcm;
1268 struct snd_ml403_ac97cr *ml403_ac97cr = NULL; local
1281 err = snd_ml403_ac97cr_create(card, pfdev, &ml403_ac97cr);
1288 card->private_data = ml403_ac97cr;
1289 err = snd_ml403_ac97cr_mixer(ml403_ac97cr);
1295 err = snd_ml403_ac97cr_pcm(ml403_ac97cr, 0);
1305 (unsigned long)ml403_ac97cr->port, ml403_ac97cr->irq,
1306 ml403_ac97cr->capture_irq, dev + 1);