Deleted Added
full compact
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 ---