mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 08:36:12 -04:00
QC3P:iio sys channel
Add iio sys channel support for QC3P turbo charger. Change-Id: I7683e0f02ef3b8339d51d94e6f6bd4d9586c6e7c Signed-off-by: xuwei9 <xuwei9@lenovo.com> Reviewed-on: https://gerrit.mot.com/2139314 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Huosheng Liao <liaohs@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
4ac109835c
commit
9a733a80d6
4 changed files with 75 additions and 1 deletions
|
|
@ -1885,6 +1885,58 @@ int mmi_discrete_config_typec_mode(struct mmi_discrete_charger *chip, int val)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int mmi_discrete_get_hw_current_max(struct mmi_discrete_charger *chip, int *val)
|
||||
{
|
||||
update_sw_icl_max(chip);
|
||||
*val = get_effective_result(chip->usb_icl_votable);
|
||||
mmi_dbg(chip, "get input current max :%d\n",
|
||||
*val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mmi_discrete_config_charging_enabled(struct mmi_discrete_charger *chip, int val)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
mmi_dbg(chip, "mmi_discrete_config_charging_enabled val:%d\n",val);
|
||||
|
||||
rc = charger_dev_enable_charging(chip->master_chg_dev,
|
||||
val ? true:false);
|
||||
if (rc)
|
||||
mmi_err(chip, "Couldn't %s charging rc=%d\n",
|
||||
val ? "enable":"disable", rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int mmi_discrete_get_charging_enabled(struct mmi_discrete_charger *chip, bool *val)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
mmi_dbg(chip, "mmi_discrete_get_charging_enabled val:%d\n",*val);
|
||||
|
||||
rc = charger_dev_is_enabled_charging(chip->master_chg_dev, val);
|
||||
if (rc)
|
||||
mmi_err(chip, "Couldn't get charging status rc=%d\n", rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
int mmi_discrete_config_input_current_settled(struct mmi_discrete_charger *chip, int val)
|
||||
{
|
||||
|
||||
update_sw_icl_max(chip);
|
||||
|
||||
mmi_dbg(chip, "mmi_discrete_config_input_current_settled val:%d\n",val);
|
||||
|
||||
vote(chip->usb_icl_votable, QC3P_VOTER, true, val*1000);
|
||||
if (chip->usb_psy)
|
||||
power_supply_changed(chip->usb_psy);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MMI_USBIN_500MA 500000
|
||||
int mmi_discrete_config_pd_active(struct mmi_discrete_charger *chip, int val)
|
||||
{
|
||||
|
|
@ -1920,6 +1972,7 @@ static int mmi_discrete_usb_plugout(struct mmi_discrete_charger * chip)
|
|||
vote(chip->usb_icl_votable, SW_ICL_MAX_VOTER, true, SDP_100_MA);
|
||||
vote(chip->usb_icl_votable, USB_PSY_VOTER, false, 0);
|
||||
vote(chip->usb_icl_votable, PD_VOTER, false, 0);
|
||||
vote(chip->usb_icl_votable, QC3P_VOTER, false, 0);
|
||||
vote(chip->chg_disable_votable, MMI_HB_VOTER, true, 0);
|
||||
power_supply_changed(chip->usb_psy);
|
||||
mmi_info(chip, "%s\n",__func__);
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#define HW_LIMIT_VOTER "HW_LIMIT_VOTER"
|
||||
#define DEFAULT_VOTER "DEFAULT_VOTER"
|
||||
#define PD_VOTER "PD_VOTER"
|
||||
#define QC3P_VOTER "QC3P_VOTER"
|
||||
|
||||
#define SDP_100_MA 100000
|
||||
#define SDP_CURRENT_UA 500000
|
||||
|
|
@ -129,5 +130,9 @@ int mmi_discrete_otg_enable(struct mmi_discrete_charger *chip, bool en);
|
|||
int mmi_discrete_is_usb_suspended(struct mmi_discrete_charger *chip);
|
||||
int mmi_discrete_config_typec_mode(struct mmi_discrete_charger *chip, int val);
|
||||
int mmi_discrete_config_pd_active(struct mmi_discrete_charger *chip, int val);
|
||||
int mmi_discrete_get_hw_current_max(struct mmi_discrete_charger *chip, int *val);
|
||||
int mmi_discrete_config_charging_enabled(struct mmi_discrete_charger *chip, int val);
|
||||
int mmi_discrete_get_charging_enabled(struct mmi_discrete_charger *chip, bool *val);
|
||||
int mmi_discrete_config_input_current_settled(struct mmi_discrete_charger *chip, int val);
|
||||
|
||||
#endif
|
||||
|
|
@ -29,6 +29,12 @@ static int mmi_discrete_iio_write_raw(struct iio_dev *indio_dev,
|
|||
case PSY_IIO_PD_ACTIVE:
|
||||
rc = mmi_discrete_config_pd_active(chip, val1);
|
||||
break;
|
||||
case PSY_IIO_USB_CHARGING_ENABLED:
|
||||
rc = mmi_discrete_config_charging_enabled(chip, val1);
|
||||
break;
|
||||
case PSY_IIO_INPUT_CURRENT_SETTLED:
|
||||
rc = mmi_discrete_config_input_current_settled(chip, val1);
|
||||
break;
|
||||
default:
|
||||
pr_err("Unsupported mmi_discrete IIO chan %d\n", chan->channel);
|
||||
rc = -EINVAL;
|
||||
|
|
@ -48,13 +54,20 @@ static int mmi_discrete_iio_read_raw(struct iio_dev *indio_dev,
|
|||
{
|
||||
struct mmi_discrete_charger *chip = iio_priv(indio_dev);
|
||||
int rc = 0;
|
||||
|
||||
bool val_bool = false;
|
||||
*val1 = 0;
|
||||
|
||||
switch (chan->channel) {
|
||||
case PSY_IIO_USB_REAL_TYPE:
|
||||
*val1 = chip->real_charger_type;
|
||||
break;
|
||||
case PSY_IIO_HW_CURRENT_MAX:
|
||||
rc = mmi_discrete_get_hw_current_max(chip, val1);
|
||||
break;
|
||||
case PSY_IIO_USB_CHARGING_ENABLED:
|
||||
rc = mmi_discrete_get_charging_enabled(chip, &val_bool);
|
||||
*val1 = val_bool?1:0;
|
||||
break;
|
||||
default:
|
||||
pr_err("Unsupported mmi_discrete IIO chan %d\n", chan->channel);
|
||||
rc = -EINVAL;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,9 @@ static const struct mmi_discrete_iio_channels mmi_discrete_iio_psy_channels[] =
|
|||
MMI_DISCRETE_CHAN_INDEX("otg_enable", PSY_IIO_MMI_OTG_ENABLE)
|
||||
MMI_DISCRETE_CHAN_INDEX("typec_mode", PSY_IIO_TYPEC_MODE)
|
||||
MMI_DISCRETE_CHAN_INDEX("pd_active", PSY_IIO_PD_ACTIVE)
|
||||
MMI_DISCRETE_CHAN_INDEX("hw_current_max", PSY_IIO_HW_CURRENT_MAX)
|
||||
MMI_DISCRETE_CHAN_INDEX("charging_enabled", PSY_IIO_USB_CHARGING_ENABLED)
|
||||
MMI_DISCRETE_CHAN_INDEX("input_current_settled", PSY_IIO_INPUT_CURRENT_SETTLED)
|
||||
};
|
||||
|
||||
int mmi_discrete_init_iio_psy(struct mmi_discrete_charger *chip,
|
||||
|
|
|
|||
Loading…
Reference in a new issue