linux/drivers/staging/media/atomisp/i2c/imx/imx.c
<<
>>
Prefs
   1/*
   2 * Support for Sony imx 8MP camera sensor.
   3 *
   4 * Copyright (c) 2012 Intel Corporation. All Rights Reserved.
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License version
   8 * 2 as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  18 * 02110-1301, USA.
  19 *
  20 */
  21#include <asm/intel-mid.h>
  22#include "../../include/linux/atomisp_platform.h"
  23#include <linux/bitops.h>
  24#include <linux/device.h>
  25#include <linux/delay.h>
  26#include <linux/errno.h>
  27#include <linux/fs.h>
  28#include <linux/gpio.h>
  29#include <linux/init.h>
  30#include <linux/i2c.h>
  31#include <linux/io.h>
  32#include <linux/kernel.h>
  33#include "../../include/linux/libmsrlisthelper.h"
  34#include <linux/mm.h>
  35#include <linux/kmod.h>
  36#include <linux/module.h>
  37#include <linux/moduleparam.h>
  38#include <linux/string.h>
  39#include <linux/slab.h>
  40#include <linux/types.h>
  41#include <media/v4l2-ctrls.h>
  42#include <media/v4l2-device.h>
  43#include "imx.h"
  44
  45/*
  46 * The imx135 embedded data info:
  47 * embedded data line num: 2
  48 * line 0 effective data size(byte): 76
  49 * line 1 effective data size(byte): 113
  50 */
  51static const uint32_t
  52        imx135_embedded_effective_size[IMX135_EMBEDDED_DATA_LINE_NUM]
  53        =  {76, 113};
  54
  55static enum atomisp_bayer_order imx_bayer_order_mapping[] = {
  56        atomisp_bayer_order_rggb,
  57        atomisp_bayer_order_grbg,
  58        atomisp_bayer_order_gbrg,
  59        atomisp_bayer_order_bggr
  60};
  61
  62static const unsigned int
  63IMX227_BRACKETING_LUT_FRAME_ENTRY[IMX_MAX_AE_LUT_LENGTH] = {
  64        0x0E10, 0x0E1E, 0x0E2C, 0x0E3A, 0x0E48};
  65
  66static int
  67imx_read_reg(struct i2c_client *client, u16 len, u16 reg, u16 *val)
  68{
  69        struct i2c_msg msg[2];
  70        u16 data[IMX_SHORT_MAX];
  71        int ret, i;
  72        int retry = 0;
  73
  74        if (len > IMX_BYTE_MAX) {
  75                dev_err(&client->dev, "%s error, invalid data length\n",
  76                        __func__);
  77                return -EINVAL;
  78        }
  79
  80        do {
  81                memset(msg, 0 , sizeof(msg));
  82                memset(data, 0 , sizeof(data));
  83
  84                msg[0].addr = client->addr;
  85                msg[0].flags = 0;
  86                msg[0].len = I2C_MSG_LENGTH;
  87                msg[0].buf = (u8 *)data;
  88                /* high byte goes first */
  89                data[0] = cpu_to_be16(reg);
  90
  91                msg[1].addr = client->addr;
  92                msg[1].len = len;
  93                msg[1].flags = I2C_M_RD;
  94                msg[1].buf = (u8 *)data;
  95
  96                ret = i2c_transfer(client->adapter, msg, 2);
  97                if (ret != 2) {
  98                        dev_err(&client->dev,
  99                          "retrying i2c read from offset 0x%x error %d... %d\n",
 100                          reg, ret, retry);
 101                        msleep(20);
 102                }
 103        } while (ret != 2 && retry++ < I2C_RETRY_COUNT);
 104
 105        if (ret != 2)
 106                return -EIO;
 107
 108        /* high byte comes first */
 109        if (len == IMX_8BIT) {
 110                *val = (u8)data[0];
 111        } else {
 112                /* 16-bit access is default when len > 1 */
 113                for (i = 0; i < (len >> 1); i++)
 114                        val[i] = be16_to_cpu(data[i]);
 115        }
 116
 117        return 0;
 118}
 119
 120static int imx_i2c_write(struct i2c_client *client, u16 len, u8 *data)
 121{
 122        struct i2c_msg msg;
 123        int ret;
 124        int retry = 0;
 125
 126        do {
 127                msg.addr = client->addr;
 128                msg.flags = 0;
 129                msg.len = len;
 130                msg.buf = data;
 131
 132                ret = i2c_transfer(client->adapter, &msg, 1);
 133                if (ret != 1) {
 134                        dev_err(&client->dev,
 135                                "retrying i2c write transfer... %d\n", retry);
 136                                msleep(20);
 137                }
 138        } while (ret != 1 && retry++ < I2C_RETRY_COUNT);
 139
 140        return ret == 1 ? 0 : -EIO;
 141}
 142
 143int
 144imx_write_reg(struct i2c_client *client, u16 data_length, u16 reg, u16 val)
 145{
 146        int ret;
 147        unsigned char data[4] = {0};
 148        u16 *wreg = (u16 *)data;
 149        const u16 len = data_length + sizeof(u16); /* 16-bit address + data */
 150
 151        if (data_length != IMX_8BIT && data_length != IMX_16BIT) {
 152                v4l2_err(client, "%s error, invalid data_length\n", __func__);
 153                return -EINVAL;
 154        }
 155
 156        /* high byte goes out first */
 157        *wreg = cpu_to_be16(reg);
 158
 159        if (data_length == IMX_8BIT)
 160                data[2] = (u8)(val);
 161        else {
 162                /* IMX_16BIT */
 163                u16 *wdata = (u16 *)&data[2];
 164                *wdata = cpu_to_be16(val);
 165        }
 166
 167        ret = imx_i2c_write(client, len, data);
 168        if (ret)
 169                dev_err(&client->dev,
 170                        "write error: wrote 0x%x to offset 0x%x error %d",
 171                        val, reg, ret);
 172
 173        return ret;
 174}
 175
 176/*
 177 * imx_write_reg_array - Initializes a list of imx registers
 178 * @client: i2c driver client structure
 179 * @reglist: list of registers to be written
 180 *
 181 * This function initializes a list of registers. When consecutive addresses
 182 * are found in a row on the list, this function creates a buffer and sends
 183 * consecutive data in a single i2c_transfer().
 184 *
 185 * __imx_flush_reg_array, __imx_buf_reg_array() and
 186 * __imx_write_reg_is_consecutive() are internal functions to
 187 * imx_write_reg_array_fast() and should be not used anywhere else.
 188 *
 189 */
 190
 191static int __imx_flush_reg_array(struct i2c_client *client,
 192                                     struct imx_write_ctrl *ctrl)
 193{
 194        u16 size;
 195
 196        if (ctrl->index == 0)
 197                return 0;
 198
 199        size = sizeof(u16) + ctrl->index; /* 16-bit address + data */
 200        ctrl->buffer.addr = cpu_to_be16(ctrl->buffer.addr);
 201        ctrl->index = 0;
 202
 203        return imx_i2c_write(client, size, (u8 *)&ctrl->buffer);
 204}
 205
 206static int __imx_buf_reg_array(struct i2c_client *client,
 207                                   struct imx_write_ctrl *ctrl,
 208                                   const struct imx_reg *next)
 209{
 210        int size;
 211        u16 *data16;
 212
 213        switch (next->type) {
 214        case IMX_8BIT:
 215                size = 1;
 216                ctrl->buffer.data[ctrl->index] = (u8)next->val;
 217                break;
 218        case IMX_16BIT:
 219                size = 2;
 220                data16 = (u16 *)&ctrl->buffer.data[ctrl->index];
 221                *data16 = cpu_to_be16((u16)next->val);
 222                break;
 223        default:
 224                return -EINVAL;
 225        }
 226
 227        /* When first item is added, we need to store its starting address */
 228        if (ctrl->index == 0)
 229                ctrl->buffer.addr = next->sreg;
 230
 231        ctrl->index += size;
 232
 233        /*
 234         * Buffer cannot guarantee free space for u32? Better flush it to avoid
 235         * possible lack of memory for next item.
 236         */
 237        if (ctrl->index + sizeof(u16) >= IMX_MAX_WRITE_BUF_SIZE)
 238                return __imx_flush_reg_array(client, ctrl);
 239
 240        return 0;
 241}
 242
 243static int
 244__imx_write_reg_is_consecutive(struct i2c_client *client,
 245                                   struct imx_write_ctrl *ctrl,
 246                                   const struct imx_reg *next)
 247{
 248        if (ctrl->index == 0)
 249                return 1;
 250
 251        return ctrl->buffer.addr + ctrl->index == next->sreg;
 252}
 253
 254static int imx_write_reg_array(struct i2c_client *client,
 255                                   const struct imx_reg *reglist)
 256{
 257        const struct imx_reg *next = reglist;
 258        struct imx_write_ctrl ctrl;
 259        int err;
 260
 261        ctrl.index = 0;
 262        for (; next->type != IMX_TOK_TERM; next++) {
 263                switch (next->type & IMX_TOK_MASK) {
 264                case IMX_TOK_DELAY:
 265                        err = __imx_flush_reg_array(client, &ctrl);
 266                        if (err)
 267                                return err;
 268                        msleep(next->val);
 269                        break;
 270
 271                default:
 272                        /*
 273                         * If next address is not consecutive, data needs to be
 274                         * flushed before proceed.
 275                         */
 276                        if (!__imx_write_reg_is_consecutive(client, &ctrl,
 277                                                                next)) {
 278                                err = __imx_flush_reg_array(client, &ctrl);
 279                                if (err)
 280                                        return err;
 281                        }
 282                        err = __imx_buf_reg_array(client, &ctrl, next);
 283                        if (err) {
 284                                v4l2_err(client, "%s: write error, aborted\n",
 285                                         __func__);
 286                                return err;
 287                        }
 288                        break;
 289                }
 290        }
 291
 292        return __imx_flush_reg_array(client, &ctrl);
 293}
 294
 295static int __imx_min_fps_diff(int fps, const struct imx_fps_setting *fps_list)
 296{
 297        int diff = INT_MAX;
 298        int i;
 299
 300        if (fps == 0)
 301                return 0;
 302
 303        for (i = 0; i < MAX_FPS_OPTIONS_SUPPORTED; i++) {
 304                if (!fps_list[i].fps)
 305                        break;
 306                if (abs(fps_list[i].fps - fps) < diff)
 307                        diff = abs(fps_list[i].fps - fps);
 308        }
 309
 310        return diff;
 311}
 312
 313static int __imx_nearest_fps_index(int fps,
 314                                        const struct imx_fps_setting *fps_list)
 315{
 316        int fps_index = 0;
 317        int i;
 318
 319        for (i = 0; i < MAX_FPS_OPTIONS_SUPPORTED; i++) {
 320                if (!fps_list[i].fps)
 321                        break;
 322                if (abs(fps_list[i].fps - fps)
 323                    < abs(fps_list[fps_index].fps - fps))
 324                        fps_index = i;
 325        }
 326        return fps_index;
 327}
 328
 329/*
 330 * This is to choose the nearest fps setting above the requested fps
 331 * fps_list should be in ascendant order.
 332 */
 333static int __imx_above_nearest_fps_index(int fps,
 334                                        const struct imx_fps_setting *fps_list)
 335{
 336        int fps_index = 0;
 337        int i;
 338
 339        for (i = 0; i < MAX_FPS_OPTIONS_SUPPORTED; i++) {
 340                if (!fps_list[i].fps)
 341                        break;
 342                if (fps <= fps_list[i].fps) {
 343                        fps_index = i;
 344                        break;
 345                }
 346        }
 347
 348        return fps_index;
 349}
 350
 351static int imx_get_lanes(struct v4l2_subdev *sd)
 352{
 353        struct camera_mipi_info *imx_info = v4l2_get_subdev_hostdata(sd);
 354
 355        if (!imx_info)
 356                return -ENOSYS;
 357        if (imx_info->num_lanes < 1 || imx_info->num_lanes > 4 ||
 358            imx_info->num_lanes == 3)
 359                return -EINVAL;
 360
 361        return imx_info->num_lanes;
 362}
 363
 364static int __imx_update_exposure_timing(struct i2c_client *client, u16 exposure,
 365                        u16 llp, u16 fll)
 366{
 367        struct v4l2_subdev *sd = i2c_get_clientdata(client);
 368        struct imx_device *dev = to_imx_sensor(sd);
 369        int ret = 0;
 370
 371        if (dev->sensor_id != IMX227_ID) {
 372                /* Increase the VTS to match exposure + margin */
 373                if (exposure > fll - IMX_INTEGRATION_TIME_MARGIN)
 374                        fll = exposure + IMX_INTEGRATION_TIME_MARGIN;
 375        }
 376
 377        ret = imx_write_reg(client, IMX_16BIT,
 378                dev->reg_addr->line_length_pixels, llp);
 379        if (ret)
 380                return ret;
 381
 382        ret = imx_write_reg(client, IMX_16BIT,
 383                dev->reg_addr->frame_length_lines, fll);
 384        if (ret)
 385                return ret;
 386
 387        if (exposure)
 388                ret = imx_write_reg(client, IMX_16BIT,
 389                        dev->reg_addr->coarse_integration_time, exposure);
 390
 391        return ret;
 392}
 393
 394static int __imx_update_gain(struct v4l2_subdev *sd, u16 gain)
 395{
 396        struct imx_device *dev = to_imx_sensor(sd);
 397        struct i2c_client *client = v4l2_get_subdevdata(sd);
 398        int ret;
 399
 400        /* set global gain */
 401        ret = imx_write_reg(client, IMX_8BIT, dev->reg_addr->global_gain, gain);
 402        if (ret)
 403                return ret;
 404
 405        /* set short analog gain */
 406        if (dev->sensor_id == IMX135_ID)
 407                ret = imx_write_reg(client, IMX_8BIT, IMX_SHORT_AGC_GAIN, gain);
 408
 409        return ret;
 410}
 411
 412static int __imx_update_digital_gain(struct i2c_client *client, u16 digitgain)
 413{
 414        struct v4l2_subdev *sd = i2c_get_clientdata(client);
 415        struct imx_device *dev = to_imx_sensor(sd);
 416        struct imx_write_buffer digit_gain;
 417
 418        digit_gain.addr = cpu_to_be16(dev->reg_addr->dgc_adj);
 419        digit_gain.data[0] = (digitgain >> 8) & 0xFF;
 420        digit_gain.data[1] = digitgain & 0xFF;
 421
 422        if (dev->sensor_id == IMX219_ID) {
 423                return imx_i2c_write(client, IMX219_DGC_LEN, (u8 *)&digit_gain);
 424        } else if (dev->sensor_id == IMX227_ID) {
 425                return imx_i2c_write(client, IMX227_DGC_LEN, (u8 *)&digit_gain);
 426        } else {
 427                digit_gain.data[2] = (digitgain >> 8) & 0xFF;
 428                digit_gain.data[3] = digitgain & 0xFF;
 429                digit_gain.data[4] = (digitgain >> 8) & 0xFF;
 430                digit_gain.data[5] = digitgain & 0xFF;
 431                digit_gain.data[6] = (digitgain >> 8) & 0xFF;
 432                digit_gain.data[7] = digitgain & 0xFF;
 433                return imx_i2c_write(client, IMX_DGC_LEN, (u8 *)&digit_gain);
 434        }
 435        return 0;
 436}
 437
 438static int imx_set_exposure_gain(struct v4l2_subdev *sd, u16 coarse_itg,
 439        u16 gain, u16 digitgain)
 440{
 441        struct imx_device *dev = to_imx_sensor(sd);
 442        struct i2c_client *client = v4l2_get_subdevdata(sd);
 443        int lanes = imx_get_lanes(sd);
 444        unsigned int digitgain_scaled;
 445        int ret = 0;
 446
 447        /* Validate exposure:  cannot exceed VTS-4 where VTS is 16bit */
 448        coarse_itg = clamp_t(u16, coarse_itg, 0, IMX_MAX_EXPOSURE_SUPPORTED);
 449
 450        /* Validate gain: must not exceed maximum 8bit value */
 451        gain = clamp_t(u16, gain, 0, IMX_MAX_GLOBAL_GAIN_SUPPORTED);
 452
 453        mutex_lock(&dev->input_lock);
 454
 455        if (dev->sensor_id == IMX227_ID) {
 456                ret = imx_write_reg_array(client, imx_param_hold);
 457                if (ret) {
 458                        mutex_unlock(&dev->input_lock);
 459                        return ret;
 460                }
 461        }
 462
 463        /* For imx175, setting gain must be delayed by one */
 464        if ((dev->sensor_id == IMX175_ID) && dev->digital_gain)
 465                digitgain_scaled = dev->digital_gain;
 466        else
 467                digitgain_scaled = digitgain;
 468        /* imx132 with two lanes needs more gain to saturate at max */
 469        if (dev->sensor_id == IMX132_ID && lanes > 1) {
 470                digitgain_scaled *= IMX132_2LANES_GAINFACT;
 471                digitgain_scaled >>= IMX132_2LANES_GAINFACT_SHIFT;
 472        }
 473        /* Validate digital gain: must not exceed 12 bit value*/
 474        digitgain_scaled = clamp_t(unsigned int, digitgain_scaled,
 475                                   0, IMX_MAX_DIGITAL_GAIN_SUPPORTED);
 476
 477        ret = __imx_update_exposure_timing(client, coarse_itg,
 478                        dev->pixels_per_line, dev->lines_per_frame);
 479        if (ret)
 480                goto out;
 481        dev->coarse_itg = coarse_itg;
 482
 483        if (dev->sensor_id == IMX175_ID)
 484                ret = __imx_update_gain(sd, dev->gain);
 485        else
 486                ret = __imx_update_gain(sd, gain);
 487        if (ret)
 488                goto out;
 489        dev->gain = gain;
 490
 491        ret = __imx_update_digital_gain(client, digitgain_scaled);
 492        if (ret)
 493                goto out;
 494        dev->digital_gain = digitgain;
 495
 496out:
 497        if (dev->sensor_id == IMX227_ID)
 498                ret = imx_write_reg_array(client, imx_param_update);
 499        mutex_unlock(&dev->input_lock);
 500        return ret;
 501}
 502
 503static long imx_s_exposure(struct v4l2_subdev *sd,
 504                               struct atomisp_exposure *exposure)
 505{
 506        return imx_set_exposure_gain(sd, exposure->integration_time[0],
 507                                exposure->gain[0], exposure->gain[1]);
 508}
 509
 510/* FIXME -To be updated with real OTP reading */
 511static int imx_g_priv_int_data(struct v4l2_subdev *sd,
 512                                   struct v4l2_private_int_data *priv)
 513{
 514        struct i2c_client *client = v4l2_get_subdevdata(sd);
 515        struct imx_device *dev = to_imx_sensor(sd);
 516        u8 __user *to = priv->data;
 517        u32 read_size = priv->size;
 518        int ret;
 519
 520        /* No need to copy data if size is 0 */
 521        if (!read_size)
 522                goto out;
 523
 524        if (IS_ERR(dev->otp_data)) {
 525                dev_err(&client->dev, "OTP data not available");
 526                return PTR_ERR(dev->otp_data);
 527        }
 528        /* Correct read_size value only if bigger than maximum */
 529        if (read_size > dev->otp_driver->size)
 530                read_size = dev->otp_driver->size;
 531
 532        ret = copy_to_user(to, dev->otp_data, read_size);
 533        if (ret) {
 534                dev_err(&client->dev, "%s: failed to copy OTP data to user\n",
 535                         __func__);
 536                return -EFAULT;
 537        }
 538out:
 539        /* Return correct size */
 540        priv->size = dev->otp_driver->size;
 541
 542        return 0;
 543}
 544
 545static int __imx_init(struct v4l2_subdev *sd, u32 val)
 546{
 547        struct i2c_client *client = v4l2_get_subdevdata(sd);
 548        struct imx_device *dev = to_imx_sensor(sd);
 549        int lanes = imx_get_lanes(sd);
 550        int ret;
 551
 552        if (dev->sensor_id == IMX_ID_DEFAULT)
 553                return 0;
 554
 555        /* The default is no flip at sensor initialization */
 556        dev->h_flip->cur.val = 0;
 557        dev->v_flip->cur.val = 0;
 558        /* Sets the default FPS */
 559        dev->fps_index = 0;
 560        dev->curr_res_table = dev->mode_tables->res_preview;
 561        dev->entries_curr_table = dev->mode_tables->n_res_preview;
 562
 563        ret = imx_write_reg_array(client, dev->mode_tables->init_settings);
 564        if (ret)
 565                return ret;
 566
 567        if (dev->sensor_id == IMX132_ID && lanes > 0) {
 568                static const u8 imx132_rglanesel[] = {
 569                        IMX132_RGLANESEL_1LANE,         /* 1 lane */
 570                        IMX132_RGLANESEL_2LANES,        /* 2 lanes */
 571                        IMX132_RGLANESEL_1LANE,         /* undefined */
 572                        IMX132_RGLANESEL_4LANES,        /* 4 lanes */
 573                };
 574                ret = imx_write_reg(client, IMX_8BIT,
 575                                IMX132_RGLANESEL, imx132_rglanesel[lanes - 1]);
 576        }
 577
 578        return ret;
 579}
 580
 581static int imx_init(struct v4l2_subdev *sd, u32 val)
 582{
 583        struct imx_device *dev = to_imx_sensor(sd);
 584        int ret = 0;
 585
 586        mutex_lock(&dev->input_lock);
 587        ret = __imx_init(sd, val);
 588        mutex_unlock(&dev->input_lock);
 589
 590        return ret;
 591}
 592
 593static long imx_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
 594{
 595
 596        switch (cmd) {
 597        case ATOMISP_IOC_S_EXPOSURE:
 598                return imx_s_exposure(sd, arg);
 599        case ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA:
 600                return imx_g_priv_int_data(sd, arg);
 601        default:
 602                return -EINVAL;
 603        }
 604        return 0;
 605}
 606
 607static int power_up(struct v4l2_subdev *sd)
 608{
 609        struct i2c_client *client = v4l2_get_subdevdata(sd);
 610        struct imx_device *dev = to_imx_sensor(sd);
 611        int ret;
 612
 613       /* power control */
 614        ret = dev->platform_data->power_ctrl(sd, 1);
 615        if (ret)
 616                goto fail_power;
 617
 618        /* flis clock control */
 619        ret = dev->platform_data->flisclk_ctrl(sd, 1);
 620        if (ret)
 621                goto fail_clk;
 622
 623        /* gpio ctrl */
 624        ret = dev->platform_data->gpio_ctrl(sd, 1);
 625        if (ret) {
 626                dev_err(&client->dev, "gpio failed\n");
 627                goto fail_gpio;
 628        }
 629
 630        return 0;
 631fail_gpio:
 632        dev->platform_data->gpio_ctrl(sd, 0);
 633fail_clk:
 634        dev->platform_data->flisclk_ctrl(sd, 0);
 635fail_power:
 636        dev->platform_data->power_ctrl(sd, 0);
 637        dev_err(&client->dev, "sensor power-up failed\n");
 638
 639        return ret;
 640}
 641
 642static int power_down(struct v4l2_subdev *sd)
 643{
 644        struct imx_device *dev = to_imx_sensor(sd);
 645        struct i2c_client *client = v4l2_get_subdevdata(sd);
 646        int ret;
 647
 648        ret = dev->platform_data->flisclk_ctrl(sd, 0);
 649        if (ret)
 650                dev_err(&client->dev, "flisclk failed\n");
 651
 652        /* gpio ctrl */
 653        ret = dev->platform_data->gpio_ctrl(sd, 0);
 654        if (ret)
 655                dev_err(&client->dev, "gpio failed\n");
 656
 657        /* power control */
 658        ret = dev->platform_data->power_ctrl(sd, 0);
 659        if (ret)
 660                dev_err(&client->dev, "vprog failed.\n");
 661
 662        return ret;
 663}
 664
 665static int __imx_s_power(struct v4l2_subdev *sd, int on)
 666{
 667        struct imx_device *dev = to_imx_sensor(sd);
 668        int ret = 0;
 669        int r = 0;
 670
 671        if (on == 0) {
 672                ret = power_down(sd);
 673                if (dev->vcm_driver && dev->vcm_driver->power_down)
 674                        r = dev->vcm_driver->power_down(sd);
 675                if (ret == 0)
 676                        ret = r;
 677                dev->power = 0;
 678        } else {
 679                if (dev->vcm_driver && dev->vcm_driver->power_up)
 680                        ret = dev->vcm_driver->power_up(sd);
 681                if (ret)
 682                        return ret;
 683                ret = power_up(sd);
 684                if (!ret) {
 685                        dev->power = 1;
 686                        return __imx_init(sd, 0);
 687                }
 688        }
 689
 690        return ret;
 691}
 692
 693static int imx_s_power(struct v4l2_subdev *sd, int on)
 694{
 695        int ret;
 696        struct imx_device *dev = to_imx_sensor(sd);
 697
 698        mutex_lock(&dev->input_lock);
 699        ret = __imx_s_power(sd, on);
 700        mutex_unlock(&dev->input_lock);
 701
 702        return ret;
 703}
 704
 705static int imx_get_intg_factor(struct i2c_client *client,
 706                                struct camera_mipi_info *info,
 707                                const struct imx_reg *reglist)
 708{
 709        struct v4l2_subdev *sd = i2c_get_clientdata(client);
 710        struct imx_device *dev = to_imx_sensor(sd);
 711        int lanes = imx_get_lanes(sd);
 712        u32 vt_pix_clk_div;
 713        u32 vt_sys_clk_div;
 714        u32 pre_pll_clk_div;
 715        u32 pll_multiplier;
 716
 717        const int ext_clk_freq_hz = 19200000;
 718        struct atomisp_sensor_mode_data *buf = &info->data;
 719        int ret;
 720        u16 data[IMX_INTG_BUF_COUNT];
 721
 722        u32 vt_pix_clk_freq_mhz;
 723        u32 coarse_integration_time_min;
 724        u32 coarse_integration_time_max_margin;
 725        u32 read_mode;
 726        u32 div;
 727
 728        if (info == NULL)
 729                return -EINVAL;
 730
 731        memset(data, 0, IMX_INTG_BUF_COUNT * sizeof(u16));
 732        ret = imx_read_reg(client, 1, IMX_VT_PIX_CLK_DIV, data);
 733        if (ret)
 734                return ret;
 735        vt_pix_clk_div = data[0] & IMX_MASK_5BIT;
 736
 737        if (dev->sensor_id == IMX132_ID || dev->sensor_id == IMX208_ID) {
 738                static const int rgpltd[] = { 2, 4, 1, 1 };
 739                ret = imx_read_reg(client, 1, IMX132_208_VT_RGPLTD, data);
 740                if (ret)
 741                        return ret;
 742                vt_sys_clk_div = rgpltd[data[0] & IMX_MASK_2BIT];
 743        } else {
 744                ret = imx_read_reg(client, 1, IMX_VT_SYS_CLK_DIV, data);
 745                if (ret)
 746                        return ret;
 747                vt_sys_clk_div = data[0] & IMX_MASK_2BIT;
 748        }
 749        ret = imx_read_reg(client, 1, IMX_PRE_PLL_CLK_DIV, data);
 750        if (ret)
 751                return ret;
 752        pre_pll_clk_div = data[0] & IMX_MASK_4BIT;
 753
 754        ret = imx_read_reg(client, 2,
 755                (dev->sensor_id == IMX132_ID ||
 756                 dev->sensor_id == IMX219_ID ||
 757                 dev->sensor_id == IMX208_ID) ?
 758                IMX132_208_219_PLL_MULTIPLIER : IMX_PLL_MULTIPLIER, data);
 759        if (ret)
 760                return ret;
 761        pll_multiplier = data[0] & IMX_MASK_11BIT;
 762
 763        memset(data, 0, IMX_INTG_BUF_COUNT * sizeof(u16));
 764        ret = imx_read_reg(client, 4, IMX_COARSE_INTG_TIME_MIN, data);
 765        if (ret)
 766                return ret;
 767        coarse_integration_time_min = data[0];
 768        coarse_integration_time_max_margin = data[1];
 769
 770        /* Get the cropping and output resolution to ISP for this mode. */
 771        ret =  imx_read_reg(client, 2, dev->reg_addr->horizontal_start_h, data);
 772        if (ret)
 773                return ret;
 774        buf->crop_horizontal_start = data[0];
 775
 776        ret = imx_read_reg(client, 2, dev->reg_addr->vertical_start_h, data);
 777        if (ret)
 778                return ret;
 779        buf->crop_vertical_start = data[0];
 780
 781        ret = imx_read_reg(client, 2, dev->reg_addr->horizontal_end_h, data);
 782        if (ret)
 783                return ret;
 784        buf->crop_horizontal_end = data[0];
 785
 786        ret = imx_read_reg(client, 2, dev->reg_addr->vertical_end_h, data);
 787        if (ret)
 788                return ret;
 789        buf->crop_vertical_end = data[0];
 790
 791        ret = imx_read_reg(client, 2,
 792                dev->reg_addr->horizontal_output_size_h, data);
 793        if (ret)
 794                return ret;
 795        buf->output_width = data[0];
 796
 797        ret = imx_read_reg(client, 2,
 798                dev->reg_addr->vertical_output_size_h, data);
 799        if (ret)
 800                return ret;
 801        buf->output_height = data[0];
 802
 803        memset(data, 0, IMX_INTG_BUF_COUNT * sizeof(u16));
 804        if (dev->sensor_id == IMX132_ID || dev->sensor_id == IMX208_ID ||
 805                dev->sensor_id == IMX219_ID)
 806                read_mode = 0;
 807        else {
 808                if (dev->sensor_id == IMX227_ID)
 809                        ret = imx_read_reg(client, 1, IMX227_READ_MODE, data);
 810                else
 811                        ret = imx_read_reg(client, 1, IMX_READ_MODE, data);
 812
 813                if (ret)
 814                        return ret;
 815                read_mode = data[0] & IMX_MASK_2BIT;
 816        }
 817
 818        div = pre_pll_clk_div*vt_sys_clk_div*vt_pix_clk_div;
 819        if (div == 0)
 820                return -EINVAL;
 821
 822        if (dev->sensor_id == IMX132_ID || dev->sensor_id == IMX208_ID)
 823                vt_pix_clk_freq_mhz = ext_clk_freq_hz / div;
 824        else if (dev->sensor_id == IMX227_ID) {
 825                /* according to IMX227 datasheet:
 826                 * vt_pix_freq_mhz = * num_of_vt_lanes(4) * ivt_pix_clk_freq_mhz
 827                 */
 828                vt_pix_clk_freq_mhz =
 829                        (u64)4 * ext_clk_freq_hz * pll_multiplier;
 830                do_div(vt_pix_clk_freq_mhz, div);
 831        } else
 832                vt_pix_clk_freq_mhz = 2 * ext_clk_freq_hz / div;
 833
 834        vt_pix_clk_freq_mhz *= pll_multiplier;
 835        if (dev->sensor_id == IMX132_ID && lanes > 0)
 836                vt_pix_clk_freq_mhz *= lanes;
 837
 838        dev->vt_pix_clk_freq_mhz = vt_pix_clk_freq_mhz;
 839
 840        buf->vt_pix_clk_freq_mhz = vt_pix_clk_freq_mhz;
 841        buf->coarse_integration_time_min = coarse_integration_time_min;
 842        buf->coarse_integration_time_max_margin =
 843                                coarse_integration_time_max_margin;
 844
 845        buf->fine_integration_time_min = IMX_FINE_INTG_TIME;
 846        buf->fine_integration_time_max_margin = IMX_FINE_INTG_TIME;
 847        buf->fine_integration_time_def = IMX_FINE_INTG_TIME;
 848        buf->frame_length_lines = dev->lines_per_frame;
 849        buf->line_length_pck = dev->pixels_per_line;
 850        buf->read_mode = read_mode;
 851
 852        if (dev->sensor_id == IMX132_ID || dev->sensor_id == IMX208_ID ||
 853                dev->sensor_id == IMX219_ID) {
 854                buf->binning_factor_x = 1;
 855                buf->binning_factor_y = 1;
 856        } else {
 857                if (dev->sensor_id == IMX227_ID)
 858                        ret = imx_read_reg(client, 1, IMX227_BINNING_ENABLE,
 859                                data);
 860                else
 861                        ret = imx_read_reg(client, 1, IMX_BINNING_ENABLE, data);
 862
 863                if (ret)
 864                        return ret;
 865                /* 1:binning enabled, 0:disabled */
 866                if (data[0] == 1) {
 867                        if (dev->sensor_id == IMX227_ID)
 868                                ret = imx_read_reg(client, 1,
 869                                        IMX227_BINNING_TYPE, data);
 870                        else
 871                                ret = imx_read_reg(client, 1,
 872                                        IMX_BINNING_TYPE, data);
 873
 874                        if (ret)
 875                                return ret;
 876                        buf->binning_factor_x = data[0] >> 4 & 0x0f;
 877                        if (!buf->binning_factor_x)
 878                                buf->binning_factor_x = 1;
 879                        buf->binning_factor_y = data[0] & 0xf;
 880                        if (!buf->binning_factor_y)
 881                                buf->binning_factor_y = 1;
 882                        /* WOWRKAROUND, NHD setting for IMX227 should have 4x4
 883                         * binning but the register setting does not reflect
 884                         * this, I am asking vendor why this happens. this is
 885                         * workaround for INTEL BZ 216560.
 886                         */
 887                        if (dev->sensor_id == IMX227_ID) {
 888                                if (dev->curr_res_table[dev->fmt_idx].width ==
 889                                        376 &&
 890                                    dev->curr_res_table[dev->fmt_idx].height ==
 891                                        656) {
 892                                        buf->binning_factor_x = 4;
 893                                        buf->binning_factor_y = 4;
 894                                }
 895                        }
 896                } else {
 897                        buf->binning_factor_x = 1;
 898                        buf->binning_factor_y = 1;
 899                }
 900        }
 901
 902        return 0;
 903}
 904
 905/* This returns the exposure time being used. This should only be used
 906   for filling in EXIF data, not for actual image processing. */
 907static int imx_q_exposure(struct v4l2_subdev *sd, s32 *value)
 908{
 909        struct i2c_client *client = v4l2_get_subdevdata(sd);
 910        struct imx_device *dev = to_imx_sensor(sd);
 911        u16 coarse;
 912        int ret;
 913
 914        /* the fine integration time is currently not calculated */
 915        ret = imx_read_reg(client, IMX_16BIT,
 916                dev->reg_addr->coarse_integration_time, &coarse);
 917        *value = coarse;
 918
 919        return ret;
 920}
 921
 922static int imx_test_pattern(struct v4l2_subdev *sd)
 923{
 924        struct i2c_client *client = v4l2_get_subdevdata(sd);
 925        struct imx_device *dev = to_imx_sensor(sd);
 926        int ret;
 927
 928        if (dev->power == 0)
 929                return 0;
 930
 931        ret = imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_COLOR_R,
 932                (u16)(dev->tp_r->val >> 22));
 933        if (ret)
 934                return ret;
 935
 936        ret = imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_COLOR_GR,
 937                (u16)(dev->tp_gr->val >> 22));
 938        if (ret)
 939                return ret;
 940
 941        ret = imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_COLOR_GB,
 942                (u16)(dev->tp_gb->val >> 22));
 943        if (ret)
 944                return ret;
 945
 946        ret = imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_COLOR_B,
 947                (u16)(dev->tp_b->val >> 22));
 948        if (ret)
 949                return ret;
 950
 951        return imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_MODE,
 952                (u16)(dev->tp_mode->val));
 953}
 954
 955static u32 imx_translate_bayer_order(enum atomisp_bayer_order code)
 956{
 957        switch (code) {
 958        case atomisp_bayer_order_rggb:
 959                return MEDIA_BUS_FMT_SRGGB10_1X10;
 960        case atomisp_bayer_order_grbg:
 961                return MEDIA_BUS_FMT_SGRBG10_1X10;
 962        case atomisp_bayer_order_bggr:
 963                return MEDIA_BUS_FMT_SBGGR10_1X10;
 964        case atomisp_bayer_order_gbrg:
 965                return MEDIA_BUS_FMT_SGBRG10_1X10;
 966        }
 967        return 0;
 968}
 969
 970static int imx_v_flip(struct v4l2_subdev *sd, s32 value)
 971{
 972        struct imx_device *dev = to_imx_sensor(sd);
 973        struct camera_mipi_info *imx_info = NULL;
 974        struct i2c_client *client = v4l2_get_subdevdata(sd);
 975        int ret;
 976        u16 val;
 977
 978        if (dev->power == 0)
 979                return -EIO;
 980
 981        ret = imx_write_reg_array(client, dev->param_hold);
 982        if (ret)
 983                return ret;
 984
 985        ret = imx_read_reg(client, IMX_8BIT,
 986                dev->reg_addr->img_orientation, &val);
 987        if (ret)
 988                return ret;
 989        if (value)
 990                val |= IMX_VFLIP_BIT;
 991        else
 992                val &= ~IMX_VFLIP_BIT;
 993
 994        ret = imx_write_reg(client, IMX_8BIT,
 995                dev->reg_addr->img_orientation, val);
 996        if (ret)
 997                return ret;
 998
 999        imx_info = v4l2_get_subdev_hostdata(sd);
1000        if (imx_info) {
1001                val &= (IMX_VFLIP_BIT|IMX_HFLIP_BIT);
1002                imx_info->raw_bayer_order = imx_bayer_order_mapping[val];
1003                dev->format.code = imx_translate_bayer_order(
1004                        imx_info->raw_bayer_order);
1005        }
1006
1007        return imx_write_reg_array(client, dev->param_update);
1008}
1009
1010static int imx_h_flip(struct v4l2_subdev *sd, s32 value)
1011{
1012        struct imx_device *dev = to_imx_sensor(sd);
1013        struct camera_mipi_info *imx_info = NULL;
1014        struct i2c_client *client = v4l2_get_subdevdata(sd);
1015        int ret;
1016        u16 val;
1017
1018        if (dev->power == 0)
1019                return -EIO;
1020
1021        ret = imx_write_reg_array(client, dev->param_hold);
1022        if (ret)
1023                return ret;
1024        ret = imx_read_reg(client, IMX_8BIT,
1025                dev->reg_addr->img_orientation, &val);
1026        if (ret)
1027                return ret;
1028        if (value)
1029                val |= IMX_HFLIP_BIT;
1030        else
1031                val &= ~IMX_HFLIP_BIT;
1032        ret = imx_write_reg(client, IMX_8BIT,
1033                dev->reg_addr->img_orientation, val);
1034        if (ret)
1035                return ret;
1036
1037        imx_info = v4l2_get_subdev_hostdata(sd);
1038        if (imx_info) {
1039                val &= (IMX_VFLIP_BIT|IMX_HFLIP_BIT);
1040                imx_info->raw_bayer_order = imx_bayer_order_mapping[val];
1041                dev->format.code = imx_translate_bayer_order(
1042                imx_info->raw_bayer_order);
1043        }
1044
1045        return imx_write_reg_array(client, dev->param_update);
1046}
1047
1048static int imx_g_focal(struct v4l2_subdev *sd, s32 *val)
1049{
1050        *val = (IMX_FOCAL_LENGTH_NUM << 16) | IMX_FOCAL_LENGTH_DEM;
1051        return 0;
1052}
1053
1054static int imx_g_fnumber(struct v4l2_subdev *sd, s32 *val)
1055{
1056        /*const f number for imx*/
1057        *val = (IMX_F_NUMBER_DEFAULT_NUM << 16) | IMX_F_NUMBER_DEM;
1058        return 0;
1059}
1060
1061static int imx_g_fnumber_range(struct v4l2_subdev *sd, s32 *val)
1062{
1063        *val = (IMX_F_NUMBER_DEFAULT_NUM << 24) |
1064                (IMX_F_NUMBER_DEM << 16) |
1065                (IMX_F_NUMBER_DEFAULT_NUM << 8) | IMX_F_NUMBER_DEM;
1066        return 0;
1067}
1068
1069static int imx_g_bin_factor_x(struct v4l2_subdev *sd, s32 *val)
1070{
1071        struct imx_device *dev = to_imx_sensor(sd);
1072
1073        *val = dev->curr_res_table[dev->fmt_idx].bin_factor_x;
1074
1075        return 0;
1076}
1077
1078static int imx_g_bin_factor_y(struct v4l2_subdev *sd, s32 *val)
1079{
1080        struct imx_device *dev = to_imx_sensor(sd);
1081
1082        *val = dev->curr_res_table[dev->fmt_idx].bin_factor_y;
1083
1084        return 0;
1085}
1086
1087int imx_vcm_power_up(struct v4l2_subdev *sd)
1088{
1089        struct imx_device *dev = to_imx_sensor(sd);
1090        if (dev->vcm_driver && dev->vcm_driver->power_up)
1091                return dev->vcm_driver->power_up(sd);
1092        return 0;
1093}
1094
1095int imx_vcm_power_down(struct v4l2_subdev *sd)
1096{
1097        struct imx_device *dev = to_imx_sensor(sd);
1098        if (dev->vcm_driver && dev->vcm_driver->power_down)
1099                return dev->vcm_driver->power_down(sd);
1100        return 0;
1101}
1102
1103int imx_vcm_init(struct v4l2_subdev *sd)
1104{
1105        struct imx_device *dev = to_imx_sensor(sd);
1106        if (dev->vcm_driver && dev->vcm_driver->init)
1107                return dev->vcm_driver->init(sd);
1108        return 0;
1109}
1110
1111int imx_t_focus_vcm(struct v4l2_subdev *sd, u16 val)
1112{
1113        struct imx_device *dev = to_imx_sensor(sd);
1114        if (dev->vcm_driver && dev->vcm_driver->t_focus_vcm)
1115                return dev->vcm_driver->t_focus_vcm(sd, val);
1116        return 0;
1117}
1118
1119int imx_t_focus_abs(struct v4l2_subdev *sd, s32 value)
1120{
1121        struct imx_device *dev = to_imx_sensor(sd);
1122        if (dev->vcm_driver && dev->vcm_driver->t_focus_abs)
1123                return dev->vcm_driver->t_focus_abs(sd, value);
1124        return 0;
1125}
1126int imx_t_focus_rel(struct v4l2_subdev *sd, s32 value)
1127{
1128        struct imx_device *dev = to_imx_sensor(sd);
1129        if (dev->vcm_driver && dev->vcm_driver->t_focus_rel)
1130                return dev->vcm_driver->t_focus_rel(sd, value);
1131        return 0;
1132}
1133
1134int imx_q_focus_status(struct v4l2_subdev *sd, s32 *value)
1135{
1136        struct imx_device *dev = to_imx_sensor(sd);
1137        if (dev->vcm_driver && dev->vcm_driver->q_focus_status)
1138                return dev->vcm_driver->q_focus_status(sd, value);
1139        return 0;
1140}
1141
1142int imx_q_focus_abs(struct v4l2_subdev *sd, s32 *value)
1143{
1144        struct imx_device *dev = to_imx_sensor(sd);
1145        if (dev->vcm_driver && dev->vcm_driver->q_focus_abs)
1146                return dev->vcm_driver->q_focus_abs(sd, value);
1147        return 0;
1148}
1149
1150int imx_t_vcm_slew(struct v4l2_subdev *sd, s32 value)
1151{
1152        struct imx_device *dev = to_imx_sensor(sd);
1153        if (dev->vcm_driver && dev->vcm_driver->t_vcm_slew)
1154                return dev->vcm_driver->t_vcm_slew(sd, value);
1155        return 0;
1156}
1157
1158int imx_t_vcm_timing(struct v4l2_subdev *sd, s32 value)
1159{
1160        struct imx_device *dev = to_imx_sensor(sd);
1161        if (dev->vcm_driver && dev->vcm_driver->t_vcm_timing)
1162                return dev->vcm_driver->t_vcm_timing(sd, value);
1163        return 0;
1164}
1165
1166static int imx_s_ctrl(struct v4l2_ctrl *ctrl)
1167{
1168        struct imx_device *dev = container_of(
1169                ctrl->handler, struct imx_device, ctrl_handler);
1170        struct i2c_client *client = v4l2_get_subdevdata(&dev->sd);
1171        int ret = 0;
1172
1173        switch (ctrl->id) {
1174        case V4L2_CID_TEST_PATTERN:
1175                ret = imx_test_pattern(&dev->sd);
1176                break;
1177        case V4L2_CID_VFLIP:
1178                dev_dbg(&client->dev, "%s: CID_VFLIP:%d.\n",
1179                        __func__, ctrl->val);
1180                ret = imx_v_flip(&dev->sd, ctrl->val);
1181                break;
1182        case V4L2_CID_HFLIP:
1183                dev_dbg(&client->dev, "%s: CID_HFLIP:%d.\n",
1184                        __func__, ctrl->val);
1185                ret = imx_h_flip(&dev->sd, ctrl->val);
1186                break;
1187        case V4L2_CID_FOCUS_ABSOLUTE:
1188                ret = imx_t_focus_abs(&dev->sd, ctrl->val);
1189                break;
1190        case V4L2_CID_FOCUS_RELATIVE:
1191                ret = imx_t_focus_rel(&dev->sd, ctrl->val);
1192                break;
1193        case V4L2_CID_VCM_SLEW:
1194                ret = imx_t_vcm_slew(&dev->sd, ctrl->val);
1195                break;
1196        case V4L2_CID_VCM_TIMEING:
1197                ret = imx_t_vcm_timing(&dev->sd, ctrl->val);
1198                break;
1199        }
1200
1201        return ret;
1202}
1203
1204static int imx_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
1205{
1206        struct imx_device *dev = container_of(
1207                ctrl->handler, struct imx_device, ctrl_handler);
1208        int ret = 0;
1209        unsigned int val;
1210
1211        switch (ctrl->id) {
1212        case V4L2_CID_EXPOSURE_ABSOLUTE:
1213                ret = imx_q_exposure(&dev->sd, &ctrl->val);
1214                break;
1215        case V4L2_CID_FOCUS_ABSOLUTE:
1216                ret = imx_q_focus_abs(&dev->sd, &ctrl->val);
1217                break;
1218        case V4L2_CID_FOCUS_STATUS:
1219                ret = imx_q_focus_status(&dev->sd, &ctrl->val);
1220                break;
1221        case V4L2_CID_FOCAL_ABSOLUTE:
1222                ret = imx_g_focal(&dev->sd, &ctrl->val);
1223                break;
1224        case V4L2_CID_FNUMBER_ABSOLUTE:
1225                ret = imx_g_fnumber(&dev->sd, &ctrl->val);
1226                break;
1227        case V4L2_CID_FNUMBER_RANGE:
1228                ret = imx_g_fnumber_range(&dev->sd, &ctrl->val);
1229                break;
1230        case V4L2_CID_BIN_FACTOR_HORZ:
1231                ret = imx_g_bin_factor_x(&dev->sd, &ctrl->val);
1232                break;
1233        case V4L2_CID_BIN_FACTOR_VERT:
1234                ret = imx_g_bin_factor_y(&dev->sd, &ctrl->val);
1235                break;
1236        case V4L2_CID_VBLANK:
1237                ctrl->val = dev->lines_per_frame -
1238                        dev->curr_res_table[dev->fmt_idx].height;
1239                break;
1240        case V4L2_CID_HBLANK:
1241                ctrl->val = dev->pixels_per_line -
1242                        dev->curr_res_table[dev->fmt_idx].width;
1243                break;
1244        case V4L2_CID_PIXEL_RATE:
1245                ctrl->val = dev->vt_pix_clk_freq_mhz;
1246                break;
1247        case V4L2_CID_LINK_FREQ:
1248                val = dev->curr_res_table[dev->fmt_idx].
1249                                        fps_options[dev->fps_index].mipi_freq;
1250                if (val == 0)
1251                        val = dev->curr_res_table[dev->fmt_idx].mipi_freq;
1252                if (val == 0)
1253                        return -EINVAL;
1254                ctrl->val = val * 1000;                 /* To Hz */
1255                break;
1256        default:
1257                return -EINVAL;
1258        }
1259
1260        return ret;
1261}
1262
1263static const struct v4l2_ctrl_ops ctrl_ops = {
1264        .s_ctrl = imx_s_ctrl,
1265        .g_volatile_ctrl = imx_g_volatile_ctrl
1266};
1267
1268static const struct v4l2_ctrl_config imx_controls[] = {
1269        {
1270                .ops = &ctrl_ops,
1271                .id = V4L2_CID_EXPOSURE_ABSOLUTE,
1272                .type = V4L2_CTRL_TYPE_INTEGER,
1273                .name = "exposure",
1274                .min = 0x0,
1275                .max = 0xffff,
1276                .step = 0x01,
1277                .def = 0x00,
1278                .flags = V4L2_CTRL_FLAG_VOLATILE,
1279        },
1280        {
1281                .ops = &ctrl_ops,
1282                .id = V4L2_CID_TEST_PATTERN,
1283                .type = V4L2_CTRL_TYPE_INTEGER,
1284                .name = "Test pattern",
1285                .min = 0,
1286                .max = 0xffff,
1287                .step = 1,
1288                .def = 0,
1289        },
1290        {
1291                .ops = &ctrl_ops,
1292                .id = V4L2_CID_TEST_PATTERN_COLOR_R,
1293                .type = V4L2_CTRL_TYPE_INTEGER,
1294                .name = "Test pattern solid color R",
1295                .min = INT_MIN,
1296                .max = INT_MAX,
1297                .step = 1,
1298                .def = 0,
1299        },
1300        {
1301                .ops = &ctrl_ops,
1302                .id = V4L2_CID_TEST_PATTERN_COLOR_GR,
1303                .type = V4L2_CTRL_TYPE_INTEGER,
1304                .name = "Test pattern solid color GR",
1305                .min = INT_MIN,
1306                .max = INT_MAX,
1307                .step = 1,
1308                .def = 0,
1309        },
1310        {
1311                .ops = &ctrl_ops,
1312                .id = V4L2_CID_TEST_PATTERN_COLOR_GB,
1313                .type = V4L2_CTRL_TYPE_INTEGER,
1314                .name = "Test pattern solid color GB",
1315                .min = INT_MIN,
1316                .max = INT_MAX,
1317                .step = 1,
1318                .def = 0,
1319        },
1320        {
1321                .ops = &ctrl_ops,
1322                .id = V4L2_CID_TEST_PATTERN_COLOR_B,
1323                .type = V4L2_CTRL_TYPE_INTEGER,
1324                .name = "Test pattern solid color B",
1325                .min = INT_MIN,
1326                .max = INT_MAX,
1327                .step = 1,
1328                .def = 0,
1329        },
1330        {
1331                .ops = &ctrl_ops,
1332                .id = V4L2_CID_VFLIP,
1333                .type = V4L2_CTRL_TYPE_BOOLEAN,
1334                .name = "Flip",
1335                .min = 0,
1336                .max = 1,
1337                .step = 1,
1338                .def = 0,
1339        },
1340        {
1341                .ops = &ctrl_ops,
1342                .id = V4L2_CID_HFLIP,
1343                .type = V4L2_CTRL_TYPE_BOOLEAN,
1344                .name = "Mirror",
1345                .min = 0,
1346                .max = 1,
1347                .step = 1,
1348                .def = 0,
1349        },
1350        {
1351                .ops = &ctrl_ops,
1352                .id = V4L2_CID_FOCUS_ABSOLUTE,
1353                .type = V4L2_CTRL_TYPE_INTEGER,
1354                .name = "focus move absolute",
1355                .min = 0,
1356                .max = IMX_MAX_FOCUS_POS,
1357                .step = 1,
1358                .def = 0,
1359                .flags = V4L2_CTRL_FLAG_VOLATILE,
1360        },
1361        {
1362                .ops = &ctrl_ops,
1363                .id = V4L2_CID_FOCUS_RELATIVE,
1364                .type = V4L2_CTRL_TYPE_INTEGER,
1365                .name = "focus move relative",
1366                .min = IMX_MAX_FOCUS_NEG,
1367                .max = IMX_MAX_FOCUS_POS,
1368                .step = 1,
1369                .def = 0,
1370                .flags = 0,
1371        },
1372        {
1373                .ops = &ctrl_ops,
1374                .id = V4L2_CID_FOCUS_STATUS,
1375                .type = V4L2_CTRL_TYPE_INTEGER,
1376                .name = "focus status",
1377                .min = 0,
1378                .max = 100, /* allow enum to grow in the future */
1379                .step = 1,
1380                .def = 0,
1381                .flags = V4L2_CTRL_FLAG_VOLATILE,
1382        },
1383        {
1384                .ops = &ctrl_ops,
1385                .id = V4L2_CID_VCM_SLEW,
1386                .type = V4L2_CTRL_TYPE_INTEGER,
1387                .name = "vcm slew",
1388                .min = 0,
1389                .max = IMX_VCM_SLEW_STEP_MAX,
1390                .step = 1,
1391                .def = 0,
1392                .flags = 0,
1393        },
1394        {
1395                .ops = &ctrl_ops,
1396                .id = V4L2_CID_VCM_TIMEING,
1397                .type = V4L2_CTRL_TYPE_INTEGER,
1398                .name = "vcm step time",
1399                .min = 0,
1400                .max = IMX_VCM_SLEW_TIME_MAX,
1401                .step = 1,
1402                .def = 0,
1403                .flags = 0,
1404        },
1405        {
1406                .ops = &ctrl_ops,
1407                .id = V4L2_CID_FOCAL_ABSOLUTE,
1408                .type = V4L2_CTRL_TYPE_INTEGER,
1409                .name = "focal length",
1410                .min = IMX_FOCAL_LENGTH_DEFAULT,
1411                .max = IMX_FOCAL_LENGTH_DEFAULT,
1412                .step = 0x01,
1413                .def = IMX_FOCAL_LENGTH_DEFAULT,
1414                .flags = V4L2_CTRL_FLAG_VOLATILE,
1415        },
1416        {
1417                .ops = &ctrl_ops,
1418                .id = V4L2_CID_FNUMBER_ABSOLUTE,
1419                .type = V4L2_CTRL_TYPE_INTEGER,
1420                .name = "f-number",
1421                .min = IMX_F_NUMBER_DEFAULT,
1422                .max = IMX_F_NUMBER_DEFAULT,
1423                .step = 0x01,
1424                .def = IMX_F_NUMBER_DEFAULT,
1425                .flags = V4L2_CTRL_FLAG_VOLATILE,
1426        },
1427        {
1428                .ops = &ctrl_ops,
1429                .id = V4L2_CID_FNUMBER_RANGE,
1430                .type = V4L2_CTRL_TYPE_INTEGER,
1431                .name = "f-number range",
1432                .min = IMX_F_NUMBER_RANGE,
1433                .max =  IMX_F_NUMBER_RANGE,
1434                .step = 0x01,
1435                .def = IMX_F_NUMBER_RANGE,
1436                .flags = V4L2_CTRL_FLAG_VOLATILE,
1437        },
1438        {
1439                .ops = &ctrl_ops,
1440                .id = V4L2_CID_BIN_FACTOR_HORZ,
1441                .type = V4L2_CTRL_TYPE_INTEGER,
1442                .name = "horizontal binning factor",
1443                .min = 0,
1444                .max = IMX_BIN_FACTOR_MAX,
1445                .step = 1,
1446                .def = 0,
1447                .flags = V4L2_CTRL_FLAG_VOLATILE,
1448        },
1449        {
1450                .ops = &ctrl_ops,
1451                .id = V4L2_CID_BIN_FACTOR_VERT,
1452                .type = V4L2_CTRL_TYPE_INTEGER,
1453                .name = "vertical binning factor",
1454                .min = 0,
1455                .max = IMX_BIN_FACTOR_MAX,
1456                .step = 1,
1457                .def = 0,
1458                .flags = V4L2_CTRL_FLAG_VOLATILE,
1459        },
1460        {
1461                .ops = &ctrl_ops,
1462                .id = V4L2_CID_LINK_FREQ,
1463                .name = "Link Frequency",
1464                .type = V4L2_CTRL_TYPE_INTEGER,
1465                .min = 1,
1466                .max = 1500000 * 1000,
1467                .step = 1,
1468                .def = 1,
1469                .flags = V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY,
1470        },
1471        {
1472                .ops = &ctrl_ops,
1473                .id = V4L2_CID_PIXEL_RATE,
1474                .name = "Pixel Rate",
1475                .type = V4L2_CTRL_TYPE_INTEGER,
1476                .min = 0,
1477                .max = INT_MAX,
1478                .step = 1,
1479                .def = 0,
1480                .flags = V4L2_CTRL_FLAG_VOLATILE,
1481        },
1482        {
1483                .ops = &ctrl_ops,
1484                .id = V4L2_CID_HBLANK,
1485                .name = "Horizontal Blanking",
1486                .type = V4L2_CTRL_TYPE_INTEGER,
1487                .min = 0,
1488                .max = SHRT_MAX,
1489                .step = 1,
1490                .def = 0,
1491                .flags = V4L2_CTRL_FLAG_VOLATILE,
1492        },
1493        {
1494                .ops = &ctrl_ops,
1495                .id = V4L2_CID_VBLANK,
1496                .name = "Vertical Blanking",
1497                .type = V4L2_CTRL_TYPE_INTEGER,
1498                .min = 0,
1499                .max = SHRT_MAX,
1500                .step = 1,
1501                .def = 0,
1502                .flags = V4L2_CTRL_FLAG_VOLATILE,
1503        },
1504        {
1505                .ops = &ctrl_ops,
1506                .id = V4L2_CID_HFLIP,
1507                .name = "Horizontal Flip",
1508                .type = V4L2_CTRL_TYPE_INTEGER,
1509                .min = 0,
1510                .max = 1,
1511                .step = 1,
1512                .def = 0,
1513                .flags = 0,
1514        },
1515        {
1516                .ops = &ctrl_ops,
1517                .id = V4L2_CID_VFLIP,
1518                .name = "Vertical Flip",
1519                .type = V4L2_CTRL_TYPE_INTEGER,
1520                .min = 0,
1521                .max = 1,
1522                .step = 1,
1523                .def = 0,
1524                .flags = 0,
1525        },
1526};
1527
1528/*
1529 * distance - calculate the distance
1530 * @res: resolution
1531 * @w: width
1532 * @h: height
1533 *
1534 * Get the gap between resolution and w/h.
1535 * res->width/height smaller than w/h wouldn't be considered.
1536 * Returns the value of gap or -1 if fail.
1537 */
1538#define LARGEST_ALLOWED_RATIO_MISMATCH 600
1539static int distance(struct imx_resolution const *res, u32 w, u32 h,
1540                bool keep_ratio)
1541{
1542        unsigned int w_ratio;
1543        unsigned int h_ratio;
1544        int match;
1545        unsigned int allowed_ratio_mismatch = LARGEST_ALLOWED_RATIO_MISMATCH;
1546
1547        if (!keep_ratio)
1548                allowed_ratio_mismatch = ~0;
1549
1550        if (w == 0)
1551                return -1;
1552        w_ratio = (res->width << 13) / w;
1553        if (h == 0)
1554                return -1;
1555        h_ratio = (res->height << 13) / h;
1556        if (h_ratio == 0)
1557                return -1;
1558        match   = abs(((w_ratio << 13) / h_ratio) - ((int)8192));
1559
1560        if ((w_ratio < (int)8192) || (h_ratio < (int)8192)  ||
1561                (match > allowed_ratio_mismatch))
1562                return -1;
1563
1564        return w_ratio + h_ratio;
1565}
1566
1567/* Return the nearest higher resolution index */
1568static int nearest_resolution_index(struct v4l2_subdev *sd, int w, int h)
1569{
1570        int i;
1571        int idx = -1;
1572        int dist;
1573        int fps_diff;
1574        int min_fps_diff = INT_MAX;
1575        int min_dist = INT_MAX;
1576        const struct imx_resolution *tmp_res = NULL;
1577        struct imx_device *dev = to_imx_sensor(sd);
1578        bool again = 1;
1579retry:
1580        for (i = 0; i < dev->entries_curr_table; i++) {
1581                tmp_res = &dev->curr_res_table[i];
1582                dist = distance(tmp_res, w, h, again);
1583                if (dist == -1)
1584                        continue;
1585                if (dist < min_dist) {
1586                        min_dist = dist;
1587                        idx = i;
1588                }
1589                if (dist == min_dist) {
1590                        fps_diff = __imx_min_fps_diff(dev->targetfps,
1591                                                tmp_res->fps_options);
1592                        if (fps_diff < min_fps_diff) {
1593                                min_fps_diff = fps_diff;
1594                                idx = i;
1595                        }
1596                }
1597        }
1598
1599        /*
1600         * FIXME!
1601         * only IMX135 for Saltbay and IMX227 use this algorithm
1602         */
1603        if (idx == -1 && again == true && dev->new_res_sel_method) {
1604                again = false;
1605                goto retry;
1606        }
1607        return idx;
1608}
1609
1610/* Call with ctrl_handler.lock hold */
1611static int __adjust_hvblank(struct v4l2_subdev *sd)
1612{
1613        struct i2c_client *client = v4l2_get_subdevdata(sd);
1614        struct imx_device *dev = to_imx_sensor(sd);
1615        u16 new_frame_length_lines, new_line_length_pck;
1616        int ret;
1617
1618        /*
1619         * No need to adjust h/v blank if not set dbg value
1620         * Note that there is no other checking on the h/v blank value,
1621         * as h/v blank can be set to any value above zero for debug purpose
1622         */
1623        if (!dev->v_blank->val || !dev->h_blank->val)
1624                return 0;
1625
1626        new_frame_length_lines = dev->curr_res_table[dev->fmt_idx].height +
1627                dev->v_blank->val;
1628        new_line_length_pck = dev->curr_res_table[dev->fmt_idx].width +
1629                dev->h_blank->val;
1630
1631        ret = imx_write_reg(client, IMX_16BIT,
1632                dev->reg_addr->line_length_pixels, new_line_length_pck);
1633        if (ret)
1634                return ret;
1635        ret = imx_write_reg(client, IMX_16BIT,
1636                dev->reg_addr->frame_length_lines, new_frame_length_lines);
1637        if (ret)
1638                return ret;
1639
1640        dev->lines_per_frame = new_frame_length_lines;
1641        dev->pixels_per_line = new_line_length_pck;
1642
1643        return 0;
1644}
1645
1646static int imx_set_fmt(struct v4l2_subdev *sd,
1647                       struct v4l2_subdev_pad_config *cfg,
1648                       struct v4l2_subdev_format *format)
1649{
1650        struct v4l2_mbus_framefmt *fmt = &format->format;
1651        struct imx_device *dev = to_imx_sensor(sd);
1652        struct camera_mipi_info *imx_info = NULL;
1653        struct i2c_client *client = v4l2_get_subdevdata(sd);
1654        const struct imx_resolution *res;
1655        int lanes = imx_get_lanes(sd);
1656        int ret;
1657        u16 data, val;
1658         int idx;
1659        if (format->pad)
1660                return -EINVAL;
1661        if (!fmt)
1662                return -EINVAL;
1663
1664        imx_info = v4l2_get_subdev_hostdata(sd);
1665        if (imx_info == NULL)
1666                return -EINVAL;
1667        if ((fmt->width > imx_max_res[dev->sensor_id].res_max_width)
1668                || (fmt->height > imx_max_res[dev->sensor_id].res_max_height)) {
1669                fmt->width =  imx_max_res[dev->sensor_id].res_max_width;
1670                fmt->height = imx_max_res[dev->sensor_id].res_max_height;
1671        } else {
1672                idx = nearest_resolution_index(sd, fmt->width, fmt->height);
1673
1674                /*
1675                 * nearest_resolution_index() doesn't return smaller
1676                 *  resolutions. If it fails, it means the requested
1677                 *  resolution is higher than wecan support. Fallback
1678                 *  to highest possible resolution in this case.
1679                 */
1680                if (idx == -1)
1681                        idx = dev->entries_curr_table - 1;
1682
1683                fmt->width = dev->curr_res_table[idx].width;
1684                fmt->height = dev->curr_res_table[idx].height;
1685        }
1686
1687        fmt->code = dev->format.code;
1688    if(format->which == V4L2_SUBDEV_FORMAT_TRY) {
1689                cfg->try_fmt = *fmt;
1690                return 0;
1691        }
1692        mutex_lock(&dev->input_lock);
1693
1694        dev->fmt_idx = nearest_resolution_index(sd, fmt->width, fmt->height);
1695        if (dev->fmt_idx == -1) {
1696                ret = -EINVAL;
1697                goto out;
1698        }
1699        res = &dev->curr_res_table[dev->fmt_idx];
1700
1701        /* Adjust the FPS selection based on the resolution selected */
1702        dev->fps_index = __imx_nearest_fps_index(dev->targetfps,
1703                                                res->fps_options);
1704        dev->fps = res->fps_options[dev->fps_index].fps;
1705        dev->regs = res->fps_options[dev->fps_index].regs;
1706        if (!dev->regs)
1707                dev->regs = res->regs;
1708
1709        ret = imx_write_reg_array(client, dev->regs);
1710        if (ret)
1711                goto out;
1712
1713        if (dev->sensor_id == IMX132_ID && lanes > 0) {
1714                static const u8 imx132_rgpltd[] = {
1715                        2,              /* 1 lane:  /1 */
1716                        0,              /* 2 lanes: /2 */
1717                        0,              /* undefined   */
1718                        1,              /* 4 lanes: /4 */
1719                };
1720                ret = imx_write_reg(client, IMX_8BIT, IMX132_208_VT_RGPLTD,
1721                                    imx132_rgpltd[lanes - 1]);
1722                if (ret)
1723                        goto out;
1724        }
1725
1726        dev->pixels_per_line = res->fps_options[dev->fps_index].pixels_per_line;
1727        dev->lines_per_frame = res->fps_options[dev->fps_index].lines_per_frame;
1728
1729        /* dbg h/v blank time */
1730        __adjust_hvblank(sd);
1731
1732        ret = __imx_update_exposure_timing(client, dev->coarse_itg,
1733                dev->pixels_per_line, dev->lines_per_frame);
1734        if (ret)
1735                goto out;
1736
1737        ret = __imx_update_gain(sd, dev->gain);
1738        if (ret)
1739                goto out;
1740
1741        ret = __imx_update_digital_gain(client, dev->digital_gain);
1742        if (ret)
1743                goto out;
1744
1745        ret = imx_write_reg_array(client, dev->param_update);
1746        if (ret)
1747                goto out;
1748
1749        ret = imx_get_intg_factor(client, imx_info, dev->regs);
1750        if (ret)
1751                goto out;
1752
1753        ret = imx_read_reg(client, IMX_8BIT,
1754                dev->reg_addr->img_orientation, &val);
1755        if (ret)
1756                goto out;
1757        val &= (IMX_VFLIP_BIT|IMX_HFLIP_BIT);
1758        imx_info->raw_bayer_order = imx_bayer_order_mapping[val];
1759        dev->format.code = imx_translate_bayer_order(
1760                imx_info->raw_bayer_order);
1761
1762        /*
1763         * Fill meta data info. add imx135 metadata setting for RAW10 format
1764         */
1765        switch (dev->sensor_id) {
1766        case IMX135_ID:
1767                ret = imx_read_reg(client, 2,
1768                                IMX135_OUTPUT_DATA_FORMAT_REG, &data);
1769                if (ret)
1770                        goto out;
1771                /*
1772                 * The IMX135 can support various resolutions like
1773                 * RAW6/8/10/12/14.
1774                 * 1.The data format is RAW10:
1775                 *   matadata width = current resolution width(pixel) * 10 / 8
1776                 * 2.The data format is RAW6 or RAW8:
1777                 *   matadata width = current resolution width(pixel);
1778                 * 3.other data format(RAW12/14 etc):
1779                 *   TBD.
1780                 */
1781                if (data == IMX135_OUTPUT_FORMAT_RAW10)
1782                        /* the data format is RAW10. */
1783                        imx_info->metadata_width = res->width * 10 / 8;
1784                else
1785                        /* The data format is RAW6/8/12/14/ etc. */
1786                        imx_info->metadata_width = res->width;
1787
1788                imx_info->metadata_height = IMX135_EMBEDDED_DATA_LINE_NUM;
1789
1790                if (imx_info->metadata_effective_width == NULL)
1791                        imx_info->metadata_effective_width =
1792                                imx135_embedded_effective_size;
1793
1794                break;
1795        case IMX227_ID:
1796                ret = imx_read_reg(client, 2, IMX227_OUTPUT_DATA_FORMAT_REG,
1797                        &data);
1798                if (ret)
1799                        goto out;
1800                if (data == IMX227_OUTPUT_FORMAT_RAW10)
1801                        /* the data format is RAW10. */
1802                        imx_info->metadata_width = res->width * 10 / 8;
1803                else
1804                        /* The data format is RAW6/8/12/14/ etc. */
1805                        imx_info->metadata_width = res->width;
1806
1807                imx_info->metadata_height = IMX227_EMBEDDED_DATA_LINE_NUM;
1808
1809                if (imx_info->metadata_effective_width == NULL)
1810                        imx_info->metadata_effective_width =
1811                                imx227_embedded_effective_size;
1812
1813                break;
1814        default:
1815                imx_info->metadata_width = 0;
1816                imx_info->metadata_height = 0;
1817                imx_info->metadata_effective_width = NULL;
1818                break;
1819        }
1820
1821out:
1822        mutex_unlock(&dev->input_lock);
1823        return ret;
1824}
1825
1826
1827static int imx_get_fmt(struct v4l2_subdev *sd,
1828                       struct v4l2_subdev_pad_config *cfg,
1829                       struct v4l2_subdev_format *format)
1830{
1831        struct v4l2_mbus_framefmt *fmt = &format->format;
1832        struct imx_device *dev = to_imx_sensor(sd);
1833
1834        if (format->pad)
1835                return -EINVAL;
1836        if (!fmt)
1837                return -EINVAL;
1838
1839        mutex_lock(&dev->input_lock);
1840        fmt->width = dev->curr_res_table[dev->fmt_idx].width;
1841        fmt->height = dev->curr_res_table[dev->fmt_idx].height;
1842        fmt->code = dev->format.code;
1843        mutex_unlock(&dev->input_lock);
1844        return 0;
1845}
1846
1847static int imx_detect(struct i2c_client *client, u16 *id, u8 *revision)
1848{
1849        struct i2c_adapter *adapter = client->adapter;
1850
1851        /* i2c check */
1852        if (!i2c_check_functionality(adapter, I2C_FUNC_I2C))
1853                return -ENODEV;
1854
1855        /* check sensor chip ID  */
1856        if (imx_read_reg(client, IMX_16BIT, IMX132_175_208_219_CHIP_ID, id)) {
1857                v4l2_err(client, "sensor_id = 0x%x\n", *id);
1858                return -ENODEV;
1859        }
1860
1861        if (*id == IMX132_ID || *id == IMX175_ID ||
1862                *id == IMX208_ID || *id == IMX219_ID)
1863                goto found;
1864
1865        if (imx_read_reg(client, IMX_16BIT, IMX134_135_227_CHIP_ID, id)) {
1866                v4l2_err(client, "sensor_id = 0x%x\n", *id);
1867                return -ENODEV;
1868        }
1869        if (*id != IMX134_ID && *id != IMX135_ID && *id != IMX227_ID) {
1870                v4l2_err(client, "no imx sensor found\n");
1871                return -ENODEV;
1872        }
1873found:
1874        v4l2_info(client, "sensor_id = 0x%x\n", *id);
1875
1876        /* TODO - need to be updated */
1877        *revision = 0;
1878
1879        return 0;
1880}
1881
1882static void __imx_print_timing(struct v4l2_subdev *sd)
1883{
1884        struct imx_device *dev = to_imx_sensor(sd);
1885        struct i2c_client *client = v4l2_get_subdevdata(sd);
1886        u16 width = dev->curr_res_table[dev->fmt_idx].width;
1887        u16 height = dev->curr_res_table[dev->fmt_idx].height;
1888
1889        dev_dbg(&client->dev, "Dump imx timing in stream on:\n");
1890        dev_dbg(&client->dev, "width: %d:\n", width);
1891        dev_dbg(&client->dev, "height: %d:\n", height);
1892        dev_dbg(&client->dev, "pixels_per_line: %d:\n", dev->pixels_per_line);
1893        dev_dbg(&client->dev, "line per frame: %d:\n", dev->lines_per_frame);
1894        dev_dbg(&client->dev, "pix freq: %d:\n", dev->vt_pix_clk_freq_mhz);
1895        dev_dbg(&client->dev, "init fps: %d:\n", dev->vt_pix_clk_freq_mhz /
1896                        dev->pixels_per_line / dev->lines_per_frame);
1897        dev_dbg(&client->dev, "HBlank: %d nS:\n",
1898                        1000 * (dev->pixels_per_line - width) /
1899                        (dev->vt_pix_clk_freq_mhz / 1000000));
1900        dev_dbg(&client->dev, "VBlank: %d uS:\n",
1901                        (dev->lines_per_frame - height) * dev->pixels_per_line /
1902                        (dev->vt_pix_clk_freq_mhz / 1000000));
1903}
1904
1905/*
1906 * imx stream on/off
1907 */
1908static int imx_s_stream(struct v4l2_subdev *sd, int enable)
1909{
1910        int ret;
1911        struct i2c_client *client = v4l2_get_subdevdata(sd);
1912        struct imx_device *dev = to_imx_sensor(sd);
1913
1914        mutex_lock(&dev->input_lock);
1915        if (enable) {
1916                /* Noise reduction & dead pixel applied before streaming */
1917                if (dev->fw == NULL) {
1918                        dev_warn(&client->dev, "No MSR loaded from library");
1919                } else {
1920                        ret = apply_msr_data(client, dev->fw);
1921                        if (ret) {
1922                                mutex_unlock(&dev->input_lock);
1923                                return ret;
1924                        }
1925                }
1926                ret = imx_test_pattern(sd);
1927                if (ret) {
1928                        v4l2_err(client, "Configure test pattern failed.\n");
1929                        mutex_unlock(&dev->input_lock);
1930                        return ret;
1931                }
1932                __imx_print_timing(sd);
1933                ret = imx_write_reg_array(client, imx_streaming);
1934                if (ret != 0) {
1935                        v4l2_err(client, "write_reg_array err\n");
1936                        mutex_unlock(&dev->input_lock);
1937                        return ret;
1938                }
1939                dev->streaming = 1;
1940                if (dev->vcm_driver && dev->vcm_driver->t_focus_abs_init)
1941                        dev->vcm_driver->t_focus_abs_init(sd);
1942        } else {
1943                ret = imx_write_reg_array(client, imx_soft_standby);
1944                if (ret != 0) {
1945                        v4l2_err(client, "write_reg_array err\n");
1946                        mutex_unlock(&dev->input_lock);
1947                        return ret;
1948                }
1949                dev->streaming = 0;
1950                dev->targetfps = 0;
1951        }
1952        mutex_unlock(&dev->input_lock);
1953
1954        return 0;
1955}
1956
1957static int __update_imx_device_settings(struct imx_device *dev, u16 sensor_id)
1958{
1959        /* IMX on other platform is not supported yet */
1960        return -EINVAL;
1961}
1962
1963static int imx_s_config(struct v4l2_subdev *sd,
1964                            int irq, void *pdata)
1965{
1966        struct imx_device *dev = to_imx_sensor(sd);
1967        struct i2c_client *client = v4l2_get_subdevdata(sd);
1968        u8 sensor_revision;
1969        u16 sensor_id;
1970        int ret;
1971        if (pdata == NULL)
1972                return -ENODEV;
1973
1974        dev->platform_data = pdata;
1975
1976        mutex_lock(&dev->input_lock);
1977
1978        if (dev->platform_data->platform_init) {
1979                ret = dev->platform_data->platform_init(client);
1980                if (ret) {
1981                        mutex_unlock(&dev->input_lock);
1982                        dev_err(&client->dev, "imx platform init err\n");
1983                        return ret;
1984                }
1985        }
1986        /*
1987         * power off the module first.
1988         *
1989         * As first power on by board have undecided state of power/gpio pins.
1990         */
1991        ret = __imx_s_power(sd, 0);
1992        if (ret) {
1993                v4l2_err(client, "imx power-down err.\n");
1994                mutex_unlock(&dev->input_lock);
1995                return ret;
1996        }
1997
1998        ret = __imx_s_power(sd, 1);
1999        if (ret) {
2000                v4l2_err(client, "imx power-up err.\n");
2001                mutex_unlock(&dev->input_lock);
2002                return ret;
2003        }
2004
2005        ret = dev->platform_data->csi_cfg(sd, 1);
2006        if (ret)
2007                goto fail_csi_cfg;
2008
2009        /* config & detect sensor */
2010        ret = imx_detect(client, &sensor_id, &sensor_revision);
2011        if (ret) {
2012                v4l2_err(client, "imx_detect err s_config.\n");
2013                goto fail_detect;
2014        }
2015
2016        dev->sensor_id = sensor_id;
2017        dev->sensor_revision = sensor_revision;
2018
2019        /* Resolution settings depend on sensor type and platform */
2020        ret = __update_imx_device_settings(dev, dev->sensor_id);
2021        if (ret)
2022                goto fail_detect;
2023        /* Read sensor's OTP data */
2024        dev->otp_data = dev->otp_driver->otp_read(sd,
2025                dev->otp_driver->dev_addr, dev->otp_driver->start_addr,
2026                dev->otp_driver->size);
2027
2028        /* power off sensor */
2029        ret = __imx_s_power(sd, 0);
2030
2031        mutex_unlock(&dev->input_lock);
2032        if (ret)
2033                v4l2_err(client, "imx power-down err.\n");
2034
2035        return ret;
2036
2037fail_detect:
2038        dev->platform_data->csi_cfg(sd, 0);
2039fail_csi_cfg:
2040        __imx_s_power(sd, 0);
2041        if (dev->platform_data->platform_deinit)
2042                dev->platform_data->platform_deinit();
2043        mutex_unlock(&dev->input_lock);
2044        dev_err(&client->dev, "sensor power-gating failed\n");
2045        return ret;
2046}
2047
2048static int
2049imx_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
2050                   struct v4l2_subdev_mbus_code_enum *code)
2051{
2052        struct imx_device *dev = to_imx_sensor(sd);
2053        if (code->index >= MAX_FMTS)
2054                return -EINVAL;
2055
2056        mutex_lock(&dev->input_lock);
2057        code->code = dev->format.code;
2058        mutex_unlock(&dev->input_lock);
2059        return 0;
2060}
2061
2062static int
2063imx_enum_frame_size(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
2064                    struct v4l2_subdev_frame_size_enum *fse)
2065{
2066        int index = fse->index;
2067        struct imx_device *dev = to_imx_sensor(sd);
2068
2069        mutex_lock(&dev->input_lock);
2070        if (index >= dev->entries_curr_table) {
2071                mutex_unlock(&dev->input_lock);
2072                return -EINVAL;
2073        }
2074
2075        fse->min_width = dev->curr_res_table[index].width;
2076        fse->min_height = dev->curr_res_table[index].height;
2077        fse->max_width = dev->curr_res_table[index].width;
2078        fse->max_height = dev->curr_res_table[index].height;
2079        mutex_unlock(&dev->input_lock);
2080        return 0;
2081}
2082
2083static int
2084imx_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *param)
2085{
2086        struct imx_device *dev = to_imx_sensor(sd);
2087
2088        mutex_lock(&dev->input_lock);
2089        dev->run_mode = param->parm.capture.capturemode;
2090
2091        switch (dev->run_mode) {
2092        case CI_MODE_VIDEO:
2093                dev->curr_res_table = dev->mode_tables->res_video;
2094                dev->entries_curr_table = dev->mode_tables->n_res_video;
2095                break;
2096        case CI_MODE_STILL_CAPTURE:
2097                dev->curr_res_table = dev->mode_tables->res_still;
2098                dev->entries_curr_table = dev->mode_tables->n_res_still;
2099                break;
2100        default:
2101                dev->curr_res_table = dev->mode_tables->res_preview;
2102                dev->entries_curr_table = dev->mode_tables->n_res_preview;
2103        }
2104        mutex_unlock(&dev->input_lock);
2105        return 0;
2106}
2107
2108int
2109imx_g_frame_interval(struct v4l2_subdev *sd,
2110                                struct v4l2_subdev_frame_interval *interval)
2111{
2112        struct imx_device *dev = to_imx_sensor(sd);
2113
2114        mutex_lock(&dev->input_lock);
2115        interval->interval.denominator = dev->fps;
2116        interval->interval.numerator = 1;
2117        mutex_unlock(&dev->input_lock);
2118        return 0;
2119}
2120
2121static int __imx_s_frame_interval(struct v4l2_subdev *sd,
2122                        struct v4l2_subdev_frame_interval *interval)
2123{
2124        struct imx_device *dev = to_imx_sensor(sd);
2125        struct i2c_client *client = v4l2_get_subdevdata(sd);
2126        const struct imx_resolution *res =
2127                                &dev->curr_res_table[dev->fmt_idx];
2128        struct camera_mipi_info *imx_info = NULL;
2129        unsigned short pixels_per_line;
2130        unsigned short lines_per_frame;
2131        unsigned int fps_index;
2132        int fps;
2133        int ret = 0;
2134
2135
2136        imx_info = v4l2_get_subdev_hostdata(sd);
2137        if (imx_info == NULL)
2138                return -EINVAL;
2139
2140        if (!interval->interval.numerator)
2141                interval->interval.numerator = 1;
2142
2143        fps = interval->interval.denominator / interval->interval.numerator;
2144
2145        if (!fps)
2146                return -EINVAL;
2147
2148        dev->targetfps = fps;
2149        /* No need to proceed further if we are not streaming */
2150        if (!dev->streaming)
2151                return 0;
2152
2153         /* Ignore if we are already using the required FPS. */
2154        if (fps == dev->fps)
2155                return 0;
2156
2157        /*
2158         * Start here, sensor is already streaming, so adjust fps dynamically
2159         */
2160        fps_index = __imx_above_nearest_fps_index(fps, res->fps_options);
2161        if (fps > res->fps_options[fps_index].fps) {
2162                /*
2163                 * if does not have high fps setting, not support increase fps
2164                 * by adjust lines per frame.
2165                 */
2166                dev_err(&client->dev, "Could not support fps: %d.\n", fps);
2167                return -EINVAL;
2168        }
2169
2170        if (res->fps_options[fps_index].regs &&
2171            res->fps_options[fps_index].regs != dev->regs) {
2172                /*
2173                 * if need a new setting, but the new setting has difference
2174                 * with current setting, not use this one, as may have
2175                 * unexpected result, e.g. PLL, IQ.
2176                 */
2177                dev_dbg(&client->dev,
2178                        "Sensor is streaming, not apply new sensor setting\n");
2179                if (fps > res->fps_options[dev->fps_index].fps) {
2180                        /*
2181                         * Does not support increase fps based on low fps
2182                         * setting, as the high fps setting could not be used,
2183                         * and fps requested is above current setting fps.
2184                         */
2185                        dev_warn(&client->dev,
2186                        "Could not support fps: %d, keep current: %d.\n",
2187                        fps, dev->fps);
2188                        return 0;
2189                }
2190        } else {
2191                dev->fps_index = fps_index;
2192                dev->fps = res->fps_options[dev->fps_index].fps;
2193        }
2194
2195        /* Update the new frametimings based on FPS */
2196        pixels_per_line = res->fps_options[dev->fps_index].pixels_per_line;
2197        lines_per_frame = res->fps_options[dev->fps_index].lines_per_frame;
2198
2199        if (fps > res->fps_options[fps_index].fps) {
2200                /*
2201                 * if does not have high fps setting, not support increase fps
2202                 * by adjust lines per frame.
2203                 */
2204                dev_warn(&client->dev, "Could not support fps: %d. Use:%d.\n",
2205                                fps, res->fps_options[fps_index].fps);
2206                goto done;
2207        }
2208
2209        /* if the new setting does not match exactly */
2210        if (dev->fps != fps) {
2211#define MAX_LINES_PER_FRAME     0xffff
2212                dev_dbg(&client->dev, "adjusting fps using lines_per_frame\n");
2213                /*
2214                 * FIXME!
2215                 * 1: check DS on max value of lines_per_frame
2216                 * 2: consider use pixel per line for more range?
2217                 */
2218                if (dev->lines_per_frame * dev->fps / fps >
2219                        MAX_LINES_PER_FRAME) {
2220                        dev_warn(&client->dev,
2221                "adjust lines_per_frame out of range, try to use max value.\n");
2222                        lines_per_frame = MAX_LINES_PER_FRAME;
2223                } else {
2224                        lines_per_frame = lines_per_frame * dev->fps / fps;
2225                }
2226        }
2227done:
2228        /* Update the new frametimings based on FPS */
2229        dev->pixels_per_line = pixels_per_line;
2230        dev->lines_per_frame = lines_per_frame;
2231
2232        /* Update the new values so that user side knows the current settings */
2233        ret = __imx_update_exposure_timing(client,
2234                dev->coarse_itg, dev->pixels_per_line, dev->lines_per_frame);
2235        if (ret)
2236                return ret;
2237
2238        dev->fps = fps;
2239
2240        ret = imx_get_intg_factor(client, imx_info, dev->regs);
2241        if (ret)
2242                return ret;
2243
2244        interval->interval.denominator = res->fps_options[dev->fps_index].fps;
2245        interval->interval.numerator = 1;
2246        __imx_print_timing(sd);
2247
2248        return ret;
2249}
2250
2251static int imx_s_frame_interval(struct v4l2_subdev *sd,
2252                        struct v4l2_subdev_frame_interval *interval)
2253{
2254        struct imx_device *dev = to_imx_sensor(sd);
2255        int ret;
2256
2257        mutex_lock(&dev->input_lock);
2258        ret = __imx_s_frame_interval(sd, interval);
2259        mutex_unlock(&dev->input_lock);
2260
2261        return ret;
2262}
2263static int imx_g_skip_frames(struct v4l2_subdev *sd, u32 *frames)
2264{
2265        struct imx_device *dev = to_imx_sensor(sd);
2266
2267        mutex_lock(&dev->input_lock);
2268        *frames = dev->curr_res_table[dev->fmt_idx].skip_frames;
2269        mutex_unlock(&dev->input_lock);
2270
2271        return 0;
2272}
2273
2274static const struct v4l2_subdev_sensor_ops imx_sensor_ops = {
2275        .g_skip_frames  = imx_g_skip_frames,
2276};
2277
2278static const struct v4l2_subdev_video_ops imx_video_ops = {
2279        .s_stream = imx_s_stream,
2280        .s_parm = imx_s_parm,
2281        .g_frame_interval = imx_g_frame_interval,
2282        .s_frame_interval = imx_s_frame_interval,
2283};
2284
2285static const struct v4l2_subdev_core_ops imx_core_ops = {
2286        .s_power = imx_s_power,
2287        .ioctl = imx_ioctl,
2288        .init = imx_init,
2289};
2290
2291static const struct v4l2_subdev_pad_ops imx_pad_ops = {
2292        .enum_mbus_code = imx_enum_mbus_code,
2293        .enum_frame_size = imx_enum_frame_size,
2294        .get_fmt = imx_get_fmt,
2295        .set_fmt = imx_set_fmt,
2296};
2297
2298static const struct v4l2_subdev_ops imx_ops = {
2299        .core = &imx_core_ops,
2300        .video = &imx_video_ops,
2301        .pad = &imx_pad_ops,
2302        .sensor = &imx_sensor_ops,
2303};
2304
2305static const struct media_entity_operations imx_entity_ops = {
2306        .link_setup = NULL,
2307};
2308
2309static int imx_remove(struct i2c_client *client)
2310{
2311        struct v4l2_subdev *sd = i2c_get_clientdata(client);
2312        struct imx_device *dev = to_imx_sensor(sd);
2313
2314        if (dev->platform_data->platform_deinit)
2315                dev->platform_data->platform_deinit();
2316
2317        media_entity_cleanup(&dev->sd.entity);
2318        v4l2_ctrl_handler_free(&dev->ctrl_handler);
2319        dev->platform_data->csi_cfg(sd, 0);
2320        v4l2_device_unregister_subdev(sd);
2321        release_msr_list(client, dev->fw);
2322        kfree(dev);
2323
2324        return 0;
2325}
2326
2327static int __imx_init_ctrl_handler(struct imx_device *dev)
2328{
2329        struct v4l2_ctrl_handler *hdl;
2330        int i;
2331
2332        hdl = &dev->ctrl_handler;
2333
2334        v4l2_ctrl_handler_init(&dev->ctrl_handler, ARRAY_SIZE(imx_controls));
2335
2336        for (i = 0; i < ARRAY_SIZE(imx_controls); i++)
2337                v4l2_ctrl_new_custom(&dev->ctrl_handler,
2338                                &imx_controls[i], NULL);
2339
2340        dev->pixel_rate = v4l2_ctrl_find(&dev->ctrl_handler,
2341                                V4L2_CID_PIXEL_RATE);
2342        dev->h_blank = v4l2_ctrl_find(&dev->ctrl_handler,
2343                                V4L2_CID_HBLANK);
2344        dev->v_blank = v4l2_ctrl_find(&dev->ctrl_handler,
2345                                V4L2_CID_VBLANK);
2346        dev->link_freq = v4l2_ctrl_find(&dev->ctrl_handler,
2347                                V4L2_CID_LINK_FREQ);
2348        dev->h_flip = v4l2_ctrl_find(&dev->ctrl_handler,
2349                                V4L2_CID_HFLIP);
2350        dev->v_flip = v4l2_ctrl_find(&dev->ctrl_handler,
2351                                V4L2_CID_VFLIP);
2352        dev->tp_mode = v4l2_ctrl_find(&dev->ctrl_handler,
2353                                V4L2_CID_TEST_PATTERN);
2354        dev->tp_r = v4l2_ctrl_find(&dev->ctrl_handler,
2355                                V4L2_CID_TEST_PATTERN_COLOR_R);
2356        dev->tp_gr = v4l2_ctrl_find(&dev->ctrl_handler,
2357                                V4L2_CID_TEST_PATTERN_COLOR_GR);
2358        dev->tp_gb = v4l2_ctrl_find(&dev->ctrl_handler,
2359                                V4L2_CID_TEST_PATTERN_COLOR_GB);
2360        dev->tp_b = v4l2_ctrl_find(&dev->ctrl_handler,
2361                                V4L2_CID_TEST_PATTERN_COLOR_B);
2362
2363        if (dev->ctrl_handler.error || dev->pixel_rate == NULL
2364                || dev->h_blank == NULL || dev->v_blank == NULL
2365                || dev->h_flip == NULL || dev->v_flip == NULL
2366                || dev->link_freq == NULL) {
2367                return dev->ctrl_handler.error;
2368        }
2369
2370        dev->ctrl_handler.lock = &dev->input_lock;
2371        dev->sd.ctrl_handler = hdl;
2372        v4l2_ctrl_handler_setup(&dev->ctrl_handler);
2373
2374        return 0;
2375}
2376
2377static void imx_update_reg_info(struct imx_device *dev)
2378{
2379        if (dev->sensor_id == IMX219_ID) {
2380                dev->reg_addr = &imx219_addr;
2381                dev->param_hold = imx219_param_hold;
2382                dev->param_update = imx219_param_update;
2383        } else {
2384                dev->reg_addr = &imx_addr;
2385                dev->param_hold = imx_param_hold;
2386                dev->param_update = imx_param_update;
2387        }
2388}
2389
2390static int imx_probe(struct i2c_client *client,
2391                         const struct i2c_device_id *id)
2392{
2393        struct imx_device *dev;
2394        struct camera_mipi_info *imx_info = NULL;
2395        int ret;
2396        char *msr_file_name = NULL;
2397
2398        /* allocate sensor device & init sub device */
2399        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2400        if (!dev) {
2401                v4l2_err(client, "%s: out of memory\n", __func__);
2402                return -ENOMEM;
2403        }
2404
2405        mutex_init(&dev->input_lock);
2406
2407        dev->i2c_id = id->driver_data;
2408        dev->fmt_idx = 0;
2409        dev->sensor_id = IMX_ID_DEFAULT;
2410        dev->vcm_driver = &imx_vcms[IMX_ID_DEFAULT];
2411        dev->digital_gain = 256;
2412
2413        v4l2_i2c_subdev_init(&(dev->sd), client, &imx_ops);
2414
2415        if (client->dev.platform_data) {
2416                ret = imx_s_config(&dev->sd, client->irq,
2417                                       client->dev.platform_data);
2418                if (ret)
2419                        goto out_free;
2420        }
2421        imx_info = v4l2_get_subdev_hostdata(&dev->sd);
2422
2423        /*
2424         * sd->name is updated with sensor driver name by the v4l2.
2425         * change it to sensor name in this case.
2426         */
2427        imx_update_reg_info(dev);
2428        snprintf(dev->sd.name, sizeof(dev->sd.name), "%s%x %d-%04x",
2429                IMX_SUBDEV_PREFIX, dev->sensor_id,
2430                i2c_adapter_id(client->adapter), client->addr);
2431
2432        ret = __imx_init_ctrl_handler(dev);
2433        if (ret)
2434                goto out_ctrl_handler_free;
2435
2436        dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
2437        dev->pad.flags = MEDIA_PAD_FL_SOURCE;
2438        dev->format.code = imx_translate_bayer_order(
2439                imx_info->raw_bayer_order);
2440        dev->sd.entity.ops = &imx_entity_ops;
2441        dev->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
2442
2443        ret = media_entity_pads_init(&dev->sd.entity, 1, &dev->pad);
2444        if (ret) {
2445                imx_remove(client);
2446                return ret;
2447        }
2448
2449        /* Load the Noise reduction, Dead pixel registers from cpf file*/
2450        if (dev->platform_data->msr_file_name != NULL)
2451                msr_file_name = dev->platform_data->msr_file_name();
2452        if (msr_file_name) {
2453                ret = load_msr_list(client, msr_file_name, &dev->fw);
2454                if (ret) {
2455                        imx_remove(client);
2456                        return ret;
2457                }
2458        } else {
2459                dev_warn(&client->dev, "Drvb file not present");
2460        }
2461
2462        return ret;
2463
2464out_ctrl_handler_free:
2465        v4l2_ctrl_handler_free(&dev->ctrl_handler);
2466
2467out_free:
2468        v4l2_device_unregister_subdev(&dev->sd);
2469        kfree(dev);
2470        return ret;
2471}
2472
2473static const struct i2c_device_id imx_ids[] = {
2474        {IMX_NAME_175, IMX175_ID},
2475        {IMX_NAME_135, IMX135_ID},
2476        {IMX_NAME_135_FUJI, IMX135_FUJI_ID},
2477        {IMX_NAME_134, IMX134_ID},
2478        {IMX_NAME_132, IMX132_ID},
2479        {IMX_NAME_208, IMX208_ID},
2480        {IMX_NAME_219, IMX219_ID},
2481        {IMX_NAME_227, IMX227_ID},
2482        {}
2483};
2484
2485MODULE_DEVICE_TABLE(i2c, imx_ids);
2486
2487static struct i2c_driver imx_driver = {
2488        .driver = {
2489                .name = IMX_DRIVER,
2490        },
2491        .probe = imx_probe,
2492        .remove = imx_remove,
2493        .id_table = imx_ids,
2494};
2495
2496static __init int init_imx(void)
2497{
2498        return i2c_add_driver(&imx_driver);
2499}
2500
2501static __exit void exit_imx(void)
2502{
2503        i2c_del_driver(&imx_driver);
2504}
2505
2506module_init(init_imx);
2507module_exit(exit_imx);
2508
2509MODULE_DESCRIPTION("A low-level driver for Sony IMX sensors");
2510MODULE_AUTHOR("Shenbo Huang <shenbo.huang@intel.com>");
2511MODULE_LICENSE("GPL");
2512
2513