Lines Matching refs:sis

298 	struct sis7019 *sis = dev;
299 unsigned long io = sis->ioport;
318 sis_voice_irq(status, sis->voices);
324 sis_voice_irq(status, &sis->voices[32]);
330 voice = &sis->capture_voice;
369 static void __sis_map_silence(struct sis7019 *sis)
371 /* Helper function: must hold sis->voice_lock on entry */
372 if (!sis->silence_users)
373 sis->silence_dma_addr = dma_map_single(&sis->pci->dev,
374 sis->suspend_state[0],
376 sis->silence_users++;
379 static void __sis_unmap_silence(struct sis7019 *sis)
381 /* Helper function: must hold sis->voice_lock on entry */
382 sis->silence_users--;
383 if (!sis->silence_users)
384 dma_unmap_single(&sis->pci->dev, sis->silence_dma_addr, 4096,
388 static void sis_free_voice(struct sis7019 *sis, struct voice *voice)
392 spin_lock_irqsave(&sis->voice_lock, flags);
394 __sis_unmap_silence(sis);
400 spin_unlock_irqrestore(&sis->voice_lock, flags);
403 static struct voice *__sis_alloc_playback_voice(struct sis7019 *sis)
410 voice = &sis->voices[i];
422 static struct voice *sis_alloc_playback_voice(struct sis7019 *sis)
427 spin_lock_irqsave(&sis->voice_lock, flags);
428 voice = __sis_alloc_playback_voice(sis);
429 spin_unlock_irqrestore(&sis->voice_lock, flags);
437 struct sis7019 *sis = snd_pcm_substream_chip(substream);
454 spin_lock_irqsave(&sis->voice_lock, flags);
455 voice->timing = __sis_alloc_playback_voice(sis);
457 __sis_map_silence(sis);
458 spin_unlock_irqrestore(&sis->voice_lock, flags);
463 sis_free_voice(sis, voice);
472 struct sis7019 *sis = snd_pcm_substream_chip(substream);
476 voice = sis_alloc_playback_voice(sis);
493 struct sis7019 *sis = snd_pcm_substream_chip(substream);
497 sis_free_voice(sis, voice);
569 struct sis7019 *sis = snd_pcm_substream_chip(substream);
570 unsigned long io = sis->ioport;
600 if (chip != sis)
649 struct sis7019 *sis = snd_pcm_substream_chip(substream);
651 struct voice *voice = &sis->capture_voice;
657 spin_lock_irqsave(&sis->voice_lock, flags);
662 spin_unlock_irqrestore(&sis->voice_lock, flags);
670 runtime->hw.rates = sis->ac97[0]->rates[AC97_RATES_ADC];
683 struct sis7019 *sis = snd_pcm_substream_chip(substream);
686 rc = snd_ac97_set_rate(sis->ac97[0], AC97_PCM_LR_ADC_RATE,
700 struct sis7019 *sis = snd_pcm_substream_chip(substream);
785 writel(sis->silence_dma_addr, play_base + SIS_PLAY_DMA_BASE);
862 static int sis_pcm_create(struct sis7019 *sis)
870 rc = snd_pcm_new(sis->card, "SiS7019", 0, 64, 1, &pcm);
874 pcm->private_data = sis;
876 sis->pcm = pcm;
885 &sis->pci->dev, 64*1024, 128*1024);
890 static unsigned short sis_ac97_rw(struct sis7019 *sis, int codec, u32 cmd)
892 unsigned long io = sis->ioport;
909 mutex_lock(&sis->ac97_mutex);
948 mutex_unlock(&sis->ac97_mutex);
951 dev_err(&sis->pci->dev, "ac97 codec %d timeout cmd 0x%08x\n",
981 static int sis_mixer_create(struct sis7019 *sis)
992 ac97.private_data = sis;
994 rc = snd_ac97_bus(sis->card, 0, &ops, NULL, &bus);
995 if (!rc && sis->codecs_present & SIS_PRIMARY_CODEC_PRESENT)
996 rc = snd_ac97_mixer(bus, &ac97, &sis->ac97[0]);
998 if (!rc && (sis->codecs_present & SIS_SECONDARY_CODEC_PRESENT))
999 rc = snd_ac97_mixer(bus, &ac97, &sis->ac97[1]);
1001 if (!rc && (sis->codecs_present & SIS_TERTIARY_CODEC_PRESENT))
1002 rc = snd_ac97_mixer(bus, &ac97, &sis->ac97[2]);
1012 struct sis7019 *sis = card->private_data;
1016 outl(SIS_GCR_SOFTWARE_RESET, sis->ioport + SIS_GCR);
1018 outl(0, sis->ioport + SIS_GCR);
1019 outl(0, sis->ioport + SIS_GIER);
1023 if (sis->irq >= 0)
1024 free_irq(sis->irq, sis);
1027 static int sis_chip_init(struct sis7019 *sis)
1029 unsigned long io = sis->ioport;
1030 void __iomem *ioaddr = sis->ioaddr;
1069 sis->codecs_present = 0;
1074 sis->codecs_present |= SIS_PRIMARY_CODEC_PRESENT;
1076 sis->codecs_present |= SIS_SECONDARY_CODEC_PRESENT;
1078 sis->codecs_present |= SIS_TERTIARY_CODEC_PRESENT;
1080 if (sis->codecs_present == codecs)
1088 if (!sis->codecs_present) {
1089 dev_err(&sis->pci->dev, "could not find any codecs\n");
1093 if (sis->codecs_present != codecs) {
1094 dev_warn(&sis->pci->dev, "missing codecs, found %0x, expected %0x\n",
1095 sis->codecs_present, codecs);
1159 struct sis7019 *sis = card->private_data;
1160 void __iomem *ioaddr = sis->ioaddr;
1164 if (sis->codecs_present & SIS_PRIMARY_CODEC_PRESENT)
1165 snd_ac97_suspend(sis->ac97[0]);
1166 if (sis->codecs_present & SIS_SECONDARY_CODEC_PRESENT)
1167 snd_ac97_suspend(sis->ac97[1]);
1168 if (sis->codecs_present & SIS_TERTIARY_CODEC_PRESENT)
1169 snd_ac97_suspend(sis->ac97[2]);
1173 if (sis->irq >= 0) {
1174 free_irq(sis->irq, sis);
1175 sis->irq = -1;
1181 memcpy_fromio(sis->suspend_state[i], ioaddr, 4096);
1192 struct sis7019 *sis = card->private_data;
1193 void __iomem *ioaddr = sis->ioaddr;
1196 if (sis_chip_init(sis)) {
1202 KBUILD_MODNAME, sis)) {
1211 memcpy_toio(ioaddr, sis->suspend_state[i], 4096);
1215 memset(sis->suspend_state[0], 0, 4096);
1217 sis->irq = pci->irq;
1219 if (sis->codecs_present & SIS_PRIMARY_CODEC_PRESENT)
1220 snd_ac97_resume(sis->ac97[0]);
1221 if (sis->codecs_present & SIS_SECONDARY_CODEC_PRESENT)
1222 snd_ac97_resume(sis->ac97[1]);
1223 if (sis->codecs_present & SIS_TERTIARY_CODEC_PRESENT)
1224 snd_ac97_resume(sis->ac97[2]);
1240 static int sis_alloc_suspend(struct sis7019 *sis)
1250 sis->suspend_state[i] = devm_kmalloc(&sis->pci->dev, 4096,
1252 if (!sis->suspend_state[i])
1255 memset(sis->suspend_state[0], 0, 4096);
1263 struct sis7019 *sis = card->private_data;
1278 mutex_init(&sis->ac97_mutex);
1279 spin_lock_init(&sis->voice_lock);
1280 sis->card = card;
1281 sis->pci = pci;
1282 sis->irq = -1;
1283 sis->ioport = pci_resource_start(pci, 0);
1291 sis->ioaddr = devm_ioremap(&pci->dev, pci_resource_start(pci, 1), 0x4000);
1292 if (!sis->ioaddr) {
1297 rc = sis_alloc_suspend(sis);
1303 rc = sis_chip_init(sis);
1309 sis);
1311 dev_err(&pci->dev, "unable to allocate irq %d\n", sis->irq);
1315 sis->irq = pci->irq;
1316 card->sync_irq = sis->irq;
1320 voice = &sis->voices[i];
1322 voice->ctrl_base = SIS_PLAY_DMA_ADDR(sis->ioaddr, i);
1323 voice->wave_base = SIS_WAVE_ADDR(sis->ioaddr, i);
1326 voice = &sis->capture_voice;
1329 voice->ctrl_base = SIS_CAPTURE_DMA_ADDR(sis->ioaddr, voice->num);
1338 struct sis7019 *sis;
1356 sizeof(*sis), &card);
1366 sis = card->private_data;
1368 rc = sis_mixer_create(sis);
1372 rc = sis_pcm_create(sis);
1378 card->shortname, snd_ac97_get_short_name(sis->ac97[0]),
1379 sis->ioport, sis->irq);