static ssize_t led_brightness_show(struct device *dev, struct device_attribute *attr, char *buf) { struct led_classdev *led_cdev = dev_get_drvdata(dev); /* no lock needed for this */ led_update_brightness(led_cdev); return snprintf(buf, LED_BUFF_SIZE, "%u\n", led_cdev->brightness); }
/** * 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, &dev_attr_brightness); 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, &dev_attr_max_brightness); if (rc) goto err_out_attr_max; led_update_brightness(led_cdev); #ifdef CONFIG_LEDS_TRIGGERS rc = device_create_file(led_cdev->dev, &dev_attr_trigger); if (rc) goto err_out_led_list; led_trigger_set_default(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, &dev_attr_max_brightness); #endif err_out_attr_max: device_remove_file(led_cdev->dev, &dev_attr_brightness); list_del(&led_cdev->node); err_out: device_unregister(led_cdev->dev); return rc; }
static ssize_t led_brightness_show(struct device *dev, struct device_attribute *attr, char *buf) { struct led_classdev *led_cdev = dev_get_drvdata(dev); ssize_t ret = 0; /* no lock needed for this */ led_update_brightness(led_cdev); sprintf(buf, "%u\n", led_cdev->brightness); ret = strlen(buf) + 1; return ret; }
/** * 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); init_timer(&led_cdev->blink_timer); led_cdev->blink_timer.function = led_timer_function; led_cdev->blink_timer.data = (unsigned long)led_cdev; #ifdef CONFIG_LEDS_TRIGGERS led_trigger_set_default(led_cdev); #endif #ifdef CONFIG_YULONG_MODULE_MANAGEMENT /* add by yanghao 2012/11/28 */ led_cdev->led_module_manage = kzalloc(sizeof(struct module_management), GFP_KERNEL); if (!led_cdev->led_module_manage) { dev_err(led_cdev->dev, "led_module kzalloc fail!\n"); return -1; } led_cdev->led_module_manage->name = led_cdev->name; led_cdev->led_module_manage->get = get_led_status; led_cdev->led_module_manage->control = control_led; led_cdev->led_module_manage->private_data = led_cdev; yulong_register_module_management(led_cdev->led_module_manage); #endif printk(KERN_DEBUG "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) { char name[64]; int ret; ret = led_classdev_next_name(led_cdev->name, name, sizeof(name)); if (ret < 0) return ret; led_cdev->dev = device_create_with_groups(leds_class, parent, 0, led_cdev, led_cdev->groups, "%s", name); if (IS_ERR(led_cdev->dev)) return PTR_ERR(led_cdev->dev); if (ret) dev_warn(parent, "Led %s renamed to %s due to name collision", led_cdev->name, dev_name(led_cdev->dev)); #ifdef CONFIG_LEDS_TRIGGERS init_rwsem(&led_cdev->trigger_lock); #endif mutex_init(&led_cdev->led_access); /* 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_cdev->flags |= SET_BRIGHTNESS_ASYNC; led_update_brightness(led_cdev); INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed); setup_timer(&led_cdev->blink_timer, led_timer_function, (unsigned long)led_cdev); #ifdef CONFIG_LEDS_TRIGGERS led_trigger_set_default(led_cdev); #endif dev_dbg(parent, "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) { 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); init_timer(&led_cdev->blink_timer); led_cdev->blink_timer.function = led_timer_function; led_cdev->blink_timer.data = (unsigned long)led_cdev; #ifdef CONFIG_LEDS_TRIGGERS led_trigger_set_default(led_cdev); #endif #ifdef CONFIG_DEBUG_PRINTK printk(KERN_DEBUG "Registered led device: %s\n", led_cdev->name); #else ; #endif #ifdef CONFIG_GENERIC_BLN if (strcmp(led_cdev, "button-backlight")) { bln_led_cdev = led_cdev; register_bln_implementation(&led_bln); } #endif 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) { 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); init_timer(&led_cdev->blink_timer); led_cdev->blink_timer.function = led_timer_function; led_cdev->blink_timer.data = (unsigned long)led_cdev; #ifdef CONFIG_LEDS_TRIGGERS led_trigger_set_default(led_cdev); #endif printk(KERN_DEBUG "Registered led device: %s\n", led_cdev->name); //ASUS_BSP +++ Maggie Lee "Backlight Porting" #ifdef CONFIG_ASUS_BACKLIGHT if(!strcmp(led_cdev->name, "lcd-backlight")) g_led_cdev = dev_get_drvdata(led_cdev->dev); #endif //ASUS_BSP --- Maggie Lee "Backlight Porting" 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) { 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; }