Lines Matching refs:cs5535au
63 static void wait_till_cmd_acked(struct cs5535audio *cs5535au, unsigned long timeout) in wait_till_cmd_acked() argument
67 tmp = cs_readl(cs5535au, ACC_CODEC_CNTL); in wait_till_cmd_acked()
73 dev_err(cs5535au->card->dev, in wait_till_cmd_acked()
77 static unsigned short snd_cs5535audio_codec_read(struct cs5535audio *cs5535au, in snd_cs5535audio_codec_read() argument
88 cs_writel(cs5535au, ACC_CODEC_CNTL, regdata); in snd_cs5535audio_codec_read()
89 wait_till_cmd_acked(cs5535au, 50); in snd_cs5535audio_codec_read()
93 val = cs_readl(cs5535au, ACC_CODEC_STATUS); in snd_cs5535audio_codec_read()
99 dev_err(cs5535au->card->dev, in snd_cs5535audio_codec_read()
106 static void snd_cs5535audio_codec_write(struct cs5535audio *cs5535au, in snd_cs5535audio_codec_write() argument
117 cs_writel(cs5535au, ACC_CODEC_CNTL, regdata); in snd_cs5535audio_codec_write()
118 wait_till_cmd_acked(cs5535au, 50); in snd_cs5535audio_codec_write()
124 struct cs5535audio *cs5535au = ac97->private_data; in snd_cs5535audio_ac97_codec_write() local
125 snd_cs5535audio_codec_write(cs5535au, reg, val); in snd_cs5535audio_ac97_codec_write()
131 struct cs5535audio *cs5535au = ac97->private_data; in snd_cs5535audio_ac97_codec_read() local
132 return snd_cs5535audio_codec_read(cs5535au, reg); in snd_cs5535audio_ac97_codec_read()
135 static int snd_cs5535audio_mixer(struct cs5535audio *cs5535au) in snd_cs5535audio_mixer() argument
137 struct snd_card *card = cs5535au->card; in snd_cs5535audio_mixer()
152 ac97.private_data = cs5535au; in snd_cs5535audio_mixer()
153 ac97.pci = cs5535au->pci; in snd_cs5535audio_mixer()
158 if ((err = snd_ac97_mixer(pbus, &ac97, &cs5535au->ac97)) < 0) { in snd_cs5535audio_mixer()
163 snd_ac97_tune_hardware(cs5535au->ac97, ac97_quirks, ac97_quirk); in snd_cs5535audio_mixer()
165 err = olpc_quirks(card, cs5535au->ac97); in snd_cs5535audio_mixer()
174 static void process_bm0_irq(struct cs5535audio *cs5535au) in process_bm0_irq() argument
177 spin_lock(&cs5535au->reg_lock); in process_bm0_irq()
178 bm_stat = cs_readb(cs5535au, ACC_BM0_STATUS); in process_bm0_irq()
179 spin_unlock(&cs5535au->reg_lock); in process_bm0_irq()
181 snd_pcm_period_elapsed(cs5535au->playback_substream); in process_bm0_irq()
183 dev_err(cs5535au->card->dev, in process_bm0_irq()
189 static void process_bm1_irq(struct cs5535audio *cs5535au) in process_bm1_irq() argument
192 spin_lock(&cs5535au->reg_lock); in process_bm1_irq()
193 bm_stat = cs_readb(cs5535au, ACC_BM1_STATUS); in process_bm1_irq()
194 spin_unlock(&cs5535au->reg_lock); in process_bm1_irq()
196 snd_pcm_period_elapsed(cs5535au->capture_substream); in process_bm1_irq()
203 struct cs5535audio *cs5535au = dev_id; in snd_cs5535audio_interrupt() local
205 if (cs5535au == NULL) in snd_cs5535audio_interrupt()
208 acc_irq_stat = cs_readw(cs5535au, ACC_IRQ_STATUS); in snd_cs5535audio_interrupt()
216 cs_readl(cs5535au, ACC_GPIO_STATUS); in snd_cs5535audio_interrupt()
219 cs_readl(cs5535au, ACC_GPIO_STATUS); in snd_cs5535audio_interrupt()
222 process_bm0_irq(cs5535au); in snd_cs5535audio_interrupt()
225 process_bm1_irq(cs5535au); in snd_cs5535audio_interrupt()
228 dev_err(cs5535au->card->dev, in snd_cs5535audio_interrupt()
238 static int snd_cs5535audio_free(struct cs5535audio *cs5535au) in snd_cs5535audio_free() argument
240 pci_set_power_state(cs5535au->pci, PCI_D3hot); in snd_cs5535audio_free()
242 if (cs5535au->irq >= 0) in snd_cs5535audio_free()
243 free_irq(cs5535au->irq, cs5535au); in snd_cs5535audio_free()
245 pci_release_regions(cs5535au->pci); in snd_cs5535audio_free()
246 pci_disable_device(cs5535au->pci); in snd_cs5535audio_free()
247 kfree(cs5535au); in snd_cs5535audio_free()
253 struct cs5535audio *cs5535au = device->device_data; in snd_cs5535audio_dev_free() local
254 return snd_cs5535audio_free(cs5535au); in snd_cs5535audio_dev_free()
261 struct cs5535audio *cs5535au; in snd_cs5535audio_create() local
279 cs5535au = kzalloc(sizeof(*cs5535au), GFP_KERNEL); in snd_cs5535audio_create()
280 if (cs5535au == NULL) { in snd_cs5535audio_create()
285 spin_lock_init(&cs5535au->reg_lock); in snd_cs5535audio_create()
286 cs5535au->card = card; in snd_cs5535audio_create()
287 cs5535au->pci = pci; in snd_cs5535audio_create()
288 cs5535au->irq = -1; in snd_cs5535audio_create()
291 kfree(cs5535au); in snd_cs5535audio_create()
295 cs5535au->port = pci_resource_start(pci, 0); in snd_cs5535audio_create()
298 IRQF_SHARED, KBUILD_MODNAME, cs5535au)) { in snd_cs5535audio_create()
304 cs5535au->irq = pci->irq; in snd_cs5535audio_create()
305 card->sync_irq = cs5535au->irq; in snd_cs5535audio_create()
309 cs5535au, &ops)) < 0) in snd_cs5535audio_create()
312 *rcs5535au = cs5535au; in snd_cs5535audio_create()
316 snd_cs5535audio_free(cs5535au); in snd_cs5535audio_create()
329 struct cs5535audio *cs5535au; in snd_cs5535audio_probe() local
344 if ((err = snd_cs5535audio_create(card, pci, &cs5535au)) < 0) in snd_cs5535audio_probe()
347 card->private_data = cs5535au; in snd_cs5535audio_probe()
349 if ((err = snd_cs5535audio_mixer(cs5535au)) < 0) in snd_cs5535audio_probe()
352 if ((err = snd_cs5535audio_pcm(cs5535au)) < 0) in snd_cs5535audio_probe()
360 cs5535au->port, cs5535au->irq); in snd_cs5535audio_probe()