• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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