aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/staging/media/atomisp/include/media/lm3554.h
blob: 03a916ade531e17e8f9c9235aef7384098e30a52 (plain) (blame)
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
/*
 * include/media/lm3554.h
 *
 * Copyright (c) 2010-2012 Intel Corporation. All Rights Reserved.
 *
 * 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.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 *
 */
#ifndef _LM3554_H_
#define _LM3554_H_

#include <linux/videodev2.h>
#include <media/v4l2-subdev.h>

#define LM3554_ID      3554

#define	v4l2_queryctrl_entry_integer(_id, _name,\
		_minimum, _maximum, _step, \
		_default_value, _flags)	\
	{\
		.id = (_id), \
		.type = V4L2_CTRL_TYPE_INTEGER, \
		.name = _name, \
		.minimum = (_minimum), \
		.maximum = (_maximum), \
		.step = (_step), \
		.default_value = (_default_value),\
		.flags = (_flags),\
	}
#define	v4l2_queryctrl_entry_boolean(_id, _name,\
		_default_value, _flags)	\
	{\
		.id = (_id), \
		.type = V4L2_CTRL_TYPE_BOOLEAN, \
		.name = _name, \
		.minimum = 0, \
		.maximum = 1, \
		.step = 1, \
		.default_value = (_default_value),\
		.flags = (_flags),\
	}

#define	s_ctrl_id_entry_integer(_id, _name, \
		_minimum, _maximum, _step, \
		_default_value, _flags, \
		_s_ctrl, _g_ctrl)	\
	{\
		.qc = v4l2_queryctrl_entry_integer(_id, _name,\
				_minimum, _maximum, _step,\
				_default_value, _flags), \
		.s_ctrl = _s_ctrl, \
		.g_ctrl = _g_ctrl, \
	}

#define	s_ctrl_id_entry_boolean(_id, _name, \
		_default_value, _flags, \
		_s_ctrl, _g_ctrl)	\
	{\
		.qc = v4l2_queryctrl_entry_boolean(_id, _name,\
				_default_value, _flags), \
		.s_ctrl = _s_ctrl, \
		.g_ctrl = _g_ctrl, \
	}

/* Value settings for Flash Time-out Duration*/
#define LM3554_DEFAULT_TIMEOUT          512U
#define LM3554_MIN_TIMEOUT              32U
#define LM3554_MAX_TIMEOUT              1024U
#define LM3554_TIMEOUT_STEPSIZE         32U

/* Flash modes */
#define LM3554_MODE_SHUTDOWN            0
#define LM3554_MODE_INDICATOR           1
#define LM3554_MODE_TORCH               2
#define LM3554_MODE_FLASH               3

/* timer delay time */
#define LM3554_TIMER_DELAY		5

/* Percentage <-> value macros */
#define LM3554_MIN_PERCENT                   0U
#define LM3554_MAX_PERCENT                   100U
#define LM3554_CLAMP_PERCENTAGE(val) \
	clamp(val, LM3554_MIN_PERCENT, LM3554_MAX_PERCENT)

#define LM3554_VALUE_TO_PERCENT(v, step)     (((((unsigned long)(v)) * (step)) + 50) / 100)
#define LM3554_PERCENT_TO_VALUE(p, step)     (((((unsigned long)(p)) * 100) + (step >> 1)) / (step))

/* Product specific limits
 * TODO: get these from platform data */
#define LM3554_FLASH_MAX_LVL   0x0F /* 1191mA */

/* Flash brightness, input is percentage, output is [0..15] */
#define LM3554_FLASH_STEP	\
	((100ul * (LM3554_MAX_PERCENT) + ((LM3554_FLASH_MAX_LVL) >> 1)) / ((LM3554_FLASH_MAX_LVL)))
#define LM3554_FLASH_DEFAULT_BRIGHTNESS \
	LM3554_VALUE_TO_PERCENT(13, LM3554_FLASH_STEP)

/* Torch brightness, input is percentage, output is [0..7] */
#define LM3554_TORCH_STEP                    1250
#define LM3554_TORCH_DEFAULT_BRIGHTNESS \
	LM3554_VALUE_TO_PERCENT(2, LM3554_TORCH_STEP)

/* Indicator brightness, input is percentage, output is [0..3] */
#define LM3554_INDICATOR_STEP                2500
#define LM3554_INDICATOR_DEFAULT_BRIGHTNESS \
	LM3554_VALUE_TO_PERCENT(1, LM3554_INDICATOR_STEP)

/*
 * lm3554_platform_data - Flash controller platform data
 */
struct lm3554_platform_data {
	int gpio_torch;
	int gpio_strobe;
	int gpio_reset;

	unsigned int current_limit;
	unsigned int envm_tx2;
	unsigned int tx2_polarity;
};

#endif /* _LM3554_H_ */