xref: /OK3568_Linux_fs/kernel/include/linux/pmu.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Definitions for talking to the PMU.  The PMU is a microcontroller
4*4882a593Smuzhiyun  * which controls battery charging and system power on PowerBook 3400
5*4882a593Smuzhiyun  * and 2400 models as well as the RTC and various other things.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Copyright (C) 1998 Paul Mackerras.
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun #ifndef _LINUX_PMU_H
10*4882a593Smuzhiyun #define _LINUX_PMU_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <linux/rtc.h>
13*4882a593Smuzhiyun #include <uapi/linux/pmu.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun extern int find_via_pmu(void);
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun extern int pmu_request(struct adb_request *req,
19*4882a593Smuzhiyun 		void (*done)(struct adb_request *), int nbytes, ...);
20*4882a593Smuzhiyun extern int pmu_queue_request(struct adb_request *req);
21*4882a593Smuzhiyun extern void pmu_poll(void);
22*4882a593Smuzhiyun extern void pmu_poll_adb(void); /* For use by xmon */
23*4882a593Smuzhiyun extern void pmu_wait_complete(struct adb_request *req);
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /* For use before switching interrupts off for a long time;
26*4882a593Smuzhiyun  * warning: not stackable
27*4882a593Smuzhiyun  */
28*4882a593Smuzhiyun #if defined(CONFIG_ADB_PMU)
29*4882a593Smuzhiyun extern void pmu_suspend(void);
30*4882a593Smuzhiyun extern void pmu_resume(void);
31*4882a593Smuzhiyun #else
pmu_suspend(void)32*4882a593Smuzhiyun static inline void pmu_suspend(void)
33*4882a593Smuzhiyun {}
pmu_resume(void)34*4882a593Smuzhiyun static inline void pmu_resume(void)
35*4882a593Smuzhiyun {}
36*4882a593Smuzhiyun #endif
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun extern void pmu_enable_irled(int on);
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun extern time64_t pmu_get_time(void);
41*4882a593Smuzhiyun extern int pmu_set_rtc_time(struct rtc_time *tm);
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun extern void pmu_restart(void);
44*4882a593Smuzhiyun extern void pmu_shutdown(void);
45*4882a593Smuzhiyun extern void pmu_unlock(void);
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun extern int pmu_present(void);
48*4882a593Smuzhiyun extern int pmu_get_model(void);
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun extern void pmu_backlight_set_sleep(int sleep);
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun #define PMU_MAX_BATTERIES	2
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /* values for pmu_power_flags */
55*4882a593Smuzhiyun #define PMU_PWR_AC_PRESENT	0x00000001
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun /* values for pmu_battery_info.flags */
58*4882a593Smuzhiyun #define PMU_BATT_PRESENT	0x00000001
59*4882a593Smuzhiyun #define PMU_BATT_CHARGING	0x00000002
60*4882a593Smuzhiyun #define PMU_BATT_TYPE_MASK	0x000000f0
61*4882a593Smuzhiyun #define PMU_BATT_TYPE_SMART	0x00000010 /* Smart battery */
62*4882a593Smuzhiyun #define PMU_BATT_TYPE_HOOPER	0x00000020 /* 3400/3500 */
63*4882a593Smuzhiyun #define PMU_BATT_TYPE_COMET	0x00000030 /* 2400 */
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun struct pmu_battery_info
66*4882a593Smuzhiyun {
67*4882a593Smuzhiyun 	unsigned int	flags;
68*4882a593Smuzhiyun 	unsigned int	charge;		/* current charge */
69*4882a593Smuzhiyun 	unsigned int	max_charge;	/* maximum charge */
70*4882a593Smuzhiyun 	signed int	amperage;	/* current, positive if charging */
71*4882a593Smuzhiyun 	unsigned int	voltage;	/* voltage */
72*4882a593Smuzhiyun 	unsigned int	time_remaining;	/* remaining time */
73*4882a593Smuzhiyun };
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun extern int pmu_battery_count;
76*4882a593Smuzhiyun extern struct pmu_battery_info pmu_batteries[PMU_MAX_BATTERIES];
77*4882a593Smuzhiyun extern unsigned int pmu_power_flags;
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /* Backlight */
80*4882a593Smuzhiyun extern void pmu_backlight_init(void);
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun /* some code needs to know if the PMU was suspended for hibernation */
83*4882a593Smuzhiyun #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
84*4882a593Smuzhiyun extern int pmu_sys_suspended;
85*4882a593Smuzhiyun #else
86*4882a593Smuzhiyun /* if power management is not configured it can't be suspended */
87*4882a593Smuzhiyun #define pmu_sys_suspended	0
88*4882a593Smuzhiyun #endif
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #endif /* _LINUX_PMU_H */
91