static ssize_t acl_state_show(struct device *dev, struct device_attribute *attr, char *buf) { struct led_classdev *led_cdev = dev_get_drvdata(dev); /* no lock needed for this */ lcd_update_ACL_state(led_cdev); return sprintf(buf, "%u\n", led_cdev->acl_state); }
/** * led_classdev_register - register a new object of led_classdev class. * @parent: The device to register. * @led_cdev: the led_classdev structure for this device. */ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev) { led_cdev->dev = device_create(leds_class, parent, 0, led_cdev, "%s", led_cdev->name); if (IS_ERR(led_cdev->dev)) return PTR_ERR(led_cdev->dev); #ifdef CONFIG_LEDS_TRIGGERS init_rwsem(&led_cdev->trigger_lock); #endif /* add to the list of leds */ down_write(&leds_list_lock); list_add_tail(&led_cdev->node, &leds_list); up_write(&leds_list_lock); if (!led_cdev->max_brightness) led_cdev->max_brightness = LED_FULL; led_update_brightness(led_cdev); #ifdef CONFIG_LEDS_TRIGGERS led_trigger_set_default(led_cdev); #endif #if 1 // Archer custom feature led_update_lcd_gamma(led_cdev); #ifdef SUPPORT_LCD_ACL_CTL lcd_update_ACL_state(led_cdev); #endif led_update_flashlight(led_cdev); #endif printk(KERN_INFO "Registered led device: %s\n", led_cdev->name); return 0; }
/** * led_classdev_register - register a new object of led_classdev class. * @parent: The device to register. * @led_cdev: the led_classdev structure for this device. */ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev) { int rc; led_cdev->dev = device_create(leds_class, parent, 0, led_cdev, "%s", led_cdev->name); if (IS_ERR(led_cdev->dev)) return PTR_ERR(led_cdev->dev); /* register the attributes */ rc = device_create_file(led_cdev->dev, &led_class_attrs[2]); if (rc) goto err_out; #ifdef CONFIG_LEDS_TRIGGERS init_rwsem(&led_cdev->trigger_lock); #endif /* add to the list of leds */ down_write(&leds_list_lock); list_add_tail(&led_cdev->node, &leds_list); up_write(&leds_list_lock); if (!led_cdev->max_brightness) led_cdev->max_brightness = LED_FULL; rc = device_create_file(led_cdev->dev, &led_class_attrs[3]); if (rc) goto err_out_attr_max; led_update_brightness(led_cdev); #ifdef CONFIG_LEDS_TRIGGERS #ifndef SUPPORT_LCD_ACL_CTL rc = device_create_file(led_cdev->dev, &led_class_attrs[4]); #else rc = device_create_file(led_cdev->dev, &led_class_attrs[5]); #endif if (rc) goto err_out_led_list; led_trigger_set_default(led_cdev); #endif #if 1 // Archer custom feature /* register the attributes */ rc = device_create_file(led_cdev->dev, &led_class_attrs[1]); if (rc) goto err_out; led_update_lcd_gamma(led_cdev); #ifdef SUPPORT_LCD_ACL_CTL /* register the attributes */ rc = device_create_file(led_cdev->dev, &led_class_attrs[4]); if (rc) goto err_out; lcd_update_ACL_state(led_cdev); #endif rc = device_create_file(led_cdev->dev, &led_class_attrs[0]); if (rc) goto err_out; led_update_flashlight(led_cdev); #endif printk(KERN_INFO "Registered led device: %s\n", led_cdev->name); return 0; #ifdef CONFIG_LEDS_TRIGGERS err_out_led_list: device_remove_file(led_cdev->dev, &led_class_attrs[3]); #endif err_out_attr_max: device_remove_file(led_cdev->dev, &led_class_attrs[2]); device_remove_file(led_cdev->dev, &led_class_attrs[1]); #ifdef SUPPORT_LCD_ACL_CTL device_remove_file(led_cdev->dev, &led_class_attrs[4]); #endif list_del(&led_cdev->node); err_out: device_unregister(led_cdev->dev); return rc; }