Skip to content

Commit bc095b4

Browse files
committed
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 6d71bd5 commit bc095b4

1 file changed

Lines changed: 37 additions & 27 deletions

File tree

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;
@@ -501,34 +531,8 @@ static void macsmc_dbg_work(struct work_struct *wrk)
501531
{
502532
struct macsmc_power *power = container_of(to_delayed_work(wrk),
503533
struct macsmc_power, dbg_log_work);
504-
int p_in = 0, p_sys = 0, p_3v8 = 0, p_mpmu = 0, p_spmu = 0, p_clvr = 0, p_cpu = 0;
505-
s32 p_bat = 0;
506-
s16 t_full = 0, t_empty = 0;
507-
u8 charge = 0;
508534

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

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

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

0 commit comments

Comments
 (0)