ar0521.c 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2021 Sieć Badawcza Łukasiewicz
  4. * - Przemysłowy Instytut Automatyki i Pomiarów PIAP
  5. * Written by Krzysztof Hałasa
  6. */
  7. #include <linux/clk.h>
  8. #include <linux/delay.h>
  9. #include <linux/pm_runtime.h>
  10. #include <media/v4l2-ctrls.h>
  11. #include <media/v4l2-fwnode.h>
  12. #include <media/v4l2-subdev.h>
  13. /* External clock (extclk) frequencies */
  14. #define AR0521_EXTCLK_MIN (10 * 1000 * 1000)
  15. #define AR0521_EXTCLK_MAX (48 * 1000 * 1000)
  16. /* PLL and PLL2 */
  17. #define AR0521_PLL_MIN (320 * 1000 * 1000)
  18. #define AR0521_PLL_MAX (1280 * 1000 * 1000)
  19. /* Effective pixel sample rate on the pixel array. */
  20. #define AR0521_PIXEL_CLOCK_RATE (184 * 1000 * 1000)
  21. #define AR0521_PIXEL_CLOCK_MIN (168 * 1000 * 1000)
  22. #define AR0521_PIXEL_CLOCK_MAX (414 * 1000 * 1000)
  23. #define AR0521_NATIVE_WIDTH 2604u
  24. #define AR0521_NATIVE_HEIGHT 1964u
  25. #define AR0521_MIN_X_ADDR_START 0u
  26. #define AR0521_MIN_Y_ADDR_START 0u
  27. #define AR0521_MAX_X_ADDR_END 2603u
  28. #define AR0521_MAX_Y_ADDR_END 1955u
  29. #define AR0521_WIDTH_MIN 8u
  30. #define AR0521_WIDTH_MAX 2592u
  31. #define AR0521_HEIGHT_MIN 8u
  32. #define AR0521_HEIGHT_MAX 1944u
  33. #define AR0521_WIDTH_BLANKING_MIN 572u
  34. #define AR0521_HEIGHT_BLANKING_MIN 38u /* must be even */
  35. #define AR0521_TOTAL_HEIGHT_MAX 65535u /* max_frame_length_lines */
  36. #define AR0521_TOTAL_WIDTH_MAX 65532u /* max_line_length_pck */
  37. #define AR0521_ANA_GAIN_MIN 0x00
  38. #define AR0521_ANA_GAIN_MAX 0x3f
  39. #define AR0521_ANA_GAIN_STEP 0x01
  40. #define AR0521_ANA_GAIN_DEFAULT 0x00
  41. /* AR0521 registers */
  42. #define AR0521_REG_VT_PIX_CLK_DIV 0x0300
  43. #define AR0521_REG_FRAME_LENGTH_LINES 0x0340
  44. #define AR0521_REG_CHIP_ID 0x3000
  45. #define AR0521_REG_COARSE_INTEGRATION_TIME 0x3012
  46. #define AR0521_REG_ROW_SPEED 0x3016
  47. #define AR0521_REG_EXTRA_DELAY 0x3018
  48. #define AR0521_REG_RESET 0x301A
  49. #define AR0521_REG_RESET_DEFAULTS 0x0238
  50. #define AR0521_REG_RESET_GROUP_PARAM_HOLD 0x8000
  51. #define AR0521_REG_RESET_STREAM BIT(2)
  52. #define AR0521_REG_RESET_RESTART BIT(1)
  53. #define AR0521_REG_RESET_INIT BIT(0)
  54. #define AR0521_REG_ANA_GAIN_CODE_GLOBAL 0x3028
  55. #define AR0521_REG_GREEN1_GAIN 0x3056
  56. #define AR0521_REG_BLUE_GAIN 0x3058
  57. #define AR0521_REG_RED_GAIN 0x305A
  58. #define AR0521_REG_GREEN2_GAIN 0x305C
  59. #define AR0521_REG_GLOBAL_GAIN 0x305E
  60. #define AR0521_REG_HISPI_TEST_MODE 0x3066
  61. #define AR0521_REG_HISPI_TEST_MODE_LP11 0x0004
  62. #define AR0521_REG_TEST_PATTERN_MODE 0x3070
  63. #define AR0521_REG_SERIAL_FORMAT 0x31AE
  64. #define AR0521_REG_SERIAL_FORMAT_MIPI 0x0200
  65. #define AR0521_REG_HISPI_CONTROL_STATUS 0x31C6
  66. #define AR0521_REG_HISPI_CONTROL_STATUS_FRAMER_TEST_MODE_ENABLE 0x80
  67. #define be cpu_to_be16
  68. static const char * const ar0521_supply_names[] = {
  69. "vdd_io", /* I/O (1.8V) supply */
  70. "vdd", /* Core, PLL and MIPI (1.2V) supply */
  71. "vaa", /* Analog (2.7V) supply */
  72. };
  73. static const s64 ar0521_link_frequencies[] = {
  74. 184000000,
  75. };
  76. struct ar0521_ctrls {
  77. struct v4l2_ctrl_handler handler;
  78. struct {
  79. struct v4l2_ctrl *gain;
  80. struct v4l2_ctrl *red_balance;
  81. struct v4l2_ctrl *blue_balance;
  82. };
  83. struct {
  84. struct v4l2_ctrl *hblank;
  85. struct v4l2_ctrl *vblank;
  86. };
  87. struct v4l2_ctrl *pixrate;
  88. struct v4l2_ctrl *exposure;
  89. struct v4l2_ctrl *test_pattern;
  90. };
  91. struct ar0521_dev {
  92. struct i2c_client *i2c_client;
  93. struct v4l2_subdev sd;
  94. struct media_pad pad;
  95. struct clk *extclk;
  96. u32 extclk_freq;
  97. struct regulator *supplies[ARRAY_SIZE(ar0521_supply_names)];
  98. struct gpio_desc *reset_gpio;
  99. /* lock to protect all members below */
  100. struct mutex lock;
  101. struct v4l2_mbus_framefmt fmt;
  102. struct ar0521_ctrls ctrls;
  103. unsigned int lane_count;
  104. struct {
  105. u16 pre;
  106. u16 mult;
  107. u16 pre2;
  108. u16 mult2;
  109. u16 vt_pix;
  110. } pll;
  111. };
  112. static inline struct ar0521_dev *to_ar0521_dev(struct v4l2_subdev *sd)
  113. {
  114. return container_of(sd, struct ar0521_dev, sd);
  115. }
  116. static inline struct v4l2_subdev *ctrl_to_sd(struct v4l2_ctrl *ctrl)
  117. {
  118. return &container_of(ctrl->handler, struct ar0521_dev,
  119. ctrls.handler)->sd;
  120. }
  121. static u32 div64_round(u64 v, u32 d)
  122. {
  123. return div_u64(v + (d >> 1), d);
  124. }
  125. static u32 div64_round_up(u64 v, u32 d)
  126. {
  127. return div_u64(v + d - 1, d);
  128. }
  129. static int ar0521_code_to_bpp(struct ar0521_dev *sensor)
  130. {
  131. switch (sensor->fmt.code) {
  132. case MEDIA_BUS_FMT_SGRBG8_1X8:
  133. return 8;
  134. }
  135. return -EINVAL;
  136. }
  137. /* Data must be BE16, the first value is the register address */
  138. static int ar0521_write_regs(struct ar0521_dev *sensor, const __be16 *data,
  139. unsigned int count)
  140. {
  141. struct i2c_client *client = sensor->i2c_client;
  142. struct i2c_msg msg;
  143. int ret;
  144. msg.addr = client->addr;
  145. msg.flags = client->flags;
  146. msg.buf = (u8 *)data;
  147. msg.len = count * sizeof(*data);
  148. ret = i2c_transfer(client->adapter, &msg, 1);
  149. if (ret < 0) {
  150. v4l2_err(&sensor->sd, "%s: I2C write error\n", __func__);
  151. return ret;
  152. }
  153. return 0;
  154. }
  155. static int ar0521_write_reg(struct ar0521_dev *sensor, u16 reg, u16 val)
  156. {
  157. __be16 buf[2] = {be(reg), be(val)};
  158. return ar0521_write_regs(sensor, buf, 2);
  159. }
  160. static int ar0521_set_geometry(struct ar0521_dev *sensor)
  161. {
  162. /* Center the image in the visible output window. */
  163. u16 x = clamp((AR0521_WIDTH_MAX - sensor->fmt.width) / 2,
  164. AR0521_MIN_X_ADDR_START, AR0521_MAX_X_ADDR_END);
  165. u16 y = clamp(((AR0521_HEIGHT_MAX - sensor->fmt.height) / 2) & ~1,
  166. AR0521_MIN_Y_ADDR_START, AR0521_MAX_Y_ADDR_END);
  167. /* All dimensions are unsigned 12-bit integers */
  168. __be16 regs[] = {
  169. be(AR0521_REG_FRAME_LENGTH_LINES),
  170. be(sensor->fmt.height + sensor->ctrls.vblank->val),
  171. be(sensor->fmt.width + sensor->ctrls.hblank->val),
  172. be(x),
  173. be(y),
  174. be(x + sensor->fmt.width - 1),
  175. be(y + sensor->fmt.height - 1),
  176. be(sensor->fmt.width),
  177. be(sensor->fmt.height)
  178. };
  179. return ar0521_write_regs(sensor, regs, ARRAY_SIZE(regs));
  180. }
  181. static int ar0521_set_gains(struct ar0521_dev *sensor)
  182. {
  183. int green = sensor->ctrls.gain->val;
  184. int red = max(green + sensor->ctrls.red_balance->val, 0);
  185. int blue = max(green + sensor->ctrls.blue_balance->val, 0);
  186. unsigned int gain = min(red, min(green, blue));
  187. unsigned int analog = min(gain, 64u); /* range is 0 - 127 */
  188. __be16 regs[5];
  189. red = min(red - analog + 64, 511u);
  190. green = min(green - analog + 64, 511u);
  191. blue = min(blue - analog + 64, 511u);
  192. regs[0] = be(AR0521_REG_GREEN1_GAIN);
  193. regs[1] = be(green << 7 | analog);
  194. regs[2] = be(blue << 7 | analog);
  195. regs[3] = be(red << 7 | analog);
  196. regs[4] = be(green << 7 | analog);
  197. return ar0521_write_regs(sensor, regs, ARRAY_SIZE(regs));
  198. }
  199. static u32 calc_pll(struct ar0521_dev *sensor, u32 freq, u16 *pre_ptr, u16 *mult_ptr)
  200. {
  201. u16 pre = 1, mult = 1, new_pre;
  202. u32 pll = AR0521_PLL_MAX + 1;
  203. for (new_pre = 1; new_pre < 64; new_pre++) {
  204. u32 new_pll;
  205. u32 new_mult = div64_round_up((u64)freq * new_pre,
  206. sensor->extclk_freq);
  207. if (new_mult < 32)
  208. continue; /* Minimum value */
  209. if (new_mult > 254)
  210. break; /* Maximum, larger pre won't work either */
  211. if (sensor->extclk_freq * (u64)new_mult < (u64)AR0521_PLL_MIN *
  212. new_pre)
  213. continue;
  214. if (sensor->extclk_freq * (u64)new_mult > (u64)AR0521_PLL_MAX *
  215. new_pre)
  216. break; /* Larger pre won't work either */
  217. new_pll = div64_round_up(sensor->extclk_freq * (u64)new_mult,
  218. new_pre);
  219. if (new_pll < pll) {
  220. pll = new_pll;
  221. pre = new_pre;
  222. mult = new_mult;
  223. }
  224. }
  225. pll = div64_round(sensor->extclk_freq * (u64)mult, pre);
  226. *pre_ptr = pre;
  227. *mult_ptr = mult;
  228. return pll;
  229. }
  230. static void ar0521_calc_pll(struct ar0521_dev *sensor)
  231. {
  232. unsigned int pixel_clock;
  233. u16 pre, mult;
  234. u32 vco;
  235. int bpp;
  236. /*
  237. * PLL1 and PLL2 are computed equally even if the application note
  238. * suggests a slower PLL1 clock. Maintain pll1 and pll2 divider and
  239. * multiplier separated to later specialize the calculation procedure.
  240. *
  241. * PLL1:
  242. * - mclk -> / pre_div1 * pre_mul1 = VCO1 = COUNTER_CLOCK
  243. *
  244. * PLL2:
  245. * - mclk -> / pre_div * pre_mul = VCO
  246. *
  247. * VCO -> / vt_pix = PIXEL_CLOCK
  248. * VCO -> / vt_pix / 2 = WORD_CLOCK
  249. * VCO -> / op_sys = SERIAL_CLOCK
  250. *
  251. * With:
  252. * - vt_pix = bpp / 2
  253. * - WORD_CLOCK = PIXEL_CLOCK / 2
  254. * - SERIAL_CLOCK = MIPI data rate (Mbps / lane) = WORD_CLOCK * bpp
  255. * NOTE: this implies the MIPI clock is divided internally by 2
  256. * to account for DDR.
  257. *
  258. * As op_sys_div is fixed to 1:
  259. *
  260. * SERIAL_CLOCK = VCO
  261. * VCO = 2 * MIPI_CLK
  262. * VCO = PIXEL_CLOCK * bpp / 2
  263. *
  264. * In the clock tree:
  265. * MIPI_CLK = PIXEL_CLOCK * bpp / 2 / 2
  266. *
  267. * Generic pixel_rate to bus clock frequency equation:
  268. * MIPI_CLK = V4L2_CID_PIXEL_RATE * bpp / lanes / 2
  269. *
  270. * From which we derive the PIXEL_CLOCK to use in the clock tree:
  271. * PIXEL_CLOCK = V4L2_CID_PIXEL_RATE * 2 / lanes
  272. *
  273. * Documented clock ranges:
  274. * WORD_CLOCK = (35MHz - 120 MHz)
  275. * PIXEL_CLOCK = (84MHz - 207MHz)
  276. * VCO = (320MHz - 1280MHz)
  277. *
  278. * TODO: in case we have less data lanes we have to reduce the desired
  279. * VCO not to exceed the limits specified by the datasheet and
  280. * consequently reduce the obtained pixel clock.
  281. */
  282. pixel_clock = AR0521_PIXEL_CLOCK_RATE * 2 / sensor->lane_count;
  283. bpp = ar0521_code_to_bpp(sensor);
  284. sensor->pll.vt_pix = bpp / 2;
  285. vco = pixel_clock * sensor->pll.vt_pix;
  286. calc_pll(sensor, vco, &pre, &mult);
  287. sensor->pll.pre = sensor->pll.pre2 = pre;
  288. sensor->pll.mult = sensor->pll.mult2 = mult;
  289. }
  290. static int ar0521_pll_config(struct ar0521_dev *sensor)
  291. {
  292. __be16 pll_regs[] = {
  293. be(AR0521_REG_VT_PIX_CLK_DIV),
  294. /* 0x300 */ be(sensor->pll.vt_pix), /* vt_pix_clk_div = bpp / 2 */
  295. /* 0x302 */ be(1), /* vt_sys_clk_div */
  296. /* 0x304 */ be((sensor->pll.pre2 << 8) | sensor->pll.pre),
  297. /* 0x306 */ be((sensor->pll.mult2 << 8) | sensor->pll.mult),
  298. /* 0x308 */ be(sensor->pll.vt_pix * 2), /* op_pix_clk_div = 2 * vt_pix_clk_div */
  299. /* 0x30A */ be(1) /* op_sys_clk_div */
  300. };
  301. ar0521_calc_pll(sensor);
  302. return ar0521_write_regs(sensor, pll_regs, ARRAY_SIZE(pll_regs));
  303. }
  304. static int ar0521_set_stream(struct ar0521_dev *sensor, bool on)
  305. {
  306. int ret;
  307. if (on) {
  308. ret = pm_runtime_resume_and_get(&sensor->i2c_client->dev);
  309. if (ret < 0)
  310. return ret;
  311. /* Stop streaming for just a moment */
  312. ret = ar0521_write_reg(sensor, AR0521_REG_RESET,
  313. AR0521_REG_RESET_DEFAULTS);
  314. if (ret)
  315. return ret;
  316. ret = ar0521_set_geometry(sensor);
  317. if (ret)
  318. return ret;
  319. ret = ar0521_pll_config(sensor);
  320. if (ret)
  321. goto err;
  322. ret = __v4l2_ctrl_handler_setup(&sensor->ctrls.handler);
  323. if (ret)
  324. goto err;
  325. /* Exit LP-11 mode on clock and data lanes */
  326. ret = ar0521_write_reg(sensor, AR0521_REG_HISPI_CONTROL_STATUS,
  327. 0);
  328. if (ret)
  329. goto err;
  330. /* Start streaming */
  331. ret = ar0521_write_reg(sensor, AR0521_REG_RESET,
  332. AR0521_REG_RESET_DEFAULTS |
  333. AR0521_REG_RESET_STREAM);
  334. if (ret)
  335. goto err;
  336. return 0;
  337. err:
  338. pm_runtime_put(&sensor->i2c_client->dev);
  339. return ret;
  340. } else {
  341. /*
  342. * Reset gain, the sensor may produce all white pixels without
  343. * this
  344. */
  345. ret = ar0521_write_reg(sensor, AR0521_REG_GLOBAL_GAIN, 0x2000);
  346. if (ret)
  347. return ret;
  348. /* Stop streaming */
  349. ret = ar0521_write_reg(sensor, AR0521_REG_RESET,
  350. AR0521_REG_RESET_DEFAULTS);
  351. if (ret)
  352. return ret;
  353. pm_runtime_put(&sensor->i2c_client->dev);
  354. return 0;
  355. }
  356. }
  357. static void ar0521_adj_fmt(struct v4l2_mbus_framefmt *fmt)
  358. {
  359. fmt->width = clamp(ALIGN(fmt->width, 4), AR0521_WIDTH_MIN,
  360. AR0521_WIDTH_MAX);
  361. fmt->height = clamp(ALIGN(fmt->height, 4), AR0521_HEIGHT_MIN,
  362. AR0521_HEIGHT_MAX);
  363. fmt->code = MEDIA_BUS_FMT_SGRBG8_1X8;
  364. fmt->field = V4L2_FIELD_NONE;
  365. fmt->colorspace = V4L2_COLORSPACE_SRGB;
  366. fmt->ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
  367. fmt->quantization = V4L2_QUANTIZATION_FULL_RANGE;
  368. fmt->xfer_func = V4L2_XFER_FUNC_DEFAULT;
  369. }
  370. static int ar0521_get_fmt(struct v4l2_subdev *sd,
  371. struct v4l2_subdev_state *sd_state,
  372. struct v4l2_subdev_format *format)
  373. {
  374. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  375. struct v4l2_mbus_framefmt *fmt;
  376. mutex_lock(&sensor->lock);
  377. if (format->which == V4L2_SUBDEV_FORMAT_TRY)
  378. fmt = v4l2_subdev_state_get_format(sd_state, 0);
  379. else
  380. fmt = &sensor->fmt;
  381. format->format = *fmt;
  382. mutex_unlock(&sensor->lock);
  383. return 0;
  384. }
  385. static int ar0521_set_fmt(struct v4l2_subdev *sd,
  386. struct v4l2_subdev_state *sd_state,
  387. struct v4l2_subdev_format *format)
  388. {
  389. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  390. int max_vblank, max_hblank, exposure_max;
  391. int ret;
  392. ar0521_adj_fmt(&format->format);
  393. mutex_lock(&sensor->lock);
  394. if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
  395. struct v4l2_mbus_framefmt *fmt;
  396. fmt = v4l2_subdev_state_get_format(sd_state, 0);
  397. *fmt = format->format;
  398. mutex_unlock(&sensor->lock);
  399. return 0;
  400. }
  401. sensor->fmt = format->format;
  402. ar0521_calc_pll(sensor);
  403. /*
  404. * Update the exposure and blankings limits. Blankings are also reset
  405. * to the minimum.
  406. */
  407. max_hblank = AR0521_TOTAL_WIDTH_MAX - sensor->fmt.width;
  408. ret = __v4l2_ctrl_modify_range(sensor->ctrls.hblank,
  409. sensor->ctrls.hblank->minimum,
  410. max_hblank, sensor->ctrls.hblank->step,
  411. sensor->ctrls.hblank->minimum);
  412. if (ret)
  413. goto unlock;
  414. ret = __v4l2_ctrl_s_ctrl(sensor->ctrls.hblank,
  415. sensor->ctrls.hblank->minimum);
  416. if (ret)
  417. goto unlock;
  418. max_vblank = AR0521_TOTAL_HEIGHT_MAX - sensor->fmt.height;
  419. ret = __v4l2_ctrl_modify_range(sensor->ctrls.vblank,
  420. sensor->ctrls.vblank->minimum,
  421. max_vblank, sensor->ctrls.vblank->step,
  422. sensor->ctrls.vblank->minimum);
  423. if (ret)
  424. goto unlock;
  425. ret = __v4l2_ctrl_s_ctrl(sensor->ctrls.vblank,
  426. sensor->ctrls.vblank->minimum);
  427. if (ret)
  428. goto unlock;
  429. exposure_max = sensor->fmt.height + AR0521_HEIGHT_BLANKING_MIN - 4;
  430. ret = __v4l2_ctrl_modify_range(sensor->ctrls.exposure,
  431. sensor->ctrls.exposure->minimum,
  432. exposure_max,
  433. sensor->ctrls.exposure->step,
  434. sensor->ctrls.exposure->default_value);
  435. unlock:
  436. mutex_unlock(&sensor->lock);
  437. return ret;
  438. }
  439. static int ar0521_s_ctrl(struct v4l2_ctrl *ctrl)
  440. {
  441. struct v4l2_subdev *sd = ctrl_to_sd(ctrl);
  442. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  443. int exp_max;
  444. int ret;
  445. /* v4l2_ctrl_lock() locks our own mutex */
  446. switch (ctrl->id) {
  447. case V4L2_CID_VBLANK:
  448. exp_max = sensor->fmt.height + ctrl->val - 4;
  449. __v4l2_ctrl_modify_range(sensor->ctrls.exposure,
  450. sensor->ctrls.exposure->minimum,
  451. exp_max, sensor->ctrls.exposure->step,
  452. sensor->ctrls.exposure->default_value);
  453. break;
  454. }
  455. /* access the sensor only if it's powered up */
  456. if (!pm_runtime_get_if_in_use(&sensor->i2c_client->dev))
  457. return 0;
  458. switch (ctrl->id) {
  459. case V4L2_CID_HBLANK:
  460. case V4L2_CID_VBLANK:
  461. ret = ar0521_set_geometry(sensor);
  462. break;
  463. case V4L2_CID_ANALOGUE_GAIN:
  464. ret = ar0521_write_reg(sensor, AR0521_REG_ANA_GAIN_CODE_GLOBAL,
  465. ctrl->val);
  466. break;
  467. case V4L2_CID_GAIN:
  468. case V4L2_CID_RED_BALANCE:
  469. case V4L2_CID_BLUE_BALANCE:
  470. ret = ar0521_set_gains(sensor);
  471. break;
  472. case V4L2_CID_EXPOSURE:
  473. ret = ar0521_write_reg(sensor,
  474. AR0521_REG_COARSE_INTEGRATION_TIME,
  475. ctrl->val);
  476. break;
  477. case V4L2_CID_TEST_PATTERN:
  478. ret = ar0521_write_reg(sensor, AR0521_REG_TEST_PATTERN_MODE,
  479. ctrl->val);
  480. break;
  481. default:
  482. dev_err(&sensor->i2c_client->dev,
  483. "Unsupported control %x\n", ctrl->id);
  484. ret = -EINVAL;
  485. break;
  486. }
  487. pm_runtime_put(&sensor->i2c_client->dev);
  488. return ret;
  489. }
  490. static const struct v4l2_ctrl_ops ar0521_ctrl_ops = {
  491. .s_ctrl = ar0521_s_ctrl,
  492. };
  493. static const char * const test_pattern_menu[] = {
  494. "Disabled",
  495. "Solid color",
  496. "Color bars",
  497. "Faded color bars"
  498. };
  499. static int ar0521_init_controls(struct ar0521_dev *sensor)
  500. {
  501. const struct v4l2_ctrl_ops *ops = &ar0521_ctrl_ops;
  502. struct ar0521_ctrls *ctrls = &sensor->ctrls;
  503. struct v4l2_ctrl_handler *hdl = &ctrls->handler;
  504. int max_vblank, max_hblank, exposure_max;
  505. struct v4l2_ctrl *link_freq;
  506. int ret;
  507. v4l2_ctrl_handler_init(hdl, 32);
  508. /* We can use our own mutex for the ctrl lock */
  509. hdl->lock = &sensor->lock;
  510. /* Analog gain */
  511. v4l2_ctrl_new_std(hdl, ops, V4L2_CID_ANALOGUE_GAIN,
  512. AR0521_ANA_GAIN_MIN, AR0521_ANA_GAIN_MAX,
  513. AR0521_ANA_GAIN_STEP, AR0521_ANA_GAIN_DEFAULT);
  514. /* Manual gain */
  515. ctrls->gain = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_GAIN, 0, 511, 1, 0);
  516. ctrls->red_balance = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_RED_BALANCE,
  517. -512, 511, 1, 0);
  518. ctrls->blue_balance = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_BLUE_BALANCE,
  519. -512, 511, 1, 0);
  520. v4l2_ctrl_cluster(3, &ctrls->gain);
  521. /* Initialize blanking limits using the default 2592x1944 format. */
  522. max_hblank = AR0521_TOTAL_WIDTH_MAX - AR0521_WIDTH_MAX;
  523. ctrls->hblank = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_HBLANK,
  524. AR0521_WIDTH_BLANKING_MIN,
  525. max_hblank, 1,
  526. AR0521_WIDTH_BLANKING_MIN);
  527. max_vblank = AR0521_TOTAL_HEIGHT_MAX - AR0521_HEIGHT_MAX;
  528. ctrls->vblank = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_VBLANK,
  529. AR0521_HEIGHT_BLANKING_MIN,
  530. max_vblank, 2,
  531. AR0521_HEIGHT_BLANKING_MIN);
  532. v4l2_ctrl_cluster(2, &ctrls->hblank);
  533. /* Read-only */
  534. ctrls->pixrate = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_PIXEL_RATE,
  535. AR0521_PIXEL_CLOCK_MIN,
  536. AR0521_PIXEL_CLOCK_MAX, 1,
  537. AR0521_PIXEL_CLOCK_RATE);
  538. /* Manual exposure time: max exposure time = visible + blank - 4 */
  539. exposure_max = AR0521_HEIGHT_MAX + AR0521_HEIGHT_BLANKING_MIN - 4;
  540. ctrls->exposure = v4l2_ctrl_new_std(hdl, ops, V4L2_CID_EXPOSURE, 0,
  541. exposure_max, 1, 0x70);
  542. link_freq = v4l2_ctrl_new_int_menu(hdl, ops, V4L2_CID_LINK_FREQ,
  543. ARRAY_SIZE(ar0521_link_frequencies) - 1,
  544. 0, ar0521_link_frequencies);
  545. if (link_freq)
  546. link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
  547. ctrls->test_pattern = v4l2_ctrl_new_std_menu_items(hdl, ops,
  548. V4L2_CID_TEST_PATTERN,
  549. ARRAY_SIZE(test_pattern_menu) - 1,
  550. 0, 0, test_pattern_menu);
  551. if (hdl->error) {
  552. ret = hdl->error;
  553. goto free_ctrls;
  554. }
  555. sensor->sd.ctrl_handler = hdl;
  556. return 0;
  557. free_ctrls:
  558. v4l2_ctrl_handler_free(hdl);
  559. return ret;
  560. }
  561. #define REGS_ENTRY(a) {(a), ARRAY_SIZE(a)}
  562. #define REGS(...) REGS_ENTRY(((const __be16[]){__VA_ARGS__}))
  563. static const struct initial_reg {
  564. const __be16 *data; /* data[0] is register address */
  565. unsigned int count;
  566. } initial_regs[] = {
  567. REGS(be(0x0112), be(0x0808)), /* 8-bit/8-bit mode */
  568. /* PEDESTAL+2 :+2 is a workaround for 10bit mode +0.5 rounding */
  569. REGS(be(0x301E), be(0x00AA)),
  570. /* corrections_recommended_bayer */
  571. REGS(be(0x3042),
  572. be(0x0004), /* 3042: RNC: enable b/w rnc mode */
  573. be(0x4580)), /* 3044: RNC: enable row noise correction */
  574. REGS(be(0x30D2),
  575. be(0x0000), /* 30D2: CRM/CC: enable crm on Visible and CC rows */
  576. be(0x0000), /* 30D4: CC: CC enabled with 16 samples per column */
  577. /* 30D6: CC: bw mode enabled/12 bit data resolution/bw mode */
  578. be(0x2FFF)),
  579. REGS(be(0x30DA),
  580. be(0x0FFF), /* 30DA: CC: column correction clip level 2 is 0 */
  581. be(0x0FFF), /* 30DC: CC: column correction clip level 3 is 0 */
  582. be(0x0000)), /* 30DE: CC: Group FPN correction */
  583. /* RNC: rnc scaling factor = * 54 / 64 (32 / 38 * 64 = 53.9) */
  584. REGS(be(0x30EE), be(0x1136)),
  585. REGS(be(0x30FA), be(0xFD00)), /* GPIO0 = flash, GPIO1 = shutter */
  586. REGS(be(0x3120), be(0x0005)), /* p1 dither enabled for 10bit mode */
  587. REGS(be(0x3172), be(0x0206)), /* txlo clk divider options */
  588. /* FDOC:fdoc settings with fdoc every frame turned of */
  589. REGS(be(0x3180), be(0x9434)),
  590. REGS(be(0x31B0),
  591. be(0x008B), /* 31B0: frame_preamble - FIXME check WRT lanes# */
  592. be(0x0050)), /* 31B2: line_preamble - FIXME check WRT lanes# */
  593. /* don't use continuous clock mode while shut down */
  594. REGS(be(0x31BC), be(0x068C)),
  595. REGS(be(0x31E0), be(0x0781)), /* Fuse/2DDC: enable 2ddc */
  596. /* analog_setup_recommended_10bit */
  597. REGS(be(0x341A), be(0x4735)), /* Samp&Hold pulse in ADC */
  598. REGS(be(0x3420), be(0x4735)), /* Samp&Hold pulse in ADC */
  599. REGS(be(0x3426), be(0x8A1A)), /* ADC offset distribution pulse */
  600. REGS(be(0x342A), be(0x0018)), /* pulse_config */
  601. /* pixel_timing_recommended */
  602. REGS(be(0x3D00),
  603. /* 3D00 */ be(0x043E), be(0x4760), be(0xFFFF), be(0xFFFF),
  604. /* 3D08 */ be(0x8000), be(0x0510), be(0xAF08), be(0x0252),
  605. /* 3D10 */ be(0x486F), be(0x5D5D), be(0x8056), be(0x8313),
  606. /* 3D18 */ be(0x0087), be(0x6A48), be(0x6982), be(0x0280),
  607. /* 3D20 */ be(0x8359), be(0x8D02), be(0x8020), be(0x4882),
  608. /* 3D28 */ be(0x4269), be(0x6A95), be(0x5988), be(0x5A83),
  609. /* 3D30 */ be(0x5885), be(0x6280), be(0x6289), be(0x6097),
  610. /* 3D38 */ be(0x5782), be(0x605C), be(0xBF18), be(0x0961),
  611. /* 3D40 */ be(0x5080), be(0x2090), be(0x4390), be(0x4382),
  612. /* 3D48 */ be(0x5F8A), be(0x5D5D), be(0x9C63), be(0x8063),
  613. /* 3D50 */ be(0xA960), be(0x9757), be(0x8260), be(0x5CFF),
  614. /* 3D58 */ be(0xBF10), be(0x1681), be(0x0802), be(0x8000),
  615. /* 3D60 */ be(0x141C), be(0x6000), be(0x6022), be(0x4D80),
  616. /* 3D68 */ be(0x5C97), be(0x6A69), be(0xAC6F), be(0x4645),
  617. /* 3D70 */ be(0x4400), be(0x0513), be(0x8069), be(0x6AC6),
  618. /* 3D78 */ be(0x5F95), be(0x5F70), be(0x8040), be(0x4A81),
  619. /* 3D80 */ be(0x0300), be(0xE703), be(0x0088), be(0x4A83),
  620. /* 3D88 */ be(0x40FF), be(0xFFFF), be(0xFD70), be(0x8040),
  621. /* 3D90 */ be(0x4A85), be(0x4FA8), be(0x4F8C), be(0x0070),
  622. /* 3D98 */ be(0xBE47), be(0x8847), be(0xBC78), be(0x6B89),
  623. /* 3DA0 */ be(0x6A80), be(0x6986), be(0x6B8E), be(0x6B80),
  624. /* 3DA8 */ be(0x6980), be(0x6A88), be(0x7C9F), be(0x866B),
  625. /* 3DB0 */ be(0x8765), be(0x46FF), be(0xE365), be(0xA679),
  626. /* 3DB8 */ be(0x4A40), be(0x4580), be(0x44BC), be(0x7000),
  627. /* 3DC0 */ be(0x8040), be(0x0802), be(0x10EF), be(0x0104),
  628. /* 3DC8 */ be(0x3860), be(0x5D5D), be(0x5682), be(0x1300),
  629. /* 3DD0 */ be(0x8648), be(0x8202), be(0x8082), be(0x598A),
  630. /* 3DD8 */ be(0x0280), be(0x2048), be(0x3060), be(0x8042),
  631. /* 3DE0 */ be(0x9259), be(0x865A), be(0x8258), be(0x8562),
  632. /* 3DE8 */ be(0x8062), be(0x8560), be(0x9257), be(0x8221),
  633. /* 3DF0 */ be(0x10FF), be(0xB757), be(0x9361), be(0x1019),
  634. /* 3DF8 */ be(0x8020), be(0x9043), be(0x8E43), be(0x845F),
  635. /* 3E00 */ be(0x835D), be(0x805D), be(0x8163), be(0x8063),
  636. /* 3E08 */ be(0xA060), be(0x9157), be(0x8260), be(0x5CFF),
  637. /* 3E10 */ be(0xFFFF), be(0xFFE5), be(0x1016), be(0x2048),
  638. /* 3E18 */ be(0x0802), be(0x1C60), be(0x0014), be(0x0060),
  639. /* 3E20 */ be(0x2205), be(0x8120), be(0x908F), be(0x6A80),
  640. /* 3E28 */ be(0x6982), be(0x5F9F), be(0x6F46), be(0x4544),
  641. /* 3E30 */ be(0x0005), be(0x8013), be(0x8069), be(0x6A80),
  642. /* 3E38 */ be(0x7000), be(0x0000), be(0x0000), be(0x0000),
  643. /* 3E40 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  644. /* 3E48 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  645. /* 3E50 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  646. /* 3E58 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  647. /* 3E60 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  648. /* 3E68 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  649. /* 3E70 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  650. /* 3E78 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  651. /* 3E80 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  652. /* 3E88 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  653. /* 3E90 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  654. /* 3E98 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  655. /* 3EA0 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  656. /* 3EA8 */ be(0x0000), be(0x0000), be(0x0000), be(0x0000),
  657. /* 3EB0 */ be(0x0000), be(0x0000), be(0x0000)),
  658. REGS(be(0x3EB6), be(0x004C)), /* ECL */
  659. REGS(be(0x3EBA),
  660. be(0xAAAD), /* 3EBA */
  661. be(0x0086)), /* 3EBC: Bias currents for FSC/ECL */
  662. REGS(be(0x3EC0),
  663. be(0x1E00), /* 3EC0: SFbin/SH mode settings */
  664. be(0x100A), /* 3EC2: CLK divider for ramp for 10 bit 400MH */
  665. /* 3EC4: FSC clamps for HDR mode and adc comp power down co */
  666. be(0x3300),
  667. be(0xEA44), /* 3EC6: VLN and clk gating controls */
  668. be(0x6F6F), /* 3EC8: Txl0 and Txlo1 settings for normal mode */
  669. be(0x2F4A), /* 3ECA: CDAC/Txlo2/RSTGHI/RSTGLO settings */
  670. be(0x0506), /* 3ECC: RSTDHI/RSTDLO/CDAC/TXHI settings */
  671. /* 3ECE: Ramp buffer settings and Booster enable (bits 0-5) */
  672. be(0x203B),
  673. be(0x13F0), /* 3ED0: TXLO from atest/sf bin settings */
  674. be(0xA53D), /* 3ED2: Ramp offset */
  675. be(0x862F), /* 3ED4: TXLO open loop/row driver settings */
  676. be(0x4081), /* 3ED6: Txlatch fr cfpn rows/vln bias */
  677. be(0x8003), /* 3ED8: Ramp step setting for 10 bit 400 Mhz */
  678. be(0xA580), /* 3EDA: Ramp Offset */
  679. be(0xC000), /* 3EDC: over range for rst and under range for sig */
  680. be(0xC103)), /* 3EDE: over range for sig and col dec clk settings */
  681. /* corrections_recommended_bayer */
  682. REGS(be(0x3F00),
  683. be(0x0017), /* 3F00: BM_T0 */
  684. be(0x02DD), /* 3F02: BM_T1 */
  685. /* 3F04: if Ana_gain less than 2, use noise_floor0, multiply */
  686. be(0x0020),
  687. /* 3F06: if Ana_gain between 4 and 7, use noise_floor2 and */
  688. be(0x0040),
  689. /* 3F08: if Ana_gain between 4 and 7, use noise_floor2 and */
  690. be(0x0070),
  691. /* 3F0A: Define noise_floor0(low address) and noise_floor1 */
  692. be(0x0101),
  693. be(0x0302)), /* 3F0C: Define noise_floor2 and noise_floor3 */
  694. REGS(be(0x3F10),
  695. be(0x0505), /* 3F10: single k factor 0 */
  696. be(0x0505), /* 3F12: single k factor 1 */
  697. be(0x0505), /* 3F14: single k factor 2 */
  698. be(0x01FF), /* 3F16: cross factor 0 */
  699. be(0x01FF), /* 3F18: cross factor 1 */
  700. be(0x01FF), /* 3F1A: cross factor 2 */
  701. be(0x0022)), /* 3F1E */
  702. /* GTH_THRES_RTN: 4max,4min filtered out of every 46 samples and */
  703. REGS(be(0x3F2C), be(0x442E)),
  704. REGS(be(0x3F3E),
  705. be(0x0000), /* 3F3E: Switch ADC from 12 bit to 10 bit mode */
  706. be(0x1511), /* 3F40: couple k factor 0 */
  707. be(0x1511), /* 3F42: couple k factor 1 */
  708. be(0x0707)), /* 3F44: couple k factor 2 */
  709. };
  710. static void __ar0521_power_off(struct device *dev)
  711. {
  712. struct v4l2_subdev *sd = dev_get_drvdata(dev);
  713. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  714. int i;
  715. if (sensor->reset_gpio)
  716. /* assert RESET signal */
  717. gpiod_set_value_cansleep(sensor->reset_gpio, 1);
  718. for (i = ARRAY_SIZE(ar0521_supply_names) - 1; i >= 0; i--) {
  719. if (sensor->supplies[i])
  720. regulator_disable(sensor->supplies[i]);
  721. }
  722. }
  723. static int ar0521_power_off(struct device *dev)
  724. {
  725. struct v4l2_subdev *sd = dev_get_drvdata(dev);
  726. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  727. clk_disable_unprepare(sensor->extclk);
  728. __ar0521_power_off(dev);
  729. return 0;
  730. }
  731. static int ar0521_power_on(struct device *dev)
  732. {
  733. struct v4l2_subdev *sd = dev_get_drvdata(dev);
  734. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  735. unsigned int cnt;
  736. int ret;
  737. for (cnt = 0; cnt < ARRAY_SIZE(ar0521_supply_names); cnt++)
  738. if (sensor->supplies[cnt]) {
  739. ret = regulator_enable(sensor->supplies[cnt]);
  740. if (ret < 0)
  741. goto off;
  742. usleep_range(1000, 1500); /* min 1 ms */
  743. }
  744. ret = clk_prepare_enable(sensor->extclk);
  745. if (ret < 0) {
  746. v4l2_err(&sensor->sd, "error enabling sensor clock\n");
  747. goto off;
  748. }
  749. usleep_range(1000, 1500); /* min 1 ms */
  750. if (sensor->reset_gpio)
  751. /* deassert RESET signal */
  752. gpiod_set_value_cansleep(sensor->reset_gpio, 0);
  753. usleep_range(4500, 5000); /* min 45000 clocks */
  754. for (cnt = 0; cnt < ARRAY_SIZE(initial_regs); cnt++) {
  755. ret = ar0521_write_regs(sensor, initial_regs[cnt].data,
  756. initial_regs[cnt].count);
  757. if (ret)
  758. goto off;
  759. }
  760. ret = ar0521_write_reg(sensor, AR0521_REG_SERIAL_FORMAT,
  761. AR0521_REG_SERIAL_FORMAT_MIPI |
  762. sensor->lane_count);
  763. if (ret)
  764. goto off;
  765. /* set MIPI test mode - disabled for now */
  766. ret = ar0521_write_reg(sensor, AR0521_REG_HISPI_TEST_MODE,
  767. ((0x40 << sensor->lane_count) - 0x40) |
  768. AR0521_REG_HISPI_TEST_MODE_LP11);
  769. if (ret)
  770. goto off;
  771. ret = ar0521_write_reg(sensor, AR0521_REG_ROW_SPEED, 0x110 |
  772. 4 / sensor->lane_count);
  773. if (ret)
  774. goto off;
  775. return 0;
  776. off:
  777. clk_disable_unprepare(sensor->extclk);
  778. __ar0521_power_off(dev);
  779. return ret;
  780. }
  781. static int ar0521_enum_mbus_code(struct v4l2_subdev *sd,
  782. struct v4l2_subdev_state *sd_state,
  783. struct v4l2_subdev_mbus_code_enum *code)
  784. {
  785. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  786. if (code->index)
  787. return -EINVAL;
  788. code->code = sensor->fmt.code;
  789. return 0;
  790. }
  791. static int ar0521_enum_frame_size(struct v4l2_subdev *sd,
  792. struct v4l2_subdev_state *sd_state,
  793. struct v4l2_subdev_frame_size_enum *fse)
  794. {
  795. if (fse->index)
  796. return -EINVAL;
  797. if (fse->code != MEDIA_BUS_FMT_SGRBG8_1X8)
  798. return -EINVAL;
  799. fse->min_width = AR0521_WIDTH_MIN;
  800. fse->max_width = AR0521_WIDTH_MAX;
  801. fse->min_height = AR0521_HEIGHT_MIN;
  802. fse->max_height = AR0521_HEIGHT_MAX;
  803. return 0;
  804. }
  805. static int ar0521_pre_streamon(struct v4l2_subdev *sd, u32 flags)
  806. {
  807. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  808. int ret;
  809. if (!(flags & V4L2_SUBDEV_PRE_STREAMON_FL_MANUAL_LP))
  810. return -EACCES;
  811. ret = pm_runtime_resume_and_get(&sensor->i2c_client->dev);
  812. if (ret < 0)
  813. return ret;
  814. /* Set LP-11 on clock and data lanes */
  815. ret = ar0521_write_reg(sensor, AR0521_REG_HISPI_CONTROL_STATUS,
  816. AR0521_REG_HISPI_CONTROL_STATUS_FRAMER_TEST_MODE_ENABLE);
  817. if (ret)
  818. goto err;
  819. /* Start streaming LP-11 */
  820. ret = ar0521_write_reg(sensor, AR0521_REG_RESET,
  821. AR0521_REG_RESET_DEFAULTS |
  822. AR0521_REG_RESET_STREAM);
  823. if (ret)
  824. goto err;
  825. return 0;
  826. err:
  827. pm_runtime_put(&sensor->i2c_client->dev);
  828. return ret;
  829. }
  830. static int ar0521_post_streamoff(struct v4l2_subdev *sd)
  831. {
  832. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  833. pm_runtime_put(&sensor->i2c_client->dev);
  834. return 0;
  835. }
  836. static int ar0521_s_stream(struct v4l2_subdev *sd, int enable)
  837. {
  838. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  839. int ret;
  840. mutex_lock(&sensor->lock);
  841. ret = ar0521_set_stream(sensor, enable);
  842. mutex_unlock(&sensor->lock);
  843. return ret;
  844. }
  845. static const struct v4l2_subdev_core_ops ar0521_core_ops = {
  846. .log_status = v4l2_ctrl_subdev_log_status,
  847. };
  848. static const struct v4l2_subdev_video_ops ar0521_video_ops = {
  849. .s_stream = ar0521_s_stream,
  850. .pre_streamon = ar0521_pre_streamon,
  851. .post_streamoff = ar0521_post_streamoff,
  852. };
  853. static const struct v4l2_subdev_pad_ops ar0521_pad_ops = {
  854. .enum_mbus_code = ar0521_enum_mbus_code,
  855. .enum_frame_size = ar0521_enum_frame_size,
  856. .get_fmt = ar0521_get_fmt,
  857. .set_fmt = ar0521_set_fmt,
  858. };
  859. static const struct v4l2_subdev_ops ar0521_subdev_ops = {
  860. .core = &ar0521_core_ops,
  861. .video = &ar0521_video_ops,
  862. .pad = &ar0521_pad_ops,
  863. };
  864. static int ar0521_probe(struct i2c_client *client)
  865. {
  866. struct v4l2_fwnode_endpoint ep = {
  867. .bus_type = V4L2_MBUS_CSI2_DPHY
  868. };
  869. struct device *dev = &client->dev;
  870. struct fwnode_handle *endpoint;
  871. struct ar0521_dev *sensor;
  872. unsigned int cnt;
  873. int ret;
  874. sensor = devm_kzalloc(dev, sizeof(*sensor), GFP_KERNEL);
  875. if (!sensor)
  876. return -ENOMEM;
  877. sensor->i2c_client = client;
  878. sensor->fmt.width = AR0521_WIDTH_MAX;
  879. sensor->fmt.height = AR0521_HEIGHT_MAX;
  880. endpoint = fwnode_graph_get_endpoint_by_id(dev_fwnode(dev), 0, 0,
  881. FWNODE_GRAPH_ENDPOINT_NEXT);
  882. if (!endpoint) {
  883. dev_err(dev, "endpoint node not found\n");
  884. return -EINVAL;
  885. }
  886. ret = v4l2_fwnode_endpoint_parse(endpoint, &ep);
  887. fwnode_handle_put(endpoint);
  888. if (ret) {
  889. dev_err(dev, "could not parse endpoint\n");
  890. return ret;
  891. }
  892. if (ep.bus_type != V4L2_MBUS_CSI2_DPHY) {
  893. dev_err(dev, "invalid bus type, must be MIPI CSI2\n");
  894. return -EINVAL;
  895. }
  896. sensor->lane_count = ep.bus.mipi_csi2.num_data_lanes;
  897. switch (sensor->lane_count) {
  898. case 1:
  899. case 2:
  900. case 4:
  901. break;
  902. default:
  903. dev_err(dev, "invalid number of MIPI data lanes\n");
  904. return -EINVAL;
  905. }
  906. /* Get master clock (extclk) */
  907. sensor->extclk = devm_v4l2_sensor_clk_get(dev, "extclk");
  908. if (IS_ERR(sensor->extclk))
  909. return dev_err_probe(dev, PTR_ERR(sensor->extclk),
  910. "failed to get extclk\n");
  911. sensor->extclk_freq = clk_get_rate(sensor->extclk);
  912. if (sensor->extclk_freq < AR0521_EXTCLK_MIN ||
  913. sensor->extclk_freq > AR0521_EXTCLK_MAX) {
  914. dev_err(dev, "extclk frequency out of range: %u Hz\n",
  915. sensor->extclk_freq);
  916. return -EINVAL;
  917. }
  918. /* Request optional reset pin (usually active low) and assert it */
  919. sensor->reset_gpio = devm_gpiod_get_optional(dev, "reset",
  920. GPIOD_OUT_HIGH);
  921. v4l2_i2c_subdev_init(&sensor->sd, client, &ar0521_subdev_ops);
  922. sensor->sd.flags = V4L2_SUBDEV_FL_HAS_DEVNODE;
  923. sensor->pad.flags = MEDIA_PAD_FL_SOURCE;
  924. sensor->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
  925. ret = media_entity_pads_init(&sensor->sd.entity, 1, &sensor->pad);
  926. if (ret)
  927. return ret;
  928. for (cnt = 0; cnt < ARRAY_SIZE(ar0521_supply_names); cnt++) {
  929. struct regulator *supply = devm_regulator_get(dev,
  930. ar0521_supply_names[cnt]);
  931. if (IS_ERR(supply)) {
  932. dev_info(dev, "no %s regulator found: %pe\n",
  933. ar0521_supply_names[cnt], supply);
  934. return PTR_ERR(supply);
  935. }
  936. sensor->supplies[cnt] = supply;
  937. }
  938. mutex_init(&sensor->lock);
  939. ret = ar0521_init_controls(sensor);
  940. if (ret)
  941. goto entity_cleanup;
  942. ar0521_adj_fmt(&sensor->fmt);
  943. ret = v4l2_async_register_subdev(&sensor->sd);
  944. if (ret)
  945. goto free_ctrls;
  946. /* Turn on the device and enable runtime PM */
  947. ret = ar0521_power_on(&client->dev);
  948. if (ret)
  949. goto disable;
  950. pm_runtime_set_active(&client->dev);
  951. pm_runtime_enable(&client->dev);
  952. pm_runtime_idle(&client->dev);
  953. return 0;
  954. disable:
  955. v4l2_async_unregister_subdev(&sensor->sd);
  956. media_entity_cleanup(&sensor->sd.entity);
  957. free_ctrls:
  958. v4l2_ctrl_handler_free(&sensor->ctrls.handler);
  959. entity_cleanup:
  960. media_entity_cleanup(&sensor->sd.entity);
  961. mutex_destroy(&sensor->lock);
  962. return ret;
  963. }
  964. static void ar0521_remove(struct i2c_client *client)
  965. {
  966. struct v4l2_subdev *sd = i2c_get_clientdata(client);
  967. struct ar0521_dev *sensor = to_ar0521_dev(sd);
  968. v4l2_async_unregister_subdev(&sensor->sd);
  969. media_entity_cleanup(&sensor->sd.entity);
  970. v4l2_ctrl_handler_free(&sensor->ctrls.handler);
  971. pm_runtime_disable(&client->dev);
  972. if (!pm_runtime_status_suspended(&client->dev))
  973. ar0521_power_off(&client->dev);
  974. pm_runtime_set_suspended(&client->dev);
  975. mutex_destroy(&sensor->lock);
  976. }
  977. static const struct dev_pm_ops ar0521_pm_ops = {
  978. SET_RUNTIME_PM_OPS(ar0521_power_off, ar0521_power_on, NULL)
  979. };
  980. static const struct of_device_id ar0521_dt_ids[] = {
  981. {.compatible = "onnn,ar0521"},
  982. {}
  983. };
  984. MODULE_DEVICE_TABLE(of, ar0521_dt_ids);
  985. static struct i2c_driver ar0521_i2c_driver = {
  986. .driver = {
  987. .name = "ar0521",
  988. .pm = &ar0521_pm_ops,
  989. .of_match_table = ar0521_dt_ids,
  990. },
  991. .probe = ar0521_probe,
  992. .remove = ar0521_remove,
  993. };
  994. module_i2c_driver(ar0521_i2c_driver);
  995. MODULE_DESCRIPTION("AR0521 MIPI Camera subdev driver");
  996. MODULE_AUTHOR("Krzysztof Hałasa <khalasa@piap.pl>");
  997. MODULE_LICENSE("GPL");