xref: /OK3568_Linux_fs/kernel/arch/arm/mach-pxa/sharpsl_pm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * SharpSL Battery/PM Driver
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 2004-2005 Richard Purdie
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun #ifndef _MACH_SHARPSL_PM
8*4882a593Smuzhiyun #define _MACH_SHARPSL_PM
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun struct sharpsl_charger_machinfo {
11*4882a593Smuzhiyun 	void (*init)(void);
12*4882a593Smuzhiyun 	void (*exit)(void);
13*4882a593Smuzhiyun 	int gpio_acin;
14*4882a593Smuzhiyun 	int gpio_batfull;
15*4882a593Smuzhiyun 	int batfull_irq;
16*4882a593Smuzhiyun 	int gpio_batlock;
17*4882a593Smuzhiyun 	int gpio_fatal;
18*4882a593Smuzhiyun 	void (*discharge)(int);
19*4882a593Smuzhiyun 	void (*discharge1)(int);
20*4882a593Smuzhiyun 	void (*charge)(int);
21*4882a593Smuzhiyun 	void (*measure_temp)(int);
22*4882a593Smuzhiyun 	void (*presuspend)(void);
23*4882a593Smuzhiyun 	void (*postsuspend)(void);
24*4882a593Smuzhiyun 	void (*earlyresume)(void);
25*4882a593Smuzhiyun 	unsigned long (*read_devdata)(int);
26*4882a593Smuzhiyun #define SHARPSL_BATT_VOLT       1
27*4882a593Smuzhiyun #define SHARPSL_BATT_TEMP       2
28*4882a593Smuzhiyun #define SHARPSL_ACIN_VOLT       3
29*4882a593Smuzhiyun #define SHARPSL_STATUS_ACIN     4
30*4882a593Smuzhiyun #define SHARPSL_STATUS_LOCK     5
31*4882a593Smuzhiyun #define SHARPSL_STATUS_CHRGFULL 6
32*4882a593Smuzhiyun #define SHARPSL_STATUS_FATAL    7
33*4882a593Smuzhiyun 	bool (*charger_wakeup)(void);
34*4882a593Smuzhiyun 	int (*should_wakeup)(unsigned int resume_on_alarm);
35*4882a593Smuzhiyun 	void (*backlight_limit)(int);
36*4882a593Smuzhiyun 	int (*backlight_get_status) (void);
37*4882a593Smuzhiyun 	int charge_on_volt;
38*4882a593Smuzhiyun 	int charge_on_temp;
39*4882a593Smuzhiyun 	int charge_acin_high;
40*4882a593Smuzhiyun 	int charge_acin_low;
41*4882a593Smuzhiyun 	int fatal_acin_volt;
42*4882a593Smuzhiyun 	int fatal_noacin_volt;
43*4882a593Smuzhiyun 	int bat_levels;
44*4882a593Smuzhiyun 	struct battery_thresh *bat_levels_noac;
45*4882a593Smuzhiyun 	struct battery_thresh *bat_levels_acin;
46*4882a593Smuzhiyun 	struct battery_thresh *bat_levels_noac_bl;
47*4882a593Smuzhiyun 	struct battery_thresh *bat_levels_acin_bl;
48*4882a593Smuzhiyun 	int status_high_acin;
49*4882a593Smuzhiyun 	int status_low_acin;
50*4882a593Smuzhiyun 	int status_high_noac;
51*4882a593Smuzhiyun 	int status_low_noac;
52*4882a593Smuzhiyun };
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun struct battery_thresh {
55*4882a593Smuzhiyun 	int voltage;
56*4882a593Smuzhiyun 	int percentage;
57*4882a593Smuzhiyun };
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun struct battery_stat {
60*4882a593Smuzhiyun 	int ac_status;         /* APM AC Present/Not Present */
61*4882a593Smuzhiyun 	int mainbat_status;    /* APM Main Battery Status */
62*4882a593Smuzhiyun 	int mainbat_percent;   /* Main Battery Percentage Charge */
63*4882a593Smuzhiyun 	int mainbat_voltage;   /* Main Battery Voltage */
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun struct sharpsl_pm_status {
67*4882a593Smuzhiyun 	struct device *dev;
68*4882a593Smuzhiyun 	struct timer_list ac_timer;
69*4882a593Smuzhiyun 	struct timer_list chrg_full_timer;
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	int charge_mode;
72*4882a593Smuzhiyun #define CHRG_ERROR    (-1)
73*4882a593Smuzhiyun #define CHRG_OFF      (0)
74*4882a593Smuzhiyun #define CHRG_ON       (1)
75*4882a593Smuzhiyun #define CHRG_DONE     (2)
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun 	unsigned int flags;
78*4882a593Smuzhiyun #define SHARPSL_SUSPENDED       (1 << 0)  /* Device is Suspended */
79*4882a593Smuzhiyun #define SHARPSL_ALARM_ACTIVE    (1 << 1)  /* Alarm is for charging event (not user) */
80*4882a593Smuzhiyun #define SHARPSL_BL_LIMIT        (1 << 2)  /* Backlight Intensity Limited */
81*4882a593Smuzhiyun #define SHARPSL_APM_QUEUED      (1 << 3)  /* APM Event Queued */
82*4882a593Smuzhiyun #define SHARPSL_DO_OFFLINE_CHRG (1 << 4)  /* Trigger the offline charger */
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun 	int full_count;
85*4882a593Smuzhiyun 	unsigned long charge_start_time;
86*4882a593Smuzhiyun 	struct sharpsl_charger_machinfo *machinfo;
87*4882a593Smuzhiyun 	struct battery_stat battstat;
88*4882a593Smuzhiyun };
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun extern struct sharpsl_pm_status sharpsl_pm;
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun extern struct battery_thresh sharpsl_battery_levels_acin[];
93*4882a593Smuzhiyun extern struct battery_thresh sharpsl_battery_levels_noac[];
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun #define SHARPSL_LED_ERROR  2
96*4882a593Smuzhiyun #define SHARPSL_LED_ON     1
97*4882a593Smuzhiyun #define SHARPSL_LED_OFF    0
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun void sharpsl_battery_kick(void);
100*4882a593Smuzhiyun void sharpsl_pm_led(int val);
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun /* MAX1111 Channel Definitions */
103*4882a593Smuzhiyun #define MAX1111_BATT_VOLT   4u
104*4882a593Smuzhiyun #define MAX1111_BATT_TEMP   2u
105*4882a593Smuzhiyun #define MAX1111_ACIN_VOLT   6u
106*4882a593Smuzhiyun int sharpsl_pm_pxa_read_max1111(int channel);
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun void corgi_lcd_limit_intensity(int limit);
109*4882a593Smuzhiyun #endif
110