aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/samsung_duallcd/smart_dimming_s6e63m0.h
blob: 7e45d98404e8039ec68b4dc2ab6614790d7179ea (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
/* linux/drivers/video/samsung/smartdimming.h
 *
 * Copyright (c) 2010 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com

 * Samsung Smart Dimming for OCTA
 *
 * Minwoo Kim, <minwoo7945.kim@samsung.com>
 *
*/


#ifndef __SMART_DIMMING_H__
#define __SMART_DIMMING_H__


#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/mutex.h>
#include <linux/wait.h>
#include <linux/ctype.h>

#define MAX_GRADATION		300
#define PANEL_ID_MAX		3
//#define GAMMA_300CD_MAX		16

#define V1_VOLTAGE_COUNT        141
#define V19_VOLTAGE_COUNT       256
#define V43_VOLTAGE_COUNT       256
#define V87_VOLTAGE_COUNT       256
#define V171_VOLTAGE_COUNT      256
#define V255_VOLTAGE_COUNT      381


enum {
	CI_RED		= 0,
	CI_GREEN	= 1,
	CI_BLUE		= 2,
	CI_MAX		= 3,
};


enum {
	IV_1		= 0,
	IV_19		= 1,
	IV_43		= 2,
	IV_87		= 3,
	IV_171		= 4,
	IV_255		= 5,
	IV_MAX		= 6,
	IV_TABLE_MAX	= 7,
};


enum {
	AD_IV0		= 0,
	AD_IV1		= 1,
	AD_IV19		= 2,
	AD_IV43		= 3,
	AD_IV87		= 4,
	AD_IV171	= 5,
	AD_IV255	= 6,
	AD_IVMAX	= 7,
};


struct str_voltage_entry {
	u32 v[CI_MAX];
};


struct str_table_info {
	/* et : start gray value */
	u8 st;
	/* end gray value, st + count */
	u8 et;
	u8 count;
	const u8 *offset_table;
	/* rv : ratio value */
	u32 rv;
};


struct str_flookup_table {
	u16 entry;
	u16 count;
};


struct str_smart_dim {
	u8 panelid[PANEL_ID_MAX];
	s16 mtp[CI_MAX][IV_MAX];
	struct str_voltage_entry ve[256];
	const u8 *default_gamma;
	struct str_table_info t_info[IV_TABLE_MAX];
	const struct str_flookup_table *flooktbl;
	const u32 *g22_tbl;
	const u32 *g300_gra_tbl;
	u32 adjust_volt[CI_MAX][AD_IVMAX];
};

struct rgb_offset_info {
	unsigned int	candela_idx;
	unsigned int	gray;
	unsigned int	rgb;
	int		offset;
};


int init_table_info(struct str_smart_dim *smart);
u8 calc_voltage_table(struct str_smart_dim *smart, const u8 *mtp);
u32 calc_gamma_table(struct str_smart_dim *smart, u32 gv, u8 result[]);
#endif