mirror of
https://github.com/torvalds/linux.git
synced 2024-11-20 02:51:44 +00:00
extcon: max77693: Add support MHL_TA cable for charging battery
This patch support MHL_TA cable for charging battery. The MHL_TA cable include MHL with TA cable or MHL with micro USB cable. When MHL with TA/USB cable is attached, extcon-max77693 driver detect two interrupt for handling precise operation according to each cable (MHL and TA/USB cable). Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> Signed-off-by: Myungjoo Ham <myungjoo.ham@samsung.com>
This commit is contained in:
parent
154f757fd3
commit
06bed0afa2
@ -136,9 +136,11 @@ enum max77693_muic_acc_type {
|
||||
|
||||
/* The below accessories have same ADC value so ADCLow and
|
||||
ADC1K bit is used to separate specific accessory */
|
||||
MAX77693_MUIC_GND_USB_OTG = 0x100, /* ADC:0x0, ADCLow:0, ADC1K:0 */
|
||||
MAX77693_MUIC_GND_AV_CABLE_LOAD = 0x102,/* ADC:0x0, ADCLow:1, ADC1K:0 */
|
||||
MAX77693_MUIC_GND_MHL_CABLE = 0x103, /* ADC:0x0, ADCLow:1, ADC1K:1 */
|
||||
MAX77693_MUIC_GND_USB_OTG = 0x100, /* ADC:0x0, VBVolot:0, ADCLow:0, ADC1K:0 */
|
||||
MAX77693_MUIC_GND_USB_OTG_VB = 0x104, /* ADC:0x0, VBVolot:1, ADCLow:0, ADC1K:0 */
|
||||
MAX77693_MUIC_GND_AV_CABLE_LOAD = 0x102,/* ADC:0x0, VBVolot:0, ADCLow:1, ADC1K:0 */
|
||||
MAX77693_MUIC_GND_MHL = 0x103, /* ADC:0x0, VBVolot:0, ADCLow:1, ADC1K:1 */
|
||||
MAX77693_MUIC_GND_MHL_VB = 0x107, /* ADC:0x0, VBVolot:1, ADCLow:1, ADC1K:1 */
|
||||
};
|
||||
|
||||
/* MAX77693 MUIC device support below list of accessories(external connector) */
|
||||
@ -150,6 +152,7 @@ enum {
|
||||
EXTCON_CABLE_SLOW_CHARGER,
|
||||
EXTCON_CABLE_CHARGE_DOWNSTREAM,
|
||||
EXTCON_CABLE_MHL,
|
||||
EXTCON_CABLE_MHL_TA,
|
||||
EXTCON_CABLE_AUDIO_VIDEO_LOAD,
|
||||
EXTCON_CABLE_AUDIO_VIDEO_NOLOAD,
|
||||
EXTCON_CABLE_JIG,
|
||||
@ -165,6 +168,7 @@ const char *max77693_extcon_cable[] = {
|
||||
[EXTCON_CABLE_SLOW_CHARGER] = "Slow-charger",
|
||||
[EXTCON_CABLE_CHARGE_DOWNSTREAM] = "Charge-downstream",
|
||||
[EXTCON_CABLE_MHL] = "MHL",
|
||||
[EXTCON_CABLE_MHL_TA] = "MHL_TA",
|
||||
[EXTCON_CABLE_AUDIO_VIDEO_LOAD] = "Audio-video-load",
|
||||
[EXTCON_CABLE_AUDIO_VIDEO_NOLOAD] = "Audio-video-noload",
|
||||
[EXTCON_CABLE_JIG] = "JIG",
|
||||
@ -330,6 +334,7 @@ static int max77693_muic_get_cable_type(struct max77693_muic_info *info,
|
||||
/**
|
||||
* [0x1][VBVolt][ADCLow][ADC1K]
|
||||
* [0x1 0 0 0 ] : USB_OTG
|
||||
* [0x1 1 0 0 ] : USB_OTG_VB
|
||||
* [0x1 0 1 0 ] : Audio Video Cable with load
|
||||
* [0x1 0 1 1 ] : MHL without charging connector
|
||||
* [0x1 1 1 1 ] : MHL with charging connector
|
||||
@ -414,22 +419,24 @@ static int max77693_muic_adc_ground_handler(struct max77693_muic_info *info)
|
||||
|
||||
switch (cable_type_gnd) {
|
||||
case MAX77693_MUIC_GND_USB_OTG:
|
||||
/* USB_OTG */
|
||||
case MAX77693_MUIC_GND_USB_OTG_VB:
|
||||
/* USB_OTG, PATH: AP_USB */
|
||||
ret = max77693_muic_set_path(info, CONTROL1_SW_USB, attached);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
extcon_set_cable_state(info->edev, "USB-Host", attached);
|
||||
break;
|
||||
case MAX77693_MUIC_GND_AV_CABLE_LOAD:
|
||||
/* Audio Video Cable with load */
|
||||
/* Audio Video Cable with load, PATH:AUDIO */
|
||||
ret = max77693_muic_set_path(info, CONTROL1_SW_AUDIO, attached);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
extcon_set_cable_state(info->edev,
|
||||
"Audio-video-load", attached);
|
||||
break;
|
||||
case MAX77693_MUIC_GND_MHL_CABLE:
|
||||
/* MHL */
|
||||
case MAX77693_MUIC_GND_MHL:
|
||||
case MAX77693_MUIC_GND_MHL_VB:
|
||||
/* MHL or MHL with USB/TA cable */
|
||||
extcon_set_cable_state(info->edev, "MHL", attached);
|
||||
break;
|
||||
default:
|
||||
@ -528,7 +535,9 @@ out:
|
||||
static int max77693_muic_chg_handler(struct max77693_muic_info *info)
|
||||
{
|
||||
int chg_type;
|
||||
int cable_type_gnd;
|
||||
bool attached;
|
||||
bool cable_attached;
|
||||
int ret = 0;
|
||||
|
||||
chg_type = max77693_muic_get_cable_type(info,
|
||||
@ -541,10 +550,35 @@ static int max77693_muic_chg_handler(struct max77693_muic_info *info)
|
||||
|
||||
switch (chg_type) {
|
||||
case MAX77693_CHARGER_TYPE_USB:
|
||||
ret = max77693_muic_set_path(info, CONTROL1_SW_USB, attached);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
extcon_set_cable_state(info->edev, "USB", attached);
|
||||
cable_type_gnd = max77693_muic_get_cable_type(info,
|
||||
MAX77693_CABLE_GROUP_ADC_GND,
|
||||
&cable_attached);
|
||||
|
||||
switch (cable_type_gnd) {
|
||||
case MAX77693_MUIC_GND_MHL:
|
||||
case MAX77693_MUIC_GND_MHL_VB:
|
||||
/*
|
||||
* USB/TA with MHL cable
|
||||
* - MHL cable, which connect micro USB or TA cable,
|
||||
* is used to charging battery. So, extcon driver check
|
||||
* charging type whether micro USB or TA cable is
|
||||
* connected to MHL cable when extcon driver detect MHL
|
||||
* cable.
|
||||
*/
|
||||
extcon_set_cable_state(info->edev, "MHL_TA", attached);
|
||||
|
||||
if (!cable_attached)
|
||||
extcon_set_cable_state(info->edev,
|
||||
"MHL", false);
|
||||
break;
|
||||
default:
|
||||
/* Only USB cable, PATH:AP_USB */
|
||||
ret = max77693_muic_set_path(info, CONTROL1_SW_USB,
|
||||
attached);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
extcon_set_cable_state(info->edev, "USB", attached);
|
||||
}
|
||||
break;
|
||||
case MAX77693_CHARGER_TYPE_DOWNSTREAM_PORT:
|
||||
extcon_set_cable_state(info->edev,
|
||||
|
Loading…
Reference in New Issue
Block a user