blob: 3889f8e3a3832bf1298e96e20681649994823e16 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/*******************************************************************************
2 * Copyright (C) 2016, ZIXC Corporation.
3 *
4 * File Name: zx234500_charger.c
5 * File Mark:
6 * Description:
7 * Others:
8 * Version: V1.0
9 * Author:
10 * Date: 2013-8-25
11 * History 1:
12 * Date:
13 * Version:
14 * Author:
15 * Modification:
16 * History 2:
17 ********************************************************************************/
18
19/****************************************************************************
20* Include files
21****************************************************************************/
22#include "lcd.h"
23#include "boot_mode.h"
24#include "usb/dwc_otg_driver.h"
25
26#include "charge.h"
27
28
29
30#pragma GCC optimize("O0")
31/****************************************************************************
32* Local Macros
33****************************************************************************/
34//#define ZX234500_TEST
35
36
37//³äµçоƬ¸÷¸öÒý½ÅµÄGPIOºÅ
38#if 0
39#define GPIO_CHARGER_EN 199 //GPIO199
40#define GPIO_CHARGER_INT 11 //EXT_INIT1/GPIO11
41#define GPIO_CHARGER_STA 189 //GPIO189
42#define GPIO_CHARGER_CHGIN 191 //GPIO191
43#define GPIO_CHARGER_CHGTYPE 210 //GPIO190
44#define GPIO_CHARGER_BATTIN 0 //no support on plat_zx7510
45#define GPIO_CHARGER_M0 208 //GPIO208
46#define GPIO_CHARGER_M1 209 //GPIO209
47#define GPIO_CHARGER_INT_irq 49 //irq no
48#endif
49/*
50
51 .EN =55,//GPIO55
52 .INT =11 ,//EXT_INIT1/GPIO11
53 .CHGIN =52 ,//GPIO52
54 .CHGTYPE =53 ,//GPIO53
55 .BATTIN = 0,//no support on plat_zx7510
56 .M0 =49 ,//GPIO49
57 .M1 = 48,//GPIO48
58 .INT_irq = 49,//irq no
59
60*/
61
62/*³õʼ»¯³äµçоƬµÄGPIO*/
63static void charger_gpio_init()
64{
65 gpio_set_reuse(GPIO_CHARGER_EN,0);
66 gpio_direction_output(GPIO_CHARGER_EN,0);
67
68 gpio_set_reuse(GPIO_CHARGER_INT, 1);
69 gpio_direction_input(GPIO_CHARGER_INT);
70
71 gpio_set_reuse(GPIO_CHARGER_CHGIN, 0);
72 gpio_direction_input(GPIO_CHARGER_CHGIN);
73
74 gpio_set_reuse(GPIO_CHARGER_CHGTYPE, 0);
75 gpio_direction_input(GPIO_CHARGER_CHGTYPE);
76
77 //gpio_set_reuse(GPIO_CHARGER_BATTIN, 0);
78 //gpio_direction_input(GPIO_CHARGER_BATTIN);
79
80 gpio_set_reuse(GPIO_CHARGER_STA, 0);
81 gpio_direction_input(GPIO_CHARGER_STA);
82
83 gpio_set_reuse(GPIO_CHARGER_M0, 0);
84 gpio_direction_output(GPIO_CHARGER_M0,1);
85
86 gpio_set_reuse(GPIO_CHARGER_M1, 0);
87 gpio_direction_output(GPIO_CHARGER_M1,1);
88
89 return;
90}
91
92
93//ÉèÖóäµçģʽ
94int32_t set_charger_mod(enum charger_mode mode)
95{
96 return 0;
97}
98
99
100//ÉèÖóäµçµçÁ÷´óС
101int32_t charger_set_usb_current(enum charger_current cur)
102{
103 uint8_t tmp = 0;
104
105 switch(cur)
106 {
107
108 case CHG_CURRENT_500 :// = 1, //normal
109 {
110 gpio_set_value(GPIO_CHARGER_M0,1);
111 gpio_set_value(GPIO_CHARGER_M1,1);
112 break;
113 }
114
115 case CHG_CURRENT_1500://, // zx234500_2000ma
116 {
117 gpio_set_value(GPIO_CHARGER_M0,0);
118 gpio_set_value(GPIO_CHARGER_M1,1);
119 break;
120 }
121
122 case CHG_CURRENT_900://, // 101
123 {
124 gpio_set_value(GPIO_CHARGER_M0,0);
125 gpio_set_value(GPIO_CHARGER_M1,0);
126 break;
127 }
128
129
130 case CHG_CURRENT_800://, // 110
131 case CHG_CURRENT_USB_SUSPEND://, // 011
132 case CHG_CURRENT_100 :// = 0, // 000 IUSB3 IUSB2 IUSB1
133 case CHG_CURRENT_150://, // 100
134 case CHG_CURRENT_HIGH_IMPEDANCE://, // 111
135 case MAX_CURRENT_SET:// /* 12 */
136 default:
137 return -1;
138 }
139 return 0;
140}
141
142
143
144//Åжϵ±Ç°ÊÇ·ñÓÐPC USB »ò ³äµçÆ÷ ÊÇ·ñ²åÈë
145int detect_usb_online(void)
146{
147 uint8_t status;
148
149 status = gpio_get_value(GPIO_CHARGER_CHGIN);
150 return ((status)? 0 : 1); // statusµÍ£¬³äµçÆ÷ÔÚ£¬Ôò·µ»Ø1
151}
152
153
154
155//Åжϵ±Ç°ÊÇ·ñ´¦ÓÚ³äµç¹ý³ÌÖÐ
156int charger_is_sustained(void)
157{
158 uint8_t status;
159
160 status = gpio_get_value(GPIO_CHARGER_STA);
161 return ((status)? 0 : 1); // statusµÍ£¬³äµç½øÐÐÖУ¬Ôò·µ»Ø1
162}
163
164
165
166//¸ù¾Ýµ±Ç°USBÁ¬½ÓÀàÐÍ£¬É趨³äµçµçÁ÷´óС
167void init_charger_current(void)
168{
169 enum plug_in value = DEFAULT;
170
171 //value = tsp_usb_usb_charger();
172
173 if(CHARGER == value){
174 charger_set_usb_current(CHG_CURRENT_1500);
175 }
176 else{
177 charger_set_usb_current(CHG_CURRENT_500);
178 }
179}
180
181
182
183//³õʼ»¯³äµçоƬ£¬²¢É趨³äµçµçÁ÷´óС
184void usb_charger_init(void)
185{
186 //³äµçоƬÏà¹ØGPIO³õʼ»¯
187 charger_gpio_init();
188
189 //ÉèÖÃΪ³äµçģʽΪÕý³£³äµçģʽ
190 set_charger_mod(CHG_MODE_NORMAL);
191
192 //ÉèÖóäµçµçÁ÷
193 init_charger_current();
194#ifdef ZX234500_TEST
195
196
197 {
198 int i=0;
199 i=detect_usb_online();
200 i=charger_is_sustained();
201
202 }
203#endif
204 return;
205}
206
207
208//ÔÝÍ£³äµç
209void usb_charger_suspend(void)
210{
211 //ÉèÖÃΪ³äµçģʽΪÕý³£³äµçģʽ
212 set_charger_mod(CHG_MODE_SUSPENDED);
213}
214