Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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