Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0587eb7 authored by Chanwoo Choi's avatar Chanwoo Choi
Browse files

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: default avatarChanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: default avatarMyungjoo Ham <myungjoo.ham@samsung.com>
parent 06bed0af
Loading
Loading
Loading
Loading
+46 −6
Original line number Diff line number Diff line
@@ -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: