Esempio n. 1
0
/*!
*******************************************************************************
**
** \brief  Configure GPIO for PWM
**
**         This function configure GPIO for PWM.
**
** \param channel The PWM channel that specified.
** \param ioNumber The GPIO number configured for this PWM channel.
**
** \return
**         - #GD_OK if successful
******************************************************************************/
GERR  GD_PWM_Open(U8 channel,U32 ioNumber)
{
#ifdef DEBUG_PRINT
    printf("Set PWM%d ON \n",channel);
#endif

    switch(channel)
    {
        case 0:
            GD_GPIO_Open(ioNumber,GD_GPIO_TYPE_OUTPUT_PWM0_OUT,NULL,&Gpiohandle[channel]);
            break;
        case 1:
            GD_GPIO_Open(ioNumber,GD_GPIO_TYPE_OUTPUT_PWM1_OUT,NULL,&Gpiohandle[channel]);
            break;
        case 2:
            GD_GPIO_Open(ioNumber,GD_GPIO_TYPE_OUTPUT_PWM2_OUT,NULL,&Gpiohandle[channel]);
            break;
        case 3:
            GD_GPIO_Open(ioNumber,GD_GPIO_TYPE_OUTPUT_PWM3_OUT,NULL,&Gpiohandle[channel]);
            break;
        default:
            break;
    }
    return GD_OK;
}
Esempio n. 2
0
/*!
*******************************************************************************
**
** \brief  Controls LED550 and LED551 near ICC card connector.
**
** \param  index     Index of the LED to be controlled: 0 = LED550, 1 = 551.
** \param  flgOffOn  Type of control signal.
** \param  pOption   Optional parameters (not used yet).
**
** \return Possible return codes:
**         - #GD_OK
**         - return codes from subroutines
**
** \sa     gd_fhw_ControlLed_SMARTMPEG_STB01
**
******************************************************************************/
static GERR gd_fhw_ControlLed_SMARTMPEG_STB01 (S32 index,
                                               GD_GHW_LED_CONTROL_E flgOffOn,
                                               void *pOption)
{
    GERR      retVal = GD_OK;

    if (index == 0)
    {
        /* This controls LED550 (VPPEN of ICC card) */
        if (Gpio3Handle == NULL)
        {
            retVal = GD_GPIO_Open(GD_GPIO_3, GD_GPIO_TYPE_OUTPUT_PUSH_PULL, NULL, &Gpio3Handle);
            if (retVal != GD_OK)
            {
                #ifdef GD_FHW_SMARTMPEG_STB01_DEBUG
                if (retVal == GD_ERR_ALREADY_OPEN)
                    GM_PrStr("\n[gd_fhw_ControlLed_SMARTMPEG_STB01] ERR: GPIO3 already open\n");
                else
                    GM_PrStr("\n[gd_fhw_ControlLed_SMARTMPEG_STB01] ERR: GPIO3 could not be opened\n");
                #endif
                return (retVal);
            }
        }
        if   (flgOffOn == GD_GHW_LED_OFF)
            retVal = GD_GPIO_Write(Gpio3Handle, 0);
        else
            retVal = GD_GPIO_Write(Gpio3Handle, 1);
    } /* if (index ... */
    else
    {
        /* This controls LED551 (VCCEN of ICC card) */
        if (Gpio6Handle == NULL)
        {
            retVal = GD_GPIO_Open(GD_GPIO_6, GD_GPIO_TYPE_OUTPUT_PUSH_PULL, NULL, &Gpio6Handle);
            if (retVal != GD_OK)
            {
                #ifdef GD_FHW_SMARTMPEG_STB01_DEBUG
                if (retVal == GD_ERR_ALREADY_OPEN)
                    GM_PrStr("\n[gd_fhw_ControlLed_SMARTMPEG_STB01] ERR: GPIO6 already open\n");
                else
                    GM_PrStr("\n[gd_fhw_ControlLed_SMARTMPEG_STB01] ERR: GPIO6 could not be opened\n");
                #endif
                return (retVal);
            }
        }
        if   (flgOffOn == GD_GHW_LED_OFF)
            retVal = GD_GPIO_Write(Gpio6Handle, 0);
        else
            retVal = GD_GPIO_Write(Gpio6Handle, 1);
    } /* if (index == 0) ... else */

    return (retVal);
}
Esempio n. 3
0
/*!
*******************************************************************************
**
** \brief  Controls the reset for the front ends.
**
** \param  index      Index of the front end to be resetted.
** \param  cntrlVal   Type of reset signal.
** \param  pOption    Optional parameters (not used yet).
**
** \return Possible return codes:
**         - #GD_OK
**         - #GD_ERR_BAD_PARAMETER
**
** \sa     gd_fhw_ControlFeReset_SMARTMPEG_M_EVB
**
******************************************************************************/
static GERR gd_fhw_ControlFeReset_SMARTMPEG_M_EVB(S32 index, GD_GHW_RESET_CONTROL_E cntrlVal, void *pOption)
{
    GERR      retVal = GD_OK;
    GD_HANDLE h;
    U32       delay;
    U8        pinNum;

    /* on this board the front ends use separate reset signals, we need to distinguish according to index */
    switch (index)
    {
        case 0:
            /* reset Front end 1 */
            pinNum  = GD_FHW_SMARTMPEG_M_EVB_FE1PIN;
        break;
        case 1:
            /* reset Front end 2 */
            pinNum  = GD_FHW_SMARTMPEG_M_EVB_FE2PIN;
        break;
        default:
            return (GD_ERR_BAD_PARAMETER);
    }

    switch(cntrlVal)
    {
        case(GD_GHW_RESET_INACTIVE):
            retVal = GD_GPIO_Open(GD_GPIO_39, GD_GPIO_TYPE_OUTPUT_1, NULL, &h);
            retVal = GD_GPIO_Write(h, 1); // FE reset high
            GD_GPIO_Close(&h);
        break;
        case(GD_GHW_RESET_ACTIVE):
            retVal = GD_GPIO_Open(GD_GPIO_39, GD_GPIO_TYPE_OUTPUT_1, NULL, &h);
            retVal = GD_GPIO_Write(h, 0); // FE reset low
            GD_GPIO_Close(&h);
        break;
        case(GD_GHW_RESET_PULSE):
            retVal = GD_GPIO_Open(GD_GPIO_39, GD_GPIO_TYPE_OUTPUT_1, NULL, &h);
            retVal = GD_GPIO_Write(h, 0); // FE reset low
            if (retVal != GD_OK)
                return (retVal);
            delay = GD_FHW_SIMPLE_RESET_DELAY;
            while (delay--);
            retVal = GD_GPIO_Write(h, 1); // FE reset high
            GD_GPIO_Close(&h);
        break;
        default:
            /* do nothing */
            retVal = GD_ERR_BAD_PARAMETER;
    }

    return retVal;
}
Esempio n. 4
0
static GERR gd_fhw_ControlTsMuxing_SMARTMPEG_STB01(S32 index, GD_GHW_EXT_TS656_MUX_E cntrlVal, void *pOption)
{
  GD_HANDLE h;
  U8 *pSel;
  int Option;
  
        pSel = pOption;
        Option = *pSel;

        if ((cntrlVal==GD_GHW_EXT_656_INP_P_MUX)||(cntrlVal==GD_GHW_EXT_656_INP_N_MUX)) {
           cntrlVal = GD_GHW_EXT_TS_INP_MUX;    // this is the same
        }

        if (cntrlVal==GD_GHW_EXT_TS_INP_MUX) {

          if      (Option==GD_FHW_TS656_EXT_MUX_DIRECT_TS_INDEX) 
          {
//              XD_PrStr("\n->Configure TS-B-Input via LVDS-Interface");
              GD_GPIO_Open(GD_GPIO_9, GD_GPIO_TYPE_OUTPUT_PUSH_PULL, NULL, &h);
              GD_GPIO_Write(h, 0);
              GD_GPIO_Close(&h);
              #if defined(GK6106)
              GD_TSD_InputSelector(GD_TSD_INPUT_FROM_OTHER_TSD, GD_TSD_INPUT_FROM_OTHER_TSD, GD_TSD_INPUT_FROM_OTHER_TSD, GD_TSD_INPUT_FROM_OTHER_TSD);
              #else
              GD_TSD_InputSelector(GD_TSD_INPUT_FROM_OTHER_TSD, GD_TSD_INPUT_FROM_OTHER_TSD);
              #endif
          }
          else if (Option==GD_FHW_TS656_EXT_MUX_FE0_INDEX)
          {
//              XD_PrStr("\n->Configure TS-A-Input from FE");
              GD_GPIO_Open(GD_GPIO_9, GD_GPIO_TYPE_OUTPUT_PUSH_PULL, NULL, &h);
              GD_GPIO_Write(h, 1);
              GD_GPIO_Close(&h);
              #if defined(GK6106)
              GD_TSD_InputSelector(GD_TSD_INPUT_FROM_DEFAULT, GD_TSD_INPUT_FROM_DEFAULT, GD_TSD_INPUT_FROM_DEFAULT, GD_TSD_INPUT_FROM_DEFAULT);
              #else
              GD_TSD_InputSelector(GD_TSD_INPUT_FROM_DEFAULT, GD_TSD_INPUT_FROM_DEFAULT);
              #endif
          }
        }

        else if (cntrlVal==GD_GHW_EXT_656_OUT_P_MUX)
        {
//              XD_PrStr("\n->Configure TS-B 656 Output");
              GD_GPIO_Open(GD_GPIO_9, GD_GPIO_TYPE_INPUT, NULL, &h);
              GD_GPIO_Close(&h);
        }

        return (GD_OK);
}
Esempio n. 5
0
GERR GD_FE_DIB7070X_Open(U8 index, GD_FE_DEVICE_DATA_S* pDeviceData)
{
    GERR error = GD_OK; //Modified by David Cao 2008-07-30

    if (index >= GD_FE_MAX_NUM) return GD_ERR_BAD_PARAMETER;
    if (pDeviceData == NULL) return GD_ERR_BAD_PARAMETER;

    /* check device data */
    if (pDeviceData->pSystemParams == NULL) return GD_ERR_BAD_PARAMETER;
    if (pDeviceData->systemType != GD_FE_SYSTEM_TYPE_TERRESTRIAL) return GD_ERR_BAD_PARAMETER;

    /* store pointer to device data */
    pData[index] = pDeviceData;

    /* reset the dibcom chip */
    #if 0
    if (pDeviceData->ghwIndex >= 0)
    {
        #if defined(SMARTMPEG_C)
        error = GD_GPIO_Open(pDeviceData->ghwIndex, GD_GPIO_TYPE_OUTPUT_1, NULL,&pData[index]->handleI2C);
        #endif
        if(error != GD_OK)
        {
            #ifdef GD_FE_MB86667_DEBUG01
            GM_Printf("MB86667_Tune(%i) = 0x%X\n",index,(U32)error);
            #endif
            return(error);
        }
        GD_GPIO_Write(pData[index]->handleI2C, 1);
        FE_SleepTime(10);
        GD_GPIO_Write(pData[index]->handleI2C, 0);
        FE_SleepTime(10);
        GD_GPIO_Write(pData[index]->handleI2C, 1);
        FE_SleepTime(10);
    }
    #endif
    /* Initial dibcom 7070 chip */
 //   test_dibcom_7070();
    error = dib_init();
    if( error != GD_OK )
        GM_Printf("dib_init error!\n");

    /* fill device data structure with call back functions */
    pData[index]->feCloseFct             = GD_FE_DIB7070X_Close;
    pData[index]->feSetSystemParamsFct   = GD_FE_DIB7070X_SetSystemParams;
    pData[index]->feResetFct             = GD_FE_DIB7070X_Reset;
    pData[index]->feTuneFct              = GD_FE_DIB7070X_Tune;
    pData[index]->feScanFct              = NULL;
    pData[index]->feSendDiseqcCommandFct = NULL;
    pData[index]->feGetStatusFct         = GD_FE_DIB7070X_GetStatus;
    pData[index]->feGetFECFct            = NULL;
    pData[index]->feGetAFCFct            = GD_FE_DIB7070X_GetAFC;
    pData[index]->feGetBERFct            = GD_FE_DIB7070X_GetBER;
    pData[index]->feGetSignalQualityFct  = GD_FE_DIB7070X_GetSignalQuality;
    pData[index]->feGetSignalStrengthFct = GD_FE_DIB7070X_GetSignalStrength;
    pData[index]->feGetTuneParamsFct     = GD_FE_DIB7070X_GetTuneParams;
    pData[index]->feSetAntennaPowerFct   = NULL;

    return GD_OK;
}
Esempio n. 6
0
/*!
*******************************************************************************
**
** \brief  reconfigures a GPIO.
**
** \param  number     GPIO number.
** \param  type       Type of gpio (output, input, ...).
** \param  pHandle    Pointer to previous handle of the GPIO, can also be
**                    NULL if this GPIO was not opened before.
**
** \return Possible return codes:
**         - #GD_OK
**         - return codes from subroutines
**
** \sa     gd_fhw_SMARTMPEG_STB01_reconfigGpio
**
******************************************************************************/
static GERR gd_fhw_SMARTMPEG_STB01_reconfigGpio (U8 number,
                                                 GD_GPIO_TYPE_E type,
                                                 GD_HANDLE* pHandle)
{
    GERR retVal;

    /* it would be nicer if we could open the GPIOs in the init function just once.
       But to be able to reconfigure it from output to input we must close and open it again. */
    if (*pHandle != NULL)
    {
        retVal = GD_GPIO_Close(pHandle);
        if (retVal != GD_OK)
        {
            #ifdef GD_FHW_SMARTMPEG_STB01_DEBUG
                GM_PrStr("\n[gh_fhw_SMARTMPEG_STB01_reconfigGpio] ERR: GPIO could not be closed\n");
            #endif
            return (retVal);
        }
    }
    
    retVal = GD_GPIO_Open(number, type, NULL, pHandle);
    if (retVal != GD_OK)
    {
        #ifdef GD_FHW_SMARTMPEG_STB01_DEBUG
            GM_PrStr("\n[gh_fhw_SMARTMPEG_STB01_reconfigGpio] ERR: GPIO could not be opened\n");
        #endif
        return (retVal);
    }
    
    return (GD_OK);
}
Esempio n. 7
0
GERR GD_FE_A17_Init()
{
    GERR retVal = GD_OK;
    GD_HANDLE h;
    if ( AntennaPowerInitial == GFALSE )
    {
        retVal = GD_GPIO_Open(GD_GPIO_30, GD_GPIO_TYPE_OUTPUT_1, NULL, &h);
        if (retVal != GD_OK)
        {
            //GM_PrStr("\n[GD_FE_A17_Open] ERR: GPIO_30 could not be opened\n");
            return (retVal);
        }
        //MB86A17_sleep(10);
        GD_GPIO_Write(h, 0);
        //MB86A17_sleep(10);        
        GD_GPIO_Write(h, 1);        
    }

    #if 0
    retVal = MB86A17_init();
    if ( retVal != GD_OK )
        return GD_ERR_FE_OTHER;
    #endif
    
    return retVal;
}
Esempio n. 8
0
/******************************************************************************
**
** \brief  Resets the front-end.
**
** \param  index          Internal index of front-end.
**
** \return Possible return codes:
**         - #GD_OK
**         - #GD_ERR_BAD_PARAMETER
**         - #GD_ERR_FEATURE_NOT_SUPPORTED
**
******************************************************************************/
GERR GD_FE_Altobeam_Reset(U8 index)
{
    #if 0
    int i;
    //U32 data;
    GD_HANDLE handle;
    if (index >= GD_FE_MAX_NUM)
        return GD_ERR_BAD_PARAMETER;
    GD_GPIO_Open(GD_GPIO_2, GD_GPIO_TYPE_OUTPUT_1, NULL, &handle);
    GK5101_Delay(100);
    GD_GPIO_SetType(handle, GD_GPIO_TYPE_OUTPUT_0);
    //GK5101_Delay(100);
    //GD_GPIO_SetType(handle, GD_GPIO_TYPE_OUTPUT_1);
    //GK5101_Delay(100);
    GD_GPIO_Close(&handle);
    /*if(pTSD2Handle==NULL)     
        return GD_ERR_NOT_INITIALIZED;
    
    data=GH_VE_getm_ITRU656DirData();
    
    GD_GPIO_WriteTsd2(pTSD2Handle,(U16)data&0xFD);
    A1108_IBSP_Delay(10);
    GD_GPIO_WriteTsd2(pTSD2Handle,(U16)data|0x02);
    A1108_IBSP_Delay(10);
    */
    #endif
    return GD_OK;
}
Esempio n. 9
0
/*!
*******************************************************************************
**
** \brief  Cancel the write/read process of I2C bus.
**
** \sa      GD_I2C_Read() <br>
**          GD_I2C_Write()
**
******************************************************************************/
void GD_I2C_CancelProcess(void)
{
    GERR ferr;
    int i;

    if (i2c_initialized == GFALSE) 
        return; // GD_ERR_NOT_INITIALIZED;

    GD_GPIO_Close(&i2c_sda_handle);
    GD_GPIO_Close(&i2c_scl_handle);
    ferr = GD_GPIO_Open(i2c_sda_pin, I2C_GPIO_TYPE_OUTPUT, NULL, &i2c_sda_handle);
    ferr = GD_GPIO_Open(i2c_scl_pin, I2C_GPIO_TYPE_OUTPUT, NULL, &i2c_scl_handle);
    GD_GPIO_Write(i2c_sda_handle, 1);            // set SDA to high
    GD_GPIO_Write(i2c_scl_handle, 1);            // set SCL to high

    for (i = 0;i < SI2C_BUS_FREE_TIME;i++); // delay loop
}
Esempio n. 10
0
/*---------------------------------------------------------------------------*/
GERR GND_I2C_Init(GD_I2C_INIT_PARAMS_S* paramsP)
{
    GD_HANDLE gpioHd;
    /* Reset the SCL & SDA pin of I2C */
    GD_GPIO_Open(GD_GPIO_INOUT_I2C_CLK , GD_GPIO_TYPE_INOUT_I2C_CLK, 0, &gpioHd );
    GD_GPIO_Open(GD_GPIO_INOUT_I2C_DATA , GD_GPIO_TYPE_INOUT_I2C_DATA, 0, &gpioHd );

    /* initialize I2c registers */
    /*
    GH_I2C_set_ControlReg0(0L);
    GH_I2C_set_ControlReg0_USE_ADD(1);
    GH_I2C_set_ControlReg0_AM_ON(1);

    GH_I2C_set_ControlReg0_SPIKE_FILT(1);
    GH_I2C_set_ControlReg0_OI_DLY_AL(1);
    CtrlReg0Shadow = GH_I2C_get_ControlReg0();
    */
    CtrlReg0Shadow = BIT7|BIT4|BIT10|BIT11;
    GNH_EXT_SetRegister(REG_I2C_CONTROLREG0,CtrlReg0Shadow);
    /*
    GH_I2C_set_ControlReg1(0L);
    GH_I2C_set_ControlReg1_SL_SLA_ADD(MPEG_SLAADD>>1);
    CtrlReg1Shadow = GH_I2C_get_ControlReg1();
    */
    CtrlReg1Shadow = MPEG_SLAADD;
    GNH_EXT_SetRegister(REG_I2C_CONTROLREG1,CtrlReg1Shadow);
    /*
    GH_I2C_set_IRQMask0(0L);
    GH_I2C_set_IRQMask1(0L);
    */
    GNH_EXT_SetRegister(REG_I2C_IRQMASK0,0);
    GNH_EXT_SetRegister(REG_I2C_IRQMASK1,0);

    /* Open the I2C interrupt */
    GD_INT_OPEN_PARAMS_S paramsInt;

    paramsInt.active         = GD_INT_INVERT_IRQ;
    paramsInt.priority       = GD_INT_LOW_PRIORITY;
    paramsInt.sensitivity    = GD_INT_LEVEL_SENSITIVE;
    paramsInt.type           = GD_INT_IIC_IRQ;
    paramsInt.isrFct.lowPrio = GND_ISR_I2C_Handler;

    GD_INT_Open(&paramsInt, NULL);
    return GD_OK;
}
Esempio n. 11
0
/*!
*******************************************************************************
**
** \brief  Initializes the driver.
**
**         This function initializes the driver. It is called only once
**         during boot time. It sets the ISR and the dedicated GPIO pins
**         for SDA and SCL.
**
**         The GPIO pins must be i2c_initialized in this function for each channel.
**         With the open function you are able to select different channels
**         driving multiple devices on each channel using different slave 
**         adresses.
**
**         Currently the driver supports only one channel.
**
** \note   If you are using the software I2C driver (\c gd_i2c_sw.c) you have 
**         to assign GPIO pins for SDA and SCL of the dedicated channel. 
**         If you are using the hardware driver (\c gd_i2c.c) the GPIO pins
**         are autmatically assigned (only SmartMPEG and SmartMPEG-E).
**
** \note   SmartMPEG-L has no hardware I2C and therefore can not not use the 
**         driver (\c gd_i2c.c).
**
** \param  paramsP  Pointer to init parameter structure.
**
** \return Possible return codes:
**         - \c #GD_OK
**         - \c #GD_ERR_ALREADY_INITIALIZED
**         - \c #GD_ERR_I2C_INT_ERR
**         - \c #GD_ERR_BAD_PARAMETER
**
** \sa     GD_I2C_Open()
** \sa     \c GD_I2C_INIT_PARAMS_S
**
******************************************************************************/
GERR GD_I2C_Init(GD_I2C_INIT_PARAMS_S* paramsP)
{
    int i;
    GERR ferr;

    if( i2c_initialized == GTRUE )
        return  GD_ERR_ALREADY_INITIALIZED;
        
    i2c_initialized = GTRUE;

    if ((paramsP->mode != GD_I2C_AUTO_MASTER_MODE)&&
        (paramsP->mode != GD_I2C_GENERIC_MASTER_MODE))
        return GD_ERR_BAD_PARAMETER;

    #if defined(SMARTMPEG) || defined(SMARTMPEG_E)
        i2c_sda_pin = GD_GPIO_I2C_SDA;
        i2c_scl_pin = GD_GPIO_I2C_SCL;
    #endif

    #if defined(SMARTMPEG_L) || defined(SMARTMPEG_C) || defined(SMARTMPEG_M) || defined(SMARTMPEG_D) || defined(GK6105S) || defined(GK6106)
        i2c_sda_pin = paramsP->gpioSdaPinCh1;
        i2c_scl_pin = paramsP->gpioSclPinCh1;
    #endif
    
    /* Reset the SCL & SDA pin of I2C */
//    GD_GPIO_Close(&i2c_sda_handle);
//    GD_GPIO_Close(&i2c_scl_handle);

    ferr = GD_GPIO_Open(i2c_sda_pin, I2C_GPIO_TYPE_OUTPUT, NULL, &i2c_sda_handle);
    if (ferr != GD_OK)
        return GD_ERR_I2C_INT_ERR;
        
    ferr = GD_GPIO_Open(i2c_scl_pin, I2C_GPIO_TYPE_OUTPUT, NULL, &i2c_scl_handle);
    if (ferr != GD_OK)
        return GD_ERR_I2C_INT_ERR;
        
    GD_GPIO_Write(i2c_sda_handle, 1);        // set SDA to high
    GD_GPIO_Write(i2c_scl_handle, 1);        // set SCL to high
    
    for (i = 0;i < SI2C_BUS_FREE_TIME;i++); // delay loop
    
    i2cMutexFunctionRegister(paramsP->mutexWaitFunc, paramsP->mutexReleaseFunc);
    return GD_OK;
}
Esempio n. 12
0
int XD_UaInitUart(GD_UART_BAUDRATE_E BaudRate)
{
    volatile T_SMARTMPEG_UART_PORT *pUART;
    OpU8 RxChar;
    U32 mode;

    // Steven Yu
    GD_HANDLE gpioHd;
#ifdef DEBUG
    GD_HANDLE uartHd;
#endif
    GD_GPIO_Open(GD_GPIO_28 , GD_GPIO_TYPE_INPUT_UART_RX,  0, &gpioHd );
    GD_GPIO_Open(GD_GPIO_29 , GD_GPIO_TYPE_OUTPUT_UART_TX, 0, &gpioHd );
    //XD_CiSetMpegSRegBits(SHR16IDX_GPIO_SELECT_LOW, GPIO_L_UART_TX|GPIO_L_UART_RX);    // enable UART operation
#ifdef DEBUG
    OSAddTask((void (*)(void *))UartTask, TASK_UART_PRIO, STACK_UART, UART_TASK_STK_SIZE);
    GD_INT_OPEN_PARAMS_S intparams;

    intparams.type           = GD_INT_UART_IRQ;
    intparams.sensitivity    = GD_INT_LEVEL_SENSITIVE;
    intparams.active         = GD_INT_INVERT_IRQ;
    intparams.priority       = GD_INT_LOW_PRIORITY;
    intparams.isrFct.lowPrio = ISR_UART_Handler;
    GNH_EXT_SetRegister(REG_UART_IRQCLEAR,0x03); /* clear interrupt */
    GD_INT_Open(&intparams, &uartHd);
#endif

    mode = getDataRateMode(BaudRate);

    pUART = (volatile T_SMARTMPEG_UART_PORT*) REG_UART_DATA; // Init Pointer to UART Control Registers
    pUART->LineControl = 0x00F0;    // 8 Databits, 1 Stop, no parity
    pUART->Enable      = 0x0003;    // Internal clock, RX enable
    pUART->Delta1      = BaudRateTable[mode * 4 + 2] & 0xff;    //0x53;
    pUART->ClkBound    = BaudRateTable[mode * 4 + 1] & 0xffff;  //0x0D;      // DPLL bound
    pUART->DifDelt     = BaudRateTable[mode * 4 + 3] & 0x3ff;   //0x2D;
    pUART->DmaReqCtrl  = 0x0000;
    //pUART->IrqMaskReg  = BIT1;       // enable RxInt. just for Test
    pUART->IrqMaskReg  = 0;          // disable RxInt.
    RxChar = pUART->Data;            // empty receive register
    return RxChar;
}
Esempio n. 13
0
GERR GD_FP_Init_FD650()
{
    GERR Error = GD_OK;
    U8 testOne = 0x01;
    U8 testTwo = 0x80;

    if( initialised == GTRUE )
        return GD_ERR_ALREADY_INITIALIZED;

    initialised = GTRUE;

    //IO³õʼ»¯
    Error = GD_GPIO_Open(GD_GPIO_43, GD_GPIO_TYPE_OUTPUT_1, NULL, &FD650ClockHandle);
    if(Error != GD_OK)
        return Error;
    Error = GD_GPIO_Open(GD_GPIO_45, GD_GPIO_TYPE_OUTPUT_1, NULL, &FD650DataHandle);
    if(Error != GD_OK)
        return Error;

    GD_FP_FD650_WriteCmd_Data( 0x48, &testOne);
    GD_FP_FD650_WriteCmd_Data( FRONT_LED_THREE, &testTwo);

    return GD_OK;
}
Esempio n. 14
0
GERR GD_FE_LGS8GA6_Reset(U8 index)
{
    GERR ferr = GD_OK;

    if ( index >= GD_FE_MAX_NUM )
    {
        return GD_ERR_BAD_PARAMETER;
    }
    /* reset the LGS8GA6 chip */
    if ( pData[index]->ghwIndex>= 0 )
    {
/*        error = GD_GPIO_Open(pData[index]->ghwIndex,
                             GD_GPIO_TYPE_OUTPUT_PUSH_PULL,
                             NULL,
                             &pData[index]->handleI2C);
        if ( error != GD_OK )
            return(error);*/
            
      ferr = GD_GPIO_Open(pData[index]->ghwIndex, GD_GPIO_TYPE_OUTPUT_1, NULL, &pData[index]->handleI2C);
#ifdef GD_FE_LGS_DEBUG
      if(ferr != GD_OK)
          GM_PrStr("\nOpen GPIO 39 error");
#endif

        ferr = GD_GPIO_Write(pData[index]->handleI2C, 1);
#ifdef GD_FE_LGS_DEBUG
      if(ferr != GD_OK)
          GM_PrStr("\nOpen GPIO 39 error");
#endif
        LGS_Waitms(10);
        ferr = GD_GPIO_Write(pData[index]->handleI2C, 0);
#ifdef GD_FE_LGS_DEBUG
      if(ferr != GD_OK)
          GM_PrStr("\nOpen GPIO 39 error");
#endif
        LGS_Waitms(10);
        ferr = GD_GPIO_Write(pData[index]->handleI2C, 1);
#ifdef GD_FE_LGS_DEBUG
      if(ferr != GD_OK)
          GM_PrStr("\nOpen GPIO 39 error");
#endif
        LGS_Waitms(10);

      GD_GPIO_Close(&pData[index]->handleI2C);
    }

    return ferr;
}
Esempio n. 15
0
void MB86A17_Reset()
{
    //2011-10-13liujinyang
    GERR retVal = GD_OK;
    if(!a17_gpiorest)
    {
        retVal = GD_GPIO_Open(GD_GPIO_30, GD_GPIO_TYPE_OUTPUT_1, NULL, &a17_gpiorest);
        if (retVal != GD_OK)
        {
            //GM_PrStr("\n[GD_FE_GK_Open] ERR: GPIO_30 could not be opened\n");
            return ;
        }
    }
    GD_GPIO_Write(a17_gpiorest, 1);
    MB86A17_sleep(5);
    GD_GPIO_Write(a17_gpiorest, 0);
    MB86A17_sleep(5);        
    GD_GPIO_Write(a17_gpiorest, 1);
    MB86A17_sleep(5);  
}
Esempio n. 16
0
/*!
*****************************************************************************
** \brief Initialize the Ethernet driver.
**
** This function initializes Ethernet driver.
** It allocates and initializes driver handle structures as well as
** internal buffers for succeeding GD_ETH_Open(). Currently buffers are
** statically allocated. Setting up hardware is not part of GD_ETH_Init(),
** but is executed in GD_ETH_Open().
**
** \note This function is the implementation of
**       GD_SYS_DriverT::initDriverFunc.
**
** \return
**        - #GD_OK                      On success
**        - #GD_ERR_ALREADY_INITIALIZED Driver is already initialized
**        - #GD_ERR_INVALID_HANDLE      Invalid handle is specified
**        - #GD_ERR_SEMAPHORE_CREATE    Semaphore can not be created
**        - #GD_ERR_OUT_OF_MEMORY       Memory allocation failed
**                                        Not Implemented yet
**
** \sa GD_ETH_Exit()
*****************************************************************************
*/
GERR GD_ETH_Init(GD_ETH_InitParamsT* pInitParams)
{
    S32 retval;
    GD_INT_OPEN_PARAMS_S intOpenParams;
    if(ethIntHandle)
    {
        return GD_ERR_ALREADY_INITIALIZED;
    }
    if(pInitParams == NULL)
    {
        return GD_ERR_BAD_PARAMETER;
    }
    intOpenParams.type           = GD_INT_ETH_IRQ;
    intOpenParams.sensitivity    = GD_INT_LEVEL_HIGH;
    intOpenParams.priority       = GD_INT_MID_PRIORITY;
    intOpenParams.active         = GD_INT_INVERT_IRQ;
    intOpenParams.isrFct.lowPrio = GD_ETH_Isr;
    retval =  GD_INT_Open(&intOpenParams, &ethIntHandle);
    if (retval != GD_OK)
    {
        return retval;
    }

    if (pInitParams->phyreset != GD_GPIO_0)
    {
        GD_GPIO_Open(pInitParams->phyreset, GD_GPIO_TYPE_OUTPUT_1, NULL, &ethdevice.phyreset);
    }

    if(pInitParams->bHWReset)
    {
        GD_ETH_PHY_HWReset((GD_HANDLE)&ethdevice);
    }
    ethdevice.phyType = pInitParams->phyType;
    GD_ETH_PHY_Init(pInitParams->phyType);
    return retval;
}
Esempio n. 17
0
GERR GD_FL_Goke_Check(U32 startAddress, GD_FL_CHIP_DATA_S* chipData)
{
    U16 manufacturerCode;
    U16 deviceCode;
    U16 deviceCode2;
    U16 deviceCode3;
    
    manufacturerCode = 0;
    deviceCode = 0;
    thisStartAddress = startAddress;
    delayLoops = 0;

    /* read manufacture and device code */
    GD_FL_Goke_Reset();
    flashWriteCmd(CMD_AUTOSELECT, 0);
    manufacturerCode = flashRead(0);
    deviceCode = flashRead(1);
    GD_FL_Goke_Reset();
        
    /* check manufacturer and device code */
    if ( manufacturerCode == MANUFACTURER_CODE_GOKE )
    {
        switch ( deviceCode )
        {
            case DEVICE_CODE_MBM29DL323BE:
                chipData->size            = SIZE_MBM29DL323BE;
                chipData->numberOfSectors = SECTORS_MBM29DL323BE;
                chipData->deviceName      = (U8*)DEVICE_NAME_MBM29DL323BE;
                break;
            case DEVICE_CODE_MBM29PL160BD:
                chipData->size            = SIZE_MBM29PL160BD;
                chipData->numberOfSectors = SECTORS_MBM29PL160BD;
                chipData->deviceName      = (U8*)DEVICE_NAME_MBM29PL160BD;
                break;
            case DEVICE_CODE_MBM29LV160BE:
                chipData->size            = SIZE_MBM29LV160BE;
                chipData->numberOfSectors = SECTORS_MBM29LV160BE;
                chipData->deviceName      = (U8*)DEVICE_NAME_MBM29LV160BE;
                break;
            case DEVICE_CODE_MBM29LV800BE:
                chipData->size            = SIZE_MBM29LV800BE;
                chipData->numberOfSectors = SECTORS_MBM29LV800BE;
                chipData->deviceName      = (U8*)DEVICE_NAME_MBM29LV800BE;
                break;
            default:
                return GD_ERR_FLASH_TYPE_NOT_SUPPORTED;
        }
        chipData->manufactureName = (U8*)MANUFACTURER_NAME_GOKE;
    }
    else if ( manufacturerCode == MANUFACTURER_CODE_SPANSION )
    {
        flashWriteCmd(CMD_AUTOSELECT, 0);
        deviceCode  = flashRead(1);
        deviceCode2 = flashRead(0xE); // 0x1C / 2
        deviceCode3 = flashRead(0xF); // 0x1E / 2
        GD_FL_Goke_Reset();
        
        switch ( deviceCode )
        {
            #if defined(SMARTMPEG_E) || defined(SMARTMPEG_C) || defined(SMARTMPEG_M) || defined(SMARTMPEG) || defined(GK6105S) || defined(GK6106)
            
                case DEVICE_CODE_S29GL:
                    if( ( deviceCode2 == __DEVICE_CODE2_S29GL064A_R4 )
                    &&  ( deviceCode3 == __DEVICE_CODE3_S29GL064A_R4_BOTTOM ) )
                    {
                        chipData->size            = SIZE_S29GL064A_R4_BOTTOM;
                        chipData->numberOfSectors = SECTORS_S29GL064A_R4_BOTTOM;
                        chipData->deviceName      = (U8*)DEVICE_NAME_S29GL064A_R4_BOTTOM;
                        delayLoops                = DELAY_LOOPS_S29GL064A_R4_BOTTOM;
                        deviceCode = DEVICE_CODE_S29GL064A_R4_BOTTOM;
                    }
                    else if( ( deviceCode2 == __DEVICE_CODE2_S29GL032A_R4 )
                         &&  ( deviceCode3 == __DEVICE_CODE3_S29GL032A_R4_BOTTOM ) )
                    {
                        chipData->size            = SIZE_S29GL032A_R4_BOTTOM;
                        chipData->numberOfSectors = SECTORS_S29GL032A_R4_BOTTOM;
                        chipData->deviceName      = (U8*)DEVICE_NAME_S29GL032A_R4_BOTTOM;
                        delayLoops                = DELAY_LOOPS_S29GL032A_R4_BOTTOM;
                        deviceCode = DEVICE_CODE_S29GL032A_R4_BOTTOM;
                    }
                    else if( ( deviceCode2 == __DEVICE_CODE2_S29GL032A_R3 )
                         &&  ( deviceCode3 == __DEVICE_CODE3_S29GL032A_R3_TOP ) )
                    {
                        chipData->size            = SIZE_S29GL032M_R3_TOP;
                        chipData->numberOfSectors = SECTORS_S29GL032M_R3_TOP;
                        chipData->deviceName      = (U8*)DEVICE_NAME_S29GL032M_R3_TOP;
                        delayLoops                = DELAY_LOOPS_S29GL032M_R3_TOP;
                        deviceCode                = DEVICE_CODE_S29GL032M_R3_TOP;
                    }
                    // S29GL128N
                    else if( ( deviceCode2 == __DEVICE_CODE2_S29GL128N )
                         &&  ( deviceCode3 == __DEVICE_CODE3_S29GL128N ) )
                    {
                        chipData->size            = SIZE_S29GL128N;
                        chipData->numberOfSectors = SECTORS_S29GL128N;
                        chipData->deviceName      = (U8*)DEVICE_NAME_S29GL128N;
                        delayLoops                = DELAY_LOOPS_S29GL128N;
                        deviceCode                   = DEVICE_CODE_S29GL128N;
                    }
                    //S29GL032N
                    else if( ( deviceCode2 == __DEVICE_CODE2_S29GL032N_04 )
                         &&  ( deviceCode3 == __DEVICE_CODE2_S29GL032N_04_BOTTOM ) )
                    {
                        chipData->size            = SIZE_S29GL032N;
                        chipData->numberOfSectors = SECTORS_S29GL032N;
                        chipData->deviceName      = (U8*)DEVICE_NAME_S29GL032N;
                        delayLoops                = DELAY_LOOPS_S29GL032N;
                        deviceCode                   = DEVICE_CODE_S29GL032N;
                    }
                    else
                    {
                        return GD_ERR_FLASH_TYPE_NOT_SUPPORTED;
                    }
                break;
                
                case DEVICE_CODE_S29AL0320TE:
                    chipData->size            = SIZE_S29AL0320TE;
                    chipData->numberOfSectors = SECTORS_S29AL0320TE;
                    chipData->deviceName      = (U8*)DEVICE_NAME_S29AL0320TE;
                    delayLoops                = DELAY_LOOPS_S29AL0320TE;
                    deviceCode                   = DEVICE_CODE_S29AL0320TE;
                    break;
                    
                case DEVICE_CODE_S29AL0320BE:
                    chipData->size            = SIZE_S29AL0320BE;
                    chipData->numberOfSectors = SECTORS_S29AL0320BE;
                    chipData->deviceName      = (U8*)DEVICE_NAME_S29AL0320BE;
                    delayLoops                = DELAY_LOOPS_S29AL0320BE;
                    deviceCode                   = DEVICE_CODE_S29AL0320BE;
                break;
                
                // case DEVICE_CODE_S29GL064A_R4:
                //     chipData->size            = SIZE_S29GL064A_R4;
                //     chipData->numberOfSectors = SECTORS_S29GL064A_R4;
                //     chipData->deviceName      = (U8*)DEVICE_NAME_S29GL064A_R4;
                //     delayLoops                = DELAY_LOOPS_S29GL064A_R4;
                // break;
            #endif
            
            default:
                return GD_ERR_FLASH_TYPE_NOT_SUPPORTED;
        }
        chipData->manufactureName = (U8*)MANUFACTURER_NAME_SPANSION;
    }
    else if ( manufacturerCode == MANUFACTURER_CODE_MACRONIX )
    {
        switch ( deviceCode )
        {
            case DEVICE_CODE_MX29LV320CB:
                chipData->size            = SIZE_MX29LV320CB;
                chipData->numberOfSectors = SECTORS_MX29LV320CB;
                chipData->deviceName      = (U8*)DEVICE_NAME_MX29LV320CB;
                break;
            case DEVICE_CODE_MX29LV640CB:
                chipData->size            = SIZE_MX29LV640CB;
                chipData->numberOfSectors = SECTORS_MX29LV640CB;
                chipData->deviceName      = (U8*)DEVICE_NAME_MX29LV640CB;
                break;

            case DEVICE_CODE_MX29LV640EB:
                chipData->size            = SIZE_MX29LV640E;
                chipData->numberOfSectors = SECTORS_MX29LV640E;
                chipData->deviceName      = (U8*)DEVICE_NAME_MX29LV640E;
                break;
                
            default:
                return GD_ERR_FLASH_TYPE_NOT_SUPPORTED;
        }
        chipData->manufactureName = (U8*)MANUFACTURER_NAME_MACRONIX;
    }
    else if ( manufacturerCode == MANUFACTURER_CODE_EXELSEMI )
    {
        switch ( deviceCode )
        {
            case DEVICE_CODE_ES29LV160ET:
                chipData->size            = SIZE_ES29LV160ET;
                chipData->numberOfSectors = SECTORS_ES29LV160ET;
                chipData->deviceName      = (U8*)DEVICE_NAME_ES29LV160ET;
                break;
            default:
                return GD_ERR_FLASH_TYPE_NOT_SUPPORTED;
        }
        chipData->manufactureName = (U8*)MANUFACTURER_NAME_EXELSEMI;
    }

    else
    {
        return GD_ERR_FLASH_TYPE_NOT_SUPPORTED;
    }

    thisDeviceCode = deviceCode;
    thisManufacturerCode = manufacturerCode;

    chipData->manufactureCode           = manufacturerCode;
    chipData->deviceCode                = deviceCode;
    chipData->startAddress              = startAddress;
    chipData->flashGetSectorAddressFct  = (U32 (*)(U16))GD_FL_Goke_GetSectorAddress;
    chipData->flashGetSectorSizeFct     = (U32 (*)(U16))GD_FL_Goke_GetSectorSize;
    chipData->flashResetFct             = (void (*)())GD_FL_Goke_Reset;
    chipData->flashEraseChipFct         = (GERR (*)(void))GD_FL_Goke_EraseChip;
    chipData->flashEraseSectorFct       = (GERR (*)(U32))GD_FL_Goke_EraseSector;
    chipData->flashIsSectorProtectedFct = (GBOOL (*)(U32))GD_FL_Goke_IsSectorProtected;
    chipData->flashReadFct              = (GERR (*)(U32, U16*, U32))GD_FL_Goke_Read;
    chipData->flashWriteFct             = (GERR (*)(U32, U16*, U32))GD_FL_Goke_Write;
    #if defined(SMARTMPEG)
    /* add EXT IRQ0 to control A21 pin */
    if(chipData->size == 0x400000)
    {
        if(GD_GPIO_Open(GD_GPIO_IRQ0, GD_GPIO_TYPE_OUTPUT_PUSH_PULL, NULL, &IRQ0Handle) != GD_OK)
        {
            return GD_ERR_FLASH_TYPE_NOT_SUPPORTED;
        }
    }
    #endif
    return GD_OK;
}
Esempio n. 18
0
/*!
*******************************************************************************
**
** \brief  Opens an instance of the driver.
**
** \param  pOpenParams  Pointer to configuration parameters.
** \param  pHandle      Pointer to handle assigned to the opened instance.
**
** \return Possible return codes:
**         - #GD_OK
**         - #GD_ERR_BAD_PARAMETER
**         - #GD_ERR_ALREADY_OPEN
**
******************************************************************************/
GERR GD_IR_Open(GD_IR_OPEN_PARAMS_S *pOpenParams, GD_HANDLE *pHandle)
{
    GD_HANDLE gpioHd;

#if defined(SMARTMPEG) || defined(SMARTMPEG_E)
        if(pOpenParams->type == GD_IR_RECEIVER )
        {
            GD_GPIO_OpenFunctionMode(GD_GPIO_IR_IN, &gpioHd);
            if((IR_Status & GD_IR_RECEIVER_OPENED) == GD_IR_RECEIVER_OPENED)
            {
                return  GD_ERR_ALREADY_OPEN;
            }
            GH_IRR_set_Prescaler(pOpenParams->irr_config_s.prescaler);
            IRR_Initial();
            IR_Status |= GD_IR_RECEIVER_OPENED;
        }
        else if( pOpenParams->type == GD_IR_TRANSMITTER )
        {
            GD_GPIO_OpenFunctionMode(GD_GPIO_IR_OUT, &gpioHd);
            if((IR_Status & GD_IR_TRANSMITTER_OPENED) == GD_IR_TRANSMITTER_OPENED)
            {
                return GD_ERR_ALREADY_OPEN;
            }
            IRT_OpenTransmitter(pOpenParams);
            IR_Status |= GD_IR_TRANSMITTER_OPENED;
        }
        else
        {
            return GD_ERR_BAD_PARAMETER;
        }
        *pHandle =(GD_HANDLE) pOpenParams->type;
        return GD_OK;
#endif

#if defined(SMARTMPEG_L)
        if(pOpenParams->type == GD_IR_RECEIVER )
        {
            GD_GPIO_Open(pOpenParams->irr_config_s.gpioIrrPin, 
                         GD_GPIO_TYPE_INPUT_IR_IN, NULL, &gpioHd);
            if((IR_Status & GD_IR_RECEIVER_OPENED) == GD_IR_RECEIVER_OPENED)
            {
                return GD_ERR_ALREADY_OPEN;
            }
            GH_IRR_set_Prescaler(pOpenParams->irr_config_s.prescaler);
            IRR_Initial();
            IR_Status |= GD_IR_RECEIVER_OPENED;
        }
        else
        {
            return GD_ERR_BAD_PARAMETER;
        }
        *pHandle =(GD_HANDLE) pOpenParams->type;
        return GD_OK;
#endif
    
#if defined(SMARTMPEG_C) || defined(SMARTMPEG_M) || defined(SMARTMPEG_D) || defined(GK6105S) || defined(GK6106)
        if(pOpenParams->type == GD_IR_RECEIVER )
        {
            GD_GPIO_OpenFunctionMode(GD_GPIO_TYPE_INPUT_IR_DATA, &gpioHd);
            if((IR_Status & GD_IR_RECEIVER_OPENED) == GD_IR_RECEIVER_OPENED)
            {
                return  GD_ERR_ALREADY_OPEN;
            }
            GH_IRR_set_Prescaler(pOpenParams->irr_config_s.prescaler);
            IRR_Initial();
            IR_Status |= GD_IR_RECEIVER_OPENED;
        }
        else if( pOpenParams->type == GD_IR_TRANSMITTER )
        {
            GD_GPIO_OpenFunctionMode(GD_GPIO_TYPE_OUTPUT_IR_DATA, &gpioHd);
            if((IR_Status & GD_IR_TRANSMITTER_OPENED) == GD_IR_TRANSMITTER_OPENED)
            {
                return GD_ERR_ALREADY_OPEN;
            }
            IRT_OpenTransmitter(pOpenParams);
            IR_Status |= GD_IR_TRANSMITTER_OPENED;
        }
        else
        {
            return GD_ERR_BAD_PARAMETER;
        }
        *pHandle =(GD_HANDLE) pOpenParams->type;
        return GD_OK;
#endif

//    if(pOpenParams->type == GD_IR_RECEIVER )
//    {
//        #ifndef SMARTMPEG_L
//        GD_GPIO_OpenFunctionMode(GD_GPIO_IR_IN, &gpioHd);
//        #else
//        GD_GPIO_Open(pOpenParams->irr_config_s.gpioIrrPin, 
//                     GD_GPIO_TYPE_INPUT_IR_IN, NULL, &gpioHd);
//        #endif
//        if((IR_Status & GD_IR_RECEIVER_OPENED) == GD_IR_RECEIVER_OPENED)
//            return  GD_ERR_ALREADY_OPEN;
//        GH_IRR_set_Prescaler(pOpenParams->irr_config_s.prescaler);
//        IRR_Initial();
//        IR_Status |= GD_IR_RECEIVER_OPENED;
//    }
//    #ifndef SMARTMPEG_L
//    else if( pOpenParams->type == GD_IR_TRANSMITTER )
//    {
//        GD_GPIO_OpenFunctionMode(GD_GPIO_IR_OUT, &gpioHd);
//        if((IR_Status & GD_IR_TRANSMITTER_OPENED) == GD_IR_TRANSMITTER_OPENED)
//            return  GD_ERR_ALREADY_OPEN;
//        IRT_OpenTransmitter(pOpenParams);
//        IR_Status |= GD_IR_TRANSMITTER_OPENED;
//    }
//    #endif
//    else
//    {
//        return GD_ERR_BAD_PARAMETER;
//    }
//
//    *pHandle =(GD_HANDLE) pOpenParams->type;
//
//    return GD_OK;
}
Esempio n. 19
0
/******************************************************************************
**
** \brief  Opens the AVLlink1108 front-end device.
**
**         This function opens the front-end device and fills the device data
**         structure with the implemented callback functions.
**
** \param  index        Internal index of front-end.
** \param  pDeviceData  Pointer to device data structure.
**
** \return Possible return codes:
**         - #GD_OK
**         - #GD_ERR_BAD_PARAMETER
**         - #GD_ERR_FE_OPEN
**         - #GD_ERR_FE_OPEN_I2C
**
******************************************************************************/
GERR GD_FE_A17_Open(U8 index, GD_FE_DEVICE_DATA_S* pDeviceData)
{
    UINT8  ret;
    //AVL_MPEG_Info mpegInfo;
    GERR retVal;
    U8     times;

    if (index >= GD_FE_MAX_NUM) return GD_ERR_BAD_PARAMETER;

    /* control lnb power and switch */
    if(AntennaPowerInitial==GFALSE)
    {
        #if !defined(RFPOWER_DEMOD)
        retVal = GD_GPIO_Open(GD_GPIO_20, GD_GPIO_TYPE_OUTPUT_1, NULL, &GPIO20Handle);
        if (retVal != GD_OK)
        {
            //GM_PrStr("\n[GD_FE_A17_Open] ERR: GPIO could not be opened\n");
            return (retVal);
        }

        retVal = GD_GPIO_Open(GD_GPIO_27, GD_GPIO_TYPE_OUTPUT_1, NULL, &GPIO27Handle);
        if (retVal != GD_OK)
        {
            //GM_PrStr("\n[GD_FE_A17_Open] ERR: GPIO could not be opened\n");
            return (retVal);
        }
        
        AntennaPowerInitial=GTRUE;

        GD_GPIO_Write(GPIO20Handle, 0);
        GD_GPIO_Write(GPIO27Handle, 0);
        lrTurn = 0;
        #else
        lrTurn = 0;
        MB86A17_set_rf_pola(RA_Normal);//Left        
        #endif /* RFPOWER_DEMOD */
    }
    
    /* check device data */
    if (pDeviceData->pSystemParams == NULL) return GD_ERR_BAD_PARAMETER;
    if (pDeviceData->systemType != GD_FE_SYSTEM_TYPE_SATELLITE)
        return GD_ERR_BAD_PARAMETER;
    if (pDeviceData->handleI2C  == (GD_HANDLE)0) return GD_ERR_BAD_PARAMETER;

    ret=GD_FE_A17_Reset(index);
    if(ret!=GD_OK)
    {
        //GM_Printf("Reset Error!\n");
        return GD_ERR_FE_OTHER;
    }
    
    AntennaPowerInitial = GTRUE;


    /* fill device data structure with call back functions */
    pDeviceData->feCloseFct             = (GERR (*)(U8))GD_FE_A17_Close;
    pDeviceData->feSetSystemParamsFct   = (GERR (*)(U8, GD_FE_SYSTEM_PARAMS_S*))GD_FE_A17_SetSystemParams;
    pDeviceData->feResetFct             = (GERR (*)(U8))GD_FE_A17_Reset;
    pDeviceData->feTuneFct              = (GERR (*)(U8, GD_FE_TUNE_PARAMS_S*))GD_FE_A17_Tune;
    pDeviceData->feScanFct              = (GERR (*)(U8, GD_FE_SCAN_PARAMS_S*))GD_FE_A17_Scan;
    //    pDeviceData->feScanFct              = NULL;
    pDeviceData->feSendDiseqcCommandFct = (GERR (*)(U8, U8, U8*, U8*, U8*))GD_FE_A17_SendDiseqcCommand;
    pDeviceData->feGetStatusFct         = (GERR (*)(U8, GD_FE_STATUS_E*))GD_FE_A17_GetStatus;
    pDeviceData->feGetFECFct            = (GERR (*)(U8, GD_FE_FEC_E*))GD_FE_A17_GetFEC;
    pDeviceData->feGetAFCFct            = NULL;
    pDeviceData->feGetBERFct            = (GERR (*)(U8, U32*))GD_FE_A17_GetBER;
    pDeviceData->feGetSignalQualityFct  = (GERR (*)(U8, U16*))GD_FE_A17_GetSignalQuality;
    pDeviceData->feGetSignalStrengthFct = (GERR (*)(U8, U16*))GD_FE_A17_GetSignalStrength;
    pDeviceData->feGetTuneParamsFct     = NULL;
    pDeviceData->feSetAntennaPowerFct   = (GERR (*)(U8, GBOOL))GD_FE_A17_SetAntennaPower;

    /* store pointer to device data for later */
    pData[index]      = pDeviceData;

  SET_I2C;

#if 1
    for (times = 0;times < 10; times++)
    {
        if ((ret = MB86A17_init(index)) == GD_OK)
        {
            break;
        }
        else
        {
            //GM_Printf("\nInitial gk5109s failed!No:%d, ret=0x%x\n",times,ret);   
            if (times == 9)
                return GD_ERR_FE_OTHER;
        }
    }
#endif

  //Enter device address to the pointer.
  (void)MB86A17_Init_Adr(&fdDat[index]);

  //Enter initialization parameters after power on to the pointer.
  (void)MB86A17_Init_Param(&fdDat[index]);

  
    return GD_OK;
}
Esempio n. 20
0
GERR GD_USB_PHY_Init(U8 GpioNumber)
{
    U32 tmp_data;
    U32 cmp_pass1;
    GD_HANDLE Gpiohandle;

    printf("UTMI2 Wait reset release.\n");
    GD_TIMER_Delay(100);
    printf("UTMI2 Begin initial sequence ...\n");

#ifdef GK710X
    GD_GPIO_Open(GpioNumber, GD_GPIO_TYPE_OUTPUT_1, NULL, &Gpiohandle);
    GD_GPIO_Write(Gpiohandle, 1);
#else
    GD_GPIO_Open(GpioNumber, GD_GPIO_TYPE_OUTPUT_1, NULL, &Gpiohandle);
    GD_GPIO_Write(Gpiohandle, 0);
#endif

    //USB_AHB_R(0x70170050, value);
    //USB_AHB_W(0x70170050, value | 0x02);
#ifndef GK710X
    //PHY reset
    GH_PLL_set_USB_GRST_en(1);
    GD_TIMER_Delay(20);
    GH_PLL_set_USB_GRST_en(0);
    GD_TIMER_Delay(20);
    GH_PLL_set_USB_GRST_en(1);
#endif

    // init phy
    //init UTMI
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x04<<2), 0x0000040f);
    // bit<7>: Power down UTMI port-0 bandgap current
    /*GH_USB_PHY_set_UTMI_REG_04_ck214_syn_en(1);
    GH_USB_PHY_set_UTMI_REG_04_utmi_clk120_en(1);

    GH_USB_PHY_set_UTMI_REG_04_clktest_en(0);
    GH_USB_PHY_set_UTMI_REG_04_clk_extra_0_en(0);

    GH_USB_PHY_set_UTMI_REG_04_clk_extra_1_en(0);
    GH_USB_PHY_set_UTMI_REG_04_xtal12_en(0);
    GH_USB_PHY_set_UTMI_REG_04_clk_ctl_override(1);
    GH_USB_PHY_set_UTMI_REG_04_force_pll_on(0);

    GH_USB_PHY_set_UTMI_REG_04_ck214_syn_en(0);
    GH_USB_PHY_set_UTMI_REG_04_clk_274_en(0);
    GH_USB_PHY_set_UTMI_REG_04_hs_rx_roboust_en(0);*/

    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x10<<2), 0x00008051);
    // PLL_TEST[15]: Bypass 480MHz clock divider
    // PLL_TEST[7:4]: 5'b0101_0 for 1.0x
    // PLL_TEST[0]: 1: synthesizer clock, 2'b11, 0: XIN_C
    /*GH_USB_PHY_set_UTMI_REG_10_input_clock(1);
    GH_USB_PHY_set_UTMI_REG_10_divider_selection(0x00);
    GH_USB_PHY_set_UTMI_REG_10_divider_control(0xA);

    GH_USB_PHY_set_UTMI_REG_10_clock_outputs_source(0x00);
    GH_USB_PHY_set_UTMI_REG_10_clock_outputs_ratio(0x00);
    GH_USB_PHY_set_UTMI_REG_10_digital_output(0x00);
    GH_USB_PHY_set_UTMI_REG_10_transmitter(0x02);*/

    //USB_AHB_W(REG_UTMI_BASE+(0x11<<2), 0x00002088);
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x11<<2), 0x00005080);
    // PLL_TEST[30:28]: 3'b101 for IBIAS current select
    // PLL_TEST[23] CLK480 to digital output source selection
    // PLL_TEST[20] reset pll
    /*GH_USB_PHY_set_UTMI_REG_11_ENDISC(0x00);
    GH_USB_PHY_set_UTMI_REG_11_EXTDISC(0x00);
    GH_USB_PHY_set_UTMI_REG_11_ENLOCKZ(0x00);
    GH_USB_PHY_set_UTMI_REG_11_ENAUTO(0x00);

    GH_USB_PHY_set_UTMI_REG_11_ENDCC(0x00);
    GH_USB_PHY_set_UTMI_REG_11_TVCO(0x00);
    GH_USB_PHY_set_UTMI_REG_11_output_source(0x01);

    GH_USB_PHY_set_UTMI_REG_11_ENINV(0x00);
    GH_USB_PHY_set_UTMI_REG_11_ENINVENTMUX(0x00);
    GH_USB_PHY_set_UTMI_REG_11_input_clock(0x00);*/
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x11<<2), 0x00005090);
    //GH_USB_PHY_set_UTMI_REG_11_ENDCC(0x01);

    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x00<<2), 0x00006BC3);
    // Turn on reference voltage and regulator
    // reg_pdn: bit<15>, bit <2> ref_pdn
    /*GH_USB_PHY_set_UTMI0_pdn_override(0x01);
    GH_USB_PHY_set_UTMI0_term_override(0x01);
    GH_USB_PHY_set_UTMI0_ref_pdn(0x00);
    GH_USB_PHY_set_UTMI0_dp_puen(0x00);

    GH_USB_PHY_set_UTMI0_dm_puen(0x00);
    GH_USB_PHY_set_UTMI0_r_pumode(0x00);
    GH_USB_PHY_set_UTMI0_r_dp_pden(0x01);
    GH_USB_PHY_set_UTMI0_r_dm_pden(0x01);

    GH_USB_PHY_set_UTMI0_hs_dm_pdn(0x01);
    GH_USB_PHY_set_UTMI0_pll_pdn(0x01);
    GH_USB_PHY_set_UTMI0_hs_ted_pdn(0x00);
    GH_USB_PHY_set_UTMI0_hs_preamp_pdn(0x01);

    GH_USB_PHY_set_UTMI0_f1_xcvf_pdn(0x00);
    GH_USB_PHY_set_UTMI0_vbusdet_pdn(0x01);
    GH_USB_PHY_set_UTMI0_iref_pdn(0x01);
    GH_USB_PHY_set_UTMI0_pdn(0x00);*/
    //USB_AHB_W(REG_UTMI_BASE+(0x0A<<2), 0x0000140B);
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x0A<<2), 0x00003403);

    GD_TIMER_Delay(20);
    // Delay(1ms) wait for regulator stable

    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x00<<2), 0x000069C3);
    // Turn on UPLL, reg_pdn: bit<9>
    //GH_USB_PHY_set_UTMI0_pll_pdn(0x00);
    GD_TIMER_Delay(10);

    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x11<<2), 0x00005080);
    // PLL_TEST[20] reset pll
    GD_TIMER_Delay(20);
    // Delay(2ms) wait for PLL stable
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x00<<2), 0x00000001);
    // Turn all (including hs_current) use override mode
    //GH_USB_PHY_set_UTMI0(0x00000001);
    GD_TIMER_Delay(1000);
    // Delay(1ms) wait for analog circuit stabl
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x1E<<2), 0x00000001);
    GD_TIMER_Delay(1000);
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x1E<<2), 0x00000000);
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x03<<2), 0x00000023);
    GD_TIMER_Delay(10);
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x03<<2), 0x00000020);
    // host
    // USB_AHB_W(REG_UTMI_BASE+(0x0A<<2), 0x00000003);
    // device
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x0A<<2), 0x0000000b);
    GD_TIMER_Delay(1000);
    // end init

    //reset USB controller
