[COMMON] fimc-is2: updated 2P6 sensor files (code sync)
authorEunyoung Lee <ey470.lee@samsung.com>
Thu, 5 Jul 2018 09:47:03 +0000 (18:47 +0900)
committerSunyoung Kang <sy0816.kang@samsung.com>
Mon, 23 Jul 2018 08:05:37 +0000 (17:05 +0900)
PR JIRA ID : CPR-38

Change-Id: I5473c467a4c04d69e65ccc5d9f850185e1b901e9
Signed-off-by: Eunyoung Lee <ey470.lee@samsung.com>
drivers/media/platform/exynos/fimc-is2/sensor/module_framework/cis/fimc-is-cis-2p6-setA.h
drivers/media/platform/exynos/fimc-is2/sensor/module_framework/cis/fimc-is-cis-2p6-setB.h
drivers/media/platform/exynos/fimc-is2/sensor/module_framework/cis/fimc-is-cis-2p6.c
drivers/media/platform/exynos/fimc-is2/sensor/module_framework/cis/fimc-is-cis-2p6.h
drivers/media/platform/exynos/fimc-is2/sensor/module_framework/modules/fimc-is-device-module-2p6.c

index 66350f46a08be87a3337110aafb5a4afded96cc6..3eaf6380438a027aabf5dd800c1643a32ba7bea8 100644 (file)
 #include "fimc-is-cis.h"
 #include "fimc-is-cis-2p6.h"
 
-const u32 sensor_2p6_setfile_A_Global[] = {
-/*TODO*/
-};
+/* This setfile A is PDAF setting */
+/* Reference : S5K2P6SX_EVT0_Ver_0.12_20171026.xlsx */
 
