ソースを参照

msm: camera: sensor: Reg settings missed while lookahead on qup

While we lookahead and merge the continuous reg settings to
burst, the packed setting len with uint8 data type may happen
overflow if the continuous reg setting count is larger than 255,
then some reg settings missed and lead to some sensor issues,
so modify the data type of len to avoid it.

CRs-Fixed: 3678429
Change-Id: I51a153d2340b84dd874ecd7bef6b3df1356611b0
Signed-off-by: chengxue <[email protected]>
(cherry picked from commit aadcb5e66d37f556c570621e3b15e834601f074b)
chengxue 1 年間 前
コミット
5aa6302ba5

+ 5 - 5
drivers/cam_sensor_module/cam_sensor_io/cam_sensor_qup_i2c.c

@@ -56,7 +56,7 @@ static int32_t cam_qup_i2c_rxdata(
 
 static inline void  cam_qup_i2c_txdata_fill(
 	struct camera_io_master *dev_client, unsigned char *txdata,
-	int length, struct i2c_msg *msgs, int curr_mindx)
+	uint16_t length, struct i2c_msg *msgs, int curr_mindx)
 {
 	msgs[curr_mindx].addr =  dev_client->client->addr >> 1;
 	msgs[curr_mindx].flags = 0;
@@ -66,7 +66,7 @@ static inline void  cam_qup_i2c_txdata_fill(
 
 static int32_t cam_qup_i2c_txdata(
 	struct camera_io_master *dev_client, unsigned char *txdata,
-	int length)
+	uint16_t length)
 {
 	int32_t rc = 0;
 	uint16_t saddr = dev_client->client->addr >> 1;
@@ -271,9 +271,9 @@ static inline int32_t cam_qup_i2c_write_optimized(struct camera_io_master *clien
 	unsigned char *buf)
 {
 	int32_t rc = 0;
-	uint8_t len = 0;
+	uint16_t len = 0;
 	struct cam_sensor_i2c_reg_array *reg_setting_previous = NULL;
-	uint32_t offset = 0;
+	uint16_t offset = 0;
 	struct cam_sensor_i2c_reg_array *reg_setting;
 	enum camera_sensor_i2c_type addr_type;
 	enum camera_sensor_i2c_type data_type;
@@ -457,7 +457,7 @@ static int32_t cam_qup_i2c_write_burst(struct camera_io_master *client,
 {
 	int i;
 	int32_t rc = 0;
-	uint32_t len = 0;
+	uint16_t len = 0;
 	unsigned char *buf = NULL;
 	struct cam_sensor_i2c_reg_array *reg_setting;
 	enum camera_sensor_i2c_type addr_type;

+ 5 - 5
drivers/cam_sensor_module/cam_sensor_io/cam_sensor_qup_i3c.c

@@ -50,7 +50,7 @@ static int cam_qup_i3c_rxdata(struct i3c_device *dev_client, unsigned char *rxda
 }
 
 static inline void cam_qup_i3c_txdata_fill(struct camera_io_master *dev_client,
-	unsigned char *txdata, int length,
+	unsigned char *txdata, uint16_t length,
 	struct i3c_priv_xfer *msgs, int curr_mindx)
 {
 	msgs[curr_mindx].rnw = 0;
@@ -59,7 +59,7 @@ static inline void cam_qup_i3c_txdata_fill(struct camera_io_master *dev_client,
 }
 
 static int cam_qup_i3c_txdata(struct camera_io_master *dev_client, unsigned char *txdata,
-	int length)
+	uint16_t length)
 {
 	int rc;
 	uint32_t us = 0;
@@ -262,9 +262,9 @@ static inline int32_t cam_qup_i3c_write_optimized(struct camera_io_master *clien
 	unsigned char *buf)
 {
 	int32_t rc = 0;
-	uint8_t len = 0;
+	uint16_t len = 0;
 	struct cam_sensor_i2c_reg_array *reg_setting_previous = NULL;
-	uint32_t offset = 0;
+	uint16_t offset = 0;
 	struct cam_sensor_i2c_reg_array *reg_setting;
 	enum camera_sensor_i2c_type addr_type;
 	enum camera_sensor_i2c_type data_type;
@@ -456,7 +456,7 @@ static int cam_qup_i3c_write_burst(struct camera_io_master *client,
 {
 	int i;
 	int rc;
-	uint32_t len = 0;
+	uint16_t len = 0;
 	unsigned char *buf;
 	struct cam_sensor_i2c_reg_array *reg_setting;
 	enum camera_sensor_i2c_type addr_type;