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