-/* 4:3 16x10 margin, EXTCLK 26Mhz */
-const u32 sensor_2p6_setfile_A_4608x3456_30fps[] = {
+const u32 sensor_2p6_setfile_A_Global[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
        0x0100, 0x0000, 0x02,
@@ -52,705 +50,366 @@ const u32 sensor_2p6_setfile_A_4608x3456_30fps[] = {
        0x3856, 0x0008, 0x02,
        0x3858, 0x0008, 0x02,
        0x385A, 0x0008, 0x02,
-       0x30CE, 0x0000, 0x02,
        0xF440, 0x002F, 0x02,
-       0x37F6, 0x0021, 0x02,
-       0x3198, 0x0007, 0x02,
-       0x319A, 0x0100, 0x02,
        0x319C, 0x0130, 0x02,
-       0x3056, 0x0100, 0x02,
        0x602A, 0x1266, 0x02,
        0x6F12, 0x0001, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x602A, 0x1BB0, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
        0x30D4, 0x0001, 0x02,
-       0x30D8, 0x0100, 0x02,
+       0x30D6, 0x002B, 0x02,
        0xB138, 0x0000, 0x02,
-       0x31B0, 0x0008, 0x02,
-       0x0340, 0x0E1A, 0x02,
-       0x0342, 0x1428, 0x02,
        0x0344, 0x0018, 0x02,
-       0x0346, 0x0010, 0x02,
        0x0348, 0x1217, 0x02,
-       0x034A, 0x0D8F, 0x02,
-       0x034C, 0x1200, 0x02,
-       0x034E, 0x0D80, 0x02,
-       0x0900, 0x0011, 0x02,
        0x0380, 0x0001, 0x02,
        0x0382, 0x0001, 0x02,
        0x0384, 0x0001, 0x02,
-       0x0386, 0x0001, 0x02,
-       0x0400, 0x0000, 0x02,
-       0x0404, 0x0000, 0x02,
        0x0408, 0x0000, 0x02,
        0x040A, 0x0000, 0x02,
        0x0136, 0x1A00, 0x02,
        0x0300, 0x0003, 0x02,
        0x0302, 0x0001, 0x02,
        0x0304, 0x0006, 0x02,
-       0x0306, 0x0061, 0x02,
-       0x1130, 0x440E, 0x02,
        0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
        0x300A, 0x0000, 0x02,
        0x0200, 0x0200, 0x02,
-       0x0202, 0x0E10, 0x02,
-       0x021E, 0x0E10, 0x02,
        0x0204, 0x0080, 0x02,
        0x37C0, 0x0002, 0x02,
        0x37C2, 0x0103, 0x02,
        0x3004, 0x0003, 0x02,
        0x0114, 0x0300, 0x02,
        0x304C, 0x0000, 0x02,
-       0x0216, 0x0100, 0x02,
        0x3AC4, 0x0100, 0x02,
        0x3E04, 0x0100, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
+       0x3B02, 0x000F, 0x02,
+       0x3B34, 0x0000, 0x02,
+       0x3AD0, 0x0066, 0x02,
+       0x3B0C, 0x0000, 0x02,
+       0x3B3E, 0x001E, 0x02,
+       0x3ADA, 0x0085, 0x02,
+       0x3B16, 0x000F, 0x02,
+       0x3B48, 0x0046, 0x02,
+       0x3AE4, 0x00AD, 0x02,
+       0x3B20, 0xFFE2, 0x02,
+       0x3B52, 0x0000, 0x02,
+       0x3AEE, 0x0085, 0x02,
+       0x3E0E, 0x0FEF, 0x02,
+       0x3E18, 0x1010, 0x02,
+       0x3E22, 0x1018, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 16:9 16x10 margin, EXTCLK 26Mhz */
-const u32 sensor_2p6_setfile_A_4608x2592_30fps[] = {
+/* 1. 4608 x 3456 / No-Bin, 4:3, 30fps / Support PDAF Tail, EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_A_4608x3456_30fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
+       0x30CE, 0x0000, 0x02,
+       0x37F6, 0x0021, 0x02,
+       0x3198, 0x0007, 0x02,
+       0x319A, 0x0100, 0x02,
+       0x3056, 0x0100, 0x02,
+       0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
+       0x0B0E, 0x0100, 0x02,
+       0x30D8, 0x0100, 0x02,
+       0x31B0, 0x0008, 0x02,
+       0x0340, 0x0E1A, 0x02,
+       0x0342, 0x1428, 0x02,
+       0x0346, 0x0010, 0x02,
+       0x034A, 0x0D8F, 0x02,
+       0x034C, 0x1200, 0x02,
+       0x034E, 0x0D80, 0x02,
+       0x0900, 0x0011, 0x02,
+       0x0386, 0x0001, 0x02,
+       0x0400, 0x0000, 0x02,
+       0x0404, 0x0000, 0x02,
+       0x0306, 0x0061, 0x02,
+       0x1130, 0x440E, 0x02,
+       0x030E, 0x006F, 0x02,
+       0x0202, 0x0E10, 0x02,
+       0x021E, 0x0E10, 0x02,
+       0x0216, 0x0000, 0x02,
+       0x6214, 0x7970, 0x02,
+};
+
+/* 2. 4608 x 2624 / No-Bin, 16:9, 30fps / Support PDAF Tail , EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_A_4608x2624_30fps[] = {
+       0xFCFC, 0x4000, 0x02,
+       0x6028, 0x2000, 0x02,
+       0x6214, 0x7971, 0x02,
+       0x6218, 0x7150, 0x02,
        0x30CE, 0x0000, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0021, 0x02,
        0x3198, 0x0007, 0x02,
        0x319A, 0x0100, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0100, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
+       0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
+       0x0B0E, 0x0100, 0x02,
+       0x30D8, 0x0100, 0x02,
+       0x31B0, 0x0008, 0x02,
+       0x0340, 0x0E1A, 0x02,
+       0x0342, 0x1428, 0x02,
+       0x0346, 0x01B0, 0x02,
+       0x034A, 0x0BEF, 0x02,
+       0x034C, 0x1200, 0x02,
+       0x034E, 0x0A40, 0x02,
+       0x0900, 0x0011, 0x02,
+       0x0386, 0x0001, 0x02,
+       0x0400, 0x0000, 0x02,
+       0x0404, 0x0000, 0x02,
+       0x0306, 0x0061, 0x02,
+       0x1130, 0x440E, 0x02,
+       0x030E, 0x006F, 0x02,
+       0x0202, 0x0E10, 0x02,
+       0x021E, 0x0E10, 0x02,
+       0x0216, 0x0000, 0x02,
+       0x6214, 0x7970, 0x02,
+};
+
+/* 3. 4608 x 2240 / No-Bin, 18.5:9, 30fps / Support PDAF Tail  , EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_A_4608x2240_30fps[] = {
+       0xFCFC, 0x4000, 0x02,
+       0x6028, 0x2000, 0x02,
+       0x6214, 0x7971, 0x02,
+       0x6218, 0x7150, 0x02,
+       0x30CE, 0x0000, 0x02,
+       0x37F6, 0x0021, 0x02,
+       0x3198, 0x0007, 0x02,
+       0x319A, 0x0100, 0x02,
+       0x3056, 0x0100, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
-       0x30D4, 0x0001, 0x02,
+       0x0B0E, 0x0100, 0x02,
        0x30D8, 0x0100, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0008, 0x02,
        0x0340, 0x0E1A, 0x02,
        0x0342, 0x1428, 0x02,
-       0x0344, 0x0018, 0x02,
-       0x0346, 0x01C0, 0x02,
-       0x0348, 0x1217, 0x02,
-       0x034A, 0x0BDF, 0x02,
+       0x0346, 0x0270, 0x02,
+       0x034A, 0x0B2F, 0x02,
        0x034C, 0x1200, 0x02,
-       0x034E, 0x0A20, 0x02,
+       0x034E, 0x08C0, 0x02,
        0x0900, 0x0011, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0001, 0x02,
        0x0400, 0x0000, 0x02,
        0x0404, 0x0000, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0061, 0x02,
        0x1130, 0x440E, 0x02,
-       0x030C, 0x0004, 0x02,
        0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
        0x0202, 0x0E10, 0x02,
        0x021E, 0x0E10, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
-       0x0216, 0x0100, 0x02,
-       0x3AC4, 0x0100, 0x02,
-       0x3E04, 0x0100, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
+       0x0216, 0x0000, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 4:3 16x10 margin, EXTCLK 26Mhz */
+/* 4. 2304 x 1728 / 2-Bin, 4:3, 30fps / Support PDAF Tail, EXTCLK 26Mhz */
 const u32 sensor_2p6_setfile_A_2304x1728_30fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0031, 0x02,
        0x3198, 0x0066, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0100, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x6F12, 0x0000, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
-       0x30D4, 0x0001, 0x02,
+       0x0B0E, 0x0100, 0x02,
        0x30D8, 0x0100, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0004, 0x02,
        0x0340, 0x0E1A, 0x02,
        0x0342, 0x1428, 0x02,
-       0x0344, 0x0018, 0x02,
        0x0346, 0x0010, 0x02,
-       0x0348, 0x1217, 0x02,
        0x034A, 0x0D8f, 0x02,
        0x034C, 0x0900, 0x02,
        0x034E, 0x06C0, 0x02,
        0x0900, 0x0112, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0003, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0020, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0061, 0x02,
        0x1130, 0x440E, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x0E10, 0x02,
        0x021E, 0x0E10, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 4:3 16x10 margin, EXTCLK 26Mhz */
+/* 5. 2304 x 1728 / 2-Bin, 4:3, 15fps / Support PDAF Tail, EXTCLK 26Mhz */
 const u32 sensor_2p6_setfile_A_2304x1728_15fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0031, 0x02,
        0x3198, 0x0066, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0100, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x6F12, 0x0000, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
-       0x30D4, 0x0001, 0x02,
+       0x0B0E, 0x0100, 0x02,
        0x30D8, 0x0100, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0004, 0x02,
        0x0340, 0x1C34, 0x02,
        0x0342, 0x1428, 0x02,
-       0x0344, 0x0018, 0x02,
        0x0346, 0x0010, 0x02,
-       0x0348, 0x1217, 0x02,
        0x034A, 0x0D8f, 0x02,
        0x034C, 0x0900, 0x02,
        0x034E, 0x06C0, 0x02,
        0x0900, 0x0112, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0003, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0020, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0061, 0x02,
        0x1130, 0x440E, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x1C2A, 0x02,
        0x021E, 0x1C2A, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 16:9 16x10 margin, EXTCLK 26Mhz */
-const u32 sensor_2p6_setfile_A_2304x1296_30fps[] = {
+/* 6. 2304 x 1312 / 2-Bin, 16:9, 30fps / Support Tail Mode, EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_A_2304x1312_30fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0031, 0x02,
        0x3198, 0x0066, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0100, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
+       0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
+       0x0B0E, 0x0100, 0x02,
+       0x30D8, 0x0100, 0x02,
+       0x31B0, 0x0004, 0x02,
+       0x0340, 0x0AAA, 0x02,
+       0x0342, 0x1AA8, 0x02,
+       0x0346, 0x01B0, 0x02,
+       0x034A, 0x0BEF, 0x02,
+       0x034C, 0x0900, 0x02,
+       0x034E, 0x0520, 0x02,
+       0x0900, 0x0112, 0x02,
+       0x0386, 0x0003, 0x02,
+       0x0400, 0x0001, 0x02,
+       0x0404, 0x0020, 0x02,
+       0x0306, 0x0061, 0x02,
+       0x1130, 0x440E, 0x02,
+       0x030E, 0x0068, 0x02,
+       0x0202, 0x0E10, 0x02,
+       0x021E, 0x0E10, 0x02,
+       0x0216, 0x0000, 0x02,
+       0x6214, 0x7970, 0x02,
+};
+
+/* 7. 2304 x 1120 / 2-Bin, 18.5:9, 30fps / Support PDAF Tail , EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_A_2304x1120_30fps[] = {
+       0xFCFC, 0x4000, 0x02,
+       0x6028, 0x2000, 0x02,
+       0x6214, 0x7971, 0x02,
+       0x6218, 0x7150, 0x02,
+       0x30CE, 0x0040, 0x02,
+       0x37F6, 0x0031, 0x02,
+       0x3198, 0x0066, 0x02,
+       0x319A, 0x0000, 0x02,
+       0x3056, 0x0100, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
-       0x30D4, 0x0001, 0x02,
+       0x0B0E, 0x0100, 0x02,
        0x30D8, 0x0100, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0004, 0x02,
-       0x0340, 0x0E1A, 0x02,
-       0x0342, 0x1428, 0x02,
-       0x0344, 0x0018, 0x02,
-       0x0346, 0x01C0, 0x02,
-       0x0348, 0x1217, 0x02,
-       0x034A, 0x0BDF, 0x02,
+       0x0340, 0x0937, 0x02,
+       0x0342, 0x1ED8, 0x02,
+       0x0346, 0x0270, 0x02,
+       0x034A, 0x0B2F, 0x02,
        0x034C, 0x0900, 0x02,
-       0x034E, 0x0510, 0x02,
+       0x034E, 0x0460, 0x02,
        0x0900, 0x0112, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0003, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0020, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0061, 0x02,
        0x1130, 0x440E, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x0E10, 0x02,
        0x021E, 0x0E10, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 4:3 4x4 margin, EXTCLK 26Mhz */
+/* 8. 1152 x 864 / 4-Bin, 4:3, 120fps, EXTCLK 26Mhz */
 const u32 sensor_2p6_setfile_A_1152x864_120fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0001, 0x02,
        0x3198, 0x00CC, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0000, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x6F12, 0x0000, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0100, 0x02,
        0x0B0E, 0x0100, 0x02,
-       0x30D4, 0x0001, 0x02,
        0x30D8, 0x0000, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0002, 0x02,
        0x0340, 0x0398, 0x02,
        0x0342, 0x1438, 0x02,
-       0x0344, 0x0010, 0x02,
        0x0346, 0x0010, 0x02,
-       0x0348, 0x1217, 0x02,
        0x034A, 0x0D8F, 0x02,
        0x034C, 0x0480, 0x02,
        0x034E, 0x0360, 0x02,
        0x0900, 0x0114, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0007, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0040, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0063, 0x02,
        0x1130, 0x4411, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x038E, 0x02,
        0x021E, 0x038E, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 16:9 4x4 margin, EXTCLK 26Mhz */
-const u32 sensor_2p6_setfile_A_1152x648_120fps[] = {
+/* 9. 1152 x 656 / 4-Bin, 16:9, 120fps, EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_A_1152x656_120fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0001, 0x02,
        0x3198, 0x00CC, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0000, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x6F12, 0x0000, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0100, 0x02,
        0x0B0E, 0x0100, 0x02,
-       0x30D4, 0x0001, 0x02,
        0x30D8, 0x0000, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0002, 0x02,
        0x0340, 0x0398, 0x02,
        0x0342, 0x1438, 0x02,
-       0x0344, 0x0018, 0x02,
-       0x0346, 0x01C0, 0x02,
-       0x0348, 0x1217, 0x02,
-       0x034A, 0x0BDF, 0x02,
+       0x0346, 0x01B0, 0x02,
+       0x034A, 0x0BEF, 0x02,
        0x034C, 0x0480, 0x02,
-       0x034E, 0x0288, 0x02,
+       0x034E, 0x0290, 0x02,
        0x0900, 0x0114, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0007, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0040, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0063, 0x02,
        0x1130, 0x4411, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x038E, 0x02,
        0x021E, 0x038E, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
@@ -763,7 +422,7 @@ const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_4608x3456_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_4608x2592_30fps = {
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_4608x2624_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        1443 * 1000 * 1000, /* mipi_datarate */
        560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
@@ -771,7 +430,7 @@ const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_4608x2592_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_2304x1728_30fps = {
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_4608x2240_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        1443 * 1000 * 1000, /* mipi_datarate */
        560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
@@ -779,47 +438,62 @@ const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_2304x1728_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_2304x1728_30fps = {
+       EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
+       1352 * 1000 * 1000, /* mipi_datarate */
+       560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
+       0x0E1A, /* frame_length_lines   (0x0340) */
+       0x1428, /* line_length_pck              (0x0342) */
+};
+
 const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_2304x1728_15fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
-       1443 * 1000 * 1000, /* mipi_datarate */
+       1352 * 1000 * 1000, /* mipi_datarate */
        560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
        0x1C34, /* frame_length_lines   (0x0340) */
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_2304x1296_30fps = {
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_2304x1312_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
-       1443 * 1000 * 1000, /* mipi_datarate */
+       1352 * 1000 * 1000, /* mipi_datarate */
        560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
-       0x0E1A, /* frame_length_lines   (0x0340) */
-       0x1428, /* line_length_pck              (0x0342) */
+       0x0AAA, /* frame_length_lines   (0x0340) */
+       0x1AA8, /* line_length_pck              (0x0342) */
+};
+
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_2304x1120_30fps = {
+       EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
+       1352 * 1000 * 1000, /* mipi_datarate */
+       560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
+       0x0937, /* frame_length_lines   (0x0340) */
+       0x1ED8, /* line_length_pck              (0x0342) */
 };
 
 const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_1152x864_120fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
-       1443 * 1000 * 1000, /* mipi_datarate */
+       1352 * 1000 * 1000, /* mipi_datarate */
        572000000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
        0x0398, /* frame_length_lines   (0x0340) */
        0x1438, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_1152x648_120fps = {
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_A_1152x656_120fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
-       1443 * 1000 * 1000, /* mipi_datarate */
+       1352 * 1000 * 1000, /* mipi_datarate */
        572000000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
        0x0398, /* frame_length_lines   (0x0340) */
        0x1438, /* line_length_pck              (0x0342) */
 };
-
 #else
-const struct sensor_pll_info sensor_2p6_pllinfo_A_4608x3468_30fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_A_4608x3456_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
        0x6F, /* secnd_pll_multiplier   (0x030E) */
@@ -827,14 +501,14 @@ const struct sensor_pll_info sensor_2p6_pllinfo_A_4608x3468_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info sensor_2p6_pllinfo_A_4608x2592_30fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_A_4608x2624_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
        0x6F, /* secnd_pll_multiplier   (0x030E) */
@@ -842,18 +516,33 @@ const struct sensor_pll_info sensor_2p6_pllinfo_A_4608x2592_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info sensor_2p6_pllinfo_A_2304x1728_30fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_A_4608x2240_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
        0x6F, /* secnd_pll_multiplier   (0x030E) */
-       0x1C34, /* frame_length_lines   (0x0340) */
+       0x0E1A, /* frame_length_lines   (0x0340) */
+       0x1428, /* line_length_pck              (0x0342) */
+};
+
+const struct sensor_pll_info sensor_2p6_pllinfo_A_2304x1728_30fps = {
+       EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
+       0x03, /* vt_pix_clk_div (0x0300) */
+       0x01, /* vt_sys_clk_div (0x0302) */
+       0x06, /* pre_pll_clk_div(0x0304) */
+       0x61, /* pll_multiplier (0x0306) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
+
+       0x04, /* secnd_pre_pll_clk_div(0x030C) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
+       0x0E1A, /* frame_length_lines   (0x0340) */
        0x1428, /* line_length_pck              (0x0342) */
 };
 
@@ -863,28 +552,43 @@ const struct sensor_pll_info sensor_2p6_pllinfo_A_2304x1728_15fps = {
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
-       0x6F, /* secnd_pll_multiplier   (0x030E) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
        0x1C34, /* frame_length_lines   (0x0340) */
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info sensor_2p6_pllinfo_A_2304x1296_30fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_A_2304x1312_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
-       0x6F, /* secnd_pll_multiplier   (0x030E) */
-       0x0E1A, /* frame_length_lines   (0x0340) */
-       0x1428, /* line_length_pck              (0x0342) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
+       0x0AAA, /* frame_length_lines   (0x0340) */
+       0x1AA8, /* line_length_pck              (0x0342) */
+};
+
+const struct sensor_pll_info sensor_2p6_pllinfo_A_2304x1120_30fps = {
+       EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
+       0x03, /* vt_pix_clk_div (0x0300) */
+       0x01, /* vt_sys_clk_div (0x0302) */
+       0x06, /* pre_pll_clk_div(0x0304) */
+       0x61, /* pll_multiplier (0x0306) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
+
+       0x04, /* secnd_pre_pll_clk_div(0x030C) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
+       0x0937, /* frame_length_lines   (0x0340) */
+       0x1ED8, /* line_length_pck              (0x0342) */
 };
 
 const struct sensor_pll_info sensor_2p6_pllinfo_A_1152x864_120fps = {
@@ -893,26 +597,26 @@ const struct sensor_pll_info sensor_2p6_pllinfo_A_1152x864_120fps = {
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x63, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
-       0x6F, /* secnd_pll_multiplier   (0x030E) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
        0x0398, /* frame_length_lines   (0x0340) */
        0x1438, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info sensor_2p6_pllinfo_A_1152x648_120fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_A_1152x656_120fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x63, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
-       0x6F, /* secnd_pll_multiplier   (0x030E) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
        0x0398, /* frame_length_lines   (0x0340) */
        0x1438, /* line_length_pck              (0x0342) */
 };
@@ -921,38 +625,45 @@ const struct sensor_pll_info sensor_2p6_pllinfo_A_1152x648_120fps = {
 static const u32 *sensor_2p6_setfiles_A[] = {
        /* 16x12 margin */
        sensor_2p6_setfile_A_4608x3456_30fps,
-       sensor_2p6_setfile_A_4608x2592_30fps,
+       sensor_2p6_setfile_A_4608x2624_30fps,
+       sensor_2p6_setfile_A_4608x2240_30fps,
        sensor_2p6_setfile_A_2304x1728_30fps,
        sensor_2p6_setfile_A_2304x1728_15fps,
-       sensor_2p6_setfile_A_2304x1296_30fps,
+       sensor_2p6_setfile_A_2304x1312_30fps,
+       sensor_2p6_setfile_A_2304x1120_30fps,
        sensor_2p6_setfile_A_1152x864_120fps,
-       sensor_2p6_setfile_A_1152x648_120fps,
+       sensor_2p6_setfile_A_1152x656_120fps,
 };
 
 static const u32 sensor_2p6_setfile_A_sizes[] = {
        /* 16x12 margin */
        sizeof(sensor_2p6_setfile_A_4608x3456_30fps) / sizeof(sensor_2p6_setfile_A_4608x3456_30fps[0]),
-       sizeof(sensor_2p6_setfile_A_4608x2592_30fps) / sizeof(sensor_2p6_setfile_A_4608x2592_30fps[0]),
+       sizeof(sensor_2p6_setfile_A_4608x2624_30fps) / sizeof(sensor_2p6_setfile_A_4608x2624_30fps[0]),
+       sizeof(sensor_2p6_setfile_A_4608x2240_30fps) / sizeof(sensor_2p6_setfile_A_4608x2240_30fps[0]),
        sizeof(sensor_2p6_setfile_A_2304x1728_30fps) / sizeof(sensor_2p6_setfile_A_2304x1728_30fps[0]),
        sizeof(sensor_2p6_setfile_A_2304x1728_15fps) / sizeof(sensor_2p6_setfile_A_2304x1728_15fps[0]),
-       sizeof(sensor_2p6_setfile_A_2304x1296_30fps) / sizeof(sensor_2p6_setfile_A_2304x1296_30fps[0]),
+       sizeof(sensor_2p6_setfile_A_2304x1312_30fps) / sizeof(sensor_2p6_setfile_A_2304x1312_30fps[0]),
+       sizeof(sensor_2p6_setfile_A_2304x1120_30fps) / sizeof(sensor_2p6_setfile_A_2304x1120_30fps[0]),
        sizeof(sensor_2p6_setfile_A_1152x864_120fps) / sizeof(sensor_2p6_setfile_A_1152x864_120fps[0]),
-       sizeof(sensor_2p6_setfile_A_1152x648_120fps) / sizeof(sensor_2p6_setfile_A_1152x648_120fps[0]),
+       sizeof(sensor_2p6_setfile_A_1152x656_120fps) / sizeof(sensor_2p6_setfile_A_1152x656_120fps[0]),
 };
 
 #ifdef S5K2P6_USE_COMPACT_PLL_INFO
-static const struct sensor_pll_info_compact *sensor_2p6_pllinfos_A[] = {
+static const struct sensor_pll_info_compact *sensor_2p6_pllinfos_A[] =
 #else
-static const struct sensor_pll_info *sensor_2p6_pllinfos_A[] = {
+static const struct sensor_pll_info *sensor_2p6_pllinfos_A[] =
 #endif
+{
        /* 16x12 margin */
        &sensor_2p6_pllinfo_A_4608x3456_30fps,
-       &sensor_2p6_pllinfo_A_4608x2592_30fps,
+       &sensor_2p6_pllinfo_A_4608x2624_30fps,
+       &sensor_2p6_pllinfo_A_4608x2240_30fps,
        &sensor_2p6_pllinfo_A_2304x1728_30fps,
        &sensor_2p6_pllinfo_A_2304x1728_15fps,
-       &sensor_2p6_pllinfo_A_2304x1296_30fps,
+       &sensor_2p6_pllinfo_A_2304x1312_30fps,
+       &sensor_2p6_pllinfo_A_2304x1120_30fps,
        &sensor_2p6_pllinfo_A_1152x864_120fps,
-       &sensor_2p6_pllinfo_A_1152x648_120fps,
+       &sensor_2p6_pllinfo_A_1152x656_120fps,
 };
 
 #endif
index 99b7061ce667d6f364e0d18e19a0211746498fd8..3529ca57f68585fde40619f69e388eac4cb405dc 100644 (file)
 #include "fimc-is-cis.h"
 #include "fimc-is-cis-2p6.h"
 
-const u32 sensor_2p6_setfile_B_Global[] = {
-/*TODO*/
-};
+/* This setfile B is PDAF setting */
+/* Reference : S5K2P6SX_EVT0_Ver_0.12_20171026.xlsx */
 
-/* 4:3 16x10 margin, EXTCLK 26Mhz */
-const u32 sensor_2p6_setfile_B_4608x3456_30fps[] = {
+const u32 sensor_2p6_setfile_B_Global[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
        0x0100, 0x0000, 0x02,
@@ -52,705 +50,366 @@ const u32 sensor_2p6_setfile_B_4608x3456_30fps[] = {
        0x3856, 0x0008, 0x02,
        0x3858, 0x0008, 0x02,
        0x385A, 0x0008, 0x02,
-       0x30CE, 0x0000, 0x02,
        0xF440, 0x002F, 0x02,
-       0x37F6, 0x0021, 0x02,
-       0x3198, 0x0007, 0x02,
-       0x319A, 0x0100, 0x02,
        0x319C, 0x0130, 0x02,
-       0x3056, 0x0100, 0x02,
        0x602A, 0x1266, 0x02,
        0x6F12, 0x0001, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x602A, 0x1BB0, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
        0x30D4, 0x0001, 0x02,
-       0x30D8, 0x0100, 0x02,
+       0x30D6, 0x002B, 0x02,
        0xB138, 0x0000, 0x02,
-       0x31B0, 0x0008, 0x02,
-       0x0340, 0x0E1A, 0x02,
-       0x0342, 0x1428, 0x02,
        0x0344, 0x0018, 0x02,
-       0x0346, 0x0010, 0x02,
        0x0348, 0x1217, 0x02,
-       0x034A, 0x0D8F, 0x02,
-       0x034C, 0x1200, 0x02,
-       0x034E, 0x0D80, 0x02,
-       0x0900, 0x0011, 0x02,
        0x0380, 0x0001, 0x02,
        0x0382, 0x0001, 0x02,
        0x0384, 0x0001, 0x02,
-       0x0386, 0x0001, 0x02,
-       0x0400, 0x0000, 0x02,
-       0x0404, 0x0000, 0x02,
        0x0408, 0x0000, 0x02,
        0x040A, 0x0000, 0x02,
        0x0136, 0x1A00, 0x02,
        0x0300, 0x0003, 0x02,
        0x0302, 0x0001, 0x02,
        0x0304, 0x0006, 0x02,
-       0x0306, 0x0061, 0x02,
-       0x1130, 0x440E, 0x02,
        0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
        0x300A, 0x0000, 0x02,
        0x0200, 0x0200, 0x02,
-       0x0202, 0x0E10, 0x02,
-       0x021E, 0x0E10, 0x02,
        0x0204, 0x0080, 0x02,
        0x37C0, 0x0002, 0x02,
        0x37C2, 0x0103, 0x02,
        0x3004, 0x0003, 0x02,
        0x0114, 0x0300, 0x02,
        0x304C, 0x0000, 0x02,
-       0x0216, 0x0100, 0x02,
        0x3AC4, 0x0100, 0x02,
        0x3E04, 0x0100, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
+       0x3B02, 0x000F, 0x02,
+       0x3B34, 0x0000, 0x02,
+       0x3AD0, 0x0066, 0x02,
+       0x3B0C, 0x0000, 0x02,
+       0x3B3E, 0x001E, 0x02,
+       0x3ADA, 0x0085, 0x02,
+       0x3B16, 0x000F, 0x02,
+       0x3B48, 0x0046, 0x02,
+       0x3AE4, 0x00AD, 0x02,
+       0x3B20, 0xFFE2, 0x02,
+       0x3B52, 0x0000, 0x02,
+       0x3AEE, 0x0085, 0x02,
+       0x3E0E, 0x0FEF, 0x02,
+       0x3E18, 0x1010, 0x02,
+       0x3E22, 0x1018, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 16:9 16x10 margin, EXTCLK 26Mhz */
-const u32 sensor_2p6_setfile_B_4608x2592_30fps[] = {
+/* 1. 4608 x 3456 / No-Bin, 4:3, 30fps / Support PDAF Tail, EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_B_4608x3456_30fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
+       0x30CE, 0x0000, 0x02,
+       0x37F6, 0x0021, 0x02,
+       0x3198, 0x0007, 0x02,
+       0x319A, 0x0100, 0x02,
+       0x3056, 0x0100, 0x02,
+       0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
+       0x0B0E, 0x0100, 0x02,
+       0x30D8, 0x0100, 0x02,
+       0x31B0, 0x0008, 0x02,
+       0x0340, 0x0E1A, 0x02,
+       0x0342, 0x1428, 0x02,
+       0x0346, 0x0010, 0x02,
+       0x034A, 0x0D8F, 0x02,
+       0x034C, 0x1200, 0x02,
+       0x034E, 0x0D80, 0x02,
+       0x0900, 0x0011, 0x02,
+       0x0386, 0x0001, 0x02,
+       0x0400, 0x0000, 0x02,
+       0x0404, 0x0000, 0x02,
+       0x0306, 0x0061, 0x02,
+       0x1130, 0x440E, 0x02,
+       0x030E, 0x006F, 0x02,
+       0x0202, 0x0E10, 0x02,
+       0x021E, 0x0E10, 0x02,
+       0x0216, 0x0000, 0x02,
+       0x6214, 0x7970, 0x02,
+};
+
+/* 2. 4608 x 2624 / No-Bin, 16:9, 30fps / Support PDAF Tail , EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_B_4608x2624_30fps[] = {
+       0xFCFC, 0x4000, 0x02,
+       0x6028, 0x2000, 0x02,
+       0x6214, 0x7971, 0x02,
+       0x6218, 0x7150, 0x02,
        0x30CE, 0x0000, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0021, 0x02,
        0x3198, 0x0007, 0x02,
        0x319A, 0x0100, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0100, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
+       0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
+       0x0B0E, 0x0100, 0x02,
+       0x30D8, 0x0100, 0x02,
+       0x31B0, 0x0008, 0x02,
+       0x0340, 0x0E1A, 0x02,
+       0x0342, 0x1428, 0x02,
+       0x0346, 0x01B0, 0x02,
+       0x034A, 0x0BEF, 0x02,
+       0x034C, 0x1200, 0x02,
+       0x034E, 0x0A40, 0x02,
+       0x0900, 0x0011, 0x02,
+       0x0386, 0x0001, 0x02,
+       0x0400, 0x0000, 0x02,
+       0x0404, 0x0000, 0x02,
+       0x0306, 0x0061, 0x02,
+       0x1130, 0x440E, 0x02,
+       0x030E, 0x006F, 0x02,
+       0x0202, 0x0E10, 0x02,
+       0x021E, 0x0E10, 0x02,
+       0x0216, 0x0000, 0x02,
+       0x6214, 0x7970, 0x02,
+};
+
+/* 3. 4608 x 2240 / No-Bin, 18.5:9, 30fps / Support PDAF Tail  , EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_B_4608x2240_30fps[] = {
+       0xFCFC, 0x4000, 0x02,
+       0x6028, 0x2000, 0x02,
+       0x6214, 0x7971, 0x02,
+       0x6218, 0x7150, 0x02,
+       0x30CE, 0x0000, 0x02,
+       0x37F6, 0x0021, 0x02,
+       0x3198, 0x0007, 0x02,
+       0x319A, 0x0100, 0x02,
+       0x3056, 0x0100, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
-       0x30D4, 0x0001, 0x02,
+       0x0B0E, 0x0100, 0x02,
        0x30D8, 0x0100, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0008, 0x02,
        0x0340, 0x0E1A, 0x02,
        0x0342, 0x1428, 0x02,
-       0x0344, 0x0018, 0x02,
-       0x0346, 0x01C0, 0x02,
-       0x0348, 0x1217, 0x02,
-       0x034A, 0x0BDF, 0x02,
+       0x0346, 0x0270, 0x02,
+       0x034A, 0x0B2F, 0x02,
        0x034C, 0x1200, 0x02,
-       0x034E, 0x0A20, 0x02,
+       0x034E, 0x08C0, 0x02,
        0x0900, 0x0011, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0001, 0x02,
        0x0400, 0x0000, 0x02,
        0x0404, 0x0000, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0061, 0x02,
        0x1130, 0x440E, 0x02,
-       0x030C, 0x0004, 0x02,
        0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
        0x0202, 0x0E10, 0x02,
        0x021E, 0x0E10, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
-       0x0216, 0x0100, 0x02,
-       0x3AC4, 0x0100, 0x02,
-       0x3E04, 0x0100, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
+       0x0216, 0x0000, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 4:3 16x10 margin, EXTCLK 26Mhz */
+/* 4. 2304 x 1728 / 2-Bin, 4:3, 30fps / Support PDAF Tail, EXTCLK 26Mhz */
 const u32 sensor_2p6_setfile_B_2304x1728_30fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0031, 0x02,
        0x3198, 0x0066, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0100, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x6F12, 0x0000, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
-       0x30D4, 0x0001, 0x02,
+       0x0B0E, 0x0100, 0x02,
        0x30D8, 0x0100, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0004, 0x02,
        0x0340, 0x0E1A, 0x02,
        0x0342, 0x1428, 0x02,
-       0x0344, 0x0018, 0x02,
        0x0346, 0x0010, 0x02,
-       0x0348, 0x1217, 0x02,
        0x034A, 0x0D8f, 0x02,
        0x034C, 0x0900, 0x02,
        0x034E, 0x06C0, 0x02,
        0x0900, 0x0112, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0003, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0020, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0061, 0x02,
        0x1130, 0x440E, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x0E10, 0x02,
        0x021E, 0x0E10, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 4:3 16x10 margin, EXTCLK 26Mhz */
+/* 5. 2304 x 1728 / 2-Bin, 4:3, 15fps / Support PDAF Tail, EXTCLK 26Mhz */
 const u32 sensor_2p6_setfile_B_2304x1728_15fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0031, 0x02,
        0x3198, 0x0066, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0100, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x6F12, 0x0000, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
-       0x30D4, 0x0001, 0x02,
+       0x0B0E, 0x0100, 0x02,
        0x30D8, 0x0100, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0004, 0x02,
        0x0340, 0x1C34, 0x02,
        0x0342, 0x1428, 0x02,
-       0x0344, 0x0018, 0x02,
        0x0346, 0x0010, 0x02,
-       0x0348, 0x1217, 0x02,
        0x034A, 0x0D8f, 0x02,
        0x034C, 0x0900, 0x02,
        0x034E, 0x06C0, 0x02,
        0x0900, 0x0112, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0003, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0020, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0061, 0x02,
        0x1130, 0x440E, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x1C2A, 0x02,
        0x021E, 0x1C2A, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 16:9 16x10 margin, EXTCLK 26Mhz */
-const u32 sensor_2p6_setfile_B_2304x1296_30fps[] = {
+/* 6. 2304 x 1312 / 2-Bin, 16:9, 30fps / Support Tail Mode, EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_B_2304x1312_30fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0031, 0x02,
        0x3198, 0x0066, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0100, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
+       0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
+       0x0B0E, 0x0100, 0x02,
+       0x30D8, 0x0100, 0x02,
+       0x31B0, 0x0004, 0x02,
+       0x0340, 0x0AAA, 0x02,
+       0x0342, 0x1AA8, 0x02,
+       0x0346, 0x01B0, 0x02,
+       0x034A, 0x0BEF, 0x02,
+       0x034C, 0x0900, 0x02,
+       0x034E, 0x0520, 0x02,
+       0x0900, 0x0112, 0x02,
+       0x0386, 0x0003, 0x02,
+       0x0400, 0x0001, 0x02,
+       0x0404, 0x0020, 0x02,
+       0x0306, 0x0061, 0x02,
+       0x1130, 0x440E, 0x02,
+       0x030E, 0x0068, 0x02,
+       0x0202, 0x0E10, 0x02,
+       0x021E, 0x0E10, 0x02,
+       0x0216, 0x0000, 0x02,
+       0x6214, 0x7970, 0x02,
+};
+
+/* 7. 2304 x 1120 / 2-Bin, 18.5:9, 30fps / Support PDAF Tail , EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_B_2304x1120_30fps[] = {
+       0xFCFC, 0x4000, 0x02,
+       0x6028, 0x2000, 0x02,
+       0x6214, 0x7971, 0x02,
+       0x6218, 0x7150, 0x02,
+       0x30CE, 0x0040, 0x02,
+       0x37F6, 0x0031, 0x02,
+       0x3198, 0x0066, 0x02,
+       0x319A, 0x0000, 0x02,
+       0x3056, 0x0100, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0000, 0x02,
-       0x0B0E, 0x0000, 0x02,
-       0x30D4, 0x0001, 0x02,
+       0x0B0E, 0x0100, 0x02,
        0x30D8, 0x0100, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0004, 0x02,
-       0x0340, 0x0E1A, 0x02,
-       0x0342, 0x1428, 0x02,
-       0x0344, 0x0018, 0x02,
-       0x0346, 0x01C0, 0x02,
-       0x0348, 0x1217, 0x02,
-       0x034A, 0x0BDF, 0x02,
+       0x0340, 0x0937, 0x02,
+       0x0342, 0x1ED8, 0x02,
+       0x0346, 0x0270, 0x02,
+       0x034A, 0x0B2F, 0x02,
        0x034C, 0x0900, 0x02,
-       0x034E, 0x0510, 0x02,
+       0x034E, 0x0460, 0x02,
        0x0900, 0x0112, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0003, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0020, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0061, 0x02,
        0x1130, 0x440E, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x0E10, 0x02,
        0x021E, 0x0E10, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 4:3 4x4 margin, EXTCLK 26Mhz */
+/* 8. 1152 x 864 / 4-Bin, 4:3, 120fps, EXTCLK 26Mhz */
 const u32 sensor_2p6_setfile_B_1152x864_120fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0001, 0x02,
        0x3198, 0x00CC, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0000, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x6F12, 0x0000, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0100, 0x02,
        0x0B0E, 0x0100, 0x02,
-       0x30D4, 0x0001, 0x02,
        0x30D8, 0x0000, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0002, 0x02,
        0x0340, 0x0398, 0x02,
        0x0342, 0x1438, 0x02,
-       0x0344, 0x0010, 0x02,
        0x0346, 0x0010, 0x02,
-       0x0348, 0x1217, 0x02,
        0x034A, 0x0D8F, 0x02,
        0x034C, 0x0480, 0x02,
        0x034E, 0x0360, 0x02,
        0x0900, 0x0114, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0007, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0040, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0063, 0x02,
        0x1130, 0x4411, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x038E, 0x02,
        0x021E, 0x038E, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
-/* 16:9 4x4 margin, EXTCLK 26Mhz */
-const u32 sensor_2p6_setfile_B_1152x648_120fps[] = {
+/* 9. 1152 x 656 / 4-Bin, 16:9, 120fps, EXTCLK 26Mhz */
+const u32 sensor_2p6_setfile_B_1152x656_120fps[] = {
        0xFCFC, 0x4000, 0x02,
        0x6028, 0x2000, 0x02,
-       0x0100, 0x0000, 0x02,
        0x6214, 0x7971, 0x02,
        0x6218, 0x7150, 0x02,
-       0xF43A, 0x000C, 0x02,
-       0xF470, 0x000D, 0x02,
-       0x602A, 0x1C50, 0x02,
-       0x6F12, 0x15FF, 0x02,
-       0x3092, 0x0000, 0x02,
-       0x3088, 0x0101, 0x02,
-       0x602A, 0x13CE, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0000, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x6F12, 0x0004, 0x02,
-       0x602A, 0x196C, 0x02,
-       0x6F12, 0x8010, 0x02,
-       0x31D2, 0x0220, 0x02,
-       0x602A, 0x195E, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x3816, 0x0140, 0x02,
-       0x3818, 0x0140, 0x02,
-       0x3854, 0x0008, 0x02,
-       0x3856, 0x0008, 0x02,
-       0x3858, 0x0008, 0x02,
-       0x385A, 0x0008, 0x02,
        0x30CE, 0x0040, 0x02,
-       0xF440, 0x002F, 0x02,
        0x37F6, 0x0001, 0x02,
        0x3198, 0x00CC, 0x02,
        0x319A, 0x0000, 0x02,
-       0x319C, 0x0130, 0x02,
        0x3056, 0x0000, 0x02,
-       0x602A, 0x1266, 0x02,
-       0x6F12, 0x0001, 0x02,
-       0x6F12, 0x0000, 0x02,
        0x602A, 0x1BB0, 0x02,
        0x6F12, 0x0100, 0x02,
        0x0B0E, 0x0100, 0x02,
-       0x30D4, 0x0001, 0x02,
        0x30D8, 0x0000, 0x02,
-       0xB138, 0x0000, 0x02,
        0x31B0, 0x0002, 0x02,
        0x0340, 0x0398, 0x02,
        0x0342, 0x1438, 0x02,
-       0x0344, 0x0018, 0x02,
-       0x0346, 0x01C0, 0x02,
-       0x0348, 0x1217, 0x02,
-       0x034A, 0x0BDF, 0x02,
+       0x0346, 0x01B0, 0x02,
+       0x034A, 0x0BEF, 0x02,
        0x034C, 0x0480, 0x02,
-       0x034E, 0x0288, 0x02,
+       0x034E, 0x0290, 0x02,
        0x0900, 0x0114, 0x02,
-       0x0380, 0x0001, 0x02,
-       0x0382, 0x0001, 0x02,
-       0x0384, 0x0001, 0x02,
        0x0386, 0x0007, 0x02,
        0x0400, 0x0001, 0x02,
        0x0404, 0x0040, 0x02,
-       0x0408, 0x0000, 0x02,
-       0x040A, 0x0000, 0x02,
-       0x0136, 0x1A00, 0x02,
-       0x0300, 0x0003, 0x02,
-       0x0302, 0x0001, 0x02,
-       0x0304, 0x0006, 0x02,
        0x0306, 0x0063, 0x02,
        0x1130, 0x4411, 0x02,
-       0x030C, 0x0004, 0x02,
-       0x030E, 0x006F, 0x02,
-       0x300A, 0x0000, 0x02,
-       0x0200, 0x0200, 0x02,
+       0x030E, 0x0068, 0x02,
        0x0202, 0x038E, 0x02,
        0x021E, 0x038E, 0x02,
-       0x0204, 0x0080, 0x02,
-       0x37C0, 0x0002, 0x02,
-       0x37C2, 0x0103, 0x02,
-       0x3004, 0x0003, 0x02,
-       0x0114, 0x0300, 0x02,
-       0x304C, 0x0000, 0x02,
        0x0216, 0x0000, 0x02,
-       0x3AC4, 0x0000, 0x02,
-       0x3E04, 0x0000, 0x02,
-       0x3B02, 0xFFCD, 0x02,
-       0x3B34, 0x0033, 0x02,
-       0x3AD0, 0x0099, 0x02,
-       0x3B0C, 0xFFE2, 0x02,
-       0x3B3E, 0x0028, 0x02,
-       0x3ADA, 0x0099, 0x02,
-       0x3B16, 0xFFCD, 0x02,
-       0x3B48, 0x0033, 0x02,
-       0x3AE4, 0x0099, 0x02,
-       0x3B20, 0x0014, 0x02,
-       0x3B52, 0x0066, 0x02,
-       0x3AEE, 0x0099, 0x02,
-       0x3E18, 0x1014, 0x02,
-       0x3E22, 0x1014, 0x02,
        0x6214, 0x7970, 0x02,
 };
 
@@ -763,7 +422,7 @@ const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_4608x3456_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_4608x2592_30fps = {
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_4608x2624_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        1443 * 1000 * 1000, /* mipi_datarate */
        560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
@@ -771,7 +430,7 @@ const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_4608x2592_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_2304x1728_30fps = {
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_4608x2240_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        1443 * 1000 * 1000, /* mipi_datarate */
        560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
@@ -779,47 +438,62 @@ const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_2304x1728_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_2304x1728_30fps = {
+       EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
+       1352 * 1000 * 1000, /* mipi_datarate */
+       560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
+       0x0E1A, /* frame_length_lines   (0x0340) */
+       0x1428, /* line_length_pck              (0x0342) */
+};
+
 const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_2304x1728_15fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
-       1443 * 1000 * 1000, /* mipi_datarate */
+       1352 * 1000 * 1000, /* mipi_datarate */
        560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
        0x1C34, /* frame_length_lines   (0x0340) */
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_2304x1296_30fps = {
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_2304x1312_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
-       1443 * 1000 * 1000, /* mipi_datarate */
+       1352 * 1000 * 1000, /* mipi_datarate */
        560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
-       0x0E1A, /* frame_length_lines   (0x0340) */
-       0x1428, /* line_length_pck              (0x0342) */
+       0x0AAA, /* frame_length_lines   (0x0340) */
+       0x1AA8, /* line_length_pck              (0x0342) */
+};
+
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_2304x1120_30fps = {
+       EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
+       1352 * 1000 * 1000, /* mipi_datarate */
+       560440000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
+       0x0937, /* frame_length_lines   (0x0340) */
+       0x1ED8, /* line_length_pck              (0x0342) */
 };
 
 const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_1152x864_120fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
-       1443 * 1000 * 1000, /* mipi_datarate */
+       1352 * 1000 * 1000, /* mipi_datarate */
        572000000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
        0x0398, /* frame_length_lines   (0x0340) */
        0x1438, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_1152x648_120fps = {
+const struct sensor_pll_info_compact sensor_2p6_pllinfo_B_1152x656_120fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
-       1443 * 1000 * 1000, /* mipi_datarate */
+       1352 * 1000 * 1000, /* mipi_datarate */
        572000000,  /* pclk  = VT pix CLK * 4(this value is different by cis) */
        0x0398, /* frame_length_lines   (0x0340) */
        0x1438, /* line_length_pck              (0x0342) */
 };
-
 #else
-const struct sensor_pll_info sensor_2p6_pllinfo_B_4608x3468_30fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_B_4608x3456_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
        0x6F, /* secnd_pll_multiplier   (0x030E) */
@@ -827,14 +501,14 @@ const struct sensor_pll_info sensor_2p6_pllinfo_B_4608x3468_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info sensor_2p6_pllinfo_B_4608x2592_30fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_B_4608x2624_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
        0x6F, /* secnd_pll_multiplier   (0x030E) */
@@ -842,18 +516,33 @@ const struct sensor_pll_info sensor_2p6_pllinfo_B_4608x2592_30fps = {
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info sensor_2p6_pllinfo_B_2304x1728_30fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_B_4608x2240_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
        0x6F, /* secnd_pll_multiplier   (0x030E) */
-       0x1C34, /* frame_length_lines   (0x0340) */
+       0x0E1A, /* frame_length_lines   (0x0340) */
+       0x1428, /* line_length_pck              (0x0342) */
+};
+
+const struct sensor_pll_info sensor_2p6_pllinfo_B_2304x1728_30fps = {
+       EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
+       0x03, /* vt_pix_clk_div (0x0300) */
+       0x01, /* vt_sys_clk_div (0x0302) */
+       0x06, /* pre_pll_clk_div(0x0304) */
+       0x61, /* pll_multiplier (0x0306) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
+
+       0x04, /* secnd_pre_pll_clk_div(0x030C) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
+       0x0E1A, /* frame_length_lines   (0x0340) */
        0x1428, /* line_length_pck              (0x0342) */
 };
 
@@ -863,28 +552,43 @@ const struct sensor_pll_info sensor_2p6_pllinfo_B_2304x1728_15fps = {
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
-       0x6F, /* secnd_pll_multiplier   (0x030E) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
        0x1C34, /* frame_length_lines   (0x0340) */
        0x1428, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info sensor_2p6_pllinfo_B_2304x1296_30fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_B_2304x1312_30fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x61, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
-       0x6F, /* secnd_pll_multiplier   (0x030E) */
-       0x0E1A, /* frame_length_lines   (0x0340) */
-       0x1428, /* line_length_pck              (0x0342) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
+       0x0AAA, /* frame_length_lines   (0x0340) */
+       0x1AA8, /* line_length_pck              (0x0342) */
+};
+
+const struct sensor_pll_info sensor_2p6_pllinfo_B_2304x1120_30fps = {
+       EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
+       0x03, /* vt_pix_clk_div (0x0300) */
+       0x01, /* vt_sys_clk_div (0x0302) */
+       0x06, /* pre_pll_clk_div(0x0304) */
+       0x61, /* pll_multiplier (0x0306) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
+
+       0x04, /* secnd_pre_pll_clk_div(0x030C) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
+       0x0937, /* frame_length_lines   (0x0340) */
+       0x1ED8, /* line_length_pck              (0x0342) */
 };
 
 const struct sensor_pll_info sensor_2p6_pllinfo_B_1152x864_120fps = {
@@ -893,26 +597,26 @@ const struct sensor_pll_info sensor_2p6_pllinfo_B_1152x864_120fps = {
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x63, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
-       0x6F, /* secnd_pll_multiplier   (0x030E) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
        0x0398, /* frame_length_lines   (0x0340) */
        0x1438, /* line_length_pck              (0x0342) */
 };
 
-const struct sensor_pll_info sensor_2p6_pllinfo_B_1152x648_120fps = {
+const struct sensor_pll_info sensor_2p6_pllinfo_B_1152x656_120fps = {
        EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
        0x03, /* vt_pix_clk_div (0x0300) */
        0x01, /* vt_sys_clk_div (0x0302) */
        0x06, /* pre_pll_clk_div(0x0304) */
        0x63, /* pll_multiplier (0x0306) */
-/*TODO*/       0x08, /* op_pix_clk_div (0x0308) */
-/*TODO*/       0x01, /* op_sys_clk_div (0x030A) */
+       0x08, /* op_pix_clk_div (0x0308) */
+       0x01, /* op_sys_clk_div (0x030A) */
 
        0x04, /* secnd_pre_pll_clk_div(0x030C) */
-       0x6F, /* secnd_pll_multiplier   (0x030E) */
+       0x68, /* secnd_pll_multiplier   (0x030E) */
        0x0398, /* frame_length_lines   (0x0340) */
        0x1438, /* line_length_pck              (0x0342) */
 };
@@ -921,38 +625,45 @@ const struct sensor_pll_info sensor_2p6_pllinfo_B_1152x648_120fps = {
 static const u32 *sensor_2p6_setfiles_B[] = {
        /* 16x12 margin */
        sensor_2p6_setfile_B_4608x3456_30fps,
-       sensor_2p6_setfile_B_4608x2592_30fps,
+       sensor_2p6_setfile_B_4608x2624_30fps,
+       sensor_2p6_setfile_B_4608x2240_30fps,
        sensor_2p6_setfile_B_2304x1728_30fps,
        sensor_2p6_setfile_B_2304x1728_15fps,
-       sensor_2p6_setfile_B_2304x1296_30fps,
+       sensor_2p6_setfile_B_2304x1312_30fps,
+       sensor_2p6_setfile_B_2304x1120_30fps,
        sensor_2p6_setfile_B_1152x864_120fps,
-       sensor_2p6_setfile_B_1152x648_120fps,
+       sensor_2p6_setfile_B_1152x656_120fps,
 };
 
 static const u32 sensor_2p6_setfile_B_sizes[] = {
        /* 16x12 margin */
        sizeof(sensor_2p6_setfile_B_4608x3456_30fps) / sizeof(sensor_2p6_setfile_B_4608x3456_30fps[0]),
-       sizeof(sensor_2p6_setfile_B_4608x2592_30fps) / sizeof(sensor_2p6_setfile_B_4608x2592_30fps[0]),
+       sizeof(sensor_2p6_setfile_B_4608x2624_30fps) / sizeof(sensor_2p6_setfile_B_4608x2624_30fps[0]),
+       sizeof(sensor_2p6_setfile_B_4608x2240_30fps) / sizeof(sensor_2p6_setfile_B_4608x2240_30fps[0]),
        sizeof(sensor_2p6_setfile_B_2304x1728_30fps) / sizeof(sensor_2p6_setfile_B_2304x1728_30fps[0]),
        sizeof(sensor_2p6_setfile_B_2304x1728_15fps) / sizeof(sensor_2p6_setfile_B_2304x1728_15fps[0]),
-       sizeof(sensor_2p6_setfile_B_2304x1296_30fps) / sizeof(sensor_2p6_setfile_B_2304x1296_30fps[0]),
+       sizeof(sensor_2p6_setfile_B_2304x1312_30fps) / sizeof(sensor_2p6_setfile_B_2304x1312_30fps[0]),
+       sizeof(sensor_2p6_setfile_B_2304x1120_30fps) / sizeof(sensor_2p6_setfile_B_2304x1120_30fps[0]),
        sizeof(sensor_2p6_setfile_B_1152x864_120fps) / sizeof(sensor_2p6_setfile_B_1152x864_120fps[0]),
-       sizeof(sensor_2p6_setfile_B_1152x648_120fps) / sizeof(sensor_2p6_setfile_B_1152x648_120fps[0]),
+       sizeof(sensor_2p6_setfile_B_1152x656_120fps) / sizeof(sensor_2p6_setfile_B_1152x656_120fps[0]),
 };
 
 #ifdef S5K2P6_USE_COMPACT_PLL_INFO
-static const struct sensor_pll_info_compact *sensor_2p6_pllinfos_B[] = {
+static const struct sensor_pll_info_compact *sensor_2p6_pllinfos_B[] =
 #else
-static const struct sensor_pll_info *sensor_2p6_pllinfos_B[] = {
+static const struct sensor_pll_info *sensor_2p6_pllinfos_B[] =
 #endif
+{
        /* 16x12 margin */
        &sensor_2p6_pllinfo_B_4608x3456_30fps,
-       &sensor_2p6_pllinfo_B_4608x2592_30fps,
+       &sensor_2p6_pllinfo_B_4608x2624_30fps,
+       &sensor_2p6_pllinfo_B_4608x2240_30fps,
        &sensor_2p6_pllinfo_B_2304x1728_30fps,
        &sensor_2p6_pllinfo_B_2304x1728_15fps,
-       &sensor_2p6_pllinfo_B_2304x1296_30fps,
+       &sensor_2p6_pllinfo_B_2304x1312_30fps,
+       &sensor_2p6_pllinfo_B_2304x1120_30fps,
        &sensor_2p6_pllinfo_B_1152x864_120fps,
-       &sensor_2p6_pllinfo_B_1152x648_120fps,
+       &sensor_2p6_pllinfo_B_1152x656_120fps,
 };
 
 #endif
index af1ba82ca446196feea09df30d10003656c33929..d46d7ccedc9a06bac3493974e626daf5409faa67 100644 (file)
@@ -274,7 +274,11 @@ int sensor_2p6_cis_init(struct v4l2_subdev *subdev)
        cis->cis_data->low_expo_start = 33000;
        cis->need_mode_change = false;
 
-       sensor_2p6_cis_data_calculation(sensor_2p6_pllinfos[setfile_index], cis->cis_data);
+       if (cis->use_pdaf == true) {
+               sensor_2p6_cis_data_calculation(sensor_2p6_pdaf_pllinfos[setfile_index], cis->cis_data);
+       } else {
+               sensor_2p6_cis_data_calculation(sensor_2p6_pllinfos[setfile_index], cis->cis_data);
+       }
 
        setinfo.return_value = 0;
        CALL_CISOPS(cis, cis_get_min_exposure_time, subdev, &setinfo.return_value);
@@ -427,8 +431,27 @@ int sensor_2p6_cis_set_global_setting(struct v4l2_subdev *subdev)
        cis = (struct fimc_is_cis *)v4l2_get_subdevdata(subdev);
        BUG_ON(!cis);
 
+       /* ARM start */
+       ret = fimc_is_sensor_write16(cis->client, 0xFCFC, 0x4000);
+       ret = fimc_is_sensor_write16(cis->client, 0x6010, 0x0001);
+       /* 3ms delay to operate sensor FW */
+       usleep_range(3000, 3000);
+
+       /* setfile global setting is at camera entrance */
+       if (cis->use_pdaf == true) {
+               ret = sensor_cis_set_registers(subdev, sensor_2p6_pdaf_global, sensor_2p6_pdaf_global_size);
+       } else {
+               ret = sensor_cis_set_registers(subdev, sensor_2p6_global, sensor_2p6_global_size);
+       }
+
+       if (ret < 0) {
+               err("sensor_2p6_set_registers fail!!");
+               goto p_err;
+       }
+
        dbg_sensor(1, "[%s] global setting done\n", __func__);
 
+p_err:
        return ret;
 }
 
@@ -466,6 +489,28 @@ int sensor_2p6_cis_mode_change(struct v4l2_subdev *subdev, u32 mode)
                }
        }
 
+       /* In case of fastAE or high speed fps, forced to set pdaf off */
+       if (cis->use_pdaf == true) {
+               if (mode <= SENSOR_2P6_MODE_2304X1120_30) {
+                       cis->cis_data->companion_data.paf_stat_enable = true;
+               } else {
+                       cis->cis_data->companion_data.paf_stat_enable = false;
+               }
+               dbg_sensor(1, "[%s] mode(%d) paf_stat_enable(%d) \n",
+                       __func__, mode, cis->cis_data->companion_data.paf_stat_enable);
+       }
+
+#if defined(USE_SENSOR_WDR)
+       /* In case of fastAE or high speed fps, forced to set wdr off */
+       if (mode <= SENSOR_2P6_MODE_4608X2240_30) {
+               cis->cis_data->companion_data.wdr_enable = true;
+       } else {
+               cis->cis_data->companion_data.wdr_enable = false;
+       }
+       dbg_sensor(1, "[%s] mode(%d) wdr_enable(%d) \n",
+               __func__, mode, cis->cis_data->companion_data.wdr_enable);
+#endif
+
        if (cis->use_pdaf == true) {
                sensor_2p6_cis_data_calculation(sensor_2p6_pdaf_pllinfos[mode], cis->cis_data);
                ret = sensor_cis_set_registers(subdev, sensor_2p6_pdaf_setfiles[mode], sensor_2p6_pdaf_setfile_sizes[mode]);
@@ -480,31 +525,60 @@ int sensor_2p6_cis_mode_change(struct v4l2_subdev *subdev, u32 mode)
        }
 
        if (cis->use_pdaf == true) {
-#if defined(S5K2P6_PDAF_DISABLE)
-               /* TEMP : PDAF disable */
-               ret = fimc_is_sensor_write16(cis->client, 0xFCFC, 0x4000);
-               ret = fimc_is_sensor_write8(cis->client, 0x3059, 0x00);
-               info("[%s] S5K2P6_PDAF_DISABLE\n", __func__);
+#if defined(S5K2P6_BPC_DISABLE)
+               /* BPC disable */
+               ret = fimc_is_sensor_write16(cis->client, 0x6028, 0x4000);
+               if (ret < 0) {
+                       err("2p6 sensor write fail !!!");
+                       goto p_err;
+               }
+               ret = fimc_is_sensor_write16(cis->client, 0x0B0E, 0x0000);
+               if (ret < 0) {
+                       err("2p6 sensor write fail !!!");
+                       goto p_err;
+               }
+               info("[%s] S5K2P6_BPC_DISABLE\n", __func__);
 #endif
 
-#if defined(S5K2P6_TAIL_DISABLE)
-               /* TEMP : Tail mode disable */
-               ret = fimc_is_sensor_write16(cis->client, 0x6028, 0x2000);
-               ret = fimc_is_sensor_write16(cis->client, 0x602A, 0x19E0);
-               ret = fimc_is_sensor_write16(cis->client, 0x6F12, 0x0001);
+               /* pdaf tail mode off */
+               if (cis->cis_data->companion_data.paf_stat_enable == false) {
+                       info("[%s]: Set pdaf tail mode off (paf_stat_enable %d)\n",
+                               __func__, cis->cis_data->companion_data.paf_stat_enable);
+
+                       ret = fimc_is_sensor_write16(cis->client, 0x6028, 0x2000);
+                       if (ret < 0) {
+                               err("2p6 sensor write fail !!!");
+                               goto p_err;
+                       }
+                       ret = fimc_is_sensor_write16(cis->client, 0x602A, 0x1BB0);
+                       if (ret < 0) {
+                               err("2p6 sensor write fail !!!");
+                               goto p_err;
+                       }
+                       ret = fimc_is_sensor_write16(cis->client, 0x6F12, 0x0100);
+                       if (ret < 0) {
+                               err("2p6 sensor write fail !!!");
+                               goto p_err;
+                       }
+               }
+       }
 
-               ret = fimc_is_sensor_write16(cis->client, 0xFCFC, 0x4000);
-               ret = fimc_is_sensor_write16(cis->client, 0x30E2, 0x0000);
-               info("[%s] S5K2P6_TAIL_DISABLE\n", __func__);
-#endif
+#if defined(USE_SENSOR_WDR)
+       if (cis->cis_data->companion_data.wdr_enable == false) {
+               info("[%s] S5K2P6_WDR_DISABLE\n", __func__);
+               ret = fimc_is_sensor_write16(cis->client, 0x6028, 0x4000);
+               if (ret < 0) {
+                       err("2p6 sensor write fail !!!");
+                       goto p_err;
+               }
 
-#if defined(S5K2P6_BPC_DISABLE)
-               /* TEMP : BPC disable */
-               ret = fimc_is_sensor_write16(cis->client, 0xFCFC, 0x4000);
-               ret = fimc_is_sensor_write8(cis->client, 0x0B0E, 0x00);
-               info("[%s] S5K2P6_BPC_DISABLE\n", __func__);
-#endif
+               ret = fimc_is_sensor_write16(cis->client, 0x0216, 0x0000);
+               if (ret < 0) {
+                       err("2p6 sensor write fail !!!");
+                       goto p_err;
+               }
        }
+#endif
 
        dbg_sensor(1, "[%s] mode changed(%d)\n", __func__, mode);
 
@@ -730,10 +804,34 @@ int sensor_2p6_cis_stream_on(struct v4l2_subdev *subdev)
        }
 #endif
 
-       /* Sensor stream on */
        ret = fimc_is_sensor_write16(client, 0x6028, 0x4000);
        if (ret < 0)
                err("i2c transfer fail addr(%x), val(%x), ret = %d\n", 0x6028, 0x4000, ret);
+
+#if defined(USE_SENSOR_WDR)
+       /* WDR */
+       if (fimc_is_vender_wdr_mode_on(cis_data)) {
+               /* wdr on */
+               ret = fimc_is_sensor_write16(client, 0x0216, 0x0100);
+               if (ret < 0)
+                       err("i2c transfer fail addr(%x), val(%x), ret = %d\n", 0x0216, 0x0100, ret);
+               /* Apply seperating long and short dgain */
+               ret = fimc_is_sensor_write16(client, 0x31FA, 0x0001);
+               if (ret < 0)
+                       err("i2c transfer fail addr(%x), val(%x), ret = %d\n", 0x31FA, 0x0001, ret);
+       } else {
+               /* wdr off */
+               ret = fimc_is_sensor_write16(client, 0x0216, 0x0000);
+               if (ret < 0)
+                       err("i2c transfer fail addr(%x), val(%x), ret = %d\n", 0x0216, 0x0000, ret);
+               /* Apply common value long and short dgain */
+               ret = fimc_is_sensor_write16(client, 0x31FA, 0x0000);
+               if (ret < 0)
+                       err("i2c transfer fail addr(%x), val(%x), ret = %d\n", 0x31FA, 0x0000, ret);
+       }
+#endif
+
+       /* Sensor stream on */
        ret = fimc_is_sensor_write16(client, 0x0100, 0x0100);
        if (ret < 0)
                err("i2c transfer fail addr(%x), val(%x), ret = %d\n", 0x0100, 0x0100, ret);
@@ -890,10 +988,14 @@ int sensor_2p6_cis_set_exposure_time(struct v4l2_subdev *subdev, struct ae_param
        if (ret < 0)
                goto p_err;
 
+#if defined(USE_SENSOR_WDR)
        /* Long exposure */
-       ret = fimc_is_sensor_write16(client, 0x021E, long_coarse_int);
-       if (ret < 0)
-               goto p_err;
+       if (fimc_is_vender_wdr_mode_on(cis_data)) {
+               ret = fimc_is_sensor_write16(client, 0x021E, long_coarse_int);
+               if (ret < 0)
+                       goto p_err;
+       }
+#endif
 
        dbg_sensor(1, "[MOD:D:%d] %s, vsync_cnt(%d), vt_pic_clk_freq_mhz (%d),"
                KERN_CONT "line_length_pck(%d), min_fine_int (%d)\n", cis->id, __func__,
@@ -1548,17 +1650,19 @@ int sensor_2p6_cis_set_digital_gain(struct v4l2_subdev *subdev, struct ae_param
                goto p_err;
        }
 
-       dgains[0] = dgains[1] = dgains[2] = dgains[3] = short_gain;
        /* Short digital gain */
-       ret = fimc_is_sensor_write16_array(client, 0x020E, dgains, 4);
+       dgains[0] = dgains[1] = dgains[2] = dgains[3] = short_gain;
+       ret = fimc_is_sensor_write16(client, 0x020E, short_gain);
        if (ret < 0)
                goto p_err;
 
        /* Long digital gain */
-       dgains[0] = dgains[1] = dgains[2] = dgains[3] = long_gain;
-       ret = fimc_is_sensor_write16_array(client, 0x3062, dgains, 4);
-       if (ret < 0)
-               goto p_err;
+       if (fimc_is_vender_wdr_mode_on(cis_data)) {
+               dgains[0] = dgains[1] = dgains[2] = dgains[3] = long_gain;
+               ret = fimc_is_sensor_write16(client, 0x0C82, long_gain);
+               if (ret < 0)
+                       goto p_err;
+       }
 
 #ifdef DEBUG_SENSOR_TIME
        do_gettimeofday(&end);
@@ -1784,7 +1888,7 @@ int cis_2p6_probe(struct i2c_client *client,
 
        sensor_peri = find_peri_by_cis_id(device, SENSOR_NAME_S5K2P6);
        if (!sensor_peri) {
-               probe_info("sensor peri is net yet probed");
+               probe_info("sensor peri is not yet probed");
                return -EPROBE_DEFER;
        }
 
index b6b658c66ae12a8c0fea46fe93d366a409c7ed48..d9eba4cbe6000e60ccce45bb5cb87760f84405f4 100644 (file)
@@ -16,8 +16,8 @@
 
 #define EXT_CLK_Mhz (26)
 
-#define SENSOR_2P6_MAX_WIDTH           (4608 + 16)
-#define SENSOR_2P6_MAX_HEIGHT          (3456 + 12)
+#define SENSOR_2P6_MAX_WIDTH           (4608 + 0)
+#define SENSOR_2P6_MAX_HEIGHT          (3456 + 0)
 
 /* TODO: Check below values are valid */
 #define SENSOR_2P6_FINE_INTEGRATION_TIME_MIN                0x0618
 
 #define S5K2P6_USE_COMPACT_PLL_INFO
 
+typedef enum
+{
+    SENSOR_2P6_MODE_4608X3456_30 = 0,
+    SENSOR_2P6_MODE_4608X2624_30 = 1,
+    SENSOR_2P6_MODE_4608X2240_30 = 2,
+    SENSOR_2P6_MODE_2304X1728_30 = 3,
+    SENSOR_2P6_MODE_2304X1728_15 = 4,
+    SENSOR_2P6_MODE_2304X1312_30 = 5,
+    SENSOR_2P6_MODE_2304X1120_30 = 6,
+    SENSOR_2P6_MODE_1152X864_120 = 7,
+    SENSOR_2P6_MODE_1152X656_120 = 8,
+    SENSOR_2P6_MODE_END
+}SENSOR_2P6_MODE_ENUM;
+
 #endif
 
index 16eb9d891c7063db71cea5e036619387945063fc..d079a834e4f19ad5fb0523b33587fc73f2e8991c 100644 (file)
@@ -52,38 +52,42 @@ enum sensor_module_2p6_position {
 
 static struct fimc_is_sensor_cfg config_module_2p6[] = {
        /* 4608x3456@30fps */
-       FIMC_IS_SENSOR_CFG_EXT(4608, 3456, 30, 32, 0, CSI_DATA_LANES_4, 1443, SET_VC(VC_TAIL_MODE_PDAF, 1152, 864), 0, 0),
-       /* 4608x2592@30fps */
-       FIMC_IS_SENSOR_CFG_EXT(4608, 2592, 30, 32, 1, CSI_DATA_LANES_4, 1443, SET_VC(VC_TAIL_MODE_PDAF, 1152, 656), 0, 0),
+       FIMC_IS_SENSOR_CFG_EXT(4608, 3456, 30, 32, 0, CSI_DATA_LANES_4, 1443, SET_VC(VC_TAIL_MODE_PDAF, 288, 1728), 0, 0),
+       /* 4608x2624@30fps */
+       FIMC_IS_SENSOR_CFG_EXT(4608, 2624, 30, 32, 1, CSI_DATA_LANES_4, 1443, SET_VC(VC_TAIL_MODE_PDAF, 288, 1312), 0, 0),
+       /* 4608x2240@30fps */
+       FIMC_IS_SENSOR_CFG_EXT(4608, 2240, 30, 32, 2, CSI_DATA_LANES_4, 1443, SET_VC(VC_TAIL_MODE_PDAF, 288, 1120), 0, 0),
        /* 2304x1728@30fps */
-       FIMC_IS_SENSOR_CFG_EXT(2304, 1728, 30, 32, 2, CSI_DATA_LANES_4, 1443, 0, 0, 0),
+       FIMC_IS_SENSOR_CFG_EXT(2304, 1728, 30, 32, 3, CSI_DATA_LANES_4, 1352, SET_VC(VC_TAIL_MODE_PDAF, 288, 1728), 0, 0),
        /* 2304x1728@15fps */
-       FIMC_IS_SENSOR_CFG_EXT(2304, 1728, 15, 32, 3, CSI_DATA_LANES_4, 1443, 0, 0, 0),
-       /* 2304x1296@30fps */
-       FIMC_IS_SENSOR_CFG_EXT(2304, 1296, 30, 32, 4, CSI_DATA_LANES_4, 1443, 0, 0, 0),
+       FIMC_IS_SENSOR_CFG_EXT(2304, 1728, 15, 32, 4, CSI_DATA_LANES_4, 1352, SET_VC(VC_TAIL_MODE_PDAF, 288, 1728), 0, 0),
+       /* 2304x1312@30fps */
+       FIMC_IS_SENSOR_CFG_EXT(2304, 1312, 30, 32, 5, CSI_DATA_LANES_4, 1352, SET_VC(VC_TAIL_MODE_PDAF, 288, 1312), 0, 0),
+       /* 2304x1120@30fps */
+       FIMC_IS_SENSOR_CFG_EXT(2304, 1120, 30, 32, 6, CSI_DATA_LANES_4, 1352, SET_VC(VC_TAIL_MODE_PDAF, 288, 1120), 0, 0),
        /* 1152x864@120fps */
-       FIMC_IS_SENSOR_CFG_EXT(1152, 864, 120, 32, 5, CSI_DATA_LANES_4, 1443, 0, 0, 0),
-       /* 1152x648@120fps */
-       FIMC_IS_SENSOR_CFG_EXT(1152, 648, 120, 32, 6, CSI_DATA_LANES_4, 1443, 0, 0, 0),
+       FIMC_IS_SENSOR_CFG_EXT(1152, 864, 120, 32, 7, CSI_DATA_LANES_4, 1352, 0, 0, 0),
+       /* 1152x656@120fps */
+       FIMC_IS_SENSOR_CFG_EXT(1152, 656, 120, 32, 8, CSI_DATA_LANES_4, 1352, 0, 0, 0),
 };
 
 static struct fimc_is_vci vci_module_2p6[] = {
        {
                .pixelformat = V4L2_PIX_FMT_SBGGR10,
                .config = {{0, HW_FORMAT_RAW10, VCI_DMA_NORMAL},
-                       {1, HW_FORMAT_USER, VCI_DMA_INTERNAL},
+                       {1, HW_FORMAT_RAW10, VCI_DMA_INTERNAL},
                        {2, 0, VCI_DMA_NORMAL},
                        {3, 0, VCI_DMA_NORMAL}}
        }, {
                .pixelformat = V4L2_PIX_FMT_SBGGR12,
                .config = {{0, HW_FORMAT_RAW10, VCI_DMA_NORMAL},
-                       {1, HW_FORMAT_USER, VCI_DMA_INTERNAL},
+                       {1, HW_FORMAT_RAW10, VCI_DMA_INTERNAL},
                        {2, 0, VCI_DMA_NORMAL},
                        {3, 0, VCI_DMA_NORMAL}}
        }, {
                .pixelformat = V4L2_PIX_FMT_SBGGR16,
                .config = {{0, HW_FORMAT_RAW10, VCI_DMA_NORMAL},
-                       {1, HW_FORMAT_USER, VCI_DMA_INTERNAL},
+                       {1, HW_FORMAT_RAW10, VCI_DMA_INTERNAL},
                        {2, 0, VCI_DMA_NORMAL},
                        {3, 0, VCI_DMA_NORMAL}}
        }
@@ -273,19 +277,19 @@ static int sensor_module_2p6_power_setpin_with_af(struct device *dev,
 #endif
 
        SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_ON, gpio_reset, "pdaf sen_rst high", PIN_OUTPUT, 1, 500);
-       SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_ON, gpio_none, "pin", PIN_FUNCTION, 2, 0);
+       SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_ON, gpio_none, "pin", PIN_FUNCTION, 2, 3000);
 
        /* BACK CAEMRA - POWER OFF */
+       SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_OFF, gpio_none, "pin_none", PIN_NONE, 1, 500);
+       SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_OFF, gpio_none, "pin", PIN_FUNCTION, 1, 0);
+       SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_OFF, gpio_reset, "pdaf sen_rst", PIN_OUTPUT, 0, 2000);
+
        if (gpio_is_valid(gpio_cam_af_en)) {
                SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_OFF, gpio_cam_af_en, "pdaf gpio_cam_af_en", PIN_OUTPUT, 0, 200);
        } else {
                SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_OFF, gpio_none, "VDD_CAM_AF_2P8", PIN_REGULATOR, 0, 200);
        }
 
-       SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_OFF, gpio_none, "pin", PIN_FUNCTION, 1, 0);
-       SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_OFF, gpio_none, "pin_none", PIN_NONE, 1, 500);
-       SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_OFF, gpio_reset, "pdaf sen_rst", PIN_OUTPUT, 0, 200);
-
 #if defined (CONFIG_OIS_USE)
        if (gpio_is_valid(gpio_ois_reset)) {  /* OIS_RESET */
                SET_PIN(pdata, SENSOR_SCENARIO_NORMAL, GPIO_SCENARIO_OFF, gpio_ois_reset, "pdaf gpio_ois_reset", PIN_OUTPUT, 0, 0);
@@ -348,6 +352,8 @@ static int sensor_module_2p6_power_setpin_with_af(struct device *dev,
 #endif
 
        /* READ_ROM - POWER OFF */
+       SET_PIN(pdata, SENSOR_SCENARIO_READ_ROM, GPIO_SCENARIO_OFF, gpio_none, "pin_none", PIN_NONE, 1, 500);
+
 #if defined(USE_AF_PWR_READ_EEPROM)
        if (gpio_is_valid(gpio_cam_af_en)) {
                SET_PIN(pdata, SENSOR_SCENARIO_READ_ROM, GPIO_SCENARIO_OFF, gpio_cam_af_en, "pdaf gpio_cam_af_en", PIN_OUTPUT, 0, 10);
@@ -424,6 +430,7 @@ static int sensor_module_2p6_power_setpin_with_af(struct device *dev,
        }
 #endif
 
+#if defined(CONFIG_CAMERA_JACKPOT)|| defined(CONFIG_CAMERA_JACKPOT_JPN)
        /* VISION - POWER ON */
        SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_ON, gpio_reset, "pdaf sen_rst low", PIN_OUTPUT, 0, 0);
 
@@ -454,19 +461,19 @@ static int sensor_module_2p6_power_setpin_with_af(struct device *dev,
        }
 
        SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_ON, gpio_reset, "pdaf sen_rst high", PIN_OUTPUT, 1, 500);
-       SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_ON, gpio_none, "pin", PIN_FUNCTION, 2, 0);
+       SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_ON, gpio_none, "pin", PIN_FUNCTION, 2, 3000);
 
        /* VISION - POWER OFF */
+       SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_none, "pin_none", PIN_NONE, 1, 500);
+       SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_none, "pin", PIN_FUNCTION, 1, 0);
+       SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_reset, "pdaf sen_rst", PIN_OUTPUT, 0, 2000);
+
        if (gpio_is_valid(gpio_cam_af_en)) {
                SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_cam_af_en, "pdaf gpio_cam_af_en", PIN_OUTPUT, 0, 200);
        } else {
                SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_none, "VDD_CAM_AF_2P8", PIN_REGULATOR, 0, 200);
        }
 
-       SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_none, "pin", PIN_FUNCTION, 1, 0);
-       SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_none, "pin_none", PIN_NONE, 1, 500);
-       SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_reset, "pdaf sen_rst", PIN_OUTPUT, 0, 200);
-
        if (gpio_is_valid(gpio_cam_io_en)) {
                SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_cam_io_en, "pdaf gpio_cam_io_en", PIN_OUTPUT, 0, 100);
        } else {
@@ -486,7 +493,7 @@ static int sensor_module_2p6_power_setpin_with_af(struct device *dev,
                SET_PIN(pdata, SENSOR_SCENARIO_VISION, GPIO_SCENARIO_OFF, gpio_none, "VDDA_2.8V_CAM", PIN_REGULATOR, 0, 100);
 #endif
        }
-
+#endif
 
        dev_info(dev, "%s X v4\n", __func__);
 
@@ -691,8 +698,8 @@ int sensor_module_2p6_probe(struct platform_device *pdev)
        module->subdev = subdev_module;
        module->device = pdata->id;
        module->client = NULL;
-       module->active_width = 4608 + 16;
-       module->active_height = 3456 + 12;
+       module->active_width = 4608 + 0;
+       module->active_height = 3456 + 0;
        module->margin_left = 0;
        module->margin_right = 0;
        module->margin_top = 0;
@@ -707,7 +714,11 @@ int sensor_module_2p6_probe(struct platform_device *pdev)
        module->vcis = ARRAY_SIZE(vci_module_2p6);
        module->vci = vci_module_2p6;
        module->sensor_maker = "SLSI";
-       module->sensor_name = "S5K2P6";
+       if (use_pdaf == true) {
+               module->sensor_name = "S5K2P6SX"; /* pdaf sensor */
+       } else {
+               module->sensor_name = "S5K2P6"; /* default */
+       }
        if (pdata->position == SENSOR_MODULE_2P6_REAR) {
                module->setfile_name = "setfile_2p6.bin";
        } else if (pdata->position == SENSOR_MODULE_2P6_FRONT) {
@@ -716,8 +727,10 @@ int sensor_module_2p6_probe(struct platform_device *pdev)
        module->cfgs = ARRAY_SIZE(config_module_2p6);
        module->cfg = config_module_2p6;
        module->ops = NULL;
-       for (ch = 1; ch < CSI_VIRTUAL_CH_MAX; ch++)
+       for (ch = 1; ch < CSI_VIRTUAL_CH_MAX; ch++) {
                module->internal_vc[ch] = pdata->internal_vc[ch];
+               module->vc_buffer_offset[ch] = pdata->vc_buffer_offset[ch];
+       }
        /* Sensor peri */
        module->private_data = kzalloc(sizeof(struct fimc_is_device_sensor_peri), GFP_KERNEL);
        if (!module->private_data) {