extcon: max77693: Add support jig cable

This patch detect several kinds of JIG cable according to ADC value
and set the hardware line path according to type of JIG cable(JIG-USB-ON
/JIG-USB-OFF/JIG-UART-OFF).

Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Myungjoo Ham <myungjoo.ham@samsung.com>
This commit is contained in:
Chanwoo Choi 2012-11-27 12:06:49 +09:00
parent 06bed0afa2
commit d0587eb794

View file

@ -153,9 +153,10 @@ enum {
EXTCON_CABLE_CHARGE_DOWNSTREAM,
EXTCON_CABLE_MHL,
EXTCON_CABLE_MHL_TA,
EXTCON_CABLE_JIG_USB_ON,
EXTCON_CABLE_JIG_USB_OFF,
EXTCON_CABLE_JIG_UART_OFF,
EXTCON_CABLE_AUDIO_VIDEO_LOAD,
EXTCON_CABLE_AUDIO_VIDEO_NOLOAD,
EXTCON_CABLE_JIG,
_EXTCON_CABLE_NUM,
};
@ -169,9 +170,11 @@ const char *max77693_extcon_cable[] = {
[EXTCON_CABLE_CHARGE_DOWNSTREAM] = "Charge-downstream",
[EXTCON_CABLE_MHL] = "MHL",
[EXTCON_CABLE_MHL_TA] = "MHL_TA",
[EXTCON_CABLE_JIG_USB_ON] = "JIG-USB-ON",
[EXTCON_CABLE_JIG_USB_OFF] = "JIG-USB-OFF",
[EXTCON_CABLE_JIG_UART_OFF] = "JIG-UART-OFF",
[EXTCON_CABLE_AUDIO_VIDEO_LOAD] = "Audio-video-load",
[EXTCON_CABLE_AUDIO_VIDEO_NOLOAD] = "Audio-video-noload",
[EXTCON_CABLE_JIG] = "JIG",
NULL,
};
@ -450,6 +453,44 @@ static int max77693_muic_adc_ground_handler(struct max77693_muic_info *info)
return ret;
}
static int max77693_muic_jig_handler(struct max77693_muic_info *info,
int cable_type, bool attached)
{
char cable_name[32];
int ret = 0;
u8 path = CONTROL1_SW_OPEN;
dev_info(info->dev,
"external connector is %s (adc:0x%02x)\n",
attached ? "attached" : "detached", cable_type);
switch (cable_type) {
case MAX77693_MUIC_ADC_FACTORY_MODE_USB_OFF: /* ADC_JIG_USB_OFF */
/* PATH:AP_USB */
strcpy(cable_name, "JIG-USB-OFF");
path = CONTROL1_SW_USB;
break;
case MAX77693_MUIC_ADC_FACTORY_MODE_USB_ON: /* ADC_JIG_USB_ON */
/* PATH:AP_USB */
strcpy(cable_name, "JIG-USB-ON");
path = CONTROL1_SW_USB;
break;
case MAX77693_MUIC_ADC_FACTORY_MODE_UART_OFF: /* ADC_JIG_UART_OFF */
/* PATH:AP_UART */
strcpy(cable_name, "JIG-UART-OFF");
path = CONTROL1_SW_UART;
break;
}
ret = max77693_muic_set_path(info, path, attached);
if (ret < 0)
goto out;
extcon_set_cable_state(info->edev, cable_name, attached);
out:
return ret;
}
static int max77693_muic_adc_handler(struct max77693_muic_info *info)
{
int cable_type;
@ -474,10 +515,9 @@ static int max77693_muic_adc_handler(struct max77693_muic_info *info)
case MAX77693_MUIC_ADC_FACTORY_MODE_USB_ON:
case MAX77693_MUIC_ADC_FACTORY_MODE_UART_OFF:
/* JIG */
ret = max77693_muic_set_path(info, CONTROL1_SW_UART, attached);
ret = max77693_muic_jig_handler(info, cable_type, attached);
if (ret < 0)
goto out;
extcon_set_cable_state(info->edev, "JIG", attached);
break;
case MAX77693_MUIC_ADC_FACTORY_MODE_UART_ON:
case MAX77693_MUIC_ADC_AUDIO_MODE_REMOTE: