stfisp_setfile.c 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2021 StarFive Technology Co., Ltd.
  4. */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <assert.h>
  9. #include <getopt.h>
  10. #ifndef VERSION
  11. #define VERSION "v0.0.1"
  12. #endif
  13. #define OV4689_SETFILE "ov4689_stf_isp_fw.bin"
  14. #define OV4689_DUMP_SETFILE "ov4689_stf_isp_fw_dump.bin"
  15. #define SC2235_SETFILE "sc2235_stf_isp_fw.bin"
  16. #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
  17. typedef unsigned int u32;
  18. typedef struct {
  19. u32 addr;
  20. u32 val;
  21. u32 mask;
  22. u32 delay_ms;
  23. } regval_t;
  24. struct reg_table {
  25. const regval_t *regval;
  26. int regval_num;
  27. };
  28. // 0x11BB, 0 1 0 1 2 3 2 3, R Gr R Gr Gb B Gb B
  29. static const regval_t isp_sc2235_reg_config_list[] = {
  30. {0x00000014, 0x00000008, 0, 0},
  31. // {0x00000018, 0x000011BB, 0, 0},
  32. {0x00000A1C, 0x00000030, 0, 0},
  33. // {0x0000001C, 0x00000000, 0, 0},
  34. // {0x00000020, 0x0437077F, 0, 0},
  35. // {0x00000A0C, 0x04380780, 0, 0},
  36. // {0x00000A80, 0xF9000000, 0, 0},
  37. // {0x00000A84, 0xF91FA400, 0, 0},
  38. // {0x00000A88, 0x00000780, 0, 0},
  39. {0x00000A8C, 0x00000010, 0, 0},
  40. {0x00000A90, 0x00000000, 0, 0},
  41. {0x00000AC4, 0x00000000, 0, 0},
  42. {0x00000E40, 0x0000004D, 0, 0},
  43. {0x00000E44, 0x00000096, 0, 0},
  44. {0x00000E48, 0x0000001D, 0, 0},
  45. {0x00000E4C, 0x000001DA, 0, 0},
  46. {0x00000E50, 0x000001B6, 0, 0},
  47. {0x00000E54, 0x00000070, 0, 0},
  48. {0x00000E58, 0x0000009D, 0, 0},
  49. {0x00000E5C, 0x0000017C, 0, 0},
  50. {0x00000E60, 0x000001E6, 0, 0},
  51. {0x00000010, 0x00000000, 0, 0},
  52. {0x00000A08, 0x10000022, 0xFFFFFFF, 0},
  53. {0x00000044, 0x00000000, 0, 0},
  54. {0x00000008, 0x00010005, 0, 0},
  55. {0x00000A00, 0x00120002, 0, 0},
  56. {0x00000A00, 0x00120000, 0, 0},
  57. {0x00000A00, 0x00120001, 0, 0},
  58. {0x00000008, 0x00010004, 0, 0},
  59. {0x00000000, 0x00000001, 0, 0},
  60. };
  61. // 0x11BB, 0 1 0 1 2 3 2 3, R Gr R Gr Gb B Gb B
  62. #if 0
  63. static const regval_t isp_1080p_reg_config_list[] = {
  64. {0x00000014, 0x0000000D, 0, 0},
  65. // {0x00000018, 0x000011BB, 0, 0},
  66. {0x00000A1C, 0x00000032, 0, 0},
  67. // {0x0000001C, 0x00000000, 0, 0},
  68. // {0x00000020, 0x0437077F, 0, 0},
  69. // {0x00000A0C, 0x04380780, 0, 0},
  70. // {0x00000A80, 0xF9000000, 0, 0},
  71. // {0x00000A84, 0xF91FA400, 0, 0},
  72. // {0x00000A88, 0x00000780, 0, 0},
  73. {0x00000A8C, 0x00000000, 0, 0},
  74. {0x00000A90, 0x00000000, 0, 0},
  75. {0x00000E40, 0x0000004C, 0, 0},
  76. {0x00000E44, 0x00000097, 0, 0},
  77. {0x00000E48, 0x0000001D, 0, 0},
  78. {0x00000E4C, 0x000001D5, 0, 0},
  79. {0x00000E50, 0x000001AC, 0, 0},
  80. {0x00000E54, 0x00000080, 0, 0},
  81. {0x00000E58, 0x00000080, 0, 0},
  82. {0x00000E5C, 0x00000194, 0, 0},
  83. {0x00000E60, 0x000001EC, 0, 0},
  84. {0x00000280, 0x00000000, 0, 0},
  85. {0x00000284, 0x00000000, 0, 0},
  86. {0x00000288, 0x00000000, 0, 0},
  87. {0x0000028C, 0x00000000, 0, 0},
  88. {0x00000290, 0x00000000, 0, 0},
  89. {0x00000294, 0x00000000, 0, 0},
  90. {0x00000298, 0x00000000, 0, 0},
  91. {0x0000029C, 0x00000000, 0, 0},
  92. {0x000002A0, 0x00000000, 0, 0},
  93. {0x000002A4, 0x00000000, 0, 0},
  94. {0x000002A8, 0x00000000, 0, 0},
  95. {0x000002AC, 0x00000000, 0, 0},
  96. {0x000002B0, 0x00000000, 0, 0},
  97. {0x000002B4, 0x00000000, 0, 0},
  98. {0x000002B8, 0x00000000, 0, 0},
  99. {0x000002BC, 0x00000000, 0, 0},
  100. {0x000002C0, 0x00F000F0, 0, 0},
  101. {0x000002C4, 0x00F000F0, 0, 0},
  102. {0x000002C8, 0x00800080, 0, 0},
  103. {0x000002CC, 0x00800080, 0, 0},
  104. {0x000002D0, 0x00800080, 0, 0},
  105. {0x000002D4, 0x00800080, 0, 0},
  106. {0x000002D8, 0x00B000B0, 0, 0},
  107. {0x000002DC, 0x00B000B0, 0, 0},
  108. {0x00000E00, 0x24000000, 0, 0},
  109. {0x00000E04, 0x159500A5, 0, 0},
  110. {0x00000E08, 0x0F9900EE, 0, 0},
  111. {0x00000E0C, 0x0CE40127, 0, 0},
  112. {0x00000E10, 0x0B410157, 0, 0},
  113. {0x00000E14, 0x0A210181, 0, 0},
  114. {0x00000E18, 0x094B01A8, 0, 0},
  115. {0x00000E1C, 0x08A401CC, 0, 0},
  116. {0x00000E20, 0x081D01EE, 0, 0},
  117. {0x00000E24, 0x06B20263, 0, 0},
  118. {0x00000E28, 0x05D802C7, 0, 0},
  119. {0x00000E2C, 0x05420320, 0, 0},
  120. {0x00000E30, 0x04D30370, 0, 0},
  121. {0x00000E34, 0x047C03BB, 0, 0},
  122. {0x00000E38, 0x043703FF, 0, 0},
  123. {0x00000010, 0x00000080, 0, 0},
  124. {0x00000A08, 0x10000032, 0xFFFFFFF, 0},
  125. {0x00000A00, 0x00120002, 0, 0},
  126. {0x00000A00, 0x00120000, 0, 0},
  127. {0x00000A50, 0x00000002, 0, 0},
  128. {0x00000A00, 0x00120001, 0, 0},
  129. {0x00000008, 0x00010000, 0, 0},
  130. {0x00000008, 0x0002000A, 0, 0},
  131. {0x00000000, 0x00000001, 0, 0},
  132. };
  133. #else
  134. /* isp v3
  135. static const regval_t isp_1080p_reg_config_list[] = {
  136. {0x00000014, 0x0000000D, 0, 0},
  137. // {0x00000018, 0x000011BB, 0, 0},
  138. {0x00000A1C, 0x00000032, 0, 0},
  139. // {0x0000001C, 0x00000000, 0, 0},
  140. // {0x00000020, 0x0437077F, 0, 0},
  141. // {0x00000A0C, 0x04380780, 0, 0},
  142. // {0x00000A80, 0xF9000000, 0, 0},
  143. // {0x00000A84, 0xF91FA400, 0, 0},
  144. // {0x00000A88, 0x00000780, 0, 0},
  145. {0x00000A8C, 0x00000000, 0, 0},
  146. {0x00000A90, 0x00000000, 0, 0},
  147. {0x00000E40, 0x0000004C, 0, 0},
  148. {0x00000E44, 0x00000097, 0, 0},
  149. {0x00000E48, 0x0000001D, 0, 0},
  150. {0x00000E4C, 0x000001D5, 0, 0},
  151. {0x00000E50, 0x000001AC, 0, 0},
  152. {0x00000E54, 0x00000080, 0, 0},
  153. {0x00000E58, 0x00000080, 0, 0},
  154. {0x00000E5C, 0x00000194, 0, 0},
  155. {0x00000E60, 0x000001EC, 0, 0},
  156. {0x00000280, 0x00000000, 0, 0},
  157. {0x00000284, 0x00000000, 0, 0},
  158. {0x00000288, 0x00000000, 0, 0},
  159. {0x0000028C, 0x00000000, 0, 0},
  160. {0x00000290, 0x00000000, 0, 0},
  161. {0x00000294, 0x00000000, 0, 0},
  162. {0x00000298, 0x00000000, 0, 0},
  163. {0x0000029C, 0x00000000, 0, 0},
  164. {0x000002A0, 0x00000000, 0, 0},
  165. {0x000002A4, 0x00000000, 0, 0},
  166. {0x000002A8, 0x00000000, 0, 0},
  167. {0x000002AC, 0x00000000, 0, 0},
  168. {0x000002B0, 0x00000000, 0, 0},
  169. {0x000002B4, 0x00000000, 0, 0},
  170. {0x000002B8, 0x00000000, 0, 0},
  171. {0x000002BC, 0x00000000, 0, 0},
  172. {0x000002C0, 0x009D009D, 0, 0},
  173. {0x000002C4, 0x009D009D, 0, 0},
  174. {0x000002C8, 0x00800080, 0, 0},
  175. {0x000002CC, 0x00800080, 0, 0},
  176. {0x000002D0, 0x00800080, 0, 0},
  177. {0x000002D4, 0x00800080, 0, 0},
  178. {0x000002D8, 0x00AF00AF, 0, 0},
  179. {0x000002DC, 0x00AF00AF, 0, 0},
  180. {0x00000E00, 0x24000000, 0, 0},
  181. {0x00000E04, 0x159500A5, 0, 0},
  182. {0x00000E08, 0x0F9900EE, 0, 0},
  183. {0x00000E0C, 0x0CE40127, 0, 0},
  184. {0x00000E10, 0x0B410157, 0, 0},
  185. {0x00000E14, 0x0A210181, 0, 0},
  186. {0x00000E18, 0x094B01A8, 0, 0},
  187. {0x00000E1C, 0x08A401CC, 0, 0},
  188. {0x00000E20, 0x081D01EE, 0, 0},
  189. {0x00000E24, 0x06B20263, 0, 0},
  190. {0x00000E28, 0x05D802C7, 0, 0},
  191. {0x00000E2C, 0x05420320, 0, 0},
  192. {0x00000E30, 0x04D30370, 0, 0},
  193. {0x00000E34, 0x047C03BB, 0, 0},
  194. {0x00000E38, 0x043703FF, 0, 0},
  195. {0x00000010, 0x00000080, 0, 0},
  196. {0x00000A08, 0x10000032, 0xFFFFFFF, 0},
  197. {0x00000A00, 0x00120002, 0, 0},
  198. {0x00000A00, 0x00120000, 0, 0},
  199. {0x00000A50, 0x00000002, 0, 0},
  200. {0x00000A00, 0x00120001, 0, 0},
  201. {0x00000008, 0x00010000, 0, 0},
  202. {0x00000008, 0x0002000A, 0, 0},
  203. {0x00000000, 0x00000001, 0, 0},
  204. };
  205. */
  206. // 20210802 v02
  207. /*
  208. static const regval_t isp_1080p_reg_config_list[] = {
  209. {0x00000014, 0x0000000D, 0, 0},
  210. // {0x00000018, 0x000011BB, 0, 0},
  211. {0x00000A1C, 0x00000032, 0, 0},
  212. // {0x0000001C, 0x00000000, 0, 0},
  213. // {0x00000020, 0x0437077F, 0, 0},
  214. // {0x00000A0C, 0x04380780, 0, 0},
  215. // {0x00000A80, 0xF9000000, 0, 0},
  216. // {0x00000A84, 0xF91FA400, 0, 0},
  217. // {0x00000A88, 0x00000780, 0, 0},
  218. {0x00000A8C, 0x00000000, 0, 0},
  219. {0x00000A90, 0x00000000, 0, 0},
  220. {0x00000E40, 0x0000004C, 0, 0},
  221. {0x00000E44, 0x00000097, 0, 0},
  222. {0x00000E48, 0x0000001D, 0, 0},
  223. {0x00000E4C, 0x000001D5, 0, 0},
  224. {0x00000E50, 0x000001AC, 0, 0},
  225. {0x00000E54, 0x00000080, 0, 0},
  226. {0x00000E58, 0x00000080, 0, 0},
  227. {0x00000E5C, 0x00000194, 0, 0},
  228. {0x00000E60, 0x000001EC, 0, 0},
  229. {0x00000280, 0x00000000, 0, 0},
  230. {0x00000284, 0x00000000, 0, 0},
  231. {0x00000288, 0x00000000, 0, 0},
  232. {0x0000028C, 0x00000000, 0, 0},
  233. {0x00000290, 0x00000000, 0, 0},
  234. {0x00000294, 0x00000000, 0, 0},
  235. {0x00000298, 0x00000000, 0, 0},
  236. {0x0000029C, 0x00000000, 0, 0},
  237. {0x000002A0, 0x00000000, 0, 0},
  238. {0x000002A4, 0x00000000, 0, 0},
  239. {0x000002A8, 0x00000000, 0, 0},
  240. {0x000002AC, 0x00000000, 0, 0},
  241. {0x000002B0, 0x00000000, 0, 0},
  242. {0x000002B4, 0x00000000, 0, 0},
  243. {0x000002B8, 0x00000000, 0, 0},
  244. {0x000002BC, 0x00000000, 0, 0},
  245. {0x000002C0, 0x009D009D, 0, 0},
  246. {0x000002C4, 0x009D009D, 0, 0},
  247. {0x000002C8, 0x00800080, 0, 0},
  248. {0x000002CC, 0x00800080, 0, 0},
  249. {0x000002D0, 0x00800080, 0, 0},
  250. {0x000002D4, 0x00800080, 0, 0},
  251. {0x000002D8, 0x00AF00AF, 0, 0},
  252. {0x000002DC, 0x00AF00AF, 0, 0},
  253. {0x00000E00, 0x24000000, 0, 0},
  254. {0x00000E04, 0x159500A5, 0, 0},
  255. {0x00000E08, 0x0F9900EE, 0, 0},
  256. {0x00000E0C, 0x0CE40127, 0, 0},
  257. {0x00000E10, 0x0B410157, 0, 0},
  258. {0x00000E14, 0x0A210181, 0, 0},
  259. {0x00000E18, 0x094B01A8, 0, 0},
  260. {0x00000E1C, 0x08A401CC, 0, 0},
  261. {0x00000E20, 0x081D01EE, 0, 0},
  262. {0x00000E24, 0x06B20263, 0, 0},
  263. {0x00000E28, 0x05D802C7, 0, 0},
  264. {0x00000E2C, 0x05420320, 0, 0},
  265. {0x00000E30, 0x04D30370, 0, 0},
  266. {0x00000E34, 0x047C03BB, 0, 0},
  267. {0x00000E38, 0x043703FF, 0, 0},
  268. {0x00000010, 0x00000080, 0, 0},
  269. {0x00000A08, 0x10000022, 0xFFFFFFF, 0},
  270. {0x00000A00, 0x00120002, 0, 0},
  271. {0x00000A00, 0x00120000, 0, 0},
  272. {0x00000A50, 0x00000002, 0, 0},
  273. {0x00000A00, 0x00120001, 0, 0},
  274. {0x00000008, 0x00010000, 0, 0},
  275. {0x00000008, 0x0002000A, 0, 0},
  276. {0x00000000, 0x00000001, 0, 0},
  277. };
  278. */
  279. // gammaoff_v01
  280. /*
  281. static const regval_t isp_1080p_reg_config_list[] = {
  282. {0x00000014, 0x0000000D, 0, 0},
  283. // {0x00000018, 0x000011BB, 0, 0},
  284. {0x00000A1C, 0x00000032, 0, 0},
  285. // {0x0000001C, 0x00000000, 0, 0},
  286. // {0x00000020, 0x0437077F, 0, 0},
  287. // {0x00000A0C, 0x04380780, 0, 0},
  288. // {0x00000A80, 0xF9000000, 0, 0},
  289. // {0x00000A84, 0xF91FA400, 0, 0},
  290. // {0x00000A88, 0x00000780, 0, 0},
  291. {0x00000A8C, 0x00000000, 0, 0},
  292. {0x00000A90, 0x00000000, 0, 0},
  293. {0x00000E40, 0x0000004C, 0, 0},
  294. {0x00000E44, 0x00000097, 0, 0},
  295. {0x00000E48, 0x0000001D, 0, 0},
  296. {0x00000E4C, 0x000001D5, 0, 0},
  297. {0x00000E50, 0x000001AC, 0, 0},
  298. {0x00000E54, 0x00000080, 0, 0},
  299. {0x00000E58, 0x00000080, 0, 0},
  300. {0x00000E5C, 0x00000194, 0, 0},
  301. {0x00000E60, 0x000001EC, 0, 0},
  302. {0x00000280, 0x00000000, 0, 0},
  303. {0x00000284, 0x00000000, 0, 0},
  304. {0x00000288, 0x00000000, 0, 0},
  305. {0x0000028C, 0x00000000, 0, 0},
  306. {0x00000290, 0x00000000, 0, 0},
  307. {0x00000294, 0x00000000, 0, 0},
  308. {0x00000298, 0x00000000, 0, 0},
  309. {0x0000029C, 0x00000000, 0, 0},
  310. {0x000002A0, 0x00000000, 0, 0},
  311. {0x000002A4, 0x00000000, 0, 0},
  312. {0x000002A8, 0x00000000, 0, 0},
  313. {0x000002AC, 0x00000000, 0, 0},
  314. {0x000002B0, 0x00000000, 0, 0},
  315. {0x000002B4, 0x00000000, 0, 0},
  316. {0x000002B8, 0x00000000, 0, 0},
  317. {0x000002BC, 0x00000000, 0, 0},
  318. {0x000002C0, 0x00A500A5, 0, 0},
  319. {0x000002C4, 0x00A500A5, 0, 0},
  320. {0x000002C8, 0x00800080, 0, 0},
  321. {0x000002CC, 0x00800080, 0, 0},
  322. {0x000002D0, 0x00800080, 0, 0},
  323. {0x000002D4, 0x00800080, 0, 0},
  324. {0x000002D8, 0x00A800A8, 0, 0},
  325. {0x000002DC, 0x00A800A8, 0, 0},
  326. {0x00000E00, 0x24000000, 0, 0},
  327. {0x00000E04, 0x159500A5, 0, 0},
  328. {0x00000E08, 0x0F9900EE, 0, 0},
  329. {0x00000E0C, 0x0CE40127, 0, 0},
  330. {0x00000E10, 0x0B410157, 0, 0},
  331. {0x00000E14, 0x0A210181, 0, 0},
  332. {0x00000E18, 0x094B01A8, 0, 0},
  333. {0x00000E1C, 0x08A401CC, 0, 0},
  334. {0x00000E20, 0x081D01EE, 0, 0},
  335. {0x00000E24, 0x06B20263, 0, 0},
  336. {0x00000E28, 0x05D802C7, 0, 0},
  337. {0x00000E2C, 0x05420320, 0, 0},
  338. {0x00000E30, 0x04D30370, 0, 0},
  339. {0x00000E34, 0x047C03BB, 0, 0},
  340. {0x00000E38, 0x043703FF, 0, 0},
  341. {0x00000010, 0x00000080, 0, 0},
  342. {0x00000A08, 0x10000022, 0xFFFFFFF, 0},
  343. {0x00000A00, 0x00120002, 0, 0},
  344. {0x00000A00, 0x00120000, 0, 0},
  345. {0x00000A50, 0x00000002, 0, 0},
  346. {0x00000A00, 0x00120001, 0, 0},
  347. {0x00000008, 0x00010000, 0, 0},
  348. {0x00000008, 0x0002000A, 0, 0},
  349. {0x00000000, 0x00000001, 0, 0},
  350. };
  351. */
  352. //gamaon_v01
  353. /*
  354. static const regval_t isp_1080p_reg_config_list[] = {
  355. {0x00000014, 0x0000000D, 0, 0},
  356. // {0x00000018, 0x000011BB, 0, 0},
  357. {0x00000A1C, 0x00000032, 0, 0},
  358. // {0x0000001C, 0x00000000, 0, 0},
  359. // {0x00000020, 0x0437077F, 0, 0},
  360. // {0x00000A0C, 0x04380780, 0, 0},
  361. // {0x00000A80, 0xF9000000, 0, 0},
  362. // {0x00000A84, 0xF91FA400, 0, 0},
  363. // {0x00000A88, 0x00000780, 0, 0},
  364. {0x00000A8C, 0x00000000, 0, 0},
  365. {0x00000A90, 0x00000000, 0, 0},
  366. {0x00000E40, 0x0000004C, 0, 0},
  367. {0x00000E44, 0x00000097, 0, 0},
  368. {0x00000E48, 0x0000001D, 0, 0},
  369. {0x00000E4C, 0x000001D5, 0, 0},
  370. {0x00000E50, 0x000001AC, 0, 0},
  371. {0x00000E54, 0x00000080, 0, 0},
  372. {0x00000E58, 0x00000080, 0, 0},
  373. {0x00000E5C, 0x00000194, 0, 0},
  374. {0x00000E60, 0x000001EC, 0, 0},
  375. {0x00000280, 0x00000000, 0, 0},
  376. {0x00000284, 0x00000000, 0, 0},
  377. {0x00000288, 0x00000000, 0, 0},
  378. {0x0000028C, 0x00000000, 0, 0},
  379. {0x00000290, 0x00000000, 0, 0},
  380. {0x00000294, 0x00000000, 0, 0},
  381. {0x00000298, 0x00000000, 0, 0},
  382. {0x0000029C, 0x00000000, 0, 0},
  383. {0x000002A0, 0x00000000, 0, 0},
  384. {0x000002A4, 0x00000000, 0, 0},
  385. {0x000002A8, 0x00000000, 0, 0},
  386. {0x000002AC, 0x00000000, 0, 0},
  387. {0x000002B0, 0x00000000, 0, 0},
  388. {0x000002B4, 0x00000000, 0, 0},
  389. {0x000002B8, 0x00000000, 0, 0},
  390. {0x000002BC, 0x00000000, 0, 0},
  391. {0x000002C0, 0x00A500A5, 0, 0},
  392. {0x000002C4, 0x00A500A5, 0, 0},
  393. {0x000002C8, 0x00800080, 0, 0},
  394. {0x000002CC, 0x00800080, 0, 0},
  395. {0x000002D0, 0x00800080, 0, 0},
  396. {0x000002D4, 0x00800080, 0, 0},
  397. {0x000002D8, 0x00A800A8, 0, 0},
  398. {0x000002DC, 0x00A800A8, 0, 0},
  399. {0x00000E00, 0x24000000, 0, 0},
  400. {0x00000E04, 0x159500A5, 0, 0},
  401. {0x00000E08, 0x0F9900EE, 0, 0},
  402. {0x00000E0C, 0x0CE40127, 0, 0},
  403. {0x00000E10, 0x0B410157, 0, 0},
  404. {0x00000E14, 0x0A210181, 0, 0},
  405. {0x00000E18, 0x094B01A8, 0, 0},
  406. {0x00000E1C, 0x08A401CC, 0, 0},
  407. {0x00000E20, 0x081D01EE, 0, 0},
  408. {0x00000E24, 0x06B20263, 0, 0},
  409. {0x00000E28, 0x05D802C7, 0, 0},
  410. {0x00000E2C, 0x05420320, 0, 0},
  411. {0x00000E30, 0x04D30370, 0, 0},
  412. {0x00000E34, 0x047C03BB, 0, 0},
  413. {0x00000E38, 0x043703FF, 0, 0},
  414. {0x00000010, 0x00000080, 0, 0},
  415. {0x00000A08, 0x10000032, 0xFFFFFFF, 0},
  416. {0x00000A00, 0x00120002, 0, 0},
  417. {0x00000A00, 0x00120000, 0, 0},
  418. {0x00000A50, 0x00000002, 0, 0},
  419. {0x00000A00, 0x00120001, 0, 0},
  420. {0x00000008, 0x00010000, 0, 0},
  421. {0x00000008, 0x0002000A, 0, 0},
  422. {0x00000000, 0x00000001, 0, 0},
  423. };*/
  424. //v02 gama off
  425. static const regval_t isp_1080p_reg_config_list[] = {
  426. {0x00000014, 0x0000000D, 0, 0},
  427. // {0x00000018, 0x000011BB, 0, 0},
  428. {0x00000A1C, 0x00000032, 0, 0},
  429. // {0x0000001C, 0x00000000, 0, 0},
  430. // {0x00000020, 0x0437077F, 0, 0},
  431. // {0x00000A0C, 0x04380780, 0, 0},
  432. // {0x00000A80, 0xF9000000, 0, 0},
  433. // {0x00000A84, 0xF91FA400, 0, 0},
  434. // {0x00000A88, 0x00000780, 0, 0},
  435. {0x00000A8C, 0x00000000, 0, 0},
  436. {0x00000A90, 0x00000000, 0, 0},
  437. {0x00000E40, 0x0000004C, 0, 0},
  438. {0x00000E44, 0x00000097, 0, 0},
  439. {0x00000E48, 0x0000001D, 0, 0},
  440. {0x00000E4C, 0x000001D5, 0, 0},
  441. {0x00000E50, 0x000001AC, 0, 0},
  442. {0x00000E54, 0x00000080, 0, 0},
  443. {0x00000E58, 0x00000080, 0, 0},
  444. {0x00000E5C, 0x00000194, 0, 0},
  445. {0x00000E60, 0x000001EC, 0, 0},
  446. {0x00000280, 0x00000000, 0, 0},
  447. {0x00000284, 0x00000000, 0, 0},
  448. {0x00000288, 0x00000000, 0, 0},
  449. {0x0000028C, 0x00000000, 0, 0},
  450. {0x00000290, 0x00000000, 0, 0},
  451. {0x00000294, 0x00000000, 0, 0},
  452. {0x00000298, 0x00000000, 0, 0},
  453. {0x0000029C, 0x00000000, 0, 0},
  454. {0x000002A0, 0x00000000, 0, 0},
  455. {0x000002A4, 0x00000000, 0, 0},
  456. {0x000002A8, 0x00000000, 0, 0},
  457. {0x000002AC, 0x00000000, 0, 0},
  458. {0x000002B0, 0x00000000, 0, 0},
  459. {0x000002B4, 0x00000000, 0, 0},
  460. {0x000002B8, 0x00000000, 0, 0},
  461. {0x000002BC, 0x00000000, 0, 0},
  462. {0x000002C0, 0x00C000C0, 0, 0},
  463. {0x000002C4, 0x00C000C0, 0, 0},
  464. {0x000002C8, 0x00800080, 0, 0},
  465. {0x000002CC, 0x00800080, 0, 0},
  466. {0x000002D0, 0x00800080, 0, 0},
  467. {0x000002D4, 0x00800080, 0, 0},
  468. {0x000002D8, 0x00C400C4, 0, 0},
  469. {0x000002DC, 0x00C400C4, 0, 0},
  470. {0x00000E00, 0x24000000, 0, 0},
  471. {0x00000E04, 0x159500A5, 0, 0},
  472. {0x00000E08, 0x0F9900EE, 0, 0},
  473. {0x00000E0C, 0x0CE40127, 0, 0},
  474. {0x00000E10, 0x0B410157, 0, 0},
  475. {0x00000E14, 0x0A210181, 0, 0},
  476. {0x00000E18, 0x094B01A8, 0, 0},
  477. {0x00000E1C, 0x08A401CC, 0, 0},
  478. {0x00000E20, 0x081D01EE, 0, 0},
  479. {0x00000E24, 0x06B20263, 0, 0},
  480. {0x00000E28, 0x05D802C7, 0, 0},
  481. {0x00000E2C, 0x05420320, 0, 0},
  482. {0x00000E30, 0x04D30370, 0, 0},
  483. {0x00000E34, 0x047C03BB, 0, 0},
  484. {0x00000E38, 0x043703FF, 0, 0},
  485. {0x00000010, 0x00000080, 0, 0},
  486. {0x00000A08, 0x10000022, 0xFFFFFFF, 0},
  487. {0x00000A00, 0x00120002, 0, 0},
  488. {0x00000A00, 0x00120000, 0, 0},
  489. {0x00000A50, 0x00000002, 0, 0},
  490. {0x00000A00, 0x00120001, 0, 0},
  491. {0x00000008, 0x00010000, 0, 0},
  492. {0x00000008, 0x0002000A, 0, 0},
  493. {0x00000000, 0x00000001, 0, 0},
  494. };
  495. //gama on v2
  496. /*
  497. static const regval_t isp_1080p_reg_config_list[] = {
  498. {0x00000014, 0x0000000D, 0, 0},
  499. // {0x00000018, 0x000011BB, 0, 0},
  500. {0x00000A1C, 0x00000032, 0, 0},
  501. // {0x0000001C, 0x00000000, 0, 0},
  502. // {0x00000020, 0x0437077F, 0, 0},
  503. // {0x00000A0C, 0x04380780, 0, 0},
  504. // {0x00000A80, 0xF9000000, 0, 0},
  505. // {0x00000A84, 0xF91FA400, 0, 0},
  506. // {0x00000A88, 0x00000780, 0, 0},
  507. {0x00000A8C, 0x00000000, 0, 0},
  508. {0x00000A90, 0x00000000, 0, 0},
  509. {0x00000E40, 0x0000004C, 0, 0},
  510. {0x00000E44, 0x00000097, 0, 0},
  511. {0x00000E48, 0x0000001D, 0, 0},
  512. {0x00000E4C, 0x000001D5, 0, 0},
  513. {0x00000E50, 0x000001AC, 0, 0},
  514. {0x00000E54, 0x00000080, 0, 0},
  515. {0x00000E58, 0x00000080, 0, 0},
  516. {0x00000E5C, 0x00000194, 0, 0},
  517. {0x00000E60, 0x000001EC, 0, 0},
  518. {0x00000280, 0x00000000, 0, 0},
  519. {0x00000284, 0x00000000, 0, 0},
  520. {0x00000288, 0x00000000, 0, 0},
  521. {0x0000028C, 0x00000000, 0, 0},
  522. {0x00000290, 0x00000000, 0, 0},
  523. {0x00000294, 0x00000000, 0, 0},
  524. {0x00000298, 0x00000000, 0, 0},
  525. {0x0000029C, 0x00000000, 0, 0},
  526. {0x000002A0, 0x00000000, 0, 0},
  527. {0x000002A4, 0x00000000, 0, 0},
  528. {0x000002A8, 0x00000000, 0, 0},
  529. {0x000002AC, 0x00000000, 0, 0},
  530. {0x000002B0, 0x00000000, 0, 0},
  531. {0x000002B4, 0x00000000, 0, 0},
  532. {0x000002B8, 0x00000000, 0, 0},
  533. {0x000002BC, 0x00000000, 0, 0},
  534. {0x000002C0, 0x00C000C0, 0, 0},
  535. {0x000002C4, 0x00C000C0, 0, 0},
  536. {0x000002C8, 0x00800080, 0, 0},
  537. {0x000002CC, 0x00800080, 0, 0},
  538. {0x000002D0, 0x00800080, 0, 0},
  539. {0x000002D4, 0x00800080, 0, 0},
  540. {0x000002D8, 0x00C400C4, 0, 0},
  541. {0x000002DC, 0x00C400C4, 0, 0},
  542. {0x00000E00, 0x24000000, 0, 0},
  543. {0x00000E04, 0x159500A5, 0, 0},
  544. {0x00000E08, 0x0F9900EE, 0, 0},
  545. {0x00000E0C, 0x0CE40127, 0, 0},
  546. {0x00000E10, 0x0B410157, 0, 0},
  547. {0x00000E14, 0x0A210181, 0, 0},
  548. {0x00000E18, 0x094B01A8, 0, 0},
  549. {0x00000E1C, 0x08A401CC, 0, 0},
  550. {0x00000E20, 0x081D01EE, 0, 0},
  551. {0x00000E24, 0x06B20263, 0, 0},
  552. {0x00000E28, 0x05D802C7, 0, 0},
  553. {0x00000E2C, 0x05420320, 0, 0},
  554. {0x00000E30, 0x04D30370, 0, 0},
  555. {0x00000E34, 0x047C03BB, 0, 0},
  556. {0x00000E38, 0x043703FF, 0, 0},
  557. {0x00000010, 0x00000080, 0, 0},
  558. {0x00000A08, 0x10000032, 0xFFFFFFF, 0},
  559. {0x00000A00, 0x00120002, 0, 0},
  560. {0x00000A00, 0x00120000, 0, 0},
  561. {0x00000A50, 0x00000002, 0, 0},
  562. {0x00000A00, 0x00120001, 0, 0},
  563. {0x00000008, 0x00010000, 0, 0},
  564. {0x00000008, 0x0002000A, 0, 0},
  565. {0x00000000, 0x00000001, 0, 0},
  566. };
  567. */
  568. /* //isp dump raw data
  569. static const regval_t isp_1080p_reg_config_list[] = {
  570. {0x00000014, 0x0000000D, 0, 0},
  571. // {0x00000018, 0x000011BB, 0, 0},
  572. {0x00000A1C, 0x00000032, 0, 0},
  573. // {0x0000001C, 0x00000000, 0, 0},
  574. // {0x00000020, 0x0437077F, 0, 0},
  575. // {0x00000A0C, 0x04380780, 0, 0},
  576. // {0x00000A80, 0xF9000000, 0, 0},
  577. // {0x00000A84, 0xF91FA400, 0, 0},
  578. // {0x00000A88, 0x00000780, 0, 0},
  579. {0x00000024, 0xfb000000, 0, 0}, // Buffer size = 3179520
  580. {0x00000028, 0x00030B80, 0, 0},
  581. {0x00000A8C, 0x00000000, 0, 0},
  582. {0x00000A90, 0x00000000, 0, 0},
  583. {0x00000E40, 0x0000004C, 0, 0},
  584. {0x00000E44, 0x00000097, 0, 0},
  585. {0x00000E48, 0x0000001D, 0, 0},
  586. {0x00000E4C, 0x000001D5, 0, 0},
  587. {0x00000E50, 0x000001AC, 0, 0},
  588. {0x00000E54, 0x00000080, 0, 0},
  589. {0x00000E58, 0x00000080, 0, 0},
  590. {0x00000E5C, 0x00000194, 0, 0},
  591. {0x00000E60, 0x000001EC, 0, 0},
  592. {0x00000280, 0x00000000, 0, 0},
  593. {0x00000284, 0x00000000, 0, 0},
  594. {0x00000288, 0x00000000, 0, 0},
  595. {0x0000028C, 0x00000000, 0, 0},
  596. {0x00000290, 0x00000000, 0, 0},
  597. {0x00000294, 0x00000000, 0, 0},
  598. {0x00000298, 0x00000000, 0, 0},
  599. {0x0000029C, 0x00000000, 0, 0},
  600. {0x000002A0, 0x00000000, 0, 0},
  601. {0x000002A4, 0x00000000, 0, 0},
  602. {0x000002A8, 0x00000000, 0, 0},
  603. {0x000002AC, 0x00000000, 0, 0},
  604. {0x000002B0, 0x00000000, 0, 0},
  605. {0x000002B4, 0x00000000, 0, 0},
  606. {0x000002B8, 0x00000000, 0, 0},
  607. {0x000002BC, 0x00000000, 0, 0},
  608. {0x000002C0, 0x00800080, 0, 0},
  609. {0x000002C4, 0x00800080, 0, 0},
  610. {0x000002C8, 0x00800080, 0, 0},
  611. {0x000002CC, 0x00800080, 0, 0},
  612. {0x000002D0, 0x00800080, 0, 0},
  613. {0x000002D4, 0x00800080, 0, 0},
  614. {0x000002D8, 0x00800080, 0, 0},
  615. {0x000002DC, 0x00800080, 0, 0},
  616. {0x00000E00, 0x24000000, 0, 0},
  617. {0x00000E04, 0x159500A5, 0, 0},
  618. {0x00000E08, 0x0F9900EE, 0, 0},
  619. {0x00000E0C, 0x0CE40127, 0, 0},
  620. {0x00000E10, 0x0B410157, 0, 0},
  621. {0x00000E14, 0x0A210181, 0, 0},
  622. {0x00000E18, 0x094B01A8, 0, 0},
  623. {0x00000E1C, 0x08A401CC, 0, 0},
  624. {0x00000E20, 0x081D01EE, 0, 0},
  625. {0x00000E24, 0x06B20263, 0, 0},
  626. {0x00000E28, 0x05D802C7, 0, 0},
  627. {0x00000E2C, 0x05420320, 0, 0},
  628. {0x00000E30, 0x04D30370, 0, 0},
  629. {0x00000E34, 0x047C03BB, 0, 0},
  630. {0x00000E38, 0x043703FF, 0, 0},
  631. // {0x00000010, 0x00000080, 0, 0},
  632. {0x00000010, 0x00080080, 0, 0},
  633. {0x00000A08, 0x10000032, 0xFFFFFFF, 0},
  634. {0x00000A00, 0x00120002, 0, 0},
  635. {0x00000A00, 0x00120000, 0, 0},
  636. {0x00000A50, 0x00000002, 0, 0},
  637. {0x00000A00, 0x00120001, 0, 0},
  638. {0x00000008, 0x00010000, 0, 0},
  639. {0x00000008, 0x0002000A, 0, 0},
  640. {0x00000000, 0x00000001, 0, 0},
  641. };
  642. */
  643. #endif
  644. static const regval_t isp_dump_1080p_reg_config_list[] = {
  645. {0x00000014, 0x0000000D,0,0},
  646. // {0x00000018, 0x000011BB,0,0},
  647. {0x00000A1C, 0x00000032,0,0},
  648. // {0x0000001C, 0x00000000,0,0},
  649. // {0x00000020, 0x0437077F,0,0},
  650. // {0x00000A0C, 0x04380780,0,0},
  651. // {0x00000A80, 0xF9000000,0,0},
  652. // {0x00000A84, 0xF91FA400,0,0},
  653. {0x00000A88, 0x00000780,0,0},
  654. // {0x00000024, 0xFB000000, 0, 0},// Buffer size = 3179520
  655. {0x00000028, 0x00030B80, 0, 0},
  656. {0x00000A8C, 0x00000000,0,0},
  657. {0x00000A90, 0x00000000,0,0},
  658. {0x00000E40, 0x0000004C,0,0},
  659. {0x00000E44, 0x00000097,0,0},
  660. {0x00000E48, 0x0000001D,0,0},
  661. {0x00000E4C, 0x000001D5,0,0},
  662. {0x00000E50, 0x000001AC,0,0},
  663. {0x00000E54, 0x00000080,0,0},
  664. {0x00000E58, 0x00000080,0,0},
  665. {0x00000E5C, 0x00000194,0,0},
  666. {0x00000E60, 0x000001EC,0,0},
  667. {0x00000280, 0x00000000,0,0},
  668. {0x00000284, 0x00000000,0,0},
  669. {0x00000288, 0x00000000,0,0},
  670. {0x0000028C, 0x00000000,0,0},
  671. {0x00000290, 0x00000000,0,0},
  672. {0x00000294, 0x00000000,0,0},
  673. {0x00000298, 0x00000000,0,0},
  674. {0x0000029C, 0x00000000,0,0},
  675. {0x000002A0, 0x00000000,0,0},
  676. {0x000002A4, 0x00000000,0,0},
  677. {0x000002A8, 0x00000000,0,0},
  678. {0x000002AC, 0x00000000,0,0},
  679. {0x000002B0, 0x00000000,0,0},
  680. {0x000002B4, 0x00000000,0,0},
  681. {0x000002B8, 0x00000000,0,0},
  682. {0x000002BC, 0x00000000,0,0},
  683. {0x000002C0, 0x00800080, 0, 0},
  684. {0x000002C4, 0x00800080, 0, 0},
  685. {0x000002C8, 0x00800080,0,0},
  686. {0x000002CC, 0x00800080,0,0},
  687. {0x000002D0, 0x00800080,0,0},
  688. {0x000002D4, 0x00800080,0,0},
  689. {0x000002D8, 0x00800080, 0, 0},
  690. {0x000002DC, 0x00800080, 0, 0},
  691. {0x00000E00, 0x24000000,0,0},
  692. {0x00000E04, 0x159500A5,0,0},
  693. {0x00000E08, 0x0F9900EE,0,0},
  694. {0x00000E0C, 0x0CE40127,0,0},
  695. {0x00000E10, 0x0B410157,0,0},
  696. {0x00000E14, 0x0A210181,0,0},
  697. {0x00000E18, 0x094B01A8,0,0},
  698. {0x00000E1C, 0x08A401CC,0,0},
  699. {0x00000E20, 0x081D01EE,0,0},
  700. {0x00000E24, 0x06B20263,0,0},
  701. {0x00000E28, 0x05D802C7,0,0},
  702. {0x00000E2C, 0x05420320,0,0},
  703. {0x00000E30, 0x04D30370,0,0},
  704. {0x00000E34, 0x047C03BB,0,0},
  705. {0x00000E38, 0x043703FF,0,0},
  706. {0x00000010, 0x00080080, 0, 0},
  707. {0x00000A08, 0x10000032,0xFFFFFFF,0},
  708. {0x00000A00, 0x00120002,0,0},
  709. {0x00000A00, 0x00120000,0,0},
  710. {0x00000A50, 0x00000002,0,0},
  711. {0x00000A00, 0x00120001,0,0},
  712. {0x00000008, 0x00010000,0,0},
  713. {0x00000008, 0x0002000A,0,0},
  714. {0x00000000, 0x00000001,0,0},
  715. };
  716. static const regval_t isp_imx219_reg_config_list[] = {
  717. {0x00000014, 0x0000000D, 0, 0},
  718. // {0x00000018, 0x000011BB, 0, 0},
  719. {0x00000A1C, 0x00000032, 0, 0},
  720. // {0x0000001C, 0x00000000, 0, 0},
  721. // {0x00000020, 0x0437077F, 0, 0},
  722. // {0x00000A0C, 0x04380780, 0, 0},
  723. // {0x00000A80, 0xF9000000, 0, 0},
  724. // {0x00000A84, 0xF91FA400, 0, 0},
  725. // {0x00000A88, 0x00000780, 0, 0},
  726. {0x00000A8C, 0x00000000, 0, 0},
  727. {0x00000A90, 0x00000000, 0, 0},
  728. {0x00000E40, 0x0000004C, 0, 0},
  729. {0x00000E44, 0x00000097, 0, 0},
  730. {0x00000E48, 0x0000001D, 0, 0},
  731. {0x00000E4C, 0x000001D5, 0, 0},
  732. {0x00000E50, 0x000001AC, 0, 0},
  733. {0x00000E54, 0x00000080, 0, 0},
  734. {0x00000E58, 0x00000080, 0, 0},
  735. {0x00000E5C, 0x00000194, 0, 0},
  736. {0x00000E60, 0x000001EC, 0, 0},
  737. {0x00000280, 0x00000000, 0, 0},
  738. {0x00000284, 0x00000000, 0, 0},
  739. {0x00000288, 0x00000000, 0, 0},
  740. {0x0000028C, 0x00000000, 0, 0},
  741. {0x00000290, 0x00000000, 0, 0},
  742. {0x00000294, 0x00000000, 0, 0},
  743. {0x00000298, 0x00000000, 0, 0},
  744. {0x0000029C, 0x00000000, 0, 0},
  745. {0x000002A0, 0x00000000, 0, 0},
  746. {0x000002A4, 0x00000000, 0, 0},
  747. {0x000002A8, 0x00000000, 0, 0},
  748. {0x000002AC, 0x00000000, 0, 0},
  749. {0x000002B0, 0x00000000, 0, 0},
  750. {0x000002B4, 0x00000000, 0, 0},
  751. {0x000002B8, 0x00000000, 0, 0},
  752. {0x000002BC, 0x00000000, 0, 0},
  753. {0x000002C0, 0x00F000F0, 0, 0},
  754. {0x000002C4, 0x00F000F0, 0, 0},
  755. {0x000002C8, 0x00800080, 0, 0},
  756. {0x000002CC, 0x00800080, 0, 0},
  757. {0x000002D0, 0x00800080, 0, 0},
  758. {0x000002D4, 0x00800080, 0, 0},
  759. {0x000002D8, 0x00B000B0, 0, 0},
  760. {0x000002DC, 0x00B000B0, 0, 0},
  761. {0x00000E00, 0x24000000, 0, 0},
  762. {0x00000E04, 0x159500A5, 0, 0},
  763. {0x00000E08, 0x0F9900EE, 0, 0},
  764. {0x00000E0C, 0x0CE40127, 0, 0},
  765. {0x00000E10, 0x0B410157, 0, 0},
  766. {0x00000E14, 0x0A210181, 0, 0},
  767. {0x00000E18, 0x094B01A8, 0, 0},
  768. {0x00000E1C, 0x08A401CC, 0, 0},
  769. {0x00000E20, 0x081D01EE, 0, 0},
  770. {0x00000E24, 0x06B20263, 0, 0},
  771. {0x00000E28, 0x05D802C7, 0, 0},
  772. {0x00000E2C, 0x05420320, 0, 0},
  773. {0x00000E30, 0x04D30370, 0, 0},
  774. {0x00000E34, 0x047C03BB, 0, 0},
  775. {0x00000E38, 0x043703FF, 0, 0},
  776. {0x00000010, 0x00000080, 0, 0},
  777. {0x00000A08, 0x10000032, 0xFFFFFFF, 0},
  778. {0x00000A00, 0x00120002, 0, 0},
  779. {0x00000A00, 0x00120000, 0, 0},
  780. {0x00000A50, 0x00000002, 0, 0},
  781. {0x00000A00, 0x00120001, 0, 0},
  782. {0x00000008, 0x00010000, 0, 0},
  783. {0x00000008, 0x0002000A, 0, 0},
  784. {0x00000000, 0x00000001, 0, 0},
  785. };
  786. const struct reg_table isp_1920_1080_settings[] = {
  787. {isp_1080p_reg_config_list,
  788. ARRAY_SIZE(isp_1080p_reg_config_list)},
  789. };
  790. const struct reg_table isp_dump_1920_1080_settings[] = {
  791. {isp_dump_1080p_reg_config_list,
  792. ARRAY_SIZE(isp_dump_1080p_reg_config_list)},
  793. };
  794. const struct reg_table isp_sc2235_settings[] = {
  795. {isp_sc2235_reg_config_list,
  796. ARRAY_SIZE(isp_sc2235_reg_config_list)},
  797. };
  798. /**
  799. print usage information
  800. */
  801. static void usage(FILE* fp, int argc, char** argv)
  802. {
  803. fprintf(fp,
  804. "Usage: %s [options]\n\n"
  805. "Options:\n"
  806. "-i | --input Set input filename\n"
  807. "-o | --output Set output filename\n"
  808. "-h | --help Print this message\n"
  809. "-v | --version Print version\n"
  810. "",
  811. argv[0]);
  812. }
  813. static const char short_options [] = "hv";
  814. static const struct option
  815. long_options [] = {
  816. { "help", no_argument, NULL, 'h' },
  817. { "version", no_argument, NULL, 'v' },
  818. { 0, 0, 0, 0 }
  819. };
  820. int write_file (char * filename, unsigned char *image_buffer, int size)
  821. {
  822. FILE * outfile; /* target file */
  823. if ((outfile = fopen(filename, "w+")) == NULL) {
  824. fprintf(stderr, "can't open %s\n", filename);
  825. return -1;
  826. }
  827. fwrite(image_buffer, size * sizeof(regval_t), 1, outfile);
  828. fwrite(&size, sizeof(int), 1, outfile);
  829. fclose(outfile);
  830. return 0 ;
  831. }
  832. int main(int argc, char **argv)
  833. {
  834. for (;;) {
  835. int index, c = 0;
  836. c = getopt_long(argc, argv, short_options, long_options, &index);
  837. if (-1 == c)
  838. break;
  839. switch (c) {
  840. case 0: /* getopt_long() flag */
  841. break;
  842. case 'h':
  843. // print help
  844. usage(stdout, argc, argv);
  845. exit(EXIT_SUCCESS);
  846. case 'v':
  847. printf("Version: %s\n", VERSION);
  848. exit(EXIT_SUCCESS);
  849. break;
  850. default:
  851. usage(stderr, argc, argv);
  852. exit(EXIT_FAILURE);
  853. }
  854. }
  855. printf("isp_1920_1080_settings size: %d, sizeof(regval_t): %lu, sizeof(int): %lu\n",
  856. isp_1920_1080_settings->regval_num, sizeof(regval_t), sizeof(int));
  857. write_file(OV4689_SETFILE, (unsigned char *)isp_1920_1080_settings->regval,
  858. isp_1920_1080_settings->regval_num);
  859. printf("isp_dump_1920_1080_settings size: %d, sizeof(regval_t): %lu, sizeof(int): %lu\n",
  860. isp_dump_1920_1080_settings->regval_num, sizeof(regval_t), sizeof(int));
  861. write_file(OV4689_DUMP_SETFILE, (unsigned char *)isp_dump_1920_1080_settings->regval,
  862. isp_dump_1920_1080_settings->regval_num);
  863. printf("isp_sc2235_settings size: %d, sizeof(regval_t): %lu\n",
  864. isp_sc2235_settings->regval_num, sizeof(regval_t));
  865. write_file(SC2235_SETFILE, (unsigned char *)isp_sc2235_settings->regval,
  866. isp_sc2235_settings->regval_num);
  867. return 0;
  868. }