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