1c72a1d60SRichard Purdie /* 2c72a1d60SRichard Purdie * LED Core 3c72a1d60SRichard Purdie * 4c72a1d60SRichard Purdie * Copyright 2005 Openedhand Ltd. 5c72a1d60SRichard Purdie * 6c72a1d60SRichard Purdie * Author: Richard Purdie <rpurdie@openedhand.com> 7c72a1d60SRichard Purdie * 8c72a1d60SRichard Purdie * This program is free software; you can redistribute it and/or modify 9c72a1d60SRichard Purdie * it under the terms of the GNU General Public License version 2 as 10c72a1d60SRichard Purdie * published by the Free Software Foundation. 11c72a1d60SRichard Purdie * 12c72a1d60SRichard Purdie */ 13c72a1d60SRichard Purdie #ifndef __LEDS_H_INCLUDED 14c72a1d60SRichard Purdie #define __LEDS_H_INCLUDED 15c72a1d60SRichard Purdie 1672f8da32SRichard Purdie #include <linux/rwsem.h> 17c72a1d60SRichard Purdie #include <linux/leds.h> 18c72a1d60SRichard Purdie 194d71a4a1SJacek Anaszewski static inline void led_set_brightness_async(struct led_classdev *led_cdev, 20c72a1d60SRichard Purdie enum led_brightness value) 21c72a1d60SRichard Purdie { 2256d06fdeSGabriele Mazzotta value = min(value, led_cdev->max_brightness); 2356d06fdeSGabriele Mazzotta led_cdev->brightness = value; 244d71a4a1SJacek Anaszewski 25c72a1d60SRichard Purdie if (!(led_cdev->flags & LED_SUSPENDED)) 26c72a1d60SRichard Purdie led_cdev->brightness_set(led_cdev, value); 27c72a1d60SRichard Purdie } 28c72a1d60SRichard Purdie 294d71a4a1SJacek Anaszewski static inline int led_set_brightness_sync(struct led_classdev *led_cdev, 304d71a4a1SJacek Anaszewski enum led_brightness value) 314d71a4a1SJacek Anaszewski { 324d71a4a1SJacek Anaszewski int ret = 0; 334d71a4a1SJacek Anaszewski 344d71a4a1SJacek Anaszewski led_cdev->brightness = min(value, led_cdev->max_brightness); 354d71a4a1SJacek Anaszewski 364d71a4a1SJacek Anaszewski if (!(led_cdev->flags & LED_SUSPENDED)) 37437a4240SJacek Anaszewski ret = led_cdev->brightness_set_blocking(led_cdev, 384d71a4a1SJacek Anaszewski led_cdev->brightness); 394d71a4a1SJacek Anaszewski return ret; 404d71a4a1SJacek Anaszewski } 414d71a4a1SJacek Anaszewski 420013b23dSNémeth Márton static inline int led_get_brightness(struct led_classdev *led_cdev) 430013b23dSNémeth Márton { 440013b23dSNémeth Márton return led_cdev->brightness; 450013b23dSNémeth Márton } 460013b23dSNémeth Márton 47757b06aeSJacek Anaszewski void led_init_core(struct led_classdev *led_cdev); 48d23a22a7SFabio Baltieri void led_stop_software_blink(struct led_classdev *led_cdev); 49*81fe8e5bSJacek Anaszewski void led_set_brightness_nopm(struct led_classdev *led_cdev, 50*81fe8e5bSJacek Anaszewski enum led_brightness value); 51*81fe8e5bSJacek Anaszewski void led_set_brightness_nosleep(struct led_classdev *led_cdev, 52*81fe8e5bSJacek Anaszewski enum led_brightness value); 53d23a22a7SFabio Baltieri 5472f8da32SRichard Purdie extern struct rw_semaphore leds_list_lock; 55c72a1d60SRichard Purdie extern struct list_head leds_list; 56c72a1d60SRichard Purdie 57c72a1d60SRichard Purdie #endif /* __LEDS_H_INCLUDED */ 58