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