700 lines
29 KiB
C
Executable File
700 lines
29 KiB
C
Executable File
/*------------------------------------------------------------------------------
|
|
Copyright 2016-2019 Sony Semiconductor Solutions Corporation
|
|
|
|
Last Updated : 2019/02/14
|
|
Modification ID : 83dbabba2734697e67e3d44647acf57b272c2caf
|
|
------------------------------------------------------------------------------*/
|
|
#include "sony_demod_j83b.h"
|
|
#include "sony_demod_j83b_monitor.h"
|
|
|
|
/*------------------------------------------------------------------------------
|
|
Static Function Prototypes
|
|
------------------------------------------------------------------------------*/
|
|
/**
|
|
@brief Configure the demodulator from Sleep to Active for J.83B
|
|
*/
|
|
static sony_result_t SLtoACC(sony_demod_t * pDemod);
|
|
/**
|
|
@brief Configure the demodulator for tuner optimisations and bandwidth specific
|
|
settings.
|
|
*/
|
|
static sony_result_t SLtoACC_BandSetting(sony_demod_t * pDemod);
|
|
|
|
/**
|
|
@brief Configure the demodulator from Active J.83B to Active to J.83B. Used
|
|
for changing channel parameters.
|
|
*/
|
|
static sony_result_t ACCtoACC(sony_demod_t * pDemod);
|
|
|
|
/**
|
|
@brief Configure the demodulator from Active J.83B to Sleep.
|
|
*/
|
|
static sony_result_t ACCtoSL(sony_demod_t * pDemod);
|
|
/*------------------------------------------------------------------------------
|
|
Functions
|
|
------------------------------------------------------------------------------*/
|
|
sony_result_t sony_demod_j83b_Tune (sony_demod_t * pDemod, sony_j83b_tune_param_t * pTuneParam)
|
|
{
|
|
sony_result_t result = SONY_RESULT_OK;
|
|
SONY_TRACE_ENTER ("sony_demod_j83b_Tune");
|
|
|
|
if ((!pDemod) || (!pTuneParam)) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
|
}
|
|
|
|
if ((pTuneParam->bandwidth != SONY_DTV_BW_J83B_5_06_5_36_MSPS) &&
|
|
(pTuneParam->bandwidth != SONY_DTV_BW_J83B_5_60_MSPS)) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
|
}
|
|
|
|
if ((pDemod->state == SONY_DEMOD_STATE_ACTIVE) && (pDemod->system == SONY_DTV_SYSTEM_J83B)) {
|
|
/* Demodulator Active and set to J.83B mode */
|
|
pDemod->bandwidth = pTuneParam->bandwidth;
|
|
result = ACCtoACC (pDemod);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
}
|
|
else if((pDemod->state == SONY_DEMOD_STATE_ACTIVE) && (pDemod->system != SONY_DTV_SYSTEM_J83B)){
|
|
/* Demodulator Active but not J.83B mode */
|
|
result = sony_demod_Sleep (pDemod);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
pDemod->system = SONY_DTV_SYSTEM_J83B;
|
|
pDemod->bandwidth = pTuneParam->bandwidth;
|
|
|
|
result = SLtoACC (pDemod);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
}
|
|
else if (pDemod->state == SONY_DEMOD_STATE_SLEEP) {
|
|
/* Demodulator in Sleep mode */
|
|
pDemod->system = SONY_DTV_SYSTEM_J83B;
|
|
pDemod->bandwidth = pTuneParam->bandwidth;
|
|
|
|
result = SLtoACC (pDemod);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
}
|
|
else {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
|
}
|
|
|
|
/* Update demodulator state */
|
|
pDemod->state = SONY_DEMOD_STATE_ACTIVE;
|
|
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
sony_result_t sony_demod_j83b_Sleep (sony_demod_t * pDemod)
|
|
{
|
|
sony_result_t result = SONY_RESULT_OK;
|
|
SONY_TRACE_ENTER ("sony_demod_j83b_Sleep");
|
|
|
|
if (!pDemod) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
|
}
|
|
|
|
if ((pDemod->state != SONY_DEMOD_STATE_SLEEP) && (pDemod->state != SONY_DEMOD_STATE_ACTIVE)) {
|
|
/* This api is accepted in Sleep and Active states only */
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
|
}
|
|
|
|
result = ACCtoSL (pDemod);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
sony_result_t sony_demod_j83b_CheckTSLock (sony_demod_t * pDemod,
|
|
sony_demod_lock_result_t * pLock)
|
|
{
|
|
sony_result_t result = SONY_RESULT_OK;
|
|
uint8_t arLock = 0;
|
|
uint8_t tsLock = 0;
|
|
uint8_t unlockDetected = 0;
|
|
SONY_TRACE_ENTER ("sony_demod_j83b_CheckTSLock");
|
|
|
|
if ((!pDemod) || (!pLock)) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
|
}
|
|
|
|
if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
|
/* This api is accepted in Active state only */
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
|
}
|
|
|
|
result = sony_demod_j83b_monitor_SyncStat (pDemod, &arLock, &tsLock, &unlockDetected);
|
|
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
if (pDemod->scanMode) {
|
|
if (unlockDetected == 1) {
|
|
*pLock = SONY_DEMOD_LOCK_RESULT_UNLOCKED;
|
|
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
|
}
|
|
}
|
|
|
|
if (arLock == 0) {
|
|
*pLock = SONY_DEMOD_LOCK_RESULT_NOTDETECT;
|
|
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
|
}
|
|
|
|
*pLock = tsLock ? SONY_DEMOD_LOCK_RESULT_LOCKED : SONY_DEMOD_LOCK_RESULT_NOTDETECT;
|
|
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
/*------------------------------------------------------------------------------
|
|
Static Functions
|
|
------------------------------------------------------------------------------*/
|
|
static sony_result_t SLtoACC (sony_demod_t * pDemod)
|
|
{
|
|
sony_result_t result = SONY_RESULT_OK;
|
|
SONY_TRACE_ENTER ("SLtoACC");
|
|
|
|
if (!pDemod) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
|
}
|
|
|
|
/* Configure TS clock Mode and Frequency */
|
|
result = sony_demod_SetTSClockModeAndFreq (pDemod, SONY_DTV_SYSTEM_J83B);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
/* Set SLV-X Bank : 0x00 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x00, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set demod mode */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x17, 0x08) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x00 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set TS/TLV mode */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA9, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Enable demod clock */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x2C, 0x01) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* TADC setting */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x4B, 0x74) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* TADC setting */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x49, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* TADC setting */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x18, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x11 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x11) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* BBAGC TARGET level setting
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------------
|
|
* <SLV-T> 11h 6Ah [7:0] 8'h50 8'h48 OREG_ITB_DAGC_TRGT[7:0]
|
|
*/
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x6A, 0x48) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x10 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x10) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
if (pDemod->tunerOptimize == SONY_DEMOD_TUNER_OPTIMIZE_SONYSILICON) {
|
|
/* ASCOT setting ON
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------------
|
|
* <SLV-T> 10h A5h [0] 8'h01 8'h01 OREG_ITB_GDEQ_EN
|
|
*/
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA5, 0x01) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
else {
|
|
/* ASCOT setting OFF
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------------
|
|
* <SLV-T> 10h A5h [0] 8'h01 8'h00 OREG_ITB_GDEQ_EN
|
|
*/
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA5, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x40 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x40) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* J.83B initial setting
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------
|
|
* <SLV-T> 40h 21h [2] 8'h00 8'h04 OREG_DISABLE_CSI
|
|
* <SLV-T> 40h B3h [2:0] 8'h02 8'h05 OREG_LMS_MU_TRK[2:0]
|
|
*/
|
|
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x21, 0x04) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xB3, 0x05) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Settings for Transmission Parameters
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------------
|
|
* <SLV-T> 40h 1Eh [7] 8'h00 8'h80 OREG_DISCRETE_SEARCH
|
|
*/
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x1E, 0x80) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* J.83B 24MHz Xtal setting
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------------
|
|
* <SLV-T> 40h 8Eh [7:0] 8'h0E 8'h58 OREG_AR_FEC_TIMER[7:0]
|
|
*/
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x8E, 0x58) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x41 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x41) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* J.83B initial setting
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------------
|
|
* <SLV-T> 41h CFh [7:0] 8'h77 8'h99 OREG_FFE_LEAK[3:0],OREG_FBE_LEAK[3:0]
|
|
*/
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xCF, 0x99) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x11 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x11) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* IMR Filter Bandwidth setting
|
|
* slave Bank Addr Bit default Value Name
|
|
* ---------------------------------------------------------------------------------
|
|
* <SLV-T> 11h A3h [4:0] 8'h00 8'h14 OREG_IMR_FORCE_CHANNEL_WIDTH,1'b0,OREG_IMR_CHANNEL_WIDTH[2:0]
|
|
*/
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA3, 0x14) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
{
|
|
/* J.83B 24MHz Xtal setting
|
|
* Slave Bank Addr Bit Default Value Name
|
|
* ---------------------------------------------------------------------------------
|
|
* <SLV-T> 11h 33h [7:0] 8'hC8 8'h00 OCTL_IFAGC_INITWAIT[7:0]
|
|
* <SLV-T> 11h 34h [7:0] 8'h02 8'h03 OCTL_IFAGC_MINWAIT[7:0]
|
|
* <SLV-T> 11h 35h [7:0] 8'h32 8'h3B OCTL_IFAGC_MAXWAIT[7:0]
|
|
*/
|
|
const uint8_t data[3] = { 0x00, 0x03, 0x3B };
|
|
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x33, data, sizeof (data)) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x00 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* TSIF setting
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------------
|
|
* <SLV-T> 00h CEh [0] 8'h01 8'h01 ONOPARITY
|
|
* <SLV-T> 00h CFh [0] 8'h01 8'h01 ONOPARITY_MANUAL_ON
|
|
*/
|
|
{
|
|
const uint8_t data[] = { 0x01, 0x01 };
|
|
|
|
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xCE, data, sizeof (data)) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x10 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x10) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/*
|
|
* Filter settings for Sony silicon tuners
|
|
* slave bank addr bit default name
|
|
* ------------------------------------------------------------------
|
|
* <SLV-T> 10h A6h [7:0] 8'h1E OREG_ITB_COEF01[7:0]
|
|
* <SLV-T> 10h A7h [7:0] 8'h1D OREG_ITB_COEF02[7:0]
|
|
* <SLV-T> 10h A8h [7:0] 8'h29 OREG_ITB_COEF11[7:0]
|
|
* <SLV-T> 10h A9h [7:0] 8'hC9 OREG_ITB_COEF12[7:0]
|
|
* <SLV-T> 10h AAh [7:0] 8'h2A OREG_ITB_COEF21[7:0]
|
|
* <SLV-T> 10h ABh [7:0] 8'hBA OREG_ITB_COEF22[7:0]
|
|
* <SLV-T> 10h ACh [7:0] 8'h29 OREG_ITB_COEF31[7:0]
|
|
* <SLV-T> 10h ADh [7:0] 8'hAD OREG_ITB_COEF32[7:0]
|
|
* <SLV-T> 10h AEh [7:0] 8'h29 OREG_ITB_COEF41[7:0]
|
|
* <SLV-T> 10h AFh [7:0] 8'hA4 OREG_ITB_COEF42[7:0]
|
|
* <SLV-T> 10h B0h [7:0] 8'h29 OREG_ITB_COEF51[7:0]
|
|
* <SLV-T> 10h B1h [7:0] 8'h9A OREG_ITB_COEF52[7:0]
|
|
* <SLV-T> 10h B2h [7:0] 8'h28 OREG_ITB_COEF61[7:0]
|
|
* <SLV-T> 10h B3h [7:0] 8'h9E OREG_ITB_COEF62[7:0]
|
|
*/
|
|
if (pDemod->tunerOptimize == SONY_DEMOD_TUNER_OPTIMIZE_SONYSILICON) {
|
|
const uint8_t itbCoef[14] = {
|
|
/* COEF01 COEF02 COEF11 COEF12 COEF21 COEF22 COEF31 COEF32 COEF41 COEF42 COEF51 COEF52 COEF61 COEF62 */
|
|
0x31, 0xA8, 0x29, 0x9B, 0x27, 0x9C, 0x28, 0x9E, 0x29, 0xA4, 0x29, 0xA2, 0x29, 0xA8
|
|
};
|
|
|
|
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA6, itbCoef, 14) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
|
|
/* Set tuner and bandwidth specific settings */
|
|
result = SLtoACC_BandSetting (pDemod);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x00 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Disable HiZ Setting 1 (TAGC, SAGC(Hi-Z), TSVALID, TSSYNC, TSCLK) */
|
|
if (sony_i2c_SetRegisterBits (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x80, 0x08, 0x1F) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Disable HiZ Setting 2 */
|
|
result = sony_demod_SetTSDataPinHiZ (pDemod, 0);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
static sony_result_t SLtoACC_BandSetting(sony_demod_t * pDemod)
|
|
{
|
|
SONY_TRACE_ENTER ("SLtoACC_BandSetting");
|
|
|
|
if (!pDemod) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x10 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x10) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
switch (pDemod->bandwidth) {
|
|
case SONY_DTV_BW_J83B_5_06_5_36_MSPS:
|
|
{
|
|
/*
|
|
* <IF freq setting>
|
|
* slave bank addr bit default value name
|
|
* ---------------------------------------------------------------------------------
|
|
* <SLV-T> 10h B6h [7:0] 8'h1F user defined OREG_DNCNV_LOFRQ_T[23:16]
|
|
* <SLV-T> 10h B7h [7:0] 8'h38 user defined OREG_DNCNV_LOFRQ_T[15:8]
|
|
* <SLV-T> 10h B8h [7:0] 8'h32 user defined OREG_DNCNV_LOFRQ_T[7:0]
|
|
*/
|
|
uint8_t data[3];
|
|
data[0] = (uint8_t) ((pDemod->iffreqConfig.configJ83B_5_06_5_36 >> 16) & 0xFF);
|
|
data[1] = (uint8_t) ((pDemod->iffreqConfig.configJ83B_5_06_5_36 >> 8) & 0xFF);
|
|
data[2] = (uint8_t) (pDemod->iffreqConfig.configJ83B_5_06_5_36 & 0xFF);
|
|
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xB6, data, sizeof (data)) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
|
|
{
|
|
/*
|
|
* Settings for Transmission Parameters
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------------
|
|
* <SLV-T> 40h 14h [4:0] 8'h1F 8'h14 OREG_QAM_ENABLE[4:0]
|
|
* <SLV-T> 40h 26h [3:0] 8'h09 8'h07 OREG_TRIAL_SRATE0[11:8]
|
|
* <SLV-T> 40h 27h [7:0] 8'h9A 8'h26 OREG_TRIAL_SRATE0[7:0]
|
|
* <SLV-T> 40h 28h [3:0] 8'h00 8'h06 OREG_TRIAL_SRATE1[11:8]
|
|
* <SLV-T> 40h 29h [7:0] 8'hEE 8'hBE OREG_TRIAL_SRATE1[7:0]
|
|
*/
|
|
const uint8_t symRate[4] = {
|
|
/* tsrate1 tsrate2 tsrate3 tsrate4 */
|
|
0x07, 0x26, 0x06, 0xBE
|
|
};
|
|
|
|
/* Set SLV-T Bank : 0x40 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x40) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x14, 0x14) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x26, symRate, 4) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
break;
|
|
case SONY_DTV_BW_J83B_5_60_MSPS:
|
|
{
|
|
/*
|
|
* <IF freq setting>
|
|
* slave bank addr bit default value name
|
|
* ---------------------------------------------------------------------------------
|
|
* <SLV-T> 10h B6h [7:0] 8'h1F user defined OREG_DNCNV_LOFRQ_T[23:16]
|
|
* <SLV-T> 10h B7h [7:0] 8'h38 user defined OREG_DNCNV_LOFRQ_T[15:8]
|
|
* <SLV-T> 10h B8h [7:0] 8'h32 user defined OREG_DNCNV_LOFRQ_T[7:0]
|
|
*/
|
|
uint8_t data[3];
|
|
data[0] = (uint8_t) ((pDemod->iffreqConfig.configJ83B_5_60 >> 16) & 0xFF);
|
|
data[1] = (uint8_t) ((pDemod->iffreqConfig.configJ83B_5_60 >> 8) & 0xFF);
|
|
data[2] = (uint8_t) (pDemod->iffreqConfig.configJ83B_5_60 & 0xFF);
|
|
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xB6, data, sizeof (data)) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
|
|
{
|
|
/*
|
|
* Settings for Transmission Parameters
|
|
* slave Bank Addr Bit default Value Name
|
|
* ----------------------------------------------------------------------------------
|
|
* <SLV-T> 40h 14h [4:0] 8'h1F 8'h10 OREG_QAM_ENABLE[4:0]
|
|
* <SLV-T> 40h 26h [3:0] 8'h09 8'h07 OREG_TRIAL_SRATE0[11:8]
|
|
* <SLV-T> 40h 27h [7:0] 8'h9A 8'h77 OREG_TRIAL_SRATE0[7:0]
|
|
* <SLV-T> 40h 28h [3:0] 8'h00 8'h07 OREG_TRIAL_SRATE1[11:8]
|
|
* <SLV-T> 40h 29h [7:0] 8'hEE 8'h77 OREG_TRIAL_SRATE1[7:0]
|
|
*/
|
|
const uint8_t symRate[4] = {
|
|
/* tsrate1 tsrate2 tsrate3 tsrate4 */
|
|
0x07, 0x77, 0x07, 0x77
|
|
};
|
|
|
|
/* Set SLV-T Bank : 0x40 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x40) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x14, 0x10) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x26, symRate, 4) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
|
}
|
|
|
|
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
|
}
|
|
|
|
static sony_result_t ACCtoACC (sony_demod_t * pDemod)
|
|
{
|
|
sony_result_t result = SONY_RESULT_OK;
|
|
SONY_TRACE_ENTER ("ACCtoACC");
|
|
|
|
if (!pDemod) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
|
}
|
|
|
|
/* Disable TS output */
|
|
result = sony_demod_SetStreamOutput (pDemod, 0);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
/* Set tuner and bandwidth specific settings */
|
|
result = SLtoACC_BandSetting (pDemod);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
static sony_result_t ACCtoSL (sony_demod_t * pDemod)
|
|
{
|
|
sony_result_t result = SONY_RESULT_OK;
|
|
SONY_TRACE_ENTER ("ACCtoSL");
|
|
|
|
if (!pDemod) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
|
}
|
|
|
|
/* Disable TS output */
|
|
result = sony_demod_SetStreamOutput (pDemod, 0);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x00 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Enable Hi-Z setting 1 (TAGC, SAGC, TSVALID, TSSYNC, TSCLK) */
|
|
if (sony_i2c_SetRegisterBits (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x80, 0x1F, 0x1F) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Enable Hi-Z setting 2 */
|
|
result = sony_demod_SetTSDataPinHiZ (pDemod, 1);
|
|
if (result != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (result);
|
|
}
|
|
|
|
/* Cancel J.83B Demod parameter Setting
|
|
* slave Bank Addr Bit default Value Name
|
|
* ---------------------------------------------------------------------------------
|
|
* <SLV-T> 11h A3h [4:0] 8'h00 8'h00 OREG_IMR_FORCE_CHANNEL_WIDTH,1'b0,OREG_IMR_CHANNEL_WIDTH[2:0]
|
|
* <SLV-T> 40h 21h [2] 8'h00 8'h00 OREG_DISABLE_CSI
|
|
* <SLV-T> 40h C3h [2] 8'h00 8'h00 OREG_BNDET_EN_64
|
|
* <SLV-T> 40h B3h [2:0] 8'h02 8'h02 OREG_LMS_MU_TRK[2:0]
|
|
* <SLV-T> 40h 1Eh [7] 8'h00 8'h00 OREG_DISCRETE_SEARCH
|
|
* <SLV-T> 40h 8Eh [7:0] 8'h0E 8'h0E OREG_AR_FEC_TIMER[7:0]
|
|
* <SLV-T> 41h CFh [7:0] 8'h77 8'h77 OREG_FFE_LEAK[3:0],OREG_FBE_LEAK[3:0]
|
|
* <SLV-T> 40h 14h [4:0] 8'h1F 8'h1F OREG_QAM_ENABLE[4:0]
|
|
* <SLV-T> 40h 26h [3:0] 8'h09 8'h09 OREG_TRIAL_SRATE0[11:8]
|
|
* <SLV-T> 40h 27h [7:0] 8'h9A 8'h9A OREG_TRIAL_SRATE0[7:0]
|
|
* <SLV-T> 40h 28h [3:0] 8'h00 8'h00 OREG_TRIAL_SRATE1[11:8]
|
|
* <SLV-T> 40h 29h [7:0] 8'hEE 8'hEE OREG_TRIAL_SRATE1[7:0]
|
|
*/
|
|
|
|
/* Set SLV-T Bank : 0x11 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x11) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA3, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x40 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x40) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x21, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xC3, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xB3, 0x02) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x1E, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x8E, 0x0E) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x41 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x41) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xCF, 0x77) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x40 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x40) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x14, 0x1F) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
{
|
|
uint8_t data[4] = {0x09, 0x9A, 0x00, 0xEE};
|
|
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x26, data, 4) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
}
|
|
|
|
/* Set SLV-X Bank : 0x00 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x00, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* TADC setting */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x18, 0x01) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set SLV-T Bank : 0x00 */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* TADC setting */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x49, 0x33) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* TADC setting */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x4B, 0x21) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Demodulator SW reset */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xFE, 0x01) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Disable demodulator clock */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x2C, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set tstlv mode to default */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA9, 0x00) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
/* Set demodulator mode to default */
|
|
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x17, 0x01) != SONY_RESULT_OK) {
|
|
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
|
}
|
|
|
|
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
|
}
|