|
@@ -185,7 +185,7 @@ static int __smiapp_read(struct smiapp_sensor *sensor, u32 reg, u32 *val,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int smiapp_read(struct smiapp_sensor *sensor, u32 reg, u32 *val)
|
|
|
+int smiapp_read_no_quirk(struct smiapp_sensor *sensor, u32 reg, u32 *val)
|
|
|
{
|
|
|
return __smiapp_read(
|
|
|
sensor, reg, val,
|
|
@@ -193,16 +193,35 @@ int smiapp_read(struct smiapp_sensor *sensor, u32 reg, u32 *val)
|
|
|
SMIAPP_QUIRK_FLAG_8BIT_READ_ONLY));
|
|
|
}
|
|
|
|
|
|
+int smiapp_read(struct smiapp_sensor *sensor, u32 reg, u32 *val)
|
|
|
+{
|
|
|
+ int rval;
|
|
|
+
|
|
|
+ *val = 0;
|
|
|
+ rval = smiapp_call_quirk(sensor, reg_access, false, ®, val);
|
|
|
+ if (rval == -ENOIOCTLCMD)
|
|
|
+ return 0;
|
|
|
+ if (rval < 0)
|
|
|
+ return rval;
|
|
|
+
|
|
|
+ return smiapp_read_no_quirk(sensor, reg, val);
|
|
|
+}
|
|
|
+
|
|
|
int smiapp_read_8only(struct smiapp_sensor *sensor, u32 reg, u32 *val)
|
|
|
{
|
|
|
+ int rval;
|
|
|
+
|
|
|
+ *val = 0;
|
|
|
+ rval = smiapp_call_quirk(sensor, reg_access, false, ®, val);
|
|
|
+ if (rval == -ENOIOCTLCMD)
|
|
|
+ return 0;
|
|
|
+ if (rval < 0)
|
|
|
+ return rval;
|
|
|
+
|
|
|
return __smiapp_read(sensor, reg, val, true);
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * Write to a 8/16-bit register.
|
|
|
- * Returns zero if successful, or non-zero otherwise.
|
|
|
- */
|
|
|
-int smiapp_write(struct smiapp_sensor *sensor, u32 reg, u32 val)
|
|
|
+int smiapp_write_no_quirk(struct smiapp_sensor *sensor, u32 reg, u32 val)
|
|
|
{
|
|
|
struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd);
|
|
|
struct i2c_msg msg;
|
|
@@ -267,3 +286,20 @@ int smiapp_write(struct smiapp_sensor *sensor, u32 reg, u32 val)
|
|
|
|
|
|
return r;
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Write to a 8/16-bit register.
|
|
|
+ * Returns zero if successful, or non-zero otherwise.
|
|
|
+ */
|
|
|
+int smiapp_write(struct smiapp_sensor *sensor, u32 reg, u32 val)
|
|
|
+{
|
|
|
+ int rval;
|
|
|
+
|
|
|
+ rval = smiapp_call_quirk(sensor, reg_access, true, ®, &val);
|
|
|
+ if (rval == -ENOIOCTLCMD)
|
|
|
+ return 0;
|
|
|
+ if (rval < 0)
|
|
|
+ return rval;
|
|
|
+
|
|
|
+ return smiapp_write_no_quirk(sensor, reg, val);
|
|
|
+}
|