1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef ATOMISP_PLATFORM_H_
19#define ATOMISP_PLATFORM_H_
20
21#include <asm/intel-family.h>
22#include <asm/processor.h>
23
24#include <linux/i2c.h>
25#include <media/v4l2-subdev.h>
26#include "atomisp.h"
27
28#define MAX_SENSORS_PER_PORT 4
29#define MAX_STREAMS_PER_CHANNEL 2
30
31#define CAMERA_MODULE_ID_LEN 64
32
33enum atomisp_bayer_order {
34 atomisp_bayer_order_grbg,
35 atomisp_bayer_order_rggb,
36 atomisp_bayer_order_bggr,
37 atomisp_bayer_order_gbrg
38};
39
40enum atomisp_input_stream_id {
41 ATOMISP_INPUT_STREAM_GENERAL = 0,
42 ATOMISP_INPUT_STREAM_CAPTURE = 0,
43 ATOMISP_INPUT_STREAM_POSTVIEW,
44 ATOMISP_INPUT_STREAM_PREVIEW,
45 ATOMISP_INPUT_STREAM_VIDEO,
46 ATOMISP_INPUT_STREAM_NUM
47};
48
49enum atomisp_input_format {
50 ATOMISP_INPUT_FORMAT_YUV420_8_LEGACY,
51 ATOMISP_INPUT_FORMAT_YUV420_8,
52 ATOMISP_INPUT_FORMAT_YUV420_10,
53 ATOMISP_INPUT_FORMAT_YUV420_16,
54 ATOMISP_INPUT_FORMAT_YUV422_8,
55 ATOMISP_INPUT_FORMAT_YUV422_10,
56 ATOMISP_INPUT_FORMAT_YUV422_16,
57 ATOMISP_INPUT_FORMAT_RGB_444,
58 ATOMISP_INPUT_FORMAT_RGB_555,
59 ATOMISP_INPUT_FORMAT_RGB_565,
60 ATOMISP_INPUT_FORMAT_RGB_666,
61 ATOMISP_INPUT_FORMAT_RGB_888,
62 ATOMISP_INPUT_FORMAT_RAW_6,
63 ATOMISP_INPUT_FORMAT_RAW_7,
64 ATOMISP_INPUT_FORMAT_RAW_8,
65 ATOMISP_INPUT_FORMAT_RAW_10,
66 ATOMISP_INPUT_FORMAT_RAW_12,
67 ATOMISP_INPUT_FORMAT_RAW_14,
68 ATOMISP_INPUT_FORMAT_RAW_16,
69 ATOMISP_INPUT_FORMAT_BINARY_8,
70
71
72
73
74
75 ATOMISP_INPUT_FORMAT_GENERIC_SHORT1,
76 ATOMISP_INPUT_FORMAT_GENERIC_SHORT2,
77 ATOMISP_INPUT_FORMAT_GENERIC_SHORT3,
78 ATOMISP_INPUT_FORMAT_GENERIC_SHORT4,
79 ATOMISP_INPUT_FORMAT_GENERIC_SHORT5,
80 ATOMISP_INPUT_FORMAT_GENERIC_SHORT6,
81 ATOMISP_INPUT_FORMAT_GENERIC_SHORT7,
82 ATOMISP_INPUT_FORMAT_GENERIC_SHORT8,
83
84
85
86 ATOMISP_INPUT_FORMAT_YUV420_8_SHIFT,
87
88 ATOMISP_INPUT_FORMAT_YUV420_10_SHIFT,
89
90
91
92
93 ATOMISP_INPUT_FORMAT_EMBEDDED,
94
95
96
97
98
99
100 ATOMISP_INPUT_FORMAT_USER_DEF1,
101 ATOMISP_INPUT_FORMAT_USER_DEF2,
102 ATOMISP_INPUT_FORMAT_USER_DEF3,
103 ATOMISP_INPUT_FORMAT_USER_DEF4,
104 ATOMISP_INPUT_FORMAT_USER_DEF5,
105 ATOMISP_INPUT_FORMAT_USER_DEF6,
106 ATOMISP_INPUT_FORMAT_USER_DEF7,
107 ATOMISP_INPUT_FORMAT_USER_DEF8,
108};
109
110#define N_ATOMISP_INPUT_FORMAT (ATOMISP_INPUT_FORMAT_USER_DEF8 + 1)
111
112enum intel_v4l2_subdev_type {
113 RAW_CAMERA = 1,
114 SOC_CAMERA = 2,
115 CAMERA_MOTOR = 3,
116 LED_FLASH = 4,
117 XENON_FLASH = 5,
118 FILE_INPUT = 6,
119 TEST_PATTERN = 7,
120};
121
122struct intel_v4l2_subdev_id {
123 char name[17];
124 enum intel_v4l2_subdev_type type;
125 enum atomisp_camera_port port;
126};
127
128struct intel_v4l2_subdev_i2c_board_info {
129 struct i2c_board_info board_info;
130 int i2c_adapter_id;
131};
132
133struct intel_v4l2_subdev_table {
134 struct intel_v4l2_subdev_i2c_board_info v4l2_subdev;
135 enum intel_v4l2_subdev_type type;
136 enum atomisp_camera_port port;
137 struct v4l2_subdev *subdev;
138};
139
140struct atomisp_platform_data {
141 struct intel_v4l2_subdev_table *subdevs;
142};
143
144
145struct atomisp_sensor_caps {
146
147 int stream_num;
148 bool is_slave;
149};
150
151
152struct atomisp_camera_caps {
153
154 int sensor_num;
155
156 struct atomisp_sensor_caps sensor[MAX_SENSORS_PER_PORT];
157
158 bool multi_stream_ctrl;
159};
160
161
162
163
164
165
166struct atomisp_isys_config_info {
167 u8 input_format;
168 u16 width;
169 u16 height;
170};
171
172struct atomisp_input_stream_info {
173 enum atomisp_input_stream_id stream;
174 u8 enable;
175
176
177 u8 ch_id;
178
179
180 u8 isys_configs;
181
182
183
184
185
186 struct atomisp_isys_config_info isys_info[MAX_STREAMS_PER_CHANNEL];
187};
188
189struct camera_vcm_control;
190struct camera_vcm_ops {
191 int (*power_up)(struct v4l2_subdev *sd, struct camera_vcm_control *vcm);
192 int (*power_down)(struct v4l2_subdev *sd,
193 struct camera_vcm_control *vcm);
194 int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc,
195 struct camera_vcm_control *vcm);
196 int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl,
197 struct camera_vcm_control *vcm);
198 int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl,
199 struct camera_vcm_control *vcm);
200};
201
202struct camera_vcm_control {
203 char camera_module[CAMERA_MODULE_ID_LEN];
204 struct camera_vcm_ops *ops;
205 struct list_head list;
206};
207
208struct camera_sensor_platform_data {
209 int (*flisclk_ctrl)(struct v4l2_subdev *subdev, int flag);
210 int (*csi_cfg)(struct v4l2_subdev *subdev, int flag);
211
212
213
214
215
216 int (*gpio0_ctrl)(struct v4l2_subdev *subdev, int on);
217 int (*gpio1_ctrl)(struct v4l2_subdev *subdev, int on);
218 int (*v1p8_ctrl)(struct v4l2_subdev *subdev, int on);
219 int (*v2p8_ctrl)(struct v4l2_subdev *subdev, int on);
220 int (*v1p2_ctrl)(struct v4l2_subdev *subdev, int on);
221 struct camera_vcm_control *(*get_vcm_ctrl)(struct v4l2_subdev *subdev,
222 char *module_id);
223};
224
225struct camera_mipi_info {
226 enum atomisp_camera_port port;
227 unsigned int num_lanes;
228 enum atomisp_input_format input_format;
229 enum atomisp_bayer_order raw_bayer_order;
230 struct atomisp_sensor_mode_data data;
231 enum atomisp_input_format metadata_format;
232 u32 metadata_width;
233 u32 metadata_height;
234 const u32 *metadata_effective_width;
235};
236
237const struct atomisp_platform_data *atomisp_get_platform_data(void);
238const struct atomisp_camera_caps *atomisp_get_default_camera_caps(void);
239
240
241#define __IS_SOC(x) (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && \
242 boot_cpu_data.x86 == 6 && \
243 boot_cpu_data.x86_model == (x))
244#define __IS_SOCS(x,y) (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL && \
245 boot_cpu_data.x86 == 6 && \
246 (boot_cpu_data.x86_model == (x) || \
247 boot_cpu_data.x86_model == (y)))
248
249#define IS_MFLD __IS_SOC(INTEL_FAM6_ATOM_SALTWELL_MID)
250#define IS_BYT __IS_SOC(INTEL_FAM6_ATOM_SILVERMONT)
251#define IS_CHT __IS_SOC(INTEL_FAM6_ATOM_AIRMONT)
252#define IS_MRFD __IS_SOC(INTEL_FAM6_ATOM_SILVERMONT_MID)
253#define IS_MOFD __IS_SOC(INTEL_FAM6_ATOM_AIRMONT_MID)
254
255
256#define IS_ISP2401 __IS_SOCS(INTEL_FAM6_ATOM_AIRMONT, \
257 INTEL_FAM6_ATOM_AIRMONT_MID)
258
259#endif
260