Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b67fb80 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "power: power_supply: Add REAL_CAPACITY property"

parents 2d7e43f6 f2977772
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -456,6 +456,7 @@ static struct device_attribute power_supply_attrs[] = {
	POWER_SUPPLY_ATTR(therm_icl_limit),
	POWER_SUPPLY_ATTR(therm_icl_limit),
	POWER_SUPPLY_ATTR(dc_reset),
	POWER_SUPPLY_ATTR(dc_reset),
	POWER_SUPPLY_ATTR(voltage_max_limit),
	POWER_SUPPLY_ATTR(voltage_max_limit),
	POWER_SUPPLY_ATTR(real_capacity),
	/* Charge pump properties */
	/* Charge pump properties */
	POWER_SUPPLY_ATTR(cp_status1),
	POWER_SUPPLY_ATTR(cp_status1),
	POWER_SUPPLY_ATTR(cp_status2),
	POWER_SUPPLY_ATTR(cp_status2),
+15 −0
Original line number Original line Diff line number Diff line
@@ -1235,6 +1235,20 @@ static int smb1390_remove(struct platform_device *pdev)
	return 0;
	return 0;
}
}


static void smb1390_shutdown(struct platform_device *pdev)
{
	struct smb1390 *chip = platform_get_drvdata(pdev);
	int rc;

	power_supply_unreg_notifier(&chip->nb);
	/* Disable SMB1390 */
	smb1390_dbg(chip, PR_MISC, "Disabling SMB1390\n");
	rc = smb1390_masked_write(chip, CORE_CONTROL1_REG,
					CMD_EN_SWITCHER_BIT, 0);
	if (rc < 0)
		pr_err("Couldn't disable chip rc=%d\n", rc);
}

static int smb1390_suspend(struct device *dev)
static int smb1390_suspend(struct device *dev)
{
{
	struct smb1390 *chip = dev_get_drvdata(dev);
	struct smb1390 *chip = dev_get_drvdata(dev);
@@ -1272,6 +1286,7 @@ static struct platform_driver smb1390_driver = {
	},
	},
	.probe	= smb1390_probe,
	.probe	= smb1390_probe,
	.remove	= smb1390_remove,
	.remove	= smb1390_remove,
	.shutdown = smb1390_shutdown,
};
};
module_platform_driver(smb1390_driver);
module_platform_driver(smb1390_driver);


