提交SMOD ATSC IMX APP版本 V122
This commit is contained in:
Executable
+278
@@ -0,0 +1,278 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/07/05
|
||||
Modification ID : c7c68d70868a4a9fb9e0f480d8b940e8a1e8f651
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
#include "sony_common.h"
|
||||
#include "sony_demod.h"
|
||||
#include "sony_integ.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_integ_Create (sony_integ_t * pInteg,
|
||||
sony_demod_t * pDemod,
|
||||
sony_demod_create_param_t * pCreateParam,
|
||||
sony_i2c_t * pDemodI2c,
|
||||
sony_tuner_t * pTuner
|
||||
#ifdef SONY_DEMOD_SUPPORT_SAT_DEVICE_CTRL
|
||||
,sony_lnbc_t * pLnbc
|
||||
#endif
|
||||
)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_integ_Create");
|
||||
|
||||
if ((!pInteg) || (!pDemod) || (!pCreateParam) || (!pDemodI2c)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Create demodulator instance */
|
||||
result = sony_demod_Create (pDemod, pCreateParam, pDemodI2c);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Populate the integration structure */
|
||||
pInteg->pDemod = pDemod;
|
||||
pInteg->pTuner = pTuner;
|
||||
|
||||
#ifdef SONY_DEMOD_SUPPORT_SAT_DEVICE_CTRL
|
||||
pInteg->pLnbc = pLnbc;
|
||||
#endif
|
||||
|
||||
sony_integ_ClearCancel (pInteg);
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
//#define PR_TUN printf
|
||||
sony_result_t sony_integ_Initialize (sony_integ_t * pInteg)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
//unsigned char u8_data[4];
|
||||
|
||||
|
||||
if ((!pInteg) || (!pInteg->pDemod)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
result = sony_demod_Initialize (pInteg->pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
//PR_TUN("dbg_pr, err, sony_demod_Initialize %s %d\n", __FUNCTION__, __LINE__);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Enable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x01);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
//PR_TUN("dbg_pr, err, sony_demod_I2cRepeaterEnable on %s %d\n", __FUNCTION__, __LINE__);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/*if (pInteg->pDemod->pI2c->ReadRegister (pInteg->pDemod->pI2c, pInteg->pDemod->i2cAddressSLVX, 0x08, &u8_data[0], 1) != SONY_RESULT_OK) {
|
||||
printf("err. SONY_RESULT_ERROR_I2C 0x01\r\n\n");
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}*/
|
||||
//PR_TUN("dbg_pr dev=0x%x reg=0x%x val=0x%x\n",pInteg->pDemod->i2cAddressSLVX, 0x08, u8_data[0]);
|
||||
|
||||
if ((pInteg->pTuner) && (pInteg->pTuner->Initialize)) {
|
||||
/* Initialize the terrestrial / cable tuner. */
|
||||
result = pInteg->pTuner->Initialize (pInteg->pTuner);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
//PR_TUN("dbg_pr, err, %s %d (Initialize)\n\n", __FUNCTION__, __LINE__);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x00);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
//PR_TUN("dbg_pr, err, sony_demod_I2cRepeaterEnable off %s %d\n", __FUNCTION__, __LINE__);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
#ifdef SONY_DEMOD_SUPPORT_SAT_DEVICE_CTRL
|
||||
if ((pInteg->pLnbc) && (pInteg->pLnbc->Initialize)) {
|
||||
/* Initialize the lnb controller. */
|
||||
result = pInteg->pLnbc->Initialize (pInteg->pLnbc);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
//PR_TUN("dbg_pr, err pInteg->pLnbc->Initialize %s %d\n", __FUNCTION__, __LINE__);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
if ((pInteg->pLnbc) && (pInteg->pLnbc->Sleep)) {
|
||||
/* Sleep the lnb controller */
|
||||
result = pInteg->pLnbc->Sleep (pInteg->pLnbc);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
//PR_TUN("dbg_pr, err pInteg->pLnbc->Sleep %s %d\n", __FUNCTION__, __LINE__);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_integ_Sleep (sony_integ_t * pInteg)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_integ_Sleep");
|
||||
|
||||
if ((!pInteg) || (!pInteg->pDemod)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pInteg->pDemod->state != SONY_DEMOD_STATE_SLEEP) && (pInteg->pDemod->state != SONY_DEMOD_STATE_ACTIVE) &&
|
||||
(pInteg->pDemod->state != SONY_DEMOD_STATE_SHUTDOWN)) {
|
||||
/* This api is accepted in Sleep, Active and Shutdown states only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Call the demodulator Sleep function */
|
||||
result = sony_demod_Sleep (pInteg->pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Enable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x01);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if ((pInteg->pTuner) && (pInteg->pTuner->Sleep)) {
|
||||
/* Call the terrestrial / cable tuner Sleep implementation */
|
||||
result = pInteg->pTuner->Sleep (pInteg->pTuner);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x00);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_integ_Shutdown (sony_integ_t * pInteg)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_integ_Shutdown");
|
||||
|
||||
if ((!pInteg) || (!pInteg->pDemod)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pInteg->pDemod->state != SONY_DEMOD_STATE_SLEEP) && (pInteg->pDemod->state != SONY_DEMOD_STATE_ACTIVE) &&
|
||||
(pInteg->pDemod->state != SONY_DEMOD_STATE_SHUTDOWN)) {
|
||||
/* This api is accepted in Sleep, Active and Shutdown states only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if (pInteg->pDemod->state == SONY_DEMOD_STATE_SHUTDOWN) {
|
||||
/* Nothing to do */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
/* At first, set demod to Sleep state to stop TS output. */
|
||||
result = sony_demod_Sleep (pInteg->pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Enable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x01);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if ((pInteg->pTuner) && (pInteg->pTuner->Shutdown)) {
|
||||
/* Call the terrestrial / cable tuner Shutdown implementation */
|
||||
result = pInteg->pTuner->Shutdown (pInteg->pTuner);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
/* Disable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x00);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
#ifdef SONY_DEMOD_SUPPORT_SAT_DEVICE_CTRL
|
||||
if ((pInteg->pLnbc) && (pInteg->pLnbc->Sleep)) {
|
||||
/* Sleep the lnb controller. */
|
||||
result = pInteg->pLnbc->Sleep (pInteg->pLnbc);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* After controlling tuner and LNBC, set demod to Shutdown state. */
|
||||
result = sony_demod_Shutdown (pInteg->pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_integ_Cancel (sony_integ_t * pInteg)
|
||||
{
|
||||
SONY_TRACE_ENTER ("sony_integ_Cancel");
|
||||
|
||||
/* Argument verification. */
|
||||
if (!pInteg) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Set the cancellation flag. */
|
||||
sony_atomic_set (&(pInteg->cancel), 1);
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_integ_ClearCancel (sony_integ_t * pInteg)
|
||||
{
|
||||
SONY_TRACE_ENTER ("sony_integ_ClearCancel");
|
||||
|
||||
/* Argument verification. */
|
||||
if (!pInteg) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Clear the cancellation flag. */
|
||||
sony_atomic_set (&(pInteg->cancel), 0);
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_integ_CheckCancellation (sony_integ_t * pInteg)
|
||||
{
|
||||
SONY_TRACE_ENTER ("sony_integ_CheckCancellation");
|
||||
|
||||
/* Argument verification. */
|
||||
if (!pInteg) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Check the cancellation flag. */
|
||||
if (sony_atomic_read (&(pInteg->cancel)) != 0) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_CANCEL);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user