1. 在sys下创建一个节点
static ssize_t gsensor_vendor_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char val; //val = simple_strtoul(buf, NULL, 10); sscanf(buf, "%d", &val); if(val == 0) { gpio_set_value(MMA8452_CON_PIN, 0); } else { gpio_set_value(MMA8452_CON_PIN, 1); } return strlen(buf); } static DEVICE_ATTR(vendor, 0777, gsensor_vendor_show, gsensor_vendor_store); static struct kobject *android_gsensor_kobj; static int gsensor_sysfs_init(void) { int ret ; android_gsensor_kobj = kobject_create_and_add("android_gsensor", NULL); if (android_gsensor_kobj == NULL) { mmaprintk(KERN_ERR "MMA8452 gsensor_sysfs_init:"\ "subsystem_register failed\n"); ret = -ENOMEM; goto err; } ret = sysfs_create_file(android_gsensor_kobj, &dev_attr_vendor.attr); // "vendor" if (ret) { mmaprintk(KERN_ERR "MMA8452 gsensor_sysfs_init:"\ "sysfs_create_group failed\n"); goto err4; } return 0 ; err4: kobject_del(android_gsensor_kobj); err: return ret ; }
ssize_t led_3g_green_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { u8 val; val = simple_strtoul(buf, NULL, 10); if(val == 0){ gpio_set_value(MX53_HMS_3G_LED_GREEN_EN, 0); }else{ gpio_set_value(MX53_HMS_3G_LED_GREEN_EN, 1); } return count; } ssize_t led_3g_green_show(struct device *dev, struct device_attribute *attr, char *buf) { sprintf(buf, "%d\n", gpio_get_value(MX53_HMS_3G_LED_GREEN_EN)); return strlen(buf); } ssize_t led_3g_amber_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { u8 val; val = simple_strtoul(buf, NULL, 10); if(val == 0){ gpio_set_value(MX53_HMS_3G_LED_AMBER_EN, 0); }else{ gpio_set_value(MX53_HMS_3G_LED_AMBER_EN, 1); } return count; } ssize_t led_3g_amber_show(struct device *dev, struct device_attribute *attr, char *buf) { sprintf(buf, "%d\n", gpio_get_value(MX53_HMS_3G_LED_AMBER_EN)); return strlen(buf); } static DEVICE_ATTR(led_3g_green, S_IRUGO|S_IWUSR, led_3g_green_show, led_3g_green_store); static DEVICE_ATTR(led_3g_amber, S_IRUGO|S_IWUSR, led_3g_amber_show, led_3g_amber_store); static struct attribute* leds_mxc_gpio_attrs[] = { &dev_attr_led_3g_green.attr, &dev_attr_led_3g_amber.attr, NULL }; static const struct attribute_group leds_mxc_gpio_group = { .attrs = leds_mxc_gpio_attrs, }; result = sysfs_create_group(&drv_data->pdev->dev.kobj, &leds_mxc_gpio_group); if (result) { dev_err(&pdev->dev, "Create device file failed! ERRNO: %d\n",result); goto free_drv_data; }