//[*]----------------------------------------------------------------------------------------------[*] static void gpio_i2c_send_noack (void) { // SDA High gpio_i2c_set_sda(HIGH); delay_func(DELAY_TIME); gpio_i2c_set_clk(HIGH); delay_func(DELAY_TIME); gpio_i2c_set_clk(LOW); delay_func(DELAY_TIME); }
//[*]----------------------------------------------------------------------------------------------[*] static void gpio_i2c_send_ack (void) { // SDA Low gpio_i2c_set_sda(LOW); udelay(DELAY_TIME); gpio_i2c_set_clk(HIGH); udelay(DELAY_TIME); gpio_i2c_set_clk(LOW); udelay(DELAY_TIME); }
//[*]----------------------------------------------------------------------------------------------[*] static void gpio_i2c_start (void) { // Setup SDA, CLK output High gpio_i2c_set_sda(HIGH); gpio_i2c_set_clk(HIGH); delay_func(DELAY_TIME); // SDA low before CLK low gpio_i2c_set_sda(LOW); delay_func(DELAY_TIME); gpio_i2c_set_clk(LOW); delay_func(DELAY_TIME); }
//[*]----------------------------------------------------------------------------------------------[*] static void gpio_i2c_byte_write (unsigned char wdata) { unsigned char cnt, mask; for(cnt = 0, mask = 0x80; cnt < 8; cnt++, mask >>= 1) { if(wdata & mask) gpio_i2c_set_sda(HIGH); else gpio_i2c_set_sda(LOW); gpio_i2c_set_clk(HIGH); delay_func(DELAY_TIME); gpio_i2c_set_clk(LOW); delay_func(DELAY_TIME); } }
//[*]----------------------------------------------------------------------------------------------[*] static void gpio_i2c_stop (void) { // Setup SDA, CLK output low gpio_i2c_set_sda(LOW); gpio_i2c_set_clk(LOW); delay_func(DELAY_TIME); // SDA high after CLK high gpio_i2c_set_clk(HIGH); delay_func(DELAY_TIME); gpio_i2c_set_sda(HIGH); delay_func(DELAY_TIME); }
//[*]----------------------------------------------------------------------------------------------[*] static void gpio_i2c_byte_read (unsigned char *rdata) { unsigned char cnt, mask; gpio_i2c_sda_port_control(GPIO_CON_INPUT); delay_func(PORT_CHANGE_DELAY_TIME); for(cnt = 0, mask = 0x80, *rdata = 0; cnt < 8; cnt++, mask >>= 1) { gpio_i2c_set_clk(HIGH); delay_func(DELAY_TIME); if(gpio_i2c_get_sda()) *rdata |= mask; gpio_i2c_set_clk(LOW); delay_func(DELAY_TIME); } }
//[*]----------------------------------------------------------------------------------------------[*] //[*]----------------------------------------------------------------------------------------------[*] void pmic_init(void) { unsigned char rwdata; gpio_i2c_set_sda(HIGH); gpio_i2c_set_clk(HIGH); rwdata = 0x08; // reset delay changed : 7sec to 3sec pmic_write(0x0A, &rwdata, 1); rwdata = 0x14; // 1.8V Enable pmic_write(0x53, &rwdata, 1); // EMMC }
//[*]----------------------------------------------------------------------------------------------[*] //[*]----------------------------------------------------------------------------------------------[*] void emmc_pwr_reset(void) { unsigned char rwdata; gpio_i2c_set_sda(HIGH); gpio_i2c_set_clk(HIGH); rwdata = 0x14; // 1.8V Enable pmic_write(0x53, &rwdata, 1); // EMMC rwdata = 0x00; // 1.8V Enable // pmic_write(0x34, &rwdata, 1); // BUCK7 3.0V pmic_write(0x36, &rwdata, 1); // BUCK8 3.0V }
//[*]----------------------------------------------------------------------------------------------[*] static unsigned char gpio_i2c_chk_ack (void) { unsigned char count = 0, ret = 0; gpio_i2c_set_sda(LOW); delay_func(DELAY_TIME); gpio_i2c_set_clk(HIGH); delay_func(DELAY_TIME); gpio_i2c_sda_port_control(GPIO_CON_INPUT); delay_func(PORT_CHANGE_DELAY_TIME); while(gpio_i2c_get_sda()) { if(count++ > 100) { ret = 1; break; } else delay_func(DELAY_TIME); } gpio_i2c_set_clk(LOW); delay_func(DELAY_TIME); #if defined(DEBUG_GPIO_I2C) if(ret) DEBUG_MSG(("%s (%d): no ack!!\n",__FUNCTION__, ret)); else DEBUG_MSG(("%s (%d): ack !! \n" ,__FUNCTION__, ret)); #endif return ret; }
//[*]----------------------------------------------------------------------------------------------[*] void hkc1xx_touch_port_init (void) { gpio_i2c_set_sda(HIGH); gpio_i2c_set_clk(HIGH); }