1 /*
2 * configs for sensor list.
3 *
4 * Copyright (c) 2020 by Allwinnertech Co., Ltd. http://www.allwinnertech.com
5 *
6 * Authors: Li Huiyu <lihuiyu@allwinnertech.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13 #include "sensor_list.h"
14
15 #ifdef CONFIG_SENSOR_LIST_MODULE
16
17 struct sensor_list rear_sl = {
18 .used = REAR_USED,
19 .csi_sel = REAR_CSI_SEL,
20 .device_sel = REAR_DEVICE_SEL,
21 .sensor_bus_sel = REAR_SENSOR_TWI_ID,
22 .inst = {
23 {
24 .cam_name = REAR_SENSOR_NAME0,
25 .cam_addr = REAR_SENSOR_TWI_ADDR0,
26 .cam_type = REAR_SENSOR_TYPE0,
27 .vflip = REAR_SENSOR_VFLIP0,
28 .hflip = REAR_SENSOR_HFLIP0,
29 .act_used = REAR_ACT_USED0,
30 .act_name = REAR_ACT_NAME0,
31 .act_addr = REAR_ACT_TWI_ADDR0,
32 },
33
34 {
35 .cam_name = REAR_SENSOR_NAME1,
36 .cam_addr = REAR_SENSOR_TWI_ADDR1,
37 .cam_type = REAR_SENSOR_TYPE1,
38 .vflip = REAR_SENSOR_VFLIP1,
39 .hflip = REAR_SENSOR_HFLIP1,
40 .act_used = REAR_ACT_USED1,
41 .act_name = REAR_ACT_NAME1,
42 .act_addr = REAR_ACT_TWI_ADDR1,
43 },
44
45 {
46 .cam_name = REAR_SENSOR_NAME2,
47 .cam_addr = REAR_SENSOR_TWI_ADDR2,
48 .cam_type = REAR_SENSOR_TYPE2,
49 .vflip = REAR_SENSOR_VFLIP2,
50 .hflip = REAR_SENSOR_HFLIP2,
51 .act_used = REAR_ACT_USED2,
52 .act_name = REAR_ACT_NAME2,
53 .act_addr = REAR_ACT_TWI_ADDR2,
54 },
55 },
56 };
57
58 struct sensor_list front_sl = {
59 .used = FRONT_USED,
60 .csi_sel = FRONT_CSI_SEL,
61 .device_sel = FRONT_DEVICE_SEL,
62 .sensor_bus_sel = FRONT_SENSOR_TWI_ID,
63 .inst = {
64 {
65 .cam_name = FRONT_SENSOR_NAME0,
66 .cam_addr = FRONT_SENSOR_TWI_ADDR0,
67 .cam_type = FRONT_SENSOR_TYPE0,
68 .vflip = FRONT_SENSOR_VFLIP0,
69 .hflip = FRONT_SENSOR_HFLIP0,
70 .act_used = FRONT_ACT_USED0,
71 .act_name = FRONT_ACT_NAME0,
72 .act_addr = FRONT_ACT_TWI_ADDR0,
73 },
74
75 {
76 .cam_name = FRONT_SENSOR_NAME1,
77 .cam_addr = FRONT_SENSOR_TWI_ADDR1,
78 .cam_type = FRONT_SENSOR_TYPE1,
79 .vflip = FRONT_SENSOR_VFLIP1,
80 .hflip = FRONT_SENSOR_HFLIP1,
81 .act_used = FRONT_ACT_USED1,
82 .act_name = FRONT_ACT_NAME1,
83 .act_addr = FRONT_ACT_TWI_ADDR1,
84 },
85
86 {
87 .cam_name = FRONT_SENSOR_NAME2,
88 .cam_addr = FRONT_SENSOR_TWI_ADDR2,
89 .cam_type = FRONT_SENSOR_TYPE2,
90 .vflip = FRONT_SENSOR_VFLIP2,
91 .hflip = FRONT_SENSOR_HFLIP2,
92 .act_used = FRONT_ACT_USED2,
93 .act_name = FRONT_ACT_NAME2,
94 .act_addr = FRONT_ACT_TWI_ADDR2,
95 },
96 },
97 };
98
set_used(struct sensor_list * sensors,struct sensor_list * source)99 static void set_used(struct sensor_list *sensors,
100 struct sensor_list *source)
101 {
102 sensors->used = source->used;
103 vin_log(VIN_LOG_CONFIG, "sensors->used = %d!\n", sensors->used);
104 }
set_csi_sel(struct sensor_list * sensors,struct sensor_list * source)105 static void set_csi_sel(struct sensor_list *sensors,
106 struct sensor_list *source)
107 {
108 sensors->csi_sel = source->csi_sel;
109 vin_log(VIN_LOG_CONFIG, "sensors->csi_sel = %d!\n",
110 sensors->csi_sel);
111
112 }
set_device_sel(struct sensor_list * sensors,struct sensor_list * source)113 static void set_device_sel(struct sensor_list *sensors,
114 struct sensor_list *source)
115 {
116 sensors->device_sel = source->device_sel;
117 vin_log(VIN_LOG_CONFIG, "sensors->device_sel = %d!\n",
118 sensors->device_sel);
119
120 }
set_sensor_twi_id(struct sensor_list * sensors,struct sensor_list * source)121 static void set_sensor_twi_id(struct sensor_list *sensors,
122 struct sensor_list *source)
123 {
124 sensors->sensor_bus_sel = source->sensor_bus_sel;
125 vin_log(VIN_LOG_CONFIG, "sensors->sensor_bus_sel = %d!\n",
126 sensors->sensor_bus_sel);
127 }
128
__set_sensor_inst(struct sensor_list * sensors,struct sensor_list * source,unsigned int cnt)129 static void __set_sensor_inst(struct sensor_list *sensors,
130 struct sensor_list *source, unsigned int cnt)
131 {
132 struct sensor_instance *inst;
133 struct sensor_instance *inst_source;
134
135 if (cnt >= MAX_DETECT_NUM)
136 return;
137 inst = &sensors->inst[cnt];
138 inst_source = &source->inst[cnt];
139
140 if (strcmp(inst_source->cam_name, ""))
141 strcpy(inst->cam_name, inst_source->cam_name);
142 if (strcmp(inst_source->act_name, ""))
143 strcpy(inst->act_name, inst_source->act_name);
144 if (inst_source->cam_addr != 0)
145 inst->cam_addr = inst_source->cam_addr;
146 if (inst_source->act_addr != 0)
147 inst->act_addr = inst_source->act_addr;
148
149 inst->cam_type = inst_source->cam_type;
150 inst->act_used = inst_source->act_used;
151 inst->vflip = inst_source->vflip;
152 inst->hflip = inst_source->hflip;
153
154 vin_log(VIN_LOG_CONFIG, "sensors->cam_name = %s!\n", inst->cam_name);
155 vin_log(VIN_LOG_CONFIG, "sensors->cam_addr = 0x%x!\n", inst->cam_addr);
156 vin_log(VIN_LOG_CONFIG, "sensors->act_name = %s!\n", inst->act_name);
157 vin_log(VIN_LOG_CONFIG, "sensors->act_addr = 0x%x!\n", inst->act_addr);
158 vin_log(VIN_LOG_CONFIG, "sensors->hflip = %d!\n", inst->hflip);
159 vin_log(VIN_LOG_CONFIG, "sensors->vflip = %d!\n", inst->vflip);
160 vin_log(VIN_LOG_CONFIG, "sensors->cam_type = %d!\n", inst->cam_type);
161 vin_log(VIN_LOG_CONFIG, "sensors->act_used = %d!\n", inst->act_used);
162
163 }
164
set_sensor_inst(struct sensor_list * sensors,struct sensor_list * source,unsigned int det_num)165 static void set_sensor_inst(struct sensor_list *sensors,
166 struct sensor_list *source, unsigned int det_num)
167 {
168 int i;
169
170 if (det_num > MAX_DETECT_NUM)
171 det_num = MAX_DETECT_NUM;
172
173 for (i = 0; i < det_num; i++) {
174 __set_sensor_inst(sensors, source, i);
175 }
176 }
177
178 static struct fetch_sl fetch_list[] = {
179 {1, set_used},
180 {1, set_csi_sel},
181 {1, set_device_sel},
182 {1, set_sensor_twi_id},
183 };
184
185 #define FETCH_SIZE (ARRAY_SIZE(fetch_list))
186
sensor_list_get_parms(struct sensor_list * sensors,char * pos)187 int sensor_list_get_parms(struct sensor_list *sensors, char *pos)
188 {
189 struct sensor_list *source;
190 int i;
191
192 if (strcmp(pos, "rear") && strcmp(pos, "REAR") && strcmp(pos, "FRONT")
193 && strcmp(pos, "front")) {
194 vin_err("Camera position config ERR! POS = %s\n", pos);
195 return -EINVAL;
196 }
197 if (strcmp(pos, "rear") == 0 || strcmp(pos, "REAR") == 0) {
198 source = &rear_sl;
199 sensors->detect_num = REAR_DETECT_NUM;
200 } else {
201 source = &front_sl;
202 sensors->detect_num = FRONT_DETECT_NUM;
203 }
204
205 for (i = 0; i < FETCH_SIZE; i++) {
206 if (fetch_list[i].flag)
207 fetch_list[i].fun(sensors, source);
208 }
209 set_sensor_inst(sensors, source, sensors->detect_num);
210
211 return 0;
212 }
213 #else
214
sensor_list_get_parms(struct sensor_list * sensors,char * pos)215 int sensor_list_get_parms(struct sensor_list *sensors, char *pos)
216 {
217 return 0;
218 }
219 #endif
220
221