blob: d132b01aee5bf74c2ef3b43e9bc4ae312fc61a60 [file] [log] [blame]
b.liu68a94c92025-05-24 12:53:41 +08001#include <stdio.h>
2#include <stdlib.h>
3#include <unistd.h>
4#include <fcntl.h>
5#include <errno.h>
6#include <stdint.h>
7#include <string.h>
8#include <dlfcn.h>
9
hong.liucd370792025-05-28 06:29:19 -070010#include "gsw_hwpin_interface.h"
hong.liud2417072025-06-27 07:10:37 -070011#include "gsw_hal_errcode.h"
b.liu68a94c92025-05-24 12:53:41 +080012
13#ifndef LOG_ERR_LEVEL
14#define LOG_ERR_LEVEL 3 /* error conditions */
15#endif
16#ifndef LOG_WARN_LEVEL
17#define LOG_WARN_LEVEL 4 /* warning conditions */
18#endif
19#ifndef LOG_INFO_LEVEL
20#define LOG_INFO_LEVEL 6 /* informational */
21#endif
22#ifndef LOG_DEBUG_LEVEL
23#define LOG_DEBUG_LEVEL 7 /* debug-level messages */
24#endif
25#ifndef LOG_VERBOSE_LEVEL
26#define LOG_VERBOSE_LEVEL 8
27#endif
28
l.yang6a42e4d2025-05-28 01:04:20 -070029#define GSW_GPIO "[HAL][GSW_GPIO]"
30
b.liu68a94c92025-05-24 12:53:41 +080031#define LOGV(fmt, args ...) \
32 do{ \
33 char *file_ptr_1001 = __FILE__; \
34 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
35 char line_1001[10] = {0}; \
36 sprintf(line_1001, "%d", __LINE__); \
37 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
38 if(*ptr_1001 == '/') \
39 break; \
40 ptr_1001--; \
41 } \
l.yang6a42e4d2025-05-28 01:04:20 -070042 fun_ptr_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_GPIO"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080043 } while(0)
44
45#define LOGI(fmt, args...) \
46 do{ \
47 char *file_ptr_1001 = __FILE__; \
48 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
49 char line_1001[10] = {0}; \
50 sprintf(line_1001, "%d", __LINE__); \
51 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
52 if(*ptr_1001 == '/') \
53 break; \
54 ptr_1001--; \
55 } \
l.yang6a42e4d2025-05-28 01:04:20 -070056 fun_ptr_log(LOG_INFO_LEVEL, "%s#%s: "GSW_GPIO"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080057 } while(0)
58
59#define LOGD(fmt, args...) \
60 do{ \
61 char *file_ptr_1001 = __FILE__; \
62 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
63 char line_1001[10] = {0}; \
64 sprintf(line_1001, "%d", __LINE__); \
65 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
66 if(*ptr_1001 == '/') \
67 break; \
68 ptr_1001--; \
69 } \
l.yang6a42e4d2025-05-28 01:04:20 -070070 fun_ptr_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_GPIO"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080071 } while(0)
72
73#define LOGW(fmt, args...) \
74 do{ \
75 char *file_ptr_1001 = __FILE__; \
76 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
77 char line_1001[10] = {0}; \
78 sprintf(line_1001, "%d", __LINE__); \
79 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
80 if(*ptr_1001 == '/') \
81 break; \
82 ptr_1001--; \
83 } \
l.yang6a42e4d2025-05-28 01:04:20 -070084 fun_ptr_log(LOG_WARN_LEVEL, "%s#%s: "GSW_GPIO"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080085 } while(0)
86
87#define LOGE(fmt, args...) \
88 do{ \
89 char *file_ptr_1001 = __FILE__; \
90 char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
91 char line_1001[10] = {0}; \
92 sprintf(line_1001, "%d", __LINE__); \
93 while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
94 if(*ptr_1001 == '/') \
95 break; \
96 ptr_1001--; \
97 } \
l.yang6a42e4d2025-05-28 01:04:20 -070098 fun_ptr_log(LOG_ERR_LEVEL, "%s#%s: "GSW_GPIO"" fmt, ptr_1001 + 1, line_1001, ##args); \
b.liu68a94c92025-05-24 12:53:41 +080099 } while(0)
b.liu68a94c92025-05-24 12:53:41 +0800100
b.liu68a94c92025-05-24 12:53:41 +0800101#define wakeout 117
102
hong.liucd370792025-05-28 06:29:19 -0700103typedef enum{
104 GSW_HAL_PINDIR_IN,
105 GSW_HAL_PINDIR_OUT,
106}gsw_hal_pinDirection;
107
108typedef enum{
109 GSW_HAL_LEVEL_LOW,
110 GSW_HAL_LEVEL_HIGH,
111}gsw_hal_pinLevel;
112
113typedef enum{
114 GSW_HAL_PULL_NULL,
115 GSW_HAL_PULL_DOWN,
116 GSW_HAL_PULL_UP,
117}gsw_hal_pinPullSel;
118
119typedef enum{
120 GSW_HAL_USB_DISCONNECTED,
121 GSW_HAL_USB_CONNECTED,
122}gsw_hal_usbStatus;
b.liu68a94c92025-05-24 12:53:41 +0800123typedef void (*mbtk_log)(int level, const char *format,...);
124static mbtk_log fun_ptr_log = NULL;
125void *dlHandle_gpio = NULL;
126char *lynqLib_gpio = "/lib/libmbtk_lib.so";
127
128int gpio_check(int gpio)
129{
130 char buffer[128];
131 memset(buffer,0,128);
132 sprintf(buffer,"/sys/class/gpio/gpio%d/direction", gpio);
133 return access(buffer , F_OK);
134}
135
136static int handle()
137{
138 if(dlHandle_gpio == NULL || fun_ptr_log == NULL)
139 {
140 dlHandle_gpio = dlopen(lynqLib_gpio, RTLD_NOW);
141 fun_ptr_log = (mbtk_log)dlsym(dlHandle_gpio, "mbtk_log");
142 if(fun_ptr_log == NULL || dlHandle_gpio == NULL)
143 {
hong.liucd370792025-05-28 06:29:19 -0700144 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800145 }
146 }
147 return GSW_HAL_SUCCESS;
148}
149
150static int gpio_export(int gpio)
151{
152 int file=-1;
153 int result =-1;
154 char pin_index_buffer[5]= {0};
155
156 if (gpio_check(gpio) == 0)
157 {
158 LOGE("export has been add\n");
159 return 0;
160 }
161
162 file = open("/sys/class/gpio/export",O_WRONLY);
163 if(file == -1)
164 {
165 LOGE("Open gpio export file fail.");
166 return -1;
167 }
168
b.liu68a94c92025-05-24 12:53:41 +0800169 sprintf(pin_index_buffer,"%d", gpio);
170 result = write(file,pin_index_buffer,strlen(pin_index_buffer));
171 if(result < 0)
172 {
173 LOGE("Gpio[%d] export fail.", gpio);
174 close(file);
175 return -1;
176 }
177 close(file);
178
179 return 0;
180}
181
182static int gpio_unexport(int gpio)
183{
184 int file=-1;
185 int result =-1;
186 char pin_index_buffer[5]= {0};
187 if (gpio_check(gpio) == -1)
188 {
189 LOGE("export has been not add\n");
190 return -1;
191 }
192
193 file = open("/sys/class/gpio/unexport",O_WRONLY);
194 if(file == -1)
195 {
196 LOGE("Open gpio unexport file fail.");
197 return -1;
198 }
199
b.liu68a94c92025-05-24 12:53:41 +0800200 sprintf(pin_index_buffer,"%d", gpio);
201 result=write(file,pin_index_buffer,strlen(pin_index_buffer));
202 if(result < 0)
203 {
204 close(file);
205 LOGE("Gpio[%d] unexport fail.", gpio);
206 return -1;
207 }
208 close(file);
209
210 return 0;
211}
212
213int32_t gsw_gpio_SetDirection(uint32_t gpioNum, gsw_hal_pinDirection dir)
214{
215 char buffer[128]= {0};
216 int file =-1;
217 int result =-1;
218 char direction[10] = {0};
219 memset(buffer,0,128);
220 if (handle())
hong.liucd370792025-05-28 06:29:19 -0700221 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800222
223 if (gpio_check(gpioNum) == -1)
224 {
225 LOGD("in dir export has been not add\n");
226 gpio_export(gpioNum);
227 }
228
229
230 sprintf(buffer,"/sys/class/gpio/gpio%u/direction", gpioNum);
231 file = open(buffer, O_WRONLY);
232 if(file == -1)
233 {
234 LOGE("Open gpio[%d] direct fail.", gpioNum);
235 return -1;
236 }
237 if (dir == GSW_HAL_PINDIR_IN)
238 sprintf(direction,"in");
239 else if (dir == GSW_HAL_PINDIR_OUT)
240 sprintf(direction,"out");
241
242 result = write(file,direction,strlen(direction));
243 if(result != strlen(direction))
244 {
245 LOGE("Set gpio[%d] direct fail.", gpioNum);
246 close(file);
247 gpio_unexport(gpioNum);
hong.liucd370792025-05-28 06:29:19 -0700248 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800249 }
250 close(file);
251 gpio_unexport(gpioNum);
252 return GSW_HAL_SUCCESS;
253}
254
255gsw_hal_pinLevel gsw_gpio_GetLevel(uint32_t gpioNum)
256{
257 char buffer[50];
258 char path[128];
259 int file =-1;
260 int result =-1;
hong.liud2417072025-06-27 07:10:37 -0700261 memset(path,0,sizeof(path));
262 memset(buffer,0,sizeof(buffer));
b.liu68a94c92025-05-24 12:53:41 +0800263 if (handle())
hong.liucd370792025-05-28 06:29:19 -0700264 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800265
266 if (gpio_check(gpioNum) == -1)
267 {
268 LOGD("in get value export has been not add\n");
269 gpio_export(gpioNum);
270 }
271 sprintf(path,"/sys/class/gpio/gpio%u/value", gpioNum);
272 file = open(path,O_RDONLY);
273 if(file == -1)
274 {
275 LOGE("Open gpio[%d] fail.", gpioNum);
276 return -1;
277 }
278 result = read(file,buffer,50);
279 if(result <= 0)
280 {
281 LOGE("Get gpio[%d] value fail", gpioNum);
282 close(file);
283 gpio_unexport(gpioNum);
hong.liucd370792025-05-28 06:29:19 -0700284 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800285 }
286 close(file);
287 gpio_unexport(gpioNum);
288 return atoi(buffer);
289}
290
291int32_t gsw_gpio_SetLevel(uint32_t gpioNum, gsw_hal_pinLevel level)
292{
293 char buffer[128]= {0};
294 int file =-1;
295 int result =-1;
296 memset(buffer,0,50);
297 if (handle())
hong.liucd370792025-05-28 06:29:19 -0700298 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800299
300 if (gpio_check(gpioNum) == -1)
301 {
302 LOGD("in set value export has been not add\n");
303 gpio_export(gpioNum);
304 }
305
306 sprintf(buffer,"/sys/class/gpio/gpio%u/value", gpioNum);
307 file = open(buffer,O_WRONLY);
308 if(file == -1)
309 {
310 LOGE("Open gpio[%d] value fail.", gpioNum);
311 return -1;
312 }
313 if(level == GSW_HAL_LEVEL_LOW) {
314 result = write(file,"0",1);
315 } else {
316 result = write(file,"1",1);
317 }
318 if(result != 1)
319 {
320 LOGE("Set gpio[%d] value fail err =%d.", gpioNum, errno);
321 close(file);
322 gpio_unexport(gpioNum);
hong.liucd370792025-05-28 06:29:19 -0700323 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800324 }
325 close(file);
326 gpio_unexport(gpioNum);
327 return GSW_HAL_SUCCESS;
328}
329
330
331int32_t gsw_gpio_Init(uint32_t gpioNum, gsw_hal_pinDirection dir, gsw_hal_pinLevel level, gsw_hal_pinPullSel pullsel)
332{
333 if (handle())
hong.liucd370792025-05-28 06:29:19 -0700334 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800335
336 if (dir != 1 && dir != 0)
337 {
338 LOGE("[lynq_gpio_init] direction fail.");
339 return -1;
340 }
341
342 if (level != 1 && level != 0)
343 {
344 LOGE("[lynq_gpio_init] value fail.");
hong.liucd370792025-05-28 06:29:19 -0700345 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800346 }
347
348 if(gpio_export(gpioNum))
349 {
350 LOGE("[lynq_gpio_init]gpio_export fail.");
hong.liucd370792025-05-28 06:29:19 -0700351 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800352 }
353
354 if(gsw_gpio_SetDirection(gpioNum, dir))
355 {
356 LOGE("[lynq_gpio_init]gpio_direct_set fail.");
hong.liucd370792025-05-28 06:29:19 -0700357 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800358 }
359
360 if(dir == 1 && (gsw_gpio_SetLevel(gpioNum, level) != 0))
361 {
362 LOGE("[lynq_gpio_init]gpio_value_set fail.");
hong.liucd370792025-05-28 06:29:19 -0700363 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800364 }
365 return GSW_HAL_SUCCESS;
366}
hong.liucd370792025-05-28 06:29:19 -0700367int gsw_hwpin_is_usb_connected(void)
b.liu68a94c92025-05-24 12:53:41 +0800368{
369 FILE *fp;
370 char cmd[128] = {0};
371 char tmp_rsp[20] = {0};
372 //char *CONNECTED = "configured";
373 char *DISCONNECTED = "not attached";
374 if (handle())
hong.liucd370792025-05-28 06:29:19 -0700375 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800376
377 sprintf(cmd,"cat /sys/devices/platform/soc/d4200000.axi/c0000000.usb/udc/c0000000.usb/state");
378 fp=popen(cmd, "r");
379 if (fgets(tmp_rsp,sizeof(tmp_rsp),fp) == NULL)
380 LOGE("gsw_hwpin_is_usb_connected fail.");
381 pclose(fp);
382 if (strncmp(tmp_rsp,DISCONNECTED,strlen(DISCONNECTED)) == 0)
383 return GSW_HAL_USB_DISCONNECTED;
384 else
385 return GSW_HAL_USB_CONNECTED;
386}
387
388int32_t gsw_setWakeupLevel(gsw_hal_pinLevel level)
389{
hong.liucd370792025-05-28 06:29:19 -0700390 if (gsw_gpio_SetLevel(wakeout, level) == GSW_HAL_NORMAL_FAIL)
b.liu68a94c92025-05-24 12:53:41 +0800391 {
hong.liucd370792025-05-28 06:29:19 -0700392 return GSW_HAL_NORMAL_FAIL;
b.liu68a94c92025-05-24 12:53:41 +0800393 }
394 return GSW_HAL_SUCCESS;
395}
hong.liud2417072025-06-27 07:10:37 -0700396
397#define SYS_LED_DEV_TRIGGER_NODE "/sys/class/leds/red/trigger"
398#define SYS_LED_DEV_BRIGHTNES_NODE "/sys/class/leds/red/brightness"
399#define SYS_LED_DEV_DELAY_OFF_NODE "/sys/class/leds/red/delay_off"
400#define SYS_LED_DEV_DELAY_ON_NODE "/sys/class/leds/red/delay_on"
401#define EMMC_HEALTH_FILE "/sys/kernel/debug/mmc0/mmc0:0001/health"
402#define MDM_RESET_MCU 19
403#define MDM_BOOT_MCU_CTRL 31
404#define MDM_PWRMDM_EN 116
405#define MDM_WAKEUP_MCU 117
406
407int gsw_hwpin_mcu_reset(void)
408{
409 if (0 != gsw_gpio_Init(MDM_RESET_MCU, GSW_HAL_PINDIR_OUT, GSW_HAL_LEVEL_LOW, GSW_HAL_PULL_DOWN))
410 {
411 LOGE("init GPIO %d fail!", MDM_RESET_MCU);
412 return GSW_HAL_NORMAL_FAIL;
413 }
414
415 usleep(1000);
416 if (0 != gsw_gpio_SetLevel(MDM_RESET_MCU, GSW_HAL_LEVEL_HIGH))
417 {
418 LOGE("set GPIO %d : %d fail!", MDM_RESET_MCU, GSW_HAL_LEVEL_HIGH);
419 return GSW_HAL_NORMAL_FAIL;
420 }
421
422 usleep(100000);
423 if (0 != gsw_gpio_SetLevel(MDM_RESET_MCU, GSW_HAL_LEVEL_LOW))
424 {
425 LOGE("set GPIO %d : %d fail!", MDM_RESET_MCU, GSW_HAL_LEVEL_LOW);
426 return GSW_HAL_NORMAL_FAIL;
427 }
428
429 usleep(100000);
430 return GSW_HAL_SUCCESS;
431}
432
433int gsw_hwpin_mcu_enter_bootmode(void)
434{
435 if (0 != gsw_gpio_Init(MDM_BOOT_MCU_CTRL, GSW_HAL_PINDIR_OUT, GSW_HAL_LEVEL_LOW, GSW_HAL_PULL_DOWN))
436 {
437 LOGE("init GPIO %d fail!", MDM_BOOT_MCU_CTRL);
438 return GSW_HAL_NORMAL_FAIL;
439 }
440
441 usleep(1000);
442 if (0 != gsw_gpio_SetLevel(MDM_BOOT_MCU_CTRL, GSW_HAL_LEVEL_HIGH))
443 {
444 LOGE("set GPIO %d : %d fail!", MDM_BOOT_MCU_CTRL, GSW_HAL_LEVEL_HIGH);
445 return GSW_HAL_NORMAL_FAIL;
446 }
447
448 usleep(100000);
449 return gsw_hwpin_mcu_reset();
450}
451
452int gsw_hwpin_mcu_exit_bootmode(void)
453{
454 if (0 != gsw_gpio_Init(MDM_BOOT_MCU_CTRL, GSW_HAL_PINDIR_OUT, GSW_HAL_LEVEL_LOW, GSW_HAL_PULL_DOWN))
455 {
456 LOGE("init GPIO %d fail!", MDM_BOOT_MCU_CTRL);
457 return GSW_HAL_NORMAL_FAIL;
458 }
459
460 usleep(1000);
461 if (0 != gsw_gpio_SetLevel(MDM_BOOT_MCU_CTRL, GSW_HAL_LEVEL_LOW))
462 {
463 LOGE("set GPIO %d : %d fail!", MDM_BOOT_MCU_CTRL, GSW_HAL_LEVEL_LOW);
464 return GSW_HAL_NORMAL_FAIL;
465 }
466
467 usleep(100000);
468 return gsw_hwpin_mcu_reset();
469}
470
471int gsw_hwpin_soc_power_keep(void)
472{
473 return 0;
474}
475
476int gsw_hwpin_soc_power_release(void)
477{
478 return 0;
479}
480
481static int _gsw_hwpin_soc_power_down(void)
482{
483 if (0 != gsw_gpio_Init(MDM_PWRMDM_EN, GSW_HAL_PINDIR_OUT, GSW_HAL_LEVEL_LOW, GSW_HAL_PULL_DOWN))
484 {
485 LOGE("init GPIO %d fail!", MDM_BOOT_MCU_CTRL);
486 return GSW_HAL_NORMAL_FAIL;
487 }
488
489 usleep(1000);
490 if (0 != gsw_gpio_SetLevel(MDM_PWRMDM_EN, GSW_HAL_LEVEL_HIGH))
491 {
492 LOGE("set GPIO %d : %d fail!", MDM_PWRMDM_EN, GSW_HAL_LEVEL_HIGH);
493 return GSW_HAL_NORMAL_FAIL;
494 }
495
496 return GSW_HAL_SUCCESS;
497}
498
499int gsw_hwpin_tcam_reset(void)
500{
501 if (gsw_hwpin_mcu_reset() < 0)
502 return GSW_HAL_NORMAL_FAIL;
503 usleep(10000);
504 return _gsw_hwpin_soc_power_down();
505}
506
507int gsw_hwpin_soc_wakeup_mcu(void)
508{
509 if (0 != gsw_setWakeupLevel(GSW_HAL_LEVEL_HIGH))
510 {
511 LOGE("wakeup mcu fail!");
512 return GSW_HAL_NORMAL_FAIL;
513 }
514
515 return GSW_HAL_SUCCESS;
516}
517
518int gsw_hwpin_soc_wakeup_mcu_gpio_set_low(void)
519{
520 if (0 != gsw_setWakeupLevel(GSW_HAL_LEVEL_LOW))
521 {
522 LOGE("wakeup mcu set low fail!");
523 return GSW_HAL_NORMAL_FAIL;
524 }
525
526 return GSW_HAL_SUCCESS;
527}
528
529static int _file_read(const char *file, char *value, unsigned int len)
530{
531 int fd = 0;
532 int ret = 0;
533 fd = open(file, O_RDONLY);
534 if(fd <= 0) {
535 LOGE("[hwpin] open file error %d,%s", fd, file);
536 return GSW_HAL_ERROR_FILE_OPEN;
537 }
538 if(value && len > 0) {
539 ret = read(fd, value, len);
540 }
541 close(fd);
542 if(ret < 0) {
543 LOGE("[hwpin] read file error %d,%s",ret, file);
544 }
545 return ret;
546}
547
548static int _file_write(const char *file, char *value)
549{
550 int fd = 0;
551 int ret = 0;
552 fd = open(file, O_WRONLY);
553 if(fd <= 0) {
554 LOGE("[hwpin] open file error %d,%s", fd, file);
555 return GSW_HAL_ERROR_FILE_OPEN;
556 }
557 if(value) {
558 ret = write(fd, value, strlen(value));
559 }
560 close(fd);
561 if(ret < 0) {
562 LOGE("[hwpin] write file error %d,%s",ret, file);
563 }
564 return ret;
565}
566
567int gsw_hwpin_led_red_on(void)
568{
569 return GSW_HAL_SUCCESS;
570}
571
572int gsw_hwpin_led_red_off(void)
573{
574 return GSW_HAL_SUCCESS;
575}
576
577int gsw_hwpin_led_red_blink(int delay_on, int delay_off)
578{
579 return GSW_HAL_SUCCESS;
580}
581
582static bool g_aging_flag = false;
583int gsw_hwpin_led_green_on(void)
584{
585 if (true == g_aging_flag)
586 {
587 LOGI("green on LED file fail g_aging_flag = %d", g_aging_flag);
588 return GSW_HAL_SUCCESS;
589 }
590
591 if (access(SYS_LED_DEV_TRIGGER_NODE, W_OK) != 0)
592 {
593 LOGE("green_on LED file fail %s", SYS_LED_DEV_TRIGGER_NODE);
594 return GSW_HAL_NORMAL_FAIL;
595 }
596
597 if (_file_write(SYS_LED_DEV_TRIGGER_NODE, "none") <= 0)
598 {
599 LOGE("green_on LED write fail %s", SYS_LED_DEV_TRIGGER_NODE);
600 return GSW_HAL_NORMAL_FAIL;
601 }
602
603 if (access(SYS_LED_DEV_BRIGHTNES_NODE, W_OK) != 0)
604 {
605 LOGE("green_on LED file fail %s", SYS_LED_DEV_BRIGHTNES_NODE);
606 return GSW_HAL_NORMAL_FAIL;
607 }
608
609 if (_file_write(SYS_LED_DEV_BRIGHTNES_NODE, "1") <= 0)
610 {
611 LOGE("green_on LED write fail %s", SYS_LED_DEV_BRIGHTNES_NODE);
612 return GSW_HAL_NORMAL_FAIL;
613 }
614 return GSW_HAL_SUCCESS;
615}
616
617int gsw_hwpin_led_green_off(void)
618{
619 if (true == g_aging_flag)
620 {
621 LOGI("green off LED file fail g_aging_flag = %d", g_aging_flag);
622 return GSW_HAL_SUCCESS;
623 }
624
625 if (access(SYS_LED_DEV_TRIGGER_NODE, W_OK) != 0)
626 {
627 LOGE("green_on LED file fail %s", SYS_LED_DEV_TRIGGER_NODE);
628 return GSW_HAL_NORMAL_FAIL;
629 }
630
631 if (_file_write(SYS_LED_DEV_TRIGGER_NODE, "none") <= 0)
632 {
633 LOGE("green_on LED write fail %s", SYS_LED_DEV_TRIGGER_NODE);
634 return GSW_HAL_NORMAL_FAIL;
635 }
636
637 if (access(SYS_LED_DEV_BRIGHTNES_NODE, W_OK) != 0)
638 {
639 LOGE("green_on LED file fail %s", SYS_LED_DEV_BRIGHTNES_NODE);
640 return GSW_HAL_NORMAL_FAIL;
641 }
642
643 if (_file_write(SYS_LED_DEV_BRIGHTNES_NODE, "0") <= 0)
644 {
645 LOGE("green_on LED write fail %s", SYS_LED_DEV_BRIGHTNES_NODE);
646 return GSW_HAL_NORMAL_FAIL;
647 }
648
649 return GSW_HAL_SUCCESS;
650}
651
652int gsw_hwpin_led_green_blink(int delay_on, int delay_off)
653{
654 char buf[32] = {0};
655
656 if (true == g_aging_flag)
657 {
658 LOGI("green blink LED file fail g_aging_flag = %d", g_aging_flag);
659 return GSW_HAL_SUCCESS;
660 }
661
662 if (access(SYS_LED_DEV_TRIGGER_NODE, W_OK) != 0)
663 {
664 LOGE("green_on LED file fail %s", SYS_LED_DEV_TRIGGER_NODE);
665 return GSW_HAL_NORMAL_FAIL;
666 }
667
668 if (_file_write(SYS_LED_DEV_TRIGGER_NODE, "timer") <= 0)
669 {
670 LOGE("green_on LED write fail %s", SYS_LED_DEV_TRIGGER_NODE);
671 return GSW_HAL_NORMAL_FAIL;
672 }
673
674 if (access(SYS_LED_DEV_DELAY_OFF_NODE, W_OK) != 0)
675 {
676 LOGE("green_on LED file fail %s", SYS_LED_DEV_DELAY_OFF_NODE);
677 return GSW_HAL_NORMAL_FAIL;
678 }
679
680 sprintf(buf, "%d", delay_off);
681 if (_file_write(SYS_LED_DEV_DELAY_OFF_NODE, buf) <= 0)
682 {
683 LOGE("green_on LED write fail %s", SYS_LED_DEV_DELAY_OFF_NODE);
684 return GSW_HAL_NORMAL_FAIL;
685 }
686
687 if (access(SYS_LED_DEV_DELAY_ON_NODE, W_OK) != 0)
688 {
689 LOGE("green_on LED file fail %s", SYS_LED_DEV_DELAY_ON_NODE);
690 return GSW_HAL_NORMAL_FAIL;
691 }
692
693 sprintf(buf, "%d", delay_on);
694 if (_file_write(SYS_LED_DEV_DELAY_ON_NODE, buf) <= 0)
695 {
696 LOGE("green_on LED write fail %s", SYS_LED_DEV_DELAY_ON_NODE);
697 return GSW_HAL_NORMAL_FAIL;
698 }
699
700 return GSW_HAL_SUCCESS;
701}
702
703int gsw_hwpin_get_emmc_health(int *written_mbytes, int *health)
704{
705 char buffer[32] = {0};
706 char *p = buffer;
707 char *written_str = buffer;
708 char *health_str = NULL;
709
710 if (!written_mbytes && !health)
711 return GSW_HAL_NORMAL_FAIL;
712
713 if (_file_read(EMMC_HEALTH_FILE, buffer, sizeof(buffer)) <= 0)
714 return -1;
715
716 /* [0000017500-003], all 17500MB has be writtend, 003 is health value(smaller is better) */
717 while (*p != '\0')
718 {
719 if ('-' == *p)
720 {
721 health_str = p + 1;
722 *p = '\0';
723 break;
724 }
725 p++;
726 }
727
728 if (written_mbytes)
729 sscanf(written_str, "%10d", written_mbytes);
730 if (health)
731 sscanf(health_str, "%10d", health);
732
733 return GSW_HAL_SUCCESS;
734}
735
736bool gsw_hwpin_check_emmc_readonly(void)
737{
738 return false;//defualt return normal
739}
740
741int gsw_hwpin_factorytest_ctrl_led(bool aging_flag, int delay_on, int delay_off)
742{
743 LOGI("[hwpin] factory test ctrl led entry");
744 if (false == g_aging_flag)
745 {
746 if (false == aging_flag)
747 {
748 LOGI("[hwpin] factory test ctrl led aging_flag = %d", aging_flag);
749 return GSW_HAL_SUCCESS;
750 }
751 g_aging_flag = aging_flag;
752 LOGI("g_aging_flag 1 value %d", g_aging_flag);
753 }
754 else if (false == aging_flag)
755 {
756 g_aging_flag = aging_flag;
757 LOGI("g_aging_flag 2 value %d", g_aging_flag);
758 }
759
760 gsw_hwpin_led_green_blink(delay_on, delay_off);
761
762 LOGI("[hwpin] factory test ctrl led exit");
763 return GSW_HAL_SUCCESS;
764}
765
766int gsw_hwpin_mute_test(int value)
767{
768 return GSW_HAL_SUCCESS;
769}
770
771int gsw_hwpin_fstrim_emmc(const char *emmc_path)
772{
773 return GSW_HAL_SUCCESS;
774}