Lines Matching refs:dev

94 	struct audiopci_dev	*dev;
115 struct audiopci_dev *dev;
180 #define GET8(dev, offset) \
181 ddi_get8(dev->acch, (uint8_t *)(dev->regs + (offset)))
182 #define GET16(dev, offset) \
183 ddi_get16(dev->acch, (uint16_t *)(void *)(dev->regs + (offset)))
184 #define GET32(dev, offset) \
185 ddi_get32(dev->acch, (uint32_t *)(void *)(dev->regs + (offset)))
186 #define PUT8(dev, offset, v) \
187 ddi_put8(dev->acch, (uint8_t *)(dev->regs + (offset)), v)
188 #define PUT16(dev, offset, v) \
189 ddi_put16(dev->acch, (uint16_t *)(void *)(dev->regs + (offset)), v)
190 #define PUT32(dev, offset, v) \
191 ddi_put32(dev->acch, (uint32_t *)(void *)(dev->regs + (offset)), v)
193 #define CLR8(dev, offset, v) PUT8(dev, offset, GET8(dev, offset) & ~(v))
194 #define SET8(dev, offset, v) PUT8(dev, offset, GET8(dev, offset) | (v))
195 #define CLR16(dev, offset, v) PUT16(dev, offset, GET16(dev, offset) & ~(v))
196 #define SET16(dev, offset, v) PUT16(dev, offset, GET16(dev, offset) | (v))
206 audiopci_ak_wait(audiopci_dev_t *dev, uint8_t wstat)
209 if (!(GET8(dev, CONC_bCODECSTAT_OFF) & wstat))
217 audiopci_ak_idle(audiopci_dev_t *dev)
220 if (audiopci_ak_wait(dev, CONC_CSTAT_CSTAT) == DDI_SUCCESS)
223 audio_dev_warn(dev->adev, "timed out waiting for codec to idle");
227 audiopci_ak_write(audiopci_dev_t *dev, uint16_t addr, uint8_t data)
232 dev->ak_regs[addr] = data;
237 if (audiopci_ak_wait(dev, wstat) != DDI_SUCCESS) {
238 audio_dev_warn(dev->adev, "timeout waiting for codec");
241 PUT16(dev, CONC_wCODECCTL_OFF, (addr << 8) | data);
245 audiopci_writemem(audiopci_dev_t *dev, uint32_t page, uint32_t offs,
249 PUT32(dev, CONC_bMEMPAGE_OFF, page);
250 PUT32(dev, offs, data);
254 audiopci_readmem(audiopci_dev_t *dev, uint32_t page, uint32_t offs)
256 PUT32(dev, CONC_bMEMPAGE_OFF, page); /* Select memory page */
257 return (GET32(dev, offs));
289 audiopci_dev_t *dev = port->dev;
296 audiopci_writemem(dev, CONC_DACCTL_PAGE, CONC_dDACPADDR_OFF,
300 PUT16(dev, CONC_wDACRATE_OFF, audiopci_dac_rate(48000));
303 tmp = GET8(dev, CONC_bSERFMT_OFF);
307 PUT8(dev, CONC_bSKIPC_OFF, 0x10);
308 PUT8(dev, CONC_bSERFMT_OFF, tmp);
311 audiopci_writemem(dev, CONC_DACCTL_PAGE, CONC_wDACFC_OFF,
315 PUT16(dev, CONC_wDACIC_OFF, port->nframes - 1);
322 audiopci_writemem(dev, CONC_SYNCTL_PAGE, CONC_dSYNPADDR_OFF,
326 SET8(dev, CONC_bMISCCTL_OFF, CONC_MISCCTL_SYN_44KHZ);
329 tmp = GET8(dev, CONC_bSERFMT_OFF);
333 PUT8(dev, CONC_bSERFMT_OFF, tmp);
336 audiopci_writemem(dev, CONC_SYNCTL_PAGE, CONC_wSYNFC_OFF,
340 PUT16(dev, CONC_wSYNIC_OFF, port->nframes - 1);
346 audiopci_writemem(dev, CONC_ADCCTL_PAGE, CONC_dADCPADDR_OFF,
350 PUT16(dev, CONC_wDACRATE_OFF, audiopci_dac_rate(48000));
353 tmp = GET8(dev, CONC_bSERFMT_OFF);
357 PUT8(dev, CONC_bSKIPC_OFF, 0x10);
359 PUT8(dev, CONC_bSERFMT_OFF, tmp);
362 audiopci_writemem(dev, CONC_ADCCTL_PAGE, CONC_wADCFC_OFF,
366 PUT16(dev, CONC_wADCIC_OFF, port->nframes - 1);
395 audiopci_dev_t *dev = port->dev;
397 mutex_enter(&dev->mutex);
403 SET8(dev, CONC_bDEVCTL_OFF, CONC_DEVCTL_DAC_EN);
406 SET8(dev, CONC_bDEVCTL_OFF, CONC_DEVCTL_SYN_EN);
409 SET8(dev, CONC_bDEVCTL_OFF, CONC_DEVCTL_ADC_EN);
412 mutex_exit(&dev->mutex);
421 audiopci_dev_t *dev = port->dev;
423 mutex_enter(&dev->mutex);
426 CLR8(dev, CONC_bDEVCTL_OFF, CONC_DEVCTL_DAC_EN);
429 CLR8(dev, CONC_bDEVCTL_OFF, CONC_DEVCTL_SYN_EN);
432 CLR8(dev, CONC_bDEVCTL_OFF, CONC_DEVCTL_ADC_EN);
435 mutex_exit(&dev->mutex);
442 audiopci_dev_t *dev = port->dev;
467 mutex_enter(&dev->mutex);
468 frameno = audiopci_readmem(port->dev, page, offs) >> 16;
469 mutex_exit(&dev->mutex);
537 audiopci_init_hw(audiopci_dev_t *dev)
542 PUT16(dev, CONC_wDACRATE_OFF, audiopci_dac_rate(48000));
544 CLR8(dev, CONC_bMISCCTL_OFF, CONC_MISCCTL_CCB_INTRM);
545 SET8(dev, CONC_bMISCCTL_OFF, CONC_MISCCTL_SYN_44KHZ);
548 tmp = GET8(dev, CONC_bDEVCTL_OFF);
551 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
554 PUT8(dev, CONC_bUARTCSTAT_OFF, 0x00);
557 PUT8(dev, CONC_bNMIENA_OFF, 0);
558 PUT16(dev, CONC_wNMISTAT_OFF, 0);
561 PUT8(dev, CONC_bSERCTL_OFF, 0);
562 PUT8(dev, CONC_bSERFMT_OFF,
566 CLR8(dev, CONC_bMISCCTL_OFF, CONC_MISCCTL_MUTE);
569 audiopci_ak_idle(dev);
572 audiopci_ak_write(dev, CODEC_RESET_PWRD, 0);
576 audiopci_ak_write(dev, CODEC_RESET_PWRD, 0x3);
577 audiopci_ak_idle(dev);
580 audiopci_ak_write(dev, CODEC_CLKSELECT, 0);
583 audiopci_ak_write(dev, CODEC_ADSELECT, 0);
586 audiopci_ak_write(dev, CODEC_OUT_SW1, CODEC_OUT_ENABLE_SYNTH);
587 audiopci_ak_write(dev, CODEC_OUT_SW2, CODEC_OUT_ENABLE_WAVE);
590 audiopci_ak_write(dev, CODEC_VOL_WAVE_L, 6);
591 audiopci_ak_write(dev, CODEC_VOL_WAVE_R, 6);
592 audiopci_ak_write(dev, CODEC_VOL_SYNTH_L, 6);
593 audiopci_ak_write(dev, CODEC_VOL_SYNTH_R, 6);
596 if (dev->micbias) {
597 SET16(dev, 2, CONC_DEVCTL_MICBIAS);
602 audiopci_init(audiopci_dev_t *dev)
604 dev->micbias = 1;
606 audiopci_init_hw(dev);
616 port = &dev->port[i];
617 port->dev = dev;
645 if (ddi_dma_alloc_handle(dev->dip, &dma_attr, DDI_DMA_SLEEP,
647 audio_dev_warn(dev->adev,
654 audio_dev_warn(dev->adev,
663 audio_dev_warn(dev->adev,
674 audio_dev_warn(dev->adev,
680 audio_dev_add_engine(dev->adev, port->engine);
686 if (audiopci_add_controls(dev) == DDI_FAILURE) {
691 if (audio_dev_register(dev->adev) != DDI_SUCCESS) {
692 audio_dev_warn(dev->adev,
701 audiopci_destroy(audiopci_dev_t *dev)
705 mutex_destroy(&dev->mutex);
709 audiopci_port_t *port = &dev->port[i];
719 audio_dev_remove_engine(dev->adev, port->engine);
724 if (dev->acch != NULL) {
725 ddi_regs_map_free(&dev->acch);
728 audiopci_del_controls(dev);
730 if (dev->adev != NULL) {
731 audio_dev_free(dev->adev);
734 kmem_free(dev, sizeof (*dev));
738 audiopci_stereo(audiopci_dev_t *dev, audiopci_ctrl_num_t num, uint8_t lreg)
746 val = dev->controls[num].val;
757 audiopci_ak_write(dev, lreg, lval);
758 audiopci_ak_write(dev, rreg, rval);
762 audiopci_mono(audiopci_dev_t *dev, audiopci_ctrl_num_t num, uint8_t reg)
764 uint64_t val = (dev->controls[num].val & 0xff);
770 audiopci_ak_write(dev, reg, val);
774 audiopci_mono8(audiopci_dev_t *dev, audiopci_ctrl_num_t num, uint8_t reg)
776 uint64_t val = (dev->controls[num].val & 0xff);
782 audiopci_ak_write(dev, reg, val);
796 audiopci_configure_output(audiopci_dev_t *dev)
802 audiopci_mono(dev, CTL_VOLUME, CODEC_VOL_WAVE_L);
803 audiopci_mono(dev, CTL_VOLUME, CODEC_VOL_WAVE_R);
804 audiopci_mono(dev, CTL_VOLUME, CODEC_VOL_SYNTH_L);
805 audiopci_mono(dev, CTL_VOLUME, CODEC_VOL_SYNTH_R);
808 audiopci_stereo(dev, CTL_FRONT, CODEC_VOL_MASTER_L);
809 audiopci_mono8(dev, CTL_MONO, CODEC_VOL_MONO);
811 val = dev->controls[CTL_MONSRC].val;
821 audiopci_ak_write(dev, CODEC_OUT_SW1, tmp);
828 audiopci_ak_write(dev, CODEC_OUT_SW2, tmp);
832 audiopci_configure_input(audiopci_dev_t *dev)
834 uint64_t val = dev->controls[CTL_RECSRC].val;
846 audiopci_ak_write(dev, CODEC_LIN_SW1, tmp);
857 audiopci_ak_write(dev, CODEC_RIN_SW1, tmp);
864 audiopci_ak_write(dev, CODEC_LIN_SW2, tmp);
871 audiopci_ak_write(dev, CODEC_RIN_SW2, tmp);
874 audiopci_mono(dev, CTL_MIC, CODEC_VOL_MIC);
875 audiopci_mono(dev, CTL_PHONE, CODEC_VOL_TAD);
876 audiopci_stereo(dev, CTL_LINE, CODEC_VOL_AUX_L);
877 audiopci_stereo(dev, CTL_CD, CODEC_VOL_CD_L);
878 audiopci_stereo(dev, CTL_VID, CODEC_VOL_TV_L);
881 audiopci_ak_write(dev, CODEC_MICBOOST,
882 dev->controls[CTL_MICBOOST].val ? 1 : 0);
889 audiopci_dev_t *dev = pc->dev;
899 mutex_enter(&dev->mutex);
901 audiopci_configure_input(dev);
903 mutex_exit(&dev->mutex);
911 audiopci_dev_t *dev = pc->dev;
913 mutex_enter(&dev->mutex);
915 audiopci_configure_input(dev);
916 mutex_exit(&dev->mutex);
924 audiopci_dev_t *dev = pc->dev;
929 mutex_enter(&dev->mutex);
931 audiopci_configure_output(dev);
932 mutex_exit(&dev->mutex);
940 audiopci_dev_t *dev = pc->dev;
945 mutex_enter(&dev->mutex);
947 audiopci_configure_input(dev);
948 mutex_exit(&dev->mutex);
956 audiopci_dev_t *dev = pc->dev;
964 mutex_enter(&dev->mutex);
966 audiopci_configure_output(dev);
967 mutex_exit(&dev->mutex);
976 audiopci_dev_t *dev = pc->dev;
986 mutex_enter(&dev->mutex);
988 audiopci_configure_output(dev);
990 mutex_exit(&dev->mutex);
998 audiopci_dev_t *dev = pc->dev;
1005 mutex_enter(&dev->mutex);
1007 audiopci_configure_output(dev);
1009 mutex_exit(&dev->mutex);
1021 audiopci_alloc_ctrl(audiopci_dev_t *dev, uint32_t num, uint64_t val)
1029 pc = &dev->controls[num];
1031 pc->dev = dev;
1141 pc->ctrl = audio_dev_add_control(dev->adev, &desc,
1146 audiopci_add_controls(audiopci_dev_t *dev)
1148 audiopci_alloc_ctrl(dev, CTL_VOLUME, 75);
1149 audiopci_alloc_ctrl(dev, CTL_FRONT, ((75) | (75 << 8)));
1150 audiopci_alloc_ctrl(dev, CTL_MONO, 75);
1151 audiopci_alloc_ctrl(dev, CTL_MIC, 50);
1152 audiopci_alloc_ctrl(dev, CTL_LINE, 0);
1153 audiopci_alloc_ctrl(dev, CTL_CD, 0);
1154 audiopci_alloc_ctrl(dev, CTL_VID, 0);
1155 audiopci_alloc_ctrl(dev, CTL_PHONE, 0);
1156 audiopci_alloc_ctrl(dev, CTL_RECSRC, (1U << INPUT_MIC));
1157 audiopci_alloc_ctrl(dev, CTL_MONSRC, 0);
1158 audiopci_alloc_ctrl(dev, CTL_MICBOOST, 1);
1160 audiopci_configure_output(dev);
1161 audiopci_configure_input(dev);
1167 audiopci_del_controls(audiopci_dev_t *dev)
1170 if (dev->controls[i].ctrl) {
1171 audio_dev_del_control(dev->controls[i].ctrl);
1180 audiopci_dev_t *dev;
1183 dev = kmem_zalloc(sizeof (*dev), KM_SLEEP);
1184 dev->dip = dip;
1185 ddi_set_driver_private(dip, dev);
1187 mutex_init(&dev->mutex, NULL, MUTEX_DRIVER, NULL);
1190 audio_dev_warn(dev->adev, "pci_config_setup failed");
1191 mutex_destroy(&dev->mutex);
1192 kmem_free(dev, sizeof (*dev));
1203 dev->devid = device;
1205 dev->adev = audio_dev_alloc(dip, 0);
1206 if (dev->adev == NULL) {
1210 audio_dev_set_description(dev->adev, "AudioPCI");
1211 audio_dev_set_version(dev->adev, "ES1370");
1212 audio_dev_add_info(dev->adev, "Legacy codec: Asahi Kasei AK4531");
1220 if (ddi_regs_map_setup(dip, 1, &dev->regs, 0, 0, &acc_attr,
1221 &dev->acch) != DDI_SUCCESS) {
1222 audio_dev_warn(dev->adev, "can't map registers");
1228 if (audiopci_init(dev) != DDI_SUCCESS) {
1229 audio_dev_warn(dev->adev, "can't init device");
1240 mutex_destroy(&dev->mutex);
1243 audiopci_destroy(dev);
1249 audiopci_detach(audiopci_dev_t *dev)
1254 if (audio_dev_unregister(dev->adev) != DDI_SUCCESS)
1257 mutex_enter(&dev->mutex);
1259 tmp = GET8(dev, CONC_bSERCTL_OFF) &
1261 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1262 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1263 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1264 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1266 tmp = GET8(dev, CONC_bDEVCTL_OFF) &
1268 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1269 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1270 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1271 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1273 mutex_exit(&dev->mutex);
1275 audiopci_destroy(dev);
1281 audiopci_resume(audiopci_dev_t *dev)
1284 audiopci_init_hw(dev);
1286 audio_dev_resume(dev->adev);
1291 audiopci_suspend(audiopci_dev_t *dev)
1293 audio_dev_suspend(dev->adev);
1301 audiopci_dev_t *dev;
1304 if ((dev = ddi_get_driver_private(dip)) == NULL) {
1309 tmp = GET8(dev, CONC_bSERCTL_OFF) &
1311 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1312 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1313 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1314 PUT8(dev, CONC_bSERCTL_OFF, tmp);
1316 tmp = GET8(dev, CONC_bDEVCTL_OFF) &
1318 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1319 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1320 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1321 PUT8(dev, CONC_bDEVCTL_OFF, tmp);
1330 audiopci_dev_t *dev;
1337 if ((dev = ddi_get_driver_private(dip)) == NULL) {
1340 return (audiopci_resume(dev));
1350 audiopci_dev_t *dev;
1352 if ((dev = ddi_get_driver_private(dip)) == NULL) {
1358 return (audiopci_detach(dev));
1361 return (audiopci_suspend(dev));