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

Commit 953f2c5f authored by Jason Gerecke's avatar Jason Gerecke Committed by Jiri Kosina
Browse files

HID: wacom: Centralize updating of wacom_wac battery status



Has the 'wacom_notify_battery' function take on the job of detecting if
updating the power supply is necessary to remove multiple
nearly-identical 'if' blocks.

Signed-off-by: default avatarJason Gerecke <killertofu@gmail.com>
Acked-by: default avatarPing Cheng <pingc@wacom.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 4ca4ec71
Loading
Loading
Loading
Loading
+0 −7
Original line number Original line Diff line number Diff line
@@ -129,13 +129,6 @@ static inline void wacom_schedule_work(struct wacom_wac *wacom_wac)
	schedule_work(&wacom->work);
	schedule_work(&wacom->work);
}
}


static inline void wacom_notify_battery(struct wacom_wac *wacom_wac)
{
	struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);

	power_supply_changed(&wacom->battery);
}

extern const struct hid_device_id wacom_ids[];
extern const struct hid_device_id wacom_ids[];


void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len);
void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len);
+29 −28
Original line number Original line Diff line number Diff line
@@ -45,6 +45,24 @@ static unsigned short batcap_gr[8] = { 1, 15, 25, 35, 50, 70, 100, 100 };
 */
 */
static unsigned short batcap_i4[8] = { 1, 15, 30, 45, 60, 70, 85, 100 };
static unsigned short batcap_i4[8] = { 1, 15, 30, 45, 60, 70, 85, 100 };


static void wacom_notify_battery(struct wacom_wac *wacom_wac,
	int bat_capacity, bool bat_charging, bool ps_connected)
{
	struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
	bool changed = wacom_wac->battery_capacity != bat_capacity  ||
		       wacom_wac->bat_charging     != bat_charging  ||
		       wacom_wac->ps_connected     != ps_connected;

	if (changed) {
		wacom_wac->battery_capacity = bat_capacity;
		wacom_wac->bat_charging = bat_charging;
		wacom_wac->ps_connected = ps_connected;

		if (wacom->battery.dev)
			power_supply_changed(&wacom->battery);
	}
}

static int wacom_penpartner_irq(struct wacom_wac *wacom)
static int wacom_penpartner_irq(struct wacom_wac *wacom)
{
{
	unsigned char *data = wacom->data;
	unsigned char *data = wacom->data;
@@ -419,12 +437,8 @@ static int wacom_graphire_irq(struct wacom_wac *wacom)
		rw = (data[7] >> 2 & 0x07);
		rw = (data[7] >> 2 & 0x07);
		battery_capacity = batcap_gr[rw];
		battery_capacity = batcap_gr[rw];
		ps_connected = rw == 7;
		ps_connected = rw == 7;
		if ((wacom->battery_capacity != battery_capacity) ||
		wacom_notify_battery(wacom, battery_capacity, ps_connected,
		    (wacom->ps_connected != ps_connected)) {
				     ps_connected);
			wacom->battery_capacity = battery_capacity;
			wacom->ps_connected = ps_connected;
			wacom_notify_battery(wacom);
		}
	}
	}
exit:
exit:
	return retval;
	return retval;
@@ -1014,15 +1028,8 @@ static int wacom_intuos_bt_irq(struct wacom_wac *wacom, size_t len)
		bat_charging = (power_raw & 0x08) ? 1 : 0;
		bat_charging = (power_raw & 0x08) ? 1 : 0;
		ps_connected = (power_raw & 0x10) ? 1 : 0;
		ps_connected = (power_raw & 0x10) ? 1 : 0;
		battery_capacity = batcap_i4[power_raw & 0x07];
		battery_capacity = batcap_i4[power_raw & 0x07];
		if ((wacom->battery_capacity != battery_capacity) ||
		wacom_notify_battery(wacom, battery_capacity, bat_charging,
		    (wacom->bat_charging != bat_charging) ||
				     ps_connected);
		    (wacom->ps_connected != ps_connected)) {
			wacom->battery_capacity = battery_capacity;
			wacom->bat_charging = bat_charging;
			wacom->ps_connected = ps_connected;
			wacom_notify_battery(wacom);
		}

		break;
		break;
	default:
	default:
		dev_dbg(wacom->input->dev.parent,
		dev_dbg(wacom->input->dev.parent,
@@ -1910,7 +1917,7 @@ static int wacom_wireless_irq(struct wacom_wac *wacom, size_t len)


	connected = data[1] & 0x01;
	connected = data[1] & 0x01;
	if (connected) {
	if (connected) {
		int pid, battery, ps_connected;
		int pid, battery, ps_connected, charging;


		if ((wacom->shared->type == INTUOSHT) &&
		if ((wacom->shared->type == INTUOSHT) &&
		    wacom->shared->touch_input &&
		    wacom->shared->touch_input &&
@@ -1923,27 +1930,21 @@ static int wacom_wireless_irq(struct wacom_wac *wacom, size_t len)
		pid = get_unaligned_be16(&data[6]);
		pid = get_unaligned_be16(&data[6]);
		battery = (data[5] & 0x3f) * 100 / 31;
		battery = (data[5] & 0x3f) * 100 / 31;
		ps_connected = !!(data[5] & 0x80);
		ps_connected = !!(data[5] & 0x80);
		charging = ps_connected && wacom->battery_capacity < 100;
		if (wacom->pid != pid) {
		if (wacom->pid != pid) {
			wacom->pid = pid;
			wacom->pid = pid;
			wacom_schedule_work(wacom);
			wacom_schedule_work(wacom);
		}
		}


		if (wacom->shared->type &&
		if (wacom->shared->type)
		    (battery != wacom->battery_capacity ||
			wacom_notify_battery(wacom, battery, charging,
		     ps_connected != wacom->ps_connected)) {
					     ps_connected);
			wacom->battery_capacity = battery;

			wacom->ps_connected = ps_connected;
			wacom->bat_charging = ps_connected &&
						wacom->battery_capacity < 100;
			wacom_notify_battery(wacom);
		}
	} else if (wacom->pid != 0) {
	} else if (wacom->pid != 0) {
		/* disconnected while previously connected */
		/* disconnected while previously connected */
		wacom->pid = 0;
		wacom->pid = 0;
		wacom_schedule_work(wacom);
		wacom_schedule_work(wacom);
		wacom->battery_capacity = 0;
		wacom_notify_battery(wacom, 0, 0, 0);
		wacom->bat_charging = 0;
		wacom->ps_connected = 0;
	}
	}


	return 0;
	return 0;