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

Commit f5bad89f authored by Anomalchik's avatar Anomalchik
Browse files

drivers: power: add markw power changes

parent b9cbb525
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -70,11 +70,16 @@ obj-$(CONFIG_SMB23X_CHARGER) += smb23x-charger.o
obj-$(CONFIG_BATTERY_BQ28400)	+= bq28400_battery.o
obj-$(CONFIG_QPNP_BMS)		+= qpnp-bms.o batterydata-lib.o
obj-$(CONFIG_QPNP_VM_BMS)	+= qpnp-vm-bms.o batterydata-lib.o batterydata-interface.o
ifeq ($(CONFIG_MACH_XIAOMI_MARKW),y)
obj-$(CONFIG_QPNP_FG)		+= qpnp-fg_markw.o
obj-$(CONFIG_QPNP_SMBCHARGER)	+= qpnp-smbcharger_markw.o pmic-voter.o
else
obj-$(CONFIG_QPNP_FG)		+= qpnp-fg.o
obj-$(CONFIG_QPNP_SMBCHARGER)	+= qpnp-smbcharger.o pmic-voter.o
endif
obj-$(CONFIG_QPNP_FG_GEN3)	+= qpnp-fg-gen3.o fg-memif.o fg-util.o pmic-voter.o
obj-$(CONFIG_QPNP_CHARGER)	+= qpnp-charger.o
obj-$(CONFIG_QPNP_LINEAR_CHARGER)	+= qpnp-linear-charger.o
obj-$(CONFIG_QPNP_SMBCHARGER)	+= qpnp-smbcharger.o pmic-voter.o
obj-$(CONFIG_QPNP_SMB2)		+= battery.o qpnp-smb2.o pmic-voter.o smb-lib.o storm-watch.o
obj-$(CONFIG_QPNP_TYPEC)	+= qpnp-typec.o
obj-$(CONFIG_CHARGER_TPS65090)	+= tps65090-charger.o
+16 −0
Original line number Diff line number Diff line
@@ -270,6 +270,22 @@ int power_supply_set_low_power_state(struct power_supply *psy, int value)
}
EXPORT_SYMBOL(power_supply_set_low_power_state);

#ifdef CONFIG_MACH_XIAOMI_MARKW
int power_supply_get_battery_charge_state(struct power_supply *psy)
{
	union power_supply_propval ret = {0,};
	if (!psy) {
		 pr_err("power supply is NULL\n");
	}
	if (psy->get_property) {
		psy->get_property(psy, POWER_SUPPLY_PROP_PRESENT, &ret);
	}
	pr_debug("online:%d\n", ret.intval);
	return ret.intval;
}
EXPORT_SYMBOL(power_supply_get_battery_charge_state);
#endif

