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

Commit b5c7ccca authored by Finn Thain's avatar Finn Thain Committed by Michael Ellerman
Browse files

macintosh/via-pmu: Clean up interrupt statistics



Replace an open-coded ffs() with the function call.
Simplify an if-else cascade using a switch statement.
Correct a typo and an indentation issue.

Tested-by: default avatarStan Johnson <userm57@yahoo.com>
Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent ebd72227
Loading
Loading
Loading
Loading
+22 −17
Original line number Diff line number Diff line
@@ -1355,7 +1355,8 @@ pmu_resume(void)
static void
pmu_handle_data(unsigned char *data, int len)
{
	unsigned char ints, pirq;
	unsigned char ints;
	int idx;
	int i = 0;

	asleep = 0;
@@ -1377,25 +1378,24 @@ pmu_handle_data(unsigned char *data, int len)
		ints &= ~(PMU_INT_ADB_AUTO | PMU_INT_AUTO_SRQ_POLL);

next:

	if (ints == 0) {
		if (i > pmu_irq_stats[10])
			pmu_irq_stats[10] = i;
		return;
	}

	for (pirq = 0; pirq < 8; pirq++)
		if (ints & (1 << pirq))
			break;
	pmu_irq_stats[pirq]++;
	i++;
	ints &= ~(1 << pirq);

	idx = ffs(ints) - 1;
	ints &= ~BIT(idx);

	pmu_irq_stats[idx]++;

	/* Note: for some reason, we get an interrupt with len=1,
	 * data[0]==0 after each normal ADB interrupt, at least
	 * on the Pismo. Still investigating...  --BenH
	 */
	if ((1 << pirq) & PMU_INT_ADB) {
	switch (BIT(idx)) {
	case PMU_INT_ADB:
		if ((data[0] & PMU_INT_ADB_AUTO) == 0) {
			struct adb_request *req = req_awaiting_reply;
			if (!req) {
@@ -1433,25 +1433,28 @@ pmu_handle_data(unsigned char *data, int len)
				adb_input(data+1, len-1, 1);
#endif /* CONFIG_ADB */		
		}
	}
		break;

	/* Sound/brightness button pressed */
	else if ((1 << pirq) & PMU_INT_SNDBRT) {
	case PMU_INT_SNDBRT:
#ifdef CONFIG_PMAC_BACKLIGHT
		if (len == 3)
			pmac_backlight_set_legacy_brightness_pmu(data[1] >> 4);
#endif
	}
		break;

	/* Tick interrupt */
	else if ((1 << pirq) & PMU_INT_TICK) {
		/* Environement or tick interrupt, query batteries */
	case PMU_INT_TICK:
		/* Environment or tick interrupt, query batteries */
		if (pmu_battery_count) {
			if ((--query_batt_timer) == 0) {
				query_battery_state();
				query_batt_timer = BATTERY_POLLING_COUNT;
			}
		}
        }
	else if ((1 << pirq) & PMU_INT_ENVIRONMENT) {
		break;

	case PMU_INT_ENVIRONMENT:
		if (pmu_battery_count)
			query_battery_state();
		pmu_pass_intr(data, len);
@@ -1461,7 +1464,9 @@ pmu_handle_data(unsigned char *data, int len)
			via_pmu_event(PMU_EVT_POWER, !!(data[1]&8));
			via_pmu_event(PMU_EVT_LID, data[1]&1);
		}
	} else {
		break;

	default:
	       pmu_pass_intr(data, len);
	}
	goto next;