From 110f2ead7b0bdd67a5e9f9fe58ccf93287182bf0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=BC=A0=E6=99=B4?= Date: Fri, 14 Sep 2012 11:17:00 +0800 Subject: [PATCH] rk2928:a720:support i2c_sram --- arch/arm/mach-rk2928/i2c_sram.c | 364 ++++++++++++++++++++++++++++++++ 1 file changed, 364 insertions(+) create mode 100755 arch/arm/mach-rk2928/i2c_sram.c diff --git a/arch/arm/mach-rk2928/i2c_sram.c b/arch/arm/mach-rk2928/i2c_sram.c new file mode 100755 index 000000000000..f93a20cfe5ad --- /dev/null +++ b/arch/arm/mach-rk2928/i2c_sram.c @@ -0,0 +1,364 @@ +#include +#include +#include +#include +#include +#include +#include + +#define cru_readl(offset) readl_relaxed(RK2928_CRU_BASE + offset) +#define cru_writel(v, offset) do { writel_relaxed(v, RK2928_CRU_BASE + offset); dsb(); } while (0) + +#if defined(CONFIG_RK30_I2C_INSRAM) + +/******************need set when you use i2c*************************/ +#define I2C_SPEED 100 +#define I2C_SADDR (0x2D) /* slave address ,wm8310 addr is 0x34*/ +#define SRAM_I2C_CH 1 //CH==0, i2c0,CH==1, i2c1,CH==2, i2c2,CH==3, i2c3 +#if defined (CONFIG_MACH_RK2928_SDK) +#define SRAM_I2C_ADDRBASE (RK2928_RKI2C1_BASE )//RK29_I2C0_BASE\RK29_I2C2_BASE\RK29_I2C3_BASE +#else +#define SRAM_I2C_ADDRBASE (RK2928_RKI2C0_BASE ) +#endif + +#define I2C_SLAVE_ADDR_LEN 1 // 2:slav addr is 10bit ,1:slav addr is 7bit +#define I2C_SLAVE_REG_LEN 1 // 2:slav reg addr is 16 bit ,1:is 8 bit +#define SRAM_I2C_DATA_BYTE 1 //i2c transmission data is 1bit(8wei) or 2bit(16wei) +#define GRF_GPIO_IOMUX 0xd4 //GRF_GPIO2D_IOMUX +/*ch=0:GRF_GPIO2L_IOMUX,ch=1:GRF_GPIO1L_IOMUX,ch=2:GRF_GPIO5H_IOMUX,ch=3:GRF_GPIO2L_IOMUX*/ +#define I2C_GRF_GPIO_IOMUX (0x01<<14)|(0x01<<12) +/*CH=0:(~(0x03<<30))&(~(0x03<<28))|(0x01<<30)|(0x01<<28),CH=1:(~(0x03<<14))&(~(0x03<<12))|(0x01<<14)|(0x01<<12), +CH=2:(~(0x03<<24))&(~(0x03<<22))|(0x01<<24)|(0x01<<22),CH=3:(~(0x03<<26))&(~(0x03<<24))|(0x02<<26)|(0x02<<24)*/ +/***************************************/ + +#define I2C_SLAVE_TYPE (((I2C_SLAVE_ADDR_LEN-1)<<4)|((I2C_SLAVE_REG_LEN-1))) + +#define uint8 unsigned char +#define uint16 unsigned short +#define uint32 unsigned int +uint32 __sramdata data[5]; +uint8 __sramdata arm_voltage = 0; + +#define CRU_CLKGATE0_CON 0xd0 +#define CRU_CLKGATE8_CON 0xf0 +#define CRU_CLKSEL1_CON 0x48 +#define GRF_GPIO5H_IOMUX 0x74 +#define GRF_GPIO2L_IOMUX 0x58 +#define GRF_GPIO1L_IOMUX 0x50 + +#define COMPLETE_READ (1<= 0x3b ){ // set arm <= 1.3v + data = 0x3b; + } + else if(arm_voltage <= 0x1f){ + data = 0x1f; // set arm >= 0.95v + } + else + data = arm_voltage; + sram_i2c_write(slaveaddr, slavereg, data); + sram_i2c_deinit(); //deinit i2c device +} +#else +void __sramfunc rk30_suspend_voltage_set(unsigned int vol) +{ + +} +void __sramfunc rk30_suspend_voltage_resume(unsigned int vol) +{ + +} +#endif + + + -- 2.34.1