1 /*
2  * Samsung Exynos4 SoC series FIMC-IS slave interface driver
3  *
4  * Error log interface functions
5  *
6  * Copyright (C) 2011 - 2013 Samsung Electronics Co., Ltd.
7  *
8  * Authors: Younghwan Joo <yhwan.joo@samsung.com>
9  *          Sylwester Nawrocki <s.nawrocki@samsung.com>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License version 2 as
13  * published by the Free Software Foundation.
14  */
15 
16 #include "fimc-is-errno.h"
17 
fimc_is_param_strerr(unsigned int error)18 const char *fimc_is_param_strerr(unsigned int error)
19 {
20 	switch (error) {
21 	case ERROR_COMMON_CMD:
22 		return "ERROR_COMMON_CMD: Invalid Command";
23 	case ERROR_COMMON_PARAMETER:
24 		return "ERROR_COMMON_PARAMETER: Invalid Parameter";
25 	case ERROR_COMMON_SETFILE_LOAD:
26 		return "ERROR_COMMON_SETFILE_LOAD: Illegal Setfile Loading";
27 	case ERROR_COMMON_SETFILE_ADJUST:
28 		return "ERROR_COMMON_SETFILE_ADJUST: Setfile isn't adjusted";
29 	case ERROR_COMMON_SETFILE_INDEX:
30 		return "ERROR_COMMON_SETFILE_INDEX: Invalid setfile index";
31 	case ERROR_COMMON_INPUT_PATH:
32 		return "ERROR_COMMON_INPUT_PATH: Input path can be changed in ready state";
33 	case ERROR_COMMON_INPUT_INIT:
34 		return "ERROR_COMMON_INPUT_INIT: IP can not start if input path is not set";
35 	case ERROR_COMMON_OUTPUT_PATH:
36 		return "ERROR_COMMON_OUTPUT_PATH: Output path can be changed in ready state (stop)";
37 	case ERROR_COMMON_OUTPUT_INIT:
38 		return "ERROR_COMMON_OUTPUT_INIT: IP can not start if output path is not set";
39 	case ERROR_CONTROL_BYPASS:
40 		return "ERROR_CONTROL_BYPASS";
41 	case ERROR_OTF_INPUT_FORMAT:
42 		return "ERROR_OTF_INPUT_FORMAT: Invalid format  (DRC: YUV444, FD: YUV444, 422, 420)";
43 	case ERROR_OTF_INPUT_WIDTH:
44 		return "ERROR_OTF_INPUT_WIDTH: Invalid width (DRC: 128~8192, FD: 32~8190)";
45 	case ERROR_OTF_INPUT_HEIGHT:
46 		return "ERROR_OTF_INPUT_HEIGHT: Invalid bit-width (DRC: 8~12bits, FD: 8bit)";
47 	case ERROR_OTF_INPUT_BIT_WIDTH:
48 		return "ERROR_OTF_INPUT_BIT_WIDTH: Invalid bit-width (DRC: 8~12bits, FD: 8bit)";
49 	case ERROR_DMA_INPUT_WIDTH:
50 		return "ERROR_DMA_INPUT_WIDTH: Invalid width (DRC: 128~8192, FD: 32~8190)";
51 	case ERROR_DMA_INPUT_HEIGHT:
52 		return "ERROR_DMA_INPUT_HEIGHT: Invalid height (DRC: 64~8192, FD: 16~8190)";
53 	case ERROR_DMA_INPUT_FORMAT:
54 		return "ERROR_DMA_INPUT_FORMAT: Invalid format (DRC: YUV444 or YUV422, FD: YUV444,422,420)";
55 	case ERROR_DMA_INPUT_BIT_WIDTH:
56 		return "ERROR_DMA_INPUT_BIT_WIDTH: Invalid bit-width (DRC: 8~12bits, FD: 8bit)";
57 	case ERROR_DMA_INPUT_ORDER:
58 		return "ERROR_DMA_INPUT_ORDER: Invalid order(DRC: YYCbCr,YCbYCr,FD:NO,YYCbCr,YCbYCr,CbCr,CrCb)";
59 	case ERROR_DMA_INPUT_PLANE:
60 		return "ERROR_DMA_INPUT_PLANE: Invalid palne (DRC: 3, FD: 1, 2, 3)";
61 	case ERROR_OTF_OUTPUT_WIDTH:
62 		return "ERROR_OTF_OUTPUT_WIDTH: Invalid width (DRC: 128~8192)";
63 	case ERROR_OTF_OUTPUT_HEIGHT:
64 		return "ERROR_OTF_OUTPUT_HEIGHT: Invalid height (DRC: 64~8192)";
65 	case ERROR_OTF_OUTPUT_FORMAT:
66 		return "ERROR_OTF_OUTPUT_FORMAT: Invalid format (DRC: YUV444)";
67 	case ERROR_OTF_OUTPUT_BIT_WIDTH:
68 		return "ERROR_OTF_OUTPUT_BIT_WIDTH: Invalid bit-width (DRC: 8~12bits, FD: 8bit)";
69 	case ERROR_DMA_OUTPUT_WIDTH:
70 		return "ERROR_DMA_OUTPUT_WIDTH";
71 	case ERROR_DMA_OUTPUT_HEIGHT:
72 		return "ERROR_DMA_OUTPUT_HEIGHT";
73 	case ERROR_DMA_OUTPUT_FORMAT:
74 		return "ERROR_DMA_OUTPUT_FORMAT";
75 	case ERROR_DMA_OUTPUT_BIT_WIDTH:
76 		return "ERROR_DMA_OUTPUT_BIT_WIDTH";
77 	case ERROR_DMA_OUTPUT_PLANE:
78 		return "ERROR_DMA_OUTPUT_PLANE";
79 	case ERROR_DMA_OUTPUT_ORDER:
80 		return "ERROR_DMA_OUTPUT_ORDER";
81 
82 	/* Sensor Error(100~199) */
83 	case ERROR_SENSOR_I2C_FAIL:
84 		return "ERROR_SENSOR_I2C_FAIL";
85 	case ERROR_SENSOR_INVALID_FRAMERATE:
86 		return "ERROR_SENSOR_INVALID_FRAMERATE";
87 	case ERROR_SENSOR_INVALID_EXPOSURETIME:
88 		return "ERROR_SENSOR_INVALID_EXPOSURETIME";
89 	case ERROR_SENSOR_INVALID_SIZE:
90 		return "ERROR_SENSOR_INVALID_SIZE";
91 	case ERROR_SENSOR_INVALID_SETTING:
92 		return "ERROR_SENSOR_INVALID_SETTING";
93 	case ERROR_SENSOR_ACTURATOR_INIT_FAIL:
94 		return "ERROR_SENSOR_ACTURATOR_INIT_FAIL";
95 	case ERROR_SENSOR_INVALID_AF_POS:
96 		return "ERROR_SENSOR_INVALID_AF_POS";
97 	case ERROR_SENSOR_UNSUPPORT_FUNC:
98 		return "ERROR_SENSOR_UNSUPPORT_FUNC";
99 	case ERROR_SENSOR_UNSUPPORT_PERI:
100 		return "ERROR_SENSOR_UNSUPPORT_PERI";
101 	case ERROR_SENSOR_UNSUPPORT_AF:
102 		return "ERROR_SENSOR_UNSUPPORT_AF";
103 
104 	/* ISP Error (200~299) */
105 	case ERROR_ISP_AF_BUSY:
106 		return "ERROR_ISP_AF_BUSY";
107 	case ERROR_ISP_AF_INVALID_COMMAND:
108 		return "ERROR_ISP_AF_INVALID_COMMAND";
109 	case ERROR_ISP_AF_INVALID_MODE:
110 		return "ERROR_ISP_AF_INVALID_MODE";
111 
112 	/* DRC Error (300~399) */
113 	/* FD Error  (400~499) */
114 	case ERROR_FD_CONFIG_MAX_NUMBER_STATE:
115 		return "ERROR_FD_CONFIG_MAX_NUMBER_STATE";
116 	case ERROR_FD_CONFIG_MAX_NUMBER_INVALID:
117 		return "ERROR_FD_CONFIG_MAX_NUMBER_INVALID";
118 	case ERROR_FD_CONFIG_YAW_ANGLE_STATE:
119 		return "ERROR_FD_CONFIG_YAW_ANGLE_STATE";
120 	case ERROR_FD_CONFIG_YAW_ANGLE_INVALID:
121 		return "ERROR_FD_CONFIG_YAW_ANGLE_INVALID\n";
122 	case ERROR_FD_CONFIG_ROLL_ANGLE_STATE:
123 		return "ERROR_FD_CONFIG_ROLL_ANGLE_STATE";
124 	case ERROR_FD_CONFIG_ROLL_ANGLE_INVALID:
125 		return "ERROR_FD_CONFIG_ROLL_ANGLE_INVALID";
126 	case ERROR_FD_CONFIG_SMILE_MODE_INVALID:
127 		return "ERROR_FD_CONFIG_SMILE_MODE_INVALID";
128 	case ERROR_FD_CONFIG_BLINK_MODE_INVALID:
129 		return "ERROR_FD_CONFIG_BLINK_MODE_INVALID";
130 	case ERROR_FD_CONFIG_EYES_DETECT_INVALID:
131 		return "ERROR_FD_CONFIG_EYES_DETECT_INVALID";
132 	case ERROR_FD_CONFIG_MOUTH_DETECT_INVALID:
133 		return "ERROR_FD_CONFIG_MOUTH_DETECT_INVALID";
134 	case ERROR_FD_CONFIG_ORIENTATION_STATE:
135 		return "ERROR_FD_CONFIG_ORIENTATION_STATE";
136 	case ERROR_FD_CONFIG_ORIENTATION_INVALID:
137 		return "ERROR_FD_CONFIG_ORIENTATION_INVALID";
138 	case ERROR_FD_CONFIG_ORIENTATION_VALUE_INVALID:
139 		return "ERROR_FD_CONFIG_ORIENTATION_VALUE_INVALID";
140 	case ERROR_FD_RESULT:
141 		return "ERROR_FD_RESULT";
142 	case ERROR_FD_MODE:
143 		return "ERROR_FD_MODE";
144 	default:
145 		return "Unknown";
146 	}
147 }
148 
fimc_is_strerr(unsigned int error)149 const char *fimc_is_strerr(unsigned int error)
150 {
151 	error &= ~IS_ERROR_TIME_OUT_FLAG;
152 
153 	switch (error) {
154 	/* General */
155 	case IS_ERROR_INVALID_COMMAND:
156 		return "IS_ERROR_INVALID_COMMAND";
157 	case IS_ERROR_REQUEST_FAIL:
158 		return "IS_ERROR_REQUEST_FAIL";
159 	case IS_ERROR_INVALID_SCENARIO:
160 		return "IS_ERROR_INVALID_SCENARIO";
161 	case IS_ERROR_INVALID_SENSORID:
162 		return "IS_ERROR_INVALID_SENSORID";
163 	case IS_ERROR_INVALID_MODE_CHANGE:
164 		return "IS_ERROR_INVALID_MODE_CHANGE";
165 	case IS_ERROR_INVALID_MAGIC_NUMBER:
166 		return "IS_ERROR_INVALID_MAGIC_NUMBER";
167 	case IS_ERROR_INVALID_SETFILE_HDR:
168 		return "IS_ERROR_INVALID_SETFILE_HDR";
169 	case IS_ERROR_BUSY:
170 		return "IS_ERROR_BUSY";
171 	case IS_ERROR_SET_PARAMETER:
172 		return "IS_ERROR_SET_PARAMETER";
173 	case IS_ERROR_INVALID_PATH:
174 		return "IS_ERROR_INVALID_PATH";
175 	case IS_ERROR_OPEN_SENSOR_FAIL:
176 		return "IS_ERROR_OPEN_SENSOR_FAIL";
177 	case IS_ERROR_ENTRY_MSG_THREAD_DOWN:
178 		return "IS_ERROR_ENTRY_MSG_THREAD_DOWN";
179 	case IS_ERROR_ISP_FRAME_END_NOT_DONE:
180 		return "IS_ERROR_ISP_FRAME_END_NOT_DONE";
181 	case IS_ERROR_DRC_FRAME_END_NOT_DONE:
182 		return "IS_ERROR_DRC_FRAME_END_NOT_DONE";
183 	case IS_ERROR_SCALERC_FRAME_END_NOT_DONE:
184 		return "IS_ERROR_SCALERC_FRAME_END_NOT_DONE";
185 	case IS_ERROR_ODC_FRAME_END_NOT_DONE:
186 		return "IS_ERROR_ODC_FRAME_END_NOT_DONE";
187 	case IS_ERROR_DIS_FRAME_END_NOT_DONE:
188 		return "IS_ERROR_DIS_FRAME_END_NOT_DONE";
189 	case IS_ERROR_TDNR_FRAME_END_NOT_DONE:
190 		return "IS_ERROR_TDNR_FRAME_END_NOT_DONE";
191 	case IS_ERROR_SCALERP_FRAME_END_NOT_DONE:
192 		return "IS_ERROR_SCALERP_FRAME_END_NOT_DONE";
193 	case IS_ERROR_WAIT_STREAM_OFF_NOT_DONE:
194 		return "IS_ERROR_WAIT_STREAM_OFF_NOT_DONE";
195 	case IS_ERROR_NO_MSG_IS_RECEIVED:
196 		return "IS_ERROR_NO_MSG_IS_RECEIVED";
197 	case IS_ERROR_SENSOR_MSG_FAIL:
198 		return "IS_ERROR_SENSOR_MSG_FAIL";
199 	case IS_ERROR_ISP_MSG_FAIL:
200 		return "IS_ERROR_ISP_MSG_FAIL";
201 	case IS_ERROR_DRC_MSG_FAIL:
202 		return "IS_ERROR_DRC_MSG_FAIL";
203 	case IS_ERROR_LHFD_MSG_FAIL:
204 		return "IS_ERROR_LHFD_MSG_FAIL";
205 	case IS_ERROR_UNKNOWN:
206 		return "IS_ERROR_UNKNOWN";
207 
208 	/* Sensor */
209 	case IS_ERROR_SENSOR_PWRDN_FAIL:
210 		return "IS_ERROR_SENSOR_PWRDN_FAIL";
211 
212 	/* ISP */
213 	case IS_ERROR_ISP_PWRDN_FAIL:
214 		return "IS_ERROR_ISP_PWRDN_FAIL";
215 	case IS_ERROR_ISP_MULTIPLE_INPUT:
216 		return "IS_ERROR_ISP_MULTIPLE_INPUT";
217 	case IS_ERROR_ISP_ABSENT_INPUT:
218 		return "IS_ERROR_ISP_ABSENT_INPUT";
219 	case IS_ERROR_ISP_ABSENT_OUTPUT:
220 		return "IS_ERROR_ISP_ABSENT_OUTPUT";
221 	case IS_ERROR_ISP_NONADJACENT_OUTPUT:
222 		return "IS_ERROR_ISP_NONADJACENT_OUTPUT";
223 	case IS_ERROR_ISP_FORMAT_MISMATCH:
224 		return "IS_ERROR_ISP_FORMAT_MISMATCH";
225 	case IS_ERROR_ISP_WIDTH_MISMATCH:
226 		return "IS_ERROR_ISP_WIDTH_MISMATCH";
227 	case IS_ERROR_ISP_HEIGHT_MISMATCH:
228 		return "IS_ERROR_ISP_HEIGHT_MISMATCH";
229 	case IS_ERROR_ISP_BITWIDTH_MISMATCH:
230 		return "IS_ERROR_ISP_BITWIDTH_MISMATCH";
231 	case IS_ERROR_ISP_FRAME_END_TIME_OUT:
232 		return "IS_ERROR_ISP_FRAME_END_TIME_OUT";
233 
234 	/* DRC */
235 	case IS_ERROR_DRC_PWRDN_FAIL:
236 		return "IS_ERROR_DRC_PWRDN_FAIL";
237 	case IS_ERROR_DRC_MULTIPLE_INPUT:
238 		return "IS_ERROR_DRC_MULTIPLE_INPUT";
239 	case IS_ERROR_DRC_ABSENT_INPUT:
240 		return "IS_ERROR_DRC_ABSENT_INPUT";
241 	case IS_ERROR_DRC_NONADJACENT_INPUT:
242 		return "IS_ERROR_DRC_NONADJACENT_INPUT";
243 	case IS_ERROR_DRC_ABSENT_OUTPUT:
244 		return "IS_ERROR_DRC_ABSENT_OUTPUT";
245 	case IS_ERROR_DRC_NONADJACENT_OUTPUT:
246 		return "IS_ERROR_DRC_NONADJACENT_OUTPUT";
247 	case IS_ERROR_DRC_FORMAT_MISMATCH:
248 		return "IS_ERROR_DRC_FORMAT_MISMATCH";
249 	case IS_ERROR_DRC_WIDTH_MISMATCH:
250 		return "IS_ERROR_DRC_WIDTH_MISMATCH";
251 	case IS_ERROR_DRC_HEIGHT_MISMATCH:
252 		return "IS_ERROR_DRC_HEIGHT_MISMATCH";
253 	case IS_ERROR_DRC_BITWIDTH_MISMATCH:
254 		return "IS_ERROR_DRC_BITWIDTH_MISMATCH";
255 	case IS_ERROR_DRC_FRAME_END_TIME_OUT:
256 		return "IS_ERROR_DRC_FRAME_END_TIME_OUT";
257 
258 	/* FD */
259 	case IS_ERROR_FD_PWRDN_FAIL:
260 		return "IS_ERROR_FD_PWRDN_FAIL";
261 	case IS_ERROR_FD_MULTIPLE_INPUT:
262 		return "IS_ERROR_FD_MULTIPLE_INPUT";
263 	case IS_ERROR_FD_ABSENT_INPUT:
264 		return "IS_ERROR_FD_ABSENT_INPUT";
265 	case IS_ERROR_FD_NONADJACENT_INPUT:
266 		return "IS_ERROR_FD_NONADJACENT_INPUT";
267 	case IS_ERROR_LHFD_FRAME_END_TIME_OUT:
268 		return "IS_ERROR_LHFD_FRAME_END_TIME_OUT";
269 	default:
270 		return "Unknown";
271 	}
272 }
273