Lines Matching refs:cs5535au
77 static void wait_till_cmd_acked(struct cs5535audio *cs5535au, unsigned long timeout) in wait_till_cmd_acked() argument
81 tmp = cs_readl(cs5535au, ACC_CODEC_CNTL); in wait_till_cmd_acked()
87 dev_err(cs5535au->card->dev, in wait_till_cmd_acked()
91 static unsigned short snd_cs5535audio_codec_read(struct cs5535audio *cs5535au, in snd_cs5535audio_codec_read() argument
102 cs_writel(cs5535au, ACC_CODEC_CNTL, regdata); in snd_cs5535audio_codec_read()
103 wait_till_cmd_acked(cs5535au, 50); in snd_cs5535audio_codec_read()
107 val = cs_readl(cs5535au, ACC_CODEC_STATUS); in snd_cs5535audio_codec_read()
113 dev_err(cs5535au->card->dev, in snd_cs5535audio_codec_read()
120 static void snd_cs5535audio_codec_write(struct cs5535audio *cs5535au, in snd_cs5535audio_codec_write() argument
131 cs_writel(cs5535au, ACC_CODEC_CNTL, regdata); in snd_cs5535audio_codec_write()
132 wait_till_cmd_acked(cs5535au, 50); in snd_cs5535audio_codec_write()
138 struct cs5535audio *cs5535au = ac97->private_data; in snd_cs5535audio_ac97_codec_write() local
139 snd_cs5535audio_codec_write(cs5535au, reg, val); in snd_cs5535audio_ac97_codec_write()
145 struct cs5535audio *cs5535au = ac97->private_data; in snd_cs5535audio_ac97_codec_read() local
146 return snd_cs5535audio_codec_read(cs5535au, reg); in snd_cs5535audio_ac97_codec_read()
149 static int snd_cs5535audio_mixer(struct cs5535audio *cs5535au) in snd_cs5535audio_mixer() argument
151 struct snd_card *card = cs5535au->card; in snd_cs5535audio_mixer()
166 ac97.private_data = cs5535au; in snd_cs5535audio_mixer()
167 ac97.pci = cs5535au->pci; in snd_cs5535audio_mixer()
172 if ((err = snd_ac97_mixer(pbus, &ac97, &cs5535au->ac97)) < 0) { in snd_cs5535audio_mixer()
177 snd_ac97_tune_hardware(cs5535au->ac97, ac97_quirks, ac97_quirk); in snd_cs5535audio_mixer()
179 err = olpc_quirks(card, cs5535au->ac97); in snd_cs5535audio_mixer()
188 static void process_bm0_irq(struct cs5535audio *cs5535au) in process_bm0_irq() argument
191 spin_lock(&cs5535au->reg_lock); in process_bm0_irq()
192 bm_stat = cs_readb(cs5535au, ACC_BM0_STATUS); in process_bm0_irq()
193 spin_unlock(&cs5535au->reg_lock); in process_bm0_irq()
196 dma = cs5535au->playback_substream->runtime->private_data; in process_bm0_irq()
197 snd_pcm_period_elapsed(cs5535au->playback_substream); in process_bm0_irq()
199 dev_err(cs5535au->card->dev, in process_bm0_irq()
205 static void process_bm1_irq(struct cs5535audio *cs5535au) in process_bm1_irq() argument
208 spin_lock(&cs5535au->reg_lock); in process_bm1_irq()
209 bm_stat = cs_readb(cs5535au, ACC_BM1_STATUS); in process_bm1_irq()
210 spin_unlock(&cs5535au->reg_lock); in process_bm1_irq()
213 dma = cs5535au->capture_substream->runtime->private_data; in process_bm1_irq()
214 snd_pcm_period_elapsed(cs5535au->capture_substream); in process_bm1_irq()
222 struct cs5535audio *cs5535au = dev_id; in snd_cs5535audio_interrupt() local
224 if (cs5535au == NULL) in snd_cs5535audio_interrupt()
227 acc_irq_stat = cs_readw(cs5535au, ACC_IRQ_STATUS); in snd_cs5535audio_interrupt()
235 cs_readl(cs5535au, ACC_GPIO_STATUS); in snd_cs5535audio_interrupt()
238 cs_readl(cs5535au, ACC_GPIO_STATUS); in snd_cs5535audio_interrupt()
241 process_bm0_irq(cs5535au); in snd_cs5535audio_interrupt()
244 process_bm1_irq(cs5535au); in snd_cs5535audio_interrupt()
247 dev_err(cs5535au->card->dev, in snd_cs5535audio_interrupt()
257 static int snd_cs5535audio_free(struct cs5535audio *cs5535au) in snd_cs5535audio_free() argument
259 synchronize_irq(cs5535au->irq); in snd_cs5535audio_free()
260 pci_set_power_state(cs5535au->pci, PCI_D3hot); in snd_cs5535audio_free()
262 if (cs5535au->irq >= 0) in snd_cs5535audio_free()
263 free_irq(cs5535au->irq, cs5535au); in snd_cs5535audio_free()
265 pci_release_regions(cs5535au->pci); in snd_cs5535audio_free()
266 pci_disable_device(cs5535au->pci); in snd_cs5535audio_free()
267 kfree(cs5535au); in snd_cs5535audio_free()
273 struct cs5535audio *cs5535au = device->device_data; in snd_cs5535audio_dev_free() local
274 return snd_cs5535audio_free(cs5535au); in snd_cs5535audio_dev_free()
281 struct cs5535audio *cs5535au; in snd_cs5535audio_create() local
299 cs5535au = kzalloc(sizeof(*cs5535au), GFP_KERNEL); in snd_cs5535audio_create()
300 if (cs5535au == NULL) { in snd_cs5535audio_create()
305 spin_lock_init(&cs5535au->reg_lock); in snd_cs5535audio_create()
306 cs5535au->card = card; in snd_cs5535audio_create()
307 cs5535au->pci = pci; in snd_cs5535audio_create()
308 cs5535au->irq = -1; in snd_cs5535audio_create()
311 kfree(cs5535au); in snd_cs5535audio_create()
315 cs5535au->port = pci_resource_start(pci, 0); in snd_cs5535audio_create()
318 IRQF_SHARED, KBUILD_MODNAME, cs5535au)) { in snd_cs5535audio_create()
324 cs5535au->irq = pci->irq; in snd_cs5535audio_create()
328 cs5535au, &ops)) < 0) in snd_cs5535audio_create()
331 *rcs5535au = cs5535au; in snd_cs5535audio_create()
335 snd_cs5535audio_free(cs5535au); in snd_cs5535audio_create()
348 struct cs5535audio *cs5535au; in snd_cs5535audio_probe() local
363 if ((err = snd_cs5535audio_create(card, pci, &cs5535au)) < 0) in snd_cs5535audio_probe()
366 card->private_data = cs5535au; in snd_cs5535audio_probe()
368 if ((err = snd_cs5535audio_mixer(cs5535au)) < 0) in snd_cs5535audio_probe()
371 if ((err = snd_cs5535audio_pcm(cs5535au)) < 0) in snd_cs5535audio_probe()
379 cs5535au->port, cs5535au->irq); in snd_cs5535audio_probe()