From 76b884dcf6553dfbc428ba85d5edbccbd1f17171 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 22 Aug 2012 17:37:07 +0800 Subject: [PATCH] camera rk2928: add user define seriers --- arch/arm/configs/rk2928_a720_defconfig | 1 + drivers/media/video/gc0308_user_series.c | 502 +++++++++++++++++++++++ 2 files changed, 503 insertions(+) create mode 100644 drivers/media/video/gc0308_user_series.c diff --git a/arch/arm/configs/rk2928_a720_defconfig b/arch/arm/configs/rk2928_a720_defconfig index 02cf8a679045..bc4cf7cebe6a 100644 --- a/arch/arm/configs/rk2928_a720_defconfig +++ b/arch/arm/configs/rk2928_a720_defconfig @@ -268,6 +268,7 @@ CONFIG_MEDIA_SUPPORT=y CONFIG_VIDEO_DEV=y CONFIG_SOC_CAMERA=y CONFIG_SOC_CAMERA_GC0308=y +CONFIG_GC0308_USER_DEFINED_SERIES=y CONFIG_VIDEO_RK29=y CONFIG_VIDEO_RK29_CAMMEM_ION=y CONFIG_ION=y diff --git a/drivers/media/video/gc0308_user_series.c b/drivers/media/video/gc0308_user_series.c new file mode 100644 index 000000000000..cab2f09b15d5 --- /dev/null +++ b/drivers/media/video/gc0308_user_series.c @@ -0,0 +1,502 @@ +/* init 640X480 VGA */ +static struct reginfo sensor_init_data[] = +{ + + {0xfe , 0x80}, + + {0xfe , 0x00}, // set page0 + + {0xd2 , 0x10}, // close AEC + {0x22 , 0x55}, // close AWB + + {0x03 , 0x01}, + {0x04 , 0x2c}, + {0x5a , 0x56}, + {0x5b , 0x40}, + {0x5c , 0x4a}, + + {0x22 , 0x57}, // Open AWB + + {0x01 , 0xfa}, + {0x02 , 0x70}, + {0x0f , 0x01}, + + + {0xe2 , 0x00}, //anti-flicker step [11:8] + {0xe3 , 0x64}, //anti-flicker step [7:0] + + {0xe4 , 0x02}, //exp level 1 16.67fps + {0xe5 , 0x58}, + {0xe6 , 0x03}, //exp level 2 12.5fps + {0xe7 , 0x20}, + {0xe8 , 0x04}, //exp level 3 8.33fps + {0xe9 , 0xb0}, + {0xea , 0x09}, //exp level 4 4.00fps + {0xeb , 0xc4}, + + //{0xec , 0x20}, + + {0x05 , 0x00}, + {0x06 , 0x00}, + {0x07 , 0x00}, + {0x08 , 0x00}, + {0x09 , 0x01}, + {0x0a , 0xe8}, + {0x0b , 0x02}, + {0x0c , 0x88}, + {0x0d , 0x02}, + {0x0e , 0x02}, + {0x10 , 0x22}, + {0x11 , 0xfd}, + {0x12 , 0x2a}, + {0x13 , 0x00}, + //{0x14 , 0x10}, + {0x15 , 0x0a}, + {0x16 , 0x05}, + {0x17 , 0x01}, + {0x18 , 0x44}, + {0x19 , 0x44}, + {0x1a , 0x1e}, + {0x1b , 0x00}, + {0x1c , 0xc1}, + {0x1d , 0x08}, + {0x1e , 0x60}, + {0x1f , 0x17}, + + + {0x20 , 0xff}, + {0x21 , 0xf8}, + {0x22 , 0x57}, + {0x24 , 0xa2}, + {0x25 , 0x0f}, + + //output sync_mode + {0x26 , 0x02}, //0x03 20101016 zhj + {0x2f , 0x01}, + {0x30 , 0xf7}, + {0x31 , 0x50}, + {0x32 , 0x00}, + {0x39 , 0x04}, + {0x3a , 0x18}, + {0x3b , 0x20}, + {0x3c , 0x00}, + {0x3d , 0x00}, + {0x3e , 0x00}, + {0x3f , 0x00}, + {0x50 , 0x10}, + {0x53 , 0x82}, + {0x54 , 0x80}, + {0x55 , 0x80}, + {0x56 , 0x82}, + {0x8b , 0x40}, + {0x8c , 0x40}, + {0x8d , 0x40}, + {0x8e , 0x2e}, + {0x8f , 0x2e}, + {0x90 , 0x2e}, + {0x91 , 0x3c}, + {0x92 , 0x50}, + {0x5d , 0x12}, + {0x5e , 0x1a}, + {0x5f , 0x24}, + {0x60 , 0x07}, + {0x61 , 0x15}, + {0x62 , 0x08}, + {0x64 , 0x03}, + {0x66 , 0xe8}, + {0x67 , 0x86}, + {0x68 , 0xa2}, + {0x69 , 0x18}, + {0x6a , 0x0f}, + {0x6b , 0x00}, + {0x6c , 0x5f}, + {0x6d , 0x8f}, + {0x6e , 0x55}, + {0x6f , 0x38}, + {0x70 , 0x15}, + {0x71 , 0x33}, + {0x72 , 0xdc}, + {0x73 , 0x80}, + {0x74 , 0x02}, + {0x75 , 0x3f}, + {0x76 , 0x02}, + {0x77 , 0x36}, + {0x78 , 0x88}, + {0x79 , 0x81}, + {0x7a , 0x81}, + {0x7b , 0x22}, + {0x7c , 0xff}, + {0x93 , 0x48}, + {0x94 , 0x00}, + {0x95 , 0x05}, + {0x96 , 0xe8}, + {0x97 , 0x40}, + {0x98 , 0xf0}, + {0xb1 , 0x38}, + {0xb2 , 0x38}, + {0xbd , 0x38}, + {0xbe , 0x36}, + {0xd0 , 0xc9}, + {0xd1 , 0x10}, + //{0xd2 , 0x90}, + {0xd3 , 0x80}, + {0xd5 , 0xf2}, + {0xd6 , 0x16}, + {0xdb , 0x92}, + {0xdc , 0xa5}, + {0xdf , 0x23}, + {0xd9 , 0x00}, + {0xda , 0x00}, + {0xe0 , 0x09}, + + {0xed , 0x04}, + {0xee , 0xa0}, + {0xef , 0x40}, + {0x80 , 0x03}, + {0x80 , 0x03}, + {0x9F , 0x10}, + {0xA0 , 0x20}, + {0xA1 , 0x38}, + {0xA2 , 0x4E}, + {0xA3 , 0x63}, + {0xA4 , 0x76}, + {0xA5 , 0x87}, + {0xA6 , 0xA2}, + {0xA7 , 0xB8}, + {0xA8 , 0xCA}, + {0xA9 , 0xD8}, + {0xAA , 0xE3}, + {0xAB , 0xEB}, + {0xAC , 0xF0}, + {0xAD , 0xF8}, + {0xAE , 0xFD}, + {0xAF , 0xFF}, + {0xc0 , 0x00}, + {0xc1 , 0x10}, + {0xc2 , 0x1C}, + {0xc3 , 0x30}, + {0xc4 , 0x43}, + {0xc5 , 0x54}, + {0xc6 , 0x65}, + {0xc7 , 0x75}, + {0xc8 , 0x93}, + {0xc9 , 0xB0}, + {0xca , 0xCB}, + {0xcb , 0xE6}, + {0xcc , 0xFF}, + {0xf0 , 0x02}, + {0xf1 , 0x01}, + {0xf2 , 0x01}, + {0xf3 , 0x30}, + {0xf9 , 0x9f}, + {0xfa , 0x78}, + + //--------------------------------------------------------------- + {0xfe , 0x01},// set page1 + + {0x00 , 0xf5}, + {0x02 , 0x1a}, + {0x0a , 0xa0}, + {0x0b , 0x60}, + {0x0c , 0x08}, + {0x0e , 0x4c}, + {0x0f , 0x39}, + {0x11 , 0x3f}, + {0x12 , 0x72}, + {0x13 , 0x13}, + {0x14 , 0x42}, + {0x15 , 0x43}, + {0x16 , 0xc2}, + {0x17 , 0xa8}, + {0x18 , 0x18}, + {0x19 , 0x40}, + {0x1a , 0xd0}, + {0x1b , 0xf5}, + {0x70 , 0x40}, + {0x71 , 0x58}, + {0x72 , 0x30}, + {0x73 , 0x48}, + {0x74 , 0x20}, + {0x75 , 0x60}, + {0x77 , 0x20}, + {0x78 , 0x32}, + {0x30 , 0x03}, + {0x31 , 0x40}, + {0x32 , 0xe0}, + {0x33 , 0xe0}, + {0x34 , 0xe0}, + {0x35 , 0xb0}, + {0x36 , 0xc0}, + {0x37 , 0xc0}, + {0x38 , 0x04}, + {0x39 , 0x09}, + {0x3a , 0x12}, + {0x3b , 0x1C}, + {0x3c , 0x28}, + {0x3d , 0x31}, + {0x3e , 0x44}, + {0x3f , 0x57}, + {0x40 , 0x6C}, + {0x41 , 0x81}, + {0x42 , 0x94}, + {0x43 , 0xA7}, + {0x44 , 0xB8}, + {0x45 , 0xD6}, + {0x46 , 0xEE}, + {0x47 , 0x0d}, + {0xfe , 0x00}, // set page0 + + //-----------Update the registers 2010/07/06-------------// + //Registers of Page0 + {0xfe , 0x00}, // set page0 + {0x10 , 0x26}, + {0x11 , 0x0d}, // fd,modified by mormo 2010/07/06 + {0x1a , 0x2a}, // 1e,modified by mormo 2010/07/06 + + {0x1c , 0x49}, // c1,modified by mormo 2010/07/06 + {0x1d , 0x9a}, // 08,modified by mormo 2010/07/06 + {0x1e , 0x61}, // 60,modified by mormo 2010/07/06 + + {0x3a , 0x20}, + + {0x50 , 0x14}, // 10,modified by mormo 2010/07/06 + {0x53 , 0x80}, + {0x56 , 0x80}, + + {0x8b , 0x20}, //LSC + {0x8c , 0x20}, + {0x8d , 0x20}, + {0x8e , 0x14}, + {0x8f , 0x10}, + {0x90 , 0x14}, + + {0x94 , 0x02}, + {0x95 , 0x07}, + {0x96 , 0xe0}, + + {0xb1 , 0x40}, // YCPT + {0xb2 , 0x40}, + {0xb3 , 0x40}, + {0xb6 , 0xe0}, + + {0xd0 , 0xcb}, // AECT c9,modifed by mormo 2010/07/06 + {0xd3 , 0x48}, // 80,modified by mormor 2010/07/06 + + {0xf2 , 0x02}, + {0xf7 , 0x12}, + {0xf8 , 0x0a}, + + //Registers of Page1 + {0xfe , 0x01},// set page1 + {0x02 , 0x20}, + {0x04 , 0x10}, + {0x05 , 0x08}, + {0x06 , 0x20}, + {0x08 , 0x0a}, + + {0x0e , 0x44}, + {0x0f , 0x32}, + {0x10 , 0x41}, + {0x11 , 0x37}, + {0x12 , 0x22}, + {0x13 , 0x19}, + {0x14 , 0x44}, + {0x15 , 0x44}, + + {0x19 , 0x50}, + {0x1a , 0xd8}, + + {0x32 , 0x10}, + + {0x35 , 0x00}, + {0x36 , 0x80}, + {0x37 , 0x00}, + //-----------Update the registers end---------// + + + {0xfe , 0x00}, // set page0 + {0xd2 , 0x90}, + + + //-----------GAMMA Select(3)---------------// + {0x9F , 0x10}, + {0xA0 , 0x20}, + {0xA1 , 0x38}, + {0xA2 , 0x4E}, + {0xA3 , 0x63}, + {0xA4 , 0x76}, + {0xA5 , 0x87}, + {0xA6 , 0xA2}, + {0xA7 , 0xB8}, + {0xA8 , 0xCA}, + {0xA9 , 0xD8}, + {0xAA , 0xE3}, + {0xAB , 0xEB}, + {0xAC , 0xF0}, + {0xAD , 0xF8}, + {0xAE , 0xFD}, + {0xAF , 0xFF}, + + /*GC0308_GAMMA_Select, + 1: //smallest gamma curve + {0x9F , 0x0B}, + {0xA0 , 0x16}, + {0xA1 , 0x29}, + {0xA2 , 0x3C}, + {0xA3 , 0x4F}, + {0xA4 , 0x5F}, + {0xA5 , 0x6F}, + {0xA6 , 0x8A}, + {0xA7 , 0x9F}, + {0xA8 , 0xB4}, + {0xA9 , 0xC6}, + {0xAA , 0xD3}, + {0xAB , 0xDD}, + {0xAC , 0xE5}, + {0xAD , 0xF1}, + {0xAE , 0xFA}, + {0xAF , 0xFF}, + + 2: + {0x9F , 0x0E}, + {0xA0 , 0x1C}, + {0xA1 , 0x34}, + {0xA2 , 0x48}, + {0xA3 , 0x5A}, + {0xA4 , 0x6B}, + {0xA5 , 0x7B}, + {0xA6 , 0x95}, + {0xA7 , 0xAB}, + {0xA8 , 0xBF}, + {0xA9 , 0xCE}, + {0xAA , 0xD9}, + {0xAB , 0xE4}, + {0xAC , 0xEC}, + {0xAD , 0xF7}, + {0xAE , 0xFD}, + {0xAF , 0xFF}, + + 3: + {0x9F , 0x10}, + {0xA0 , 0x20}, + {0xA1 , 0x38}, + {0xA2 , 0x4E}, + {0xA3 , 0x63}, + {0xA4 , 0x76}, + {0xA5 , 0x87}, + {0xA6 , 0xA2}, + {0xA7 , 0xB8}, + {0xA8 , 0xCA}, + {0xA9 , 0xD8}, + {0xAA , 0xE3}, + {0xAB , 0xEB}, + {0xAC , 0xF0}, + {0xAD , 0xF8}, + {0xAE , 0xFD}, + {0xAF , 0xFF}, + + 4: + {0x9F , 0x14}, + {0xA0 , 0x28}, + {0xA1 , 0x44}, + {0xA2 , 0x5D}, + {0xA3 , 0x72}, + {0xA4 , 0x86}, + {0xA5 , 0x95}, + {0xA6 , 0xB1}, + {0xA7 , 0xC6}, + {0xA8 , 0xD5}, + {0xA9 , 0xE1}, + {0xAA , 0xEA}, + {0xAB , 0xF1}, + {0xAC , 0xF5}, + {0xAD , 0xFB}, + {0xAE , 0xFE}, + {0xAF , 0xFF}, + + 5: //largest gamma curve + {0x9F , 0x15}, + {0xA0 , 0x2A}, + {0xA1 , 0x4A}, + {0xA2 , 0x67}, + {0xA3 , 0x79}, + {0xA4 , 0x8C}, + {0xA5 , 0x9A}, + {0xA6 , 0xB3}, + {0xA7 , 0xC5}, + {0xA8 , 0xD5}, + {0xA9 , 0xDF}, + {0xAA , 0xE8}, + {0xAB , 0xEE}, + {0xAC , 0xF3}, + {0xAD , 0xFA}, + {0xAE , 0xFD}, + {0xAF , 0xFF}, */ + //-----------GAMMA Select End--------------// + + + + + //-------------H_V_Switch(4)---------------// + {0x14 , 0x10}, //0x10 + + /*GC0308_H_V_Switch, + + 1: // normal + {0x14 , 0x10}, + + 2: // IMAGE_H_MIRROR + {0x14 , 0x11}, + + 3: // IMAGE_V_MIRROR + {0x14 , 0x12}, + + 4: // IMAGE_HV_MIRROR + {0x14 , 0x13}, + */ + //-------------H_V_Select End--------------// + +}; + +/* 1280X1024 SXGA */ +static struct reginfo sensor_sxga[] = +{ + {0x00,0x00} +}; + +/* 800X600 SVGA*/ +static struct reginfo sensor_svga[] = +{ + {0x0, 0x0}, +}; + +/* 640X480 VGA */ +static struct reginfo sensor_vga[] = +{ + {0x17, 0x13}, + {0x18, 0x01}, + {0x32, 0xbf}, + {0x19, 0x03}, + {0x1a, 0x7b}, + {0x03, 0x0a}, + {0x00,0x00} +}; + +/* 352X288 CIF */ +static struct reginfo sensor_cif[] = +{ + {0x00,0x00} +}; + +/* 320*240 QVGA */ +static struct reginfo sensor_qvga[] = +{ + {0x00,0x00} +}; + +/* 176X144 QCIF*/ +static struct reginfo sensor_qcif[] = +{ + {0x00,0x00} +}; + -- 2.34.1