|
|
@@ -181,13 +181,11 @@ static int oem_ec_write_ram(uint8_t page, uint8_t offset, uint8_t data)
|
|
|
static void heart_led_turn_on(void)
|
|
|
{
|
|
|
oem_ec_write_ram(1, OFFSET_TURNOFF_CTL, 0x00);
|
|
|
- printk("%s %s %d.\n", __FILE__, __FUNCTION__, __LINE__);
|
|
|
}
|
|
|
|
|
|
static void heart_led_turn_off(void)
|
|
|
{
|
|
|
oem_ec_write_ram(1, OFFSET_TURNOFF_CTL, 0x01);
|
|
|
- printk("%s %s %d.\n", __FILE__, __FUNCTION__, __LINE__);
|
|
|
}
|
|
|
|
|
|
static int led_set_color(led_color_t color)
|
|
|
@@ -258,7 +256,6 @@ static ssize_t led_heartbeat_write(struct file *filp, const char __user *buf, si
|
|
|
led_color = kbuff[0];
|
|
|
led_blink_flag = kbuff[1];
|
|
|
led_blink_speed = kbuff[2];
|
|
|
- printk("%02x %02x %02x\n", kbuff[0], kbuff[1], kbuff[2]);
|
|
|
|
|
|
if(led_color == 0x00)
|
|
|
{
|
|
|
@@ -277,14 +274,15 @@ static ssize_t led_heartbeat_write(struct file *filp, const char __user *buf, si
|
|
|
led_set_color(LED_GREEN);
|
|
|
}
|
|
|
|
|
|
- led_set_blink(led_blink_flag, kbuff[2]);
|
|
|
- return count;
|
|
|
+ // led_set_blink(led_blink_flag, kbuff[2]);
|
|
|
+ // return count;
|
|
|
|
|
|
+ // The following code is reserved because the blink cycle of EC is incorrect. If the EC cannot be changed, we have to delay the work queue.
|
|
|
if(led_blink_flag)
|
|
|
{
|
|
|
- led_set_blink(1, led_blink_speed);
|
|
|
- // blink_count = 0;
|
|
|
- // schedule_delayed_work(&delay_work1, msecs_to_jiffies(1000*led_blink_speed));
|
|
|
+ // led_set_blink(1, led_blink_speed);
|
|
|
+ blink_count = 0;
|
|
|
+ schedule_delayed_work(&delay_work1, msecs_to_jiffies(1000*led_blink_speed));
|
|
|
}
|
|
|
return count;
|
|
|
}
|
|
|
@@ -302,6 +300,7 @@ static void led_heartbeat_work_func(struct work_struct *work)
|
|
|
|
|
|
if(led_blink_flag)
|
|
|
{
|
|
|
+ blink_count++;
|
|
|
if(blink_count%2 == 0)
|
|
|
{
|
|
|
if(led_color == 0x40)
|
|
|
@@ -317,10 +316,8 @@ static void led_heartbeat_work_func(struct work_struct *work)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
|
|
|
heart_led_turn_off();
|
|
|
}
|
|
|
- blink_count++;
|
|
|
schedule_delayed_work(&delay_work1, msecs_to_jiffies(1000*led_blink_speed));
|
|
|
}
|
|
|
}
|
|
|
@@ -330,18 +327,14 @@ int led_heartbeat_init(void)
|
|
|
dev_t dev_num;
|
|
|
int ret;
|
|
|
|
|
|
- // 使用指定的主设备号和次设备号
|
|
|
dev_num = MKDEV(led_heartbeat_MAJOR, led_heartbeat_MINOR);
|
|
|
-
|
|
|
- // 注册设备号
|
|
|
+
|
|
|
ret = register_chrdev_region(dev_num, 1, DEVICE_NAME);
|
|
|
if (ret < 0) {
|
|
|
pr_err("Failed_heartbeat to register device number %d:%d\n", led_heartbeat_MAJOR, led_heartbeat_MINOR);
|
|
|
return ret;
|
|
|
}
|
|
|
- pr_info("led_heartbeat driver loaded, device number = %d:%d\n", led_heartbeat_MAJOR, led_heartbeat_MINOR);
|
|
|
|
|
|
- // 初始化 cdev 并添加到系统
|
|
|
cdev_init(&led_heartbeat_cdev, &led_heartbeat_fops);
|
|
|
led_heartbeat_cdev.owner = THIS_MODULE;
|
|
|
ret = cdev_add(&led_heartbeat_cdev, dev_num, 1);
|
|
|
@@ -351,7 +344,6 @@ int led_heartbeat_init(void)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- // 创建设备类
|
|
|
led_heartbeat_class = class_create(THIS_MODULE, CLASS_NAME);
|
|
|
if (IS_ERR(led_heartbeat_class)) {
|
|
|
pr_err("Failed_heartbeat to create class\n");
|
|
|
@@ -360,7 +352,6 @@ int led_heartbeat_init(void)
|
|
|
return PTR_ERR(led_heartbeat_class);
|
|
|
}
|
|
|
|
|
|
- // 创建设备节点
|
|
|
led_heartbeat_device = device_create(led_heartbeat_class, NULL, dev_num, NULL, DEVICE_NAME);
|
|
|
if (IS_ERR(led_heartbeat_device)) {
|
|
|
pr_err("Failed_heartbeat to create device\n");
|
|
|
@@ -372,13 +363,13 @@ int led_heartbeat_init(void)
|
|
|
|
|
|
INIT_DELAYED_WORK(&delay_work1, led_heartbeat_work_func);
|
|
|
|
|
|
- pr_info("led_heartbeat driver initialized successfully\n");
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
void led_heartbeat_exit(void)
|
|
|
{
|
|
|
dev_t dev_num = MKDEV(led_heartbeat_MAJOR, led_heartbeat_MINOR);
|
|
|
+ cancel_delayed_work_sync(&delay_work1);
|
|
|
|
|
|
device_destroy(led_heartbeat_class, dev_num);
|
|
|
class_destroy(led_heartbeat_class);
|