Lines Matching refs:dev

115 	struct audioens_dev	*dev;
170 #define GET8(dev, offset) \
171 ddi_get8(dev->acch, (uint8_t *)(dev->regs + (offset)))
172 #define GET16(dev, offset) \
173 ddi_get16(dev->acch, (uint16_t *)(void *)(dev->regs + (offset)))
174 #define GET32(dev, offset) \
175 ddi_get32(dev->acch, (uint32_t *)(void *)(dev->regs + (offset)))
176 #define PUT8(dev, offset, v) \
177 ddi_put8(dev->acch, (uint8_t *)(dev->regs + (offset)), v)
178 #define PUT16(dev, offset, v) \
179 ddi_put16(dev->acch, (uint16_t *)(void *)(dev->regs + (offset)), v)
180 #define PUT32(dev, offset, v) \
181 ddi_put32(dev->acch, (uint32_t *)(void *)(dev->regs + (offset)), v)
183 #define CLR8(dev, offset, v) PUT8(dev, offset, GET8(dev, offset) & ~(v))
184 #define SET8(dev, offset, v) PUT8(dev, offset, GET8(dev, offset) | (v))
185 #define CLR32(dev, offset, v) PUT32(dev, offset, GET32(dev, offset) & ~(v))
186 #define SET32(dev, offset, v) PUT32(dev, offset, GET32(dev, offset) | (v))
193 audioens_dev_t *dev = dev_;
196 mutex_enter(&dev->mutex);
197 dtemp = GET32(dev, CONC_dCODECCTL_OFF);
200 dtemp = GET32(dev, CONC_dCODECCTL_OFF);
206 PUT32(dev, CONC_dCODECCTL_OFF, ((int)wAddr << 16) | (1UL << 23));
210 dtemp = GET32(dev, CONC_dCODECCTL_OFF);
214 dtemp = GET32(dev, CONC_dCODECCTL_OFF);
215 mutex_exit(&dev->mutex);
223 audioens_dev_t *dev = dev_;
226 mutex_enter(&dev->mutex);
229 dtemp = GET32(dev, CONC_dCODECCTL_OFF);
234 PUT32(dev, CONC_dCODECCTL_OFF, ((int)wAddr << 16) | wData);
236 mutex_exit(&dev->mutex);
240 SRCRegRead(audioens_dev_t *dev, unsigned short reg)
244 dtemp = GET32(dev, CONC_dSRCIO_OFF);
247 dtemp = GET32(dev, CONC_dSRCIO_OFF);
253 PUT32(dev, CONC_dSRCIO_OFF, (dtemp & SRC_CTLMASK) | ((int)reg << 25));
257 dtemp = GET32(dev, CONC_dSRCIO_OFF);
266 SRCRegWrite(audioens_dev_t *dev, unsigned short reg, unsigned short val)
271 dtemp = GET32(dev, CONC_dSRCIO_OFF);
274 dtemp = GET32(dev, CONC_dSRCIO_OFF);
282 PUT32(dev, CONC_dSRCIO_OFF, writeval);
286 SRCSetRate(audioens_dev_t *dev, unsigned char base, unsigned short rate)
296 if (!(GET32(dev, CONC_dSRCIO_OFF) & SRC_BUSY))
299 PUT32(dev, CONC_dSRCIO_OFF,
300 (GET32(dev, CONC_dSRCIO_OFF) & SRC_CTLMASK) | dtemp);
304 SRCRegWrite(dev, (unsigned short) base + SRC_INT_REGS_OFF,
305 (SRCRegRead(dev, (unsigned short) base + SRC_INT_REGS_OFF)
307 SRCRegWrite(dev, (unsigned short) base + SRC_VFREQ_FRAC_OFF,
312 if (!(GET32(dev, CONC_dSRCIO_OFF) & SRC_BUSY))
314 PUT32(dev, CONC_dSRCIO_OFF,
315 (GET32(dev, CONC_dSRCIO_OFF) & SRC_CTLMASK) & ~dtemp);
329 SRCRegWrite(dev, base + SRC_TRUNC_N_OFF,
336 SRCRegWrite(dev, base + SRC_TRUNC_N_OFF,
342 SRCRegWrite(dev, base + SRC_INT_REGS_OFF,
343 (SRCRegRead(dev, (unsigned short) base + SRC_INT_REGS_OFF)
345 SRCRegWrite(dev, base + SRC_VFREQ_FRAC_OFF,
348 SRCRegWrite(dev, SRC_ADC_VOL_L, N << 8);
349 SRCRegWrite(dev, SRC_ADC_VOL_R, N << 8);
354 SRCInit(audioens_dev_t *dev)
360 if (!(GET32(dev, CONC_dSRCIO_OFF) & SRC_BUSY))
363 PUT32(dev, CONC_dSRCIO_OFF, SRC_DISABLE);
366 SRCRegWrite(dev, (unsigned short) i, 0U);
368 SRCRegWrite(dev, SRC_DAC1_BASE + SRC_TRUNC_N_OFF, 16 << 4);
369 SRCRegWrite(dev, SRC_DAC1_BASE + SRC_INT_REGS_OFF, 16 << 10);
370 SRCRegWrite(dev, SRC_DAC2_BASE + SRC_TRUNC_N_OFF, 16 << 4);
371 SRCRegWrite(dev, SRC_DAC2_BASE + SRC_INT_REGS_OFF, 16 << 10);
372 SRCRegWrite(dev, SRC_DAC1_VOL_L, 1 << 12);
373 SRCRegWrite(dev, SRC_DAC1_VOL_R, 1 << 12);
374 SRCRegWrite(dev, SRC_DAC2_VOL_L, 1 << 12);
375 SRCRegWrite(dev, SRC_DAC2_VOL_R, 1 << 12);
376 SRCRegWrite(dev, SRC_ADC_VOL_L, 1 << 12);
377 SRCRegWrite(dev, SRC_ADC_VOL_R, 1 << 12);
380 SRCSetRate(dev, SRC_DAC1_BASE, 48000);
381 SRCSetRate(dev, SRC_DAC2_BASE, 48000);
382 SRCSetRate(dev, SRC_ADC_BASE, 48000);
386 if (!(GET32(dev, CONC_dSRCIO_OFF) & SRC_BUSY))
389 PUT32(dev, CONC_dSRCIO_OFF, 0);
393 audioens_writemem(audioens_dev_t *dev, uint32_t page, uint32_t offs,
397 PUT32(dev, CONC_bMEMPAGE_OFF, page);
398 PUT32(dev, offs, data);
402 audioens_readmem(audioens_dev_t *dev, uint32_t page, uint32_t offs)
404 PUT32(dev, CONC_bMEMPAGE_OFF, page); /* Select memory page */
405 return (GET32(dev, offs));
412 audioens_dev_t *dev = (void *)arg1;
420 mutex_enter(&dev->mutex);
421 if (dev->suspended || !dev->useintr) {
422 mutex_exit(&dev->mutex);
426 status = GET32(dev, CONC_dSTATUS_OFF);
428 mutex_exit(&dev->mutex);
435 port = &dev->port[PORT_DAC];
438 frameno = audioens_readmem(dev,
445 CLR8(dev, CONC_bSERCTL_OFF, CONC_SERCTL_DAC1IE);
446 SET8(dev, CONC_bSERCTL_OFF, CONC_SERCTL_DAC1IE);
449 port = &dev->port[PORT_ADC];
452 frameno = audioens_readmem(dev,
459 CLR8(dev, CONC_bSERCTL_OFF, CONC_SERCTL_ADCIE);
460 SET8(dev, CONC_bSERCTL_OFF, CONC_SERCTL_ADCIE);
463 CLR8(dev, CONC_bSERCTL_OFF, CONC_SERCTL_DAC2IE);
464 SET8(dev, CONC_bSERCTL_OFF, CONC_SERCTL_DAC2IE);
471 while (GET8(dev, CONC_bUARTCSTAT_OFF) & CONC_UART_RXRDY)
474 mutex_exit(&dev->mutex);
480 audioens_setup_intr(audioens_dev_t *dev)
485 if ((ddi_intr_alloc(dev->dip, &dev->intrh, DDI_INTR_TYPE_FIXED, 0, 1,
487 audio_dev_warn(dev->osdev, "can't alloc intr handle");
491 if (ddi_intr_get_pri(dev->intrh, &ipri) != DDI_SUCCESS) {
492 audio_dev_warn(dev->osdev, "can't get interrupt priority");
495 if (ddi_intr_add_handler(dev->intrh, audioens_intr, dev, NULL) !=
497 audio_dev_warn(dev->osdev, "cannot add interrupt handler");
500 dev->intrpri = ipri;
504 if (dev->intrh != NULL) {
505 (void) ddi_intr_free(dev->intrh);
506 dev->intrh = NULL;
545 audioens_dev_t *dev = port->dev;
549 mutex_enter(&dev->mutex);
555 mutex_exit(&dev->mutex);
564 audioens_dev_t *dev = port->dev;
567 mutex_enter(&dev->mutex);
572 audioens_writemem(dev, CONC_DAC1CTL_PAGE, CONC_dDAC1PADDR_OFF,
574 audioens_writemem(dev, CONC_DAC2CTL_PAGE, CONC_dDAC2PADDR_OFF,
578 SRCSetRate(dev, SRC_DAC1_BASE, port->speed);
579 SRCSetRate(dev, SRC_DAC2_BASE, port->speed);
582 tmp = GET32(dev, CONC_dSTATUS_OFF);
585 PUT32(dev, CONC_dSTATUS_OFF, tmp);
588 PUT8(dev, CONC_bSKIPC_OFF, 0x10);
589 SET8(dev, CONC_bSERFMT_OFF,
594 audioens_writemem(dev, CONC_DAC1CTL_PAGE, CONC_wDAC1FC_OFF,
596 audioens_writemem(dev, CONC_DAC2CTL_PAGE, CONC_wDAC2FC_OFF,
599 PUT16(dev, CONC_wDAC1IC_OFF, port->iframes - 1);
600 PUT16(dev, CONC_wDAC2IC_OFF, port->iframes - 1);
601 SET8(dev, CONC_bDEVCTL_OFF,
604 if (dev->useintr) {
605 SET8(dev, CONC_bSERCTL_OFF, CONC_SERCTL_DAC1IE);
613 audioens_writemem(dev, CONC_ADCCTL_PAGE, CONC_dADCPADDR_OFF,
617 SRCSetRate(dev, SRC_ADC_BASE, port->speed);
620 tmp = GET8(dev, CONC_bSERFMT_OFF);
624 PUT8(dev, CONC_bSKIPC_OFF, 0x10);
626 PUT8(dev, CONC_bSERFMT_OFF, tmp);
629 audioens_writemem(dev, CONC_ADCCTL_PAGE, CONC_wADCFC_OFF,
633 PUT16(dev, CONC_wADCIC_OFF, port->iframes - 1);
635 SET8(dev, CONC_bDEVCTL_OFF, CONC_DEVCTL_ADC_EN);
637 if (dev->useintr) {
638 SET8(dev, CONC_bSERCTL_OFF, CONC_SERCTL_ADCIE);
645 mutex_exit(&dev->mutex);
654 audioens_dev_t *dev = port->dev;
656 mutex_enter(&dev->mutex);
659 CLR8(dev, CONC_bDEVCTL_OFF,
663 CLR8(dev, CONC_bDEVCTL_OFF, CONC_DEVCTL_ADC_EN);
666 mutex_exit(&dev->mutex);
673 audioens_dev_t *dev = port->dev;
690 mutex_enter(&dev->mutex);
692 if (!dev->useintr) {
698 frameno = audioens_readmem(port->dev, page, offs) >> 16;
710 mutex_exit(&dev->mutex);
766 audioens_init_hw(audioens_dev_t *dev)
770 if ((dev->devid == ENSONIQ_ES5880) ||
771 (dev->devid == ENSONIQ_ES5880A) ||
772 (dev->devid == ENSONIQ_ES5880B) ||
773 (dev->devid == 0x1371 && dev->revision == 7) ||
774 (dev->devid == 0x1371 && dev->revision >= 9)) {
777 tmp = GET8(dev, CONC_bINTSUMM_OFF) & 0xff;
779 PUT8(dev, CONC_bINTSUMM_OFF, tmp);
784 SRCInit(dev);
789 tmp = GET32(dev, CONC_bDEVCTL_OFF) & 0xff;
791 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
792 PUT8(dev, CONC_bUARTCSTAT_OFF, 0x00);
795 tmp = GET8(dev, CONC_bMISCCTL_OFF) & 0xff;
796 PUT8(dev, CONC_bMISCCTL_OFF, tmp | CONC_MISCCTL_SYNC_RES);
798 PUT8(dev, CONC_bMISCCTL_OFF, tmp);
801 if (dev->revision >= 4) {
805 PUT32(dev, 0x04, GET32(dev, 0x04) | (1 << 18));
807 PUT32(dev, 0x00, GET32(dev, 0x00) | (1 << 26));
808 CLR32(dev, CONC_dSPDIF_OFF, CONC_SPDIF_AC3);
812 PUT32(dev, 0x04, GET32(dev, 0x04) & ~(1 << 18));
813 PUT32(dev, 0x00, GET32(dev, 0x00) & ~(1 << 26));
817 CLR32(dev, CONC_dSTATUS_OFF, CONC_STATUS_ECHO);
822 audioens_init(audioens_dev_t *dev)
825 audioens_init_hw(dev);
832 (void) ddi_prop_update_int(DDI_DEV_T_NONE, dev->dip, AC97_PROP_SPEAKER,
839 dev->ac97 = ac97_alloc(dev->dip, audioens_rd97, audioens_wr97, dev);
840 if (dev->ac97 == NULL)
843 if (ac97_init(dev->ac97, dev->osdev) != 0) {
856 port = &dev->port[i];
857 port->dev = dev;
893 if (ddi_dma_alloc_handle(dev->dip, &dma_attr, DDI_DMA_SLEEP,
895 audio_dev_warn(dev->osdev,
902 audio_dev_warn(dev->osdev,
911 audio_dev_warn(dev->osdev,
922 audio_dev_warn(dev->osdev,
928 audio_dev_add_engine(dev->osdev, port->engine);
931 if (audio_dev_register(dev->osdev) != DDI_SUCCESS) {
932 audio_dev_warn(dev->osdev,
941 audioens_destroy(audioens_dev_t *dev)
946 if (dev->useintr && dev->intrh != NULL) {
947 (void) ddi_intr_disable(dev->intrh);
948 (void) ddi_intr_remove_handler(dev->intrh);
949 (void) ddi_intr_free(dev->intrh);
950 dev->intrh = NULL;
954 mutex_destroy(&dev->mutex);
958 audioens_port_t *port = &dev->port[i];
968 audio_dev_remove_engine(dev->osdev, port->engine);
973 if (dev->acch != NULL) {
974 ddi_regs_map_free(&dev->acch);
977 if (dev->ac97) {
978 ac97_free(dev->ac97);
981 if (dev->osdev != NULL) {
982 audio_dev_free(dev->osdev);
985 kmem_free(dev, sizeof (*dev));
993 audioens_dev_t *dev;
998 dev = kmem_zalloc(sizeof (*dev), KM_SLEEP);
999 dev->dip = dip;
1000 ddi_set_driver_private(dip, dev);
1001 mutex_init(&dev->mutex, NULL, MUTEX_DRIVER, NULL);
1004 audio_dev_warn(dev->osdev, "pci_config_setup failed");
1016 audio_dev_warn(dev->osdev, "unrecognized device");
1062 dev->revision = revision;
1063 dev->devid = device;
1065 dev->osdev = audio_dev_alloc(dip, 0);
1066 if (dev->osdev == NULL) {
1070 audio_dev_set_description(dev->osdev, chip_name);
1071 audio_dev_set_version(dev->osdev, chip_vers);
1085 if (ddi_regs_map_setup(dip, 1, &dev->regs, 0, 0, &acc_attr,
1086 &dev->acch) != DDI_SUCCESS) {
1087 audio_dev_warn(dev->osdev, "can't map registers");
1097 dev->useintr = B_FALSE;
1099 dev->useintr = B_TRUE;
1100 if (audioens_setup_intr(dev) != DDI_SUCCESS) {
1104 mutex_destroy(&dev->mutex);
1105 mutex_init(&dev->mutex, NULL, MUTEX_DRIVER,
1106 DDI_INTR_PRI(dev->intrpri));
1111 if (audioens_init(dev) != DDI_SUCCESS) {
1112 audio_dev_warn(dev->osdev, "can't init device");
1117 if (dev->useintr) {
1118 (void) ddi_intr_enable(dev->intrh);
1130 audioens_destroy(dev);
1136 audioens_detach(audioens_dev_t *dev)
1141 if (audio_dev_unregister(dev->osdev) != DDI_SUCCESS)
1144 mutex_enter(&dev->mutex);
1146 tmp = GET8(dev, CONC_bSERCTL_OFF) &
1148 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1149 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1150 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1151 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1153 tmp = GET8(dev, CONC_bDEVCTL_OFF) &
1155 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1156 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1157 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1158 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1160 mutex_exit(&dev->mutex);
1162 audioens_destroy(dev);
1168 audioens_resume(audioens_dev_t *dev)
1170 mutex_enter(&dev->mutex);
1171 dev->suspended = B_FALSE;
1172 mutex_exit(&dev->mutex);
1175 audioens_init_hw(dev);
1178 ac97_reset(dev->ac97);
1180 audio_dev_resume(dev->osdev);
1186 audioens_suspend(audioens_dev_t *dev)
1188 audio_dev_suspend(dev->osdev);
1190 mutex_enter(&dev->mutex);
1191 CLR8(dev, CONC_bDEVCTL_OFF,
1193 dev->suspended = B_TRUE;
1194 mutex_exit(&dev->mutex);
1202 audioens_dev_t *dev;
1205 if ((dev = ddi_get_driver_private(dip)) == NULL) {
1210 tmp = GET8(dev, CONC_bSERCTL_OFF) &
1212 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1213 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1214 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1215 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1217 tmp = GET8(dev, CONC_bDEVCTL_OFF) &
1219 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1220 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1221 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1222 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1231 audioens_dev_t *dev;
1238 if ((dev = ddi_get_driver_private(dip)) == NULL) {
1241 return (audioens_resume(dev));
1251 audioens_dev_t *dev;
1253 if ((dev = ddi_get_driver_private(dip)) == NULL) {
1259 return (audioens_detach(dev));
1262 return (audioens_suspend(dev));