mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 00:24:41 -04:00
PD: Extend PD adapter class charge function
Extend PD adaper charge function for future PD IC 1. add pd idx select interface for config PDO 2. add MMI_PD_ALL for got all PDO info Change-Id: Ic60270c3c4cf071044a50fdd56f546120ce7369c Signed-off-by: chailu1 <chailu1@lenovo.com> Reviewed-on: https://gerrit.mot.com/2115616 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Huosheng Liao <liaohs@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
28d310006b
commit
bf8776fd3d
3 changed files with 55 additions and 17 deletions
|
|
@ -57,7 +57,7 @@ static ssize_t pdo_info_show(struct device *dev,
|
|||
cap.pwr_limit[i] = 0;
|
||||
}
|
||||
|
||||
adapter_dev_get_cap(adapter_dev, MMI_PD, &cap);
|
||||
adapter_dev_get_cap(adapter_dev, MMI_PD_ALL, &cap);
|
||||
for (i = 0; i < cap.nr; i++) {
|
||||
pr_err("%d: mV:%d,%d mA:%d type:%d\n", i,
|
||||
cap.max_mv[i], cap.min_mv[i], cap.ma[i], cap.type[i]);
|
||||
|
|
@ -125,8 +125,8 @@ static ssize_t pdo_test_show(struct device *dev,
|
|||
pr_err("*** Error : can't find PD adapter ***\n");
|
||||
|
||||
|
||||
ret = adapter_dev_set_cap(adapter_dev, MMI_PD,
|
||||
9000, 3000);
|
||||
ret = adapter_dev_set_cap(adapter_dev, MMI_PD_FIXED,
|
||||
1, 9000, 3000);
|
||||
if (ret == MMI_ADAPTER_OK)
|
||||
return snprintf(buf, 40, "select pdo to 9v3a mode ok\n");
|
||||
else
|
||||
|
|
@ -147,7 +147,7 @@ static ssize_t apdo_test_show(struct device *dev,
|
|||
else
|
||||
pr_err("*** Error : can't find PD adapter ***\n");
|
||||
|
||||
ret = adapter_dev_set_cap(adapter_dev, MMI_PD_APDO_START, vol, 3000);
|
||||
ret = adapter_dev_set_cap(adapter_dev, MMI_PD_APDO_START, 3, vol, 3000);
|
||||
if (ret == MMI_ADAPTER_REJECT)
|
||||
return snprintf(buf, 40, "start apdo reject\n");
|
||||
else if (ret != 0)
|
||||
|
|
@ -155,12 +155,12 @@ static ssize_t apdo_test_show(struct device *dev,
|
|||
|
||||
while (vol <10000) {
|
||||
adapter_dev_set_cap(adapter_dev, MMI_PD_APDO,
|
||||
vol, 3000);
|
||||
3, vol, 3000);
|
||||
vol += 200;
|
||||
msleep(200);
|
||||
}
|
||||
|
||||
ret = adapter_dev_set_cap(adapter_dev, MMI_PD_APDO_END, vol, 3000);
|
||||
ret = adapter_dev_set_cap(adapter_dev, MMI_PD_APDO_END, 3, vol, 3000);
|
||||
if (ret == MMI_ADAPTER_REJECT)
|
||||
return snprintf(buf, 40, "stop apdo reject\n");
|
||||
else if (ret != 0)
|
||||
|
|
@ -210,12 +210,12 @@ int adapter_dev_get_output(struct adapter_device *adapter_dev, int *mV, int *mA)
|
|||
EXPORT_SYMBOL(adapter_dev_get_output);
|
||||
|
||||
int adapter_dev_set_cap(struct adapter_device *adapter_dev,
|
||||
enum adapter_cap_type type,
|
||||
enum adapter_cap_type type, int pdo_idx,
|
||||
int mV, int mA)
|
||||
{
|
||||
if (adapter_dev != NULL && adapter_dev->ops != NULL &&
|
||||
adapter_dev->ops->set_cap)
|
||||
return adapter_dev->ops->set_cap(adapter_dev, type, mV, mA);
|
||||
return adapter_dev->ops->set_cap(adapter_dev, type, pdo_idx, mV, mA);
|
||||
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ static int pd_get_property(struct adapter_device *dev,
|
|||
}
|
||||
|
||||
static int pd_set_cap(struct adapter_device *dev, enum adapter_cap_type type,
|
||||
int mV, int mA)
|
||||
int pdo_idx, int mV, int mA)
|
||||
{
|
||||
int ret = MMI_ADAPTER_OK;
|
||||
int tcpm_ret = TCPM_SUCCESS;
|
||||
|
|
@ -69,7 +69,7 @@ static int pd_set_cap(struct adapter_device *dev, enum adapter_cap_type type,
|
|||
pr_notice("[%s] type:%d mV:%d mA:%d\n",
|
||||
__func__, type, mV, mA);
|
||||
|
||||
|
||||
pdo_idx = 0;
|
||||
info = (struct mmi_pd_adapter_info *)adapter_dev_get_drvdata(dev);
|
||||
if (info == NULL || info->tcpc == NULL) {
|
||||
pr_notice("[%s] info null\n", __func__);
|
||||
|
|
@ -83,7 +83,7 @@ static int pd_set_cap(struct adapter_device *dev, enum adapter_cap_type type,
|
|||
tcpm_ret = tcpm_reset_pd_charging_policy(info->tcpc, NULL);
|
||||
} else if (type == MMI_PD_APDO) {
|
||||
tcpm_ret = tcpm_dpm_pd_request(info->tcpc, mV, mA, NULL);
|
||||
} else if (type == MMI_PD) {
|
||||
} else if (type == MMI_PD_FIXED) {
|
||||
tcpm_ret = tcpm_dpm_pd_request(info->tcpc, mV,
|
||||
mA, NULL);
|
||||
}
|
||||
|
|
@ -230,7 +230,7 @@ static int pd_get_cap(struct adapter_device *dev,
|
|||
if (cap_i == 0)
|
||||
pr_notice("no APDO for pps\n");
|
||||
|
||||
} else if (type == MMI_PD) {
|
||||
} else if (type == MMI_PD_FIXED) {
|
||||
pd_cap.nr = 0;
|
||||
pd_cap.selected_cap_idx = 0;
|
||||
tcpm_get_remote_power_cap(info->tcpc, &pd_cap);
|
||||
|
|
@ -244,10 +244,10 @@ static int pd_get_cap(struct adapter_device *dev,
|
|||
j = 0;
|
||||
pr_notice("adapter cap: nr:%d\n", pd_cap.nr);
|
||||
for (i = 0; i < pd_cap.nr; i++) {
|
||||
if (pd_cap.type[i] == 0 &&
|
||||
if (pd_cap.type[i] == TCPM_POWER_CAP_VAL_TYPE_FIXED &&
|
||||
j >= 0 &&
|
||||
j < ADAPTER_CAP_MAX_NR) {
|
||||
tacap->type[j] = MMI_PD;
|
||||
tacap->type[j] = MMI_PD_FIXED;
|
||||
tacap->ma[j] = pd_cap.ma[i];
|
||||
tacap->max_mv[j] = pd_cap.max_mv[i];
|
||||
tacap->min_mv[j] = pd_cap.min_mv[i];
|
||||
|
|
@ -274,6 +274,38 @@ static int pd_get_cap(struct adapter_device *dev,
|
|||
tacap->type[i], tacap->type[i]);
|
||||
}
|
||||
}
|
||||
} else if (type == MMI_PD_ALL) {
|
||||
pd_cap.nr = 0;
|
||||
pd_cap.selected_cap_idx = 0;
|
||||
tcpm_get_remote_power_cap(info->tcpc, &pd_cap);
|
||||
tacap->nr = pd_cap.nr;
|
||||
|
||||
if (pd_cap.nr != 0) {
|
||||
|
||||
tacap->selected_cap_idx = pd_cap.selected_cap_idx - 1;
|
||||
pr_notice("[%s] nr:%d idx:%d\n",
|
||||
__func__, pd_cap.nr, pd_cap.selected_cap_idx - 1);
|
||||
|
||||
for (i = 0; i < pd_cap.nr; i++) {
|
||||
tacap->ma[i] = pd_cap.ma[i];
|
||||
tacap->max_mv[i] = pd_cap.max_mv[i];
|
||||
tacap->min_mv[i] = pd_cap.min_mv[i];
|
||||
tacap->maxwatt[i] =
|
||||
tacap->max_mv[i] * tacap->ma[i];
|
||||
if (pd_cap.type[i] == TCPM_POWER_CAP_VAL_TYPE_FIXED)
|
||||
tacap->type[i] = MMI_PD_FIXED;
|
||||
else if (pd_cap.type[i] == TCPM_POWER_CAP_VAL_TYPE_AUGMENT)
|
||||
tacap->type[i] = MMI_PD_APDO;
|
||||
else
|
||||
tacap->type[i] = MMI_CAP_TYPE_UNKNOWN;
|
||||
|
||||
pr_notice("[%s]:%d mv:[%d,%d] %d max:%d min:%d type:%d %d\n",
|
||||
__func__, i, tacap->min_mv[i],
|
||||
tacap->max_mv[i], tacap->ma[i],
|
||||
tacap->maxwatt[i], tacap->minwatt[i],
|
||||
tacap->type[i], pd_cap.type[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return MMI_ADAPTER_OK;
|
||||
|
|
|
|||
|
|
@ -55,10 +55,16 @@ enum adapter_property {
|
|||
};
|
||||
|
||||
enum adapter_cap_type {
|
||||
/*start pd30 apdo*/
|
||||
MMI_PD_APDO_START,
|
||||
/*end pd30 apdo*/
|
||||
MMI_PD_APDO_END,
|
||||
MMI_PD,
|
||||
/*pd30 apdo*/
|
||||
MMI_PD_APDO,
|
||||
/*pd20 fixed pdo*/
|
||||
MMI_PD_FIXED,
|
||||
/*all pdo: pd20&pd30*/
|
||||
MMI_PD_ALL,
|
||||
MMI_CAP_TYPE_UNKNOWN,
|
||||
};
|
||||
|
||||
|
|
@ -101,7 +107,7 @@ struct adapter_ops {
|
|||
int (*get_status)(struct adapter_device *dev,
|
||||
struct adapter_status *sta);
|
||||
int (*set_cap)(struct adapter_device *dev, enum adapter_cap_type type,
|
||||
int mV, int mA);
|
||||
int pdo_idx, int mV, int mA);
|
||||
int (*get_cap)(struct adapter_device *dev, enum adapter_cap_type type,
|
||||
struct adapter_power_cap *cap);
|
||||
int (*get_output)(struct adapter_device *dev, int *mV, int *mA);
|
||||
|
|
@ -143,7 +149,7 @@ extern int adapter_dev_get_status(struct adapter_device *adapter_dev,
|
|||
extern int adapter_dev_get_output(struct adapter_device *adapter_dev,
|
||||
int *mV, int *mA);
|
||||
extern int adapter_dev_set_cap(struct adapter_device *adapter_dev,
|
||||
enum adapter_cap_type type,
|
||||
enum adapter_cap_type type, int pdo_idx,
|
||||
int mV, int mA);
|
||||
extern int adapter_dev_get_cap(struct adapter_device *adapter_dev,
|
||||
enum adapter_cap_type type,
|
||||
|
|
|
|||
Loading…
Reference in a new issue