📄 board.c
字号:
/* * * Copyright (c) 2001-2007 Sigma Designs, Inc. * All Rights Reserved. Proprietary and Confidential. * *//** @file board.c @brief board-specific configurations for rmcapture. User have to create this input map and chip info. @author Christian Wolff Sean.Sekwon.Choi*/// to enable or disable the debug messages of this source file, put 1 or 0 below#if 1#define LOCALDBG ENABLE#else#define LOCALDBG DISABLE#endif#include "common.h"#include "board.h"#include "TW9919.h"#define I2C_ADDR_SiI9031_PRI 0x60#define I2C_ADDR_SiI9031_SEC 0x62#define I2C_ADDR_AD9380 0x98#define I2C_ADDR_AD9883 0x4C#define I2C_ADDR_SAA7119 0x40#define I2C_ADDR_WM8775 0x34#define I2C_ADDR_MSP34x5 0x80#define I2C_ADDR_TW9919 0x88/* ******************************************************************************** * DTV8634 board set configuration *********************************************************************************/struct cap_video_input_map DTV8634_VideoInputMap[] = { {cap_video_input_none, 0, 3, 0}, {cap_video_input_tuner, 1, 1, 1}, {cap_video_input_tuner, 2, 1, 2}, {cap_video_input_cvbs, 1, 1, 3}, {cap_video_input_cvbs, 2, 1, 4}, {cap_video_input_svideo, 1, 1, 3}, {cap_video_input_svideo, 2, 1, 4}, {cap_video_input_component, 1, 0, 3}, {cap_video_input_component, 2, 0, 4}, {cap_video_input_scart, 1, 1, 3}, {cap_video_input_scart, 2, 1, 4}, {cap_video_input_vga, 1, 0, 5}, {cap_video_input_dvi, 1, 0, 5}, {cap_video_input_hdmi, 1, 0, 6}, {cap_video_input_hdmi, 2, 0, 7}, {cap_video_input_hdmi, 3, 0, 8}, {cap_video_input_last, 0, cap_chip_last}};struct cap_audio_input_map DTV8634_AudioInputMap[] = { {cap_audio_input_none, 0, 3}, {cap_audio_input_tuner, 1, 2}, {cap_audio_input_tuner, 2, 2}, {cap_audio_input_stereo, 1, 2}, {cap_audio_input_stereo, 2, 2}, {cap_audio_input_stereo, 3, 2}, {cap_audio_input_hdmi, 1, 0}, {cap_audio_input_hdmi, 2, 0}, {cap_audio_input_hdmi, 3, 0}, {cap_audio_input_last, 0, cap_chip_last}};struct cap_chip_info DTV8634_ChipInfo[4] = { { // Index: 0 chip: cap_chip_AD9380, I2CModule: 1, I2CDevice: { APIVersion: 1, Clock: GPIOId_Sys_0, Data: GPIOId_Sys_1, DevAddr: I2C_ADDR_AD9380, Delay: 0, Speed: 100 } }, { // Index: 1 chip: cap_chip_TW9919, I2CModule: 1, I2CDevice: { APIVersion: 1, // set to 1 Clock: GPIOId_Sys_0, // GPIO of the I2C data line Data: GPIOId_Sys_1, // GPIO of the I2C clock line DevAddr: I2C_ADDR_TW9919, // I2C device address (write uses DevAddr, read uses DevAddr + 1) Delay: 0, // I2C delay, in uSec Speed: 100 } }, { // Index: 2 chip: cap_chip_MSP34x5, I2CModule: 1, I2CDevice: { APIVersion: 1, // set to 1 Clock: GPIOId_Sys_0, // GPIO of the I2C data line Data: GPIOId_Sys_1, // GPIO of the I2C clock line DevAddr: I2C_ADDR_MSP34x5, // I2C device address (write uses DevAddr, read uses DevAddr + 1) Delay: 0, // I2C delay, in uSec Speed: 100 } }, { // Index: 3 chip: cap_chip_last }};struct cap_board_info DTV8634_BoardInfo = { board: cap_board_sigma904e1dtv8634, clock: 2700000, p_video_input_map: DTV8634_VideoInputMap, p_audio_input_map: DTV8634_AudioInputMap, p_chip_info: DTV8634_ChipInfo};/* ******************************************************************************** * DTV8624 board set configuration *********************************************************************************/struct cap_video_input_map DTV8624_VideoInputMap[] = { {cap_video_input_none, 0, 5, 0}, {cap_video_input_tuner, 1, 1, 1}, {cap_video_input_tuner, 2, 1, 2}, {cap_video_input_cvbs, 1, 1, 3}, {cap_video_input_cvbs, 2, 1, 4}, {cap_video_input_svideo, 1, 1, 3}, {cap_video_input_svideo, 2, 1, 4}, {cap_video_input_component, 1, 1, 3}, // SDTV component 1 {cap_video_input_component, 2, 1, 4}, // SDTV component 2 {cap_video_input_component, 3, 2, 3}, // HDTV component 1 {cap_video_input_component, 4, 2, 4}, // HDTV component 2 {cap_video_input_scart, 1, 1, 3}, {cap_video_input_scart, 2, 1, 4}, {cap_video_input_vga, 1, 2, 5}, {cap_video_input_dvi, 1, 0, 5}, {cap_video_input_hdmi, 1, 0, 6}, {cap_video_input_hdmi, 2, 0, 7}, {cap_video_input_last, 0, cap_chip_last}};struct cap_audio_input_map DTV8624_AudioInputMap[] = { {cap_audio_input_none, 0, 5}, {cap_audio_input_tuner, 1, 3}, {cap_audio_input_tuner, 2, 3}, {cap_audio_input_stereo, 1, 4}, {cap_audio_input_stereo, 2, 4}, {cap_audio_input_stereo, 3, 4}, {cap_audio_input_hdmi, 1, 0}, {cap_audio_input_hdmi, 2, 0}, {cap_audio_input_last, 0, cap_chip_last}};// List of all aquisition chips on the board and how to access themstruct cap_chip_info DTV8624_ChipInfo[6] = { { // Index: 0 chip: cap_chip_SiI9031, // capture chip specification I2CModule: 1, // emhwlib Module ID of the I2C bus access I2CDevice: { APIVersion: 1, // set to 1 Clock: GPIOId_Sys_0, // GPIO of the I2C data line Data: GPIOId_Sys_1, // GPIO of the I2C clock line DevAddr: I2C_ADDR_SiI9031_PRI, // I2C device address (write uses DevAddr, read uses DevAddr + 1) Delay: 0, // I2C delay, in uSec Speed: 100 // frequency of the I2C bit transfer, in kHz (e.g. 100 or 400) } }, { // Index: 1 chip: cap_chip_SAA7119, I2CModule: 1, I2CDevice: { APIVersion: 1, // set to 1 Clock: GPIOId_Sys_0, // GPIO of the I2C data line Data: GPIOId_Sys_1, // GPIO of the I2C clock line DevAddr: I2C_ADDR_SAA7119, // I2C device address (write uses DevAddr, read uses DevAddr + 1) Delay: 0, // I2C delay, in uSec Speed: 100 } }, { // Index: 2 chip: cap_chip_AD9883, I2CModule: 1, I2CDevice: { APIVersion: 1, // set to 1 Clock: GPIOId_Sys_0, // GPIO of the I2C data line Data: GPIOId_Sys_1, // GPIO of the I2C clock line DevAddr: I2C_ADDR_AD9883, // I2C device address (write uses DevAddr, read uses DevAddr + 1) Delay: 0, // I2C delay, in uSec Speed: 100 } }, { // Index: 3 chip: cap_chip_MSP34x5, I2CModule: 1, I2CDevice: { APIVersion: 1, // set to 1 Clock: GPIOId_Sys_0, // GPIO of the I2C data line Data: GPIOId_Sys_1, // GPIO of the I2C clock line DevAddr: I2C_ADDR_MSP34x5, // I2C device address (write uses DevAddr, read uses DevAddr + 1) Delay: 0, // I2C delay, in uSec Speed: 100 } }, { // Index: 4 chip: cap_chip_WM8775, I2CModule: 1, I2CDevice: { APIVersion: 1, // set to 1 Clock: GPIOId_Sys_0, // GPIO of the I2C data line Data: GPIOId_Sys_1, // GPIO of the I2C clock line DevAddr: I2C_ADDR_WM8775, // I2C device address (write uses DevAddr, read uses DevAddr + 1) Delay: 0, // I2C delay, in uSec Speed: 100 } }, { // Index: 5 chip: cap_chip_last }};struct cap_board_info DTV8624_BoardInfo = { board: cap_board_sigma844e1dtv8624, clock: 2700000, p_video_input_map: DTV8624_VideoInputMap, p_audio_input_map: DTV8624_AudioInputMap, p_chip_info: DTV8624_ChipInfo};/* ******************************************************************************** * board specific function *********************************************************************************/RMstatus cap_board_specific_setup( struct rmcapture_instance *pCapture, struct RUA* pRUA, struct cap_board_info* p_board_info, enum cap_video_input current_video_input, RMuint32 current_video_input_num){ struct SystemBlock_GPIO_type gpio, gpio_16, gpio_17, gpio_18; RMstatus err = RM_OK; RMDBGLOG((FUNCNAME, "%s\n",__func__)); RMDBGLOG((LOCALDBG, "video input %d, video input number%d\n",current_video_input, current_video_input_num)); // this is board specific setting - have to figure out how to handle for multiple board. switch (p_board_info->board) { case cap_board_sigma844e1dtv8624: RMDBGLOG((LOCALDBG, "Setting up board #844, Rev.E1, EM8624 DTV eval.\n")); gpio.Bit = GPIOId_Sys_15; gpio.Data = FALSE; // select HDMI audio RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio, sizeof(gpio), 0); break; case cap_board_sigma904e1dtv8634: RMDBGLOG((LOCALDBG, "Setting up board #904, Rev.E1, SMP8634 DTV eval.\n")); // 0. power up AD9380 gpio.Bit = GPIOId_Eth_34; gpio.Data = TRUE; // power up RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio, sizeof(gpio), 0); // 1. audio input MUX setting gpio.Bit = GPIOId_Eth_23; gpio.Data = FALSE; // route HDMI audio to I2S input RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio, sizeof(gpio), 0); // 2. HDMI input MUX setting gpio_16.Bit = GPIOId_Eth_18; gpio_16.Data = FALSE; // route analog audio to I2S input gpio_17.Bit = GPIOId_Eth_19; gpio_17.Data = FALSE; // route analog audio to I2S input gpio_18.Bit = GPIOId_Eth_20; gpio_18.Data = FALSE; // route analog audio to I2S input switch (current_video_input) { case cap_video_input_hdmi: switch (current_video_input_num) { case 1: gpio_16.Data = TRUE; // route analog audio to I2S input break; case 2: gpio_17.Data = TRUE; // route analog audio to I2S input break; case 3: gpio_18.Data = TRUE; // route analog audio to I2S input break; default: break; } break; default: break; } RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio_16, sizeof(gpio_16), 0); RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio_17, sizeof(gpio_17), 0); RUASetProperty(pRUA, SystemBlock, RMSystemBlockPropertyID_GPIO, &gpio_18, sizeof(gpio_18), 0); // DTV8634 board gets MCLK from TW9919 // analog video chip should be power on to feed MCLK { RMuint32 i = 0; struct cap_chip_instance* pChip; while (p_board_info->p_chip_info[i].chip != cap_chip_last) { // for each chip of this board, if (p_board_info->p_chip_info[i].chip == cap_chip_TW9919) { // if it is a TW9919, pChip = rmcapture_get_chip_handle(pCapture, cap_chip_last, i); // get chip handle. if (pChip) { // if handle is open, cap_TW9919_setup_audio_mclk(pChip->instance.pTW9919); // set up audio clock. RMDBGLOG((ENABLE, "Chip #%lu (TW9919): audio clocks set up\n", i)); } else { RMDBGLOG((ENABLE, "Chip #%lu (TW9919) not open!\n", i)); } } i++; } } break; default: RMDBGLOG((ENABLE, "No board-specific initialisation for this board!\n")); } return err;}/* ******************************************************************************** * helper functions *********************************************************************************/struct cap_board_info* cap_get_board_info(enum cap_board board){ switch (board) { case cap_board_sigma844e1dtv8624: return &DTV8624_BoardInfo; case cap_board_sigma904e1dtv8634: return &DTV8634_BoardInfo; default: RMDBGLOG((ENABLE, "No board-specific information for this board defined!\n")); return NULL; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -