|
@@ -212,7 +212,7 @@ static ssize_t led_health_store(struct kobject *kobj,
|
|
|
if (ret < 0)
|
|
if (ret < 0)
|
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
|
|
- if(val == 0x0 || val == 0x1 || val == 0x3)
|
|
|
|
|
|
|
+ if(val == 0x0 || val == 0x1 || val == 0x2 || val == 0x3 || val == 0x4)
|
|
|
{
|
|
{
|
|
|
led_health_val = val;
|
|
led_health_val = val;
|
|
|
}
|
|
}
|
|
@@ -251,7 +251,7 @@ static ssize_t led_charge_store(struct kobject *kobj, struct kobj_attribute *att
|
|
|
if (ret < 0)
|
|
if (ret < 0)
|
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
|
|
- if(val == 0x0 || val == 0x2 || val == 0x4)
|
|
|
|
|
|
|
+ if(val == 0x0 || val == 0x1 || val == 0x2 || val == 0x3 || val == 0x4)
|
|
|
{
|
|
{
|
|
|
led_charge_val = val;
|
|
led_charge_val = val;
|
|
|
}
|
|
}
|
|
@@ -281,7 +281,10 @@ static void delay_work_func(struct work_struct *work)
|
|
|
{
|
|
{
|
|
|
static uint8_t blink_flag = 0;
|
|
static uint8_t blink_flag = 0;
|
|
|
uint8_t data = 0;
|
|
uint8_t data = 0;
|
|
|
-
|
|
|
|
|
|
|
+ // val is led state: off; red; green
|
|
|
|
|
+ // val bit meaning:
|
|
|
|
|
+ // bit 2-3: health led bit2-green, bit3-red blude=green white=red
|
|
|
|
|
+ // bit 4-5: charge led bit4-green, bit5-red
|
|
|
if(blink_flag == 0)
|
|
if(blink_flag == 0)
|
|
|
{
|
|
{
|
|
|
//Turn off when flickering
|
|
//Turn off when flickering
|
|
@@ -292,21 +295,37 @@ static void delay_work_func(struct work_struct *work)
|
|
|
}
|
|
}
|
|
|
else if(led_health_val == 0x1)
|
|
else if(led_health_val == 0x1)
|
|
|
{
|
|
{
|
|
|
- data = data | 0x04;
|
|
|
|
|
|
|
+ data = data | 0x8;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(led_health_val == 0x2)
|
|
|
|
|
+ {
|
|
|
|
|
+ data = data | 0x4;
|
|
|
}
|
|
}
|
|
|
else if(led_health_val == 0x3)
|
|
else if(led_health_val == 0x3)
|
|
|
{
|
|
{
|
|
|
data = data & 0xf3;
|
|
data = data & 0xf3;
|
|
|
}
|
|
}
|
|
|
|
|
+ else if(led_health_val == 0x4)
|
|
|
|
|
+ {
|
|
|
|
|
+ data = data & 0xf3;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
if(led_charge_val == 0x0)
|
|
if(led_charge_val == 0x0)
|
|
|
{
|
|
{
|
|
|
data = data & 0xcf;
|
|
data = data & 0xcf;
|
|
|
}
|
|
}
|
|
|
- else if(led_charge_val == 0x2)
|
|
|
|
|
|
|
+ else if(led_charge_val == 0x1)
|
|
|
{
|
|
{
|
|
|
data = data | 0x20;
|
|
data = data | 0x20;
|
|
|
}
|
|
}
|
|
|
|
|
+ else if(led_charge_val == 0x2)
|
|
|
|
|
+ {
|
|
|
|
|
+ data = data | 0x10;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(led_charge_val == 0x3)
|
|
|
|
|
+ {
|
|
|
|
|
+ data = data & 0xcf;
|
|
|
|
|
+ }
|
|
|
else if(led_charge_val == 0x4)
|
|
else if(led_charge_val == 0x4)
|
|
|
{
|
|
{
|
|
|
data = data & 0xcf;
|
|
data = data & 0xcf;
|
|
@@ -322,10 +341,18 @@ static void delay_work_func(struct work_struct *work)
|
|
|
data = data & 0xf3;
|
|
data = data & 0xf3;
|
|
|
}
|
|
}
|
|
|
else if(led_health_val == 0x1)
|
|
else if(led_health_val == 0x1)
|
|
|
|
|
+ {
|
|
|
|
|
+ data = data | 0x08;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(led_health_val == 0x2)
|
|
|
{
|
|
{
|
|
|
data = data | 0x04;
|
|
data = data | 0x04;
|
|
|
}
|
|
}
|
|
|
else if(led_health_val == 0x3)
|
|
else if(led_health_val == 0x3)
|
|
|
|
|
+ {
|
|
|
|
|
+ data = data | 0x08;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(led_health_val == 0x4)
|
|
|
{
|
|
{
|
|
|
data = data | 0x04;
|
|
data = data | 0x04;
|
|
|
}
|
|
}
|
|
@@ -334,13 +361,21 @@ static void delay_work_func(struct work_struct *work)
|
|
|
{
|
|
{
|
|
|
data = data & 0xcf;
|
|
data = data & 0xcf;
|
|
|
}
|
|
}
|
|
|
|
|
+ else if(led_charge_val == 0x1)
|
|
|
|
|
+ {
|
|
|
|
|
+ data = data | 0x20;
|
|
|
|
|
+ }
|
|
|
else if(led_charge_val == 0x2)
|
|
else if(led_charge_val == 0x2)
|
|
|
|
|
+ {
|
|
|
|
|
+ data = data | 0x10;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if(led_charge_val == 0x3)
|
|
|
{
|
|
{
|
|
|
data = data | 0x20;
|
|
data = data | 0x20;
|
|
|
}
|
|
}
|
|
|
else if(led_charge_val == 0x4)
|
|
else if(led_charge_val == 0x4)
|
|
|
{
|
|
{
|
|
|
- data = data | 0x20;
|
|
|
|
|
|
|
+ data = data | 0x10;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
oem_ec_write_ram(2, 0x31, data);
|
|
oem_ec_write_ram(2, 0x31, data);
|