/******************************************************************************* | |
* Copyright (C) 2016, ZIXC Corporation. | |
* | |
* File Name: hal_led.c | |
* File Mark: | |
* Description: This file contains the hal layer routines for i2c driver. | |
* Others: | |
* Version: V1.0 | |
* Author: yx | |
* Date: 2014-07-03 | |
* History 1: | |
* Date: | |
* Version: | |
* Author: | |
* Modification: | |
* History 2: | |
******************************************************************************/ | |
/**************************************************************************** | |
* Include files | |
****************************************************************************/ | |
#include <drvs_gpio.h> | |
#include <led.h> | |
/**************************************************************************** | |
* Local Types | |
****************************************************************************/ | |
/**************************************************************************** | |
* Local Constants | |
****************************************************************************/ | |
SINT32 led_SetStatus(led_channel channel, led_status status) | |
{ | |
SINT32 ret = 0; | |
if (status == LED_STATUS_ON) | |
{ | |
switch (channel) | |
{ | |
case LED_WIFI_BLUE: | |
zDrvGpio_SetOutputValue(LED_WIFI_BLUE_GPIO,GPIO_HIGH); | |
break; | |
case LED_SMS_BLUE: | |
zDrvGpio_SetOutputValue(LED_SMS_BLUE_GPIO,GPIO_HIGH); | |
break; | |
case LED_BAT_RED: | |
zDrvGpio_SetOutputValue(LED_BAT_RED_GPIO,GPIO_HIGH); | |
break; | |
case LED_BAT_GREEN: | |
zDrvGpio_SetOutputValue(LED_BAT_GREEN_GPIO,GPIO_HIGH); | |
break; | |
case LED_MODEM_BLUE: | |
zDrvGpio_SetOutputValue(LED_MODEM_BLUE_GPIO,GPIO_HIGH); | |
break; | |
case LED_MODEM_RED: | |
zDrvGpio_SetOutputValue(LED_MODEM_RED_GPIO,GPIO_HIGH); | |
break; | |
default: | |
break; | |
} | |
} | |
else if (status == LED_STATUS_OFF) | |
{ | |
switch (channel) | |
{ | |
case LED_WIFI_BLUE: | |
zDrvGpio_SetOutputValue(LED_WIFI_BLUE_GPIO,GPIO_LOW); | |
break; | |
case LED_SMS_BLUE: | |
zDrvGpio_SetOutputValue(LED_SMS_BLUE_GPIO,GPIO_LOW); | |
break; | |
case LED_BAT_RED: | |
zDrvGpio_SetOutputValue(LED_BAT_RED_GPIO,GPIO_LOW); | |
break; | |
case LED_BAT_GREEN: | |
zDrvGpio_SetOutputValue(LED_BAT_GREEN_GPIO,GPIO_LOW); | |
break; | |
case LED_MODEM_BLUE: | |
zDrvGpio_SetOutputValue(LED_MODEM_BLUE_GPIO,GPIO_LOW); | |
break; | |
case LED_MODEM_RED: | |
zDrvGpio_SetOutputValue(LED_MODEM_RED_GPIO,GPIO_LOW); | |
break; | |
default: | |
break; | |
} | |
} | |
else | |
{ | |
return -1; | |
} | |
return ret; | |
} | |
#if 0 | |
/******************************************************************************* | |
* Function: led_SetLEDcurrent | |
* Description: | |
* Parameters: | |
* Input: led_color: LED_RED / LED_GREEN / LED_BLUE | |
* brightness: LED_BRIGHTNESS_1 ~ LED_BRIGHTNESS_16 | |
* Output: | |
* Returns: success or fail | |
* Others: blue led can't set brightness, only can set on/off | |
********************************************************************************/ | |
SINT32 led_SetLEDcurrent(UINT8 sink, led_current current) | |
{ | |
SINT32 ret = 0; | |
UINT8 slv_addr=0, reg_addr=0, reg_val=0, mask=0; | |
slv_addr = ZX234290_I2C_SLAVE_ADDR0; | |
reg_addr = ZX234290_REG_ADDR_SYS_CTRL; | |
if (current) | |
{ | |
switch (sink) | |
{ | |
case 1: | |
reg_val = LED_BITFVAL(1, 0); /* 0x07 寄存器 [1:0] */ | |
break; | |
case 2: | |
reg_val = LED_BITFVAL(1, 1); /* 0x07 寄存器 [1:0] */ | |
break; | |
default: | |
break; | |
} | |
} | |
else | |
{ | |
switch (sink) | |
{ | |
case 1: | |
reg_val = LED_BITFVAL(0, 0); | |
break; | |
case 2: | |
reg_val = LED_BITFVAL(0, 1); /* 0x07 寄存器 [1:0] */ | |
break; | |
default: | |
break; | |
} | |
} | |
switch (sink) | |
{ | |
case 1: | |
mask = LED_BITFMASK(1, 0); | |
break; | |
case 2: | |
mask = LED_BITFMASK(1, 1);; /* 0x07 寄存器 [1:0] */ | |
break; | |
default: | |
break; | |
} | |
ret = zx297520_led_SetRegister(reg_addr, reg_val, mask); | |
//zOss_Sleep(500); | |
switch (sink) | |
{ | |
case 1: | |
reg_addr = ZX234290_REG_ADDR_SINK1_CUR_SEL; | |
break; | |
case 2: | |
reg_addr = ZX234290_REG_ADDR_SINK2_CUR_SEL; | |
break; | |
default: | |
break; | |
} | |
reg_val = LED_BITFVAL(current, 0); /* 0x07 寄存器 [1:0] */ | |
mask = LED_BITFMASK(4, 0); | |
ret = zx297520_led_SetRegister(reg_addr, reg_val, mask); | |
if (ret != 0) | |
{ | |
return -1; | |
} | |
return 0; | |
} | |
#endif | |
void zx29_led_init(void) | |
{ | |
zDrvGpio_SetFunc(LED_WIFI_BLUE_GPIO,LED_WIFI_BLUE_GPIO_FUN); | |
zDrvGpio_SetDirection(LED_WIFI_BLUE_GPIO,GPIO_OUT); | |
zDrvGpio_SetOutputValue(LED_WIFI_BLUE_GPIO,GPIO_LOW); | |
zDrvGpio_SetFunc(LED_SMS_BLUE_GPIO,LED_SMS_BLUE_GPIO_FUN); | |
zDrvGpio_SetDirection(LED_SMS_BLUE_GPIO,GPIO_OUT); | |
zDrvGpio_SetOutputValue(LED_SMS_BLUE_GPIO,GPIO_LOW); | |
zDrvGpio_SetFunc(LED_BAT_RED_GPIO,LED_BAT_RED_GPIO_FUN); | |
zDrvGpio_SetDirection(LED_BAT_RED_GPIO,GPIO_OUT); | |
zDrvGpio_SetOutputValue(LED_BAT_RED_GPIO,GPIO_LOW); | |
zDrvGpio_SetFunc(LED_BAT_GREEN_GPIO,LED_BAT_GREEN_GPIO_FUN); | |
zDrvGpio_SetDirection(LED_BAT_GREEN_GPIO,GPIO_OUT); | |
zDrvGpio_SetOutputValue(LED_BAT_GREEN_GPIO,GPIO_LOW); | |
zDrvGpio_SetFunc(LED_MODEM_RED_GPIO,LED_MODEM_RED_GPIO_FUN); | |
zDrvGpio_SetDirection(LED_MODEM_RED_GPIO,GPIO_OUT); | |
zDrvGpio_SetOutputValue(LED_MODEM_RED_GPIO,GPIO_LOW); | |
zDrvGpio_SetFunc(LED_MODEM_BLUE_GPIO,LED_MODEM_BLUE_GPIO_FUN); | |
zDrvGpio_SetDirection(LED_MODEM_BLUE_GPIO,GPIO_OUT); | |
zDrvGpio_SetOutputValue(LED_MODEM_BLUE_GPIO,GPIO_LOW); | |
} | |
void zx29_led_PowerOnLedOn(void) | |
{ | |
#if 1 | |
led_SetStatus(LED_MODEM_RED,LED_STATUS_OFF); | |
led_SetStatus(LED_BAT_GREEN,LED_STATUS_OFF); | |
led_SetStatus(LED_WIFI_BLUE,LED_STATUS_ON); | |
led_SetStatus(LED_SMS_BLUE,LED_STATUS_ON); | |
led_SetStatus(LED_BAT_RED,LED_STATUS_ON); | |
led_SetStatus(LED_MODEM_BLUE,LED_STATUS_ON); | |
#endif | |
} | |
void zx29_led_PowerOnLedOff(void) | |
{ | |
udelay(19500); /*300ms*/ | |
led_SetStatus(LED_WIFI_BLUE,LED_STATUS_OFF); | |
led_SetStatus(LED_SMS_BLUE,LED_STATUS_OFF); | |
led_SetStatus(LED_MODEM_BLUE,LED_STATUS_OFF); | |
} | |