Lines Matching refs:bktr
4 /* $FreeBSD: src/sys/dev/bktr/bktr_audio.c,v 1.8 2000/10/31 13:09:56 roger Exp$ */
78 #include <dev/pci/bktr/bktr_reg.h>
79 #include <dev/pci/bktr/bktr_core.h>
80 #include <dev/pci/bktr/bktr_tuner.h>
81 #include <dev/pci/bktr/bktr_card.h>
82 #include <dev/pci/bktr/bktr_audio.h>
86 #include <dev/bktr/bktr_reg.h>
87 #include <dev/bktr/bktr_core.h>
88 #include <dev/bktr/bktr_tuner.h>
89 #include <dev/bktr/bktr_card.h>
90 #include <dev/bktr/bktr_audio.h>
96 void set_bctv_audio(bktr_ptr_t bktr);
97 void bctv_gpio_write(bktr_ptr_t bktr, int port, int val);
98 /*int bctv_gpio_read(bktr_ptr_t bktr, int port);*/ /* Not used */
106 void init_audio_devices(bktr_ptr_t bktr) {
109 if (bktr->card.dbx)
110 init_BTSC(bktr);
113 if (bktr->card.msp3400c)
114 msp_dpl_reset(bktr, bktr->msp_addr);
117 if (bktr->card.dpl3518a)
118 msp_dpl_reset(bktr, bktr->dpl_addr);
128 set_audio(bktr_ptr_t bktr, int cmd)
140 if (!bktr->card.audiomuxs[4])
146 bktr->audio_mux_select = 3;
148 bktr->audio_mux_select = 0;
151 if (bktr->reverse_mute)
152 bktr->audio_mux_select = 0;
154 bktr->audio_mux_select = 3;
158 bktr->audio_mux_select = 1;
161 bktr->audio_mux_select = 2;
164 bktr->audio_mute_state = TRUE; /* set mute */
167 bktr->audio_mute_state = FALSE; /* clear mute */
170 printf("%s: audio cmd error %02x\n", bktr_name(bktr),
180 if (bktr->bt848_card == CARD_IO_GV) {
181 set_bctv_audio(bktr);
195 if (bktr->audio_mute_state == TRUE) {
202 if (bktr->reverse_mute)
209 idx = bktr->audio_mux_select;
212 temp = INL(bktr, BKTR_GPIO_DATA) & ~bktr->card.gpio_mux_bits;
214 OUTL(bktr, BKTR_GPIO_DATA, temp | (cmd & 0xff));
215 printf("%s: cmd: %d audio mux %x temp %x \n", bktr_name(bktr),
216 cmd, bktr->card.audiomuxs[idx], temp);
218 OUTL(bktr, BKTR_GPIO_DATA, temp | bktr->card.audiomuxs[idx]);
231 if ((bktr->card.msp3400c) && (bktr->audio_mux_present == 0)) {
233 if (bktr->audio_mute_state == TRUE) {
234 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0000, 0x0000); /* volume to MUTE */
236 if(bktr->audio_mux_select == 0) { /* TV Tuner */
237 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0000, 0x7300); /* 0 db volume */
238 if (bktr->msp_source_selected != 0) msp_autodetect(bktr); /* setup TV audio mode */
239 bktr->msp_source_selected = 0;
241 if(bktr->audio_mux_select == 1) { /* Line In */
242 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0000, 0x7300); /* 0 db volume */
243 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x000d, 0x1900); /* scart prescale */
244 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0008, 0x0220); /* SCART | STEREO */
245 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0013, 0x0000); /* DSP In = SC1_IN_L/R */
246 bktr->msp_source_selected = 1;
249 if(bktr->audio_mux_select == 2) { /* FM Radio */
250 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0000, 0x7300); /* 0 db volume */
251 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x000d, 0x1900); /* scart prescale */
252 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0008, 0x0220); /* SCART | STEREO */
253 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0013, 0x0200); /* DSP In = SC2_IN_L/R */
254 bktr->msp_source_selected = 2;
268 temp_mute(bktr_ptr_t bktr, int flag)
273 muteState = bktr->audio_mute_state;
274 set_audio(bktr, AUDIO_MUTE); /* prevent 'click' */
279 set_audio(bktr, AUDIO_UNMUTE);
302 init_BTSC(bktr_ptr_t bktr)
304 i2cWrite(bktr, TDA9850_WADDR, CON1ADDR, 0x08); /* noise threshold st */
305 i2cWrite(bktr, TDA9850_WADDR, CON2ADDR, 0x08); /* noise threshold sap */
306 i2cWrite(bktr, TDA9850_WADDR, CON3ADDR, 0x40); /* stereo mode */
307 i2cWrite(bktr, TDA9850_WADDR, CON4ADDR, 0x07); /* 0 dB input gain? */
308 i2cWrite(bktr, TDA9850_WADDR, ALI1ADDR, 0x10); /* wideband alignment? */
309 i2cWrite(bktr, TDA9850_WADDR, ALI2ADDR, 0x10); /* spectral alignment? */
310 i2cWrite(bktr, TDA9850_WADDR, ALI3ADDR, 0x03);
318 set_BTSC(bktr_ptr_t bktr, int control)
320 return(i2cWrite(bktr, TDA9850_WADDR, CON3ADDR, control));
342 set_bctv_audio(bktr_ptr_t bktr)
346 switch (bktr->audio_mux_select) {
349 bctv_gpio_write(bktr, BCTV_GPIO_REG1, 0);
352 bctv_gpio_write(bktr, BCTV_GPIO_REG1, 1);
355 /* switch (bktr->audio_sap_select) { */
368 if (bktr->audio_mute_state == TRUE)
371 bctv_gpio_write(bktr, BCTV_GPIO_REG0, data);
393 bctv_gpio_write(bktr_ptr_t bktr, int port, int val)
409 OUTL(bktr, BKTR_GPIO_OUT_EN, 0);
410 OUTL(bktr, BKTR_GPIO_DATA, data);
411 OUTL(bktr, BKTR_GPIO_OUT_EN, outbits);
413 OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV_GPIO_WE);
415 OUTL(bktr, BKTR_GPIO_DATA, data);
417 OUTL(bktr, BKTR_GPIO_DATA, ~0);
418 OUTL(bktr, BKTR_GPIO_OUT_EN, 0);
423 bctv_gpio_read(bktr_ptr_t bktr, int port)
438 OUTL(bktr, BKTR_GPIO_OUT_EN, 0);
439 OUTL(bktr, BKTR_GPIO_DATA, data);
440 OUTL(bktr, BKTR_GPIO_OUT_EN, outbits);
442 OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV_GPIO_OE);
444 ret = INL(bktr, BKTR_GPIO_DATA);
446 OUTL(bktr, BKTR_GPIO_DATA, data);
448 OUTL(bktr, BKTR_GPIO_DATA, ~0);
449 OUTL(bktr, BKTR_GPIO_OUT_EN, 0);
463 void msp_read_id(bktr_ptr_t bktr) {
465 rev1 = msp_dpl_read(bktr, bktr->msp_addr, 0x12, 0x001e);
466 rev2 = msp_dpl_read(bktr, bktr->msp_addr, 0x12, 0x001f);
468 snprintf(bktr->msp_version_string, sizeof bktr->msp_version_string,
483 void msp_autodetect(bktr_ptr_t bktr) {
488 if (strncmp("3430G", bktr->msp_version_string, 5) == 0 ||
489 strncmp("3435G", bktr->msp_version_string, 5) == 0) {
491 msp_dpl_write(bktr, bktr->msp_addr, 0x10, 0x0030,0x2003);/* Enable Auto format detection */
492 msp_dpl_write(bktr, bktr->msp_addr, 0x10, 0x0020,0x0020);/* Standard Select Reg. = BTSC-Stereo*/
493 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x000E,0x2403);/* darned if I know */
494 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0008,0x0320);/* Source select = (St or A) */
496 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0000,0x7300);/* Set volume to 0db gain */
502 else if (((strncmp("3415D", bktr->msp_version_string, 5) == 0)
503 &&(bktr->msp_use_mono_source == 1)
505 || (bktr->slow_msp_audio == 2)) {
506 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0000, 0x7300); /* 0 db volume */
507 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x000d, 0x1900); /* scart prescale */
508 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0008, 0x0220); /* SCART | STEREO */
509 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0013, 0x0100); /* DSP In = MONO IN */
515 else if (bktr->slow_msp_audio == 0) {
516 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0000,0x7300);/* Set volume to 0db gain */
517 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0008,0x0000);/* Spkr Source = default(FM/AM) */
518 msp_dpl_write(bktr, bktr->msp_addr, 0x10, 0x0020,0x0001);/* Enable Auto format detection */
519 msp_dpl_write(bktr, bktr->msp_addr, 0x10, 0x0021,0x0001);/* Auto selection of NICAM/MONO mode */
525 else if (bktr->slow_msp_audio == 1) {
526 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0000,0x7300);/* Set volume to 0db gain */
527 msp_dpl_write(bktr, bktr->msp_addr, 0x10, 0x0020,0x0001);/* Enable Auto format detection */
533 auto_detect = msp_dpl_read(bktr, bktr->msp_addr, 0x10, 0x007e);
537 bktr_name(bktr), loops*10, auto_detect);
548 stereo = msp_dpl_read(bktr, bktr->msp_addr, 0x12, 0x0018);
550 bktr_name(bktr), stereo);
552 stereo = msp_dpl_read(bktr, bktr->msp_addr, 0x12, 0x0018);
554 bktr_name(bktr), stereo);
556 stereo = msp_dpl_read(bktr, bktr->msp_addr, 0x12, 0x0018);
558 bktr_name(bktr), stereo);
560 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0008,0x0020);/* Loudspeaker set stereo*/
565 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0005,0x3f28);
568 bktr_name(bktr));
569 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0008,0x0000);/* Loudspeaker */
570 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0005,0x0000);/* all spatial effects off */
572 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0008,0x0030);/* Loudspeaker */
578 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0005,0x3f08);
583 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0008,0x0020);/* Loudspeaker */
584 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0009,0x0020);/* Headphone */
585 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x000a,0x0020);/* SCART1 */
586 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0041,0x0020);/* SCART2 */
587 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x000b,0x0020);/* I2S */
588 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x000c,0x0020);/* Quasi-Peak Detector Source */
589 msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x000e,0x0001);
593 msp_dpl_write(bktr, bktr->msp_addr, 0x10, 0x0021,0x0001);/* Auto selection of NICAM/MONO mode */
600 bktr_name(bktr), auto_detect);
608 /* msp_dpl_write(bktr, bktr->msp_addr, 0x12, 0x0014, 0x7f40); */
612 void dpl_read_id(bktr_ptr_t bktr) {
614 rev1 = msp_dpl_read(bktr, bktr->dpl_addr, 0x12, 0x001e);
615 rev2 = msp_dpl_read(bktr, bktr->dpl_addr, 0x12, 0x001f);
617 snprintf(bktr->dpl_version_string, sizeof bktr->dpl_version_string,
623 void dpl_autodetect(bktr_ptr_t bktr) {
626 msp_dpl_write(bktr, bktr->dpl_addr, 0x12, 0x000c,0x0320); /* quasi peak detector source dolby
629 msp_dpl_write(bktr, bktr->dpl_addr, 0x12, 0x0040,0x0060); /* Surround decoder mode;
633 msp_dpl_write(bktr, bktr->dpl_addr, 0x12, 0x0041,0x0620); /* surround source matrix;I2S2/STEREO*/
634 msp_dpl_write(bktr, bktr->dpl_addr, 0x12, 0x0042,0x1F00); /* surround delay 31ms max */
635 msp_dpl_write(bktr, bktr->dpl_addr, 0x12, 0x0043,0x0000); /* automatic surround input balance */
636 msp_dpl_write(bktr, bktr->dpl_addr, 0x12, 0x0044,0x4000); /* surround spatial effect 50%
638 msp_dpl_write(bktr, bktr->dpl_addr, 0x12, 0x0045,0x5400); /* surround panorama effect 66%