forked from Qortal/Brooklyn
* 0day explit mitigation * Memory corruption prevention * Privilege escalation prevention * Buffer over flow prevention * File System corruption defense * Thread escape prevention This may very well be the most intensive inclusion to BrooklynR. This will not be part of an x86 suite nor it will be released as tool kit. The security core toolkit will remain part of kernel base.
126 lines
2.5 KiB
C
126 lines
2.5 KiB
C
/*
|
|
* LED driver for TI lp3952 controller
|
|
*
|
|
* Copyright (C) 2016, DAQRI, LLC.
|
|
* Author: Tony Makkiel <tony.makkiel@daqri.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
*/
|
|
|
|
#ifndef LEDS_LP3952_H_
|
|
#define LEDS_LP3952_H_
|
|
|
|
#define LP3952_NAME "lp3952"
|
|
#define LP3952_CMD_REG_COUNT 8
|
|
#define LP3952_BRIGHT_MAX 4
|
|
#define LP3952_LABEL_MAX_LEN 15
|
|
|
|
#define LP3952_REG_LED_CTRL 0x00
|
|
#define LP3952_REG_R1_BLNK_TIME_CTRL 0x01
|
|
#define LP3952_REG_R1_BLNK_CYCLE_CTRL 0x02
|
|
#define LP3952_REG_G1_BLNK_TIME_CTRL 0x03
|
|
#define LP3952_REG_G1_BLNK_CYCLE_CTRL 0x04
|
|
#define LP3952_REG_B1_BLNK_TIME_CTRL 0x05
|
|
#define LP3952_REG_B1_BLNK_CYCLE_CTRL 0x06
|
|
#define LP3952_REG_ENABLES 0x0B
|
|
#define LP3952_REG_PAT_GEN_CTRL 0x11
|
|
#define LP3952_REG_RGB1_MAX_I_CTRL 0x12
|
|
#define LP3952_REG_RGB2_MAX_I_CTRL 0x13
|
|
#define LP3952_REG_CMD_0 0x50
|
|
#define LP3952_REG_RESET 0x60
|
|
#define REG_MAX LP3952_REG_RESET
|
|
|
|
#define LP3952_PATRN_LOOP BIT(1)
|
|
#define LP3952_PATRN_GEN_EN BIT(2)
|
|
#define LP3952_INT_B00ST_LDR BIT(2)
|
|
#define LP3952_ACTIVE_MODE BIT(6)
|
|
#define LP3952_LED_MASK_ALL 0x3f
|
|
|
|
/* Transition Time in ms */
|
|
enum lp3952_tt {
|
|
TT0,
|
|
TT55,
|
|
TT110,
|
|
TT221,
|
|
TT422,
|
|
TT885,
|
|
TT1770,
|
|
TT3539
|
|
};
|
|
|
|
/* Command Execution Time in ms */
|
|
enum lp3952_cet {
|
|
CET197,
|
|
CET393,
|
|
CET590,
|
|
CET786,
|
|
CET1180,
|
|
CET1376,
|
|
CET1573,
|
|
CET1769,
|
|
CET1966,
|
|
CET2163,
|
|
CET2359,
|
|
CET2556,
|
|
CET2763,
|
|
CET2949,
|
|
CET3146
|
|
};
|
|
|
|
/* Max Current in % */
|
|
enum lp3952_colour_I_log_0 {
|
|
I0,
|
|
I7,
|
|
I14,
|
|
I21,
|
|
I32,
|
|
I46,
|
|
I71,
|
|
I100
|
|
};
|
|
|
|
enum lp3952_leds {
|
|
LP3952_BLUE_2,
|
|
LP3952_GREEN_2,
|
|
LP3952_RED_2,
|
|
LP3952_BLUE_1,
|
|
LP3952_GREEN_1,
|
|
LP3952_RED_1,
|
|
LP3952_LED_ALL
|
|
};
|
|
|
|
struct lp3952_ctrl_hdl {
|
|
struct led_classdev cdev;
|
|
char name[LP3952_LABEL_MAX_LEN];
|
|
enum lp3952_leds channel;
|
|
void *priv;
|
|
};
|
|
|
|
struct ptrn_gen_cmd {
|
|
union {
|
|
struct {
|
|
u16 tt:3;
|
|
u16 b:3;
|
|
u16 cet:4;
|
|
u16 g:3;
|
|
u16 r:3;
|
|
};
|
|
struct {
|
|
u8 lsb;
|
|
u8 msb;
|
|
} bytes;
|
|
};
|
|
} __packed;
|
|
|
|
struct lp3952_led_array {
|
|
struct regmap *regmap;
|
|
struct i2c_client *client;
|
|
struct gpio_desc *enable_gpio;
|
|
struct lp3952_ctrl_hdl leds[LP3952_LED_ALL];
|
|
};
|
|
|
|
#endif /* LEDS_LP3952_H_ */
|