aboutsummaryrefslogtreecommitdiff
path: root/include/linux/platform_data/lp855x.h
blob: 82a42addcb4d87257f99011cff44b8ffef118fff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/*
 * LP855x Backlight Driver
 *
 *			Copyright (C) 2011 Texas Instruments
 *
 * 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 _LP855X_H
#define _LP855X_H

extern struct lp855x *lpdata;
int lp855x_ext_write_byte(u8 reg, u8 data);
int lp855x_ext_read_byte(u8 reg);

#define BL_CTL_SHFT	(0)
#define BRT_MODE_SHFT	(1)
#define BRT_MODE_MASK	(0x06)

/* Enable backlight. Only valid when BRT_MODE=10(I2C only) */
#define ENABLE_BL	(1)
#define DISABLE_BL	(0)

#define I2C_CONFIG(id)	id ## _I2C_CONFIG
#define PWM_CONFIG(id)	id ## _PWM_CONFIG

/* DEVICE CONTROL register - LP8550 */
#define LP8550_PWM_CONFIG	(LP8550_PWM_ONLY << BRT_MODE_SHFT)
#define LP8550_I2C_CONFIG	((ENABLE_BL << BL_CTL_SHFT) | \
				(LP8550_I2C_ONLY << BRT_MODE_SHFT))

/* DEVICE CONTROL register - LP8551 */
#define LP8551_PWM_CONFIG	LP8550_PWM_CONFIG
#define LP8551_I2C_CONFIG	LP8550_I2C_CONFIG

/* DEVICE CONTROL register - LP8552 */
#define LP8552_PWM_CONFIG	LP8550_PWM_CONFIG
#define LP8552_I2C_CONFIG	LP8550_I2C_CONFIG

/* DEVICE CONTROL register - LP8553 */
#define LP8553_PWM_CONFIG	LP8550_PWM_CONFIG
#define LP8553_I2C_CONFIG	LP8550_I2C_CONFIG

/* DEVICE CONTROL register - LP8556 */
#define LP8556_PWM_CONFIG	(LP8556_PWM_ONLY << BRT_MODE_SHFT)
#define LP8556_COMB1_CONFIG	(LP8556_COMBINED1 << BRT_MODE_SHFT)
#define LP8556_I2C_CONFIG	((ENABLE_BL << BL_CTL_SHFT) | \
				(LP8556_I2C_ONLY << BRT_MODE_SHFT))
#define LP8556_COMB2_CONFIG	(LP8556_COMBINED2 << BRT_MODE_SHFT)
#define LP8556_FAST_CONFIG	BIT(7) /* use it if EPROMs should be maintained
					  when exiting the low power mode */
#define	LP8556_5LEDSTR		0x1F  /* 5 led string definition for ffrd8 and bytcr-rvp boards.*/

#define	LP8556_LEDSTREN		0x16
#define LP8556_CFG98		0x98
#define LP8556_CFG9E		0x9E
#define LP8556_CFG0		0xA0
#define LP8556_CFG1		0xA1
#define LP8556_CFG2		0xA2
#define LP8556_CFG3		0xA3
#define LP8556_CFG4		0xA4
#define LP8556_CFG5		0xA5
	#define LP8556_PWM_DRECT_EN	0x80
	#define LP8556_PWM_DRECT_DIS	0x00
	#define LP8556_PS_MODE_6P6D	0x00
	#define LP8556_PS_MODE_5P5D	0x10
	#define LP8556_PS_MODE_4P4D	0x20
	#define LP8556_PS_MODE_3P3D	0x30
	#define LP8556_PS_MODE_2P2D	0x40
	#define LP8556_PS_MODE_3P6D	0x50
	#define LP8556_PS_MODE_2P6D	0x60
	#define LP8556_PS_MODE_1P6D	0x70
	#define LP8556_PWM_FREQ_4808HZ	0x00
	#define LP8556_PWM_FREQ_6010HZ	0x01
	#define LP8556_PWM_FREQ_7212HZ	0x02
	#define LP8556_PWM_FREQ_8414HZ	0x03
	#define LP8556_PWM_FREQ_9616HZ	0x04
	#define LP8556_PWM_FREQ_12020HZ	0x05
	#define LP8556_PWM_FREQ_13222HZ	0x06
	#define LP8556_PWM_FREQ_14424HZ	0x07
	#define LP8556_PWM_FREQ_15626HZ	0x08
	#define LP8556_PWM_FREQ_16828HZ	0x09
	#define LP8556_PWM_FREQ_18030HZ	0x0A
	#define LP8556_PWM_FREQ_19232HZ	0x0B
	#define LP8556_PWM_FREQ_24040HZ	0x0C
	#define LP8556_PWM_FREQ_28848HZ	0x0D
	#define LP8556_PWM_FREQ_33656HZ	0x0E
	#define LP8556_PWM_FREQ_38464HZ	0x0F
