1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2016 Amaury Pouly
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#ifndef __POWER_NWZ_H__
#define __POWER_NWZ_H__
#include "power.h"
/** power */
#define NWZ_POWER_DEV "/dev/icx_power"
#define NWZ_POWER_TYPE 'P'
/* ioctl request */
#define NWZ_POWER_GET_STATUS _IOR(NWZ_POWER_TYPE, 0, int *)
#define NWZ_POWER_SET_VBUS_LIMIT _IOW(NWZ_POWER_TYPE, 1, int *)
#define NWZ_POWER_GET_BAT_ADVAL _IOR(NWZ_POWER_TYPE, 2, int *)
#define NWZ_POWER_GET_BAT_GAUGE _IOR(NWZ_POWER_TYPE, 3, int *)
#define NWZ_POWER_ENABLE_CHARGER _IOW(NWZ_POWER_TYPE, 4, int *)
#define NWZ_POWER_ENABLE_DEBUG_PORT _IO (NWZ_POWER_TYPE, 5)
#define NWZ_POWER_IS_FULLY_CHARGED _IOR(NWZ_POWER_TYPE, 6, int *)
#define NWZ_POWER_AVG_VALUE _IO (NWZ_POWER_TYPE, 7)
#define NWZ_POWER_CONSIDERATION_CHARGE _IOW(NWZ_POWER_TYPE, 8, int)
#define NWZ_POWER_GET_VBUS_LIMIT _IOR(NWZ_POWER_TYPE, 9, int *)
#define NWZ_POWER_GET_CHARGE_SWITCH _IOR(NWZ_POWER_TYPE,10, int *)
#define NWZ_POWER_GET_SAMPLE_COUNT _IOR(NWZ_POWER_TYPE,11, int *)
#define NWZ_POWER_SET_CHARGE_CURRENT _IOW(NWZ_POWER_TYPE,12, int *)
#define NWZ_POWER_GET_CHARGE_CURRENT _IOR(NWZ_POWER_TYPE,13, int *)
#define NWZ_POWER_GET_VBUS_ADVAL _IOR(NWZ_POWER_TYPE,14, int *)
#define NWZ_POWER_GET_VSYS_ADVAL _IOR(NWZ_POWER_TYPE,15, int *)
#define NWZ_POWER_GET_VBAT_ADVAL _IOR(NWZ_POWER_TYPE,16, int *)
#define NWZ_POWER_CHG_VBUS_LIMIT _IOW(NWZ_POWER_TYPE,17, int *)
#define NWZ_POWER_SET_ACCESSARY_CHARGE_MODE _IOW(NWZ_POWER_TYPE,18, int *)
#define NWZ_POWER_GET_ACCESSARY_CHARGE_MODE _IOR(NWZ_POWER_TYPE,19, int *)
/* NWZ_POWER_GET_STATUS bitmap */
#define NWZ_POWER_STATUS_CHARGE_INIT 0x100 /* initializing charging */
#define NWZ_POWER_STATUS_CHARGE_STATUS 0x0c0 /* charging status mask */
#define NWZ_POWER_STATUS_VBUS_DET 0x020 /* vbus detected */
#define NWZ_POWER_STATUS_AC_DET 0x010 /* ac adapter detected */
#define NWZ_POWER_STATUS_CHARGE_LOW 0x001 /* full voltage of 4.1 instead of 4.2 */
/* NWZ_POWER_STATUS_CHARGING_MASK value */
#define NWZ_POWER_STATUS_CHARGE_STATUS_CHARGING 0xc0
#define NWZ_POWER_STATUS_CHARGE_STATUS_SUSPEND 0x80
#define NWZ_POWER_STATUS_CHARGE_STATUS_TIMEOUT 0x40
#define NWZ_POWER_STATUS_CHARGE_STATUS_NORMAL 0x00
/* base values to convert from adval to mV (represents mV for adval of 255) */
#define NWZ_POWER_AD_BASE_VBAT 4664
#define NWZ_POWER_AD_BASE_VBUS 7254
#define NWZ_POWER_AD_BASE_VSYS 5700
/* battery gauge */
#define NWZ_POWER_BAT_NOBAT -100 /* no battery */
#define NWZ_POWER_BAT_VERYLOW -99 /* very low */
#define NWZ_POWER_BAT_LOW 0 /* low */
#define NWZ_POWER_BAT_GAUGE0 1 /* ____ */
#define NWZ_POWER_BAT_GAUGE1 2 /* O___ */
#define NWZ_POWER_BAT_GAUGE2 3 /* OO__ */
#define NWZ_POWER_BAT_GAUGE3 4 /* OOO_ */
#define NWZ_POWER_BAT_GAUGE4 5 /* OOOO */
/* NWZ_POWER_GET_ACCESSARY_CHARGE_MODE */
#define NWZ_POWER_ACC_CHARGE_NONE 0
#define NWZ_POWER_ACC_CHARGE_VBAT 1
#define NWZ_POWER_ACC_CHARGE_VSYS 2
/** pminfo
*
* This driver seems to collect the state of the device on boot. Thus one
* can know if a key was pressed when booting for example.
*/
#define NWZ_PMINFO_DEV "/dev/icx_pminfo"
#define NWZ_PMINFO_TYPE 'b'
/* ioctl request */
#define NWZ_PMINFO_GET_FACTOR _IOR(NWZ_PMINFO_TYPE, 0, unsigned int *)
#define NWZ_PMINFO_CLR_DETRSTFLG _IO(NWZ_PMINFO_TYPE, 1)
/* NWZ_PMINFO_GET_FACTOR bitmap
* WARNING this information may not apply to all players and some bits do not
* exists on some players */
#define ICX_PMINFO_FACTOR_RTC_WAL 0x20000000 /* RTC Weekly Alarm */
#define ICX_PMINFO_FACTOR_RTC_DAL 0x10000000 /* RTC Daily Alarm */
#define ICX_PMINFO_FACTOR_VBUS 0x08000000 /* VBUS in/out */
#define ICX_PMINFO_FACTOR_DC_POWER 0x04000000 /* AC Adaptor in/out */
#define ICX_PMINFO_FACTOR_USB_WAKE 0x01000000 /* USB Wake */
#define ICX_PMINFO_FACTOR_CHARGE 0x00400000 /* Charge */
#define ICX_PMINFO_FACTOR_CRADLE 0x00080000 /* Cradle in/out */
#define ICX_PMINFO_FACTOR_AB_EV 0x00008000 /* ab event */
#define ICX_PMINFO_FACTOR_NC_SW 0x00004000 /* nc switch */
#define ICX_PMINFO_FACTOR_HOLD_SW 0x00002000 /* hold switch */
#define ICX_PMINFO_FACTOR_KEY_PAD 0x00001000 /* keypad */
#define ICX_PMINFO_FACTOR_KEY_CODE 0x00000FFF /* keycode */
void power_init(void);
/* get power status (return -1 on error, bitmap on success) */
int nwz_power_get_status(void);
/* get vbus adval (or -1 on error) */
int nwz_power_get_vbus_adval(void);
/* get vbus voltage in mV (or -1 on error) */
int nwz_power_get_vbus_voltage(void);
/* get vbus current limit (or -1 on error) */
int nwz_power_get_vbus_limit(void);
/* get charge switch (or -1 on error) */
int nwz_power_get_charge_switch(void);
/* get charge current (or -1 on error) */
int nwz_power_get_charge_current(void);
/* get battery gauge (or -1 on error) */
int nwz_power_get_battery_gauge(void);
/* get battery adval (or -1 on error) */
int nwz_power_get_battery_adval(void);
/* get battery voltage in mV (or -1 on error) */
int nwz_power_get_battery_voltage(void);
/* get vbat adval (or -1 on error) */
int nwz_power_get_vbat_adval(void);
/* get vbat voltage (or -1 on error) */
int nwz_power_get_vbat_voltage(void);
/* get sample count (or -1 on error) */
int nwz_power_get_sample_count(void);
/* get vsys adval (or -1 on error) */
int nwz_power_get_vsys_adval(void);
/* get vsys voltage in mV (or -1 on error) */
int nwz_power_get_vsys_voltage(void);
/* get accessory charge mode */
int nwz_power_get_acc_charge_mode(void);
/* is battery fully charged? (or -1 on error) */
int nwz_power_is_fully_charged(void);
/* change power state (-1 on error, 0 otherwise)*/
int nwz_power_suspend(void);
int nwz_power_shutdown(void);
int nwz_power_restart(void);
#endif /* __POWER_NWZ_H__ */
|