Lines Matching refs:cs5535au

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