+40 −0
Original line number Original line Diff line number Diff line
@@ -951,6 +951,9 @@ static int smblib_request_dpdm(struct smb_charger *chg, bool enable)
{
{
	int rc = 0;
	int rc = 0;


	if (chg->pr_swap_in_progress)
		return 0;

	/* fetch the DPDM regulator */
	/* fetch the DPDM regulator */
	if (!chg->dpdm_reg && of_get_property(chg->dev->of_node,
	if (!chg->dpdm_reg && of_get_property(chg->dev->of_node,
				"dpdm-supply", NULL)) {
				"dpdm-supply", NULL)) {
@@ -4952,6 +4955,8 @@ void smblib_usb_plugin_locked(struct smb_charger *chg)
						chg->chg_freq.freq_removal);
						chg->chg_freq.freq_removal);


	if (vbus_rising) {
	if (vbus_rising) {
		cancel_delayed_work_sync(&chg->pr_swap_detach_work);
		vote(chg->awake_votable, DETACH_DETECT_VOTER, false, 0);
		rc = smblib_request_dpdm(chg, true);
		rc = smblib_request_dpdm(chg, true);
		if (rc < 0)
		if (rc < 0)
			smblib_err(chg, "Couldn't to enable DPDM rc=%d\n", rc);
			smblib_err(chg, "Couldn't to enable DPDM rc=%d\n", rc);
@@ -6073,14 +6078,24 @@ int smblib_get_prop_pr_swap_in_progress(struct smb_charger *chg,
	return 0;
	return 0;
}
}


#define DETACH_DETECT_DELAY_MS 20
int smblib_set_prop_pr_swap_in_progress(struct smb_charger *chg,
int smblib_set_prop_pr_swap_in_progress(struct smb_charger *chg,
				const union power_supply_propval *val)
				const union power_supply_propval *val)
{
{
	int rc;
	int rc;
	u8 stat = 0, orientation;
	u8 stat = 0, orientation;


	smblib_dbg(chg, PR_MISC, "Requested PR_SWAP %d\n", val->intval);
	chg->pr_swap_in_progress = val->intval;
	chg->pr_swap_in_progress = val->intval;


	/* check for cable removal during pr_swap */
	if (!chg->pr_swap_in_progress) {
		cancel_delayed_work_sync(&chg->pr_swap_detach_work);
		vote(chg->awake_votable, DETACH_DETECT_VOTER, true, 0);
		schedule_delayed_work(&chg->pr_swap_detach_work,
				msecs_to_jiffies(DETACH_DETECT_DELAY_MS));
	}

	rc = smblib_masked_write(chg, TYPE_C_DEBOUNCE_OPTION_REG,
	rc = smblib_masked_write(chg, TYPE_C_DEBOUNCE_OPTION_REG,
			REDUCE_TCCDEBOUNCE_TO_2MS_BIT,
			REDUCE_TCCDEBOUNCE_TO_2MS_BIT,
			val->intval ? REDUCE_TCCDEBOUNCE_TO_2MS_BIT : 0);
			val->intval ? REDUCE_TCCDEBOUNCE_TO_2MS_BIT : 0);
@@ -6132,6 +6147,28 @@ int smblib_set_prop_pr_swap_in_progress(struct smb_charger *chg,
/***************
/***************
 * Work Queues *
 * Work Queues *
 ***************/
 ***************/
static void smblib_pr_swap_detach_work(struct work_struct *work)
{
	struct smb_charger *chg = container_of(work, struct smb_charger,
						pr_swap_detach_work.work);
	int rc;
	u8 stat;

	rc = smblib_read(chg, TYPE_C_STATE_MACHINE_STATUS_REG, &stat);
	if (rc < 0) {
		smblib_err(chg, "Couldn't read STATE_MACHINE_STS rc=%d\n", rc);
		goto out;
	}
	smblib_dbg(chg, PR_REGISTER, "STATE_MACHINE_STS %x\n", stat);
	if (!(stat & TYPEC_ATTACH_DETACH_STATE_BIT)) {
		rc = smblib_request_dpdm(chg, false);
		if (rc < 0)
			smblib_err(chg, "Couldn't disable DPDM rc=%d\n", rc);
	}
out:
	vote(chg->awake_votable, DETACH_DETECT_VOTER, false, 0);
}

static void smblib_uusb_otg_work(struct work_struct *work)
static void smblib_uusb_otg_work(struct work_struct *work)
{
{
	struct smb_charger *chg = container_of(work, struct smb_charger,
	struct smb_charger *chg = container_of(work, struct smb_charger,
@@ -6860,6 +6897,8 @@ int smblib_init(struct smb_charger *chg)
	INIT_DELAYED_WORK(&chg->thermal_regulation_work,
	INIT_DELAYED_WORK(&chg->thermal_regulation_work,
					smblib_thermal_regulation_work);
					smblib_thermal_regulation_work);
	INIT_DELAYED_WORK(&chg->usbov_dbc_work, smblib_usbov_dbc_work);
	INIT_DELAYED_WORK(&chg->usbov_dbc_work, smblib_usbov_dbc_work);
	INIT_DELAYED_WORK(&chg->pr_swap_detach_work,
					smblib_pr_swap_detach_work);


	if (chg->wa_flags & CHG_TERMINATION_WA) {
	if (chg->wa_flags & CHG_TERMINATION_WA) {
		INIT_WORK(&chg->chg_termination_work,
		INIT_WORK(&chg->chg_termination_work,
@@ -6999,6 +7038,7 @@ int smblib_deinit(struct smb_charger *chg)
		cancel_delayed_work_sync(&chg->lpd_detach_work);
		cancel_delayed_work_sync(&chg->lpd_detach_work);
		cancel_delayed_work_sync(&chg->thermal_regulation_work);
		cancel_delayed_work_sync(&chg->thermal_regulation_work);
		cancel_delayed_work_sync(&chg->usbov_dbc_work);
		cancel_delayed_work_sync(&chg->usbov_dbc_work);
		cancel_delayed_work_sync(&chg->pr_swap_detach_work);
		power_supply_unreg_notifier(&chg->nb);
		power_supply_unreg_notifier(&chg->nb);
		smblib_destroy_votables(chg);
		smblib_destroy_votables(chg);
		qcom_step_chg_deinit();
		qcom_step_chg_deinit();
+2 −0
Original line number Original line Diff line number Diff line
@@ -70,6 +70,7 @@ enum print_reason {
#define USB_SUSPEND_VOTER		"USB_SUSPEND_VOTER"
#define USB_SUSPEND_VOTER		"USB_SUSPEND_VOTER"
#define CHARGER_TYPE_VOTER		"CHARGER_TYPE_VOTER"
#define CHARGER_TYPE_VOTER		"CHARGER_TYPE_VOTER"
#define HDC_IRQ_VOTER			"HDC_IRQ_VOTER"
#define HDC_IRQ_VOTER			"HDC_IRQ_VOTER"
#define DETACH_DETECT_VOTER		"DETACH_DETECT_VOTER"


#define BOOST_BACK_STORM_COUNT	3
#define BOOST_BACK_STORM_COUNT	3
#define WEAK_CHG_STORM_COUNT	8
#define WEAK_CHG_STORM_COUNT	8
@@ -417,6 +418,7 @@ struct smb_charger {
	struct delayed_work	lpd_detach_work;
	struct delayed_work	lpd_detach_work;
	struct delayed_work	thermal_regulation_work;
	struct delayed_work	thermal_regulation_work;
	struct delayed_work	usbov_dbc_work;
	struct delayed_work	usbov_dbc_work;
	struct delayed_work	pr_swap_detach_work;


	struct alarm		lpd_recheck_timer;
	struct alarm		lpd_recheck_timer;
	struct alarm		moisture_protection_alarm;
	struct alarm		moisture_protection_alarm;
+1 −0
Original line number Original line Diff line number Diff line
@@ -336,6 +336,7 @@ enum power_supply_property {
	POWER_SUPPLY_PROP_THERM_ICL_LIMIT,
	POWER_SUPPLY_PROP_THERM_ICL_LIMIT,
	POWER_SUPPLY_PROP_DC_RESET,
	POWER_SUPPLY_PROP_DC_RESET,
	POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT,
	POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT,
	POWER_SUPPLY_PROP_REAL_CAPACITY,
	/* Charge pump properties */
	/* Charge pump properties */
	POWER_SUPPLY_PROP_CP_STATUS1,
	POWER_SUPPLY_PROP_CP_STATUS1,
	POWER_SUPPLY_PROP_CP_STATUS2,
	POWER_SUPPLY_PROP_CP_STATUS2,