Commit 5a214892 authored by Tony Lindgren's avatar Tony Lindgren Committed by Sebastian Reichel
Browse files

power: supply: cpcap-charger: Drop internal state and use generic stats



We currently have both state and status, get rid of state and use
generic status instead.

Cc: Arthur Demchenkov <spinal.by@gmail.com>
Cc: Carl Philipp Klemm <philipp@uvos.xyz>
Cc: Merlijn Wajer <merlijn@wizzup.org>
Cc: Pavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent c6fdea96
Loading
Loading
Loading
Loading
+42 −39
Original line number Diff line number Diff line
@@ -140,7 +140,6 @@ struct cpcap_charger_ddata {
	atomic_t active;

	int status;
	int state;
	int voltage;
	int limit_current;
};
@@ -386,6 +385,39 @@ static void cpcap_charger_set_inductive_path(struct cpcap_charger_ddata *ddata,
	gpiod_set_value(ddata->gpio[1], enabled);
}

static void cpcap_charger_update_state(struct cpcap_charger_ddata *ddata,
				       int state)
{
	const char *status;

	if (state > POWER_SUPPLY_STATUS_FULL) {
		dev_warn(ddata->dev, "unknown state: %i\n", state);

		return;
	}

	ddata->status = state;

	switch (state) {
	case POWER_SUPPLY_STATUS_DISCHARGING:
		status = "DISCONNECTED";
		break;
	case POWER_SUPPLY_STATUS_NOT_CHARGING:
		status = "DETECTING";
		break;
	case POWER_SUPPLY_STATUS_CHARGING:
		status = "CHARGING";
		break;
	case POWER_SUPPLY_STATUS_FULL:
		status = "DONE";
		break;
	default:
		return;
	}

	dev_dbg(ddata->dev, "state: %s\n", status);
}

static int cpcap_charger_set_state(struct cpcap_charger_ddata *ddata,
				   int max_voltage, int charge_current,
				   int trickle_current)
@@ -402,11 +434,13 @@ static int cpcap_charger_set_state(struct cpcap_charger_ddata *ddata,
					   CPCAP_REG_CRM_FET_OVRD |
					   CPCAP_REG_CRM_FET_CTRL);
		if (error) {
			ddata->status = POWER_SUPPLY_STATUS_UNKNOWN;
			cpcap_charger_update_state(ddata,
						   POWER_SUPPLY_STATUS_UNKNOWN);
			goto out_err;
		}

		ddata->status = POWER_SUPPLY_STATUS_DISCHARGING;
		cpcap_charger_update_state(ddata,
					   POWER_SUPPLY_STATUS_DISCHARGING);

		return 0;
	}
@@ -419,11 +453,13 @@ static int cpcap_charger_set_state(struct cpcap_charger_ddata *ddata,
				   max_voltage |
				   charge_current);
	if (error) {
		ddata->status = POWER_SUPPLY_STATUS_UNKNOWN;
		cpcap_charger_update_state(ddata,
					   POWER_SUPPLY_STATUS_UNKNOWN);
		goto out_err;
	}

	ddata->status = POWER_SUPPLY_STATUS_CHARGING;
	cpcap_charger_update_state(ddata,
				   POWER_SUPPLY_STATUS_CHARGING);

	return 0;

@@ -555,39 +591,6 @@ static int cpcap_charger_get_ints_state(struct cpcap_charger_ddata *ddata,
	return 0;
}

static void cpcap_charger_update_state(struct cpcap_charger_ddata *ddata,
				       int state)
{
	const char *status;

	if (state > POWER_SUPPLY_STATUS_FULL) {
		dev_warn(ddata->dev, "unknown state: %i\n", state);

		return;
	}

	ddata->state = state;

	switch (state) {
	case POWER_SUPPLY_STATUS_DISCHARGING:
		status = "DISCONNECTED";
		break;
	case POWER_SUPPLY_STATUS_NOT_CHARGING:
		status = "DETECTING";
		break;
	case POWER_SUPPLY_STATUS_CHARGING:
		status = "CHARGING";
		break;
	case POWER_SUPPLY_STATUS_FULL:
		status = "DONE";
		break;
	default:
		return;
	}

	dev_dbg(ddata->dev, "state: %s\n", status);
}

static int cpcap_charger_voltage_to_regval(int voltage)
{
	int offset;
@@ -662,7 +665,7 @@ static void cpcap_usb_detect(struct work_struct *work)
	}

	/* Throttle chrgcurr2 interrupt for charger done and retry */
	switch (ddata->state) {
	switch (ddata->status) {
	case POWER_SUPPLY_STATUS_CHARGING:
		if (s.chrgcurr2)
			break;