Преглед изворни кода

ac_power设备节点支持写0

liu qidong [url ssh://qidong.liu@10.2.90.253:29418/] пре 4 недеља
родитељ
комит
12ba0f3ca4
2 измењених фајлова са 30 додато и 5 уклоњено
  1. 3 4
      power.c
  2. 27 1
      sysfs_power.c

+ 3 - 4
power.c

@@ -27,7 +27,7 @@ static int major_num = MAJOR_NUM;
 static int minor_num = MINOR_NUM;
 static int minor_num = MINOR_NUM;
 static struct class *device_class = NULL;
 static struct class *device_class = NULL;
 static struct device *device = NULL;
 static struct device *device = NULL;
-
+extern int sysfs_power_off_flag;
 struct chardev_device {
 struct chardev_device {
     struct cdev cdev;
     struct cdev cdev;
     char *buffer;           
     char *buffer;           
@@ -273,10 +273,9 @@ static void delay_work_func(struct work_struct *work)
         rst_flag = 0;
         rst_flag = 0;
     }
     }
 #if defined(PROJECT) && (PROJECT == POS)
 #if defined(PROJECT) && (PROJECT == POS)
-    if(ac_flag >= 8)
+    if(ac_flag >= 8 || sysfs_power_off_flag == 1)
 #else
 #else
-#define DEVICE_NAME "buzzer"
-    if(ac_flag >= 16)
+    if(ac_flag >= 16 || sysfs_power_off_flag == 1)
 #endif
 #endif
     {
     {
         chardev_dev->status = 'p';
         chardev_dev->status = 'p';

+ 27 - 1
sysfs_power.c

@@ -9,6 +9,7 @@
 #include "gpioregs.h"
 #include "gpioregs.h"
 
 
 extern struct kobject *hwmon_kobj;
 extern struct kobject *hwmon_kobj;
+int sysfs_power_off_flag = 0;
 
 
 static int wait_ibf(void)
 static int wait_ibf(void)
 {
 {
@@ -87,6 +88,10 @@ static ssize_t ac_power_show(struct kobject *kobj, struct kobj_attribute *attr,
     if (oem_ec_read_ram(2, 0x36, &val) < 0)
     if (oem_ec_read_ram(2, 0x36, &val) < 0)
         return -1;
         return -1;
     ac_power_flag = (val & 0x03) ? 1 : 0;
     ac_power_flag = (val & 0x03) ? 1 : 0;
+    if(sysfs_power_off_flag == 1)
+    {
+        ac_power_flag = 0;
+    }
 
 
     return sprintf(buf, "%d\n", ac_power_flag);
     return sprintf(buf, "%d\n", ac_power_flag);
 }
 }
@@ -94,7 +99,28 @@ static ssize_t ac_power_show(struct kobject *kobj, struct kobj_attribute *attr,
 static ssize_t ac_power_store(struct kobject *kobj, struct kobj_attribute *attr,
 static ssize_t ac_power_store(struct kobject *kobj, struct kobj_attribute *attr,
                               const char *buf, size_t count)
                               const char *buf, size_t count)
 {
 {
-    return -EINVAL;
+    u32 val;
+    int ret;
+
+    ret = kstrtou32(buf, 10, &val);
+    if (ret < 0)
+    {
+        pr_err("ac_power_store format error\n");
+        return ret;
+    }
+
+    if(val != 0)
+    {
+        pr_err("ac_power_store only support 0\n");
+        return -EINVAL;
+    }
+
+    if(val == 0)
+    {
+        sysfs_power_off_flag = 1;
+    }
+
+    return count;
 }
 }
 
 
 static struct kobj_attribute ac_power =
 static struct kobj_attribute ac_power =