int hwI2CInit( unsigned char busSpeedMode ) { unsigned int value; /* Enable GPIO 30 & 31 as IIC clock & data */ value = PEEK32(GPIO_MUX); value = FIELD_SET(value, GPIO_MUX, 30, I2C) | FIELD_SET(0, GPIO_MUX, 31, I2C); POKE32(GPIO_MUX, value); /* Enable Hardware I2C power. TODO: Check if we need to enable GPIO power? */ enableI2C(1); /* Enable the I2C Controller and set the bus speed mode */ value = PEEK32(I2C_CTRL); if (busSpeedMode == 0) value = FIELD_SET(value, I2C_CTRL, MODE, STANDARD); else value = FIELD_SET(value, I2C_CTRL, MODE, FAST); value = FIELD_SET(value, I2C_CTRL, EN, ENABLE); POKE32(I2C_CTRL, value); return 0; }
void hwI2CClose(void) { unsigned int value; /* Disable I2C controller */ value = PEEK32(I2C_CTRL); value = FIELD_SET(value, I2C_CTRL, EN, DISABLE); POKE32(I2C_CTRL, value); /* Disable I2C Power */ enableI2C(0); /* Set GPIO 30 & 31 back as GPIO pins */ value = PEEK32(GPIO_MUX); value = FIELD_SET(value, GPIO_MUX, 30, GPIO); value = FIELD_SET(value, GPIO_MUX, 31, GPIO); POKE32(GPIO_MUX, value); }
/* * This function closes the hardware i2c. */ void hwI2CClose() { unsigned long value; /* Disable I2C controller */ value = peekRegisterByte(I2C_CTRL); value = FIELD_SET(value, I2C_CTRL, EN, DISABLE); pokeRegisterByte(I2C_CTRL, value); /* Disable I2C Power */ enableI2C(0); /* Set GPIO 30 & 31 back as GPIO pins */ value = peekRegisterDWord(GPIO_MUX); value = FIELD_SET(value, GPIO_MUX, 30, GPIO); value = FIELD_SET(value, GPIO_MUX, 31, GPIO); pokeRegisterDWord(GPIO_MUX, value); }
void executeMMA8451Q(unsigned char* buffer, unsigned int length) { enableI2C(12); setPwrBusStatus(PM_SYSPWR, PM_ENABLE); initMMA8451Q(); attachInterrupt(mma8451qVector, 1,6, 1); setActiveMMA8451Q(1); LPM3; detachInterrupt(1,6); unsigned char statreg[2] = {0x00, 0x01}; writeI2C(0x1c, statreg, 1, 0); readI2C(0x1c, statreg , 1, 1); writeI2C(0x1c, statreg+1, 1, 0); readI2C(0x1c, buffer , 96, 1); setActiveMMA8451Q(0); disableI2C(); setPwrBusStatus(PM_SYSPWR, PM_DISABLE); return; }
int ddk750_initHw(initchip_param_t * pInitParam) { unsigned int ulReg; #if 0 //move the code to map regiter function. if(getChipType() == SM718){ /* turn on big endian bit*/ ulReg = PEEK32(0x74); /* now consider register definition in a big endian pattern*/ POKE32(0x74,ulReg|0x80000000); } #endif if (pInitParam->powerMode != 0 ) pInitParam->powerMode = 0; setPowerMode(pInitParam->powerMode); /* Enable display power gate & LOCALMEM power gate*/ ulReg = PEEK32(CURRENT_GATE); ulReg = FIELD_SET(ulReg, CURRENT_GATE, DISPLAY, ON); ulReg = FIELD_SET(ulReg,CURRENT_GATE,LOCALMEM,ON); setCurrentGate(ulReg); if(getChipType() != SM750LE){ /* set panel pll and graphic mode via mmio_88 */ ulReg = PEEK32(VGA_CONFIGURATION); ulReg = FIELD_SET(ulReg,VGA_CONFIGURATION,PLL,PANEL); ulReg = FIELD_SET(ulReg,VGA_CONFIGURATION,MODE,GRAPHIC); POKE32(VGA_CONFIGURATION,ulReg); }else{ #if defined(__i386__) || defined( __x86_64__) /* set graphic mode via IO method */ outb_p(0x88,0x3d4); outb_p(0x06,0x3d5); #endif } /* Set the Main Chip Clock */ setChipClock(MHz((unsigned int)pInitParam->chipClock)); /* Set up memory clock. */ setMemoryClock(MHz(pInitParam->memClock)); /* Set up master clock */ setMasterClock(MHz(pInitParam->masterClock)); /* Reset the memory controller. If the memory controller is not reset in SM750, the system might hang when sw accesses the memory. The memory should be resetted after changing the MXCLK. */ if (pInitParam->resetMemory == 1) { ulReg = PEEK32(MISC_CTRL); ulReg = FIELD_SET(ulReg, MISC_CTRL, LOCALMEM_RESET, RESET); POKE32(MISC_CTRL, ulReg); ulReg = FIELD_SET(ulReg, MISC_CTRL, LOCALMEM_RESET, NORMAL); POKE32(MISC_CTRL, ulReg); } if (pInitParam->setAllEngOff == 1) { enable2DEngine(0); /* Disable Overlay, if a former application left it on */ ulReg = PEEK32(VIDEO_DISPLAY_CTRL); ulReg = FIELD_SET(ulReg, VIDEO_DISPLAY_CTRL, PLANE, DISABLE); POKE32(VIDEO_DISPLAY_CTRL, ulReg); /* Disable video alpha, if a former application left it on */ ulReg = PEEK32(VIDEO_ALPHA_DISPLAY_CTRL); ulReg = FIELD_SET(ulReg, VIDEO_ALPHA_DISPLAY_CTRL, PLANE, DISABLE); POKE32(VIDEO_ALPHA_DISPLAY_CTRL, ulReg); /* Disable alpha plane, if a former application left it on */ ulReg = PEEK32(ALPHA_DISPLAY_CTRL); ulReg = FIELD_SET(ulReg, ALPHA_DISPLAY_CTRL, PLANE, DISABLE); POKE32(ALPHA_DISPLAY_CTRL, ulReg); #if 0 /* Disable LCD hardware cursor, if a former application left it on */ ulReg = PEEK32(PANEL_HWC_ADDRESS); ulReg = FIELD_SET(ulReg, PANEL_HWC_ADDRESS, ENABLE, DISABLE); POKE32(PANEL_HWC_ADDRESS, ulReg); /* Disable CRT hardware cursor, if a former application left it on */ ulReg = PEEK32(CRT_HWC_ADDRESS); ulReg = FIELD_SET(ulReg, CRT_HWC_ADDRESS, ENABLE, DISABLE); POKE32(CRT_HWC_ADDRESS, ulReg); /* Disable ZV Port 0, if a former application left it on */ ulReg = PEEK32(ZV0_CAPTURE_CTRL); ulReg = FIELD_SET(ulReg, ZV0_CAPTURE_CTRL, CAP, DISABLE); POKE32(ZV0_CAPTURE_CTRL, ulReg); /* Disable ZV Port 1, if a former application left it on */ ulReg = PEEK32(ZV1_CAPTURE_CTRL); ulReg = FIELD_SET(ulReg, ZV1_CAPTURE_CTRL, CAP, DISABLE); POKE32(ZV1_CAPTURE_CTRL, ulReg); /* Disable ZV Port Power, if a former application left it on */ enableZVPort(0); /* Disable DMA Channel, if a former application left it on */ ulReg = PEEK32(DMA_ABORT_INTERRUPT); ulReg = FIELD_SET(ulReg, DMA_ABORT_INTERRUPT, ABORT_1, ABORT); POKE32(DMA_ABORT_INTERRUPT, ulReg); /* Disable i2c */ enableI2C(0); #endif /* Disable DMA Channel, if a former application left it on */ ulReg = PEEK32(DMA_ABORT_INTERRUPT); ulReg = FIELD_SET(ulReg, DMA_ABORT_INTERRUPT, ABORT_1, ABORT); POKE32(DMA_ABORT_INTERRUPT, ulReg); /* Disable DMA Power, if a former application left it on */ enableDMA(0); } /* We can add more initialization as needed. */ return 0; }