Beispiel #1
0
TCgReturnCode CgxDriverConstruct(void *pDriver, TCgxDriverState *pState)
{
	//DBG_FUNC_NAME("CgxDriverConstruct")
	TCgReturnCode rc = ECgOk;
	rc = CgCpuAllocateVa();
	memset(gChunksList,0,sizeof(TCgCpuDmaTask)*MAX_DMA_TRANSFER_TASKS);

	gps_gpio_request();

#if 0
	if (OK(rc)) rc = CgCpuDmaCreate(CG_DRIVER_DMA_CHANNEL_READ, CGCORE_BASE_ADDR + 0x00000070);

	// set up DMA interrupt handler
	if (OK(rc)) rc = CgxDriverDmaInterruptPrepare();
#endif

	if (OK(rc)) rc = CgxDriverDataReadyInterruptHandlerStart(pDriver);

	// set up internal synchronization mechanism
	if (OK(rc)) rc = CgxDriverTransferEndCreate(pDriver);


	// set up GPS interrupt handler
	if (OK(rc)) rc = CgxDriverGpsInterruptPrepare();
	if (OK(rc)) rc = CgxDriverGpsInterruptHandlerStart(pDriver);
#if 0
	// enable IP (not-reset)
	if (OK(rc)) rc = CgCpuGpioModeSet(CG_DRIVER_GPIO_GPS_MRSTN, ECG_CPU_GPIO_OUTPUT);
       if (OK(rc)) rc = CgCpuIPMasterResetOn();
	if (OK(rc)) rc = CgCpuDelay(CGCORE_RESET_DELAY);
	if (OK(rc)) rc = CgCpuIPMasterResetClear();

    // set up Sclk register
    if (OK(rc)) rc = CGCoreSclkEnable(1);

   DBGMSG1("CGCORE_CORE_SCLK_ENABLE = 0x%08X", CGCORE_ENABLE_SCLK);

    // set up core-resets register
    if (OK(rc)) rc = CGCORE_WRITE_REG( CGCORE_REG_OFFSET_CORE_RESETS, CGCORE_CORE_RESETS_ENABLE);

    DBGMSG1("CGCORE_CORE_RESETS_ENABLE = 0x%08X", CGCORE_CORE_RESETS_ENABLE);

	// Setup GPIO for RF-Power, and power up RF chip
	//if (OK(rc)) rc = CgCpuGpioModeSet(CG_DRIVER_GPIO_RF_PD, ECG_CPU_GPIO_OUTPUT);
	//if (OK(rc)) rc = CgxDriverRFPowerUp();

    if (OK(rc)) rc = CgCpuGpioModeSet(CG_DRIVER_GPIO_TCXO_EN, ECG_CPU_GPIO_OUTPUT);
	if (OK(rc)) rc = CgxDriverTcxoControl(TRUE);
#endif

	pState->constructionRc = rc;	// For later reference (if needed by application)
	pState->flags.resume = FALSE;
	#ifdef CGCORE_ACCESS_VIA_SPI
	gps_chip_power_off();
	#endif
	return rc;
}
void gps_chip_power_on(void)
{
	printk("%s\n",__func__);

	//enable gps sysclk
	CGCoreSclkEnable(1);

	//gps core reset
	CgxCpuWriteMemory((U32)CG_DRIVER_CGCORE_BASE_VA, 0xfc,0xf);
	CgxDriverRFPowerUp();
}
void gps_chip_power_off(void)
{
	int value;

	printk("%s\n",__func__);

	CgxDriverRFPowerDown();

	//gps core reset
	CgxCpuWriteMemory((U32)CG_DRIVER_CGCORE_BASE_VA, 0xfc,0x0);
	CGCoreSclkEnable(0);
}