#ifdef GK710X
    USB_AHB_R(0x70170088, tmp_data);
    tmp_data |= 0x20000000;//0x6CC36011
    USB_AHB_W(0x70170088, tmp_data);
    GD_TIMER_Delay(10);
    tmp_data &= ~0x20000000;//0x4CC36011
    USB_AHB_W(0x70170088, 0x00000003);
    USB_AHB_W(0x70170088, tmp_data);
    GD_TIMER_Delay(10);
#else
    USB_AHB_R(0xa0170088, tmp_data);                 // usb_ctrl_soft_reset,USB controller èí?t?′??: rw
    tmp_data |= 0x20000000;//0x6CC36011                 // USB ?????÷èí?t?′??£?μíμ????′??
    USB_AHB_W(0xa0170088, tmp_data);
    GD_TIMER_Delay(10);
    tmp_data &= ~0x20000000;//0x4CC36011
    USB_AHB_W(0xa0170088, 0x00000003);
    USB_AHB_W(0xa0170088, tmp_data);
    GD_TIMER_Delay(10);
#endif
    //dev_connect;
    ///////////////////////////////////////////////////////////////////////////////
    //port-0 loop back check
    /*USB_AHB_W(REG_UTMI_BASE+(0x03<<2), 0x00000043);
    GH_USB_PHY_set_UTMI_REG_03_rx_swreset(0x01);
    GH_USB_PHY_set_UTMI_REG_03_utmi_tx_sw_reset(0x01);
    GH_USB_PHY_set_UTMI_REG_03_tx_force_hs_current_enable(0x00);
    GH_USB_PHY_set_UTMI_REG_03_tx_fl_early_4(0x00);

    GH_USB_PHY_set_UTMI_REG_03_tx_fl_latency_delay_1(0x00);
    GH_USB_PHY_set_UTMI_REG_03_hs_stage_select(0x02);
    GH_USB_PHY_set_UTMI_REG_03_otg_dual_role(0x00);

    GH_USB_PHY_set_UTMI_REG_03_tx_reset_fsm(0x00);
    GH_USB_PHY_set_UTMI_REG_03_cdr_mode_sel(0x00);
    GH_USB_PHY_set_UTMI_REG_03_tx_reserved(0x00);
    GH_USB_PHY_set_UTMI_REG_03_vbusdet_test(0x00);

    USB_AHB_W(REG_UTMI_BASE+(0x03<<2), 0x00000040);
    GH_USB_PHY_set_UTMI_REG_03_rx_swreset(0x00);
    GH_USB_PHY_set_UTMI_REG_03_utmi_tx_sw_reset(0x00);

    USB_AHB_W(REG_UTMI_BASE+(0x00<<2), 0x00000001);
    GH_USB_PHY_set_UTMI0(0x00000001);

    USB_AHB_W(REG_UTMI_BASE+(0x0A<<2), 0x00000600);
    // bit <9> mac_mode_ovd, bit <8> termsel, bit <7:6> xcvrsel, bit <5:4> opmode
    GH_USB_PHY_set_UTMI_REG_0A_vbusvalid(0x00);
    GH_USB_PHY_set_UTMI_REG_0A_avalid(0x00);
    GH_USB_PHY_set_UTMI_REG_0A_sessend(0x00);
    GH_USB_PHY_set_UTMI_REG_0A_iddig(0x00);

    GH_USB_PHY_set_UTMI_REG_0A_opmode(0x00);
    GH_USB_PHY_set_UTMI_REG_0A_xcvrsel(0x01);//0:high 1:full 2: low

    GH_USB_PHY_set_UTMI_REG_0A_termsel(0x01);//0:high 1:full
    GH_USB_PHY_set_UTMI_REG_0A_macmode_ovd(0x01);
    GH_USB_PHY_set_UTMI_REG_0A_suspendm(0x01);
    GH_USB_PHY_set_UTMI_REG_0A_usb_bond_ovd(0x00);

    GH_USB_PHY_set_UTMI_REG_0A_usb_bond_set(0x00);
    GH_USB_PHY_set_UTMI_REG_0A_host_chirp_det(0x00);
    GH_USB_PHY_set_UTMI_REG_0A_hs_tx_ien_mask(0x00);
    GH_USB_PHY_set_UTMI_REG_0A_hs_tx_ien_mask_method(0x00);

    USB_AHB_W(REG_UTMI_BASE+(0x08<<2), 0x00000078);
    // bit <7> hs_se0, bit<5> force_tx_non_busy, bit<4> force_rx_non_busy,
    // bit <3:0> debug bus select
    GH_USB_PHY_set_UTMI_REG_08_test_bus_select(0x08);

    GH_USB_PHY_set_UTMI_REG_08_force_rx_nonbusy(0x01);
    GH_USB_PHY_set_UTMI_REG_08_force_tx_nonbusy(0x01);
    GH_USB_PHY_set_UTMI_REG_08_utmi_int_clr(0x01);
    GH_USB_PHY_set_UTMI_REG_08_se0_set(0x00);

    GH_USB_PHY_set_UTMI_REG_08_tx_data(0x00);
    GH_USB_PHY_set_UTMI_REG_08_tx_en(0x00);
    GH_USB_PHY_set_UTMI_REG_08_tx_se0(0x00);
    GH_USB_PHY_set_UTMI_REG_08_tx_override(0x00);

    GH_USB_PHY_set_UTMI_REG_08_power_good_rst(0x00);
    GH_USB_PHY_set_UTMI_REG_08_phy_mode_enable(0x00);
    GH_USB_PHY_set_UTMI_REG_08_error_flag_clr(0x00);
    GH_USB_PHY_set_UTMI_REG_08_hd_tx_override(0x00);*/


#if 0
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x1A<<2), 0x00000000);    // set data pattern: 0000
    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x19<<2), 0x000001fe);    // bit <8> set tx_go, bit <10> fix data mode
    // TV.riu_read(REG_UTMI_BASE1+'h18);           //
    // poll_1_clear(REG_UTMI_BASE1+'h18, 'h8000);
    USB_AHB_R(REG_USB_PHY_UTMI_REG_00+(0x18<<2),  tmp_data); // bit <8> set tx_go, bit <10> fix data mode

    GD_TIMER_Delay(100);     // Delay(1ms) wait for analog circuit stabl

    if((tmp_data&0x0000C000)==0x00008000)
        cmp_pass1 = 1;
    else
        cmp_pass1 = 0;

    USB_AHB_W(REG_USB_PHY_UTMI_REG_00+(0x19<<2), 0x000000fe);    // clear tx_go (remember keep bit <10> for port1 fix data mode)
    if(cmp_pass1)
        printf("\n==========OK, USB TEST PASS.==========\n");
    else
        printf("\n=========Error,USB TEST FIAL.==========\n");
    //$finish();
#endif
    return GD_OK;
}