struct v4l2_control control;
int err;
u32 frame_time;
+ u8 val;
dev_dbg(&client->dev, "%s++\n", __func__);
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]);
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:
#define OV5693_GAIN_ADDR_MSB 0x350A
#define OV5693_GAIN_ADDR_LSB 0x350B
#define OV5693_GROUP_HOLD_ADDR 0x3208
+#define OV5693_TIMING_REG20 0x3820
+#define VERTICAL_FLIP ((0x1 << 1) | (0x1 << 6))
+#define OV5693_TIMING_REG21 0x3821
+#define HORIZONTAL_MIRROR_MASK (0x3 << 1)
struct ov5693_mode {
int res_x;