| /* |
| * Copyright (C) 2011 Samsung Electronics Co. Ltd. All Rights Reserved. |
| * |
| * This software is licensed under the terms of the GNU General Public |
| * License version 2, as published by the Free Software Foundation, and |
| * may be copied, distributed, and modified under those terms. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| */ |
| |
| #ifndef _LEDS_AN30259A_H |
| #define _LEDS_AN30259A_H |
| |
| #include <linux/ioctl.h> |
| #include <linux/types.h> |
| |
| #define LED_LIGHT_OFF 0 |
| #define LED_LIGHT_ON 1 |
| #define LED_LIGHT_PULSE 2 |
| #define LED_LIGHT_SLOPE 3 |
| |
| /* |
| * This struct gets passed to the ioctl call. |
| * If only one of struct gets passed to the ioctl then it is assumed to define |
| * the behavior for all 3 color components: R, G and B. |
| * If 3 structs are passed, then each one is assumed to describe a single color: |
| * R first, then G, then B. |
| * |
| * Requesting a color value of 0 is equivalent to requesting LED_LIGHT_OFF |
| * |
| * If only describing a single color (ie passing a single struct), then |
| * start_delay will get ignored |
| * |
| * Other parameters may get ignored depending on the requested state: |
| * LIGHT_ON only requires color |
| * LIGHT_PULSE requires color, time_on and time_off |
| * |
| * Total time for time_slope_up_1 + time_slope_up_2 + time_on as well as for |
| * time_slope_down_1 + time_slope_down_2 + time_off will be rounded up to the |
| * nearest .5 seconds. |
| * |
| * Each of the time_slope_* values will get rounded up to the nearest multiple |
| * of 4ms up to 7680ms |
| */ |
| |
| struct an30259a_pr_control { |
| /* LED color in RGB format */ |
| __u32 color; |
| /* see defines above */ |
| __u32 state; |
| /* initial delay in ms */ |
| __u16 start_delay; |
| /* time to reach mid_brightness_up from off in ms */ |
| __u16 time_slope_up_1; |
| /* time to reach color from mid_brightness_up in ms */ |
| __u16 time_slope_up_2; |
| /* time at max brightness in ms */ |
| __u16 time_on; |
| /* time to reach mid_brightness_down from max brightness in ms */ |
| __u16 time_slope_down_1; |
| /* time to reach off from mid_brightness_down in ms */ |
| __u16 time_slope_down_2; |
| /* time off in ms */ |
| __u16 time_off; |
| /* mid point brightness in 1/128 increments of color */ |
| __u8 mid_brightness; |
| } __packed; |
| |
| #define AN30259A_PR_SET_LED _IOW('S', 42, struct an30259a_pr_control) |
| #define AN30259A_PR_SET_LEDS _IOW('S', 43, struct an30259a_pr_control[3]) |
| #define AN30259A_PR_SET_IMAX _IOW('S', 44, __u8) |
| #endif /* _LEDS_AN30259A_H */ |