hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/i2c/sc5336.c
....@@ -51,7 +51,7 @@
5151 #define SC5336_REG_EXPOSURE_H 0x3e00
5252 #define SC5336_REG_EXPOSURE_M 0x3e01
5353 #define SC5336_REG_EXPOSURE_L 0x3e02
54
-#define SC5336_EXPOSURE_MIN 1
54
+#define SC5336_EXPOSURE_MIN 2
5555 #define SC5336_EXPOSURE_STEP 1
5656 #define SC5336_VTS_MAX 0x7fff
5757
....@@ -244,7 +244,7 @@
244244 {0x3633, 0x33},
245245 {0x3638, 0xcf},
246246 {0x363f, 0xc0},
247
- {0x3641, 0x20},
247
+ {0x3641, 0x38},
248248 {0x3670, 0x56},
249249 {0x3674, 0xc0},
250250 {0x3675, 0xa0},
....@@ -287,6 +287,7 @@
287287 {0x37fb, 0x24},
288288 {0x37fc, 0x01},
289289 {0x37fd, 0x36},
290
+ {0x3900, 0x0d},
290291 {0x3901, 0x00},
291292 {0x3904, 0x04},
292293 {0x3905, 0x8c},
....@@ -866,6 +867,7 @@
866867 static int __sc5336_start_stream(struct sc5336 *sc5336)
867868 {
868869 int ret;
870
+ u32 chip_version = 0;
869871
870872 if (!sc5336->is_thunderboot) {
871873 ret = sc5336_write_array(sc5336->client, sc5336->cur_mode->reg_list);
....@@ -877,6 +879,22 @@
877879 if (ret)
878880 return ret;
879881 }
882
+ ret = sc5336_read_reg(sc5336->client, 0x3040, SC5336_REG_VALUE_08BIT, &chip_version);
883
+ if (chip_version == 0x00) {
884
+ ret |= sc5336_write_reg(sc5336->client, 0x3258, SC5336_REG_VALUE_08BIT, 0x0c);
885
+ ret |= sc5336_write_reg(sc5336->client, 0x3249, SC5336_REG_VALUE_08BIT, 0x0b);
886
+ ret |= sc5336_write_reg(sc5336->client, 0x3934, SC5336_REG_VALUE_08BIT, 0x0a);
887
+ ret |= sc5336_write_reg(sc5336->client, 0x3935, SC5336_REG_VALUE_08BIT, 0x00);
888
+ ret |= sc5336_write_reg(sc5336->client, 0x3937, SC5336_REG_VALUE_08BIT, 0x75);
889
+ } else if (chip_version == 0x03) {
890
+ ret |= sc5336_write_reg(sc5336->client, 0x3258, SC5336_REG_VALUE_08BIT, 0x08);
891
+ ret |= sc5336_write_reg(sc5336->client, 0x3249, SC5336_REG_VALUE_08BIT, 0x07);
892
+ ret |= sc5336_write_reg(sc5336->client, 0x3934, SC5336_REG_VALUE_08BIT, 0x05);
893
+ ret |= sc5336_write_reg(sc5336->client, 0x3935, SC5336_REG_VALUE_08BIT, 0x07);
894
+ ret |= sc5336_write_reg(sc5336->client, 0x3937, SC5336_REG_VALUE_08BIT, 0x74);
895
+ }
896
+ if (ret)
897
+ return ret;
880898
881899 return sc5336_write_reg(sc5336->client, SC5336_REG_CTRL_MODE,
882900 SC5336_REG_VALUE_08BIT, SC5336_MODE_STREAMING);