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

Commit 15aa5c75 authored by Mattia Dongili's avatar Mattia Dongili Committed by Matthew Garrett
Browse files

sony-laptop: store battery care limits on batteries



Some models offer the option to store the limits on the battery
(firmware?).

Signed-off-by: default avatarMattia Dongili <malattia@linux.it>
Signed-off-by: default avatarMatthew Garrett <mjg@redhat.com>
parent bb384b52
Loading
Loading
Loading
Loading
+21 −20
Original line number Diff line number Diff line
@@ -1916,32 +1916,33 @@ static ssize_t sony_nc_battery_care_limit_store(struct device *dev,
	 *  bits 4,5: store the limit into the EC
	 *  bits 6,7: store the limit into the battery
	 */
	cmd = 0;

	/*
	 * handle 0x0115 should allow storing on battery too;
	 * handle 0x0136 same as 0x0115 + health status;
	 * handle 0x013f, same as 0x0136 but no storing on the battery
	 *
	 * Store only inside the EC for now, regardless the handle number
	 */
	if (value == 0)
		/* disable limits */
		cmd = 0x0;

	else if (value <= 50)
		cmd = 0x21;
	if (value > 0) {
		if (value <= 50)
			cmd = 0x20;

		else if (value <= 80)
		cmd = 0x11;
			cmd = 0x10;

		else if (value <= 100)
		cmd = 0x31;
			cmd = 0x30;

		else
			return -EINVAL;

	if (sony_call_snc_handle(bcare_ctl->handle, (cmd << 0x10) | 0x0100,
				&result))
		/*
		 * handle 0x0115 should allow storing on battery too;
		 * handle 0x0136 same as 0x0115 + health status;
		 * handle 0x013f, same as 0x0136 but no storing on the battery
		 */
		if (bcare_ctl->handle != 0x013f)
			cmd = cmd | (cmd << 2);

		cmd = (cmd | 0x1) << 0x10;
	}

	if (sony_call_snc_handle(bcare_ctl->handle, cmd | 0x0100, &result))
		return -EIO;

	return count;