Skip to content

Commit 7128e7f

Browse files
marcanjannau
authored andcommitted
power: supply: macsmc_power: Log power data on button presses
This helps catch s2idle power stats, since we get early data when the system resumes due to a power button press. Signed-off-by: Hector Martin <[email protected]>
1 parent 263d12b commit 7128e7f

File tree

1 file changed

+37
-27
lines changed

1 file changed

+37
-27
lines changed

drivers/power/supply/macsmc_power.c

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,36 @@ static struct macsmc_power *g_power;
7272
#define ACSt_CAN_BOOT_AP BIT(2)
7373
#define ACSt_CAN_BOOT_IBOOT BIT(1)
7474

75+
static void macsmc_do_dbg(struct macsmc_power *power)
76+
{
77+
int p_in = 0, p_sys = 0, p_3v8 = 0, p_mpmu = 0, p_spmu = 0, p_clvr = 0, p_cpu = 0;
78+
s32 p_bat = 0;
79+
s16 t_full = 0, t_empty = 0;
80+
u8 charge = 0;
81+
82+
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PDTR), &p_in, 1000);
83+
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PSTR), &p_sys, 1000);
84+
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PMVR), &p_3v8, 1000);
85+
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PHPC), &p_cpu, 1000);
86+
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PSVR), &p_clvr, 1000);
87+
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PPMC), &p_mpmu, 1000);
88+
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PPSC), &p_spmu, 1000);
89+
apple_smc_read_s32(power->smc, SMC_KEY(B0AP), &p_bat);
90+
apple_smc_read_s16(power->smc, SMC_KEY(B0TE), &t_empty);
91+
apple_smc_read_s16(power->smc, SMC_KEY(B0TF), &t_full);
92+
apple_smc_read_u8(power->smc, SMC_KEY(BUIC), &charge);
93+
94+
#define FD3(x) ((x) / 1000), abs((x) % 1000)
95+
dev_info(power->dev,
96+
"In %2d.%03dW Sys %2d.%03dW 3V8 %2d.%03dW MPMU %2d.%03dW SPMU %2d.%03dW "
97+
"CLVR %2d.%03dW CPU %2d.%03dW Batt %2d.%03dW %d%% T%s %dm\n",
98+
FD3(p_in), FD3(p_sys), FD3(p_3v8), FD3(p_mpmu), FD3(p_spmu), FD3(p_clvr),
99+
FD3(p_cpu), FD3(p_bat), charge,
100+
t_full >= 0 ? "full" : "empty",
101+
t_full >= 0 ? t_full : t_empty);
102+
#undef FD3
103+
}
104+
75105
static int macsmc_battery_get_status(struct macsmc_power *power)
76106
{
77107
u64 nocharge_flags;
@@ -500,34 +530,8 @@ static void macsmc_dbg_work(struct work_struct *wrk)
500530
{
501531
struct macsmc_power *power = container_of(to_delayed_work(wrk),
502532
struct macsmc_power, dbg_log_work);
503-
int p_in = 0, p_sys = 0, p_3v8 = 0, p_mpmu = 0, p_spmu = 0, p_clvr = 0, p_cpu = 0;
504-
s32 p_bat = 0;
505-
s16 t_full = 0, t_empty = 0;
506-
u8 charge = 0;
507533

508-
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PDTR), &p_in, 1000);
509-
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PSTR), &p_sys, 1000);
510-
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PMVR), &p_3v8, 1000);
511-
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PHPC), &p_cpu, 1000);
512-
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PSVR), &p_clvr, 1000);
513-
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PPMC), &p_mpmu, 1000);
514-
apple_smc_read_f32_scaled(power->smc, SMC_KEY(PPSC), &p_spmu, 1000);
515-
apple_smc_read_s32(power->smc, SMC_KEY(B0AP), &p_bat);
516-
apple_smc_read_s16(power->smc, SMC_KEY(B0TE), &t_empty);
517-
apple_smc_read_s16(power->smc, SMC_KEY(B0TF), &t_full);
518-
apple_smc_read_u8(power->smc, SMC_KEY(BUIC), &charge);
519-
520-
#define FD3(x) ((x) / 1000), abs((x) % 1000)
521-
522-
dev_info(power->dev,
523-
"In %2d.%03dW Sys %2d.%03dW 3V8 %2d.%03dW MPMU %2d.%03dW SPMU %2d.%03dW "
524-
"CLVR %2d.%03dW CPU %2d.%03dW Batt %2d.%03dW %d%% T%s %dm\n",
525-
FD3(p_in), FD3(p_sys), FD3(p_3v8), FD3(p_mpmu), FD3(p_spmu), FD3(p_clvr),
526-
FD3(p_cpu), FD3(p_bat), charge,
527-
t_full >= 0 ? "full" : "empty",
528-
t_full >= 0 ? t_full : t_empty);
529-
530-
#undef FD3
534+
macsmc_do_dbg(power);
531535

532536
if (log_power)
533537
schedule_delayed_work(&power->dbg_log_work, POWER_LOG_INTERVAL);
@@ -620,6 +624,12 @@ static int macsmc_power_event(struct notifier_block *nb, unsigned long event, vo
620624
} else if ((event & 0xff000000) == 0x71000000) {
621625
dev_info(power->dev, "Unknown charger event 0x%lx\n", event);
622626

627+
return NOTIFY_OK;
628+
} else if ((event & 0xffff0000) == 0x72010000) {
629+
/* Button event handled by macsmc-hid, but let's do a debug print */
630+
if (log_power)
631+
macsmc_do_dbg(power);
632+
623633
return NOTIFY_OK;
624634
}
625635

0 commit comments

Comments
 (0)