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: Stan Johnson <userm57@yahoo.com> Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
ebd722275f
commit
b5c7cccaac
@ -1355,7 +1355,8 @@ pmu_resume(void)
|
|||||||
static void
|
static void
|
||||||
pmu_handle_data(unsigned char *data, int len)
|
pmu_handle_data(unsigned char *data, int len)
|
||||||
{
|
{
|
||||||
unsigned char ints, pirq;
|
unsigned char ints;
|
||||||
|
int idx;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
asleep = 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);
|
ints &= ~(PMU_INT_ADB_AUTO | PMU_INT_AUTO_SRQ_POLL);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
|
|
||||||
if (ints == 0) {
|
if (ints == 0) {
|
||||||
if (i > pmu_irq_stats[10])
|
if (i > pmu_irq_stats[10])
|
||||||
pmu_irq_stats[10] = i;
|
pmu_irq_stats[10] = i;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (pirq = 0; pirq < 8; pirq++)
|
|
||||||
if (ints & (1 << pirq))
|
|
||||||
break;
|
|
||||||
pmu_irq_stats[pirq]++;
|
|
||||||
i++;
|
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,
|
/* Note: for some reason, we get an interrupt with len=1,
|
||||||
* data[0]==0 after each normal ADB interrupt, at least
|
* data[0]==0 after each normal ADB interrupt, at least
|
||||||
* on the Pismo. Still investigating... --BenH
|
* 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) {
|
if ((data[0] & PMU_INT_ADB_AUTO) == 0) {
|
||||||
struct adb_request *req = req_awaiting_reply;
|
struct adb_request *req = req_awaiting_reply;
|
||||||
if (!req) {
|
if (!req) {
|
||||||
@ -1433,25 +1433,28 @@ next:
|
|||||||
adb_input(data+1, len-1, 1);
|
adb_input(data+1, len-1, 1);
|
||||||
#endif /* CONFIG_ADB */
|
#endif /* CONFIG_ADB */
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
|
|
||||||
/* Sound/brightness button pressed */
|
/* Sound/brightness button pressed */
|
||||||
else if ((1 << pirq) & PMU_INT_SNDBRT) {
|
case PMU_INT_SNDBRT:
|
||||||
#ifdef CONFIG_PMAC_BACKLIGHT
|
#ifdef CONFIG_PMAC_BACKLIGHT
|
||||||
if (len == 3)
|
if (len == 3)
|
||||||
pmac_backlight_set_legacy_brightness_pmu(data[1] >> 4);
|
pmac_backlight_set_legacy_brightness_pmu(data[1] >> 4);
|
||||||
#endif
|
#endif
|
||||||
}
|
break;
|
||||||
|
|
||||||
/* Tick interrupt */
|
/* Tick interrupt */
|
||||||
else if ((1 << pirq) & PMU_INT_TICK) {
|
case PMU_INT_TICK:
|
||||||
/* Environement or tick interrupt, query batteries */
|
/* Environment or tick interrupt, query batteries */
|
||||||
if (pmu_battery_count) {
|
if (pmu_battery_count) {
|
||||||
if ((--query_batt_timer) == 0) {
|
if ((--query_batt_timer) == 0) {
|
||||||
query_battery_state();
|
query_battery_state();
|
||||||
query_batt_timer = BATTERY_POLLING_COUNT;
|
query_batt_timer = BATTERY_POLLING_COUNT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
else if ((1 << pirq) & PMU_INT_ENVIRONMENT) {
|
|
||||||
|
case PMU_INT_ENVIRONMENT:
|
||||||
if (pmu_battery_count)
|
if (pmu_battery_count)
|
||||||
query_battery_state();
|
query_battery_state();
|
||||||
pmu_pass_intr(data, len);
|
pmu_pass_intr(data, len);
|
||||||
@ -1461,7 +1464,9 @@ next:
|
|||||||
via_pmu_event(PMU_EVT_POWER, !!(data[1]&8));
|
via_pmu_event(PMU_EVT_POWER, !!(data[1]&8));
|
||||||
via_pmu_event(PMU_EVT_LID, data[1]&1);
|
via_pmu_event(PMU_EVT_LID, data[1]&1);
|
||||||
}
|
}
|
||||||
} else {
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
pmu_pass_intr(data, len);
|
pmu_pass_intr(data, len);
|
||||||
}
|
}
|
||||||
goto next;
|
goto next;
|
||||||
|
Loading…
Reference in New Issue
Block a user