Lines Matching refs:dev

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