1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * LED MULTI-CONTROL 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright 2017 Allen Zhang <zwp@rock-chips.com> 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify 7*4882a593Smuzhiyun * it under the terms of the GNU General Public License version 2 as 8*4882a593Smuzhiyun * published by the Free Software Foundation. 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun #ifndef __LEDS_MULTI_H_INCLUDED 12*4882a593Smuzhiyun #define __LEDS_MULTI_H_INCLUDED 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun enum { 15*4882a593Smuzhiyun TRIG_NONE = 0, 16*4882a593Smuzhiyun TRIG_DEF_ON, 17*4882a593Smuzhiyun TRIG_TIMER, 18*4882a593Smuzhiyun TRIG_ONESHOT, 19*4882a593Smuzhiyun TRIG_MAX, 20*4882a593Smuzhiyun }; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun struct led_ctrl_data { 23*4882a593Smuzhiyun u32 trigger; 24*4882a593Smuzhiyun /* the delay time(ms) of triggering a trigger */ 25*4882a593Smuzhiyun u32 delayed_trigger_ms; 26*4882a593Smuzhiyun u32 brightness; 27*4882a593Smuzhiyun u32 delay_on; 28*4882a593Smuzhiyun u32 delay_off; 29*4882a593Smuzhiyun } __packed; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun struct led_ctrl_scroll_data { 32*4882a593Smuzhiyun u64 init_bitmap; 33*4882a593Smuzhiyun /* the shift bits on every scrolling time*/ 34*4882a593Smuzhiyun u32 shifts; 35*4882a593Smuzhiyun u32 shift_delay_ms; 36*4882a593Smuzhiyun } __packed; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun struct led_ctrl_breath_data { 39*4882a593Smuzhiyun u64 background_bitmap; 40*4882a593Smuzhiyun u64 breath_bitmap; 41*4882a593Smuzhiyun u32 change_delay_ms; 42*4882a593Smuzhiyun u32 breath_steps; 43*4882a593Smuzhiyun } __packed; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #define MAX_LEDS_NUMBER 64 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define LEDS_MULTI_CTRL_IOCTL_MAGIC 'z' 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define LEDS_MULTI_CTRL_IOCTL_MULTI_SET \ 50*4882a593Smuzhiyun _IOW(LEDS_MULTI_CTRL_IOCTL_MAGIC, 0x01, struct led_ctrl_data*) 51*4882a593Smuzhiyun #define LEDS_MULTI_CTRL_IOCTL_GET_LED_NUMBER \ 52*4882a593Smuzhiyun _IOR(LEDS_MULTI_CTRL_IOCTL_MAGIC, 0x02, int) 53*4882a593Smuzhiyun #define LEDS_MULTI_CTRL_IOCTL_MULTI_SET_SCROLL \ 54*4882a593Smuzhiyun _IOW(LEDS_MULTI_CTRL_IOCTL_MAGIC, 0x03, struct led_ctrl_scroll_data*) 55*4882a593Smuzhiyun #define LEDS_MULTI_CTRL_IOCTL_MULTI_SET_BREATH \ 56*4882a593Smuzhiyun _IOW(LEDS_MULTI_CTRL_IOCTL_MAGIC, 0x04, struct led_ctrl_breath_data*) 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun int led_multi_control_register(struct led_classdev *led_cdev); 59*4882a593Smuzhiyun int led_multi_control_unregister(struct led_classdev *led_cdev); 60*4882a593Smuzhiyun int led_multi_control_init(struct device *dev); 61*4882a593Smuzhiyun int led_multi_control_exit(struct device *dev); 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #endif /* __LEDS_MULTI_H_INCLUDED */ 64