Lines Matching refs:fm801

172 fm801_rd(struct fm801_info *fm801, int regno, int size)  in fm801_rd()  argument
176 return (bus_space_read_1(fm801->st, fm801->sh, regno)); in fm801_rd()
178 return (bus_space_read_2(fm801->st, fm801->sh, regno)); in fm801_rd()
180 return (bus_space_read_4(fm801->st, fm801->sh, regno)); in fm801_rd()
187 fm801_wr(struct fm801_info *fm801, int regno, u_int32_t data, int size) in fm801_wr() argument
192 bus_space_write_1(fm801->st, fm801->sh, regno, data); in fm801_wr()
195 bus_space_write_2(fm801->st, fm801->sh, regno, data); in fm801_wr()
198 bus_space_write_4(fm801->st, fm801->sh, regno, data); in fm801_wr()
211 struct fm801_info *fm801 = (struct fm801_info *)devinfo; in fm801_rdcd() local
214 for (i = 0; i < TIMO && fm801_rd(fm801,FM_CODEC_CMD,2) & FM_CODEC_CMD_BUSY; i++) { in fm801_rdcd()
223 fm801_wr(fm801,FM_CODEC_CMD, regno|FM_CODEC_CMD_READ,2); in fm801_rdcd()
225 for (i = 0; i < TIMO && !(fm801_rd(fm801,FM_CODEC_CMD,2) & FM_CODEC_CMD_VALID); i++) in fm801_rdcd()
235 return fm801_rd(fm801,FM_CODEC_DATA,2); in fm801_rdcd()
241 struct fm801_info *fm801 = (struct fm801_info *)devinfo; in fm801_wrcd() local
249 for (i = 0; i < TIMO && fm801_rd(fm801,FM_CODEC_CMD,2) & FM_CODEC_CMD_BUSY; i++) { in fm801_wrcd()
258 fm801_wr(fm801,FM_CODEC_DATA,data, 2); in fm801_wrcd()
259 fm801_wr(fm801,FM_CODEC_CMD, regno,2); in fm801_wrcd()
262 for (i = 0; i < TIMO && fm801_rd(fm801,FM_CODEC_CMD,2) & FM_CODEC_CMD_BUSY; i++) { in fm801_wrcd()
289 struct fm801_info *fm801 = (struct fm801_info *)p; in fm801_intr() local
290 u_int32_t intsrc = fm801_rd(fm801, FM_INTSTATUS, 2); in fm801_intr()
295 fm801->play_flip++; in fm801_intr()
296 if(fm801->play_flip & 1) { in fm801_intr()
297 fm801_wr(fm801, FM_PLAY_DMABUF1, fm801->play_start,4); in fm801_intr()
299 fm801_wr(fm801, FM_PLAY_DMABUF2, fm801->play_nextblk,4); in fm801_intr()
300 chn_intr(fm801->pch.channel); in fm801_intr()
304 fm801->rec_flip++; in fm801_intr()
305 if(fm801->rec_flip & 1) { in fm801_intr()
306 fm801_wr(fm801, FM_REC_DMABUF1, fm801->rec_start,4); in fm801_intr()
308 fm801_wr(fm801, FM_REC_DMABUF2, fm801->rec_nextblk,4); in fm801_intr()
309 chn_intr(fm801->rch.channel); in fm801_intr()
314 fm801_wr(fm801, FM_INTSTATUS, intsrc & FM_INTSTATUS_MPU,2); in fm801_intr()
319 fm801_wr(fm801, FM_INTSTATUS, intsrc & FM_INTSTATUS_VOL,2); in fm801_intr()
323 fm801_wr(fm801, FM_INTSTATUS, intsrc & (FM_INTSTATUS_PLAY | FM_INTSTATUS_REC), 2); in fm801_intr()
331 struct fm801_info *fm801 = (struct fm801_info *)devinfo; in fm801ch_init() local
332 struct fm801_chinfo *ch = (dir == PCMDIR_PLAY)? &fm801->pch : &fm801->rch; in fm801ch_init()
335 ch->parent = fm801; in fm801ch_init()
339 if (sndbuf_alloc(ch->buffer, fm801->parent_dmat, 0, fm801->bufsz) != 0) in fm801ch_init()
348 struct fm801_info *fm801 = ch->parent; in fm801ch_setformat() local
357 fm801->play_fmt = in fm801ch_setformat()
359 fm801->play_fmt |= (format & AFMT_16BIT) ? FM_PLAY_16BIT : 0; in fm801ch_setformat()
364 fm801->rec_fmt = (AFMT_CHANNEL(format) > 1)? FM_REC_STEREO:0; in fm801ch_setformat()
365 fm801->rec_fmt |= (format & AFMT_16BIT) ? FM_PLAY_16BIT : 0; in fm801ch_setformat()
394 struct fm801_info *fm801 = ch->parent; in fm801ch_setspeed() local
400 fm801->pch.spd = fm801_rates[i].rate; in fm801ch_setspeed()
401 fm801->play_shift = (i<<8); in fm801ch_setspeed()
402 fm801->play_shift &= FM_PLAY_RATE_MASK; in fm801ch_setspeed()
406 fm801->rch.spd = fm801_rates[i].rate; in fm801ch_setspeed()
407 fm801->rec_shift = (i<<8); in fm801ch_setspeed()
408 fm801->rec_shift &= FM_REC_RATE_MASK; in fm801ch_setspeed()
420 struct fm801_info *fm801 = ch->parent; in fm801ch_setblocksize() local
428 fm801->play_blksize = blocksize; in fm801ch_setblocksize()
431 fm801->rec_blksize = blocksize; in fm801ch_setblocksize()
442 struct fm801_info *fm801 = ch->parent; in fm801ch_trigger() local
453 fm801->play_start = baseaddr; in fm801ch_trigger()
454 fm801->play_nextblk = fm801->play_start + fm801->play_blksize; in fm801ch_trigger()
455 fm801->play_flip = 0; in fm801ch_trigger()
456 fm801_wr(fm801, FM_PLAY_DMALEN, fm801->play_blksize - 1, 2); in fm801ch_trigger()
457 fm801_wr(fm801, FM_PLAY_DMABUF1,fm801->play_start,4); in fm801ch_trigger()
458 fm801_wr(fm801, FM_PLAY_DMABUF2,fm801->play_nextblk,4); in fm801ch_trigger()
459 fm801_wr(fm801, FM_PLAY_CTL, in fm801ch_trigger()
460 FM_PLAY_START | FM_PLAY_STOPNOW | fm801->play_fmt | fm801->play_shift, in fm801ch_trigger()
463 fm801->play_flip = 0; in fm801ch_trigger()
464 k1 = fm801_rd(fm801, FM_PLAY_CTL,2); in fm801ch_trigger()
465 fm801_wr(fm801, FM_PLAY_CTL, in fm801ch_trigger()
471 fm801->rec_start = baseaddr; in fm801ch_trigger()
472 fm801->rec_nextblk = fm801->rec_start + fm801->rec_blksize; in fm801ch_trigger()
473 fm801->rec_flip = 0; in fm801ch_trigger()
474 fm801_wr(fm801, FM_REC_DMALEN, fm801->rec_blksize - 1, 2); in fm801ch_trigger()
475 fm801_wr(fm801, FM_REC_DMABUF1,fm801->rec_start,4); in fm801ch_trigger()
476 fm801_wr(fm801, FM_REC_DMABUF2,fm801->rec_nextblk,4); in fm801ch_trigger()
477 fm801_wr(fm801, FM_REC_CTL, in fm801ch_trigger()
478 FM_REC_START | FM_REC_STOPNOW | fm801->rec_fmt | fm801->rec_shift, in fm801ch_trigger()
481 fm801->rec_flip = 0; in fm801ch_trigger()
482 k1 = fm801_rd(fm801, FM_REC_CTL,2); in fm801ch_trigger()
483 fm801_wr(fm801, FM_REC_CTL, in fm801ch_trigger()
497 struct fm801_info *fm801 = ch->parent; in fm801ch_getptr() local
501 result = fm801_rd(fm801, in fm801ch_getptr()
502 (fm801->play_flip&1) ? in fm801ch_getptr()
503 FM_PLAY_DMABUF2:FM_PLAY_DMABUF1, 4) - fm801->play_start; in fm801ch_getptr()
507 result = fm801_rd(fm801, in fm801ch_getptr()
508 (fm801->rec_flip&1) ? in fm801ch_getptr()
509 FM_REC_DMABUF2:FM_REC_DMABUF1, 4) - fm801->rec_start; in fm801ch_getptr()
539 fm801_init(struct fm801_info *fm801) in fm801_init() argument
544 fm801_wr(fm801, FM_CODEC_CTL, 0x0020,2); in fm801_init()
546 fm801_wr(fm801, FM_CODEC_CTL, 0x0000,2); in fm801_init()
549 fm801_wr(fm801, FM_PCM_VOLUME, 0x0808,2); in fm801_init()
550 fm801_wr(fm801, FM_FM_VOLUME, 0x0808,2); in fm801_init()
551 fm801_wr(fm801, FM_I2S_VOLUME, 0x0808,2); in fm801_init()
552 fm801_wr(fm801, 0x40,0x107f,2); /* enable legacy audio */ in fm801_init()
554 fm801_wr((void *)fm801, FM_RECORD_SOURCE, 0x0000,2); in fm801_init()
557 k1 = fm801_rd((void *)fm801, FM_INTMASK,2); in fm801_init()
558 fm801_wr(fm801, FM_INTMASK, in fm801_init()
561 fm801_wr(fm801, FM_INTSTATUS, in fm801_init()
573 struct fm801_info *fm801; in fm801_pci_attach() local
578 fm801 = malloc(sizeof(*fm801), M_DEVBUF, M_WAITOK | M_ZERO); in fm801_pci_attach()
579 fm801->type = pci_get_devid(dev); in fm801_pci_attach()
584 fm801->regid = PCIR_BAR(i); in fm801_pci_attach()
585 fm801->regtype = SYS_RES_MEMORY; in fm801_pci_attach()
586 fm801->reg = bus_alloc_resource_any(dev, fm801->regtype, in fm801_pci_attach()
587 &fm801->regid, RF_ACTIVE); in fm801_pci_attach()
588 if(!fm801->reg) in fm801_pci_attach()
590 fm801->regtype = SYS_RES_IOPORT; in fm801_pci_attach()
591 fm801->reg = bus_alloc_resource_any(dev, in fm801_pci_attach()
592 fm801->regtype, in fm801_pci_attach()
593 &fm801->regid, in fm801_pci_attach()
597 if(fm801->reg) { in fm801_pci_attach()
598 fm801->st = rman_get_bustag(fm801->reg); in fm801_pci_attach()
599 fm801->sh = rman_get_bushandle(fm801->reg); in fm801_pci_attach()
609 fm801->bufsz = pcm_getbuffersize(dev, 4096, FM801_DEFAULT_BUFSZ, 65536); in fm801_pci_attach()
611 fm801_init(fm801); in fm801_pci_attach()
613 codec = AC97_CREATE(dev, fm801, fm801_ac97); in fm801_pci_attach()
618 fm801->irqid = 0; in fm801_pci_attach()
619 fm801->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &fm801->irqid, in fm801_pci_attach()
621 if (!fm801->irq || in fm801_pci_attach()
622 snd_setup_intr(dev, fm801->irq, 0, fm801_intr, fm801, &fm801->ih)) { in fm801_pci_attach()
632 /*maxsize*/fm801->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, in fm801_pci_attach()
634 &fm801->parent_dmat) != 0) { in fm801_pci_attach()
640 (fm801->regtype == SYS_RES_IOPORT)? "port" : "mem", in fm801_pci_attach()
641 rman_get_start(fm801->reg), rman_get_start(fm801->irq), in fm801_pci_attach()
645 pcm_init(dev, fm801); in fm801_pci_attach()
646 pcm_addchan(dev, PCMDIR_PLAY, &fm801ch_class, fm801); in fm801_pci_attach()
647 pcm_addchan(dev, PCMDIR_REC, &fm801ch_class, fm801); in fm801_pci_attach()
651 fm801->radio = device_add_child(dev, "radio", DEVICE_UNIT_ANY); in fm801_pci_attach()
658 if (fm801->reg) bus_release_resource(dev, fm801->regtype, fm801->regid, fm801->reg); in fm801_pci_attach()
659 if (fm801->ih) bus_teardown_intr(dev, fm801->irq, fm801->ih); in fm801_pci_attach()
660 if (fm801->irq) bus_release_resource(dev, SYS_RES_IRQ, fm801->irqid, fm801->irq); in fm801_pci_attach()
661 if (fm801->parent_dmat) bus_dma_tag_destroy(fm801->parent_dmat); in fm801_pci_attach()
662 free(fm801, M_DEVBUF); in fm801_pci_attach()
670 struct fm801_info *fm801; in fm801_pci_detach() local
674 fm801 = pcm_getdevinfo(dev); in fm801_pci_detach()
684 bus_release_resource(dev, fm801->regtype, fm801->regid, fm801->reg); in fm801_pci_detach()
685 bus_teardown_intr(dev, fm801->irq, fm801->ih); in fm801_pci_detach()
686 bus_release_resource(dev, SYS_RES_IRQ, fm801->irqid, fm801->irq); in fm801_pci_detach()
687 bus_dma_tag_destroy(fm801->parent_dmat); in fm801_pci_detach()
688 free(fm801, M_DEVBUF); in fm801_pci_detach()
715 struct fm801_info *fm801; in fm801_alloc_resource() local
717 fm801 = pcm_getdevinfo(bus); in fm801_alloc_resource()
720 return (fm801->reg); in fm801_alloc_resource()