#define LP8556_CFG6		0xA6
#define LP8556_CFG7		0xA7
	#define LP8556_RSRVD_76	0xC0
	#define LP8556_DRV3_EN	0x20
	#define LP8556_DRV3_DIS	0x00
	#define LP8556_DRV2_EN	0x10
	#define LP8556_DRV2_DIS	0x00
	#define LP8556_RSRVD_32	0x0C
	#define LP8556_IBOOST_LIM_0_9A_1_6A	0x00
	#define LP8556_IBOOST_LIM_1_2A_2_1A	0x01
	#define LP8556_IBOOST_LIM_1_5A_2_6A	0x02
	#define LP8556_IBOOST_LIM_1_8A_NA	0x03
#define LP8556_CFG8		0xA8
#define LP8556_CFG9		0xA9
	#define LP8556_VBOOST_MAX_NA_21V	0x40
	#define LP8556_VBOOST_MAX_NA_25V	0x60
	#define LP8556_VBOOST_MAX_21V_30V	0x80
	#define LP8556_VBOOST_MAX_25V_34_5V	0xA0
	#define LP8556_VBOOST_MAX_30V_39V	0xC0
	#define LP8556_VBOOST_MAX_34V_43V	0xE0
	#define LP8556_JUMP_EN			0x10
	#define LP8556_JUMP_DIS			0x00
	#define LP8556_JMP_TSHOLD_10P		0x00
	#define LP8556_JMP_TSHOLD_30P		0x04
	#define LP8556_JMP_TSHOLD_50P		0x08
	#define LP8556_JMP_TSHOLD_70P		0x0C
	#define LP8556_JMP_VOLT_0_5V		0x00
	#define LP8556_JMP_VOLT_1V		0x01
	#define LP8556_JMP_VOLT_2V		0x02
	#define LP8556_JMP_VOLT_4V		0x03
#define LP8556_CFGA		0xAA
#define LP8556_CFGB		0xAB
#define LP8556_CFGC		0xAC
#define LP8556_CFGD		0xAD
#define LP8556_CFGE		0xAE
#define LP8556_CFGF		0xAF

/* CONFIG register - LP8557 */
#define LP8557_PWM_STANDBY	BIT(7)
#define LP8557_PWM_FILTER	BIT(6)
#define LP8557_RELOAD_EPROM	BIT(3)	/* use it if EPROMs should be reset
					   when the backlight turns on */
#define LP8557_OFF_OPENLEDS	BIT(2)
#define LP8557_PWM_CONFIG	LP8557_PWM_ONLY
#define LP8557_I2C_CONFIG	LP8557_I2C_ONLY
#define LP8557_COMB1_CONFIG	LP8557_COMBINED1
#define LP8557_COMB2_CONFIG	LP8557_COMBINED2

enum lp855x_chip_id {
	LP8550,
	LP8551,
	LP8552,
	LP8553,
	LP8556,
	LP8557,
};

enum lp8550_brighntess_source {
	LP8550_PWM_ONLY,
	LP8550_I2C_ONLY = 2,
};

enum lp8551_brighntess_source {
	LP8551_PWM_ONLY = LP8550_PWM_ONLY,
	LP8551_I2C_ONLY = LP8550_I2C_ONLY,
};

enum lp8552_brighntess_source {
	LP8552_PWM_ONLY = LP8550_PWM_ONLY,
	LP8552_I2C_ONLY = LP8550_I2C_ONLY,
};

enum lp8553_brighntess_source {
	LP8553_PWM_ONLY = LP8550_PWM_ONLY,
	LP8553_I2C_ONLY = LP8550_I2C_ONLY,
};

enum lp8556_brightness_source {
	LP8556_PWM_ONLY,
	LP8556_COMBINED1,	/* pwm + i2c before the shaper block */
	LP8556_I2C_ONLY,
	LP8556_COMBINED2,	/* pwm + i2c after the shaper block */
};

enum lp8557_brightness_source {
	LP8557_PWM_ONLY,
	LP8557_I2C_ONLY,
	LP8557_COMBINED1,	/* pwm + i2c after the shaper block */
	LP8557_COMBINED2,	/* pwm + i2c before the shaper block */
};

struct lp855x_rom_data {
	u8 addr;
	u8 val;
};

/**
 * struct lp855x_platform_data
 * @name : Backlight driver name. If it is not defined, default name is set.
 * @device_control : value of DEVICE CONTROL register
 * @initial_brightness : initial value of backlight brightness
 * @period_ns : platform specific pwm period value. unit is nano.
		Only valid when mode is PWM_BASED.
 * @size_program : total size of lp855x_rom_data
 * @rom_data : list of new eeprom/eprom registers
 */
struct lp855x_platform_data {
	const char *name;
	u8 device_control;
	u8 initial_brightness;
	unsigned int period_ns;
	int size_program;
	struct lp855x_rom_data *rom_data;
};

#endif