Lines Matching refs:chip
120 #define NM_ACK_INT(chip, X) snd_nm256_writew(chip, NM_INT_REG, (X) << 1) argument
137 #define NM2_ACK_INT(chip, X) snd_nm256_writel(chip, NM_INT_REG, (X)) argument
189 struct nm256 *chip; member
280 snd_nm256_readb(struct nm256 *chip, int offset) in snd_nm256_readb() argument
282 return readb(chip->cport + offset); in snd_nm256_readb()
286 snd_nm256_readw(struct nm256 *chip, int offset) in snd_nm256_readw() argument
288 return readw(chip->cport + offset); in snd_nm256_readw()
292 snd_nm256_readl(struct nm256 *chip, int offset) in snd_nm256_readl() argument
294 return readl(chip->cport + offset); in snd_nm256_readl()
298 snd_nm256_writeb(struct nm256 *chip, int offset, u8 val) in snd_nm256_writeb() argument
300 writeb(val, chip->cport + offset); in snd_nm256_writeb()
304 snd_nm256_writew(struct nm256 *chip, int offset, u16 val) in snd_nm256_writew() argument
306 writew(val, chip->cport + offset); in snd_nm256_writew()
310 snd_nm256_writel(struct nm256 *chip, int offset, u32 val) in snd_nm256_writel() argument
312 writel(val, chip->cport + offset); in snd_nm256_writel()
316 snd_nm256_write_buffer(struct nm256 *chip, void *src, int offset, int size) in snd_nm256_write_buffer() argument
318 offset -= chip->buffer_start; in snd_nm256_write_buffer()
320 if (offset < 0 || offset >= chip->buffer_size) { in snd_nm256_write_buffer()
321 dev_err(chip->card->dev, in snd_nm256_write_buffer()
327 memcpy_toio(chip->buffer + offset, src, size); in snd_nm256_write_buffer()
344 snd_nm256_load_one_coefficient(struct nm256 *chip, int stream, u32 port, int which) in snd_nm256_load_one_coefficient() argument
346 u32 coeff_buf = chip->coeff_buf[stream]; in snd_nm256_load_one_coefficient()
350 snd_nm256_write_buffer(chip, coefficients + offset, coeff_buf, size); in snd_nm256_load_one_coefficient()
351 snd_nm256_writel(chip, port, coeff_buf); in snd_nm256_load_one_coefficient()
355 snd_nm256_writel(chip, port + 4, coeff_buf + size); in snd_nm256_load_one_coefficient()
359 snd_nm256_load_coefficient(struct nm256 *chip, int stream, int number) in snd_nm256_load_coefficient() argument
369 if (snd_nm256_readb(chip, poffset) & 1) { in snd_nm256_load_coefficient()
370 dev_dbg(chip->card->dev, in snd_nm256_load_coefficient()
380 if (! chip->use_cache) { in snd_nm256_load_coefficient()
381 snd_nm256_load_one_coefficient(chip, stream, addr, number); in snd_nm256_load_coefficient()
384 if (! chip->coeffs_current) { in snd_nm256_load_coefficient()
385 snd_nm256_write_buffer(chip, coefficients, chip->all_coeff_buf, in snd_nm256_load_coefficient()
387 chip->coeffs_current = 1; in snd_nm256_load_coefficient()
389 u32 base = chip->all_coeff_buf; in snd_nm256_load_coefficient()
392 snd_nm256_writel(chip, addr, base + offset); in snd_nm256_load_coefficient()
395 snd_nm256_writel(chip, addr + 4, base + end_offset); in snd_nm256_load_coefficient()
429 snd_nm256_set_format(struct nm256 *chip, struct nm256_stream *s, in snd_nm256_set_format() argument
450 snd_nm256_load_coefficient(chip, 0, rate_index); /* 0 = playback */ in snd_nm256_set_format()
451 snd_nm256_writeb(chip, in snd_nm256_set_format()
456 snd_nm256_load_coefficient(chip, 1, rate_index); /* 1 = record */ in snd_nm256_set_format()
457 snd_nm256_writeb(chip, in snd_nm256_set_format()
465 static int snd_nm256_acquire_irq(struct nm256 *chip) in snd_nm256_acquire_irq() argument
467 mutex_lock(&chip->irq_mutex); in snd_nm256_acquire_irq()
468 if (chip->irq < 0) { in snd_nm256_acquire_irq()
469 if (request_irq(chip->pci->irq, chip->interrupt, IRQF_SHARED, in snd_nm256_acquire_irq()
470 KBUILD_MODNAME, chip)) { in snd_nm256_acquire_irq()
471 dev_err(chip->card->dev, in snd_nm256_acquire_irq()
472 "unable to grab IRQ %d\n", chip->pci->irq); in snd_nm256_acquire_irq()
473 mutex_unlock(&chip->irq_mutex); in snd_nm256_acquire_irq()
476 chip->irq = chip->pci->irq; in snd_nm256_acquire_irq()
478 chip->irq_acks++; in snd_nm256_acquire_irq()
479 mutex_unlock(&chip->irq_mutex); in snd_nm256_acquire_irq()
484 static void snd_nm256_release_irq(struct nm256 *chip) in snd_nm256_release_irq() argument
486 mutex_lock(&chip->irq_mutex); in snd_nm256_release_irq()
487 if (chip->irq_acks > 0) in snd_nm256_release_irq()
488 chip->irq_acks--; in snd_nm256_release_irq()
489 if (chip->irq_acks == 0 && chip->irq >= 0) { in snd_nm256_release_irq()
490 free_irq(chip->irq, chip); in snd_nm256_release_irq()
491 chip->irq = -1; in snd_nm256_release_irq()
493 mutex_unlock(&chip->irq_mutex); in snd_nm256_release_irq()
501 static void snd_nm256_pcm_mark(struct nm256 *chip, struct nm256_stream *s, int reg) in snd_nm256_pcm_mark() argument
505 snd_nm256_writel(chip, reg, s->buf + s->cur_period * s->period_size); in snd_nm256_pcm_mark()
508 #define snd_nm256_playback_mark(chip, s) snd_nm256_pcm_mark(chip, s, NM_PBUFFER_WMARK) argument
509 #define snd_nm256_capture_mark(chip, s) snd_nm256_pcm_mark(chip, s, NM_RBUFFER_WMARK) argument
512 snd_nm256_playback_start(struct nm256 *chip, struct nm256_stream *s, in snd_nm256_playback_start() argument
516 snd_nm256_writel(chip, NM_PBUFFER_START, s->buf); in snd_nm256_playback_start()
517 snd_nm256_writel(chip, NM_PBUFFER_END, s->buf + s->dma_size - (1 << s->shift)); in snd_nm256_playback_start()
518 snd_nm256_writel(chip, NM_PBUFFER_CURRP, s->buf); in snd_nm256_playback_start()
519 snd_nm256_playback_mark(chip, s); in snd_nm256_playback_start()
522 snd_nm256_writeb(chip, NM_PLAYBACK_ENABLE_REG, in snd_nm256_playback_start()
525 snd_nm256_writew(chip, NM_AUDIO_MUTE_REG, 0x0); in snd_nm256_playback_start()
529 snd_nm256_capture_start(struct nm256 *chip, struct nm256_stream *s, in snd_nm256_capture_start() argument
533 snd_nm256_writel(chip, NM_RBUFFER_START, s->buf); in snd_nm256_capture_start()
534 snd_nm256_writel(chip, NM_RBUFFER_END, s->buf + s->dma_size); in snd_nm256_capture_start()
535 snd_nm256_writel(chip, NM_RBUFFER_CURRP, s->buf); in snd_nm256_capture_start()
536 snd_nm256_capture_mark(chip, s); in snd_nm256_capture_start()
539 snd_nm256_writeb(chip, NM_RECORD_ENABLE_REG, in snd_nm256_capture_start()
545 snd_nm256_playback_stop(struct nm256 *chip) in snd_nm256_playback_stop() argument
548 snd_nm256_writew(chip, NM_AUDIO_MUTE_REG, in snd_nm256_playback_stop()
551 snd_nm256_writeb(chip, NM_PLAYBACK_ENABLE_REG, 0); in snd_nm256_playback_stop()
555 snd_nm256_capture_stop(struct nm256 *chip) in snd_nm256_capture_stop() argument
558 snd_nm256_writeb(chip, NM_RECORD_ENABLE_REG, 0); in snd_nm256_capture_stop()
564 struct nm256 *chip = snd_pcm_substream_chip(substream); in snd_nm256_playback_trigger() local
571 spin_lock(&chip->reg_lock); in snd_nm256_playback_trigger()
578 snd_nm256_playback_start(chip, s, substream); in snd_nm256_playback_trigger()
587 snd_nm256_playback_stop(chip); in snd_nm256_playback_trigger()
595 spin_unlock(&chip->reg_lock); in snd_nm256_playback_trigger()
602 struct nm256 *chip = snd_pcm_substream_chip(substream); in snd_nm256_capture_trigger() local
609 spin_lock(&chip->reg_lock); in snd_nm256_capture_trigger()
614 snd_nm256_capture_start(chip, s, substream); in snd_nm256_capture_trigger()
621 snd_nm256_capture_stop(chip); in snd_nm256_capture_trigger()
629 spin_unlock(&chip->reg_lock); in snd_nm256_capture_trigger()
639 struct nm256 *chip = snd_pcm_substream_chip(substream); in snd_nm256_pcm_prepare() local
650 spin_lock_irq(&chip->reg_lock); in snd_nm256_pcm_prepare()
652 snd_nm256_set_format(chip, s, substream); in snd_nm256_pcm_prepare()
653 spin_unlock_irq(&chip->reg_lock); in snd_nm256_pcm_prepare()
665 struct nm256 *chip = snd_pcm_substream_chip(substream); in snd_nm256_playback_pointer() local
671 curp = snd_nm256_readl(chip, NM_PBUFFER_CURRP) - (unsigned long)s->buf; in snd_nm256_playback_pointer()
679 struct nm256 *chip = snd_pcm_substream_chip(substream); in snd_nm256_capture_pointer() local
685 curp = snd_nm256_readl(chip, NM_RBUFFER_CURRP) - (unsigned long)s->buf; in snd_nm256_capture_pointer()
769 snd_nm256_playback_update(struct nm256 *chip) in snd_nm256_playback_update() argument
773 s = &chip->streams[SNDRV_PCM_STREAM_PLAYBACK]; in snd_nm256_playback_update()
775 spin_unlock(&chip->reg_lock); in snd_nm256_playback_update()
777 spin_lock(&chip->reg_lock); in snd_nm256_playback_update()
778 snd_nm256_playback_mark(chip, s); in snd_nm256_playback_update()
784 snd_nm256_capture_update(struct nm256 *chip) in snd_nm256_capture_update() argument
788 s = &chip->streams[SNDRV_PCM_STREAM_CAPTURE]; in snd_nm256_capture_update()
790 spin_unlock(&chip->reg_lock); in snd_nm256_capture_update()
792 spin_lock(&chip->reg_lock); in snd_nm256_capture_update()
793 snd_nm256_capture_mark(chip, s); in snd_nm256_capture_update()
851 static void snd_nm256_setup_stream(struct nm256 *chip, struct nm256_stream *s, in snd_nm256_setup_stream() argument
874 struct nm256 *chip = snd_pcm_substream_chip(substream); in snd_nm256_playback_open() local
876 if (snd_nm256_acquire_irq(chip) < 0) in snd_nm256_playback_open()
878 snd_nm256_setup_stream(chip, &chip->streams[SNDRV_PCM_STREAM_PLAYBACK], in snd_nm256_playback_open()
886 struct nm256 *chip = snd_pcm_substream_chip(substream); in snd_nm256_capture_open() local
888 if (snd_nm256_acquire_irq(chip) < 0) in snd_nm256_capture_open()
890 snd_nm256_setup_stream(chip, &chip->streams[SNDRV_PCM_STREAM_CAPTURE], in snd_nm256_capture_open()
901 struct nm256 *chip = snd_pcm_substream_chip(substream); in snd_nm256_playback_close() local
903 snd_nm256_release_irq(chip); in snd_nm256_playback_close()
911 struct nm256 *chip = snd_pcm_substream_chip(substream); in snd_nm256_capture_close() local
913 snd_nm256_release_irq(chip); in snd_nm256_capture_close()
952 snd_nm256_pcm(struct nm256 *chip, int device) in snd_nm256_pcm() argument
958 struct nm256_stream *s = &chip->streams[i]; in snd_nm256_pcm()
959 s->bufptr = chip->buffer + (s->buf - chip->buffer_start); in snd_nm256_pcm()
960 s->bufptr_addr = chip->buffer_addr + (s->buf - chip->buffer_start); in snd_nm256_pcm()
963 err = snd_pcm_new(chip->card, chip->card->driver, device, in snd_nm256_pcm()
971 pcm->private_data = chip; in snd_nm256_pcm()
973 chip->pcm = pcm; in snd_nm256_pcm()
983 snd_nm256_init_chip(struct nm256 *chip) in snd_nm256_init_chip() argument
986 snd_nm256_writeb(chip, 0x0, 0x11); in snd_nm256_init_chip()
987 snd_nm256_writew(chip, 0x214, 0); in snd_nm256_init_chip()
995 snd_nm256_intr_check(struct nm256 *chip) in snd_nm256_intr_check() argument
997 if (chip->badintrcount++ > 1000) { in snd_nm256_intr_check()
1010 if (chip->streams[SNDRV_PCM_STREAM_PLAYBACK].running) in snd_nm256_intr_check()
1011 snd_nm256_playback_stop(chip); in snd_nm256_intr_check()
1012 if (chip->streams[SNDRV_PCM_STREAM_CAPTURE].running) in snd_nm256_intr_check()
1013 snd_nm256_capture_stop(chip); in snd_nm256_intr_check()
1014 chip->badintrcount = 0; in snd_nm256_intr_check()
1032 struct nm256 *chip = dev_id; in snd_nm256_interrupt() local
1036 status = snd_nm256_readw(chip, NM_INT_REG); in snd_nm256_interrupt()
1040 return snd_nm256_intr_check(chip); in snd_nm256_interrupt()
1042 chip->badintrcount = 0; in snd_nm256_interrupt()
1046 spin_lock(&chip->reg_lock); in snd_nm256_interrupt()
1049 NM_ACK_INT(chip, NM_PLAYBACK_INT); in snd_nm256_interrupt()
1050 snd_nm256_playback_update(chip); in snd_nm256_interrupt()
1055 NM_ACK_INT(chip, NM_RECORD_INT); in snd_nm256_interrupt()
1056 snd_nm256_capture_update(chip); in snd_nm256_interrupt()
1061 NM_ACK_INT(chip, NM_MISC_INT_1); in snd_nm256_interrupt()
1062 dev_dbg(chip->card->dev, "NM256: Got misc interrupt #1\n"); in snd_nm256_interrupt()
1063 snd_nm256_writew(chip, NM_INT_REG, 0x8000); in snd_nm256_interrupt()
1064 cbyte = snd_nm256_readb(chip, 0x400); in snd_nm256_interrupt()
1065 snd_nm256_writeb(chip, 0x400, cbyte | 2); in snd_nm256_interrupt()
1070 NM_ACK_INT(chip, NM_MISC_INT_2); in snd_nm256_interrupt()
1071 dev_dbg(chip->card->dev, "NM256: Got misc interrupt #2\n"); in snd_nm256_interrupt()
1072 cbyte = snd_nm256_readb(chip, 0x400); in snd_nm256_interrupt()
1073 snd_nm256_writeb(chip, 0x400, cbyte & ~2); in snd_nm256_interrupt()
1078 dev_dbg(chip->card->dev, in snd_nm256_interrupt()
1082 NM_ACK_INT(chip, status); in snd_nm256_interrupt()
1085 spin_unlock(&chip->reg_lock); in snd_nm256_interrupt()
1098 struct nm256 *chip = dev_id; in snd_nm256_interrupt_zx() local
1102 status = snd_nm256_readl(chip, NM_INT_REG); in snd_nm256_interrupt_zx()
1106 return snd_nm256_intr_check(chip); in snd_nm256_interrupt_zx()
1108 chip->badintrcount = 0; in snd_nm256_interrupt_zx()
1112 spin_lock(&chip->reg_lock); in snd_nm256_interrupt_zx()
1115 NM2_ACK_INT(chip, NM2_PLAYBACK_INT); in snd_nm256_interrupt_zx()
1116 snd_nm256_playback_update(chip); in snd_nm256_interrupt_zx()
1121 NM2_ACK_INT(chip, NM2_RECORD_INT); in snd_nm256_interrupt_zx()
1122 snd_nm256_capture_update(chip); in snd_nm256_interrupt_zx()
1127 NM2_ACK_INT(chip, NM2_MISC_INT_1); in snd_nm256_interrupt_zx()
1128 dev_dbg(chip->card->dev, "NM256: Got misc interrupt #1\n"); in snd_nm256_interrupt_zx()
1129 cbyte = snd_nm256_readb(chip, 0x400); in snd_nm256_interrupt_zx()
1130 snd_nm256_writeb(chip, 0x400, cbyte | 2); in snd_nm256_interrupt_zx()
1135 NM2_ACK_INT(chip, NM2_MISC_INT_2); in snd_nm256_interrupt_zx()
1136 dev_dbg(chip->card->dev, "NM256: Got misc interrupt #2\n"); in snd_nm256_interrupt_zx()
1137 cbyte = snd_nm256_readb(chip, 0x400); in snd_nm256_interrupt_zx()
1138 snd_nm256_writeb(chip, 0x400, cbyte & ~2); in snd_nm256_interrupt_zx()
1143 dev_dbg(chip->card->dev, in snd_nm256_interrupt_zx()
1147 NM2_ACK_INT(chip, status); in snd_nm256_interrupt_zx()
1150 spin_unlock(&chip->reg_lock); in snd_nm256_interrupt_zx()
1163 snd_nm256_ac97_ready(struct nm256 *chip) in snd_nm256_ac97_ready() argument
1169 testaddr = chip->mixer_status_offset; in snd_nm256_ac97_ready()
1170 testb = chip->mixer_status_mask; in snd_nm256_ac97_ready()
1176 if ((snd_nm256_readw(chip, testaddr) & testb) == 0) in snd_nm256_ac97_ready()
1234 struct nm256 *chip = ac97->private_data; in snd_nm256_ac97_read() local
1239 return chip->ac97_regs[idx]; in snd_nm256_ac97_read()
1248 struct nm256 *chip = ac97->private_data; in snd_nm256_ac97_write() local
1256 base = chip->mixer_base; in snd_nm256_ac97_write()
1258 snd_nm256_ac97_ready(chip); in snd_nm256_ac97_write()
1262 snd_nm256_writew(chip, base + reg, val); in snd_nm256_ac97_write()
1264 if (snd_nm256_ac97_ready(chip)) { in snd_nm256_ac97_write()
1266 chip->ac97_regs[idx] = val; in snd_nm256_ac97_write()
1270 dev_dbg(chip->card->dev, "nm256: ac97 codec not ready..\n"); in snd_nm256_ac97_write()
1294 struct nm256 *chip = ac97->private_data; in snd_nm256_ac97_reset() local
1297 snd_nm256_writeb(chip, 0x6c0, 1); in snd_nm256_ac97_reset()
1298 if (! chip->reset_workaround) { in snd_nm256_ac97_reset()
1300 snd_nm256_writeb(chip, 0x6cc, 0x87); in snd_nm256_ac97_reset()
1302 if (! chip->reset_workaround_2) { in snd_nm256_ac97_reset()
1304 snd_nm256_writeb(chip, 0x6cc, 0x80); in snd_nm256_ac97_reset()
1305 snd_nm256_writeb(chip, 0x6cc, 0x0); in snd_nm256_ac97_reset()
1307 if (! chip->in_resume) { in snd_nm256_ac97_reset()
1321 snd_nm256_mixer(struct nm256 *chip) in snd_nm256_mixer() argument
1332 chip->ac97_regs = kcalloc(ARRAY_SIZE(nm256_ac97_init_val), in snd_nm256_mixer()
1334 if (! chip->ac97_regs) in snd_nm256_mixer()
1337 if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus)) < 0) in snd_nm256_mixer()
1342 ac97.private_data = chip; in snd_nm256_mixer()
1345 err = snd_ac97_mixer(pbus, &ac97, &chip->ac97); in snd_nm256_mixer()
1348 if (! (chip->ac97->id & (0xf0000000))) { in snd_nm256_mixer()
1350 sprintf(chip->card->mixername, "%s AC97", chip->card->driver); in snd_nm256_mixer()
1362 snd_nm256_peek_for_sig(struct nm256 *chip) in snd_nm256_peek_for_sig() argument
1367 unsigned long pointer_found = chip->buffer_end - 0x1400; in snd_nm256_peek_for_sig()
1370 temp = ioremap_nocache(chip->buffer_addr + chip->buffer_end - 0x400, 16); in snd_nm256_peek_for_sig()
1372 dev_err(chip->card->dev, in snd_nm256_peek_for_sig()
1385 pointer < chip->buffer_size || in snd_nm256_peek_for_sig()
1386 pointer > chip->buffer_end) { in snd_nm256_peek_for_sig()
1387 dev_err(chip->card->dev, in snd_nm256_peek_for_sig()
1393 dev_info(chip->card->dev, in snd_nm256_peek_for_sig()
1400 chip->buffer_end = pointer_found; in snd_nm256_peek_for_sig()
1413 struct nm256 *chip = card->private_data; in nm256_suspend() local
1416 snd_pcm_suspend_all(chip->pcm); in nm256_suspend()
1417 snd_ac97_suspend(chip->ac97); in nm256_suspend()
1418 chip->coeffs_current = 0; in nm256_suspend()
1425 struct nm256 *chip = card->private_data; in nm256_resume() local
1429 chip->in_resume = 1; in nm256_resume()
1431 snd_nm256_init_chip(chip); in nm256_resume()
1434 snd_ac97_resume(chip->ac97); in nm256_resume()
1437 struct nm256_stream *s = &chip->streams[i]; in nm256_resume()
1439 spin_lock_irq(&chip->reg_lock); in nm256_resume()
1440 snd_nm256_set_format(chip, s, s->substream); in nm256_resume()
1441 spin_unlock_irq(&chip->reg_lock); in nm256_resume()
1446 chip->in_resume = 0; in nm256_resume()
1456 static int snd_nm256_free(struct nm256 *chip) in snd_nm256_free() argument
1458 if (chip->streams[SNDRV_PCM_STREAM_PLAYBACK].running) in snd_nm256_free()
1459 snd_nm256_playback_stop(chip); in snd_nm256_free()
1460 if (chip->streams[SNDRV_PCM_STREAM_CAPTURE].running) in snd_nm256_free()
1461 snd_nm256_capture_stop(chip); in snd_nm256_free()
1463 if (chip->irq >= 0) in snd_nm256_free()
1464 free_irq(chip->irq, chip); in snd_nm256_free()
1466 iounmap(chip->cport); in snd_nm256_free()
1467 iounmap(chip->buffer); in snd_nm256_free()
1468 release_and_free_resource(chip->res_cport); in snd_nm256_free()
1469 release_and_free_resource(chip->res_buffer); in snd_nm256_free()
1471 pci_disable_device(chip->pci); in snd_nm256_free()
1472 kfree(chip->ac97_regs); in snd_nm256_free()
1473 kfree(chip); in snd_nm256_free()
1479 struct nm256 *chip = device->device_data; in snd_nm256_dev_free() local
1480 return snd_nm256_free(chip); in snd_nm256_dev_free()
1487 struct nm256 *chip; in snd_nm256_create() local
1499 chip = kzalloc(sizeof(*chip), GFP_KERNEL); in snd_nm256_create()
1500 if (chip == NULL) { in snd_nm256_create()
1505 chip->card = card; in snd_nm256_create()
1506 chip->pci = pci; in snd_nm256_create()
1507 chip->use_cache = use_cache; in snd_nm256_create()
1508 spin_lock_init(&chip->reg_lock); in snd_nm256_create()
1509 chip->irq = -1; in snd_nm256_create()
1510 mutex_init(&chip->irq_mutex); in snd_nm256_create()
1513 chip->streams[SNDRV_PCM_STREAM_PLAYBACK].bufsize = playback_bufsize * 1024; in snd_nm256_create()
1514 chip->streams[SNDRV_PCM_STREAM_CAPTURE].bufsize = capture_bufsize * 1024; in snd_nm256_create()
1523 chip->buffer_addr = pci_resource_start(pci, 0); in snd_nm256_create()
1524 chip->cport_addr = pci_resource_start(pci, 1); in snd_nm256_create()
1528 chip->res_cport = request_mem_region(chip->cport_addr, NM_PORT2_SIZE, in snd_nm256_create()
1530 if (chip->res_cport == NULL) { in snd_nm256_create()
1532 chip->cport_addr, NM_PORT2_SIZE); in snd_nm256_create()
1536 chip->cport = ioremap_nocache(chip->cport_addr, NM_PORT2_SIZE); in snd_nm256_create()
1537 if (chip->cport == NULL) { in snd_nm256_create()
1539 chip->cport_addr); in snd_nm256_create()
1546 pval = snd_nm256_readw(chip, NM_MIXER_PRESENCE); in snd_nm256_create()
1561 chip->buffer_end = 2560 * 1024; in snd_nm256_create()
1562 chip->interrupt = snd_nm256_interrupt; in snd_nm256_create()
1563 chip->mixer_status_offset = NM_MIXER_STATUS_OFFSET; in snd_nm256_create()
1564 chip->mixer_status_mask = NM_MIXER_READY_MASK; in snd_nm256_create()
1567 if (snd_nm256_readb(chip, 0xa0b) != 0) in snd_nm256_create()
1568 chip->buffer_end = 6144 * 1024; in snd_nm256_create()
1570 chip->buffer_end = 4096 * 1024; in snd_nm256_create()
1572 chip->interrupt = snd_nm256_interrupt_zx; in snd_nm256_create()
1573 chip->mixer_status_offset = NM2_MIXER_STATUS_OFFSET; in snd_nm256_create()
1574 chip->mixer_status_mask = NM2_MIXER_READY_MASK; in snd_nm256_create()
1577 chip->buffer_size = chip->streams[SNDRV_PCM_STREAM_PLAYBACK].bufsize + in snd_nm256_create()
1578 chip->streams[SNDRV_PCM_STREAM_CAPTURE].bufsize; in snd_nm256_create()
1579 if (chip->use_cache) in snd_nm256_create()
1580 chip->buffer_size += NM_TOTAL_COEFF_COUNT * 4; in snd_nm256_create()
1582 chip->buffer_size += NM_MAX_PLAYBACK_COEF_SIZE + NM_MAX_RECORD_COEF_SIZE; in snd_nm256_create()
1584 if (buffer_top >= chip->buffer_size && buffer_top < chip->buffer_end) in snd_nm256_create()
1585 chip->buffer_end = buffer_top; in snd_nm256_create()
1588 if ((err = snd_nm256_peek_for_sig(chip)) < 0) in snd_nm256_create()
1592 chip->buffer_start = chip->buffer_end - chip->buffer_size; in snd_nm256_create()
1593 chip->buffer_addr += chip->buffer_start; in snd_nm256_create()
1596 chip->buffer_start, chip->buffer_end); in snd_nm256_create()
1598 chip->res_buffer = request_mem_region(chip->buffer_addr, in snd_nm256_create()
1599 chip->buffer_size, in snd_nm256_create()
1601 if (chip->res_buffer == NULL) { in snd_nm256_create()
1603 chip->buffer_addr, chip->buffer_size); in snd_nm256_create()
1607 chip->buffer = ioremap_nocache(chip->buffer_addr, chip->buffer_size); in snd_nm256_create()
1608 if (chip->buffer == NULL) { in snd_nm256_create()
1611 chip->buffer_addr); in snd_nm256_create()
1616 addr = chip->buffer_start; in snd_nm256_create()
1617 chip->streams[SNDRV_PCM_STREAM_PLAYBACK].buf = addr; in snd_nm256_create()
1618 addr += chip->streams[SNDRV_PCM_STREAM_PLAYBACK].bufsize; in snd_nm256_create()
1619 chip->streams[SNDRV_PCM_STREAM_CAPTURE].buf = addr; in snd_nm256_create()
1620 addr += chip->streams[SNDRV_PCM_STREAM_CAPTURE].bufsize; in snd_nm256_create()
1621 if (chip->use_cache) { in snd_nm256_create()
1622 chip->all_coeff_buf = addr; in snd_nm256_create()
1624 chip->coeff_buf[SNDRV_PCM_STREAM_PLAYBACK] = addr; in snd_nm256_create()
1626 chip->coeff_buf[SNDRV_PCM_STREAM_CAPTURE] = addr; in snd_nm256_create()
1630 chip->mixer_base = NM_MIXER_OFFSET; in snd_nm256_create()
1632 chip->coeffs_current = 0; in snd_nm256_create()
1634 snd_nm256_init_chip(chip); in snd_nm256_create()
1638 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) in snd_nm256_create()
1641 *chip_ret = chip; in snd_nm256_create()
1645 snd_nm256_free(chip); in snd_nm256_create()
1667 struct nm256 *chip; in snd_nm256_probe() local
1720 if ((err = snd_nm256_create(card, pci, &chip)) < 0) { in snd_nm256_probe()
1724 card->private_data = chip; in snd_nm256_probe()
1728 chip->reset_workaround = 1; in snd_nm256_probe()
1733 chip->reset_workaround_2 = 1; in snd_nm256_probe()
1736 if ((err = snd_nm256_pcm(chip, 0)) < 0 || in snd_nm256_probe()
1737 (err = snd_nm256_mixer(chip)) < 0) { in snd_nm256_probe()
1745 chip->buffer_addr, chip->cport_addr, chip->irq); in snd_nm256_probe()