diff --git a/drivers/media/i2c/ox03c10.c b/drivers/media/i2c/ox03c10.c index da19d4a111e2..02d4c8b75f1f 100644 --- a/drivers/media/i2c/ox03c10.c +++ b/drivers/media/i2c/ox03c10.c @@ -183,12 +183,14 @@ struct ox03c10_mode { u32 bpp; u32 mipi_freq_idx; const struct regval *reg_list; + const struct regval *linear_reg_list; u32 hdr_mode; struct rkmodule_hdr_compr *hdr_compr; u32 hdr_operating_mode; u32 hdr_ratio; u32 vc[PAD_MAX]; u32 exp_mode; + u32 single_mode; }; struct ox03c10 { @@ -3830,1076 +3832,7 @@ static const struct regval ox03c10_1920x1080_30fps_HDR3_LFM_PWL16_mipi996[] = { {REG_NULL, 0xff}, }; -static const struct regval ox03c10_1920x1080_30fps_linear_raw10_mipi996[] = { - {0x0103, 0x01}, - {0x0107, 0x01}, - {0x4d5a, 0x1c}, - {0x4d09, 0xff}, - {0x4d09, 0xdf}, - {0x3208, 0x04}, - {0x4620, 0x04}, - {0x3208, 0x14}, - {0x3208, 0x05}, - {0x4620, 0x04}, - {0x3208, 0x15}, - {0x3208, 0x02}, - {0x3507, 0x00}, - {0x3208, 0x12}, - {0x3208, 0xa2}, - {0x0301, 0xc8}, - {0x0303, 0x01}, - {0x0304, 0x01}, - {0x0305, 0x2c}, - {0x0306, 0x04}, - {0x0307, 0x01}, - {0x0316, 0x00}, - {0x0317, 0x00}, - {0x0318, 0x00}, - {0x0323, 0x05}, - {0x0324, 0x01}, - {0x0325, 0x2c}, - {0x0400, 0xe0}, - {0x0401, 0x80}, - {0x0403, 0xde}, - {0x0404, 0x34}, - {0x0405, 0x3b}, - {0x0406, 0xde}, - {0x0407, 0x08}, - {0x0408, 0xe0}, - {0x0409, 0x7f}, - {0x040a, 0xde}, - {0x040b, 0x34}, - {0x040c, 0x47}, - {0x040d, 0xd8}, - {0x040e, 0x08}, - {0x2803, 0xfe}, - {0x280b, 0x00}, - {0x280c, 0x79}, - {0x3001, 0x03}, - {0x3002, 0xf8}, - {0x3005, 0x80}, - {0x3007, 0x01}, - {0x3008, 0x80}, - {0x3012, 0x41}, - {0x3020, 0x05}, - {0x3700, 0x28}, - {0x3701, 0x15}, - {0x3702, 0x19}, - {0x3703, 0x23}, - {0x3704, 0x0a}, - {0x3705, 0x00}, - {0x3706, 0x3e}, - {0x3707, 0x0d}, - {0x3708, 0x50}, - {0x3709, 0x5a}, - {0x370a, 0x00}, - {0x370b, 0x96}, - {0x3711, 0x11}, - {0x3712, 0x13}, - {0x3717, 0x02}, - {0x3718, 0x73}, - {0x372c, 0x40}, - {0x3733, 0x01}, - {0x3738, 0x36}, - {0x3739, 0x36}, - {0x373a, 0x25}, - {0x373b, 0x25}, - {0x373f, 0x21}, - {0x3740, 0x21}, - {0x3741, 0x21}, - {0x3742, 0x21}, - {0x3747, 0x28}, - {0x3748, 0x28}, - {0x3749, 0x19}, - {0x3755, 0x1a}, - {0x3756, 0x0a}, - {0x3757, 0x1c}, - {0x3765, 0x19}, - {0x3766, 0x05}, - {0x3767, 0x05}, - {0x3768, 0x13}, - {0x376c, 0x07}, - {0x3778, 0x20}, - {0x377c, 0xc8}, - {0x3781, 0x02}, - {0x3783, 0x02}, - {0x379c, 0x58}, - {0x379e, 0x00}, - {0x379f, 0x00}, - {0x37a0, 0x00}, - {0x37bc, 0x22}, - {0x37c0, 0x01}, - {0x37c4, 0x3e}, - {0x37c5, 0x3e}, - {0x37c6, 0x2a}, - {0x37c7, 0x28}, - {0x37c8, 0x02}, - {0x37c9, 0x12}, - {0x37cb, 0x29}, - {0x37cd, 0x29}, - {0x37d2, 0x00}, - {0x37d3, 0x73}, - {0x37d6, 0x00}, - {0x37d7, 0x6b}, - {0x37dc, 0x00}, - {0x37df, 0x54}, - {0x37e2, 0x00}, - {0x37e3, 0x00}, - {0x37f8, 0x00}, - {0x37f9, 0x01}, - {0x37fa, 0x00}, - {0x37fb, 0x19}, - {0x3c03, 0x01}, - {0x3c04, 0x01}, - {0x3c06, 0x21}, - {0x3c08, 0x01}, - {0x3c09, 0x01}, - {0x3c0a, 0x01}, - {0x3c0b, 0x21}, - {0x3c13, 0x21}, - {0x3c14, 0x82}, - {0x3c16, 0x13}, - {0x3c21, 0x00}, - {0x3c22, 0xf3}, - {0x3c37, 0x12}, - {0x3c38, 0x31}, - {0x3c3c, 0x00}, - {0x3c3d, 0x03}, - {0x3c44, 0x16}, - {0x3c5c, 0x8a}, - {0x3c5f, 0x03}, - {0x3c61, 0x80}, - {0x3c6f, 0x2b}, - {0x3c70, 0x5f}, - {0x3c71, 0x2c}, - {0x3c72, 0x2c}, - {0x3c73, 0x2c}, - {0x3c76, 0x12}, - {0x3182, 0x12}, - {0x320e, 0x00}, - {0x320f, 0x00}, - {0x3211, 0x61}, - {0x3215, 0xcd}, - {0x3219, 0x08}, - {0x3506, 0x30}, - {0x350a, 0x01}, - {0x350b, 0x00}, - {0x350c, 0x00}, - {0x3586, 0x60}, - {0x358a, 0x01}, - {0x358b, 0x00}, - {0x358c, 0x00}, - {0x3541, 0x00}, - {0x3542, 0x04}, - {0x3548, 0x04}, - {0x3549, 0x40}, - {0x354a, 0x01}, - {0x354b, 0x00}, - {0x354c, 0x00}, - {0x35c1, 0x00}, - {0x35c2, 0x02}, - {0x35c6, 0xa0}, - {0x3600, 0x8f}, - {0x3605, 0x16}, - {0x3609, 0xf0}, - {0x360a, 0x01}, - {0x360e, 0x1d}, - {0x360f, 0x10}, - {0x3610, 0x70}, - {0x3611, 0x3a}, - {0x3612, 0x28}, - {0x361a, 0x29}, - {0x361b, 0x6c}, - {0x361c, 0x0b}, - {0x361d, 0x00}, - {0x361e, 0xfc}, - {0x362a, 0x00}, - {0x364d, 0x0f}, - {0x364e, 0x18}, - {0x364f, 0x12}, - {0x3653, 0x1c}, - {0x3654, 0x00}, - {0x3655, 0x1f}, - {0x3656, 0x1f}, - {0x3657, 0x0c}, - {0x3658, 0x0a}, - {0x3659, 0x14}, - {0x365a, 0x18}, - {0x365b, 0x14}, - {0x365c, 0x10}, - {0x365e, 0x12}, - {0x3674, 0x08}, - {0x3677, 0x3a}, - {0x3678, 0x3a}, - {0x3679, 0x19}, - {0x3802, 0x00}, - {0x3803, 0x04}, - {0x3806, 0x05}, - {0x3807, 0x0b}, - {0x3808, 0x07}, - {0x3809, 0x80}, - {0x380a, 0x05}, - {0x380b, 0x00}, - {0x380c, 0x04}, - {0x380d, 0xd3}, - {0x380e, 0x02}, - {0x380f, 0xae}, - {0x3810, 0x00}, - {0x3811, 0x08}, - {0x3812, 0x00}, - {0x3813, 0x04}, - {0x3816, 0x01}, - {0x3817, 0x01}, - {0x381c, 0x18}, - {0x381e, 0x01}, - {0x381f, 0x01}, - {0x3820, 0x00}, - {0x3821, 0x19}, - {0x3832, 0x00}, - {0x3834, 0x00}, - {0x384c, 0x02}, - {0x384d, 0x53}, - {0x3850, 0x00}, - {0x3851, 0x42}, - {0x3852, 0x00}, - {0x3853, 0x40}, - {0x3858, 0x04}, - {0x388c, 0x02}, - {0x388d, 0x71}, - {0x3b40, 0x05}, - {0x3b41, 0x40}, - {0x3b42, 0x00}, - {0x3b43, 0x90}, - {0x3b44, 0x00}, - {0x3b45, 0x20}, - {0x3b46, 0x00}, - {0x3b47, 0x20}, - {0x3b48, 0x19}, - {0x3b49, 0x12}, - {0x3b4a, 0x16}, - {0x3b4b, 0x2e}, - {0x3b4c, 0x00}, - {0x3b4d, 0x00}, - {0x3b86, 0x00}, - {0x3b87, 0x34}, - {0x3b88, 0x00}, - {0x3b89, 0x08}, - {0x3b8a, 0x05}, - {0x3b8b, 0x00}, - {0x3b8c, 0x07}, - {0x3b8d, 0x80}, - {0x3b8e, 0x00}, - {0x3b8f, 0x00}, - {0x3b92, 0x05}, - {0x3b93, 0x00}, - {0x3b94, 0x07}, - {0x3b95, 0x80}, - {0x3b9e, 0x09}, - {0x3d82, 0x73}, - {0x3d85, 0x05}, - {0x3d8a, 0x03}, - {0x3d8b, 0xff}, - {0x3d99, 0x00}, - {0x3d9a, 0x9f}, - {0x3d9b, 0x00}, - {0x3d9c, 0xa0}, - {0x3da4, 0x00}, - {0x3da7, 0x50}, - {0x420e, 0xff}, - {0x420f, 0xff}, - {0x4210, 0xff}, - {0x4211, 0xff}, - {0x421e, 0x02}, - {0x421f, 0x45}, - {0x4220, 0xe1}, - {0x4221, 0x05}, - {0x4301, 0x0f}, - {0x4307, 0x03}, - {0x4308, 0x13}, - {0x430a, 0x53}, - {0x430d, 0x93}, - {0x430f, 0x57}, - {0x4310, 0x95}, - {0x4311, 0x16}, - {0x4316, 0x00}, - {0x4317, 0x08}, - {0x4319, 0x09}, - {0x431a, 0x00}, - {0x431b, 0x22}, - {0x431d, 0x2a}, - {0x431e, 0x11}, - {0x431f, 0x30}, - {0x4320, 0x59}, - {0x4323, 0x80}, - {0x4324, 0x00}, - {0x4503, 0x4e}, - {0x4505, 0x00}, - {0x4509, 0x00}, - {0x450a, 0x00}, - {0x4580, 0xf8}, - {0x4583, 0x07}, - {0x4584, 0x6a}, - {0x4585, 0x08}, - {0x4586, 0x05}, - {0x4587, 0x04}, - {0x4588, 0x73}, - {0x4589, 0x05}, - {0x458a, 0x1f}, - {0x458b, 0x02}, - {0x458c, 0xdc}, - {0x458d, 0x03}, - {0x458e, 0x02}, - {0x4597, 0x07}, - {0x4598, 0x40}, - {0x4599, 0x0e}, - {0x459a, 0x0e}, - {0x459b, 0xfb}, - {0x459c, 0xf3}, - {0x4602, 0x00}, - {0x4603, 0x13}, - {0x4604, 0x00}, - {0x4609, 0x0a}, - {0x460a, 0x00}, - {0x4610, 0x00}, - {0x4611, 0x70}, - {0x4612, 0x00}, - {0x4613, 0x0c}, - {0x4614, 0x00}, - {0x4615, 0x70}, - {0x4616, 0x00}, - {0x4617, 0x0c}, - {0x4800, 0x04}, - {0x480a, 0x22}, - {0x4813, 0xe4}, - {0x4814, 0x2a}, - {0x4837, 0x0d}, - {0x484b, 0x47}, - {0x484f, 0x40}, - {0x4887, 0x51}, - {0x4d00, 0x4a}, - {0x4d01, 0x18}, - {0x4d05, 0xff}, - {0x4d06, 0x88}, - {0x4d08, 0x63}, - {0x4d09, 0xdf}, - {0x4d15, 0x7d}, - {0x4d1a, 0x20}, - {0x4d30, 0x0a}, - {0x4d31, 0x00}, - {0x4d34, 0x7d}, - {0x4d3c, 0x7d}, - {0x4f00, 0x3f}, - {0x4f01, 0xff}, - {0x4f02, 0xff}, - {0x4f03, 0x2c}, - {0x4f04, 0xe0}, - {0x6a00, 0x00}, - {0x6a01, 0x20}, - {0x6a02, 0x00}, - {0x6a03, 0x20}, - {0x6a04, 0x02}, - {0x6a05, 0x80}, - {0x6a06, 0x01}, - {0x6a07, 0xe0}, - {0x6a08, 0xcf}, - {0x6a09, 0x01}, - {0x6a0a, 0x40}, - {0x6a20, 0x00}, - {0x6a21, 0x02}, - {0x6a22, 0x00}, - {0x6a23, 0x00}, - {0x6a24, 0x00}, - {0x6a25, 0xf0}, - {0x6a26, 0x00}, - {0x6a27, 0x00}, - {0x6a28, 0x00}, - {0x5000, 0x8f}, - {0x5001, 0x65}, - {0x5002, 0x7f}, - {0x5003, 0x6a}, - {0x5004, 0x3e}, - {0x5005, 0x1e}, - {0x5006, 0x1e}, - {0x5007, 0x1e}, - {0x5008, 0x00}, - {0x500c, 0x00}, - {0x502c, 0x00}, - {0x502e, 0x00}, - {0x502f, 0x00}, - {0x504b, 0x00}, - {0x5053, 0x00}, - {0x505b, 0x00}, - {0x5063, 0x00}, - {0x5070, 0x00}, - {0x5074, 0x04}, - {0x507a, 0x00}, - {0x507b, 0x00}, - {0x5500, 0x02}, - {0x5700, 0x02}, - {0x5900, 0x02}, - {0x6007, 0x04}, - {0x6008, 0x05}, - {0x6009, 0x02}, - {0x600b, 0x08}, - {0x600c, 0x07}, - {0x600d, 0x88}, - {0x6016, 0x00}, - {0x6027, 0x04}, - {0x6028, 0x05}, - {0x6029, 0x02}, - {0x602b, 0x08}, - {0x602c, 0x07}, - {0x602d, 0x88}, - {0x6047, 0x04}, - {0x6048, 0x05}, - {0x6049, 0x02}, - {0x604b, 0x08}, - {0x604c, 0x07}, - {0x604d, 0x88}, - {0x6067, 0x04}, - {0x6068, 0x05}, - {0x6069, 0x02}, - {0x606b, 0x08}, - {0x606c, 0x07}, - {0x606d, 0x88}, - {0x6087, 0x04}, - {0x6088, 0x05}, - {0x6089, 0x02}, - {0x608b, 0x08}, - {0x608c, 0x07}, - {0x608d, 0x88}, - {0x5e00, 0x02}, - {0x5e01, 0x0b}, - {0x5e02, 0x00}, - {0x5e03, 0x00}, - {0x5e04, 0x00}, - {0x5e05, 0x0b}, - {0x5e06, 0x0c}, - {0x5e07, 0x0c}, - {0x5e08, 0x0c}, - {0x5e09, 0x0c}, - {0x5e0a, 0x0c}, - {0x5e0b, 0x0d}, - {0x5e0c, 0x0d}, - {0x5e0d, 0x0d}, - {0x5e0e, 0x0d}, - {0x5e0f, 0x0d}, - {0x5e10, 0x0d}, - {0x5e11, 0x0d}, - {0x5e12, 0x0e}, - {0x5e13, 0x0e}, - {0x5e14, 0x0e}, - {0x5e15, 0x0e}, - {0x5e16, 0x0e}, - {0x5e17, 0x0e}, - {0x5e18, 0x0e}, - {0x5e19, 0x10}, - {0x5e1a, 0x11}, - {0x5e1b, 0x11}, - {0x5e1c, 0x12}, - {0x5e1d, 0x12}, - {0x5e1e, 0x14}, - {0x5e1f, 0x15}, - {0x5e20, 0x16}, - {0x5e21, 0x17}, - {0x5e22, 0x00}, - {0x5e23, 0x08}, - {0x5e26, 0x00}, - {0x5e27, 0x00}, - {0x5e29, 0x00}, - {0x5e2a, 0x00}, - {0x5e2c, 0x00}, - {0x5e2d, 0x00}, - {0x5e2f, 0x03}, - {0x5e30, 0xff}, - {0x5e32, 0x04}, - {0x5e33, 0x00}, - {0x5e34, 0x00}, - {0x5e35, 0x04}, - {0x5e36, 0x00}, - {0x5e37, 0x00}, - {0x5e38, 0x04}, - {0x5e39, 0x00}, - {0x5e3a, 0x00}, - {0x5e3b, 0x04}, - {0x5e3c, 0x00}, - {0x5e3d, 0x00}, - {0x5e3e, 0x04}, - {0x5e3f, 0x00}, - {0x5e40, 0x00}, - {0x5e41, 0x06}, - {0x5e42, 0x00}, - {0x5e43, 0x00}, - {0x5e44, 0x06}, - {0x5e45, 0x00}, - {0x5e46, 0x00}, - {0x5e47, 0x06}, - {0x5e48, 0x00}, - {0x5e49, 0x00}, - {0x5e4a, 0x06}, - {0x5e4b, 0x00}, - {0x5e4c, 0x00}, - {0x5e4d, 0x06}, - {0x5e4e, 0x00}, - {0x5e50, 0x06}, - {0x5e51, 0x00}, - {0x5e53, 0x06}, - {0x5e54, 0x00}, - {0x5e56, 0x08}, - {0x5e57, 0x00}, - {0x5e59, 0x08}, - {0x5e5a, 0x00}, - {0x5e5c, 0x08}, - {0x5e5d, 0x00}, - {0x5e5f, 0x08}, - {0x5e60, 0x00}, - {0x5e62, 0x08}, - {0x5e63, 0x00}, - {0x5e65, 0x08}, - {0x5e66, 0x00}, - {0x5e68, 0x08}, - {0x5e69, 0x00}, - {0x5e6b, 0x16}, - {0x5e6c, 0x00}, - {0x5e6e, 0x20}, - {0x5e6f, 0x00}, - {0x5e71, 0x18}, - {0x5e72, 0x00}, - {0x5e74, 0x18}, - {0x5e75, 0x00}, - {0x5e77, 0x17}, - {0x5e78, 0xff}, - {0x5e7a, 0x00}, - {0x5e7b, 0x00}, - {0x5e7d, 0x00}, - {0x5e7e, 0x00}, - {0x5e80, 0x00}, - {0x5e81, 0x00}, - {0x5e83, 0x00}, - {0x5e84, 0x00}, - {0x5f00, 0x02}, - {0x5f01, 0x08}, - {0x5f02, 0x09}, - {0x5f03, 0x0a}, - {0x5f04, 0x0b}, - {0x5f05, 0x0c}, - {0x5f06, 0x0c}, - {0x5f07, 0x0c}, - {0x5f08, 0x0c}, - {0x5f09, 0x0c}, - {0x5f0a, 0x0d}, - {0x5f0b, 0x0d}, - {0x5f0c, 0x0d}, - {0x5f0d, 0x0d}, - {0x5f0e, 0x0d}, - {0x5f0f, 0x0e}, - {0x5f10, 0x0e}, - {0x5f11, 0x0e}, - {0x5f12, 0x0e}, - {0x5f13, 0x0f}, - {0x5f14, 0x0f}, - {0x5f15, 0x10}, - {0x5f16, 0x11}, - {0x5f17, 0x11}, - {0x5f18, 0x12}, - {0x5f19, 0x12}, - {0x5f1a, 0x13}, - {0x5f1b, 0x13}, - {0x5f1c, 0x14}, - {0x5f1d, 0x14}, - {0x5f1e, 0x16}, - {0x5f1f, 0x16}, - {0x5f20, 0x16}, - {0x5f21, 0x08}, - {0x5f22, 0x00}, - {0x5f23, 0x01}, - {0x5f26, 0x02}, - {0x5f27, 0x00}, - {0x5f29, 0x02}, - {0x5f2a, 0x00}, - {0x5f2c, 0x02}, - {0x5f2d, 0x00}, - {0x5f2f, 0x02}, - {0x5f30, 0x00}, - {0x5f32, 0x02}, - {0x5f33, 0x00}, - {0x5f34, 0x00}, - {0x5f35, 0x02}, - {0x5f36, 0x00}, - {0x5f37, 0x00}, - {0x5f38, 0x02}, - {0x5f39, 0x00}, - {0x5f3a, 0x00}, - {0x5f3b, 0x02}, - {0x5f3c, 0x00}, - {0x5f3d, 0x00}, - {0x5f3e, 0x02}, - {0x5f3f, 0x00}, - {0x5f40, 0x00}, - {0x5f41, 0x02}, - {0x5f42, 0x00}, - {0x5f43, 0x00}, - {0x5f44, 0x02}, - {0x5f45, 0x00}, - {0x5f46, 0x00}, - {0x5f47, 0x04}, - {0x5f48, 0x00}, - {0x5f49, 0x00}, - {0x5f4a, 0x04}, - {0x5f4b, 0x00}, - {0x5f4c, 0x00}, - {0x5f4d, 0x04}, - {0x5f4e, 0x00}, - {0x5f50, 0x04}, - {0x5f51, 0x00}, - {0x5f53, 0x04}, - {0x5f54, 0x00}, - {0x5f56, 0x04}, - {0x5f57, 0x00}, - {0x5f59, 0x04}, - {0x5f5a, 0x00}, - {0x5f5c, 0x04}, - {0x5f5d, 0x00}, - {0x5f5f, 0x08}, - {0x5f60, 0x00}, - {0x5f62, 0x08}, - {0x5f63, 0x00}, - {0x5f65, 0x08}, - {0x5f66, 0x00}, - {0x5f68, 0x08}, - {0x5f69, 0x00}, - {0x5f6b, 0x08}, - {0x5f6c, 0x00}, - {0x5f6e, 0x10}, - {0x5f6f, 0x00}, - {0x5f71, 0x10}, - {0x5f72, 0x00}, - {0x5f74, 0x10}, - {0x5f75, 0x00}, - {0x5f77, 0x10}, - {0x5f78, 0x00}, - {0x5f7a, 0x20}, - {0x5f7b, 0x00}, - {0x5f7d, 0x20}, - {0x5f7e, 0x00}, - {0x5f80, 0x20}, - {0x5f81, 0x00}, - {0x5f83, 0x00}, - {0x5f84, 0xff}, - {0x5240, 0x0f}, - {0x5243, 0x00}, - {0x5244, 0x00}, - {0x5245, 0x00}, - {0x5246, 0x00}, - {0x5247, 0x00}, - {0x5248, 0x00}, - {0x5249, 0x00}, - {0x5440, 0x0f}, - {0x5443, 0x00}, - {0x5445, 0x00}, - {0x5447, 0x00}, - {0x5448, 0x00}, - {0x5449, 0x00}, - {0x5640, 0x0f}, - {0x5642, 0x00}, - {0x5643, 0x00}, - {0x5644, 0x00}, - {0x5645, 0x00}, - {0x5646, 0x00}, - {0x5647, 0x00}, - {0x5649, 0x00}, - {0x5840, 0x0f}, - {0x5842, 0x00}, - {0x5843, 0x00}, - {0x5845, 0x00}, - {0x5846, 0x00}, - {0x5847, 0x00}, - {0x5848, 0x00}, - {0x5849, 0x00}, - {0x4001, 0x2b}, - {0x4008, 0x02}, - {0x4009, 0x03}, - {0x4018, 0x12}, - {0x4022, 0x40}, - {0x4023, 0x20}, - {0x4026, 0x00}, - {0x4027, 0x40}, - {0x4028, 0x00}, - {0x4029, 0x40}, - {0x402a, 0x00}, - {0x402b, 0x40}, - {0x402c, 0x00}, - {0x402d, 0x40}, - {0x405e, 0x00}, - {0x405f, 0x00}, - {0x4060, 0x00}, - {0x4061, 0x00}, - {0x4062, 0x00}, - {0x4063, 0x00}, - {0x4064, 0x00}, - {0x4065, 0x00}, - {0x4066, 0x00}, - {0x4067, 0x00}, - {0x4068, 0x00}, - {0x4069, 0x00}, - {0x406a, 0x00}, - {0x406b, 0x00}, - {0x406c, 0x00}, - {0x406d, 0x00}, - {0x406e, 0x00}, - {0x406f, 0x00}, - {0x4070, 0x00}, - {0x4071, 0x00}, - {0x4072, 0x00}, - {0x4073, 0x00}, - {0x4074, 0x00}, - {0x4075, 0x00}, - {0x4076, 0x00}, - {0x4077, 0x00}, - {0x4078, 0x00}, - {0x4079, 0x00}, - {0x407a, 0x00}, - {0x407b, 0x00}, - {0x407c, 0x00}, - {0x407d, 0x00}, - {0x407e, 0xcc}, - {0x407f, 0x18}, - {0x4080, 0xff}, - {0x4081, 0xff}, - {0x4082, 0x01}, - {0x4083, 0x53}, - {0x4084, 0x01}, - {0x4085, 0x2b}, - {0x4086, 0x00}, - {0x4087, 0xb3}, - {0x4640, 0x40}, - {0x4641, 0x11}, - {0x4642, 0x0e}, - {0x4643, 0xee}, - {0x4646, 0x0f}, - {0x4648, 0x00}, - {0x4649, 0x03}, - {0x4f04, 0xf8}, - {0x4d09, 0xff}, - {0x4d09, 0xdf}, - {0x5003, 0x7a}, - {0x5b80, 0x08}, - {0x5c00, 0x08}, - {0x5c80, 0x00}, - {0x5bbe, 0x12}, - {0x5c3e, 0x12}, - {0x5cbe, 0x12}, - {0x5b8a, 0x80}, - {0x5b8b, 0x80}, - {0x5b8c, 0x80}, - {0x5b8d, 0x80}, - {0x5b8e, 0x60}, - {0x5b8f, 0x80}, - {0x5b90, 0x80}, - {0x5b91, 0x80}, - {0x5b92, 0x80}, - {0x5b93, 0x20}, - {0x5b94, 0x80}, - {0x5b95, 0x80}, - {0x5b96, 0x80}, - {0x5b97, 0x20}, - {0x5b98, 0x00}, - {0x5b99, 0x80}, - {0x5b9a, 0x40}, - {0x5b9b, 0x20}, - {0x5b9c, 0x00}, - {0x5b9d, 0x00}, - {0x5b9e, 0x80}, - {0x5b9f, 0x00}, - {0x5ba0, 0x00}, - {0x5ba1, 0x00}, - {0x5ba2, 0x00}, - {0x5ba3, 0x00}, - {0x5ba4, 0x00}, - {0x5ba5, 0x00}, - {0x5ba6, 0x00}, - {0x5ba7, 0x00}, - {0x5ba8, 0x02}, - {0x5ba9, 0x00}, - {0x5baa, 0x02}, - {0x5bab, 0x76}, - {0x5bac, 0x03}, - {0x5bad, 0x08}, - {0x5bae, 0x00}, - {0x5baf, 0x80}, - {0x5bb0, 0x00}, - {0x5bb1, 0xc0}, - {0x5bb2, 0x01}, - {0x5bb3, 0x00}, - {0x5c0a, 0x80}, - {0x5c0b, 0x80}, - {0x5c0c, 0x80}, - {0x5c0d, 0x80}, - {0x5c0e, 0x60}, - {0x5c0f, 0x80}, - {0x5c10, 0x80}, - {0x5c11, 0x80}, - {0x5c12, 0x60}, - {0x5c13, 0x20}, - {0x5c14, 0x80}, - {0x5c15, 0x80}, - {0x5c16, 0x80}, - {0x5c17, 0x20}, - {0x5c18, 0x00}, - {0x5c19, 0x80}, - {0x5c1a, 0x40}, - {0x5c1b, 0x20}, - {0x5c1c, 0x00}, - {0x5c1d, 0x00}, - {0x5c1e, 0x80}, - {0x5c1f, 0x00}, - {0x5c20, 0x00}, - {0x5c21, 0x00}, - {0x5c22, 0x00}, - {0x5c23, 0x00}, - {0x5c24, 0x00}, - {0x5c25, 0x00}, - {0x5c26, 0x00}, - {0x5c27, 0x00}, - {0x5c28, 0x02}, - {0x5c29, 0x00}, - {0x5c2a, 0x02}, - {0x5c2b, 0x76}, - {0x5c2c, 0x03}, - {0x5c2d, 0x08}, - {0x5c2e, 0x00}, - {0x5c2f, 0x80}, - {0x5c30, 0x00}, - {0x5c31, 0xc0}, - {0x5c32, 0x01}, - {0x5c33, 0x00}, - {0x5c8a, 0x80}, - {0x5c8b, 0x80}, - {0x5c8c, 0x80}, - {0x5c8d, 0x80}, - {0x5c8e, 0x80}, - {0x5c8f, 0x80}, - {0x5c90, 0x80}, - {0x5c91, 0x80}, - {0x5c92, 0x80}, - {0x5c93, 0x60}, - {0x5c94, 0x80}, - {0x5c95, 0x80}, - {0x5c96, 0x80}, - {0x5c97, 0x60}, - {0x5c98, 0x40}, - {0x5c99, 0x80}, - {0x5c9a, 0x80}, - {0x5c9b, 0x80}, - {0x5c9c, 0x40}, - {0x5c9d, 0x00}, - {0x5c9e, 0x80}, - {0x5c9f, 0x80}, - {0x5ca0, 0x80}, - {0x5ca1, 0x20}, - {0x5ca2, 0x00}, - {0x5ca3, 0x80}, - {0x5ca4, 0x80}, - {0x5ca5, 0x00}, - {0x5ca6, 0x00}, - {0x5ca7, 0x00}, - {0x5ca8, 0x01}, - {0x5ca9, 0x00}, - {0x5caa, 0x02}, - {0x5cab, 0x00}, - {0x5cac, 0x03}, - {0x5cad, 0x08}, - {0x5cae, 0x01}, - {0x5caf, 0x00}, - {0x5cb0, 0x02}, - {0x5cb1, 0x00}, - {0x5cb2, 0x03}, - {0x5cb3, 0x08}, - {0x5be7, 0x80}, - {0x5bc9, 0x80}, - {0x5bca, 0x80}, - {0x5bcb, 0x80}, - {0x5bcc, 0x80}, - {0x5bcd, 0x80}, - {0x5bce, 0x80}, - {0x5bcf, 0x80}, - {0x5bd0, 0x80}, - {0x5bd1, 0x80}, - {0x5bd2, 0x20}, - {0x5bd3, 0x80}, - {0x5bd4, 0x40}, - {0x5bd5, 0x20}, - {0x5bd6, 0x00}, - {0x5bd7, 0x00}, - {0x5bd8, 0x00}, - {0x5bd9, 0x00}, - {0x5bda, 0x00}, - {0x5bdb, 0x00}, - {0x5bdc, 0x00}, - {0x5bdd, 0x00}, - {0x5bde, 0x00}, - {0x5bdf, 0x00}, - {0x5be0, 0x00}, - {0x5be1, 0x00}, - {0x5be2, 0x00}, - {0x5be3, 0x00}, - {0x5be4, 0x00}, - {0x5be5, 0x00}, - {0x5be6, 0x00}, - {0x5c49, 0x80}, - {0x5c4a, 0x80}, - {0x5c4b, 0x80}, - {0x5c4c, 0x80}, - {0x5c4d, 0x40}, - {0x5c4e, 0x80}, - {0x5c4f, 0x80}, - {0x5c50, 0x80}, - {0x5c51, 0x60}, - {0x5c52, 0x20}, - {0x5c53, 0x80}, - {0x5c54, 0x80}, - {0x5c55, 0x80}, - {0x5c56, 0x20}, - {0x5c57, 0x00}, - {0x5c58, 0x80}, - {0x5c59, 0x40}, - {0x5c5a, 0x20}, - {0x5c5b, 0x00}, - {0x5c5c, 0x00}, - {0x5c5d, 0x80}, - {0x5c5e, 0x00}, - {0x5c5f, 0x00}, - {0x5c60, 0x00}, - {0x5c61, 0x00}, - {0x5c62, 0x00}, - {0x5c63, 0x00}, - {0x5c64, 0x00}, - {0x5c65, 0x00}, - {0x5c66, 0x00}, - {0x5cc9, 0x80}, - {0x5cca, 0x80}, - {0x5ccb, 0x80}, - {0x5ccc, 0x80}, - {0x5ccd, 0x80}, - {0x5cce, 0x80}, - {0x5ccf, 0x80}, - {0x5cd0, 0x80}, - {0x5cd1, 0x80}, - {0x5cd2, 0x60}, - {0x5cd3, 0x80}, - {0x5cd4, 0x80}, - {0x5cd5, 0x80}, - {0x5cd6, 0x60}, - {0x5cd7, 0x40}, - {0x5cd8, 0x80}, - {0x5cd9, 0x80}, - {0x5cda, 0x80}, - {0x5cdb, 0x40}, - {0x5cdc, 0x20}, - {0x5cdd, 0x80}, - {0x5cde, 0x80}, - {0x5cdf, 0x80}, - {0x5ce0, 0x20}, - {0x5ce1, 0x00}, - {0x5ce2, 0x80}, - {0x5ce3, 0x80}, - {0x5ce4, 0x80}, - {0x5ce5, 0x00}, - {0x5ce6, 0x00}, - {0x5d74, 0x01}, - {0x5d75, 0x00}, - {0x5d1f, 0x81}, - {0x5d11, 0x00}, - {0x5d12, 0x10}, - {0x5d13, 0x10}, - {0x5d15, 0x05}, - {0x5d16, 0x05}, - {0x5d17, 0x05}, - {0x5d08, 0x03}, - {0x5d09, 0xb6}, - {0x5d0a, 0x03}, - {0x5d0b, 0xb6}, - {0x5d18, 0x03}, - {0x5d19, 0xb6}, - {0x5d62, 0x01}, - {0x5d40, 0x02}, - {0x5d41, 0x01}, - {0x5d63, 0x1f}, - {0x5d64, 0x00}, - {0x5d65, 0x80}, - {0x5d56, 0x00}, - {0x5d57, 0x20}, - {0x5d58, 0x00}, - {0x5d59, 0x20}, - {0x5d5a, 0x00}, - {0x5d5b, 0x0c}, - {0x5d5c, 0x02}, - {0x5d5d, 0x40}, - {0x5d5e, 0x02}, - {0x5d5f, 0x40}, - {0x5d60, 0x03}, - {0x5d61, 0x40}, - {0x5d4a, 0x02}, - {0x5d4b, 0x40}, - {0x5d4c, 0x02}, - {0x5d4d, 0x40}, - {0x5d4e, 0x02}, - {0x5d4f, 0x40}, - {0x5d50, 0x18}, - {0x5d51, 0x80}, - {0x5d52, 0x18}, - {0x5d53, 0x80}, - {0x5d54, 0x18}, - {0x5d55, 0x80}, - {0x5d46, 0x20}, - {0x5d47, 0x00}, - {0x5d48, 0x22}, - {0x5d49, 0x00}, - {0x5d42, 0x20}, - {0x5d43, 0x00}, - {0x5d44, 0x22}, - {0x5d45, 0x00}, - {0x5004, 0x1e}, - {0x4221, 0x03}, - {0x380e, 0x02}, - {0x380f, 0xae}, - {0x380c, 0x04}, - {0x380d, 0x47}, - {0x384c, 0x02}, - {0x384d, 0x0d}, - {0x388c, 0x02}, - {0x388d, 0x2b}, - {0x420e, 0x54}, - {0x420f, 0xa0}, - {0x4210, 0xca}, - {0x4211, 0xf2}, - {0x507a, 0x5f}, - {0x507b, 0x46}, - {0x3802, 0x00}, - {0x3803, 0x68}, - {0x3806, 0x04}, - {0x3807, 0xa7}, - {0x380a, 0x04}, - {0x380b, 0x38}, - {0x3812, 0x00}, - {0x3813, 0x04}, - {0x380c, 0x08}, - {0x380d, 0x8e}, - {0x384c, 0x04}, - {0x384d, 0x1a}, - {0x388c, 0x04}, - {0x388d, 0x56}, - {0x0304, 0x00}, - {0x0305, 0xf9}, - {0x4837, 0x10}, - {0x0408, 0x78}, - {0x0409, 0x00}, - {0x040a, 0xd1}, - {0x040b, 0x1e}, - {0x040c, 0x2e}, - {0x040d, 0x44}, - {0x040e, 0x0c}, - +static const struct regval ox03c10_1920x1080_30fps_linear_lcg_raw10_mipi996[] = { {0x4221, 0x05}, {0x5002, 0x3f}, {0x5003, 0x2a}, @@ -4915,6 +3848,54 @@ static const struct regval ox03c10_1920x1080_30fps_linear_raw10_mipi996[] = { {REG_NULL, 0xff}, }; +static const struct regval ox03c10_1920x1080_30fps_linear_hcg_raw10_mipi996[] = { + {0x4221, 0x05}, + {0x5002, 0x3f}, + {0x5003, 0x2a}, + {0x502c, 0x0f}, + {0x504b, 0x04}, + {0x5053, 0x03}, + {0x505b, 0x02}, + {0x5063, 0x01}, + {0x5074, 0x49}, + {0x4319, 0x43}, + {0x431a, 0x01}, + + {REG_NULL, 0xff}, +}; + +static const struct regval ox03c10_1920x1080_30fps_linear_vs_raw10_mipi996[] = { + {0x4221, 0x05}, + {0x5002, 0x3f}, + {0x5003, 0x2a}, + {0x502c, 0x0f}, + {0x504b, 0x04}, + {0x5053, 0x03}, + {0x505b, 0x02}, + {0x5063, 0x01}, + {0x5074, 0x79}, + {0x4319, 0x43}, + {0x431a, 0x01}, + + {REG_NULL, 0xff}, +}; + +static const struct regval ox03c10_1920x1080_30fps_linear_spd_raw10_mipi996[] = { + {0x4221, 0x05}, + {0x5002, 0x3f}, + {0x5003, 0x2a}, + {0x502c, 0x0f}, + {0x504b, 0x04}, + {0x5053, 0x03}, + {0x505b, 0x02}, + {0x5063, 0x01}, + {0x5074, 0x69}, + {0x4319, 0x43}, + {0x431a, 0x01}, + + {REG_NULL, 0xff}, +}; + static struct rkmodule_hdr_compr ox03c10_hdr_compr_12 = { .point = 30, .src_bit = 20, @@ -4957,13 +3938,78 @@ static const struct ox03c10_mode supported_modes[] = { .exp_def = 0x0200, .hts_def = 0x10fe, .vts_def = 0x02ae * 2, - .reg_list = ox03c10_1920x1080_30fps_linear_raw10_mipi996, + .reg_list = ox03c10_1920x1080_30fps_HDR3_LFM_PWL16_mipi996, + .linear_reg_list = ox03c10_1920x1080_30fps_linear_lcg_raw10_mipi996, .hdr_mode = NO_HDR, .hdr_compr = NULL, .bpp = 10, .mipi_freq_idx = 1, .vc[PAD0] = 0, .exp_mode = EXP_NORMAL, + .single_mode = EXPAND_SINGLE_LCG, + }, + { + .bus_fmt = MEDIA_BUS_FMT_SBGGR10_1X10, + .width = 1920, + .height = 1080, + .max_fps = { + .numerator = 10000, + .denominator = 300000, + }, + .exp_def = 0x0200, + .hts_def = 0x10fe, + .vts_def = 0x02ae * 2, + .reg_list = ox03c10_1920x1080_30fps_HDR3_LFM_PWL16_mipi996, + .linear_reg_list = ox03c10_1920x1080_30fps_linear_hcg_raw10_mipi996, + .hdr_mode = NO_HDR, + .hdr_compr = NULL, + .bpp = 10, + .mipi_freq_idx = 1, + .vc[PAD0] = 0, + .exp_mode = EXP_NORMAL, + .single_mode = EXPAND_SINGLE_HCG, + }, + { + .bus_fmt = MEDIA_BUS_FMT_SBGGR10_1X10, + .width = 1920, + .height = 1080, + .max_fps = { + .numerator = 10000, + .denominator = 300000, + }, + .exp_def = 0x0200, + .hts_def = 0x10fe, + .vts_def = 0x02ae * 2, + .reg_list = ox03c10_1920x1080_30fps_HDR3_LFM_PWL16_mipi996, + .linear_reg_list = ox03c10_1920x1080_30fps_linear_vs_raw10_mipi996, + .hdr_mode = NO_HDR, + .hdr_compr = NULL, + .bpp = 10, + .mipi_freq_idx = 1, + .vc[PAD0] = 0, + .exp_mode = EXP_NORMAL, + .single_mode = EXPAND_SINGLE_VS, + }, + { + .bus_fmt = MEDIA_BUS_FMT_SBGGR10_1X10, + .width = 1920, + .height = 1080, + .max_fps = { + .numerator = 10000, + .denominator = 300000, + }, + .exp_def = 0x0200, + .hts_def = 0x10fe, + .vts_def = 0x02ae * 2, + .reg_list = ox03c10_1920x1080_30fps_HDR3_LFM_PWL16_mipi996, + .linear_reg_list = ox03c10_1920x1080_30fps_linear_spd_raw10_mipi996, + .hdr_mode = NO_HDR, + .hdr_compr = NULL, + .bpp = 10, + .mipi_freq_idx = 1, + .vc[PAD0] = 0, + .exp_mode = EXP_NORMAL, + .single_mode = EXPAND_SINGLE_SPD, }, { .bus_fmt = MEDIA_BUS_FMT_SBGGR12_1X12, @@ -5020,7 +4066,7 @@ static const struct ox03c10_mode supported_modes[] = { .hts_def = 0x10fe, .vts_def = 0x02ae * 2, .reg_list = ox03c10_1920x1080_30fps_HDR3_SPD_PWL12_mipi600, - .hdr_mode = NO_HDR, + .hdr_mode = HDR_COMPR, .hdr_compr = &ox03c10_hdr_compr_12, .bpp = 12, .mipi_freq_idx = 0, @@ -5767,6 +4813,33 @@ static int ox03c10_select_cmps_mode(struct ox03c10 *ox03c10, u32 cmps_mode) return ret; } +static int ox03c10_select_expand_single_mode(struct ox03c10 *ox03c10, u32 single_mode) +{ + int ret = -EINVAL; + u32 i, h, w, hdr_mode; + + w = ox03c10->cur_mode->width; + h = ox03c10->cur_mode->height; + hdr_mode = ox03c10->cur_mode->hdr_mode; + for (i = 0; i < ARRAY_SIZE(supported_modes); i++) { + if (w == supported_modes[i].width && + h == supported_modes[i].height && + supported_modes[i].hdr_mode == hdr_mode) { + if (supported_modes[i].single_mode == single_mode) { + ox03c10->cur_mode = &supported_modes[i]; + w = ox03c10->cur_mode->hts_def - ox03c10->cur_mode->width; + h = ox03c10->cur_mode->vts_def - ox03c10->cur_mode->height; + __v4l2_ctrl_modify_range(ox03c10->hblank, w, w, 1, w); + __v4l2_ctrl_modify_range(ox03c10->vblank, h, + OX03C10_VTS_MAX - ox03c10->cur_mode->height, 1, h); + ret = 0; + break; + } + } + } + return ret; +} + static long ox03c10_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { struct ox03c10 *ox03c10 = to_ox03c10(sd); @@ -5873,6 +4946,9 @@ static long ox03c10_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) case RKMODULE_SET_CMPS_MODE: ret = ox03c10_select_cmps_mode(ox03c10, *(u32 *)arg); break; + case RKMODULE_SET_EXPAND_SINGLE_MODE: + ret = ox03c10_select_expand_single_mode(ox03c10, *(u32 *)arg); + break; default: ret = -ENOIOCTLCMD; break; @@ -5900,6 +4976,7 @@ static long ox03c10_compat_ioctl32(struct v4l2_subdev *sd, struct rkmodule_wb_gain_info *wb_gain_info; struct rkmodule_blc_info *blc_info; u32 cmps_mode; + u32 single_mode; switch (cmd) { case RKMODULE_GET_MODULE_INFO: @@ -6106,6 +5183,11 @@ static long ox03c10_compat_ioctl32(struct v4l2_subdev *sd, return -EFAULT; ret = ox03c10_ioctl(sd, cmd, &cmps_mode); break; + case RKMODULE_SET_EXPAND_SINGLE_MODE: + if (copy_from_user(&single_mode, up, sizeof(u32))) + return -EFAULT; + ret = ox03c10_ioctl(sd, cmd, &single_mode); + break; default: ret = -ENOIOCTLCMD; break; @@ -6119,10 +5201,34 @@ static int __ox03c10_start_stream(struct ox03c10 *ox03c10) { int ret; - dev_info(&ox03c10->client->dev, "write: %d s cur_mode->reg_list done !\n", ox03c10->cur_mode->hdr_operating_mode); + if (ox03c10->cur_mode->hdr_mode == NO_HDR) { + if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_HCG) + dev_info(&ox03c10->client->dev, "%s mode: LINEAR_HCG\n", __func__); + else if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_LCG) + dev_info(&ox03c10->client->dev, "%s mode: LINEAR_LCG\n", __func__); + else if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_VS) + dev_info(&ox03c10->client->dev, "%s mode: LINEAR_VS\n", __func__); + else if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_SPD) + dev_info(&ox03c10->client->dev, "%s mode: LINEAR_SPD\n", __func__); + } else { + if (ox03c10->cur_mode->hdr_operating_mode == OX03C10_HDR3_DCG_VS_12BIT) + dev_info(&ox03c10->client->dev, "%s mode: HDR3_DCG_VS_12BIT\n", __func__); + else if (ox03c10->cur_mode->hdr_operating_mode == OX03C10_HDR3_DCG_SPD_12BIT) + dev_info(&ox03c10->client->dev, "%s mode: HDR3_DCG_SPD_12BIT\n", __func__); + else if (ox03c10->cur_mode->hdr_operating_mode == OX03C10_HDR3_DCG_VS_LFM_16BIT) + dev_info(&ox03c10->client->dev, "%s mode: HDR3_DCG_VS_16BIT\n", __func__); + } + ret = ox03c10_write_array(ox03c10->client, ox03c10->cur_mode->reg_list); if (ret) return ret; + + if (ox03c10->cur_mode->hdr_mode == NO_HDR) { + ret = ox03c10_write_array(ox03c10->client, ox03c10->cur_mode->linear_reg_list); + if (ret) + return ret; + } + /* In case these controls are set before streaming */ ret = __v4l2_ctrl_handler_setup(&ox03c10->ctrl_handler); if (ret) @@ -6404,6 +5510,8 @@ static int ox03c10_set_ctrl(struct v4l2_ctrl *ctrl) u32 val = 0; u32 again = 16, dgain = 1024; s64 exposure_max = 0; + u16 exp_reg; + u16 again_reg, dgain_reg; /* Propagate change of current control to all related controls */ switch (ctrl->id) { @@ -6428,8 +5536,20 @@ static int ox03c10_set_ctrl(struct v4l2_ctrl *ctrl) ret |= ox03c10_write_reg(ox03c10->client, OX03C10_GROUP_UPDATE_ADDRESS, OX03C10_REG_VALUE_08BIT, OX03C10_GROUP_UPDATE_START_DATA); + if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_LCG || + ox03c10->cur_mode->single_mode == EXPAND_SINGLE_HCG) { + exp_reg = OX03C10_REG_EXPOSURE_DCG_H; + } else if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_VS) { + exp_reg = OX03C10_REG_EXPOSURE_VS_H; + } else if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_SPD) { + exp_reg = OX03C10_REG_EXPOSURE_SPD_H; + } else { + dev_err(&client->dev, "%s cur single mode not support, pls check it", + __func__); + break; + } ret |= ox03c10_write_reg(ox03c10->client, - OX03C10_REG_EXPOSURE_DCG_H, + exp_reg, OX03C10_REG_VALUE_16BIT, ctrl->val); if (ox03c10->streaming) { @@ -6475,14 +5595,29 @@ static int ox03c10_set_ctrl(struct v4l2_ctrl *ctrl) OX03C10_REG_VALUE_08BIT, OX03C10_GROUP1_UPDATE_START_DATA); - // lcg real gain + if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_LCG) { + again_reg = OX03C10_REG_AGAIN_LCG_H; + dgain_reg = OX03C10_REG_DGAIN_LCG_H; + } else if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_HCG) { + again_reg = OX03C10_REG_AGAIN_HCG_H; + dgain_reg = OX03C10_REG_DGAIN_HCG_H; + } else if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_VS) { + again_reg = OX03C10_REG_AGAIN_VS_H; + dgain_reg = OX03C10_REG_DGAIN_VS_H; + } else if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_SPD) { + again_reg = OX03C10_REG_AGAIN_SPD_H; + dgain_reg = OX03C10_REG_DGAIN_SPD_H; + } else { + dev_err(&client->dev, "%s cur single mode not support, pls check it", + __func__); + break; + } ret |= ox03c10_write_reg(ox03c10->client, - OX03C10_REG_AGAIN_LCG_H, + again_reg, OX03C10_REG_VALUE_16BIT, (again << 4) & 0xff0); - // lcg digital gain ret |= ox03c10_write_reg(ox03c10->client, - OX03C10_REG_DGAIN_LCG_H, + dgain_reg, OX03C10_REG_VALUE_24BIT, (dgain << 6) & 0xfffc0); if (ox03c10->streaming) {