xref: /OK3568_Linux_fs/kernel/include/linux/led-lm3530.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2011 ST-Ericsson SA.
4*4882a593Smuzhiyun  * Copyright (C) 2009 Motorola, Inc.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Simple driver for National Semiconductor LM35330 Backlight driver chip
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * Author: Shreshtha Kumar SAHU <shreshthakumar.sahu@stericsson.com>
9*4882a593Smuzhiyun  * based on leds-lm3530.c by Dan Murphy <D.Murphy@motorola.com>
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #ifndef _LINUX_LED_LM3530_H__
13*4882a593Smuzhiyun #define _LINUX_LED_LM3530_H__
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define LM3530_FS_CURR_5mA		(0) /* Full Scale Current */
16*4882a593Smuzhiyun #define LM3530_FS_CURR_8mA		(1)
17*4882a593Smuzhiyun #define LM3530_FS_CURR_12mA		(2)
18*4882a593Smuzhiyun #define LM3530_FS_CURR_15mA		(3)
19*4882a593Smuzhiyun #define LM3530_FS_CURR_19mA		(4)
20*4882a593Smuzhiyun #define LM3530_FS_CURR_22mA		(5)
21*4882a593Smuzhiyun #define LM3530_FS_CURR_26mA		(6)
22*4882a593Smuzhiyun #define LM3530_FS_CURR_29mA		(7)
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #define LM3530_ALS_AVRG_TIME_32ms	(0) /* ALS Averaging Time */
25*4882a593Smuzhiyun #define LM3530_ALS_AVRG_TIME_64ms	(1)
26*4882a593Smuzhiyun #define LM3530_ALS_AVRG_TIME_128ms	(2)
27*4882a593Smuzhiyun #define LM3530_ALS_AVRG_TIME_256ms	(3)
28*4882a593Smuzhiyun #define LM3530_ALS_AVRG_TIME_512ms	(4)
29*4882a593Smuzhiyun #define LM3530_ALS_AVRG_TIME_1024ms	(5)
30*4882a593Smuzhiyun #define LM3530_ALS_AVRG_TIME_2048ms	(6)
31*4882a593Smuzhiyun #define LM3530_ALS_AVRG_TIME_4096ms	(7)
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #define LM3530_RAMP_TIME_1ms		(0) /* Brigtness Ramp Time */
34*4882a593Smuzhiyun #define LM3530_RAMP_TIME_130ms		(1) /* Max to 0 and vice versa */
35*4882a593Smuzhiyun #define LM3530_RAMP_TIME_260ms		(2)
36*4882a593Smuzhiyun #define LM3530_RAMP_TIME_520ms		(3)
37*4882a593Smuzhiyun #define LM3530_RAMP_TIME_1s		(4)
38*4882a593Smuzhiyun #define LM3530_RAMP_TIME_2s		(5)
39*4882a593Smuzhiyun #define LM3530_RAMP_TIME_4s		(6)
40*4882a593Smuzhiyun #define LM3530_RAMP_TIME_8s		(7)
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun /* ALS Resistor Select */
43*4882a593Smuzhiyun #define LM3530_ALS_IMPD_Z		(0x00) /* ALS Impedance */
44*4882a593Smuzhiyun #define LM3530_ALS_IMPD_13_53kOhm	(0x01)
45*4882a593Smuzhiyun #define LM3530_ALS_IMPD_9_01kOhm	(0x02)
46*4882a593Smuzhiyun #define LM3530_ALS_IMPD_5_41kOhm	(0x03)
47*4882a593Smuzhiyun #define LM3530_ALS_IMPD_2_27kOhm	(0x04)
48*4882a593Smuzhiyun #define LM3530_ALS_IMPD_1_94kOhm	(0x05)
49*4882a593Smuzhiyun #define LM3530_ALS_IMPD_1_81kOhm	(0x06)
50*4882a593Smuzhiyun #define LM3530_ALS_IMPD_1_6kOhm		(0x07)
51*4882a593Smuzhiyun #define LM3530_ALS_IMPD_1_138kOhm	(0x08)
52*4882a593Smuzhiyun #define LM3530_ALS_IMPD_1_05kOhm	(0x09)
53*4882a593Smuzhiyun #define LM3530_ALS_IMPD_1_011kOhm	(0x0A)
54*4882a593Smuzhiyun #define LM3530_ALS_IMPD_941Ohm		(0x0B)
55*4882a593Smuzhiyun #define LM3530_ALS_IMPD_759Ohm		(0x0C)
56*4882a593Smuzhiyun #define LM3530_ALS_IMPD_719Ohm		(0x0D)
57*4882a593Smuzhiyun #define LM3530_ALS_IMPD_700Ohm		(0x0E)
58*4882a593Smuzhiyun #define LM3530_ALS_IMPD_667Ohm		(0x0F)
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun enum lm3530_mode {
61*4882a593Smuzhiyun 	LM3530_BL_MODE_MANUAL = 0,	/* "man" */
62*4882a593Smuzhiyun 	LM3530_BL_MODE_ALS,		/* "als" */
63*4882a593Smuzhiyun 	LM3530_BL_MODE_PWM,		/* "pwm" */
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun /* ALS input select */
67*4882a593Smuzhiyun enum lm3530_als_mode {
68*4882a593Smuzhiyun 	LM3530_INPUT_AVRG = 0,	/* ALS1 and ALS2 input average */
69*4882a593Smuzhiyun 	LM3530_INPUT_ALS1,	/* ALS1 Input */
70*4882a593Smuzhiyun 	LM3530_INPUT_ALS2,	/* ALS2 Input */
71*4882a593Smuzhiyun 	LM3530_INPUT_CEIL,	/* Max of ALS1 and ALS2 */
72*4882a593Smuzhiyun };
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun /* PWM Platform Specific Data */
75*4882a593Smuzhiyun struct lm3530_pwm_data {
76*4882a593Smuzhiyun 	void (*pwm_set_intensity) (int brightness, int max_brightness);
77*4882a593Smuzhiyun 	int (*pwm_get_intensity) (int max_brightness);
78*4882a593Smuzhiyun };
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun /**
81*4882a593Smuzhiyun  * struct lm3530_platform_data
82*4882a593Smuzhiyun  * @mode: mode of operation i.e. Manual, ALS or PWM
83*4882a593Smuzhiyun  * @als_input_mode: select source of ALS input - ALS1/2 or average
84*4882a593Smuzhiyun  * @max_current: full scale LED current
85*4882a593Smuzhiyun  * @pwm_pol_hi: PWM input polarity - active high/active low
86*4882a593Smuzhiyun  * @als_avrg_time: ALS input averaging time
87*4882a593Smuzhiyun  * @brt_ramp_law: brightness mapping mode - exponential/linear
88*4882a593Smuzhiyun  * @brt_ramp_fall: rate of fall of led current
89*4882a593Smuzhiyun  * @brt_ramp_rise: rate of rise of led current
90*4882a593Smuzhiyun  * @als1_resistor_sel: internal resistance from ALS1 input to ground
91*4882a593Smuzhiyun  * @als2_resistor_sel: internal resistance from ALS2 input to ground
92*4882a593Smuzhiyun  * @als_vmin: als input voltage calibrated for max brightness in mV
93*4882a593Smuzhiyun  * @als_vmax: als input voltage calibrated for min brightness in mV
94*4882a593Smuzhiyun  * @brt_val: brightness value (0-127)
95*4882a593Smuzhiyun  * @pwm_data: PWM control functions (only valid when the mode is PWM)
96*4882a593Smuzhiyun  */
97*4882a593Smuzhiyun struct lm3530_platform_data {
98*4882a593Smuzhiyun 	enum lm3530_mode mode;
99*4882a593Smuzhiyun 	enum lm3530_als_mode als_input_mode;
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun 	u8 max_current;
102*4882a593Smuzhiyun 	bool pwm_pol_hi;
103*4882a593Smuzhiyun 	u8 als_avrg_time;
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun 	bool brt_ramp_law;
106*4882a593Smuzhiyun 	u8 brt_ramp_fall;
107*4882a593Smuzhiyun 	u8 brt_ramp_rise;
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun 	u8 als1_resistor_sel;
110*4882a593Smuzhiyun 	u8 als2_resistor_sel;
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun 	u32 als_vmin;
113*4882a593Smuzhiyun 	u32 als_vmax;
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun 	u8 brt_val;
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun 	struct lm3530_pwm_data pwm_data;
118*4882a593Smuzhiyun };
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun #endif	/* _LINUX_LED_LM3530_H__ */
121