1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds * Definitions for talking to the PMU. The PMU is a microcontroller 41da177e4SLinus Torvalds * which controls battery charging and system power on PowerBook 3400 51da177e4SLinus Torvalds * and 2400 models as well as the RTC and various other things. 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * Copyright (C) 1998 Paul Mackerras. 81da177e4SLinus Torvalds */ 96c9f2ef9SDavid Howells #ifndef _LINUX_PMU_H 106c9f2ef9SDavid Howells #define _LINUX_PMU_H 111da177e4SLinus Torvalds 120792a2c8SFinn Thain #include <linux/rtc.h> 13607ca46eSDavid Howells #include <uapi/linux/pmu.h> 141da177e4SLinus Torvalds 151da177e4SLinus Torvalds 16*7da1d1ddSNick Child extern int __init find_via_pmu(void); 171da177e4SLinus Torvalds 181da177e4SLinus Torvalds extern int pmu_request(struct adb_request *req, 191da177e4SLinus Torvalds void (*done)(struct adb_request *), int nbytes, ...); 20730745a5SBenjamin Herrenschmidt extern int pmu_queue_request(struct adb_request *req); 211da177e4SLinus Torvalds extern void pmu_poll(void); 221da177e4SLinus Torvalds extern void pmu_poll_adb(void); /* For use by xmon */ 231da177e4SLinus Torvalds extern void pmu_wait_complete(struct adb_request *req); 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds /* For use before switching interrupts off for a long time; 261da177e4SLinus Torvalds * warning: not stackable 271da177e4SLinus Torvalds */ 28a99d9a6eSTony Breeds #if defined(CONFIG_ADB_PMU) 291da177e4SLinus Torvalds extern void pmu_suspend(void); 301da177e4SLinus Torvalds extern void pmu_resume(void); 31a99d9a6eSTony Breeds #else pmu_suspend(void)32a99d9a6eSTony Breedsstatic inline void pmu_suspend(void) 33a99d9a6eSTony Breeds {} pmu_resume(void)34a99d9a6eSTony Breedsstatic inline void pmu_resume(void) 35a99d9a6eSTony Breeds {} 36a99d9a6eSTony Breeds #endif 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds extern void pmu_enable_irled(int on); 391da177e4SLinus Torvalds 400792a2c8SFinn Thain extern time64_t pmu_get_time(void); 410792a2c8SFinn Thain extern int pmu_set_rtc_time(struct rtc_time *tm); 420792a2c8SFinn Thain 431da177e4SLinus Torvalds extern void pmu_restart(void); 441da177e4SLinus Torvalds extern void pmu_shutdown(void); 451da177e4SLinus Torvalds extern void pmu_unlock(void); 461da177e4SLinus Torvalds 471da177e4SLinus Torvalds extern int pmu_present(void); 481da177e4SLinus Torvalds extern int pmu_get_model(void); 491da177e4SLinus Torvalds 500094f2cdSBenjamin Herrenschmidt extern void pmu_backlight_set_sleep(int sleep); 510094f2cdSBenjamin Herrenschmidt 521da177e4SLinus Torvalds #define PMU_MAX_BATTERIES 2 531da177e4SLinus Torvalds 541da177e4SLinus Torvalds /* values for pmu_power_flags */ 551da177e4SLinus Torvalds #define PMU_PWR_AC_PRESENT 0x00000001 561da177e4SLinus Torvalds 571da177e4SLinus Torvalds /* values for pmu_battery_info.flags */ 581da177e4SLinus Torvalds #define PMU_BATT_PRESENT 0x00000001 591da177e4SLinus Torvalds #define PMU_BATT_CHARGING 0x00000002 601da177e4SLinus Torvalds #define PMU_BATT_TYPE_MASK 0x000000f0 611da177e4SLinus Torvalds #define PMU_BATT_TYPE_SMART 0x00000010 /* Smart battery */ 621da177e4SLinus Torvalds #define PMU_BATT_TYPE_HOOPER 0x00000020 /* 3400/3500 */ 631da177e4SLinus Torvalds #define PMU_BATT_TYPE_COMET 0x00000030 /* 2400 */ 641da177e4SLinus Torvalds 651da177e4SLinus Torvalds struct pmu_battery_info 661da177e4SLinus Torvalds { 671da177e4SLinus Torvalds unsigned int flags; 681da177e4SLinus Torvalds unsigned int charge; /* current charge */ 691da177e4SLinus Torvalds unsigned int max_charge; /* maximum charge */ 701da177e4SLinus Torvalds signed int amperage; /* current, positive if charging */ 711da177e4SLinus Torvalds unsigned int voltage; /* voltage */ 721da177e4SLinus Torvalds unsigned int time_remaining; /* remaining time */ 731da177e4SLinus Torvalds }; 741da177e4SLinus Torvalds 751da177e4SLinus Torvalds extern int pmu_battery_count; 761da177e4SLinus Torvalds extern struct pmu_battery_info pmu_batteries[PMU_MAX_BATTERIES]; 771da177e4SLinus Torvalds extern unsigned int pmu_power_flags; 781da177e4SLinus Torvalds 795474c120SMichael Hanselmann /* Backlight */ 804b755999SMichael Hanselmann extern void pmu_backlight_init(void); 815474c120SMichael Hanselmann 82f596575eSJohannes Berg /* some code needs to know if the PMU was suspended for hibernation */ 8307c941d0STony Breeds #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32) 84f596575eSJohannes Berg extern int pmu_sys_suspended; 85f596575eSJohannes Berg #else 86f596575eSJohannes Berg /* if power management is not configured it can't be suspended */ 87f596575eSJohannes Berg #define pmu_sys_suspended 0 88f596575eSJohannes Berg #endif 89f596575eSJohannes Berg 906c9f2ef9SDavid Howells #endif /* _LINUX_PMU_H */ 91