mirror of
https://github.com/Telecominfraproject/OpenNetworkLinux.git
synced 2025-12-25 17:27:01 +00:00
Merge pull request #499 from roylee123/as7326-56x_system_led_fix
[platform] As7326-56x, update system led control on kernel module and onlpdump.
This commit is contained in:
@@ -40,7 +40,7 @@ struct accton_as7326_56x_led_data {
|
||||
struct mutex update_lock;
|
||||
char valid; /* != 0 if registers are valid */
|
||||
unsigned long last_updated; /* In jiffies */
|
||||
u8 reg_val[1]; /* only 1 register*/
|
||||
u8 reg_val[2];
|
||||
};
|
||||
|
||||
static struct accton_as7326_56x_led_data *ledctl = NULL;
|
||||
@@ -48,18 +48,17 @@ static struct accton_as7326_56x_led_data *ledctl = NULL;
|
||||
/* LED related data
|
||||
*/
|
||||
|
||||
/* LED has only red, green and blue.
|
||||
* Amber = red + green.
|
||||
* Purple = red + blue.
|
||||
*/
|
||||
|
||||
#define LED_CNTRLER_I2C_ADDRESS (0x60)
|
||||
|
||||
#define LED_TYPE_DIAG_REG_MASK (0x3)
|
||||
#define LED_MODE_DIAG_GREEN_VALUE (0x02)
|
||||
#define LED_MODE_DIAG_RED_VALUE (0x01)
|
||||
#define LED_MODE_DIAG_AMBER_VALUE (0x00) /*It's yellow actually. Green+Red=Yellow*/
|
||||
#define LED_MODE_DIAG_OFF_VALUE (0x03)
|
||||
|
||||
|
||||
#define LED_TYPE_LOC_REG_MASK (0x80)
|
||||
#define LED_MODE_LOC_ON_VALUE (0)
|
||||
#define LED_MODE_LOC_OFF_VALUE (0x80)
|
||||
#define LED_TYPE_DIAG_REG_MASK (0x3F)
|
||||
#define LED_MODE_DIAG_OFF_VALUE (0x07)
|
||||
#define LED_TYPE_LOC_REG_MASK (0x3F)
|
||||
#define LED_MODE_LOC_OFF_VALUE (0x07)
|
||||
|
||||
enum led_type {
|
||||
LED_TYPE_DIAG,
|
||||
@@ -75,20 +74,23 @@ struct led_reg {
|
||||
};
|
||||
|
||||
static const struct led_reg led_reg_map[] = {
|
||||
{(1<<LED_TYPE_LOC) | (1<<LED_TYPE_DIAG), 0x41},
|
||||
{(1<<LED_TYPE_DIAG), 0x24},
|
||||
{(1<<LED_TYPE_LOC) , 0x25},
|
||||
};
|
||||
|
||||
|
||||
enum led_light_mode {
|
||||
LED_MODE_OFF = 0,
|
||||
LED_MODE_GREEN,
|
||||
LED_MODE_AMBER,
|
||||
LED_MODE_RED,
|
||||
LED_MODE_GREEN,
|
||||
LED_MODE_BLUE,
|
||||
LED_MODE_GREEN_BLINK,
|
||||
LED_MODE_AMBER_BLINK,
|
||||
LED_MODE_AMBER,
|
||||
LED_MODE_PURPLE,
|
||||
LED_MODE_RED_BLINK,
|
||||
LED_MODE_GREEN_BLINK,
|
||||
LED_MODE_BLUE_BLINK,
|
||||
LED_MODE_AMBER_BLINK,
|
||||
LED_MODE_PURPLE_BLINK,
|
||||
LED_MODE_AUTO,
|
||||
LED_MODE_UNKNOWN
|
||||
};
|
||||
@@ -101,12 +103,29 @@ struct led_type_mode {
|
||||
};
|
||||
|
||||
static struct led_type_mode led_type_mode_data[] = {
|
||||
{LED_TYPE_LOC, LED_MODE_OFF, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_OFF_VALUE},
|
||||
{LED_TYPE_LOC, LED_MODE_AMBER, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_ON_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_OFF, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_OFF_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_GREEN, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_GREEN_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_RED, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_RED_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_AMBER, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_AMBER_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_OFF, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_OFF_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_RED, LED_TYPE_DIAG_REG_MASK, 0x06},
|
||||
{LED_TYPE_DIAG, LED_MODE_GREEN, LED_TYPE_DIAG_REG_MASK, 0x05},
|
||||
{LED_TYPE_DIAG, LED_MODE_BLUE, LED_TYPE_DIAG_REG_MASK, 0x03},
|
||||
{LED_TYPE_DIAG, LED_MODE_AMBER, LED_TYPE_DIAG_REG_MASK, 0x04},
|
||||
{LED_TYPE_DIAG, LED_MODE_PURPLE, LED_TYPE_DIAG_REG_MASK, 0x02},
|
||||
{LED_TYPE_DIAG, LED_MODE_RED_BLINK, LED_TYPE_DIAG_REG_MASK, 0x0f},
|
||||
{LED_TYPE_DIAG, LED_MODE_GREEN_BLINK, LED_TYPE_DIAG_REG_MASK, 0x17},
|
||||
{LED_TYPE_DIAG, LED_MODE_BLUE_BLINK, LED_TYPE_DIAG_REG_MASK, 0x27},
|
||||
{LED_TYPE_DIAG, LED_MODE_AMBER_BLINK, LED_TYPE_DIAG_REG_MASK, 0x1f},
|
||||
{LED_TYPE_DIAG, LED_MODE_PURPLE_BLINK, LED_TYPE_DIAG_REG_MASK, 0x2f},
|
||||
|
||||
{LED_TYPE_LOC, LED_MODE_OFF, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_OFF_VALUE},
|
||||
{LED_TYPE_LOC, LED_MODE_RED, LED_TYPE_LOC_REG_MASK, 0x06},
|
||||
{LED_TYPE_LOC, LED_MODE_GREEN, LED_TYPE_LOC_REG_MASK, 0x05},
|
||||
{LED_TYPE_LOC, LED_MODE_BLUE, LED_TYPE_LOC_REG_MASK, 0x03},
|
||||
{LED_TYPE_LOC, LED_MODE_AMBER, LED_TYPE_LOC_REG_MASK, 0x04},
|
||||
{LED_TYPE_LOC, LED_MODE_PURPLE, LED_TYPE_LOC_REG_MASK, 0x02},
|
||||
{LED_TYPE_LOC, LED_MODE_RED_BLINK, LED_TYPE_LOC_REG_MASK, 0x0f},
|
||||
{LED_TYPE_LOC, LED_MODE_GREEN_BLINK, LED_TYPE_LOC_REG_MASK, 0x17},
|
||||
{LED_TYPE_LOC, LED_MODE_BLUE_BLINK, LED_TYPE_LOC_REG_MASK, 0x27},
|
||||
{LED_TYPE_LOC, LED_MODE_AMBER_BLINK, LED_TYPE_LOC_REG_MASK, 0x1f},
|
||||
{LED_TYPE_LOC, LED_MODE_PURPLE_BLINK, LED_TYPE_LOC_REG_MASK, 0x2f},
|
||||
};
|
||||
|
||||
|
||||
@@ -122,7 +141,7 @@ static int accton_getLedReg(enum led_type type, u8 *reg)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(led_reg_map); i++) {
|
||||
if(led_reg_map[i].types & (type<<1)) {
|
||||
if(led_reg_map[i].types & (1 << type)) {
|
||||
*reg = led_reg_map[i].reg_addr;
|
||||
return 0;
|
||||
}
|
||||
@@ -218,6 +237,7 @@ static void accton_as7326_56x_led_set(struct led_classdev *led_cdev,
|
||||
{
|
||||
int reg_val;
|
||||
u8 reg ;
|
||||
|
||||
mutex_lock(&ledctl->update_lock);
|
||||
|
||||
if( !accton_getLedReg(type, ®))
|
||||
@@ -283,7 +303,7 @@ static struct led_classdev accton_as7326_56x_leds[] = {
|
||||
.brightness_set = accton_as7326_56x_led_diag_set,
|
||||
.brightness_get = accton_as7326_56x_led_diag_get,
|
||||
.flags = LED_CORE_SUSPENDRESUME,
|
||||
.max_brightness = LED_MODE_RED,
|
||||
.max_brightness = LED_MODE_PURPLE_BLINK,
|
||||
},
|
||||
[LED_TYPE_LOC] = {
|
||||
.name = "accton_as7326_56x_led::loc",
|
||||
@@ -291,7 +311,7 @@ static struct led_classdev accton_as7326_56x_leds[] = {
|
||||
.brightness_set = accton_as7326_56x_led_loc_set,
|
||||
.brightness_get = accton_as7326_56x_led_loc_get,
|
||||
.flags = LED_CORE_SUSPENDRESUME,
|
||||
.max_brightness = LED_MODE_BLUE,
|
||||
.max_brightness = LED_MODE_PURPLE_BLINK,
|
||||
},
|
||||
[LED_TYPE_FAN] = {
|
||||
.name = "accton_as7326_56x_led::fan",
|
||||
|
||||
@@ -53,19 +53,21 @@ enum onlp_led_id
|
||||
LED_PSU1,
|
||||
LED_PSU2
|
||||
};
|
||||
|
||||
|
||||
enum led_light_mode {
|
||||
LED_MODE_OFF = 0,
|
||||
LED_MODE_GREEN,
|
||||
LED_MODE_AMBER,
|
||||
LED_MODE_RED,
|
||||
LED_MODE_BLUE,
|
||||
LED_MODE_GREEN_BLINK,
|
||||
LED_MODE_AMBER_BLINK,
|
||||
LED_MODE_RED_BLINK,
|
||||
LED_MODE_BLUE_BLINK,
|
||||
LED_MODE_AUTO,
|
||||
LED_MODE_UNKNOWN
|
||||
LED_MODE_OFF = 0,
|
||||
LED_MODE_RED,
|
||||
LED_MODE_GREEN,
|
||||
LED_MODE_BLUE,
|
||||
LED_MODE_AMBER,
|
||||
LED_MODE_PURPLE,
|
||||
LED_MODE_RED_BLINK,
|
||||
LED_MODE_GREEN_BLINK,
|
||||
LED_MODE_BLUE_BLINK,
|
||||
LED_MODE_AMBER_BLINK,
|
||||
LED_MODE_PURPLE_BLINK,
|
||||
LED_MODE_AUTO,
|
||||
LED_MODE_UNKNOWN
|
||||
};
|
||||
|
||||
typedef struct led_light_mode_map {
|
||||
@@ -75,12 +77,28 @@ typedef struct led_light_mode_map {
|
||||
} led_light_mode_map_t;
|
||||
|
||||
led_light_mode_map_t led_map[] = {
|
||||
{LED_DIAG, LED_MODE_OFF, ONLP_LED_MODE_OFF},
|
||||
{LED_DIAG, LED_MODE_GREEN, ONLP_LED_MODE_GREEN},
|
||||
{LED_DIAG, LED_MODE_AMBER, ONLP_LED_MODE_ORANGE},
|
||||
{LED_DIAG, LED_MODE_RED, ONLP_LED_MODE_RED},
|
||||
{LED_LOC, LED_MODE_OFF, ONLP_LED_MODE_OFF},
|
||||
{LED_LOC, LED_MODE_BLUE, ONLP_LED_MODE_BLUE},
|
||||
{LED_DIAG, LED_MODE_OFF, ONLP_LED_MODE_OFF},
|
||||
{LED_DIAG, LED_MODE_GREEN, ONLP_LED_MODE_GREEN},
|
||||
{LED_DIAG, LED_MODE_AMBER, ONLP_LED_MODE_ORANGE},
|
||||
{LED_DIAG, LED_MODE_RED, ONLP_LED_MODE_RED},
|
||||
{LED_DIAG, LED_MODE_BLUE, ONLP_LED_MODE_BLUE},
|
||||
{LED_DIAG, LED_MODE_PURPLE, ONLP_LED_MODE_PURPLE},
|
||||
{LED_DIAG, LED_MODE_GREEN_BLINK, ONLP_LED_MODE_GREEN_BLINKING},
|
||||
{LED_DIAG, LED_MODE_AMBER_BLINK, ONLP_LED_MODE_ORANGE_BLINKING},
|
||||
{LED_DIAG, LED_MODE_RED_BLINK, ONLP_LED_MODE_RED_BLINKING},
|
||||
{LED_DIAG, LED_MODE_BLUE_BLINK, ONLP_LED_MODE_BLUE_BLINKING},
|
||||
{LED_DIAG, LED_MODE_PURPLE_BLINK, ONLP_LED_MODE_PURPLE_BLINKING},
|
||||
{LED_LOC, LED_MODE_OFF, ONLP_LED_MODE_OFF},
|
||||
{LED_LOC, LED_MODE_GREEN, ONLP_LED_MODE_GREEN},
|
||||
{LED_LOC, LED_MODE_AMBER, ONLP_LED_MODE_ORANGE},
|
||||
{LED_LOC, LED_MODE_RED, ONLP_LED_MODE_RED},
|
||||
{LED_LOC, LED_MODE_BLUE, ONLP_LED_MODE_BLUE},
|
||||
{LED_LOC, LED_MODE_PURPLE, ONLP_LED_MODE_PURPLE},
|
||||
{LED_LOC, LED_MODE_GREEN_BLINK, ONLP_LED_MODE_GREEN_BLINKING},
|
||||
{LED_LOC, LED_MODE_AMBER_BLINK, ONLP_LED_MODE_ORANGE_BLINKING},
|
||||
{LED_LOC, LED_MODE_RED_BLINK, ONLP_LED_MODE_RED_BLINKING},
|
||||
{LED_LOC, LED_MODE_BLUE_BLINK, ONLP_LED_MODE_BLUE_BLINKING},
|
||||
{LED_LOC, LED_MODE_PURPLE_BLINK, ONLP_LED_MODE_PURPLE_BLINKING},
|
||||
{LED_FAN, LED_MODE_AUTO, ONLP_LED_MODE_AUTO},
|
||||
{LED_PSU1, LED_MODE_AUTO, ONLP_LED_MODE_AUTO},
|
||||
{LED_PSU2, LED_MODE_AUTO, ONLP_LED_MODE_AUTO}
|
||||
@@ -105,12 +123,20 @@ static onlp_led_info_t linfo[] =
|
||||
{
|
||||
{ ONLP_LED_ID_CREATE(LED_DIAG), "Chassis LED 1 (DIAG LED)", 0 },
|
||||
ONLP_LED_STATUS_PRESENT,
|
||||
ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_GREEN | ONLP_LED_CAPS_RED | ONLP_LED_CAPS_ORANGE,
|
||||
ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_GREEN | ONLP_LED_CAPS_RED |
|
||||
ONLP_LED_CAPS_ORANGE | ONLP_LED_CAPS_BLUE | ONLP_LED_CAPS_PURPLE|
|
||||
ONLP_LED_CAPS_GREEN_BLINKING | ONLP_LED_CAPS_RED_BLINKING |
|
||||
ONLP_LED_CAPS_ORANGE_BLINKING | ONLP_LED_CAPS_BLUE_BLINKING |
|
||||
ONLP_LED_CAPS_PURPLE_BLINKING,
|
||||
},
|
||||
{
|
||||
{ ONLP_LED_ID_CREATE(LED_LOC), "Chassis LED 2 (LOC LED)", 0 },
|
||||
ONLP_LED_STATUS_PRESENT,
|
||||
ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_ORANGE,
|
||||
ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_GREEN | ONLP_LED_CAPS_RED |
|
||||
ONLP_LED_CAPS_ORANGE | ONLP_LED_CAPS_BLUE | ONLP_LED_CAPS_PURPLE|
|
||||
ONLP_LED_CAPS_GREEN_BLINKING | ONLP_LED_CAPS_RED_BLINKING |
|
||||
ONLP_LED_CAPS_ORANGE_BLINKING | ONLP_LED_CAPS_BLUE_BLINKING |
|
||||
ONLP_LED_CAPS_PURPLE_BLINKING,
|
||||
},
|
||||
{
|
||||
{ ONLP_LED_ID_CREATE(LED_FAN), "Chassis LED 3 (FAN LED)", 0 },
|
||||
|
||||
Reference in New Issue
Block a user