mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 00:24:41 -04:00
devon:charger bring up
devon charger bring up add charge type detect function Change-Id: Icfe4ae8d0ab68b7e2870fd76a738e1eeb0bb57cf Signed-off-by: longc102 <longc102@motorola.com> Reviewed-on: https://gerrit.mot.com/2220902 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Submit-Approved: Jira Key Tested-by: Jira Key Reviewed-by: Qiong Xie <xieq2@motorola.com> Reviewed-on: https://gerrit.mot.com/2221219 Reviewed-by: Wang Wang <wangwang1@lenovo.com>
This commit is contained in:
parent
a2e6fde7f6
commit
868438e48d
4 changed files with 117 additions and 3 deletions
|
|
@ -70,6 +70,8 @@ static const struct wt6670_iio_channels wt6670_iio_psy_channels[] = {
|
|||
wt6670_CHAN_INDEX("wt6670_start_detection", PSY_IIO_START_DETECTION)
|
||||
wt6670_CHAN_INDEX("wt6670_detection_ready", PSY_IIO_DETECTION_READY)
|
||||
wt6670_CHAN_INDEX("wt6670_firmware_num", PSY_IIO_QC3P_FIRMWARE_NUM)
|
||||
wt6670_CHAN_INDEX("wt6670_start_bc12_detection", PSY_IIO_START_BC12_DETECTION)
|
||||
wt6670_CHAN_INDEX("wt6670_detection_bc12_ready", PSY_IIO_DETECTION_BC12_READY)
|
||||
};
|
||||
|
||||
int wt6670f_isp_flow(struct wt6670f *chip);
|
||||
|
|
|
|||
|
|
@ -596,6 +596,11 @@ static int wt6670_iio_write_raw(struct iio_dev *indio_dev,
|
|||
wt6670f_set_volt_count(val1);
|
||||
pr_info("wt6670 set volt count:%d\n",val1);
|
||||
break;
|
||||
case PSY_IIO_START_BC12_DETECTION:
|
||||
wt6670f_reset_chg_type();
|
||||
wt6670f_start_detection();
|
||||
pr_info("wt6670 start bc1.2 detection\n");
|
||||
break;
|
||||
default:
|
||||
pr_err("Unsupported wt6670 IIO chan %d\n", chan->channel);
|
||||
rc = -EINVAL;
|
||||
|
|
@ -663,6 +668,11 @@ static int wt6670_iio_read_raw(struct iio_dev *indio_dev,
|
|||
pr_info("could not get device id for used\n");
|
||||
}
|
||||
|
||||
*val1 = result;
|
||||
break;
|
||||
case PSY_IIO_DETECTION_BC12_READY:
|
||||
result = wt6670f_is_charger_ready();
|
||||
pr_info("wt6670 get bc1.2 ready status:%d\n", result);
|
||||
*val1 = result;
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -1809,6 +1809,53 @@ bool qc3p_update_policy(struct sgm4154x_device *chip )
|
|||
dev_info(chip->dev, "write SMB5_QC3P_START_POLICY IIO :%d\n",val);
|
||||
return val;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMI_SGM41513_CHARGER
|
||||
int bc12_start_detection(struct sgm4154x_device *chip)
|
||||
{
|
||||
int ret = 0;
|
||||
ret = mmi_charger_write_iio_chan(chip, SMB5_BC12_START_DETECT, true);
|
||||
if(ret )
|
||||
dev_err(chip->dev, "Cann't write SMB5_BC12_START_DETECT IIO\n");
|
||||
|
||||
dev_info(chip->dev, "write SMB5_BC12_START_DETECT IIO success\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool bc12_detection_done(struct sgm4154x_device *chip)
|
||||
{
|
||||
int ret = 0;
|
||||
int val = 0;
|
||||
int delay_count =0;
|
||||
|
||||
do {
|
||||
ret = mmi_charger_read_iio_chan(chip, SMB5_BC12_DETECTION_READY, &val);
|
||||
if(ret )
|
||||
dev_err(chip->dev, "Cann't read SMB5_BC12_DETECTION_READY IIO\n");
|
||||
|
||||
dev_info(chip->dev, "read SMB5_BC12_DETECTION_READY IIO :%d\n",val);
|
||||
|
||||
msleep(100);
|
||||
delay_count ++;
|
||||
}while(val == false && delay_count <= 35);
|
||||
|
||||
dev_info(chip->dev, "read SMB5_BC12_DETECTION_READY IIO :%d\n",val);
|
||||
return val;
|
||||
}
|
||||
|
||||
int bc12_read_charger_type(struct sgm4154x_device *chip)
|
||||
{
|
||||
int ret = 0;
|
||||
int val = 0;
|
||||
|
||||
ret = mmi_charger_read_iio_chan(chip, SMB5_USB_REAL_TYPE, &val);
|
||||
if(ret )
|
||||
dev_err(chip->dev, "Cann't read SMB5_USB_REAL_TYPE IIO\n");
|
||||
|
||||
dev_info(chip->dev, "read SMB5_USB_REAL_TYPE IIO :%d\n",val);
|
||||
return val;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static int mmi_hvdcp_detect_kthread(void *param)
|
||||
|
|
@ -1918,6 +1965,50 @@ static void mmi_start_hvdcp_detect(struct sgm4154x_device *sgm)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMI_SGM41513_CHARGER
|
||||
static bool mmi_start_bc12_charger_type_detect(struct sgm4154x_device *sgm, int *real_charger_type)
|
||||
{
|
||||
bool result;
|
||||
int ret;
|
||||
|
||||
bc12_start_detection(sgm);
|
||||
bc12_detection_done(sgm);
|
||||
ret = bc12_read_charger_type(sgm);
|
||||
|
||||
switch(ret) {
|
||||
case WT6670_CHG_TYPE_UNKNOWN:
|
||||
case WT_CHG_TYPE_FC:
|
||||
case WT_CHG_TYPE_OCP:
|
||||
dev_err(sgm->dev, "unkown type have been detected !\n");
|
||||
*real_charger_type = POWER_SUPPLY_TYPE_USB_FLOAT;
|
||||
result = true;
|
||||
break;
|
||||
case WT_CHG_TYPE_SDP:
|
||||
dev_err(sgm->dev, "SDP have been detected !\n");
|
||||
*real_charger_type = POWER_SUPPLY_TYPE_USB;
|
||||
result = true;
|
||||
break;
|
||||
case WT_CHG_TYPE_CDP:
|
||||
dev_err(sgm->dev, "CDP have been detected !\n");
|
||||
*real_charger_type = POWER_SUPPLY_TYPE_USB_CDP;
|
||||
result = true;
|
||||
break;
|
||||
case WT_CHG_TYPE_DCP:
|
||||
dev_err(sgm->dev, "DCP have been detected !\n");
|
||||
*real_charger_type = POWER_SUPPLY_TYPE_USB_DCP;
|
||||
mmi_start_hvdcp_detect(sgm);
|
||||
result = true;
|
||||
break;
|
||||
default:
|
||||
pr_err("bc12 charger type: default\n");
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void sgm4154x_vbus_remove(struct sgm4154x_device * sgm)
|
||||
{
|
||||
dev_err(sgm->dev, "Vbus removed, disable charge\n");
|
||||
|
|
@ -1949,7 +2040,9 @@ static void sgm4154x_vbus_remove(struct sgm4154x_device * sgm)
|
|||
|
||||
static void sgm4154x_vbus_plugin(struct sgm4154x_device * sgm)
|
||||
{
|
||||
|
||||
#ifdef CONFIG_MMI_SGM41513_CHARGER
|
||||
bool ret;
|
||||
#endif
|
||||
#if defined(__SGM41542_CHIP_ID__)|| defined(__SGM41516D_CHIP_ID__)
|
||||
if (((sgm->state.chrg_type == SGM4154x_USB_SDP) ||
|
||||
(sgm->state.chrg_type == SGM4154x_NON_STANDARD) ||
|
||||
|
|
@ -1967,11 +2060,17 @@ static void sgm4154x_vbus_plugin(struct sgm4154x_device * sgm)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
sgm->state.chrg_type = SGM4154x_USB_DCP;
|
||||
|
||||
switch(sgm->state.chrg_type) {
|
||||
case SGM4154x_USB_SDP:
|
||||
pr_err("SGM4154x charger type: SDP\n");
|
||||
#ifndef CONFIG_MMI_SGM41513_CHARGER
|
||||
sgm->real_charger_type = POWER_SUPPLY_TYPE_USB;
|
||||
#else
|
||||
ret = mmi_start_bc12_charger_type_detect(sgm, &sgm->real_charger_type);
|
||||
if (!ret)
|
||||
return;
|
||||
#endif
|
||||
break;
|
||||
|
||||
case SGM4154x_USB_CDP:
|
||||
|
|
@ -1999,7 +2098,6 @@ static void sgm4154x_vbus_plugin(struct sgm4154x_device * sgm)
|
|||
pr_err("SGM4154x charger type: default\n");
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
schedule_delayed_work(&sgm->charge_monitor_work, 0);
|
||||
|
|
|
|||
|
|
@ -398,6 +398,8 @@ enum mmi_qc3p_ext_iio_channels {
|
|||
SMB5_QC3P_START_DETECT,
|
||||
SMB5_QC3P_DETECTION_READY,
|
||||
SMB5_QC3P_START_POLICY,
|
||||
SMB5_BC12_START_DETECT,
|
||||
SMB5_BC12_DETECTION_READY,
|
||||
};
|
||||
|
||||
static const char * const mmi_qc3p_ext_iio_chan_name[] = {
|
||||
|
|
@ -407,6 +409,8 @@ static const char * const mmi_qc3p_ext_iio_chan_name[] = {
|
|||
[SMB5_QC3P_START_DETECT] = "wt6670_start_detection",
|
||||
[SMB5_QC3P_DETECTION_READY] "wt6670_detection_ready",
|
||||
[SMB5_QC3P_START_POLICY] "qc3p_start_policy",
|
||||
[SMB5_BC12_START_DETECT] = "wt6670_start_bc12_detection",
|
||||
[SMB5_BC12_DETECTION_READY] = "wt6670_detection_bc12_ready",
|
||||
};
|
||||
bool qc3p_update_policy(struct sgm4154x_device *chip);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue