]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/blobdiff - drivers/media/i2c/ov5693.c
WAR:media:i2c:ov5693: add flip and mirror setting
[hercules2020/nv-tegra/linux-4.4.git] / drivers / media / i2c / ov5693.c
index 605586d12abd33faa688bb07bb2252dc05c2ecab..aa9e7feb35c912bc376c3cc076cdf2951e784494 100644 (file)
@@ -499,6 +499,7 @@ static int ov5693_s_stream(struct v4l2_subdev *sd, int enable)
        struct v4l2_control control;
        int err;
        u32 frame_time;
+       u8 val;
 
        dev_dbg(&client->dev, "%s++\n", __func__);
 
@@ -570,7 +571,20 @@ static int ov5693_s_stream(struct v4l2_subdev *sd, int enable)
        err = ov5693_write_table(priv, mode_table[OV5693_MODE_START_STREAM]);
        if (err)
                goto exit;
-
+        if (priv->pdata->v_flip) {
+               ov5693_read_reg(priv->s_data, OV5693_TIMING_REG20, &val);
+               ov5693_write_reg(priv->s_data, OV5693_TIMING_REG20,
+                                val | VERTICAL_FLIP);
+       }
+       if (priv->pdata->h_mirror) {
+               ov5693_read_reg(priv->s_data, OV5693_TIMING_REG21, &val);
+               ov5693_write_reg(priv->s_data, OV5693_TIMING_REG21,
+                                val | HORIZONTAL_MIRROR_MASK);
+       } else {
+               ov5693_read_reg(priv->s_data, OV5693_TIMING_REG21, &val);
+               ov5693_write_reg(priv->s_data, OV5693_TIMING_REG21,
+                                val & (~HORIZONTAL_MIRROR_MASK));
+       }
        if (test_mode)
                err = ov5693_write_table(priv,
                        mode_table[OV5693_MODE_TEST_PATTERN]);
@@ -1331,7 +1345,9 @@ static struct camera_common_pdata *ov5693_parse_dt(struct i2c_client *client)
 
        board_priv_pdata->has_eeprom =
                of_property_read_bool(node, "has-eeprom");
-
+       board_priv_pdata->v_flip= of_property_read_bool(node, "vertical-flip");
+       board_priv_pdata->h_mirror = of_property_read_bool(node,
+                                                        "horizontal-mirror");
        return board_priv_pdata;
 
 error: