//[*]----------------------------------------------------------------------------------------------[*]
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);
}
Exemple #2
0
//[*]----------------------------------------------------------------------------------------------[*]
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;
}
Exemple #10
0
//[*]----------------------------------------------------------------------------------------------[*]
void 				hkc1xx_touch_port_init	(void)
{
	gpio_i2c_set_sda(HIGH);		gpio_i2c_set_clk(HIGH);
}