📄 play_capture_wm8775.c
字号:
/* * * Copyright (c) 2001-2007 Sigma Designs, Inc. * All Rights Reserved. Proprietary and Confidential. * *//** @file play_capture_WM8775.c @brief device specific functions for play_capture_main application @author Christian Wolff Sean.Sekwon.Choi*/// to enable or disable the debug messages of this source file, put 1 or 0 below#if 0#define LOCALDBG ENABLE#else#define LOCALDBG DISABLE#endif#include "sample_os.h"#define ALLOW_OS_CODE 1#include "../rua/include/rua.h"#include "../rua/include/rua_property.h"#include "../dcc/include/dcc.h"#include "../rmcore/include/rmstatustostring.h"#include "../rmlibcw/include/rmlibcw.h"#include "play_capture_WM8775.h"#include "play_capture_i2c.h"//////////////////////////////////////////////////////////////////////////////////// WM8775//////////////////////////////////////////////////////////////////////////////////enum WM8775_audio_port{ AIN1, AIN2, AIN3, AIN4,};static RMuint32 GetAudioPort(const struct capsam_access *pInput){ /* * Board Specific Info */ /* * sigma DTV8624 board: you have to check schematics to see what is connected to where */ switch(pInput->input){ case capsam_input_cvbs1: return AIN1; break; case capsam_input_svideo1: return AIN2; break; case capsam_input_component1: return AIN3; break; case capsam_input_scart1: case capsam_input_scart2: case capsam_input_tuner1: case capsam_input_tuner2: return AIN4; break; default: return AIN4; break; }}struct capsam_WM8775_instance { struct RUA *pRUA; RMuint32 I2CModuleID; struct EMhwlibI2CDeviceParameter I2CDevice; RMuint8 BaseDevice;};RMstatus capsam_WM8775_open(struct RUA *pRUA, struct capsam_WM8775_instance **ppWM8775, struct capsam_access *pInput){ struct capsam_WM8775_instance *pWM8775; RMDBGLOG((FUNCNAME, "%s\n",__func__)); // Sanity checks if (ppWM8775 == NULL) return RM_FATALINVALIDPOINTER; *ppWM8775 = NULL; if (pRUA == NULL) return RM_FATALINVALIDPOINTER; if (pInput == NULL) return RM_FATALINVALIDPOINTER; // Allocate and clear local instance pWM8775 = (struct capsam_WM8775_instance *)RMMalloc(sizeof(struct capsam_WM8775_instance)); if (pWM8775 == NULL) { fprintf(stderr, "FATAL! Not enough memory for struct capsam_WM8775_instance!\n"); return RM_FATALOUTOFMEMORY; } RMMemset(pWM8775, 0, sizeof(struct capsam_WM8775_instance)); *ppWM8775 = pWM8775; // Set default and startup values pWM8775->pRUA = pRUA; pWM8775->I2CModuleID = pInput->I2CModuleID; pWM8775->I2CDevice = pInput->I2CDevice; pWM8775->BaseDevice = pInput->I2CDevice.DevAddr; return RM_OK;}RMstatus capsam_WM8775_close(struct capsam_WM8775_instance *pWM8775){ RMDBGLOG((FUNCNAME, "%s\n",__func__)); // Sanity checks if (pWM8775 == NULL) return RM_FATALINVALIDPOINTER; // Free all ressources RMFree(pWM8775); return RM_OK;}RMstatus capsam_WM8775_tristate(struct capsam_WM8775_instance *pWM8775){ int i; RMuint16 i2c_data[][2]= { {0x0D, ((0x0D<<1) | (0x0020<<8))}, // bit 6 Analog input disable {0x0D, ((0x0D<<1) | (0x0002<<8))}, // bit 1 ADC power down {0x0D, ((0x0D<<1) | (0x0001<<8))}, // bit 0 power down }; RMDBGLOG((FUNCNAME, "%s\n",__func__)); for(i = 0; i<3; i++){ capsam_i2c_write_data(pWM8775, pWM8775->BaseDevice, i2c_data[i][0], &i2c_data[i][1], 2); } return RM_OK;}RMstatus capsam_WM8775_init_capture(struct capsam_WM8775_instance *pWM8775, const struct capsam_access *pInput){ RMuint32 audio_port; RMuint16 input, i; // Wolfson WM8775 setup RMuint16 i2c_data[][2] = { {0x17, ((0x17<<1) | (0x0000 <<8) )}, // 0 reset {0x0D, ((0x0D<<1) | (0x0000 <<8) )}, // 1 power up {0x0C, ((0x0C<<1) | (0x0002 <<8) )}, // 2 256fs, slave mode {0x0B, ((0x0B<<1) | (0x0022 <<8) )}, // 3 i2s, 24bit {0x15, ((0x15<<1) | (0x000f <<8) )}, // 4 all inputs }; RMDBGLOG((FUNCNAME, "%s\n",__func__)); audio_port = GetAudioPort(pInput); switch(audio_port){ case AIN1:input = ((0x15<<1) | (0x0001<<8));break; case AIN2:input = ((0x15<<1) | (0x0002<<8));break; case AIN3:input = ((0x15<<1) | (0x0004<<8));break; case AIN4:input = ((0x15<<1) | (0x0008<<8));break; default:input = 0;break; } i2c_data[4][1] = input; for(i = 0; i<5; i++){ capsam_i2c_write_data(pWM8775, pWM8775->BaseDevice, (RMuint8)i2c_data[i][0], &i2c_data[i][1], 2); } return RM_OK;}RMstatus capsam_WM8775_setup_output(struct capsam_WM8775_instance *pWM8775, struct capsam_update *pUpdate){ RMDBGLOG((FUNCNAME, "%s\n",__func__)); /* WM8775 is used as slave mode */ /* need to figure out how to change AIN# when user change line in on the fly */ return RM_OK;}RMstatus capsam_WM8775_check_int(struct capsam_WM8775_instance *pWM8775){ RMDBGLOG((FUNCNAME, "%s\n",__func__)); return RM_OK;}RMstatus capsam_WM8775_handle_int(struct capsam_WM8775_instance *pWM8775, struct capsam_update *pUpdate){ RMDBGLOG((FUNCNAME, "%s\n",__func__)); return RM_OK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -