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:
xuwei9 2021-12-09 11:46:17 +08:00 • committed by Wei Xu
commit 9a733a80d6
4 changed files with 75 additions and 1 deletions

View file

@ -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__);

View file

@ -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

View file

@ -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;

View file

@ -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,