/**
 * power_supply_set_dp_dm -
 * @psy:	the power supply to control
+92 −0
Original line number Diff line number Diff line
@@ -21,16 +21,54 @@

static void power_supply_update_bat_leds(struct power_supply *psy)
{
#ifdef CONFIG_MACH_XIAOMI_MARKW
	union power_supply_propval status, bat_percent;
#else
	union power_supply_propval status;
	unsigned long delay_on = 0;
	unsigned long delay_off = 0;
#endif

	if (psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &status))
		return;
#ifdef CONFIG_MACH_XIAOMI_MARKW
	if (psy->get_property(psy, POWER_SUPPLY_PROP_CAPACITY, &bat_percent))
		return;
#endif

	dev_dbg(psy->dev, "%s %d\n", __func__, status.intval);

	switch (status.intval) {
#ifdef CONFIG_MACH_XIAOMI_MARKW
	case POWER_SUPPLY_STATUS_FULL:
		led_trigger_event(psy->charging_red_trig, LED_OFF);
		led_trigger_event(psy->charging_blue_trig, LED_OFF);
		led_trigger_event(psy->charging_green_trig, LED_FULL);
		break;
	case POWER_SUPPLY_STATUS_CHARGING:
		if (bat_percent.intval < 15) {
			led_trigger_event(psy->charging_green_trig, LED_OFF);
			led_trigger_event(psy->charging_blue_trig, LED_OFF);
			led_trigger_event(psy->charging_red_trig, LED_FULL);
		} else if (bat_percent.intval < 90) {
			led_trigger_event(psy->charging_blue_trig, LED_OFF);
			led_trigger_event(psy->charging_green_trig, LED_FULL);
			led_trigger_event(psy->charging_red_trig, LED_FULL);
		} else {
			led_trigger_event(psy->charging_red_trig, LED_OFF);
			led_trigger_event(psy->charging_blue_trig, LED_OFF);
			led_trigger_event(psy->charging_green_trig, LED_FULL);
		}

		break;
	default:
		{
			led_trigger_event(psy->charging_red_trig, LED_OFF);
			led_trigger_event(psy->charging_green_trig, LED_OFF);
			led_trigger_event(psy->charging_blue_trig, LED_OFF);
		}
		break;
#else
	case POWER_SUPPLY_STATUS_FULL:
		led_trigger_event(psy->charging_full_trig, LED_FULL);
		led_trigger_event(psy->charging_trig, LED_OFF);
@@ -52,11 +90,46 @@ static void power_supply_update_bat_leds(struct power_supply *psy)
		led_trigger_event(psy->charging_blink_full_solid_trig,
			LED_OFF);
		break;
#endif
	}
}

static int power_supply_create_bat_triggers(struct power_supply *psy)
{
#ifdef CONFIG_MACH_XIAOMI_MARKW
	int rc = 0;

	psy->charging_red_trig_name = kasprintf(GFP_KERNEL,
					"%s-red", psy->name);
	if (!psy->charging_red_trig_name)
		goto charging_red_failed;
	psy->charging_green_trig_name = kasprintf(GFP_KERNEL,
					"%s-green", psy->name);
	if (!psy->charging_green_trig_name)
		goto charging_green_failed;
	psy->charging_blue_trig_name = kasprintf(GFP_KERNEL,
					"%s-blue", psy->name);
	if (!psy->charging_blue_trig_name)
		goto charging_blue_failed;

	led_trigger_register_simple(psy->charging_red_trig_name,
				    &psy->charging_red_trig);
	led_trigger_register_simple(psy->charging_green_trig_name,
				    &psy->charging_green_trig);
	led_trigger_register_simple(psy->charging_blue_trig_name,
				    &psy->charging_blue_trig);
	goto success;

charging_blue_failed:
	kfree(psy->charging_green_trig_name);
charging_green_failed:
	kfree(psy->charging_red_trig_name);
charging_red_failed:
	rc = -ENOMEM;
success:
	return rc;

#else
	psy->charging_full_trig_name = kasprintf(GFP_KERNEL,
					"%s-charging-or-full", psy->name);
	if (!psy->charging_full_trig_name)
@@ -95,10 +168,19 @@ charging_failed:
	kfree(psy->charging_full_trig_name);
charging_full_failed:
	return -ENOMEM;
#endif
}

static void power_supply_remove_bat_triggers(struct power_supply *psy)
{
#ifdef CONFIG_MACH_XIAOMI_MARKW
	led_trigger_unregister_simple(psy->charging_red_trig);
	led_trigger_unregister_simple(psy->charging_green_trig);
	led_trigger_unregister_simple(psy->charging_blue_trig);
	kfree(psy->charging_red_trig_name);
	kfree(psy->charging_green_trig_name);
	kfree(psy->charging_blue_trig_name);
#else
	led_trigger_unregister_simple(psy->charging_full_trig);
	led_trigger_unregister_simple(psy->charging_trig);
	led_trigger_unregister_simple(psy->full_trig);
@@ -107,6 +189,7 @@ static void power_supply_remove_bat_triggers(struct power_supply *psy)
	kfree(psy->full_trig_name);
	kfree(psy->charging_trig_name);
	kfree(psy->charging_full_trig_name);
#endif
}

/* Generated power specific LEDs triggers. */
@@ -155,9 +238,18 @@ void power_supply_update_leds(struct power_supply *psy)

int power_supply_create_triggers(struct power_supply *psy)
{
#ifdef CONFIG_MACH_XIAOMI_MARKW
	if (strstr(saved_command_line, "androidboot.mode=charger") || strstr(saved_command_line, "androidboot.mode=recovery")) {
		if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
			return power_supply_create_bat_triggers(psy);
		return power_supply_create_gen_triggers(psy);
	} else
		return 0;
#else
	if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
		return power_supply_create_bat_triggers(psy);
	return power_supply_create_gen_triggers(psy);
#endif
}

void power_supply_remove_triggers(struct power_supply *psy)
+7931 −0

File added.

Preview size limit exceeded, changes collapsed.

+8951 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading