Exemplo n.º 1
0
int muic_set_device_none_detect(struct i2c_client *client,
		unsigned char int_stat_value)
{
//	s32 loop = 0;
	unsigned char charger_value = 0;

	unsigned char stat_value = 0;
//	unsigned char Accessory_value = 0;
//	unsigned char orginal_value = 0;
	unsigned char id_register_value = 0;

//	int i;

	id_register_value = 0x0f & int_stat_value;

	dev_info(&client->dev, "muic: %s, muic_retain_mode:%d, Int_Status:%d, INT_STATUS:0x%2x\n",
		__func__,muic_retain_mode, Int_Status, int_stat_value);


	if(int_stat_value & VBUS) {// VBUS  = High
		dev_info(&client->dev, "muic: %s: VBUS is High....\n", __func__);

		if(muic_process_retention_mode(client))
			return 0;


		if(Second_Int == tsu5611_process_reset_muic(client))
			return 0;


		if( (int_stat_value & CHGDET) || (charger_value & CHPORT))
		{
			dev_info(&client->dev, "muic: Charger detection....\n");
			muic_i2c_write_byte(client, CONTROL_2, 0x02);

			mdelay(250); // if charger type then waiting 250ms

			muic_i2c_read_byte(client, STATUS, &charger_value); // 06H register read
			muic_i2c_read_byte(client, INT_STATUS1, &stat_value);
			dev_info(&client->dev, "muic: STATUS register:0x%x, INT_STATUS1 register:0x%x\n",
				charger_value, stat_value);

			muic_set_charger_mode(client, charger_value);
//			Int_Status = First_Int;
		}else if((id_register_value == IDNO_0010) // 56k + VBUS
			|| (id_register_value == IDNO_1010) // 910k + VBUS
			|| (id_register_value == IDNO_1001)) // 620k + VBUS
		{
			muic_set_mode(MUIC_CP_USB);
		}else if(id_register_value == IDNO_0100){
			muic_set_mode(MUIC_CP_UART);
		}else if(IDNO_0000 ==id_register_value){
			muic_set_mode(MUIC_MHL);

#if 0
		}else if(0){
			muic_set_mode(MUIC_AP_UART);
#endif
		}else{
			muic_set_mode(MUIC_AP_USB);
#if 0
		}else{
Exemplo n.º 2
0
int muic_set_device_none_detect(struct i2c_client *client,unsigned char int_stat_value)
{
//	s32 loop = 0;
	unsigned char charger_value = 0;

//	unsigned char stat_value = 0;
//	unsigned char Accessory_value = 0;
//	unsigned char orginal_value = 0;
	unsigned char id_register_value = 0;

//	int i;

	id_register_value = 0x0f & int_stat_value;

	dev_info(&client->dev, "muic: %s, muic_retain_mode:%d, Int_Status:%d, INT_STATUS:0x%2x\n",
		__func__,muic_retain_mode, Int_Status, int_stat_value);


	if(int_stat_value & VBUS) 
	{// VBUS  = High
		dev_info(&client->dev, "muic: %s: VBUS is High.... id_register_value:%d\n", __func__,id_register_value);

		if(muic_process_retention_mode(client))
			return 0;

		//if(Second_Int == max14526_process_reset_muic(client))
			//return 0;

		if(id_register_value == IDNO_0010 /*56k + VBUS*/)
		{
			muic_set_mode(MUIC_CP_USB);
		}
		else if(id_register_value == IDNO_1010 /*910k + VBUS*/)
		{
			muic_set_mode(MUIC_CP_USB);
		}
		else if(id_register_value == IDNO_1001 /*620k + VBUS*/)
		{
			muic_set_mode(MUIC_CP_USB);
		}
		else if(id_register_value == IDNO_0100)/*130k + VBUS*/
		{
			muic_set_mode(MUIC_CP_UART);
		}
#if defined(CONFIG_MHL)	
		else if(id_register_value==IDNO_0000)
		{
			muic_set_mode(MUIC_MHL);
		}
#endif
		else if(id_register_value == IDNO_0101)/*180k + VBUS LG proprietary TA Detected*/
		{
			//muic_set_mode(MUIC_LG_TA);
			muic_set_mode(MUIC_AP_USB);//lg usb calble\C0\C7 int_stat_value =0x15 \B7\CE \B5\BF\C0۵Ǿ\EE, \C0Ϲ\DD usb cable\B7\CE \BC\F6\C1\A4 \C7\D4.
		}
		else// if(charger_value & CHPORT)
		{
			dev_info(&client->dev, "muic: Charger detection....\n");
			
			muic_i2c_write_byte(client,SW_CONTROL, COMP2_TO_HZ | COMN1_TO_C1COMP);
			//muic_mdelay(2);//mdelay(250); // if charger type then waiting 250ms
			//muic_i2c_read_byte(client, INT_STAT, &stat_value);
			muic_i2c_read_byte(client,STATUS, &charger_value);
			dev_info(&client->dev, "muic: charger_value :0x%x\n",charger_value);
			//muic_set_charger_mode(client, charger_value);

			//else if( (stat_value & CHGDET)&&((id_register_value & IDNO) == IDNO_1011))//stat_value==0x9B \C0Ϲ\DD \C3\E6\C0\FC\B1\E2
#ifdef CONFIG_FORCE_FAST_CHARGE
			if((int_stat_value & CHGDET) || (force_fast_charge != 0))
			{
				muic_i2c_write_byte(client,SW_CONTROL, COMP2_TO_HZ | COMN1_TO_HZ);
				muic_set_mode(MUIC_LG_TA);
			}
#else
			if(int_stat_value & CHGDET)
			{
				muic_i2c_write_byte(client,SW_CONTROL, COMP2_TO_HZ | COMN1_TO_HZ);
				muic_set_mode(MUIC_LG_TA);
			}
#endif
			else if (charger_value & DCPORT)
			{
				/* Not used actually. Special TA for North America.*/
				muic_i2c_write_byte(client,SW_CONTROL, COMP2_TO_HZ | COMN1_TO_HZ);
				muic_set_mode(MUIC_NA_TA);
			} 
			else if (charger_value & CHPORT)
			{
				//muic_i2c_write_byte(client,SW_CONTROL, COMP2_TO_HZ | COMN1_TO_HZ);
				muic_set_mode(MUIC_AP_USB);
			}
			else if (charger_value & C1COMP) 
			{//MUIC_LG_TA , CHARGING_LG_TA
				muic_i2c_write_byte(client,SW_CONTROL, COMP2_TO_HZ | COMN1_TO_HZ);
				muic_set_mode(MUIC_LG_TA);
				//muic_path = MUIC_LG_TA;
				//charging_mode = CHARGING_LG_TA;
			}
			else //stat_value==0x1B \C0Ϲ\DD UBS\C4\C9\C0̺\ED
			{
				//set_max14526_ap_usb_mode();
				muic_set_mode(MUIC_AP_USB);
				//muic_path = MUIC_AP_USB;
				//charging_mode = CHARGING_USB;
			}
		}
	}
	else
	{
		muic_set_mode(MUIC_NONE);
	}

	return 0;
}