bktr_audio.c (68071) | bktr_audio.c (110237) |
---|---|
1/* $FreeBSD: head/sys/dev/bktr/bktr_audio.c 68071 2000-10-31 13:09:56Z roger $ */ | 1/* $FreeBSD: head/sys/dev/bktr/bktr_audio.c 110237 2003-02-02 17:46:00Z orion $ */ |
2/* 3 * This is part of the Driver for Video Capture Cards (Frame grabbers) 4 * and TV Tuner cards using the Brooktree Bt848, Bt848A, Bt849A, Bt878, Bt879 5 * chipset. 6 * Copyright Roger Hardiman and Amancio Hasty. 7 * 8 * bktr_audio : This deals with controlling the audio on TV cards, 9 * controlling the Audio Multiplexer (audio source selector). --- 70 unchanged lines hidden (view full) --- 80#include <dev/bktr/bktr_reg.h> 81#include <dev/bktr/bktr_core.h> 82#include <dev/bktr/bktr_tuner.h> 83#include <dev/bktr/bktr_card.h> 84#include <dev/bktr/bktr_audio.h> 85#endif 86 87/* | 2/* 3 * This is part of the Driver for Video Capture Cards (Frame grabbers) 4 * and TV Tuner cards using the Brooktree Bt848, Bt848A, Bt849A, Bt878, Bt879 5 * chipset. 6 * Copyright Roger Hardiman and Amancio Hasty. 7 * 8 * bktr_audio : This deals with controlling the audio on TV cards, 9 * controlling the Audio Multiplexer (audio source selector). --- 70 unchanged lines hidden (view full) --- 80#include <dev/bktr/bktr_reg.h> 81#include <dev/bktr/bktr_core.h> 82#include <dev/bktr/bktr_tuner.h> 83#include <dev/bktr/bktr_card.h> 84#include <dev/bktr/bktr_audio.h> 85#endif 86 87/* |
88 * Prototypes for the GV_BCTV specific functions. | 88 * Prototypes for the GV_BCTV2 specific functions. |
89 */ | 89 */ |
90void set_bctv_audio( bktr_ptr_t bktr ); 91void bctv_gpio_write( bktr_ptr_t bktr, int port, int val ); 92/*int bctv_gpio_read( bktr_ptr_t bktr, int port );*/ /* Not used */ | 90void set_bctv2_audio( bktr_ptr_t bktr ); 91void bctv2_gpio_write( bktr_ptr_t bktr, int port, int val ); 92/*int bctv2_gpio_read( bktr_ptr_t bktr, int port );*/ /* Not used */ |
93 | 93 |
94 95 | |
96/* 97 * init_audio_devices 98 * Reset any MSP34xx or TDA98xx audio devices. 99 */ 100void init_audio_devices( bktr_ptr_t bktr ) { 101 102 /* enable stereo if appropriate on TDA audio chip */ 103 if ( bktr->card.dbx ) --- 62 unchanged lines hidden (view full) --- 166 return( -1 ); 167 } 168 169 170 /* Most cards have a simple audio multiplexer to select the 171 * audio source. The I/O_GV card has a more advanced multiplexer 172 * and requires special handling. 173 */ | 94/* 95 * init_audio_devices 96 * Reset any MSP34xx or TDA98xx audio devices. 97 */ 98void init_audio_devices( bktr_ptr_t bktr ) { 99 100 /* enable stereo if appropriate on TDA audio chip */ 101 if ( bktr->card.dbx ) --- 62 unchanged lines hidden (view full) --- 164 return( -1 ); 165 } 166 167 168 /* Most cards have a simple audio multiplexer to select the 169 * audio source. The I/O_GV card has a more advanced multiplexer 170 * and requires special handling. 171 */ |
174 if ( bktr->bt848_card == CARD_IO_GV ) { 175 set_bctv_audio( bktr ); | 172 if ( bktr->bt848_card == CARD_IO_BCTV2 ) { 173 set_bctv2_audio( bktr ); |
176 return( 0 ); 177 } 178 179 /* Proceed with the simpler audio multiplexer code for the majority 180 * of Bt848 cards. 181 */ 182 183 /* --- 126 unchanged lines hidden (view full) --- 310 */ 311int 312set_BTSC( bktr_ptr_t bktr, int control ) 313{ 314 return( i2cWrite( bktr, TDA9850_WADDR, CON3ADDR, control ) ); 315} 316 317/* | 174 return( 0 ); 175 } 176 177 /* Proceed with the simpler audio multiplexer code for the majority 178 * of Bt848 cards. 179 */ 180 181 /* --- 126 unchanged lines hidden (view full) --- 308 */ 309int 310set_BTSC( bktr_ptr_t bktr, int control ) 311{ 312 return( i2cWrite( bktr, TDA9850_WADDR, CON3ADDR, control ) ); 313} 314 315/* |
318 * CARD_GV_BCTV specific functions. | 316 * CARD_GV_BCTV2 specific functions. |
319 */ 320 | 317 */ 318 |
321#define BCTV_AUDIO_MAIN 0x10 /* main audio program */ 322#define BCTV_AUDIO_SUB 0x20 /* sub audio program */ 323#define BCTV_AUDIO_BOTH 0x30 /* main(L) + sub(R) program */ | 319#define BCTV2_AUDIO_MAIN 0x10 /* main audio program */ 320#define BCTV2_AUDIO_SUB 0x20 /* sub audio program */ 321#define BCTV2_AUDIO_BOTH 0x30 /* main(L) + sub(R) program */ |
324 | 322 |
325#define BCTV_GPIO_REG0 1 326#define BCTV_GPIO_REG1 3 | 323#define BCTV2_GPIO_REG0 1 324#define BCTV2_GPIO_REG1 3 |
327 | 325 |
328#define BCTV_GR0_AUDIO_MODE 3 329#define BCTV_GR0_AUDIO_MAIN 0 /* main program */ 330#define BCTV_GR0_AUDIO_SUB 3 /* sub program */ 331#define BCTV_GR0_AUDIO_BOTH 1 /* main(L) + sub(R) */ 332#define BCTV_GR0_AUDIO_MUTE 4 /* audio mute */ 333#define BCTV_GR0_AUDIO_MONO 8 /* force mono */ | 326#define BCTV2_GR0_AUDIO_MODE 3 327#define BCTV2_GR0_AUDIO_MAIN 0 /* main program */ 328#define BCTV2_GR0_AUDIO_SUB 3 /* sub program */ 329#define BCTV2_GR0_AUDIO_BOTH 1 /* main(L) + sub(R) */ 330#define BCTV2_GR0_AUDIO_MUTE 4 /* audio mute */ 331#define BCTV2_GR0_AUDIO_MONO 8 /* force mono */ |
334 335void | 332 333void |
336set_bctv_audio( bktr_ptr_t bktr ) | 334set_bctv2_audio( bktr_ptr_t bktr ) |
337{ 338 int data; 339 340 switch (bktr->audio_mux_select) { 341 case 1: /* external */ 342 case 2: /* internal */ | 335{ 336 int data; 337 338 switch (bktr->audio_mux_select) { 339 case 1: /* external */ 340 case 2: /* internal */ |
343 bctv_gpio_write(bktr, BCTV_GPIO_REG1, 0); | 341 bctv2_gpio_write(bktr, BCTV2_GPIO_REG1, 0); |
344 break; 345 default: /* tuner */ | 342 break; 343 default: /* tuner */ |
346 bctv_gpio_write(bktr, BCTV_GPIO_REG1, 1); | 344 bctv2_gpio_write(bktr, BCTV2_GPIO_REG1, 1); |
347 break; 348 } 349/* switch (bktr->audio_sap_select) { */ | 345 break; 346 } 347/* switch (bktr->audio_sap_select) { */ |
350 switch (BCTV_AUDIO_BOTH) { 351 case BCTV_AUDIO_SUB: 352 data = BCTV_GR0_AUDIO_SUB; | 348 switch (BCTV2_AUDIO_BOTH) { 349 case BCTV2_AUDIO_SUB: 350 data = BCTV2_GR0_AUDIO_SUB; |
353 break; | 351 break; |
354 case BCTV_AUDIO_BOTH: 355 data = BCTV_GR0_AUDIO_BOTH; | 352 case BCTV2_AUDIO_BOTH: 353 data = BCTV2_GR0_AUDIO_BOTH; |
356 break; | 354 break; |
357 case BCTV_AUDIO_MAIN: | 355 case BCTV2_AUDIO_MAIN: |
358 default: | 356 default: |
359 data = BCTV_GR0_AUDIO_MAIN; | 357 data = BCTV2_GR0_AUDIO_MAIN; |
360 break; 361 } 362 if (bktr->audio_mute_state == TRUE) | 358 break; 359 } 360 if (bktr->audio_mute_state == TRUE) |
363 data |= BCTV_GR0_AUDIO_MUTE; | 361 data |= BCTV2_GR0_AUDIO_MUTE; |
364 | 362 |
365 bctv_gpio_write(bktr, BCTV_GPIO_REG0, data); | 363 bctv2_gpio_write(bktr, BCTV2_GPIO_REG0, data); |
366 367 return; 368} 369 370/* gpio_data bit assignment */ | 364 365 return; 366} 367 368/* gpio_data bit assignment */ |
371#define BCTV_GPIO_ADDR_MASK 0x000300 372#define BCTV_GPIO_WE 0x000400 373#define BCTV_GPIO_OE 0x000800 374#define BCTV_GPIO_VAL_MASK 0x00f000 | 369#define BCTV2_GPIO_ADDR_MASK 0x000300 370#define BCTV2_GPIO_WE 0x000400 371#define BCTV2_GPIO_OE 0x000800 372#define BCTV2_GPIO_VAL_MASK 0x00f000 |
375 | 373 |
376#define BCTV_GPIO_PORT_MASK 3 377#define BCTV_GPIO_ADDR_SHIFT 8 378#define BCTV_GPIO_VAL_SHIFT 12 | 374#define BCTV2_GPIO_PORT_MASK 3 375#define BCTV2_GPIO_ADDR_SHIFT 8 376#define BCTV2_GPIO_VAL_SHIFT 12 |
379 380/* gpio_out_en value for read/write */ | 377 378/* gpio_out_en value for read/write */ |
381#define BCTV_GPIO_OUT_RMASK 0x000f00 382#define BCTV_GPIO_OUT_WMASK 0x00ff00 | 379#define BCTV2_GPIO_OUT_RMASK 0x000f00 380#define BCTV2_GPIO_OUT_WMASK 0x00ff00 |
383 | 381 |
384#define BCTV_BITS 100 | 382#define BCTV2_BITS 100 |
385 386void | 383 384void |
387bctv_gpio_write( bktr_ptr_t bktr, int port, int val ) | 385bctv2_gpio_write( bktr_ptr_t bktr, int port, int val ) |
388{ 389 u_long data, outbits; 390 | 386{ 387 u_long data, outbits; 388 |
391 port &= BCTV_GPIO_PORT_MASK; | 389 port &= BCTV2_GPIO_PORT_MASK; |
392 switch (port) { 393 case 1: 394 case 3: | 390 switch (port) { 391 case 1: 392 case 3: |
395 data = ((val << BCTV_GPIO_VAL_SHIFT) & BCTV_GPIO_VAL_MASK) | 396 ((port << BCTV_GPIO_ADDR_SHIFT) & BCTV_GPIO_ADDR_MASK) | 397 BCTV_GPIO_WE | BCTV_GPIO_OE; 398 outbits = BCTV_GPIO_OUT_WMASK; | 393 data = ((val << BCTV2_GPIO_VAL_SHIFT) & BCTV2_GPIO_VAL_MASK) | 394 ((port << BCTV2_GPIO_ADDR_SHIFT) & BCTV2_GPIO_ADDR_MASK) | 395 BCTV2_GPIO_WE | BCTV2_GPIO_OE; 396 outbits = BCTV2_GPIO_OUT_WMASK; |
399 break; 400 default: 401 return; 402 } 403 OUTL(bktr, BKTR_GPIO_OUT_EN, 0); 404 OUTL(bktr, BKTR_GPIO_DATA, data); 405 OUTL(bktr, BKTR_GPIO_OUT_EN, outbits); | 397 break; 398 default: 399 return; 400 } 401 OUTL(bktr, BKTR_GPIO_OUT_EN, 0); 402 OUTL(bktr, BKTR_GPIO_DATA, data); 403 OUTL(bktr, BKTR_GPIO_OUT_EN, outbits); |
406 DELAY(BCTV_BITS); 407 OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV_GPIO_WE); 408 DELAY(BCTV_BITS); | 404 DELAY(BCTV2_BITS); 405 OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV2_GPIO_WE); 406 DELAY(BCTV2_BITS); |
409 OUTL(bktr, BKTR_GPIO_DATA, data); | 407 OUTL(bktr, BKTR_GPIO_DATA, data); |
410 DELAY(BCTV_BITS); | 408 DELAY(BCTV2_BITS); |
411 OUTL(bktr, BKTR_GPIO_DATA, ~0); 412 OUTL(bktr, BKTR_GPIO_OUT_EN, 0); 413} 414 415/* Not yet used 416int | 409 OUTL(bktr, BKTR_GPIO_DATA, ~0); 410 OUTL(bktr, BKTR_GPIO_OUT_EN, 0); 411} 412 413/* Not yet used 414int |
417bctv_gpio_read( bktr_ptr_t bktr, int port ) | 415bctv2_gpio_read( bktr_ptr_t bktr, int port ) |
418{ 419 u_long data, outbits, ret; 420 | 416{ 417 u_long data, outbits, ret; 418 |
421 port &= BCTV_GPIO_PORT_MASK; | 419 port &= BCTV2_GPIO_PORT_MASK; |
422 switch (port) { 423 case 1: 424 case 3: | 420 switch (port) { 421 case 1: 422 case 3: |
425 data = ((port << BCTV_GPIO_ADDR_SHIFT) & BCTV_GPIO_ADDR_MASK) | 426 BCTV_GPIO_WE | BCTV_GPIO_OE; 427 outbits = BCTV_GPIO_OUT_RMASK; | 423 data = ((port << BCTV2_GPIO_ADDR_SHIFT) & BCTV2_GPIO_ADDR_MASK) | 424 BCTV2_GPIO_WE | BCTV2_GPIO_OE; 425 outbits = BCTV2_GPIO_OUT_RMASK; |
428 break; 429 default: 430 return( -1 ); 431 } 432 OUTL(bktr, BKTR_GPIO_OUT_EN, 0); 433 OUTL(bktr, BKTR_GPIO_DATA, data); 434 OUTL(bktr, BKTR_GPIO_OUT_EN, outbits); | 426 break; 427 default: 428 return( -1 ); 429 } 430 OUTL(bktr, BKTR_GPIO_OUT_EN, 0); 431 OUTL(bktr, BKTR_GPIO_DATA, data); 432 OUTL(bktr, BKTR_GPIO_OUT_EN, outbits); |
435 DELAY(BCTV_BITS); 436 OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV_GPIO_OE); 437 DELAY(BCTV_BITS); | 433 DELAY(BCTV2_BITS); 434 OUTL(bktr, BKTR_GPIO_DATA, data & ~BCTV2_GPIO_OE); 435 DELAY(BCTV2_BITS); |
438 ret = INL(bktr, BKTR_GPIO_DATA); | 436 ret = INL(bktr, BKTR_GPIO_DATA); |
439 DELAY(BCTV_BITS); | 437 DELAY(BCTV2_BITS); |
440 OUTL(bktr, BKTR_GPIO_DATA, data); | 438 OUTL(bktr, BKTR_GPIO_DATA, data); |
441 DELAY(BCTV_BITS); | 439 DELAY(BCTV2_BITS); |
442 OUTL(bktr, BKTR_GPIO_DATA, ~0); 443 OUTL(bktr, BKTR_GPIO_OUT_EN, 0); | 440 OUTL(bktr, BKTR_GPIO_DATA, ~0); 441 OUTL(bktr, BKTR_GPIO_OUT_EN, 0); |
444 return( (ret & BCTV_GPIO_VAL_MASK) >> BCTV_GPIO_VAL_SHIFT ); | 442 return( (ret & BCTV2_GPIO_VAL_MASK) >> BCTV2_GPIO_VAL_SHIFT ); |
445} 446*/ 447 448/* 449 * setup the MSP34xx Stereo Audio Chip 450 * This uses the Auto Configuration Option on MSP3410D and MSP3415D chips 451 * and DBX mode selection for MSP3430G chips. 452 * For MSP3400C support, the full programming sequence is required and is --- 181 unchanged lines hidden --- | 443} 444*/ 445 446/* 447 * setup the MSP34xx Stereo Audio Chip 448 * This uses the Auto Configuration Option on MSP3410D and MSP3415D chips 449 * and DBX mode selection for MSP3430G chips. 450 * For MSP3400C support, the full programming sequence is required and is --- 181 unchanged lines hidden --- |