Lines Matching refs:sis

299 	struct sis7019 *sis = dev;
300 unsigned long io = sis->ioport;
319 sis_voice_irq(status, sis->voices);
325 sis_voice_irq(status, &sis->voices[32]);
331 voice = &sis->capture_voice;
370 static void __sis_map_silence(struct sis7019 *sis)
372 /* Helper function: must hold sis->voice_lock on entry */
373 if (!sis->silence_users)
374 sis->silence_dma_addr = dma_map_single(&sis->pci->dev,
375 sis->suspend_state[0],
377 sis->silence_users++;
380 static void __sis_unmap_silence(struct sis7019 *sis)
382 /* Helper function: must hold sis->voice_lock on entry */
383 sis->silence_users--;
384 if (!sis->silence_users)
385 dma_unmap_single(&sis->pci->dev, sis->silence_dma_addr, 4096,
389 static void sis_free_voice(struct sis7019 *sis, struct voice *voice)
393 spin_lock_irqsave(&sis->voice_lock, flags);
395 __sis_unmap_silence(sis);
401 spin_unlock_irqrestore(&sis->voice_lock, flags);
404 static struct voice *__sis_alloc_playback_voice(struct sis7019 *sis)
411 voice = &sis->voices[i];
423 static struct voice *sis_alloc_playback_voice(struct sis7019 *sis)
428 spin_lock_irqsave(&sis->voice_lock, flags);
429 voice = __sis_alloc_playback_voice(sis);
430 spin_unlock_irqrestore(&sis->voice_lock, flags);
438 struct sis7019 *sis = snd_pcm_substream_chip(substream);
455 spin_lock_irqsave(&sis->voice_lock, flags);
456 voice->timing = __sis_alloc_playback_voice(sis);
458 __sis_map_silence(sis);
459 spin_unlock_irqrestore(&sis->voice_lock, flags);
464 sis_free_voice(sis, voice);
473 struct sis7019 *sis = snd_pcm_substream_chip(substream);
477 voice = sis_alloc_playback_voice(sis);
494 struct sis7019 *sis = snd_pcm_substream_chip(substream);
498 sis_free_voice(sis, voice);
570 struct sis7019 *sis = snd_pcm_substream_chip(substream);
571 unsigned long io = sis->ioport;
601 if (chip != sis)
650 struct sis7019 *sis = snd_pcm_substream_chip(substream);
652 struct voice *voice = &sis->capture_voice;
658 spin_lock_irqsave(&sis->voice_lock, flags);
663 spin_unlock_irqrestore(&sis->voice_lock, flags);
671 runtime->hw.rates = sis->ac97[0]->rates[AC97_RATES_ADC];
684 struct sis7019 *sis = snd_pcm_substream_chip(substream);
687 rc = snd_ac97_set_rate(sis->ac97[0], AC97_PCM_LR_ADC_RATE,
701 struct sis7019 *sis = snd_pcm_substream_chip(substream);
786 writel(sis->silence_dma_addr, play_base + SIS_PLAY_DMA_BASE);
863 static int sis_pcm_create(struct sis7019 *sis)
871 rc = snd_pcm_new(sis->card, "SiS7019", 0, 64, 1, &pcm);
875 pcm->private_data = sis;
877 sis->pcm = pcm;
886 &sis->pci->dev, 64*1024, 128*1024);
891 static unsigned short sis_ac97_rw(struct sis7019 *sis, int codec, u32 cmd)
893 unsigned long io = sis->ioport;
910 mutex_lock(&sis->ac97_mutex);
949 mutex_unlock(&sis->ac97_mutex);
952 dev_err(&sis->pci->dev, "ac97 codec %d timeout cmd 0x%08x\n",
982 static int sis_mixer_create(struct sis7019 *sis)
993 ac97.private_data = sis;
995 rc = snd_ac97_bus(sis->card, 0, &ops, NULL, &bus);
996 if (!rc && sis->codecs_present & SIS_PRIMARY_CODEC_PRESENT)
997 rc = snd_ac97_mixer(bus, &ac97, &sis->ac97[0]);
999 if (!rc && (sis->codecs_present & SIS_SECONDARY_CODEC_PRESENT))
1000 rc = snd_ac97_mixer(bus, &ac97, &sis->ac97[1]);
1002 if (!rc && (sis->codecs_present & SIS_TERTIARY_CODEC_PRESENT))
1003 rc = snd_ac97_mixer(bus, &ac97, &sis->ac97[2]);
1011 static void sis_free_suspend(struct sis7019 *sis)
1016 kfree(sis->suspend_state[i]);
1019 static int sis_chip_free(struct sis7019 *sis)
1023 outl(SIS_GCR_SOFTWARE_RESET, sis->ioport + SIS_GCR);
1025 outl(0, sis->ioport + SIS_GCR);
1026 outl(0, sis->ioport + SIS_GIER);
1030 if (sis->irq >= 0)
1031 free_irq(sis->irq, sis);
1033 iounmap(sis->ioaddr);
1034 pci_release_regions(sis->pci);
1035 pci_disable_device(sis->pci);
1036 sis_free_suspend(sis);
1042 struct sis7019 *sis = dev->device_data;
1043 return sis_chip_free(sis);
1046 static int sis_chip_init(struct sis7019 *sis)
1048 unsigned long io = sis->ioport;
1049 void __iomem *ioaddr = sis->ioaddr;
1088 sis->codecs_present = 0;
1093 sis->codecs_present |= SIS_PRIMARY_CODEC_PRESENT;
1095 sis->codecs_present |= SIS_SECONDARY_CODEC_PRESENT;
1097 sis->codecs_present |= SIS_TERTIARY_CODEC_PRESENT;
1099 if (sis->codecs_present == codecs)
1107 if (!sis->codecs_present) {
1108 dev_err(&sis->pci->dev, "could not find any codecs\n");
1112 if (sis->codecs_present != codecs) {
1113 dev_warn(&sis->pci->dev, "missing codecs, found %0x, expected %0x\n",
1114 sis->codecs_present, codecs);
1178 struct sis7019 *sis = card->private_data;
1179 void __iomem *ioaddr = sis->ioaddr;
1183 if (sis->codecs_present & SIS_PRIMARY_CODEC_PRESENT)
1184 snd_ac97_suspend(sis->ac97[0]);
1185 if (sis->codecs_present & SIS_SECONDARY_CODEC_PRESENT)
1186 snd_ac97_suspend(sis->ac97[1]);
1187 if (sis->codecs_present & SIS_TERTIARY_CODEC_PRESENT)
1188 snd_ac97_suspend(sis->ac97[2]);
1192 if (sis->irq >= 0) {
1193 free_irq(sis->irq, sis);
1194 sis->irq = -1;
1200 memcpy_fromio(sis->suspend_state[i], ioaddr, 4096);
1211 struct sis7019 *sis = card->private_data;
1212 void __iomem *ioaddr = sis->ioaddr;
1215 if (sis_chip_init(sis)) {
1221 KBUILD_MODNAME, sis)) {
1230 memcpy_toio(ioaddr, sis->suspend_state[i], 4096);
1234 memset(sis->suspend_state[0], 0, 4096);
1236 sis->irq = pci->irq;
1238 if (sis->codecs_present & SIS_PRIMARY_CODEC_PRESENT)
1239 snd_ac97_resume(sis->ac97[0]);
1240 if (sis->codecs_present & SIS_SECONDARY_CODEC_PRESENT)
1241 snd_ac97_resume(sis->ac97[1]);
1242 if (sis->codecs_present & SIS_TERTIARY_CODEC_PRESENT)
1243 snd_ac97_resume(sis->ac97[2]);
1259 static int sis_alloc_suspend(struct sis7019 *sis)
1269 sis->suspend_state[i] = kmalloc(4096, GFP_KERNEL);
1270 if (!sis->suspend_state[i])
1273 memset(sis->suspend_state[0], 0, 4096);
1281 struct sis7019 *sis = card->private_data;
1299 memset(sis, 0, sizeof(*sis));
1300 mutex_init(&sis->ac97_mutex);
1301 spin_lock_init(&sis->voice_lock);
1302 sis->card = card;
1303 sis->pci = pci;
1304 sis->irq = -1;
1305 sis->ioport = pci_resource_start(pci, 0);
1314 sis->ioaddr = ioremap(pci_resource_start(pci, 1), 0x4000);
1315 if (!sis->ioaddr) {
1320 rc = sis_alloc_suspend(sis);
1326 rc = sis_chip_init(sis);
1331 sis);
1333 dev_err(&pci->dev, "unable to allocate irq %d\n", sis->irq);
1337 sis->irq = pci->irq;
1338 card->sync_irq = sis->irq;
1342 voice = &sis->voices[i];
1344 voice->ctrl_base = SIS_PLAY_DMA_ADDR(sis->ioaddr, i);
1345 voice->wave_base = SIS_WAVE_ADDR(sis->ioaddr, i);
1348 voice = &sis->capture_voice;
1351 voice->ctrl_base = SIS_CAPTURE_DMA_ADDR(sis->ioaddr, voice->num);
1353 rc = snd_device_new(card, SNDRV_DEV_LOWLEVEL, sis, &ops);
1360 sis_chip_free(sis);
1373 struct sis7019 *sis;
1392 sizeof(*sis), &card);
1402 sis = card->private_data;
1404 rc = sis_mixer_create(sis);
1408 rc = sis_pcm_create(sis);
1414 card->shortname, snd_ac97_get_short_name(sis->ac97[0]),
1415 sis->ioport, sis->irq);