|
@@ -194,57 +194,61 @@ static void i2c_wr(struct v4l2_subdev *sd, u16 reg, u8 *values, u32 n)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static u8 i2c_rd8(struct v4l2_subdev *sd, u16 reg)
|
|
|
+static noinline u32 i2c_rdreg(struct v4l2_subdev *sd, u16 reg, u32 n)
|
|
|
{
|
|
|
- u8 val;
|
|
|
+ __le32 val = 0;
|
|
|
|
|
|
- i2c_rd(sd, reg, &val, 1);
|
|
|
+ i2c_rd(sd, reg, (u8 __force *)&val, n);
|
|
|
|
|
|
- return val;
|
|
|
+ return le32_to_cpu(val);
|
|
|
+}
|
|
|
+
|
|
|
+static noinline void i2c_wrreg(struct v4l2_subdev *sd, u16 reg, u32 val, u32 n)
|
|
|
+{
|
|
|
+ __le32 raw = cpu_to_le32(val);
|
|
|
+
|
|
|
+ i2c_wr(sd, reg, (u8 __force *)&raw, n);
|
|
|
+}
|
|
|
+
|
|
|
+static u8 i2c_rd8(struct v4l2_subdev *sd, u16 reg)
|
|
|
+{
|
|
|
+ return i2c_rdreg(sd, reg, 1);
|
|
|
}
|
|
|
|
|
|
static void i2c_wr8(struct v4l2_subdev *sd, u16 reg, u8 val)
|
|
|
{
|
|
|
- i2c_wr(sd, reg, &val, 1);
|
|
|
+ i2c_wrreg(sd, reg, val, 1);
|
|
|
}
|
|
|
|
|
|
static void i2c_wr8_and_or(struct v4l2_subdev *sd, u16 reg,
|
|
|
u8 mask, u8 val)
|
|
|
{
|
|
|
- i2c_wr8(sd, reg, (i2c_rd8(sd, reg) & mask) | val);
|
|
|
+ i2c_wrreg(sd, reg, (i2c_rdreg(sd, reg, 2) & mask) | val, 2);
|
|
|
}
|
|
|
|
|
|
static u16 i2c_rd16(struct v4l2_subdev *sd, u16 reg)
|
|
|
{
|
|
|
- u16 val;
|
|
|
-
|
|
|
- i2c_rd(sd, reg, (u8 *)&val, 2);
|
|
|
-
|
|
|
- return val;
|
|
|
+ return i2c_rdreg(sd, reg, 2);
|
|
|
}
|
|
|
|
|
|
static void i2c_wr16(struct v4l2_subdev *sd, u16 reg, u16 val)
|
|
|
{
|
|
|
- i2c_wr(sd, reg, (u8 *)&val, 2);
|
|
|
+ i2c_wrreg(sd, reg, val, 2);
|
|
|
}
|
|
|
|
|
|
static void i2c_wr16_and_or(struct v4l2_subdev *sd, u16 reg, u16 mask, u16 val)
|
|
|
{
|
|
|
- i2c_wr16(sd, reg, (i2c_rd16(sd, reg) & mask) | val);
|
|
|
+ i2c_wrreg(sd, reg, (i2c_rdreg(sd, reg, 2) & mask) | val, 2);
|
|
|
}
|
|
|
|
|
|
static u32 i2c_rd32(struct v4l2_subdev *sd, u16 reg)
|
|
|
{
|
|
|
- u32 val;
|
|
|
-
|
|
|
- i2c_rd(sd, reg, (u8 *)&val, 4);
|
|
|
-
|
|
|
- return val;
|
|
|
+ return i2c_rdreg(sd, reg, 4);
|
|
|
}
|
|
|
|
|
|
static void i2c_wr32(struct v4l2_subdev *sd, u16 reg, u32 val)
|
|
|
{
|
|
|
- i2c_wr(sd, reg, (u8 *)&val, 4);
|
|
|
+ i2c_wrreg(sd, reg, val, 4);
|
|
|
}
|
|
|
|
|
|
/* --------------- STATUS --------------- */
|
|
@@ -1227,7 +1231,7 @@ static int tc358743_g_register(struct v4l2_subdev *sd,
|
|
|
|
|
|
reg->size = tc358743_get_reg_size(reg->reg);
|
|
|
|
|
|
- i2c_rd(sd, reg->reg, (u8 *)®->val, reg->size);
|
|
|
+ reg->val = i2c_rdreg(sd, reg->reg, reg->size);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -1253,7 +1257,7 @@ static int tc358743_s_register(struct v4l2_subdev *sd,
|
|
|
reg->reg == BCAPS)
|
|
|
return 0;
|
|
|
|
|
|
- i2c_wr(sd, (u16)reg->reg, (u8 *)®->val,
|
|
|
+ i2c_wrreg(sd, (u16)reg->reg, reg->val,
|
|
|
tc358743_get_reg_size(reg->reg));
|
|
|
|
|
|
return 0;
|