imx412.c (30165B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Sony imx412 Camera Sensor Driver 4 * 5 * Copyright (C) 2021 Intel Corporation 6 */ 7#include <asm/unaligned.h> 8 9#include <linux/clk.h> 10#include <linux/delay.h> 11#include <linux/i2c.h> 12#include <linux/module.h> 13#include <linux/pm_runtime.h> 14#include <linux/regulator/consumer.h> 15 16#include <media/v4l2-ctrls.h> 17#include <media/v4l2-fwnode.h> 18#include <media/v4l2-subdev.h> 19 20/* Streaming Mode */ 21#define IMX412_REG_MODE_SELECT 0x0100 22#define IMX412_MODE_STANDBY 0x00 23#define IMX412_MODE_STREAMING 0x01 24 25/* Lines per frame */ 26#define IMX412_REG_LPFR 0x0340 27 28/* Chip ID */ 29#define IMX412_REG_ID 0x0016 30#define IMX412_ID 0x577 31 32/* Exposure control */ 33#define IMX412_REG_EXPOSURE_CIT 0x0202 34#define IMX412_EXPOSURE_MIN 8 35#define IMX412_EXPOSURE_OFFSET 22 36#define IMX412_EXPOSURE_STEP 1 37#define IMX412_EXPOSURE_DEFAULT 0x0648 38 39/* Analog gain control */ 40#define IMX412_REG_AGAIN 0x0204 41#define IMX412_AGAIN_MIN 0 42#define IMX412_AGAIN_MAX 978 43#define IMX412_AGAIN_STEP 1 44#define IMX412_AGAIN_DEFAULT 0 45 46/* Group hold register */ 47#define IMX412_REG_HOLD 0x0104 48 49/* Input clock rate */ 50#define IMX412_INCLK_RATE 24000000 51 52/* CSI2 HW configuration */ 53#define IMX412_LINK_FREQ 600000000 54#define IMX412_NUM_DATA_LANES 4 55 56#define IMX412_REG_MIN 0x00 57#define IMX412_REG_MAX 0xffff 58 59/** 60 * struct imx412_reg - imx412 sensor register 61 * @address: Register address 62 * @val: Register value 63 */ 64struct imx412_reg { 65 u16 address; 66 u8 val; 67}; 68 69/** 70 * struct imx412_reg_list - imx412 sensor register list 71 * @num_of_regs: Number of registers in the list 72 * @regs: Pointer to register list 73 */ 74struct imx412_reg_list { 75 u32 num_of_regs; 76 const struct imx412_reg *regs; 77}; 78 79/** 80 * struct imx412_mode - imx412 sensor mode structure 81 * @width: Frame width 82 * @height: Frame height 83 * @code: Format code 84 * @hblank: Horizontal blanking in lines 85 * @vblank: Vertical blanking in lines 86 * @vblank_min: Minimum vertical blanking in lines 87 * @vblank_max: Maximum vertical blanking in lines 88 * @pclk: Sensor pixel clock 89 * @link_freq_idx: Link frequency index 90 * @reg_list: Register list for sensor mode 91 */ 92struct imx412_mode { 93 u32 width; 94 u32 height; 95 u32 code; 96 u32 hblank; 97 u32 vblank; 98 u32 vblank_min; 99 u32 vblank_max; 100 u64 pclk; 101 u32 link_freq_idx; 102 struct imx412_reg_list reg_list; 103}; 104 105static const char * const imx412_supply_names[] = { 106 "dovdd", /* Digital I/O power */ 107 "avdd", /* Analog power */ 108 "dvdd", /* Digital core power */ 109}; 110 111/** 112 * struct imx412 - imx412 sensor device structure 113 * @dev: Pointer to generic device 114 * @client: Pointer to i2c client 115 * @sd: V4L2 sub-device 116 * @pad: Media pad. Only one pad supported 117 * @reset_gpio: Sensor reset gpio 118 * @inclk: Sensor input clock 119 * @supplies: Regulator supplies 120 * @ctrl_handler: V4L2 control handler 121 * @link_freq_ctrl: Pointer to link frequency control 122 * @pclk_ctrl: Pointer to pixel clock control 123 * @hblank_ctrl: Pointer to horizontal blanking control 124 * @vblank_ctrl: Pointer to vertical blanking control 125 * @exp_ctrl: Pointer to exposure control 126 * @again_ctrl: Pointer to analog gain control 127 * @vblank: Vertical blanking in lines 128 * @cur_mode: Pointer to current selected sensor mode 129 * @mutex: Mutex for serializing sensor controls 130 * @streaming: Flag indicating streaming state 131 */ 132struct imx412 { 133 struct device *dev; 134 struct i2c_client *client; 135 struct v4l2_subdev sd; 136 struct media_pad pad; 137 struct gpio_desc *reset_gpio; 138 struct clk *inclk; 139 struct regulator_bulk_data supplies[ARRAY_SIZE(imx412_supply_names)]; 140 struct v4l2_ctrl_handler ctrl_handler; 141 struct v4l2_ctrl *link_freq_ctrl; 142 struct v4l2_ctrl *pclk_ctrl; 143 struct v4l2_ctrl *hblank_ctrl; 144 struct v4l2_ctrl *vblank_ctrl; 145 struct { 146 struct v4l2_ctrl *exp_ctrl; 147 struct v4l2_ctrl *again_ctrl; 148 }; 149 u32 vblank; 150 const struct imx412_mode *cur_mode; 151 struct mutex mutex; 152 bool streaming; 153}; 154 155static const s64 link_freq[] = { 156 IMX412_LINK_FREQ, 157}; 158 159/* Sensor mode registers */ 160static const struct imx412_reg mode_4056x3040_regs[] = { 161 {0x0136, 0x18}, 162 {0x0137, 0x00}, 163 {0x3c7e, 0x08}, 164 {0x3c7f, 0x02}, 165 {0x38a8, 0x1f}, 166 {0x38a9, 0xff}, 167 {0x38aa, 0x1f}, 168 {0x38ab, 0xff}, 169 {0x55d4, 0x00}, 170 {0x55d5, 0x00}, 171 {0x55d6, 0x07}, 172 {0x55d7, 0xff}, 173 {0x55e8, 0x07}, 174 {0x55e9, 0xff}, 175 {0x55ea, 0x00}, 176 {0x55eb, 0x00}, 177 {0x575c, 0x07}, 178 {0x575d, 0xff}, 179 {0x575e, 0x00}, 180 {0x575f, 0x00}, 181 {0x5764, 0x00}, 182 {0x5765, 0x00}, 183 {0x5766, 0x07}, 184 {0x5767, 0xff}, 185 {0x5974, 0x04}, 186 {0x5975, 0x01}, 187 {0x5f10, 0x09}, 188 {0x5f11, 0x92}, 189 {0x5f12, 0x32}, 190 {0x5f13, 0x72}, 191 {0x5f14, 0x16}, 192 {0x5f15, 0xba}, 193 {0x5f17, 0x13}, 194 {0x5f18, 0x24}, 195 {0x5f19, 0x60}, 196 {0x5f1a, 0xe3}, 197 {0x5f1b, 0xad}, 198 {0x5f1c, 0x74}, 199 {0x5f2d, 0x25}, 200 {0x5f5c, 0xd0}, 201 {0x6a22, 0x00}, 202 {0x6a23, 0x1d}, 203 {0x7ba8, 0x00}, 204 {0x7ba9, 0x00}, 205 {0x886b, 0x00}, 206 {0x9002, 0x0a}, 207 {0x9004, 0x1a}, 208 {0x9214, 0x93}, 209 {0x9215, 0x69}, 210 {0x9216, 0x93}, 211 {0x9217, 0x6b}, 212 {0x9218, 0x93}, 213 {0x9219, 0x6d}, 214 {0x921a, 0x57}, 215 {0x921b, 0x58}, 216 {0x921c, 0x57}, 217 {0x921d, 0x59}, 218 {0x921e, 0x57}, 219 {0x921f, 0x5a}, 220 {0x9220, 0x57}, 221 {0x9221, 0x5b}, 222 {0x9222, 0x93}, 223 {0x9223, 0x02}, 224 {0x9224, 0x93}, 225 {0x9225, 0x03}, 226 {0x9226, 0x93}, 227 {0x9227, 0x04}, 228 {0x9228, 0x93}, 229 {0x9229, 0x05}, 230 {0x922a, 0x98}, 231 {0x922b, 0x21}, 232 {0x922c, 0xb2}, 233 {0x922d, 0xdb}, 234 {0x922e, 0xb2}, 235 {0x922f, 0xdc}, 236 {0x9230, 0xb2}, 237 {0x9231, 0xdd}, 238 {0x9232, 0xe2}, 239 {0x9233, 0xe1}, 240 {0x9234, 0xb2}, 241 {0x9235, 0xe2}, 242 {0x9236, 0xb2}, 243 {0x9237, 0xe3}, 244 {0x9238, 0xb7}, 245 {0x9239, 0xb9}, 246 {0x923a, 0xb7}, 247 {0x923b, 0xbb}, 248 {0x923c, 0xb7}, 249 {0x923d, 0xbc}, 250 {0x923e, 0xb7}, 251 {0x923f, 0xc5}, 252 {0x9240, 0xb7}, 253 {0x9241, 0xc7}, 254 {0x9242, 0xb7}, 255 {0x9243, 0xc9}, 256 {0x9244, 0x98}, 257 {0x9245, 0x56}, 258 {0x9246, 0x98}, 259 {0x9247, 0x55}, 260 {0x9380, 0x00}, 261 {0x9381, 0x62}, 262 {0x9382, 0x00}, 263 {0x9383, 0x56}, 264 {0x9384, 0x00}, 265 {0x9385, 0x52}, 266 {0x9388, 0x00}, 267 {0x9389, 0x55}, 268 {0x938a, 0x00}, 269 {0x938b, 0x55}, 270 {0x938c, 0x00}, 271 {0x938d, 0x41}, 272 {0x5078, 0x01}, 273 {0x0112, 0x0a}, 274 {0x0113, 0x0a}, 275 {0x0114, 0x03}, 276 {0x0342, 0x11}, 277 {0x0343, 0xa0}, 278 {0x0340, 0x0d}, 279 {0x0341, 0xda}, 280 {0x3210, 0x00}, 281 {0x0344, 0x00}, 282 {0x0345, 0x00}, 283 {0x0346, 0x00}, 284 {0x0347, 0x00}, 285 {0x0348, 0x0f}, 286 {0x0349, 0xd7}, 287 {0x034a, 0x0b}, 288 {0x034b, 0xdf}, 289 {0x00e3, 0x00}, 290 {0x00e4, 0x00}, 291 {0x00e5, 0x01}, 292 {0x00fc, 0x0a}, 293 {0x00fd, 0x0a}, 294 {0x00fe, 0x0a}, 295 {0x00ff, 0x0a}, 296 {0xe013, 0x00}, 297 {0x0220, 0x00}, 298 {0x0221, 0x11}, 299 {0x0381, 0x01}, 300 {0x0383, 0x01}, 301 {0x0385, 0x01}, 302 {0x0387, 0x01}, 303 {0x0900, 0x00}, 304 {0x0901, 0x11}, 305 {0x0902, 0x00}, 306 {0x3140, 0x02}, 307 {0x3241, 0x11}, 308 {0x3250, 0x03}, 309 {0x3e10, 0x00}, 310 {0x3e11, 0x00}, 311 {0x3f0d, 0x00}, 312 {0x3f42, 0x00}, 313 {0x3f43, 0x00}, 314 {0x0401, 0x00}, 315 {0x0404, 0x00}, 316 {0x0405, 0x10}, 317 {0x0408, 0x00}, 318 {0x0409, 0x00}, 319 {0x040a, 0x00}, 320 {0x040b, 0x00}, 321 {0x040c, 0x0f}, 322 {0x040d, 0xd8}, 323 {0x040e, 0x0b}, 324 {0x040f, 0xe0}, 325 {0x034c, 0x0f}, 326 {0x034d, 0xd8}, 327 {0x034e, 0x0b}, 328 {0x034f, 0xe0}, 329 {0x0301, 0x05}, 330 {0x0303, 0x02}, 331 {0x0305, 0x04}, 332 {0x0306, 0x00}, 333 {0x0307, 0xc8}, 334 {0x0309, 0x0a}, 335 {0x030b, 0x01}, 336 {0x030d, 0x02}, 337 {0x030e, 0x01}, 338 {0x030f, 0x5e}, 339 {0x0310, 0x00}, 340 {0x0820, 0x12}, 341 {0x0821, 0xc0}, 342 {0x0822, 0x00}, 343 {0x0823, 0x00}, 344 {0x3e20, 0x01}, 345 {0x3e37, 0x00}, 346 {0x3f50, 0x00}, 347 {0x3f56, 0x00}, 348 {0x3f57, 0xe2}, 349 {0x3c0a, 0x5a}, 350 {0x3c0b, 0x55}, 351 {0x3c0c, 0x28}, 352 {0x3c0d, 0x07}, 353 {0x3c0e, 0xff}, 354 {0x3c0f, 0x00}, 355 {0x3c10, 0x00}, 356 {0x3c11, 0x02}, 357 {0x3c12, 0x00}, 358 {0x3c13, 0x03}, 359 {0x3c14, 0x00}, 360 {0x3c15, 0x00}, 361 {0x3c16, 0x0c}, 362 {0x3c17, 0x0c}, 363 {0x3c18, 0x0c}, 364 {0x3c19, 0x0a}, 365 {0x3c1a, 0x0a}, 366 {0x3c1b, 0x0a}, 367 {0x3c1c, 0x00}, 368 {0x3c1d, 0x00}, 369 {0x3c1e, 0x00}, 370 {0x3c1f, 0x00}, 371 {0x3c20, 0x00}, 372 {0x3c21, 0x00}, 373 {0x3c22, 0x3f}, 374 {0x3c23, 0x0a}, 375 {0x3e35, 0x01}, 376 {0x3f4a, 0x03}, 377 {0x3f4b, 0xbf}, 378 {0x3f26, 0x00}, 379 {0x0202, 0x0d}, 380 {0x0203, 0xc4}, 381 {0x0204, 0x00}, 382 {0x0205, 0x00}, 383 {0x020e, 0x01}, 384 {0x020f, 0x00}, 385 {0x0210, 0x01}, 386 {0x0211, 0x00}, 387 {0x0212, 0x01}, 388 {0x0213, 0x00}, 389 {0x0214, 0x01}, 390 {0x0215, 0x00}, 391 {0xbcf1, 0x00}, 392}; 393 394/* Supported sensor mode configurations */ 395static const struct imx412_mode supported_mode = { 396 .width = 4056, 397 .height = 3040, 398 .hblank = 456, 399 .vblank = 506, 400 .vblank_min = 506, 401 .vblank_max = 32420, 402 .pclk = 480000000, 403 .link_freq_idx = 0, 404 .code = MEDIA_BUS_FMT_SRGGB10_1X10, 405 .reg_list = { 406 .num_of_regs = ARRAY_SIZE(mode_4056x3040_regs), 407 .regs = mode_4056x3040_regs, 408 }, 409}; 410 411/** 412 * to_imx412() - imx412 V4L2 sub-device to imx412 device. 413 * @subdev: pointer to imx412 V4L2 sub-device 414 * 415 * Return: pointer to imx412 device 416 */ 417static inline struct imx412 *to_imx412(struct v4l2_subdev *subdev) 418{ 419 return container_of(subdev, struct imx412, sd); 420} 421 422/** 423 * imx412_read_reg() - Read registers. 424 * @imx412: pointer to imx412 device 425 * @reg: register address 426 * @len: length of bytes to read. Max supported bytes is 4 427 * @val: pointer to register value to be filled. 428 * 429 * Return: 0 if successful, error code otherwise. 430 */ 431static int imx412_read_reg(struct imx412 *imx412, u16 reg, u32 len, u32 *val) 432{ 433 struct i2c_client *client = v4l2_get_subdevdata(&imx412->sd); 434 struct i2c_msg msgs[2] = {0}; 435 u8 addr_buf[2] = {0}; 436 u8 data_buf[4] = {0}; 437 int ret; 438 439 if (WARN_ON(len > 4)) 440 return -EINVAL; 441 442 put_unaligned_be16(reg, addr_buf); 443 444 /* Write register address */ 445 msgs[0].addr = client->addr; 446 msgs[0].flags = 0; 447 msgs[0].len = ARRAY_SIZE(addr_buf); 448 msgs[0].buf = addr_buf; 449 450 /* Read data from register */ 451 msgs[1].addr = client->addr; 452 msgs[1].flags = I2C_M_RD; 453 msgs[1].len = len; 454 msgs[1].buf = &data_buf[4 - len]; 455 456 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); 457 if (ret != ARRAY_SIZE(msgs)) 458 return -EIO; 459 460 *val = get_unaligned_be32(data_buf); 461 462 return 0; 463} 464 465/** 466 * imx412_write_reg() - Write register 467 * @imx412: pointer to imx412 device 468 * @reg: register address 469 * @len: length of bytes. Max supported bytes is 4 470 * @val: register value 471 * 472 * Return: 0 if successful, error code otherwise. 473 */ 474static int imx412_write_reg(struct imx412 *imx412, u16 reg, u32 len, u32 val) 475{ 476 struct i2c_client *client = v4l2_get_subdevdata(&imx412->sd); 477 u8 buf[6] = {0}; 478 479 if (WARN_ON(len > 4)) 480 return -EINVAL; 481 482 put_unaligned_be16(reg, buf); 483 put_unaligned_be32(val << (8 * (4 - len)), buf + 2); 484 if (i2c_master_send(client, buf, len + 2) != len + 2) 485 return -EIO; 486 487 return 0; 488} 489 490/** 491 * imx412_write_regs() - Write a list of registers 492 * @imx412: pointer to imx412 device 493 * @regs: list of registers to be written 494 * @len: length of registers array 495 * 496 * Return: 0 if successful, error code otherwise. 497 */ 498static int imx412_write_regs(struct imx412 *imx412, 499 const struct imx412_reg *regs, u32 len) 500{ 501 unsigned int i; 502 int ret; 503 504 for (i = 0; i < len; i++) { 505 ret = imx412_write_reg(imx412, regs[i].address, 1, regs[i].val); 506 if (ret) 507 return ret; 508 } 509 510 return 0; 511} 512 513/** 514 * imx412_update_controls() - Update control ranges based on streaming mode 515 * @imx412: pointer to imx412 device 516 * @mode: pointer to imx412_mode sensor mode 517 * 518 * Return: 0 if successful, error code otherwise. 519 */ 520static int imx412_update_controls(struct imx412 *imx412, 521 const struct imx412_mode *mode) 522{ 523 int ret; 524 525 ret = __v4l2_ctrl_s_ctrl(imx412->link_freq_ctrl, mode->link_freq_idx); 526 if (ret) 527 return ret; 528 529 ret = __v4l2_ctrl_s_ctrl(imx412->hblank_ctrl, mode->hblank); 530 if (ret) 531 return ret; 532 533 return __v4l2_ctrl_modify_range(imx412->vblank_ctrl, mode->vblank_min, 534 mode->vblank_max, 1, mode->vblank); 535} 536 537/** 538 * imx412_update_exp_gain() - Set updated exposure and gain 539 * @imx412: pointer to imx412 device 540 * @exposure: updated exposure value 541 * @gain: updated analog gain value 542 * 543 * Return: 0 if successful, error code otherwise. 544 */ 545static int imx412_update_exp_gain(struct imx412 *imx412, u32 exposure, u32 gain) 546{ 547 u32 lpfr, shutter; 548 int ret; 549 550 lpfr = imx412->vblank + imx412->cur_mode->height; 551 shutter = lpfr - exposure; 552 553 dev_dbg(imx412->dev, "Set exp %u, analog gain %u, shutter %u, lpfr %u", 554 exposure, gain, shutter, lpfr); 555 556 ret = imx412_write_reg(imx412, IMX412_REG_HOLD, 1, 1); 557 if (ret) 558 return ret; 559 560 ret = imx412_write_reg(imx412, IMX412_REG_LPFR, 2, lpfr); 561 if (ret) 562 goto error_release_group_hold; 563 564 ret = imx412_write_reg(imx412, IMX412_REG_EXPOSURE_CIT, 2, shutter); 565 if (ret) 566 goto error_release_group_hold; 567 568 ret = imx412_write_reg(imx412, IMX412_REG_AGAIN, 2, gain); 569 570error_release_group_hold: 571 imx412_write_reg(imx412, IMX412_REG_HOLD, 1, 0); 572 573 return ret; 574} 575 576/** 577 * imx412_set_ctrl() - Set subdevice control 578 * @ctrl: pointer to v4l2_ctrl structure 579 * 580 * Supported controls: 581 * - V4L2_CID_VBLANK 582 * - cluster controls: 583 * - V4L2_CID_ANALOGUE_GAIN 584 * - V4L2_CID_EXPOSURE 585 * 586 * Return: 0 if successful, error code otherwise. 587 */ 588static int imx412_set_ctrl(struct v4l2_ctrl *ctrl) 589{ 590 struct imx412 *imx412 = 591 container_of(ctrl->handler, struct imx412, ctrl_handler); 592 u32 analog_gain; 593 u32 exposure; 594 int ret; 595 596 switch (ctrl->id) { 597 case V4L2_CID_VBLANK: 598 imx412->vblank = imx412->vblank_ctrl->val; 599 600 dev_dbg(imx412->dev, "Received vblank %u, new lpfr %u", 601 imx412->vblank, 602 imx412->vblank + imx412->cur_mode->height); 603 604 ret = __v4l2_ctrl_modify_range(imx412->exp_ctrl, 605 IMX412_EXPOSURE_MIN, 606 imx412->vblank + 607 imx412->cur_mode->height - 608 IMX412_EXPOSURE_OFFSET, 609 1, IMX412_EXPOSURE_DEFAULT); 610 break; 611 case V4L2_CID_EXPOSURE: 612 /* Set controls only if sensor is in power on state */ 613 if (!pm_runtime_get_if_in_use(imx412->dev)) 614 return 0; 615 616 exposure = ctrl->val; 617 analog_gain = imx412->again_ctrl->val; 618 619 dev_dbg(imx412->dev, "Received exp %u, analog gain %u", 620 exposure, analog_gain); 621 622 ret = imx412_update_exp_gain(imx412, exposure, analog_gain); 623 624 pm_runtime_put(imx412->dev); 625 626 break; 627 default: 628 dev_err(imx412->dev, "Invalid control %d", ctrl->id); 629 ret = -EINVAL; 630 } 631 632 return ret; 633} 634 635/* V4l2 subdevice control ops*/ 636static const struct v4l2_ctrl_ops imx412_ctrl_ops = { 637 .s_ctrl = imx412_set_ctrl, 638}; 639 640/** 641 * imx412_enum_mbus_code() - Enumerate V4L2 sub-device mbus codes 642 * @sd: pointer to imx412 V4L2 sub-device structure 643 * @sd_state: V4L2 sub-device configuration 644 * @code: V4L2 sub-device code enumeration need to be filled 645 * 646 * Return: 0 if successful, error code otherwise. 647 */ 648static int imx412_enum_mbus_code(struct v4l2_subdev *sd, 649 struct v4l2_subdev_state *sd_state, 650 struct v4l2_subdev_mbus_code_enum *code) 651{ 652 if (code->index > 0) 653 return -EINVAL; 654 655 code->code = supported_mode.code; 656 657 return 0; 658} 659 660/** 661 * imx412_enum_frame_size() - Enumerate V4L2 sub-device frame sizes 662 * @sd: pointer to imx412 V4L2 sub-device structure 663 * @sd_state: V4L2 sub-device configuration 664 * @fsize: V4L2 sub-device size enumeration need to be filled 665 * 666 * Return: 0 if successful, error code otherwise. 667 */ 668static int imx412_enum_frame_size(struct v4l2_subdev *sd, 669 struct v4l2_subdev_state *sd_state, 670 struct v4l2_subdev_frame_size_enum *fsize) 671{ 672 if (fsize->index > 0) 673 return -EINVAL; 674 675 if (fsize->code != supported_mode.code) 676 return -EINVAL; 677 678 fsize->min_width = supported_mode.width; 679 fsize->max_width = fsize->min_width; 680 fsize->min_height = supported_mode.height; 681 fsize->max_height = fsize->min_height; 682 683 return 0; 684} 685 686/** 687 * imx412_fill_pad_format() - Fill subdevice pad format 688 * from selected sensor mode 689 * @imx412: pointer to imx412 device 690 * @mode: pointer to imx412_mode sensor mode 691 * @fmt: V4L2 sub-device format need to be filled 692 */ 693static void imx412_fill_pad_format(struct imx412 *imx412, 694 const struct imx412_mode *mode, 695 struct v4l2_subdev_format *fmt) 696{ 697 fmt->format.width = mode->width; 698 fmt->format.height = mode->height; 699 fmt->format.code = mode->code; 700 fmt->format.field = V4L2_FIELD_NONE; 701 fmt->format.colorspace = V4L2_COLORSPACE_RAW; 702 fmt->format.ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT; 703 fmt->format.quantization = V4L2_QUANTIZATION_DEFAULT; 704 fmt->format.xfer_func = V4L2_XFER_FUNC_NONE; 705} 706 707/** 708 * imx412_get_pad_format() - Get subdevice pad format 709 * @sd: pointer to imx412 V4L2 sub-device structure 710 * @sd_state: V4L2 sub-device configuration 711 * @fmt: V4L2 sub-device format need to be set 712 * 713 * Return: 0 if successful, error code otherwise. 714 */ 715static int imx412_get_pad_format(struct v4l2_subdev *sd, 716 struct v4l2_subdev_state *sd_state, 717 struct v4l2_subdev_format *fmt) 718{ 719 struct imx412 *imx412 = to_imx412(sd); 720 721 mutex_lock(&imx412->mutex); 722 723 if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { 724 struct v4l2_mbus_framefmt *framefmt; 725 726 framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad); 727 fmt->format = *framefmt; 728 } else { 729 imx412_fill_pad_format(imx412, imx412->cur_mode, fmt); 730 } 731 732 mutex_unlock(&imx412->mutex); 733 734 return 0; 735} 736 737/** 738 * imx412_set_pad_format() - Set subdevice pad format 739 * @sd: pointer to imx412 V4L2 sub-device structure 740 * @sd_state: V4L2 sub-device configuration 741 * @fmt: V4L2 sub-device format need to be set 742 * 743 * Return: 0 if successful, error code otherwise. 744 */ 745static int imx412_set_pad_format(struct v4l2_subdev *sd, 746 struct v4l2_subdev_state *sd_state, 747 struct v4l2_subdev_format *fmt) 748{ 749 struct imx412 *imx412 = to_imx412(sd); 750 const struct imx412_mode *mode; 751 int ret = 0; 752 753 mutex_lock(&imx412->mutex); 754 755 mode = &supported_mode; 756 imx412_fill_pad_format(imx412, mode, fmt); 757 758 if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { 759 struct v4l2_mbus_framefmt *framefmt; 760 761 framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad); 762 *framefmt = fmt->format; 763 } else { 764 ret = imx412_update_controls(imx412, mode); 765 if (!ret) 766 imx412->cur_mode = mode; 767 } 768 769 mutex_unlock(&imx412->mutex); 770 771 return ret; 772} 773 774/** 775 * imx412_init_pad_cfg() - Initialize sub-device pad configuration 776 * @sd: pointer to imx412 V4L2 sub-device structure 777 * @sd_state: V4L2 sub-device configuration 778 * 779 * Return: 0 if successful, error code otherwise. 780 */ 781static int imx412_init_pad_cfg(struct v4l2_subdev *sd, 782 struct v4l2_subdev_state *sd_state) 783{ 784 struct imx412 *imx412 = to_imx412(sd); 785 struct v4l2_subdev_format fmt = { 0 }; 786 787 fmt.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE; 788 imx412_fill_pad_format(imx412, &supported_mode, &fmt); 789 790 return imx412_set_pad_format(sd, sd_state, &fmt); 791} 792 793/** 794 * imx412_start_streaming() - Start sensor stream 795 * @imx412: pointer to imx412 device 796 * 797 * Return: 0 if successful, error code otherwise. 798 */ 799static int imx412_start_streaming(struct imx412 *imx412) 800{ 801 const struct imx412_reg_list *reg_list; 802 int ret; 803 804 /* Write sensor mode registers */ 805 reg_list = &imx412->cur_mode->reg_list; 806 ret = imx412_write_regs(imx412, reg_list->regs, 807 reg_list->num_of_regs); 808 if (ret) { 809 dev_err(imx412->dev, "fail to write initial registers"); 810 return ret; 811 } 812 813 /* Setup handler will write actual exposure and gain */ 814 ret = __v4l2_ctrl_handler_setup(imx412->sd.ctrl_handler); 815 if (ret) { 816 dev_err(imx412->dev, "fail to setup handler"); 817 return ret; 818 } 819 820 /* Delay is required before streaming*/ 821 usleep_range(7400, 8000); 822 823 /* Start streaming */ 824 ret = imx412_write_reg(imx412, IMX412_REG_MODE_SELECT, 825 1, IMX412_MODE_STREAMING); 826 if (ret) { 827 dev_err(imx412->dev, "fail to start streaming"); 828 return ret; 829 } 830 831 return 0; 832} 833 834/** 835 * imx412_stop_streaming() - Stop sensor stream 836 * @imx412: pointer to imx412 device 837 * 838 * Return: 0 if successful, error code otherwise. 839 */ 840static int imx412_stop_streaming(struct imx412 *imx412) 841{ 842 return imx412_write_reg(imx412, IMX412_REG_MODE_SELECT, 843 1, IMX412_MODE_STANDBY); 844} 845 846/** 847 * imx412_set_stream() - Enable sensor streaming 848 * @sd: pointer to imx412 subdevice 849 * @enable: set to enable sensor streaming 850 * 851 * Return: 0 if successful, error code otherwise. 852 */ 853static int imx412_set_stream(struct v4l2_subdev *sd, int enable) 854{ 855 struct imx412 *imx412 = to_imx412(sd); 856 int ret; 857 858 mutex_lock(&imx412->mutex); 859 860 if (imx412->streaming == enable) { 861 mutex_unlock(&imx412->mutex); 862 return 0; 863 } 864 865 if (enable) { 866 ret = pm_runtime_resume_and_get(imx412->dev); 867 if (ret) 868 goto error_unlock; 869 870 ret = imx412_start_streaming(imx412); 871 if (ret) 872 goto error_power_off; 873 } else { 874 imx412_stop_streaming(imx412); 875 pm_runtime_put(imx412->dev); 876 } 877 878 imx412->streaming = enable; 879 880 mutex_unlock(&imx412->mutex); 881 882 return 0; 883 884error_power_off: 885 pm_runtime_put(imx412->dev); 886error_unlock: 887 mutex_unlock(&imx412->mutex); 888 889 return ret; 890} 891 892/** 893 * imx412_detect() - Detect imx412 sensor 894 * @imx412: pointer to imx412 device 895 * 896 * Return: 0 if successful, -EIO if sensor id does not match 897 */ 898static int imx412_detect(struct imx412 *imx412) 899{ 900 int ret; 901 u32 val; 902 903 ret = imx412_read_reg(imx412, IMX412_REG_ID, 2, &val); 904 if (ret) 905 return ret; 906 907 if (val != IMX412_ID) { 908 dev_err(imx412->dev, "chip id mismatch: %x!=%x", 909 IMX412_ID, val); 910 return -ENXIO; 911 } 912 913 return 0; 914} 915 916/** 917 * imx412_parse_hw_config() - Parse HW configuration and check if supported 918 * @imx412: pointer to imx412 device 919 * 920 * Return: 0 if successful, error code otherwise. 921 */ 922static int imx412_parse_hw_config(struct imx412 *imx412) 923{ 924 struct fwnode_handle *fwnode = dev_fwnode(imx412->dev); 925 struct v4l2_fwnode_endpoint bus_cfg = { 926 .bus_type = V4L2_MBUS_CSI2_DPHY 927 }; 928 struct fwnode_handle *ep; 929 unsigned long rate; 930 unsigned int i; 931 int ret; 932 933 if (!fwnode) 934 return -ENXIO; 935 936 /* Request optional reset pin */ 937 imx412->reset_gpio = devm_gpiod_get_optional(imx412->dev, "reset", 938 GPIOD_OUT_LOW); 939 if (IS_ERR(imx412->reset_gpio)) { 940 dev_err(imx412->dev, "failed to get reset gpio %ld", 941 PTR_ERR(imx412->reset_gpio)); 942 return PTR_ERR(imx412->reset_gpio); 943 } 944 945 /* Get sensor input clock */ 946 imx412->inclk = devm_clk_get(imx412->dev, NULL); 947 if (IS_ERR(imx412->inclk)) { 948 dev_err(imx412->dev, "could not get inclk"); 949 return PTR_ERR(imx412->inclk); 950 } 951 952 rate = clk_get_rate(imx412->inclk); 953 if (rate != IMX412_INCLK_RATE) { 954 dev_err(imx412->dev, "inclk frequency mismatch"); 955 return -EINVAL; 956 } 957 958 /* Get optional DT defined regulators */ 959 for (i = 0; i < ARRAY_SIZE(imx412_supply_names); i++) 960 imx412->supplies[i].supply = imx412_supply_names[i]; 961 962 ret = devm_regulator_bulk_get(imx412->dev, 963 ARRAY_SIZE(imx412_supply_names), 964 imx412->supplies); 965 if (ret) 966 return ret; 967 968 ep = fwnode_graph_get_next_endpoint(fwnode, NULL); 969 if (!ep) 970 return -ENXIO; 971 972 ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg); 973 fwnode_handle_put(ep); 974 if (ret) 975 return ret; 976 977 if (bus_cfg.bus.mipi_csi2.num_data_lanes != IMX412_NUM_DATA_LANES) { 978 dev_err(imx412->dev, 979 "number of CSI2 data lanes %d is not supported", 980 bus_cfg.bus.mipi_csi2.num_data_lanes); 981 ret = -EINVAL; 982 goto done_endpoint_free; 983 } 984 985 if (!bus_cfg.nr_of_link_frequencies) { 986 dev_err(imx412->dev, "no link frequencies defined"); 987 ret = -EINVAL; 988 goto done_endpoint_free; 989 } 990 991 for (i = 0; i < bus_cfg.nr_of_link_frequencies; i++) 992 if (bus_cfg.link_frequencies[i] == IMX412_LINK_FREQ) 993 goto done_endpoint_free; 994 995 ret = -EINVAL; 996 997done_endpoint_free: 998 v4l2_fwnode_endpoint_free(&bus_cfg); 999 1000 return ret; 1001} 1002 1003/* V4l2 subdevice ops */ 1004static const struct v4l2_subdev_video_ops imx412_video_ops = { 1005 .s_stream = imx412_set_stream, 1006}; 1007 1008static const struct v4l2_subdev_pad_ops imx412_pad_ops = { 1009 .init_cfg = imx412_init_pad_cfg, 1010 .enum_mbus_code = imx412_enum_mbus_code, 1011 .enum_frame_size = imx412_enum_frame_size, 1012 .get_fmt = imx412_get_pad_format, 1013 .set_fmt = imx412_set_pad_format, 1014}; 1015 1016static const struct v4l2_subdev_ops imx412_subdev_ops = { 1017 .video = &imx412_video_ops, 1018 .pad = &imx412_pad_ops, 1019}; 1020 1021/** 1022 * imx412_power_on() - Sensor power on sequence 1023 * @dev: pointer to i2c device 1024 * 1025 * Return: 0 if successful, error code otherwise. 1026 */ 1027static int imx412_power_on(struct device *dev) 1028{ 1029 struct v4l2_subdev *sd = dev_get_drvdata(dev); 1030 struct imx412 *imx412 = to_imx412(sd); 1031 int ret; 1032 1033 ret = regulator_bulk_enable(ARRAY_SIZE(imx412_supply_names), 1034 imx412->supplies); 1035 if (ret < 0) { 1036 dev_err(dev, "failed to enable regulators\n"); 1037 return ret; 1038 } 1039 1040 gpiod_set_value_cansleep(imx412->reset_gpio, 0); 1041 1042 ret = clk_prepare_enable(imx412->inclk); 1043 if (ret) { 1044 dev_err(imx412->dev, "fail to enable inclk"); 1045 goto error_reset; 1046 } 1047 1048 usleep_range(1000, 1200); 1049 1050 return 0; 1051 1052error_reset: 1053 gpiod_set_value_cansleep(imx412->reset_gpio, 1); 1054 regulator_bulk_disable(ARRAY_SIZE(imx412_supply_names), 1055 imx412->supplies); 1056 1057 return ret; 1058} 1059 1060/** 1061 * imx412_power_off() - Sensor power off sequence 1062 * @dev: pointer to i2c device 1063 * 1064 * Return: 0 if successful, error code otherwise. 1065 */ 1066static int imx412_power_off(struct device *dev) 1067{ 1068 struct v4l2_subdev *sd = dev_get_drvdata(dev); 1069 struct imx412 *imx412 = to_imx412(sd); 1070 1071 clk_disable_unprepare(imx412->inclk); 1072 1073 gpiod_set_value_cansleep(imx412->reset_gpio, 1); 1074 1075 regulator_bulk_disable(ARRAY_SIZE(imx412_supply_names), 1076 imx412->supplies); 1077 1078 return 0; 1079} 1080 1081/** 1082 * imx412_init_controls() - Initialize sensor subdevice controls 1083 * @imx412: pointer to imx412 device 1084 * 1085 * Return: 0 if successful, error code otherwise. 1086 */ 1087static int imx412_init_controls(struct imx412 *imx412) 1088{ 1089 struct v4l2_ctrl_handler *ctrl_hdlr = &imx412->ctrl_handler; 1090 const struct imx412_mode *mode = imx412->cur_mode; 1091 u32 lpfr; 1092 int ret; 1093 1094 ret = v4l2_ctrl_handler_init(ctrl_hdlr, 6); 1095 if (ret) 1096 return ret; 1097 1098 /* Serialize controls with sensor device */ 1099 ctrl_hdlr->lock = &imx412->mutex; 1100 1101 /* Initialize exposure and gain */ 1102 lpfr = mode->vblank + mode->height; 1103 imx412->exp_ctrl = v4l2_ctrl_new_std(ctrl_hdlr, 1104 &imx412_ctrl_ops, 1105 V4L2_CID_EXPOSURE, 1106 IMX412_EXPOSURE_MIN, 1107 lpfr - IMX412_EXPOSURE_OFFSET, 1108 IMX412_EXPOSURE_STEP, 1109 IMX412_EXPOSURE_DEFAULT); 1110 1111 imx412->again_ctrl = v4l2_ctrl_new_std(ctrl_hdlr, 1112 &imx412_ctrl_ops, 1113 V4L2_CID_ANALOGUE_GAIN, 1114 IMX412_AGAIN_MIN, 1115 IMX412_AGAIN_MAX, 1116 IMX412_AGAIN_STEP, 1117 IMX412_AGAIN_DEFAULT); 1118 1119 v4l2_ctrl_cluster(2, &imx412->exp_ctrl); 1120 1121 imx412->vblank_ctrl = v4l2_ctrl_new_std(ctrl_hdlr, 1122 &imx412_ctrl_ops, 1123 V4L2_CID_VBLANK, 1124 mode->vblank_min, 1125 mode->vblank_max, 1126 1, mode->vblank); 1127 1128 /* Read only controls */ 1129 imx412->pclk_ctrl = v4l2_ctrl_new_std(ctrl_hdlr, 1130 &imx412_ctrl_ops, 1131 V4L2_CID_PIXEL_RATE, 1132 mode->pclk, mode->pclk, 1133 1, mode->pclk); 1134 1135 imx412->link_freq_ctrl = v4l2_ctrl_new_int_menu(ctrl_hdlr, 1136 &imx412_ctrl_ops, 1137 V4L2_CID_LINK_FREQ, 1138 ARRAY_SIZE(link_freq) - 1139 1, 1140 mode->link_freq_idx, 1141 link_freq); 1142 if (imx412->link_freq_ctrl) 1143 imx412->link_freq_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; 1144 1145 imx412->hblank_ctrl = v4l2_ctrl_new_std(ctrl_hdlr, 1146 &imx412_ctrl_ops, 1147 V4L2_CID_HBLANK, 1148 IMX412_REG_MIN, 1149 IMX412_REG_MAX, 1150 1, mode->hblank); 1151 if (imx412->hblank_ctrl) 1152 imx412->hblank_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY; 1153 1154 if (ctrl_hdlr->error) { 1155 dev_err(imx412->dev, "control init failed: %d", 1156 ctrl_hdlr->error); 1157 v4l2_ctrl_handler_free(ctrl_hdlr); 1158 return ctrl_hdlr->error; 1159 } 1160 1161 imx412->sd.ctrl_handler = ctrl_hdlr; 1162 1163 return 0; 1164} 1165 1166/** 1167 * imx412_probe() - I2C client device binding 1168 * @client: pointer to i2c client device 1169 * 1170 * Return: 0 if successful, error code otherwise. 1171 */ 1172static int imx412_probe(struct i2c_client *client) 1173{ 1174 struct imx412 *imx412; 1175 int ret; 1176 1177 imx412 = devm_kzalloc(&client->dev, sizeof(*imx412), GFP_KERNEL); 1178 if (!imx412) 1179 return -ENOMEM; 1180 1181 imx412->dev = &client->dev; 1182 1183 /* Initialize subdev */ 1184 v4l2_i2c_subdev_init(&imx412->sd, client, &imx412_subdev_ops); 1185 1186 ret = imx412_parse_hw_config(imx412); 1187 if (ret) { 1188 dev_err(imx412->dev, "HW configuration is not supported"); 1189 return ret; 1190 } 1191 1192 mutex_init(&imx412->mutex); 1193 1194 ret = imx412_power_on(imx412->dev); 1195 if (ret) { 1196 dev_err(imx412->dev, "failed to power-on the sensor"); 1197 goto error_mutex_destroy; 1198 } 1199 1200 /* Check module identity */ 1201 ret = imx412_detect(imx412); 1202 if (ret) { 1203 dev_err(imx412->dev, "failed to find sensor: %d", ret); 1204 goto error_power_off; 1205 } 1206 1207 /* Set default mode to max resolution */ 1208 imx412->cur_mode = &supported_mode; 1209 imx412->vblank = imx412->cur_mode->vblank; 1210 1211 ret = imx412_init_controls(imx412); 1212 if (ret) { 1213 dev_err(imx412->dev, "failed to init controls: %d", ret); 1214 goto error_power_off; 1215 } 1216 1217 /* Initialize subdev */ 1218 imx412->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; 1219 imx412->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR; 1220 1221 /* Initialize source pad */ 1222 imx412->pad.flags = MEDIA_PAD_FL_SOURCE; 1223 ret = media_entity_pads_init(&imx412->sd.entity, 1, &imx412->pad); 1224 if (ret) { 1225 dev_err(imx412->dev, "failed to init entity pads: %d", ret); 1226 goto error_handler_free; 1227 } 1228 1229 ret = v4l2_async_register_subdev_sensor(&imx412->sd); 1230 if (ret < 0) { 1231 dev_err(imx412->dev, 1232 "failed to register async subdev: %d", ret); 1233 goto error_media_entity; 1234 } 1235 1236 pm_runtime_set_active(imx412->dev); 1237 pm_runtime_enable(imx412->dev); 1238 pm_runtime_idle(imx412->dev); 1239 1240 return 0; 1241 1242error_media_entity: 1243 media_entity_cleanup(&imx412->sd.entity); 1244error_handler_free: 1245 v4l2_ctrl_handler_free(imx412->sd.ctrl_handler); 1246error_power_off: 1247 imx412_power_off(imx412->dev); 1248error_mutex_destroy: 1249 mutex_destroy(&imx412->mutex); 1250 1251 return ret; 1252} 1253 1254/** 1255 * imx412_remove() - I2C client device unbinding 1256 * @client: pointer to I2C client device 1257 * 1258 * Return: 0 if successful, error code otherwise. 1259 */ 1260static int imx412_remove(struct i2c_client *client) 1261{ 1262 struct v4l2_subdev *sd = i2c_get_clientdata(client); 1263 struct imx412 *imx412 = to_imx412(sd); 1264 1265 v4l2_async_unregister_subdev(sd); 1266 media_entity_cleanup(&sd->entity); 1267 v4l2_ctrl_handler_free(sd->ctrl_handler); 1268 1269 pm_runtime_disable(&client->dev); 1270 if (!pm_runtime_status_suspended(&client->dev)) 1271 imx412_power_off(&client->dev); 1272 pm_runtime_set_suspended(&client->dev); 1273 1274 mutex_destroy(&imx412->mutex); 1275 1276 return 0; 1277} 1278 1279static const struct dev_pm_ops imx412_pm_ops = { 1280 SET_RUNTIME_PM_OPS(imx412_power_off, imx412_power_on, NULL) 1281}; 1282 1283static const struct of_device_id imx412_of_match[] = { 1284 { .compatible = "sony,imx412" }, 1285 { } 1286}; 1287 1288MODULE_DEVICE_TABLE(of, imx412_of_match); 1289 1290static struct i2c_driver imx412_driver = { 1291 .probe_new = imx412_probe, 1292 .remove = imx412_remove, 1293 .driver = { 1294 .name = "imx412", 1295 .pm = &imx412_pm_ops, 1296 .of_match_table = imx412_of_match, 1297 }, 1298}; 1299 1300module_i2c_driver(imx412_driver); 1301 1302MODULE_DESCRIPTION("Sony imx412 sensor driver"); 1303MODULE_LICENSE("GPL");