xref: /linux/include/linux/pmu.h (revision 7da1d1dd)
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 Breeds static inline void pmu_suspend(void)
33a99d9a6eSTony Breeds {}
pmu_resume(void)34a99d9a6eSTony Breeds static 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