| .. | .. |
|---|
| 11 | 11 | * V0.0X01.0X04 fix hdr ae error |
|---|
| 12 | 12 | * V0.0X01.0X05 add quick stream on/off |
|---|
| 13 | 13 | * V0.0X01.0X06 Increase hdr exposure restrictions |
|---|
| 14 | | - * V0.0X01.0X07 add binning resolution |
|---|
| 15 | 14 | */ |
|---|
| 16 | 15 | |
|---|
| 17 | 16 | #define DEBUG |
|---|
| .. | .. |
|---|
| 34 | 33 | #include <linux/pinctrl/consumer.h> |
|---|
| 35 | 34 | #include <linux/rk-preisp.h> |
|---|
| 36 | 35 | |
|---|
| 37 | | -#define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x07) |
|---|
| 36 | +#define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x06) |
|---|
| 38 | 37 | |
|---|
| 39 | 38 | #ifndef V4L2_CID_DIGITAL_GAIN |
|---|
| 40 | 39 | #define V4L2_CID_DIGITAL_GAIN V4L2_CID_GAIN |
|---|
| 41 | 40 | #endif |
|---|
| 42 | 41 | |
|---|
| 43 | 42 | #define MIPI_FREQ_594M 594000000 |
|---|
| 44 | | -#define MIPI_FREQ_445M 445000000 |
|---|
| 45 | 43 | |
|---|
| 46 | 44 | #define IMX335_4LANES 4 |
|---|
| 47 | 45 | |
|---|
| .. | .. |
|---|
| 160 | 158 | |
|---|
| 161 | 159 | #define IMX335_NUM_SUPPLIES ARRAY_SIZE(imx335_supply_names) |
|---|
| 162 | 160 | |
|---|
| 163 | | -enum imx335_max_pad { |
|---|
| 164 | | - PAD0, /* link to isp */ |
|---|
| 165 | | - PAD1, /* link to csi wr0 | hdr x2:L x3:M */ |
|---|
| 166 | | - PAD2, /* link to csi wr1 | hdr x3:L */ |
|---|
| 167 | | - PAD3, /* link to csi wr2 | hdr x2:M x3:S */ |
|---|
| 168 | | - PAD_MAX, |
|---|
| 169 | | -}; |
|---|
| 170 | | - |
|---|
| 171 | 161 | struct regval { |
|---|
| 172 | 162 | u16 addr; |
|---|
| 173 | 163 | u8 val; |
|---|
| .. | .. |
|---|
| 182 | 172 | u32 vts_def; |
|---|
| 183 | 173 | u32 exp_def; |
|---|
| 184 | 174 | u32 bpp; |
|---|
| 185 | | - u32 mipi_freq_idx; |
|---|
| 186 | 175 | const struct regval *reg_list; |
|---|
| 187 | 176 | u32 hdr_mode; |
|---|
| 188 | 177 | u32 vc[PAD_MAX]; |
|---|
| .. | .. |
|---|
| 227 | 216 | /* |
|---|
| 228 | 217 | * Xclk 37.125Mhz |
|---|
| 229 | 218 | */ |
|---|
| 230 | | -static const struct regval imx335_linear_12bit_1296x972_regs[] = { |
|---|
| 231 | | - {0x3002, 0x00}, |
|---|
| 232 | | - {0x3018, 0x01}, |
|---|
| 233 | | - {0x300C, 0x5B}, |
|---|
| 234 | | - {0x300D, 0x40}, |
|---|
| 235 | | - {0x3034, 0x26}, |
|---|
| 236 | | - {0x3035, 0x02}, |
|---|
| 237 | | - {0x3048, 0x00}, |
|---|
| 238 | | - {0x3049, 0x00}, |
|---|
| 239 | | - {0x304A, 0x03}, |
|---|
| 240 | | - {0x304B, 0x01}, |
|---|
| 241 | | - {0x304C, 0x14}, |
|---|
| 242 | | - {0x3050, 0x00}, |
|---|
| 243 | | - {0x3056, 0xd8}, |
|---|
| 244 | | - {0x3057, 0x03}, |
|---|
| 245 | | - {0x3058, 0x4E}, |
|---|
| 246 | | - {0x3059, 0x0C}, |
|---|
| 247 | | - {0x305C, 0x12}, |
|---|
| 248 | | - {0x3060, 0xE8}, |
|---|
| 249 | | - {0x3061, 0x00}, |
|---|
| 250 | | - {0x3068, 0xce}, |
|---|
| 251 | | - {0x3069, 0x00}, |
|---|
| 252 | | - {0x306C, 0x68}, |
|---|
| 253 | | - {0x306D, 0x06}, |
|---|
| 254 | | - {0x3072, 0x30}, |
|---|
| 255 | | - {0x3074, 0xa8}, |
|---|
| 256 | | - {0x3075, 0x00}, |
|---|
| 257 | | - {0x3076, 0x60}, |
|---|
| 258 | | - {0x3077, 0x0f}, |
|---|
| 259 | | - {0x3078, 0x04}, |
|---|
| 260 | | - {0x3079, 0xFD}, |
|---|
| 261 | | - {0x307A, 0x04}, |
|---|
| 262 | | - {0x307B, 0xFE},//binning |
|---|
| 263 | | - {0x307C, 0x04}, |
|---|
| 264 | | - {0x307D, 0xFB}, |
|---|
| 265 | | - {0x307E, 0x04}, |
|---|
| 266 | | - {0x307F, 0x02}, /* Each frame gain adjustment disabled in linear mode */ |
|---|
| 267 | | - {0x3080, 0x04}, |
|---|
| 268 | | - {0x3081, 0xFD}, |
|---|
| 269 | | - {0x3082, 0x04},//binning |
|---|
| 270 | | - {0x3083, 0xFE}, |
|---|
| 271 | | - {0x3084, 0x04}, |
|---|
| 272 | | - {0x3085, 0xFB}, |
|---|
| 273 | | - {0x3086, 0x04}, |
|---|
| 274 | | - {0x3087, 0x02}, |
|---|
| 275 | | - {0x30A4, 0x77}, |
|---|
| 276 | | - {0x30A8, 0x20}, |
|---|
| 277 | | - {0x30A9, 0x00}, |
|---|
| 278 | | - {0x30AC, 0x08}, |
|---|
| 279 | | - {0x30AD, 0x08}, |
|---|
| 280 | | - {0x30B0, 0x20}, |
|---|
| 281 | | - {0x30B1, 0x00}, |
|---|
| 282 | | - {0x30B4, 0x10}, |
|---|
| 283 | | - {0x30B5, 0x10}, |
|---|
| 284 | | - {0x30E8, 0x14}, |
|---|
| 285 | | - {0x3112, 0x10}, |
|---|
| 286 | | - {0x3116, 0x10}, |
|---|
| 287 | | - {0x314C, 0xC0}, |
|---|
| 288 | | - {0x315A, 0x06}, |
|---|
| 289 | | - {0x316A, 0x7E}, |
|---|
| 290 | | - {0x3199, 0x30}, |
|---|
| 291 | | - {0x319D, 0x01}, |
|---|
| 292 | | - {0x319E, 0x02}, |
|---|
| 293 | | - {0x31A1, 0x00}, |
|---|
| 294 | | - {0x31D7, 0x00}, |
|---|
| 295 | | - {0x3200, 0x01}, |
|---|
| 296 | | - {0x3288, 0x21}, |
|---|
| 297 | | - {0x328A, 0x02}, |
|---|
| 298 | | - {0x3300, 0x01}, |
|---|
| 299 | | - {0x3414, 0x05}, |
|---|
| 300 | | - {0x3416, 0x18}, |
|---|
| 301 | | - {0x341C, 0xFF}, |
|---|
| 302 | | - {0x341D, 0x01}, |
|---|
| 303 | | - {0x3648, 0x01}, |
|---|
| 304 | | - {0x364A, 0x04}, |
|---|
| 305 | | - {0x364C, 0x04}, |
|---|
| 306 | | - {0x3678, 0x01}, |
|---|
| 307 | | - {0x367C, 0x31}, |
|---|
| 308 | | - {0x367E, 0x31}, |
|---|
| 309 | | - {0x3706, 0x10}, |
|---|
| 310 | | - {0x3708, 0x03}, |
|---|
| 311 | | - {0x3714, 0x02}, |
|---|
| 312 | | - {0x3715, 0x02}, |
|---|
| 313 | | - {0x3716, 0x01}, |
|---|
| 314 | | - {0x3717, 0x03}, |
|---|
| 315 | | - {0x371C, 0x3D}, |
|---|
| 316 | | - {0x371D, 0x3F}, |
|---|
| 317 | | - {0x372C, 0x00}, |
|---|
| 318 | | - {0x372D, 0x00}, |
|---|
| 319 | | - {0x372E, 0x46}, |
|---|
| 320 | | - {0x372F, 0x00}, |
|---|
| 321 | | - {0x3730, 0x89}, |
|---|
| 322 | | - {0x3731, 0x00}, |
|---|
| 323 | | - {0x3732, 0x08}, |
|---|
| 324 | | - {0x3733, 0x01}, |
|---|
| 325 | | - {0x3734, 0xFE}, |
|---|
| 326 | | - {0x3735, 0x05}, |
|---|
| 327 | | - {0x3740, 0x02}, |
|---|
| 328 | | - {0x375D, 0x00}, |
|---|
| 329 | | - {0x375E, 0x00}, |
|---|
| 330 | | - {0x375F, 0x11}, |
|---|
| 331 | | - {0x3760, 0x01}, |
|---|
| 332 | | - {0x3768, 0x1B}, |
|---|
| 333 | | - {0x3769, 0x1B}, |
|---|
| 334 | | - {0x376A, 0x1B}, |
|---|
| 335 | | - {0x376B, 0x1B}, |
|---|
| 336 | | - {0x376C, 0x1A}, |
|---|
| 337 | | - {0x376D, 0x17}, |
|---|
| 338 | | - {0x376E, 0x0F}, |
|---|
| 339 | | - {0x3776, 0x00}, |
|---|
| 340 | | - {0x3777, 0x00}, |
|---|
| 341 | | - {0x3778, 0x46}, |
|---|
| 342 | | - {0x3779, 0x00}, |
|---|
| 343 | | - {0x377A, 0x89}, |
|---|
| 344 | | - {0x377B, 0x00}, |
|---|
| 345 | | - {0x377C, 0x08}, |
|---|
| 346 | | - {0x377D, 0x01}, |
|---|
| 347 | | - {0x377E, 0x23}, |
|---|
| 348 | | - {0x377F, 0x02}, |
|---|
| 349 | | - {0x3780, 0xD9}, |
|---|
| 350 | | - {0x3781, 0x03}, |
|---|
| 351 | | - {0x3782, 0xF5}, |
|---|
| 352 | | - {0x3783, 0x06}, |
|---|
| 353 | | - {0x3784, 0xA5}, |
|---|
| 354 | | - {0x3788, 0x0F}, |
|---|
| 355 | | - {0x378A, 0xD9}, |
|---|
| 356 | | - {0x378B, 0x03}, |
|---|
| 357 | | - {0x378C, 0xEB}, |
|---|
| 358 | | - {0x378D, 0x05}, |
|---|
| 359 | | - {0x378E, 0x87}, |
|---|
| 360 | | - {0x378F, 0x06}, |
|---|
| 361 | | - {0x3790, 0xF5}, |
|---|
| 362 | | - {0x3792, 0x43}, |
|---|
| 363 | | - {0x3794, 0x7A}, |
|---|
| 364 | | - {0x3796, 0xA1}, |
|---|
| 365 | | - {0x3A18, 0x7F}, |
|---|
| 366 | | - {0x3A1A, 0x37}, |
|---|
| 367 | | - {0x3A1C, 0x37}, |
|---|
| 368 | | - {0x3A1E, 0xF7}, |
|---|
| 369 | | - {0x3A1F, 0x00}, |
|---|
| 370 | | - {0x3A20, 0x3F}, |
|---|
| 371 | | - {0x3A22, 0x6F}, |
|---|
| 372 | | - {0x3A24, 0x3F}, |
|---|
| 373 | | - {0x3A26, 0x5F}, |
|---|
| 374 | | - {0x3A28, 0x2F}, |
|---|
| 375 | | - {REG_NULL, 0x00}, |
|---|
| 376 | | -}; |
|---|
| 377 | | - |
|---|
| 378 | 219 | static const struct regval imx335_linear_10bit_2592x1944_regs[] = { |
|---|
| 379 | 220 | {0x3002, 0x00}, |
|---|
| 380 | | - {0x3018, 0x00}, |
|---|
| 381 | 221 | {0x300C, 0x5B}, |
|---|
| 382 | 222 | {0x300D, 0x40}, |
|---|
| 383 | 223 | {0x3034, 0x26}, |
|---|
| .. | .. |
|---|
| 388 | 228 | {0x304B, 0x01}, |
|---|
| 389 | 229 | {0x304C, 0x14}, |
|---|
| 390 | 230 | {0x3050, 0x00}, |
|---|
| 391 | | - {0x3056, 0xac}, |
|---|
| 392 | | - {0x3057, 0x07}, |
|---|
| 393 | 231 | {0x3058, 0x09}, |
|---|
| 394 | 232 | {0x3059, 0x00}, |
|---|
| 395 | 233 | {0x305C, 0x12}, |
|---|
| .. | .. |
|---|
| 399 | 237 | {0x3069, 0x00}, |
|---|
| 400 | 238 | {0x306C, 0x88}, |
|---|
| 401 | 239 | {0x306D, 0x06}, |
|---|
| 402 | | - {0x3072, 0x28}, |
|---|
| 403 | | - {0x3074, 0xb0}, |
|---|
| 404 | | - {0x3075, 0x00}, |
|---|
| 405 | | - {0x3076, 0x58}, |
|---|
| 406 | | - {0x3077, 0x0f}, |
|---|
| 407 | | - {0x3078, 0x01}, |
|---|
| 408 | | - {0x3079, 0x02}, |
|---|
| 409 | | - {0x307A, 0xff}, |
|---|
| 410 | | - {0x307B, 0x02}, |
|---|
| 411 | | - {0x307C, 0x00}, |
|---|
| 412 | | - {0x307D, 0x00}, |
|---|
| 413 | | - {0x307E, 0x00}, |
|---|
| 414 | | - {0x307F, 0x00}, |
|---|
| 415 | | - {0x3080, 0x01}, |
|---|
| 416 | | - {0x3081, 0x02}, |
|---|
| 417 | | - {0x3082, 0xff}, |
|---|
| 418 | | - {0x3083, 0x02}, |
|---|
| 419 | | - {0x3084, 0x00}, |
|---|
| 420 | | - {0x3085, 0x00}, |
|---|
| 421 | | - {0x3086, 0x00}, |
|---|
| 422 | | - {0x3087, 0x00}, |
|---|
| 423 | | - {0x30A4, 0x33}, |
|---|
| 424 | | - {0x30A8, 0x10}, |
|---|
| 425 | | - {0x30A9, 0x04}, |
|---|
| 426 | | - {0x30AC, 0x00}, |
|---|
| 427 | | - {0x30AD, 0x00}, |
|---|
| 428 | | - {0x30B0, 0x10}, |
|---|
| 429 | | - {0x30B1, 0x08}, |
|---|
| 430 | | - {0x30B4, 0x00}, |
|---|
| 431 | | - {0x30B5, 0x00}, |
|---|
| 432 | 240 | {0x30E8, 0x00}, |
|---|
| 433 | | - {0x3112, 0x08}, |
|---|
| 434 | | - {0x3116, 0x08},//full |
|---|
| 435 | | - {0x314C, 0x80}, |
|---|
| 436 | 241 | {0x315A, 0x02}, |
|---|
| 437 | 242 | {0x316A, 0x7E}, |
|---|
| 438 | | - {0x3199, 0x00}, /* Each frame gain adjustment disabled in linear mode */ |
|---|
| 439 | 243 | {0x319D, 0x00}, |
|---|
| 440 | | - {0x319E, 0x01}, |
|---|
| 441 | | - {0x31A1, 0x00},//full |
|---|
| 244 | + {0x31A1, 0x00}, |
|---|
| 442 | 245 | {0x31D7, 0x00}, |
|---|
| 443 | | - {0x3200, 0x01}, |
|---|
| 246 | + {0x3200, 0x01}, /* Each frame gain adjustment disabed in linear mode */ |
|---|
| 444 | 247 | {0x3288, 0x21}, |
|---|
| 445 | 248 | {0x328A, 0x02}, |
|---|
| 446 | | - {0x3300, 0x00}, |
|---|
| 447 | 249 | {0x3414, 0x05}, |
|---|
| 448 | 250 | {0x3416, 0x18}, |
|---|
| 449 | 251 | {0x341C, 0xFF}, |
|---|
| .. | .. |
|---|
| 510 | 312 | {0x3792, 0x43}, |
|---|
| 511 | 313 | {0x3794, 0x7A}, |
|---|
| 512 | 314 | {0x3796, 0xA1}, |
|---|
| 513 | | - {0x3A18, 0x8F}, |
|---|
| 514 | | - {0x3A1A, 0x4f}, |
|---|
| 515 | | - {0x3A1C, 0x47}, |
|---|
| 516 | | - {0x3A1E, 0x37}, |
|---|
| 517 | | - {0x3A1F, 0x01}, |
|---|
| 518 | | - {0x3A20, 0x4F}, |
|---|
| 519 | | - {0x3A22, 0x87}, |
|---|
| 520 | | - {0x3A24, 0x4F}, |
|---|
| 521 | | - {0x3A26, 0x7F}, |
|---|
| 522 | | - {0x3A28, 0x3F}, |
|---|
| 523 | 315 | {REG_NULL, 0x00}, |
|---|
| 524 | 316 | }; |
|---|
| 525 | 317 | |
|---|
| 526 | 318 | static const struct regval imx335_hdr2_10bit_2592x1944_regs[] = { |
|---|
| 527 | 319 | {0x3002, 0x00}, |
|---|
| 528 | | - {0x3018, 0x00}, |
|---|
| 529 | 320 | {0x300C, 0x5B}, |
|---|
| 530 | 321 | {0x300D, 0x40}, |
|---|
| 531 | 322 | {0x3034, 0x13}, |
|---|
| .. | .. |
|---|
| 536 | 327 | {0x304B, 0x03}, |
|---|
| 537 | 328 | {0x304C, 0x13}, |
|---|
| 538 | 329 | {0x3050, 0x00}, |
|---|
| 539 | | - {0x3056, 0xac}, |
|---|
| 540 | | - {0x3057, 0x07}, |
|---|
| 541 | 330 | {0x3058, 0x48}, |
|---|
| 542 | 331 | {0x3059, 0x12}, |
|---|
| 543 | 332 | {0x305C, 0x12}, |
|---|
| .. | .. |
|---|
| 547 | 336 | {0x3069, 0x01}, |
|---|
| 548 | 337 | {0x306C, 0x68}, |
|---|
| 549 | 338 | {0x306D, 0x06}, |
|---|
| 550 | | - {0x3072, 0x28}, |
|---|
| 551 | | - {0x3074, 0xb0}, |
|---|
| 552 | | - {0x3075, 0x00}, |
|---|
| 553 | | - {0x3076, 0x58}, |
|---|
| 554 | | - {0x3077, 0x0f}, |
|---|
| 555 | | - {0x3078, 0x01}, |
|---|
| 556 | | - {0x3079, 0x02},//full |
|---|
| 557 | | - {0x307A, 0xff}, |
|---|
| 558 | | - {0x307B, 0x02}, |
|---|
| 559 | | - {0x307C, 0x00}, |
|---|
| 560 | | - {0x307D, 0x00}, /* Each frame gain adjustment EN */ |
|---|
| 561 | | - {0x307E, 0x00}, |
|---|
| 562 | | - {0x307F, 0x00}, |
|---|
| 563 | | - {0x3080, 0x01},//full |
|---|
| 564 | | - {0x3081, 0x02}, |
|---|
| 565 | | - {0x3082, 0xff}, |
|---|
| 566 | | - {0x3083, 0x02}, |
|---|
| 567 | | - {0x3084, 0x00}, |
|---|
| 568 | | - {0x3085, 0x00}, |
|---|
| 569 | | - {0x3086, 0x00}, |
|---|
| 570 | | - {0x3087, 0x00}, |
|---|
| 571 | | - {0x30A4, 0x33}, |
|---|
| 572 | | - {0x30A8, 0x10}, |
|---|
| 573 | | - {0x30A9, 0x04}, |
|---|
| 574 | | - {0x30AC, 0x00}, |
|---|
| 575 | | - {0x30AD, 0x00}, |
|---|
| 576 | | - {0x30B0, 0x10}, |
|---|
| 577 | | - {0x30B1, 0x08}, |
|---|
| 578 | | - {0x30B4, 0x00}, |
|---|
| 579 | | - {0x30B5, 0x00}, |
|---|
| 580 | 339 | {0x30E8, 0x00}, |
|---|
| 581 | | - {0x3112, 0x08}, |
|---|
| 582 | | - {0x3116, 0x08}, |
|---|
| 583 | | - {0x314C, 0x80}, |
|---|
| 584 | 340 | {0x315A, 0x02}, |
|---|
| 585 | 341 | {0x316A, 0x7E}, |
|---|
| 586 | | - {0x3199, 0x00}, |
|---|
| 587 | 342 | {0x319D, 0x00}, |
|---|
| 588 | | - {0x319E, 0x01}, |
|---|
| 589 | 343 | {0x31A1, 0x00}, |
|---|
| 590 | 344 | {0x31D7, 0x01}, |
|---|
| 591 | | - {0x3200, 0x00}, |
|---|
| 345 | + {0x3200, 0x00}, /* Each frame gain adjustment EN */ |
|---|
| 592 | 346 | {0x3288, 0x21}, |
|---|
| 593 | 347 | {0x328A, 0x02}, |
|---|
| 594 | | - {0x3300, 0x00}, |
|---|
| 595 | 348 | {0x3414, 0x05}, |
|---|
| 596 | 349 | {0x3416, 0x18}, |
|---|
| 597 | 350 | {0x341C, 0xFF}, |
|---|
| .. | .. |
|---|
| 658 | 411 | {0x3792, 0x43}, |
|---|
| 659 | 412 | {0x3794, 0x7A}, |
|---|
| 660 | 413 | {0x3796, 0xA1}, |
|---|
| 661 | | - {0x3A18, 0x8F}, |
|---|
| 662 | | - {0x3A1A, 0x4f}, |
|---|
| 663 | | - {0x3A1C, 0x47}, |
|---|
| 664 | | - {0x3A1E, 0x37}, |
|---|
| 665 | | - {0x3A1F, 0x01}, |
|---|
| 666 | | - {0x3A20, 0x4F}, |
|---|
| 667 | | - {0x3A22, 0x87}, |
|---|
| 668 | | - {0x3A24, 0x4F}, |
|---|
| 669 | | - {0x3A26, 0x7F}, |
|---|
| 670 | | - {0x3A28, 0x3F}, |
|---|
| 671 | 414 | {REG_NULL, 0x00}, |
|---|
| 672 | 415 | }; |
|---|
| 673 | 416 | |
|---|
| 674 | 417 | static const struct regval imx335_hdr3_10bit_2592x1944_regs[] = { |
|---|
| 675 | 418 | {0x3002, 0x00}, |
|---|
| 676 | | - {0x3018, 0x00}, |
|---|
| 677 | 419 | {0x300C, 0x5B}, |
|---|
| 678 | 420 | {0x300D, 0x40}, |
|---|
| 679 | 421 | {0x3034, 0x13}, |
|---|
| .. | .. |
|---|
| 684 | 426 | {0x304B, 0x03}, |
|---|
| 685 | 427 | {0x304C, 0x13}, |
|---|
| 686 | 428 | {0x3050, 0x00}, |
|---|
| 687 | | - {0x3056, 0xac}, |
|---|
| 688 | | - {0x3057, 0x07}, |
|---|
| 689 | 429 | {0x3058, 0xC4}, |
|---|
| 690 | 430 | {0x3059, 0x3B}, |
|---|
| 691 | 431 | {0x305C, 0x1A}, |
|---|
| .. | .. |
|---|
| 695 | 435 | {0x3069, 0x01}, |
|---|
| 696 | 436 | {0x306C, 0x6C}, |
|---|
| 697 | 437 | {0x306D, 0x01}, |
|---|
| 698 | | - {0x3072, 0x28}, |
|---|
| 699 | | - {0x3074, 0xb0}, |
|---|
| 700 | | - {0x3075, 0x00}, |
|---|
| 701 | | - {0x3076, 0x58}, |
|---|
| 702 | | - {0x3077, 0x0f}, |
|---|
| 703 | | - {0x3078, 0x01}, |
|---|
| 704 | | - {0x3079, 0x02}, |
|---|
| 705 | | - {0x307A, 0xff}, |
|---|
| 706 | | - {0x307B, 0x02}, |
|---|
| 707 | | - {0x307C, 0x00}, |
|---|
| 708 | | - {0x307D, 0x00}, |
|---|
| 709 | | - {0x307E, 0x00}, |
|---|
| 710 | | - {0x307F, 0x00}, |
|---|
| 711 | | - {0x3080, 0x01}, |
|---|
| 712 | | - {0x3081, 0x02}, |
|---|
| 713 | | - {0x3082, 0xff}, |
|---|
| 714 | | - {0x3083, 0x02}, |
|---|
| 715 | | - {0x3084, 0x00}, |
|---|
| 716 | | - {0x3085, 0x00}, |
|---|
| 717 | | - {0x3086, 0x00}, |
|---|
| 718 | | - {0x3087, 0x00}, |
|---|
| 719 | | - {0x30A4, 0x33}, |
|---|
| 720 | | - {0x30A8, 0x10}, |
|---|
| 721 | | - {0x30A9, 0x04}, |
|---|
| 722 | | - {0x30AC, 0x00}, |
|---|
| 723 | | - {0x30AD, 0x00}, |
|---|
| 724 | | - {0x30B0, 0x10}, |
|---|
| 725 | | - {0x30B1, 0x08}, |
|---|
| 726 | | - {0x30B4, 0x00}, |
|---|
| 727 | | - {0x30B5, 0x00}, |
|---|
| 728 | 438 | {0x30E8, 0x14}, |
|---|
| 729 | | - {0x3112, 0x08}, |
|---|
| 730 | | - {0x3116, 0x08}, |
|---|
| 731 | | - {0x314C, 0x80}, |
|---|
| 732 | 439 | {0x315A, 0x02}, |
|---|
| 733 | 440 | {0x316A, 0x7E}, |
|---|
| 734 | | - {0x3199, 0x00}, |
|---|
| 735 | 441 | {0x319D, 0x00}, |
|---|
| 736 | | - {0x319E, 0x01}, |
|---|
| 737 | 442 | {0x31A1, 0x00}, |
|---|
| 738 | 443 | {0x31D7, 0x03}, |
|---|
| 739 | | - {0x3200, 0x00}, |
|---|
| 444 | + {0x3200, 0x00}, /* Each frame gain adjustment EN */ |
|---|
| 740 | 445 | {0x3288, 0x21}, |
|---|
| 741 | 446 | {0x328A, 0x02}, |
|---|
| 742 | | - {0x3300, 0x00}, |
|---|
| 743 | 447 | {0x3414, 0x05}, |
|---|
| 744 | 448 | {0x3416, 0x18}, |
|---|
| 745 | 449 | {0x341C, 0xFF}, |
|---|
| .. | .. |
|---|
| 775 | 479 | {0x3760, 0x01}, |
|---|
| 776 | 480 | {0x3768, 0x1B}, |
|---|
| 777 | 481 | {0x3769, 0x1B}, |
|---|
| 778 | | - {0x376A, 0x1B},//full |
|---|
| 482 | + {0x376A, 0x1B}, |
|---|
| 779 | 483 | {0x376B, 0x1B}, |
|---|
| 780 | 484 | {0x376C, 0x1A}, |
|---|
| 781 | 485 | {0x376D, 0x17}, |
|---|
| 782 | | - {0x376E, 0x0F}, /* Each frame gain adjustment EN */ |
|---|
| 486 | + {0x376E, 0x0F}, |
|---|
| 783 | 487 | {0x3776, 0x00}, |
|---|
| 784 | 488 | {0x3777, 0x00}, |
|---|
| 785 | | - {0x3778, 0x46},//full |
|---|
| 489 | + {0x3778, 0x46}, |
|---|
| 786 | 490 | {0x3779, 0x00}, |
|---|
| 787 | 491 | {0x377A, 0x89}, |
|---|
| 788 | 492 | {0x377B, 0x00}, |
|---|
| .. | .. |
|---|
| 806 | 510 | {0x3792, 0x43}, |
|---|
| 807 | 511 | {0x3794, 0x7A}, |
|---|
| 808 | 512 | {0x3796, 0xA1}, |
|---|
| 809 | | - {0x3A18, 0x8F}, |
|---|
| 810 | | - {0x3A1A, 0x4f}, |
|---|
| 811 | | - {0x3A1C, 0x47}, |
|---|
| 812 | | - {0x3A1E, 0x37}, |
|---|
| 813 | | - {0x3A1F, 0x01}, |
|---|
| 814 | | - {0x3A20, 0x4F}, |
|---|
| 815 | | - {0x3A22, 0x87}, |
|---|
| 816 | | - {0x3A24, 0x4F}, |
|---|
| 817 | | - {0x3A26, 0x7F}, |
|---|
| 818 | | - {0x3A28, 0x3F}, |
|---|
| 819 | 513 | {REG_NULL, 0x00}, |
|---|
| 820 | 514 | }; |
|---|
| 821 | 515 | |
|---|
| .. | .. |
|---|
| 848 | 542 | .reg_list = imx335_linear_10bit_2592x1944_regs, |
|---|
| 849 | 543 | .hdr_mode = NO_HDR, |
|---|
| 850 | 544 | .bpp = 10, |
|---|
| 851 | | - .mipi_freq_idx = 1, |
|---|
| 852 | | - }, |
|---|
| 853 | | - { |
|---|
| 854 | | - /* 1H period = 7.4us */ |
|---|
| 855 | | - .bus_fmt = MEDIA_BUS_FMT_SRGGB12_1X12, |
|---|
| 856 | | - .width = 1308, |
|---|
| 857 | | - .height = 984, |
|---|
| 858 | | - .max_fps = { |
|---|
| 859 | | - .numerator = 10000, |
|---|
| 860 | | - .denominator = 300000, |
|---|
| 861 | | - }, |
|---|
| 862 | | - .exp_def = 0x600, |
|---|
| 863 | | - .hts_def = 0x0226 * IMX335_4LANES * 2, |
|---|
| 864 | | - .vts_def = 0x1194, |
|---|
| 865 | | - .reg_list = imx335_linear_12bit_1296x972_regs, |
|---|
| 866 | | - .hdr_mode = NO_HDR, |
|---|
| 867 | | - .bpp = 12, |
|---|
| 868 | | - .mipi_freq_idx = 0, |
|---|
| 869 | 545 | }, |
|---|
| 870 | 546 | { |
|---|
| 871 | 547 | /* 1H period = 3.70us */ |
|---|
| .. | .. |
|---|
| 886 | 562 | .reg_list = imx335_hdr2_10bit_2592x1944_regs, |
|---|
| 887 | 563 | .hdr_mode = HDR_X2, |
|---|
| 888 | 564 | .bpp = 10, |
|---|
| 889 | | - .mipi_freq_idx = 1, |
|---|
| 890 | 565 | .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_1, |
|---|
| 891 | 566 | .vc[PAD1] = V4L2_MBUS_CSI2_CHANNEL_0,//L->csi wr0 |
|---|
| 892 | 567 | .vc[PAD2] = V4L2_MBUS_CSI2_CHANNEL_1, |
|---|
| .. | .. |
|---|
| 911 | 586 | .reg_list = imx335_hdr3_10bit_2592x1944_regs, |
|---|
| 912 | 587 | .hdr_mode = HDR_X3, |
|---|
| 913 | 588 | .bpp = 10, |
|---|
| 914 | | - .mipi_freq_idx = 1, |
|---|
| 915 | 589 | .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_2, |
|---|
| 916 | 590 | .vc[PAD1] = V4L2_MBUS_CSI2_CHANNEL_1,//M->csi wr0 |
|---|
| 917 | 591 | .vc[PAD2] = V4L2_MBUS_CSI2_CHANNEL_0,//L->csi wr0 |
|---|
| .. | .. |
|---|
| 920 | 594 | }; |
|---|
| 921 | 595 | |
|---|
| 922 | 596 | static const s64 link_freq_items[] = { |
|---|
| 923 | | - MIPI_FREQ_445M, |
|---|
| 924 | 597 | MIPI_FREQ_594M, |
|---|
| 925 | 598 | }; |
|---|
| 926 | 599 | |
|---|
| .. | .. |
|---|
| 1044 | 717 | struct imx335 *imx335 = to_imx335(sd); |
|---|
| 1045 | 718 | const struct imx335_mode *mode; |
|---|
| 1046 | 719 | s64 h_blank, vblank_def; |
|---|
| 1047 | | - s64 dst_pixel_rate = 0; |
|---|
| 1048 | 720 | |
|---|
| 1049 | 721 | mutex_lock(&imx335->mutex); |
|---|
| 1050 | 722 | |
|---|
| .. | .. |
|---|
| 1065 | 737 | __v4l2_ctrl_modify_range(imx335->vblank, vblank_def, |
|---|
| 1066 | 738 | IMX335_VTS_MAX - mode->height, |
|---|
| 1067 | 739 | 1, vblank_def); |
|---|
| 1068 | | - dst_pixel_rate = ((u32)link_freq_items[mode->mipi_freq_idx]) / |
|---|
| 1069 | | - mode->bpp * 2 * IMX335_4LANES; |
|---|
| 1070 | | - __v4l2_ctrl_s_ctrl_int64(imx335->pixel_rate, |
|---|
| 1071 | | - dst_pixel_rate); |
|---|
| 1072 | | - __v4l2_ctrl_s_ctrl(imx335->link_freq, |
|---|
| 1073 | | - mode->mipi_freq_idx); |
|---|
| 1074 | 740 | } |
|---|
| 1075 | 741 | |
|---|
| 1076 | 742 | mutex_unlock(&imx335->mutex); |
|---|
| .. | .. |
|---|
| 1142 | 808 | struct imx335 *imx335 = to_imx335(sd); |
|---|
| 1143 | 809 | const struct imx335_mode *mode = imx335->cur_mode; |
|---|
| 1144 | 810 | |
|---|
| 1145 | | - mutex_lock(&imx335->mutex); |
|---|
| 1146 | 811 | fi->interval = mode->max_fps; |
|---|
| 1147 | | - mutex_unlock(&imx335->mutex); |
|---|
| 1148 | 812 | |
|---|
| 1149 | 813 | return 0; |
|---|
| 1150 | 814 | } |
|---|
| 1151 | 815 | |
|---|
| 1152 | | -static int imx335_g_mbus_config(struct v4l2_subdev *sd, |
|---|
| 816 | +static int imx335_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id, |
|---|
| 1153 | 817 | struct v4l2_mbus_config *config) |
|---|
| 1154 | 818 | { |
|---|
| 1155 | 819 | u32 val = 0; |
|---|
| .. | .. |
|---|
| 1163 | 827 | val |= V4L2_MBUS_CSI2_CHANNEL_1; |
|---|
| 1164 | 828 | if (mode->hdr_mode == HDR_X3) |
|---|
| 1165 | 829 | val |= V4L2_MBUS_CSI2_CHANNEL_2; |
|---|
| 1166 | | - config->type = V4L2_MBUS_CSI2; |
|---|
| 830 | + config->type = V4L2_MBUS_CSI2_DPHY; |
|---|
| 1167 | 831 | config->flags = val; |
|---|
| 1168 | 832 | |
|---|
| 1169 | 833 | return 0; |
|---|
| .. | .. |
|---|
| 1261 | 925 | } |
|---|
| 1262 | 926 | |
|---|
| 1263 | 927 | rhs1 = SHR1_MIN + s_exp_time; |
|---|
| 1264 | | - rhs1 = (rhs1 + 7u) / 8 * 8 + 2; /* shall be 8n + 2 */ |
|---|
| 928 | + rhs1 = (rhs1 & ~0x7) + 2; /* shall be 8n + 2 */ |
|---|
| 1265 | 929 | if (rhs1 > rhs1_max) |
|---|
| 1266 | 930 | rhs1 = rhs1_max; |
|---|
| 1267 | 931 | if (rhs1 < rhs1_min) |
|---|
| .. | .. |
|---|
| 1591 | 1255 | u32 i, h, w; |
|---|
| 1592 | 1256 | long ret = 0; |
|---|
| 1593 | 1257 | u32 stream = 0; |
|---|
| 1594 | | - s64 dst_pixel_rate = 0; |
|---|
| 1595 | 1258 | |
|---|
| 1596 | 1259 | switch (cmd) { |
|---|
| 1597 | 1260 | case PREISP_CMD_SET_HDRAE_EXP: |
|---|
| .. | .. |
|---|
| 1632 | 1295 | __v4l2_ctrl_modify_range(imx335->vblank, h, |
|---|
| 1633 | 1296 | IMX335_VTS_MAX - imx335->cur_mode->height, |
|---|
| 1634 | 1297 | 1, h); |
|---|
| 1635 | | - dst_pixel_rate = ((u32)link_freq_items[imx335->cur_mode->mipi_freq_idx]) / |
|---|
| 1636 | | - imx335->cur_mode->bpp * 2 * IMX335_4LANES; |
|---|
| 1637 | | - __v4l2_ctrl_s_ctrl_int64(imx335->pixel_rate, |
|---|
| 1638 | | - dst_pixel_rate); |
|---|
| 1639 | | - __v4l2_ctrl_s_ctrl(imx335->link_freq, |
|---|
| 1640 | | - imx335->cur_mode->mipi_freq_idx); |
|---|
| 1641 | 1298 | } |
|---|
| 1642 | 1299 | break; |
|---|
| 1643 | 1300 | case RKMODULE_SET_QUICK_STREAM: |
|---|
| .. | .. |
|---|
| 1650 | 1307 | else |
|---|
| 1651 | 1308 | imx335_write_reg(imx335->client, IMX335_REG_CTRL_MODE, |
|---|
| 1652 | 1309 | IMX335_REG_VALUE_08BIT, 1); |
|---|
| 1653 | | - break; |
|---|
| 1654 | | - case RKMODULE_GET_READOUT_LINE_CNT_PER_LINE: |
|---|
| 1655 | | - if (imx335->cur_mode->width == 2616 && imx335->cur_mode->height == 1964) |
|---|
| 1656 | | - *((u32 *)arg) = 2; |
|---|
| 1657 | | - else |
|---|
| 1658 | | - *((u32 *)arg) = 4; |
|---|
| 1659 | 1310 | break; |
|---|
| 1660 | 1311 | default: |
|---|
| 1661 | 1312 | ret = -ENOIOCTLCMD; |
|---|
| .. | .. |
|---|
| 1676 | 1327 | struct preisp_hdrae_exp_s *hdrae; |
|---|
| 1677 | 1328 | long ret; |
|---|
| 1678 | 1329 | u32 stream = 0; |
|---|
| 1679 | | - u32 readout = 0; |
|---|
| 1680 | 1330 | |
|---|
| 1681 | 1331 | switch (cmd) { |
|---|
| 1682 | 1332 | case RKMODULE_GET_MODULE_INFO: |
|---|
| .. | .. |
|---|
| 1687 | 1337 | } |
|---|
| 1688 | 1338 | |
|---|
| 1689 | 1339 | ret = imx335_ioctl(sd, cmd, inf); |
|---|
| 1690 | | - if (!ret) { |
|---|
| 1691 | | - if (copy_to_user(up, inf, sizeof(*inf))) |
|---|
| 1692 | | - ret = -EFAULT; |
|---|
| 1693 | | - } |
|---|
| 1340 | + if (!ret) |
|---|
| 1341 | + ret = copy_to_user(up, inf, sizeof(*inf)); |
|---|
| 1694 | 1342 | kfree(inf); |
|---|
| 1695 | 1343 | break; |
|---|
| 1696 | 1344 | case RKMODULE_AWB_CFG: |
|---|
| .. | .. |
|---|
| 1703 | 1351 | ret = copy_from_user(cfg, up, sizeof(*cfg)); |
|---|
| 1704 | 1352 | if (!ret) |
|---|
| 1705 | 1353 | ret = imx335_ioctl(sd, cmd, cfg); |
|---|
| 1706 | | - else |
|---|
| 1707 | | - ret = -EFAULT; |
|---|
| 1708 | 1354 | kfree(cfg); |
|---|
| 1709 | 1355 | break; |
|---|
| 1710 | 1356 | case RKMODULE_GET_HDR_CFG: |
|---|
| .. | .. |
|---|
| 1715 | 1361 | } |
|---|
| 1716 | 1362 | |
|---|
| 1717 | 1363 | ret = imx335_ioctl(sd, cmd, hdr); |
|---|
| 1718 | | - if (!ret) { |
|---|
| 1719 | | - if (copy_to_user(up, hdr, sizeof(*hdr))) |
|---|
| 1720 | | - ret = -EFAULT; |
|---|
| 1721 | | - } |
|---|
| 1364 | + if (!ret) |
|---|
| 1365 | + ret = copy_to_user(up, hdr, sizeof(*hdr)); |
|---|
| 1722 | 1366 | kfree(hdr); |
|---|
| 1723 | 1367 | break; |
|---|
| 1724 | 1368 | case RKMODULE_SET_HDR_CFG: |
|---|
| .. | .. |
|---|
| 1731 | 1375 | ret = copy_from_user(hdr, up, sizeof(*hdr)); |
|---|
| 1732 | 1376 | if (!ret) |
|---|
| 1733 | 1377 | ret = imx335_ioctl(sd, cmd, hdr); |
|---|
| 1734 | | - else |
|---|
| 1735 | | - ret = -EFAULT; |
|---|
| 1736 | 1378 | kfree(hdr); |
|---|
| 1737 | 1379 | break; |
|---|
| 1738 | 1380 | case PREISP_CMD_SET_HDRAE_EXP: |
|---|
| .. | .. |
|---|
| 1745 | 1387 | ret = copy_from_user(hdrae, up, sizeof(*hdrae)); |
|---|
| 1746 | 1388 | if (!ret) |
|---|
| 1747 | 1389 | ret = imx335_ioctl(sd, cmd, hdrae); |
|---|
| 1748 | | - else |
|---|
| 1749 | | - ret = -EFAULT; |
|---|
| 1750 | 1390 | kfree(hdrae); |
|---|
| 1751 | 1391 | break; |
|---|
| 1752 | 1392 | case RKMODULE_SET_QUICK_STREAM: |
|---|
| 1753 | 1393 | ret = copy_from_user(&stream, up, sizeof(u32)); |
|---|
| 1754 | 1394 | if (!ret) |
|---|
| 1755 | 1395 | ret = imx335_ioctl(sd, cmd, &stream); |
|---|
| 1756 | | - else |
|---|
| 1757 | | - ret = -EFAULT; |
|---|
| 1758 | | - break; |
|---|
| 1759 | | - case RKMODULE_GET_READOUT_LINE_CNT_PER_LINE: |
|---|
| 1760 | | - ret = imx335_ioctl(sd, cmd, &readout); |
|---|
| 1761 | | - if (!ret) { |
|---|
| 1762 | | - if (copy_to_user(up, &readout, sizeof(u32))) |
|---|
| 1763 | | - ret = -EFAULT; |
|---|
| 1764 | | - } |
|---|
| 1765 | 1396 | break; |
|---|
| 1766 | 1397 | default: |
|---|
| 1767 | 1398 | ret = -ENOIOCTLCMD; |
|---|
| .. | .. |
|---|
| 2005 | 1636 | |
|---|
| 2006 | 1637 | #define DST_WIDTH 2592 |
|---|
| 2007 | 1638 | #define DST_HEIGHT 1944 |
|---|
| 2008 | | -#define BINNING_WIDTH 1296 |
|---|
| 2009 | | -#define BINNING_HEIGHT 972 |
|---|
| 2010 | 1639 | |
|---|
| 2011 | 1640 | /* |
|---|
| 2012 | 1641 | * The resolution of the driver configuration needs to be exactly |
|---|
| .. | .. |
|---|
| 2021 | 1650 | struct v4l2_subdev_pad_config *cfg, |
|---|
| 2022 | 1651 | struct v4l2_subdev_selection *sel) |
|---|
| 2023 | 1652 | { |
|---|
| 2024 | | - struct imx335 *imx335 = to_imx335(sd); |
|---|
| 2025 | 1653 | /* |
|---|
| 2026 | 1654 | * From "Pixel Array Image Drawing in All scan mode", |
|---|
| 2027 | 1655 | * there are 12 pixel offset on horizontal and vertical. |
|---|
| 2028 | 1656 | */ |
|---|
| 2029 | 1657 | if (sel->target == V4L2_SEL_TGT_CROP_BOUNDS) { |
|---|
| 2030 | | - if (imx335->cur_mode->width == 2616 && imx335->cur_mode->height == 1964) { |
|---|
| 2031 | | - sel->r.left = 12; |
|---|
| 2032 | | - sel->r.width = DST_WIDTH; |
|---|
| 2033 | | - sel->r.top = 12; |
|---|
| 2034 | | - sel->r.height = DST_HEIGHT; |
|---|
| 2035 | | - } else { |
|---|
| 2036 | | - sel->r.left = 4; |
|---|
| 2037 | | - sel->r.width = BINNING_WIDTH; |
|---|
| 2038 | | - sel->r.top = 8; |
|---|
| 2039 | | - sel->r.height = BINNING_HEIGHT; |
|---|
| 2040 | | - } |
|---|
| 1658 | + sel->r.left = 12; |
|---|
| 1659 | + sel->r.width = DST_WIDTH; |
|---|
| 1660 | + sel->r.top = 12; |
|---|
| 1661 | + sel->r.height = DST_HEIGHT; |
|---|
| 2041 | 1662 | return 0; |
|---|
| 2042 | 1663 | } |
|---|
| 2043 | 1664 | return -EINVAL; |
|---|
| .. | .. |
|---|
| 2063 | 1684 | static const struct v4l2_subdev_video_ops imx335_video_ops = { |
|---|
| 2064 | 1685 | .s_stream = imx335_s_stream, |
|---|
| 2065 | 1686 | .g_frame_interval = imx335_g_frame_interval, |
|---|
| 2066 | | - .g_mbus_config = imx335_g_mbus_config, |
|---|
| 2067 | 1687 | }; |
|---|
| 2068 | 1688 | |
|---|
| 2069 | 1689 | static const struct v4l2_subdev_pad_ops imx335_pad_ops = { |
|---|
| .. | .. |
|---|
| 2073 | 1693 | .get_fmt = imx335_get_fmt, |
|---|
| 2074 | 1694 | .set_fmt = imx335_set_fmt, |
|---|
| 2075 | 1695 | .get_selection = imx335_get_selection, |
|---|
| 1696 | + .get_mbus_config = imx335_g_mbus_config, |
|---|
| 2076 | 1697 | }; |
|---|
| 2077 | 1698 | |
|---|
| 2078 | 1699 | static const struct v4l2_subdev_ops imx335_subdev_ops = { |
|---|
| .. | .. |
|---|
| 2111 | 1732 | switch (ctrl->id) { |
|---|
| 2112 | 1733 | case V4L2_CID_EXPOSURE: |
|---|
| 2113 | 1734 | if (imx335->cur_mode->hdr_mode != NO_HDR) |
|---|
| 2114 | | - return ret; |
|---|
| 1735 | + goto ctrl_end; |
|---|
| 2115 | 1736 | shr0 = imx335->cur_vts - ctrl->val; |
|---|
| 2116 | 1737 | ret = imx335_write_reg(imx335->client, IMX335_LF_EXPO_REG_L, |
|---|
| 2117 | 1738 | IMX335_REG_VALUE_08BIT, |
|---|
| .. | .. |
|---|
| 2127 | 1748 | break; |
|---|
| 2128 | 1749 | case V4L2_CID_ANALOGUE_GAIN: |
|---|
| 2129 | 1750 | if (imx335->cur_mode->hdr_mode != NO_HDR) |
|---|
| 2130 | | - return ret; |
|---|
| 1751 | + goto ctrl_end; |
|---|
| 2131 | 1752 | ret = imx335_write_reg(imx335->client, IMX335_LF_GAIN_REG_H, |
|---|
| 2132 | 1753 | IMX335_REG_VALUE_08BIT, |
|---|
| 2133 | 1754 | IMX335_FETCH_GAIN_H(ctrl->val)); |
|---|
| .. | .. |
|---|
| 2166 | 1787 | break; |
|---|
| 2167 | 1788 | case V4L2_CID_HFLIP: |
|---|
| 2168 | 1789 | ret = imx335_write_reg(imx335->client, IMX335_HREVERSE_REG, |
|---|
| 2169 | | - IMX335_REG_VALUE_08BIT, ctrl->val); |
|---|
| 1790 | + IMX335_REG_VALUE_08BIT, !!ctrl->val); |
|---|
| 2170 | 1791 | break; |
|---|
| 2171 | 1792 | case V4L2_CID_VFLIP: |
|---|
| 2172 | 1793 | if (ctrl->val) { |
|---|
| 2173 | 1794 | ret = imx335_write_reg(imx335->client, IMX335_VREVERSE_REG, |
|---|
| 2174 | | - IMX335_REG_VALUE_08BIT, ctrl->val); |
|---|
| 2175 | | - if (imx335->cur_mode->width == 2616 && imx335->cur_mode->height == 1964) { |
|---|
| 2176 | | - ret |= imx335_write_reg(imx335->client, 0x3078, |
|---|
| 2177 | | - IMX335_REG_VALUE_08BIT, 0x01); |
|---|
| 2178 | | - ret |= imx335_write_reg(imx335->client, 0x3079, |
|---|
| 2179 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2180 | | - ret |= imx335_write_reg(imx335->client, 0x307a, |
|---|
| 2181 | | - IMX335_REG_VALUE_08BIT, 0xff); |
|---|
| 2182 | | - ret |= imx335_write_reg(imx335->client, 0x307b, |
|---|
| 2183 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2184 | | - ret |= imx335_write_reg(imx335->client, 0x307c, |
|---|
| 2185 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2186 | | - ret |= imx335_write_reg(imx335->client, 0x307d, |
|---|
| 2187 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2188 | | - ret |= imx335_write_reg(imx335->client, 0x307e, |
|---|
| 2189 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2190 | | - ret |= imx335_write_reg(imx335->client, 0x307f, |
|---|
| 2191 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2192 | | - ret |= imx335_write_reg(imx335->client, 0x3080, |
|---|
| 2193 | | - IMX335_REG_VALUE_08BIT, 0x01); |
|---|
| 2194 | | - ret |= imx335_write_reg(imx335->client, 0x3081, |
|---|
| 2195 | | - IMX335_REG_VALUE_08BIT, 0xfe); |
|---|
| 2196 | | - ret |= imx335_write_reg(imx335->client, 0x3082, |
|---|
| 2197 | | - IMX335_REG_VALUE_08BIT, 0xff); |
|---|
| 2198 | | - ret |= imx335_write_reg(imx335->client, 0x3083, |
|---|
| 2199 | | - IMX335_REG_VALUE_08BIT, 0xfe); |
|---|
| 2200 | | - ret |= imx335_write_reg(imx335->client, 0x3084, |
|---|
| 2201 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2202 | | - ret |= imx335_write_reg(imx335->client, 0x3085, |
|---|
| 2203 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2204 | | - ret |= imx335_write_reg(imx335->client, 0x3086, |
|---|
| 2205 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2206 | | - ret |= imx335_write_reg(imx335->client, 0x3087, |
|---|
| 2207 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2208 | | - ret |= imx335_write_reg(imx335->client, 0x30a4, |
|---|
| 2209 | | - IMX335_REG_VALUE_08BIT, 0x33); |
|---|
| 2210 | | - ret |= imx335_write_reg(imx335->client, 0x30a8, |
|---|
| 2211 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2212 | | - ret |= imx335_write_reg(imx335->client, 0x30a9, |
|---|
| 2213 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2214 | | - ret |= imx335_write_reg(imx335->client, 0x30ac, |
|---|
| 2215 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2216 | | - ret |= imx335_write_reg(imx335->client, 0x30ad, |
|---|
| 2217 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2218 | | - ret |= imx335_write_reg(imx335->client, 0x30b0, |
|---|
| 2219 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2220 | | - ret |= imx335_write_reg(imx335->client, 0x30b1, |
|---|
| 2221 | | - IMX335_REG_VALUE_08BIT, 0x08); |
|---|
| 2222 | | - ret |= imx335_write_reg(imx335->client, 0x30b4, |
|---|
| 2223 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2224 | | - ret |= imx335_write_reg(imx335->client, 0x30b5, |
|---|
| 2225 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2226 | | - ret |= imx335_write_reg(imx335->client, 0x30b6, |
|---|
| 2227 | | - IMX335_REG_VALUE_08BIT, 0xfa); |
|---|
| 2228 | | - ret |= imx335_write_reg(imx335->client, 0x30b7, |
|---|
| 2229 | | - IMX335_REG_VALUE_08BIT, 0x01); |
|---|
| 2230 | | - ret |= imx335_write_reg(imx335->client, 0x3112, |
|---|
| 2231 | | - IMX335_REG_VALUE_08BIT, 0x08); |
|---|
| 2232 | | - ret |= imx335_write_reg(imx335->client, 0x3113, |
|---|
| 2233 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2234 | | - ret |= imx335_write_reg(imx335->client, 0x3116, |
|---|
| 2235 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2236 | | - ret |= imx335_write_reg(imx335->client, 0x3117, |
|---|
| 2237 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2238 | | - } else { |
|---|
| 2239 | | - ret |= imx335_write_reg(imx335->client, 0x3078, |
|---|
| 2240 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2241 | | - ret |= imx335_write_reg(imx335->client, 0x3079, |
|---|
| 2242 | | - IMX335_REG_VALUE_08BIT, 0xfd); |
|---|
| 2243 | | - ret |= imx335_write_reg(imx335->client, 0x307a, |
|---|
| 2244 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2245 | | - ret |= imx335_write_reg(imx335->client, 0x307b, |
|---|
| 2246 | | - IMX335_REG_VALUE_08BIT, 0xfe); |
|---|
| 2247 | | - ret |= imx335_write_reg(imx335->client, 0x307c, |
|---|
| 2248 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2249 | | - ret |= imx335_write_reg(imx335->client, 0x307d, |
|---|
| 2250 | | - IMX335_REG_VALUE_08BIT, 0xfb); |
|---|
| 2251 | | - ret |= imx335_write_reg(imx335->client, 0x307e, |
|---|
| 2252 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2253 | | - ret |= imx335_write_reg(imx335->client, 0x307f, |
|---|
| 2254 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2255 | | - ret |= imx335_write_reg(imx335->client, 0x3080, |
|---|
| 2256 | | - IMX335_REG_VALUE_08BIT, 0xfc); |
|---|
| 2257 | | - ret |= imx335_write_reg(imx335->client, 0x3081, |
|---|
| 2258 | | - IMX335_REG_VALUE_08BIT, 0x05); |
|---|
| 2259 | | - ret |= imx335_write_reg(imx335->client, 0x3082, |
|---|
| 2260 | | - IMX335_REG_VALUE_08BIT, 0xfc); |
|---|
| 2261 | | - ret |= imx335_write_reg(imx335->client, 0x3083, |
|---|
| 2262 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2263 | | - ret |= imx335_write_reg(imx335->client, 0x3084, |
|---|
| 2264 | | - IMX335_REG_VALUE_08BIT, 0xfc); |
|---|
| 2265 | | - ret |= imx335_write_reg(imx335->client, 0x3085, |
|---|
| 2266 | | - IMX335_REG_VALUE_08BIT, 0x03); |
|---|
| 2267 | | - ret |= imx335_write_reg(imx335->client, 0x3086, |
|---|
| 2268 | | - IMX335_REG_VALUE_08BIT, 0xfc); |
|---|
| 2269 | | - ret |= imx335_write_reg(imx335->client, 0x3087, |
|---|
| 2270 | | - IMX335_REG_VALUE_08BIT, 0xfe); |
|---|
| 2271 | | - ret |= imx335_write_reg(imx335->client, 0x30a4, |
|---|
| 2272 | | - IMX335_REG_VALUE_08BIT, 0x77); |
|---|
| 2273 | | - ret |= imx335_write_reg(imx335->client, 0x30a8, |
|---|
| 2274 | | - IMX335_REG_VALUE_08BIT, 0x20); |
|---|
| 2275 | | - ret |= imx335_write_reg(imx335->client, 0x30a9, |
|---|
| 2276 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2277 | | - ret |= imx335_write_reg(imx335->client, 0x30ac, |
|---|
| 2278 | | - IMX335_REG_VALUE_08BIT, 0x08); |
|---|
| 2279 | | - ret |= imx335_write_reg(imx335->client, 0x30ad, |
|---|
| 2280 | | - IMX335_REG_VALUE_08BIT, 0x78); |
|---|
| 2281 | | - ret |= imx335_write_reg(imx335->client, 0x30b0, |
|---|
| 2282 | | - IMX335_REG_VALUE_08BIT, 0x20); |
|---|
| 2283 | | - ret |= imx335_write_reg(imx335->client, 0x30b1, |
|---|
| 2284 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2285 | | - ret |= imx335_write_reg(imx335->client, 0x30b4, |
|---|
| 2286 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2287 | | - ret |= imx335_write_reg(imx335->client, 0x30b5, |
|---|
| 2288 | | - IMX335_REG_VALUE_08BIT, 0x70); |
|---|
| 2289 | | - ret |= imx335_write_reg(imx335->client, 0x30b6, |
|---|
| 2290 | | - IMX335_REG_VALUE_08BIT, 0xf2); |
|---|
| 2291 | | - ret |= imx335_write_reg(imx335->client, 0x30b7, |
|---|
| 2292 | | - IMX335_REG_VALUE_08BIT, 0x01); |
|---|
| 2293 | | - ret |= imx335_write_reg(imx335->client, 0x3112, |
|---|
| 2294 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2295 | | - ret |= imx335_write_reg(imx335->client, 0x3113, |
|---|
| 2296 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2297 | | - ret |= imx335_write_reg(imx335->client, 0x3116, |
|---|
| 2298 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2299 | | - ret |= imx335_write_reg(imx335->client, 0x3117, |
|---|
| 2300 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2301 | | - } |
|---|
| 1795 | + IMX335_REG_VALUE_08BIT, !!ctrl->val); |
|---|
| 1796 | + ret |= imx335_write_reg(imx335->client, 0x3081, |
|---|
| 1797 | + IMX335_REG_VALUE_08BIT, 0xfe); |
|---|
| 1798 | + ret |= imx335_write_reg(imx335->client, 0x3083, |
|---|
| 1799 | + IMX335_REG_VALUE_08BIT, 0xfe); |
|---|
| 1800 | + ret |= imx335_write_reg(imx335->client, 0x30b6, |
|---|
| 1801 | + IMX335_REG_VALUE_08BIT, 0xfa); |
|---|
| 1802 | + ret |= imx335_write_reg(imx335->client, 0x30b7, |
|---|
| 1803 | + IMX335_REG_VALUE_08BIT, 0x01); |
|---|
| 1804 | + ret |= imx335_write_reg(imx335->client, 0x3116, |
|---|
| 1805 | + IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 1806 | + ret |= imx335_write_reg(imx335->client, 0x3117, |
|---|
| 1807 | + IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2302 | 1808 | } else { |
|---|
| 2303 | 1809 | ret = imx335_write_reg(imx335->client, IMX335_VREVERSE_REG, |
|---|
| 2304 | | - IMX335_REG_VALUE_08BIT, ctrl->val); |
|---|
| 2305 | | - if (imx335->cur_mode->width == 2616 && imx335->cur_mode->height == 1964) { |
|---|
| 2306 | | - ret |= imx335_write_reg(imx335->client, 0x3078, |
|---|
| 2307 | | - IMX335_REG_VALUE_08BIT, 0x01); |
|---|
| 2308 | | - ret |= imx335_write_reg(imx335->client, 0x3079, |
|---|
| 2309 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2310 | | - ret |= imx335_write_reg(imx335->client, 0x307a, |
|---|
| 2311 | | - IMX335_REG_VALUE_08BIT, 0xff); |
|---|
| 2312 | | - ret |= imx335_write_reg(imx335->client, 0x307b, |
|---|
| 2313 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2314 | | - ret |= imx335_write_reg(imx335->client, 0x307c, |
|---|
| 2315 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2316 | | - ret |= imx335_write_reg(imx335->client, 0x307d, |
|---|
| 2317 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2318 | | - ret |= imx335_write_reg(imx335->client, 0x307e, |
|---|
| 2319 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2320 | | - ret |= imx335_write_reg(imx335->client, 0x307f, |
|---|
| 2321 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2322 | | - ret |= imx335_write_reg(imx335->client, 0x3080, |
|---|
| 2323 | | - IMX335_REG_VALUE_08BIT, 0x01); |
|---|
| 2324 | | - ret |= imx335_write_reg(imx335->client, 0x3081, |
|---|
| 2325 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2326 | | - ret |= imx335_write_reg(imx335->client, 0x3082, |
|---|
| 2327 | | - IMX335_REG_VALUE_08BIT, 0xff); |
|---|
| 2328 | | - ret |= imx335_write_reg(imx335->client, 0x3083, |
|---|
| 2329 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2330 | | - ret |= imx335_write_reg(imx335->client, 0x3084, |
|---|
| 2331 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2332 | | - ret |= imx335_write_reg(imx335->client, 0x3085, |
|---|
| 2333 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2334 | | - ret |= imx335_write_reg(imx335->client, 0x3086, |
|---|
| 2335 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2336 | | - ret |= imx335_write_reg(imx335->client, 0x3087, |
|---|
| 2337 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2338 | | - ret |= imx335_write_reg(imx335->client, 0x30a4, |
|---|
| 2339 | | - IMX335_REG_VALUE_08BIT, 0x33); |
|---|
| 2340 | | - ret |= imx335_write_reg(imx335->client, 0x30a8, |
|---|
| 2341 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2342 | | - ret |= imx335_write_reg(imx335->client, 0x30a9, |
|---|
| 2343 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2344 | | - ret |= imx335_write_reg(imx335->client, 0x30ac, |
|---|
| 2345 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2346 | | - ret |= imx335_write_reg(imx335->client, 0x30ad, |
|---|
| 2347 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2348 | | - ret |= imx335_write_reg(imx335->client, 0x30b0, |
|---|
| 2349 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2350 | | - ret |= imx335_write_reg(imx335->client, 0x30b1, |
|---|
| 2351 | | - IMX335_REG_VALUE_08BIT, 0x08); |
|---|
| 2352 | | - ret |= imx335_write_reg(imx335->client, 0x30b4, |
|---|
| 2353 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2354 | | - ret |= imx335_write_reg(imx335->client, 0x30b5, |
|---|
| 2355 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2356 | | - ret |= imx335_write_reg(imx335->client, 0x30b6, |
|---|
| 2357 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2358 | | - ret |= imx335_write_reg(imx335->client, 0x30b7, |
|---|
| 2359 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2360 | | - ret |= imx335_write_reg(imx335->client, 0x3112, |
|---|
| 2361 | | - IMX335_REG_VALUE_08BIT, 0x08); |
|---|
| 2362 | | - ret |= imx335_write_reg(imx335->client, 0x3113, |
|---|
| 2363 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2364 | | - ret |= imx335_write_reg(imx335->client, 0x3116, |
|---|
| 2365 | | - IMX335_REG_VALUE_08BIT, 0x08); |
|---|
| 2366 | | - ret |= imx335_write_reg(imx335->client, 0x3117, |
|---|
| 2367 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2368 | | - } else { |
|---|
| 2369 | | - ret |= imx335_write_reg(imx335->client, 0x3078, |
|---|
| 2370 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2371 | | - ret |= imx335_write_reg(imx335->client, 0x3079, |
|---|
| 2372 | | - IMX335_REG_VALUE_08BIT, 0xfd); |
|---|
| 2373 | | - ret |= imx335_write_reg(imx335->client, 0x307a, |
|---|
| 2374 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2375 | | - ret |= imx335_write_reg(imx335->client, 0x307b, |
|---|
| 2376 | | - IMX335_REG_VALUE_08BIT, 0xfe); |
|---|
| 2377 | | - ret |= imx335_write_reg(imx335->client, 0x307c, |
|---|
| 2378 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2379 | | - ret |= imx335_write_reg(imx335->client, 0x307d, |
|---|
| 2380 | | - IMX335_REG_VALUE_08BIT, 0xfb); |
|---|
| 2381 | | - ret |= imx335_write_reg(imx335->client, 0x307e, |
|---|
| 2382 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2383 | | - ret |= imx335_write_reg(imx335->client, 0x307f, |
|---|
| 2384 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2385 | | - ret |= imx335_write_reg(imx335->client, 0x3080, |
|---|
| 2386 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2387 | | - ret |= imx335_write_reg(imx335->client, 0x3081, |
|---|
| 2388 | | - IMX335_REG_VALUE_08BIT, 0xfd); |
|---|
| 2389 | | - ret |= imx335_write_reg(imx335->client, 0x3082, |
|---|
| 2390 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2391 | | - ret |= imx335_write_reg(imx335->client, 0x3083, |
|---|
| 2392 | | - IMX335_REG_VALUE_08BIT, 0xfe); |
|---|
| 2393 | | - ret |= imx335_write_reg(imx335->client, 0x3084, |
|---|
| 2394 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2395 | | - ret |= imx335_write_reg(imx335->client, 0x3085, |
|---|
| 2396 | | - IMX335_REG_VALUE_08BIT, 0xfb); |
|---|
| 2397 | | - ret |= imx335_write_reg(imx335->client, 0x3086, |
|---|
| 2398 | | - IMX335_REG_VALUE_08BIT, 0x04); |
|---|
| 2399 | | - ret |= imx335_write_reg(imx335->client, 0x3087, |
|---|
| 2400 | | - IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 2401 | | - ret |= imx335_write_reg(imx335->client, 0x30a4, |
|---|
| 2402 | | - IMX335_REG_VALUE_08BIT, 0x77); |
|---|
| 2403 | | - ret |= imx335_write_reg(imx335->client, 0x30a8, |
|---|
| 2404 | | - IMX335_REG_VALUE_08BIT, 0x20); |
|---|
| 2405 | | - ret |= imx335_write_reg(imx335->client, 0x30a9, |
|---|
| 2406 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2407 | | - ret |= imx335_write_reg(imx335->client, 0x30ac, |
|---|
| 2408 | | - IMX335_REG_VALUE_08BIT, 0x08); |
|---|
| 2409 | | - ret |= imx335_write_reg(imx335->client, 0x30ad, |
|---|
| 2410 | | - IMX335_REG_VALUE_08BIT, 0x08); |
|---|
| 2411 | | - ret |= imx335_write_reg(imx335->client, 0x30b0, |
|---|
| 2412 | | - IMX335_REG_VALUE_08BIT, 0x20); |
|---|
| 2413 | | - ret |= imx335_write_reg(imx335->client, 0x30b1, |
|---|
| 2414 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2415 | | - ret |= imx335_write_reg(imx335->client, 0x30b4, |
|---|
| 2416 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2417 | | - ret |= imx335_write_reg(imx335->client, 0x30b5, |
|---|
| 2418 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2419 | | - ret |= imx335_write_reg(imx335->client, 0x30b6, |
|---|
| 2420 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2421 | | - ret |= imx335_write_reg(imx335->client, 0x30b7, |
|---|
| 2422 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2423 | | - ret |= imx335_write_reg(imx335->client, 0x3112, |
|---|
| 2424 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2425 | | - ret |= imx335_write_reg(imx335->client, 0x3113, |
|---|
| 2426 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2427 | | - ret |= imx335_write_reg(imx335->client, 0x3116, |
|---|
| 2428 | | - IMX335_REG_VALUE_08BIT, 0x10); |
|---|
| 2429 | | - ret |= imx335_write_reg(imx335->client, 0x3117, |
|---|
| 2430 | | - IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2431 | | - } |
|---|
| 1810 | + IMX335_REG_VALUE_08BIT, !!ctrl->val); |
|---|
| 1811 | + ret |= imx335_write_reg(imx335->client, 0x3081, |
|---|
| 1812 | + IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 1813 | + ret |= imx335_write_reg(imx335->client, 0x3083, |
|---|
| 1814 | + IMX335_REG_VALUE_08BIT, 0x02); |
|---|
| 1815 | + ret |= imx335_write_reg(imx335->client, 0x30b6, |
|---|
| 1816 | + IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 1817 | + ret |= imx335_write_reg(imx335->client, 0x30b7, |
|---|
| 1818 | + IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 1819 | + ret |= imx335_write_reg(imx335->client, 0x3116, |
|---|
| 1820 | + IMX335_REG_VALUE_08BIT, 0x08); |
|---|
| 1821 | + ret |= imx335_write_reg(imx335->client, 0x3117, |
|---|
| 1822 | + IMX335_REG_VALUE_08BIT, 0x00); |
|---|
| 2432 | 1823 | } |
|---|
| 2433 | 1824 | break; |
|---|
| 2434 | 1825 | default: |
|---|
| .. | .. |
|---|
| 2437 | 1828 | break; |
|---|
| 2438 | 1829 | } |
|---|
| 2439 | 1830 | |
|---|
| 1831 | +ctrl_end: |
|---|
| 2440 | 1832 | pm_runtime_put(&client->dev); |
|---|
| 2441 | 1833 | |
|---|
| 2442 | 1834 | return ret; |
|---|
| .. | .. |
|---|
| 2468 | 1860 | link_freq_items); |
|---|
| 2469 | 1861 | |
|---|
| 2470 | 1862 | /* pixel rate = link frequency * 2 * lanes / BITS_PER_SAMPLE */ |
|---|
| 2471 | | - pixel_rate = (u32)link_freq_items[mode->mipi_freq_idx] / mode->bpp * 2 * IMX335_4LANES; |
|---|
| 1863 | + pixel_rate = (u32)link_freq_items[0] / mode->bpp * 2 * IMX335_4LANES; |
|---|
| 2472 | 1864 | imx335->pixel_rate = v4l2_ctrl_new_std(handler, NULL, |
|---|
| 2473 | 1865 | V4L2_CID_PIXEL_RATE, 0, pixel_rate, 1, pixel_rate); |
|---|
| 2474 | 1866 | |
|---|