Lines Matching refs:dev

96 	cmpci_dev_t *dev = port->dev;  in cmpci_open()  local
100 mutex_enter(&dev->mutex); in cmpci_open()
106 mutex_exit(&dev->mutex); in cmpci_open()
121 cmpci_dev_t *dev = port->dev; in cmpci_start() local
123 mutex_enter(&dev->mutex); in cmpci_start()
128 SET32(dev, REG_FUNCTRL0, port->fc0_rst_bit); in cmpci_start()
130 CLR32(dev, REG_FUNCTRL0, port->fc0_rst_bit); in cmpci_start()
134 SET32(dev, REG_FUNCTRL1, port->fc1_rate_mask); in cmpci_start()
135 SET32(dev, REG_CHFORMAT, port->chformat_mask); in cmpci_start()
137 if ((port->num == 1) && (dev->maxch > 2)) { in cmpci_start()
138 CLR32(dev, REG_LEGACY, LEGACY_NXCHG); in cmpci_start()
141 SET32(dev, REG_MISC, MISC_XCHGDAC); in cmpci_start()
142 CLR32(dev, REG_MISC, MISC_N4SPK3D); in cmpci_start()
144 CLR32(dev, REG_MISC, MISC_XCHGDAC); in cmpci_start()
145 SET32(dev, REG_MISC, MISC_N4SPK3D); in cmpci_start()
150 if (dev->maxch >= 8) { in cmpci_start()
151 CLR8(dev, REG_MISC2, MISC2_CHB3D8C); in cmpci_start()
153 if (dev->maxch >= 6) { in cmpci_start()
154 CLR32(dev, REG_CHFORMAT, CHFORMAT_CHB3D5C); in cmpci_start()
155 CLR32(dev, REG_LEGACY, LEGACY_CHB3D6C); in cmpci_start()
157 if (dev->maxch >= 4) { in cmpci_start()
158 CLR32(dev, REG_CHFORMAT, CHFORMAT_CHB3D); in cmpci_start()
162 if (dev->maxch >= 8) { in cmpci_start()
163 CLR8(dev, REG_MISC2, MISC2_CHB3D8C); in cmpci_start()
165 if (dev->maxch >= 6) { in cmpci_start()
166 CLR32(dev, REG_CHFORMAT, CHFORMAT_CHB3D5C); in cmpci_start()
167 CLR32(dev, REG_LEGACY, LEGACY_CHB3D6C); in cmpci_start()
168 CLR32(dev, REG_MISC, MISC_ENCENTER); in cmpci_start()
169 CLR32(dev, REG_LEGACY, LEGACY_EXBASSEN); in cmpci_start()
171 SET32(dev, REG_CHFORMAT, CHFORMAT_CHB3D); in cmpci_start()
174 if (dev->maxch >= 8) { in cmpci_start()
175 CLR8(dev, REG_MISC2, MISC2_CHB3D8C); in cmpci_start()
177 SET32(dev, REG_CHFORMAT, CHFORMAT_CHB3D5C); in cmpci_start()
178 SET32(dev, REG_LEGACY, LEGACY_CHB3D6C); in cmpci_start()
179 CLR32(dev, REG_MISC, MISC_ENCENTER); in cmpci_start()
180 CLR32(dev, REG_LEGACY, LEGACY_EXBASSEN); in cmpci_start()
181 CLR32(dev, REG_CHFORMAT, CHFORMAT_CHB3D); in cmpci_start()
185 SET8(dev, REG_MISC2, MISC2_CHB3D8C); in cmpci_start()
186 CLR32(dev, REG_MISC, MISC_ENCENTER); in cmpci_start()
187 CLR32(dev, REG_LEGACY, LEGACY_EXBASSEN); in cmpci_start()
188 CLR32(dev, REG_CHFORMAT, CHFORMAT_CHB3D5C); in cmpci_start()
189 CLR32(dev, REG_LEGACY, LEGACY_CHB3D6C); in cmpci_start()
190 CLR32(dev, REG_CHFORMAT, CHFORMAT_CHB3D); in cmpci_start()
195 PUT32(dev, port->reg_paddr, port->paddr); in cmpci_start()
196 PUT16(dev, port->reg_bufsz, (port->bufsz / 4) - 1); in cmpci_start()
197 PUT16(dev, port->reg_fragsz, (port->bufsz / 4) - 1); in cmpci_start()
202 SET32(dev, REG_FUNCTRL0, port->fc0_rec_bit); in cmpci_start()
204 CLR32(dev, REG_FUNCTRL0, port->fc0_rec_bit); in cmpci_start()
207 SET32(dev, REG_FUNCTRL0, port->fc0_en_bit); in cmpci_start()
208 mutex_exit(&dev->mutex); in cmpci_start()
217 cmpci_dev_t *dev = port->dev; in cmpci_stop() local
219 mutex_enter(&dev->mutex); in cmpci_stop()
220 CLR32(dev, REG_FUNCTRL0, port->fc0_en_bit); in cmpci_stop()
221 mutex_exit(&dev->mutex); in cmpci_stop()
228 cmpci_dev_t *dev = port->dev; in cmpci_count() local
232 mutex_enter(&dev->mutex); in cmpci_count()
235 offset = (port->bufsz / 4) - (GET16(dev, port->reg_bufsz) + 1); in cmpci_count()
247 mutex_exit(&dev->mutex); in cmpci_count()
260 #define LEFT(dev, ctl) min(((dev->controls[ctl].value) >> 8), 100) argument
261 #define RIGHT(dev, ctl) min(((dev->controls[ctl].value) & 0xff), 100) argument
262 #define MONO(dev, ctl) min(dev->controls[ctl].value, 100) argument
265 cmpci_setmixer(cmpci_dev_t *dev, uint8_t idx, uint8_t val) in cmpci_setmixer() argument
267 PUT8(dev, REG_IDXADDR, idx); in cmpci_setmixer()
268 PUT8(dev, REG_IDXDATA, val); in cmpci_setmixer()
272 cmpci_getmixer(cmpci_dev_t *dev, uint8_t idx) in cmpci_getmixer() argument
274 PUT8(dev, REG_IDXADDR, idx); in cmpci_getmixer()
275 return (GET8(dev, REG_IDXDATA)); in cmpci_getmixer()
280 cmpci_configure_mixer(cmpci_dev_t *dev) in cmpci_configure_mixer() argument
297 recsrcs = dev->controls[CTL_RECSRCS].value; in cmpci_configure_mixer()
298 monsrcs = dev->controls[CTL_MONSRCS].value; in cmpci_configure_mixer()
301 left = MONO(dev, CTL_VOLUME); in cmpci_configure_mixer()
304 cmpci_setmixer(dev, IDX_VOICE_LEFT, SCALE(left, 5)); in cmpci_configure_mixer()
305 cmpci_setmixer(dev, IDX_VOICE_RIGHT, SCALE(left, 5)); in cmpci_configure_mixer()
306 CLR8(dev, REG_MIX2, MIX2_WSMUTE); in cmpci_configure_mixer()
308 cmpci_setmixer(dev, IDX_VOICE_LEFT, 0); in cmpci_configure_mixer()
309 cmpci_setmixer(dev, IDX_VOICE_RIGHT, 0); in cmpci_configure_mixer()
310 SET8(dev, REG_MIX2, MIX2_WSMUTE); in cmpci_configure_mixer()
313 left = LEFT(dev, CTL_LINEOUT); in cmpci_configure_mixer()
314 right = RIGHT(dev, CTL_LINEOUT); in cmpci_configure_mixer()
317 cmpci_setmixer(dev, IDX_MASTER_LEFT, SCALE(left, 5)); in cmpci_configure_mixer()
318 cmpci_setmixer(dev, IDX_MASTER_RIGHT, SCALE(right, 5)); in cmpci_configure_mixer()
321 left = MONO(dev, CTL_SPEAKER); in cmpci_configure_mixer()
322 cmpci_setmixer(dev, IDX_SPEAKER, SCALE(left, 2)); in cmpci_configure_mixer()
325 left = MONO(dev, CTL_MIC); in cmpci_configure_mixer()
327 cmpci_setmixer(dev, IDX_MIC, SCALE(left, 5)); in cmpci_configure_mixer()
329 uint8_t v = GET8(dev, REG_MIX3); in cmpci_configure_mixer()
332 PUT8(dev, REG_MIX3, v); in cmpci_configure_mixer()
333 cmpci_setmixer(dev, 0x3f, SCALE(100, 2)); in cmpci_configure_mixer()
334 cmpci_setmixer(dev, 0x40, SCALE(100, 2)); in cmpci_configure_mixer()
336 cmpci_setmixer(dev, IDX_MIC, 0); in cmpci_configure_mixer()
343 left = LEFT(dev, CTL_LINEOUT); in cmpci_configure_mixer()
344 right = RIGHT(dev, CTL_LINEOUT); in cmpci_configure_mixer()
346 cmpci_setmixer(dev, IDX_LINEIN_LEFT, SCALE(left, 5)); in cmpci_configure_mixer()
348 cmpci_setmixer(dev, IDX_LINEIN_LEFT, 0); in cmpci_configure_mixer()
353 cmpci_setmixer(dev, IDX_LINEIN_RIGHT, SCALE(left, 5)); in cmpci_configure_mixer()
355 cmpci_setmixer(dev, IDX_LINEIN_RIGHT, 0); in cmpci_configure_mixer()
361 left = LEFT(dev, CTL_CD); in cmpci_configure_mixer()
362 right = RIGHT(dev, CTL_CD); in cmpci_configure_mixer()
364 cmpci_setmixer(dev, IDX_CDDA_LEFT, SCALE(left, 5)); in cmpci_configure_mixer()
366 cmpci_setmixer(dev, IDX_CDDA_LEFT, 0); in cmpci_configure_mixer()
371 cmpci_setmixer(dev, IDX_CDDA_RIGHT, SCALE(left, 5)); in cmpci_configure_mixer()
373 cmpci_setmixer(dev, IDX_CDDA_RIGHT, 0); in cmpci_configure_mixer()
379 left = LEFT(dev, CTL_AUX); in cmpci_configure_mixer()
380 right = RIGHT(dev, CTL_AUX); in cmpci_configure_mixer()
381 PUT8(dev, REG_VAUX, (((left * 15) / 100) << 4) | ((right * 15) / 100)); in cmpci_configure_mixer()
384 SET8(dev, REG_MIX3, MIX3_RAUXREN | MIX3_RAUXLEN); in cmpci_configure_mixer()
386 CLR8(dev, REG_MIX3, MIX3_RAUXREN | MIX3_RAUXLEN); in cmpci_configure_mixer()
390 CLR8(dev, REG_MIX3, MIX3_VAUXRM | MIX3_VAUXLM); in cmpci_configure_mixer()
392 SET8(dev, REG_MIX3, MIX3_VAUXRM | MIX3_VAUXLM); in cmpci_configure_mixer()
409 SET8(dev, REG_MIX2, MIX2_WAVEIN_L | MIX2_WAVEIN_R); in cmpci_configure_mixer()
411 CLR8(dev, REG_MIX2, MIX2_WAVEIN_L | MIX2_WAVEIN_R); in cmpci_configure_mixer()
413 cmpci_setmixer(dev, IDX_INMIX_L, inmix[0]); in cmpci_configure_mixer()
414 cmpci_setmixer(dev, IDX_INMIX_R, inmix[1]); in cmpci_configure_mixer()
426 cmpci_setmixer(dev, IDX_OUTMIX, outmix); in cmpci_configure_mixer()
429 if (dev->controls[CTL_MICBOOST].value != 0) { in cmpci_configure_mixer()
430 CLR8(dev, REG_MIX3, MIX3_MICGAINZ); in cmpci_configure_mixer()
431 cmpci_setmixer(dev, IDX_EXTENSION, in cmpci_configure_mixer()
432 cmpci_getmixer(dev, IDX_EXTENSION) & ~0x1); in cmpci_configure_mixer()
434 SET8(dev, REG_MIX3, MIX3_MICGAINZ); in cmpci_configure_mixer()
435 cmpci_setmixer(dev, IDX_EXTENSION, in cmpci_configure_mixer()
436 cmpci_getmixer(dev, IDX_EXTENSION) | 0x1); in cmpci_configure_mixer()
444 cmpci_dev_t *dev = cc->dev; in cmpci_set_ctrl() local
450 mutex_enter(&dev->mutex); in cmpci_set_ctrl()
452 cmpci_configure_mixer(dev); in cmpci_set_ctrl()
453 mutex_exit(&dev->mutex); in cmpci_set_ctrl()
462 cmpci_dev_t *dev = cc->dev; in cmpci_get_ctrl() local
464 mutex_enter(&dev->mutex); in cmpci_get_ctrl()
466 mutex_exit(&dev->mutex); in cmpci_get_ctrl()
478 cmpci_alloc_ctrl(cmpci_dev_t *dev, uint32_t num, uint64_t val) in cmpci_alloc_ctrl() argument
483 cc = &dev->controls[num]; in cmpci_alloc_ctrl()
485 cc->dev = dev; in cmpci_alloc_ctrl()
579 cc->ctrl = audio_dev_add_control(dev->adev, &desc, in cmpci_alloc_ctrl()
584 cmpci_add_controls(cmpci_dev_t *dev) in cmpci_add_controls() argument
586 if (dev->softvol) { in cmpci_add_controls()
587 audio_dev_add_soft_volume(dev->adev); in cmpci_add_controls()
589 cmpci_alloc_ctrl(dev, CTL_VOLUME, 75); in cmpci_add_controls()
591 cmpci_alloc_ctrl(dev, CTL_LINEOUT, 90 | (90 << 8)); in cmpci_add_controls()
592 cmpci_alloc_ctrl(dev, CTL_SPEAKER, 75); in cmpci_add_controls()
593 cmpci_alloc_ctrl(dev, CTL_MIC, 32); in cmpci_add_controls()
594 cmpci_alloc_ctrl(dev, CTL_LINEIN, 64 | (64 << 8)); in cmpci_add_controls()
595 cmpci_alloc_ctrl(dev, CTL_CD, 75 | (75 << 8)); in cmpci_add_controls()
596 cmpci_alloc_ctrl(dev, CTL_AUX, 75 | (75 << 8)); in cmpci_add_controls()
597 cmpci_alloc_ctrl(dev, CTL_RECSRCS, (1 << SRC_MIC)); in cmpci_add_controls()
598 cmpci_alloc_ctrl(dev, CTL_MONSRCS, 0); in cmpci_add_controls()
599 cmpci_alloc_ctrl(dev, CTL_MICBOOST, 0); in cmpci_add_controls()
603 cmpci_del_controls(cmpci_dev_t *dev) in cmpci_del_controls() argument
606 if (dev->controls[i].ctrl) { in cmpci_del_controls()
607 audio_dev_del_control(dev->controls[i].ctrl); in cmpci_del_controls()
608 dev->controls[i].ctrl = NULL; in cmpci_del_controls()
614 cmpci_reset(cmpci_dev_t *dev) in cmpci_reset() argument
617 SET32(dev, REG_MISC, MISC_RESET); in cmpci_reset()
618 (void) GET32(dev, REG_MISC); in cmpci_reset()
620 CLR32(dev, REG_MISC, MISC_RESET); in cmpci_reset()
623 PUT32(dev, REG_FUNCTRL0, 0); in cmpci_reset()
626 CLR32(dev, REG_FUNCTRL0, FUNCTRL0_CH0_EN | FUNCTRL0_CH1_EN); in cmpci_reset()
627 CLR32(dev, REG_INTCTRL, INTCTRL_CH0_EN | INTCTRL_CH1_EN); in cmpci_reset()
630 CLR32(dev, REG_FUNCTRL1, FUNCTRL1_UART_EN | FUNCTRL1_JYSTK_EN); in cmpci_reset()
636 SET32(dev, REG_FUNCTRL1, in cmpci_reset()
640 SET32(dev, REG_CHFORMAT, CHFORMAT_CH0_16ST | CHFORMAT_CH1_16ST); in cmpci_reset()
707 cmpci_init(cmpci_dev_t *dev) in cmpci_init() argument
709 audio_dev_t *adev = dev->adev; in cmpci_init()
712 playch = ddi_prop_get_int(DDI_DEV_T_ANY, dev->dip, in cmpci_init()
713 DDI_PROP_DONTPASS, "channels", dev->maxch); in cmpci_init()
715 if ((playch % 2) || (playch < 2) || (playch > dev->maxch)) { in cmpci_init()
718 playch, dev->maxch); in cmpci_init()
719 playch = dev->maxch; in cmpci_init()
731 port = &dev->port[i]; in cmpci_init()
732 port->dev = dev; in cmpci_init()
790 if (ddi_dma_alloc_handle(dev->dip, &dma_attr, DDI_DMA_DONTWAIT, in cmpci_init()
820 cmpci_add_controls(dev); in cmpci_init()
822 cmpci_reset(dev); in cmpci_init()
823 cmpci_configure_mixer(dev); in cmpci_init()
834 cmpci_destroy(cmpci_dev_t *dev) in cmpci_destroy() argument
836 mutex_destroy(&dev->mutex); in cmpci_destroy()
840 cmpci_port_t *port = &dev->port[i]; in cmpci_destroy()
850 audio_dev_remove_engine(dev->adev, port->engine); in cmpci_destroy()
855 if (dev->acch != NULL) { in cmpci_destroy()
856 ddi_regs_map_free(&dev->acch); in cmpci_destroy()
859 cmpci_del_controls(dev); in cmpci_destroy()
861 if (dev->adev != NULL) { in cmpci_destroy()
862 audio_dev_free(dev->adev); in cmpci_destroy()
865 kmem_free(dev, sizeof (*dev)); in cmpci_destroy()
872 cmpci_dev_t *dev; in cmpci_attach() local
900 dev = kmem_zalloc(sizeof (*dev), KM_SLEEP); in cmpci_attach()
901 dev->dip = dip; in cmpci_attach()
902 mutex_init(&dev->mutex, NULL, MUTEX_DRIVER, NULL); in cmpci_attach()
904 ddi_set_driver_private(dip, dev); in cmpci_attach()
909 dev->adev = adev; in cmpci_attach()
911 if (ddi_regs_map_setup(dip, 1, &dev->regs, 0, 0, &acc_attr, in cmpci_attach()
912 &dev->acch) != DDI_SUCCESS) { in cmpci_attach()
918 dev->maxch = 2; in cmpci_attach()
931 val = GET32(dev, REG_INTCTRL) & INTCTRL_MDL_MASK; in cmpci_attach()
934 if (GET32(dev, REG_CHFORMAT & CHFORMAT_VER_MASK)) { in cmpci_attach()
936 dev->maxch = 4; in cmpci_attach()
942 dev->maxch = 8; in cmpci_attach()
943 dev->softvol = B_TRUE; /* No hardware PCM volume */ in cmpci_attach()
946 dev->maxch = 6; in cmpci_attach()
949 dev->maxch = 4; in cmpci_attach()
956 audio_dev_set_version(dev->adev, "CMI-8338"); in cmpci_attach()
960 audio_dev_set_version(dev->adev, "CMI-8338B"); in cmpci_attach()
964 if (cmpci_init(dev) != DDI_SUCCESS) { in cmpci_attach()
965 audio_dev_warn(dev->adev, "can't init device"); in cmpci_attach()
972 cmpci_destroy(dev); in cmpci_attach()
977 cmpci_resume(cmpci_dev_t *dev) in cmpci_resume() argument
979 mutex_enter(&dev->mutex); in cmpci_resume()
980 cmpci_reset(dev); in cmpci_resume()
983 mutex_exit(&dev->mutex); in cmpci_resume()
985 audio_dev_resume(dev->adev); in cmpci_resume()
991 cmpci_detach(cmpci_dev_t *dev) in cmpci_detach() argument
993 if (audio_dev_unregister(dev->adev) != DDI_SUCCESS) in cmpci_detach()
996 mutex_enter(&dev->mutex); in cmpci_detach()
999 PUT32(dev, REG_FUNCTRL0, 0); in cmpci_detach()
1001 mutex_exit(&dev->mutex); in cmpci_detach()
1003 cmpci_destroy(dev); in cmpci_detach()
1011 cmpci_dev_t *dev; in cmpci_quiesce() local
1013 if ((dev = ddi_get_driver_private(dip)) == NULL) { in cmpci_quiesce()
1018 PUT32(dev, REG_FUNCTRL0, 0); in cmpci_quiesce()
1026 cmpci_dev_t *dev; in cmpci_ddi_attach() local
1033 if ((dev = ddi_get_driver_private(dip)) == NULL) { in cmpci_ddi_attach()
1036 return (cmpci_resume(dev)); in cmpci_ddi_attach()
1046 cmpci_dev_t *dev; in cmpci_ddi_detach() local
1048 if ((dev = ddi_get_driver_private(dip)) == NULL) { in cmpci_ddi_detach()
1054 return (cmpci_detach(dev)); in cmpci_ddi_detach()
1057 audio_dev_suspend(dev->adev); in cmpci_ddi_detach()