Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6
[pandora-kernel.git] / drivers / media / video / gspca / m5602 / m5602_s5k4aa.h
index ca854d4..8cc7a3f 100644 (file)
@@ -47,8 +47,9 @@
 #define S5K4AA_H_BLANK_LO__            0x1e
 #define S5K4AA_EXPOSURE_HI             0x17
 #define S5K4AA_EXPOSURE_LO             0x18
-#define S5K4AA_GAIN_1                  0x1f /* (digital?) gain : 5 bits */
-#define S5K4AA_GAIN_2                  0x20 /* (analogue?) gain : 7 bits */
+#define S5K4AA_BRIGHTNESS              0x1f /* (digital?) gain : 5 bits */
+#define S5K4AA_GAIN                    0x20 /* (analogue?) gain : 7 bits */
+#define S5K4AA_NOISE_SUPP              0x37
 
 #define S5K4AA_RM_ROW_SKIP_4X          0x08
 #define S5K4AA_RM_ROW_SKIP_2X          0x04
@@ -57,6 +58,9 @@
 #define S5K4AA_RM_H_FLIP               0x40
 #define S5K4AA_RM_V_FLIP               0x80
 
+#define S5K4AA_DEFAULT_GAIN            0x5f
+#define S5K4AA_DEFAULT_BRIGHTNESS      0x10
+
 /*****************************************************************************/
 
 /* Kernel module parameters */
@@ -66,29 +70,20 @@ extern int dump_sensor;
 int s5k4aa_probe(struct sd *sd);
 int s5k4aa_init(struct sd *sd);
 int s5k4aa_start(struct sd *sd);
-int s5k4aa_power_down(struct sd *sd);
-
-int s5k4aa_get_exposure(struct gspca_dev *gspca_dev, __s32 *val);
-int s5k4aa_set_exposure(struct gspca_dev *gspca_dev, __s32 val);
-int s5k4aa_get_vflip(struct gspca_dev *gspca_dev, __s32 *val);
-int s5k4aa_set_vflip(struct gspca_dev *gspca_dev, __s32 val);
-int s5k4aa_get_hflip(struct gspca_dev *gspca_dev, __s32 *val);
-int s5k4aa_set_hflip(struct gspca_dev *gspca_dev, __s32 val);
-int s5k4aa_get_gain(struct gspca_dev *gspca_dev, __s32 *val);
-int s5k4aa_set_gain(struct gspca_dev *gspca_dev, __s32 val);
+void s5k4aa_disconnect(struct sd *sd);
 
 static const struct m5602_sensor s5k4aa = {
        .name = "S5K4AA",
+       .i2c_slave_id = 0x5a,
+       .i2c_regW = 2,
+
        .probe = s5k4aa_probe,
        .init = s5k4aa_init,
        .start = s5k4aa_start,
-       .power_down = s5k4aa_power_down,
-       .i2c_slave_id = 0x5a,
-       .i2c_regW = 2,
+       .disconnect = s5k4aa_disconnect,
 };
 
-static const unsigned char preinit_s5k4aa[][4] =
-{
+static const unsigned char preinit_s5k4aa[][4] = {
        {BRIDGE, M5602_XB_MCU_CLK_DIV, 0x02, 0x00},
        {BRIDGE, M5602_XB_MCU_CLK_CTRL, 0xb0, 0x00},
        {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00, 0x00},
@@ -131,8 +126,7 @@ static const unsigned char preinit_s5k4aa[][4] =
        {SENSOR, S5K4AA_PAGE_MAP, 0x00, 0x00}
 };
 
-static const unsigned char init_s5k4aa[][4] =
-{
+static const unsigned char init_s5k4aa[][4] = {
        {BRIDGE, M5602_XB_MCU_CLK_DIV, 0x02, 0x00},
        {BRIDGE, M5602_XB_MCU_CLK_CTRL, 0xb0, 0x00},
        {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00, 0x00},
@@ -179,30 +173,11 @@ static const unsigned char init_s5k4aa[][4] =
        {SENSOR, S5K4AA_PAGE_MAP, 0x02, 0x00},
        {SENSOR, 0x0c, 0x05, 0x00},
        {SENSOR, 0x02, 0x0e, 0x00},
-       {SENSOR, S5K4AA_GAIN_1, 0x0f, 0x00},
-       {SENSOR, S5K4AA_GAIN_2, 0x00, 0x00},
-       {SENSOR, S5K4AA_GLOBAL_GAIN__, 0x01, 0x00},
-       {SENSOR, 0x11, 0x00, 0x00},
-       {SENSOR, 0x12, 0x00, 0x00},
-       {SENSOR, S5K4AA_PAGE_MAP, 0x02, 0x00},
        {SENSOR, S5K4AA_READ_MODE, 0xa0, 0x00},
        {SENSOR, 0x37, 0x00, 0x00},
-       {SENSOR, S5K4AA_ROWSTART_HI, 0x00, 0x00},
-       {SENSOR, S5K4AA_ROWSTART_LO, 0x2a, 0x00},
-       {SENSOR, S5K4AA_COLSTART_HI, 0x00, 0x00},
-       {SENSOR, S5K4AA_COLSTART_LO, 0x0b, 0x00},
-       {SENSOR, S5K4AA_WINDOW_HEIGHT_HI, 0x03, 0x00},
-       {SENSOR, S5K4AA_WINDOW_HEIGHT_LO, 0xc4, 0x00},
-       {SENSOR, S5K4AA_WINDOW_WIDTH_HI, 0x05, 0x00},
-       {SENSOR, S5K4AA_WINDOW_WIDTH_LO, 0x08, 0x00},
-       {SENSOR, S5K4AA_H_BLANK_HI__, 0x00, 0x00},
-       {SENSOR, S5K4AA_H_BLANK_LO__, 0x48, 0x00},
-       {SENSOR, S5K4AA_EXPOSURE_HI, 0x00, 0x00},
-       {SENSOR, S5K4AA_EXPOSURE_LO, 0x43, 0x00},
-       {SENSOR, 0x11, 0x04, 0x00},
-       {SENSOR, 0x12, 0xc3, 0x00},
-       {SENSOR, S5K4AA_PAGE_MAP, 0x02, 0x00},
+};
 
+static const unsigned char VGA_s5k4aa[][4] = {
        {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x06, 0x00},
        {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0, 0x00},
        {BRIDGE, M5602_XB_ADC_CTRL, 0xc0, 0x00},
@@ -238,7 +213,7 @@ static const unsigned char init_s5k4aa[][4] =
        {SENSOR, 0x37, 0x01, 0x00},
        /* ROWSTART_HI, ROWSTART_LO : 10 + (1024-960)/2 = 42 = 0x002a */
        {SENSOR, S5K4AA_ROWSTART_HI, 0x00, 0x00},
-       {SENSOR, S5K4AA_ROWSTART_LO, 0x2a, 0x00},
+       {SENSOR, S5K4AA_ROWSTART_LO, 0x29, 0x00},
        {SENSOR, S5K4AA_COLSTART_HI, 0x00, 0x00},
        {SENSOR, S5K4AA_COLSTART_LO, 0x0c, 0x00},
        /* window_height_hi, window_height_lo : 960 = 0x03c0 */
@@ -255,13 +230,9 @@ static const unsigned char init_s5k4aa[][4] =
        {SENSOR, 0x12, 0xc3, 0x00},
        {SENSOR, S5K4AA_PAGE_MAP, 0x02, 0x00},
        {SENSOR, 0x02, 0x0e, 0x00},
-       {SENSOR_LONG, S5K4AA_GLOBAL_GAIN__, 0x0f, 0x00},
-       {SENSOR, S5K4AA_GAIN_1, 0x0b, 0x00},
-       {SENSOR, S5K4AA_GAIN_2, 0xa0, 0x00}
 };
 
-static const unsigned char VGA_s5k4aa[][4] =
-{
+static const unsigned char SXGA_s5k4aa[][4] = {
        {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x06, 0x00},
        {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xb0, 0x00},
        {BRIDGE, M5602_XB_ADC_CTRL, 0xc0, 0x00},
@@ -273,50 +244,40 @@ static const unsigned char VGA_s5k4aa[][4] =
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
-       /* VSYNC_PARA, VSYNC_PARA : img height 480 = 0x01e0 */
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0x01, 0x00},
-       {BRIDGE, M5602_XB_VSYNC_PARA, 0xe0, 0x00},
+       /* VSYNC_PARA, VSYNC_PARA : img height 1024 = 0x0400 */
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x04, 0x00},
+       {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
        {BRIDGE, M5602_XB_VSYNC_PARA, 0x00, 0x00},
        {BRIDGE, M5602_XB_SIG_INI, 0x00, 0x00},
        {BRIDGE, M5602_XB_SIG_INI, 0x02, 0x00},
        {BRIDGE, M5602_XB_HSYNC_PARA, 0x00, 0x00},
        {BRIDGE, M5602_XB_HSYNC_PARA, 0x00, 0x00},
-       /* HSYNC_PARA, HSYNC_PARA : img width 640 = 0x0280 */
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0x02, 0x00},
-       {BRIDGE, M5602_XB_HSYNC_PARA, 0x80, 0x00},
+       /* HSYNC_PARA, HSYNC_PARA : img width 1280 = 0x0500 */
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x05, 0x00},
+       {BRIDGE, M5602_XB_HSYNC_PARA, 0x00, 0x00},
        {BRIDGE, M5602_XB_SIG_INI, 0x00, 0x00},
        {BRIDGE, M5602_XB_SEN_CLK_DIV, 0x00, 0x00},
        {BRIDGE, M5602_XB_SEN_CLK_CTRL, 0xa0, 0x00}, /* 48 MHz */
 
        {SENSOR, S5K4AA_PAGE_MAP, 0x02, 0x00},
-       {SENSOR, S5K4AA_READ_MODE, S5K4AA_RM_H_FLIP | S5K4AA_RM_ROW_SKIP_2X
-               | S5K4AA_RM_COL_SKIP_2X, 0x00},
-       /* 0x37 : Fix image stability when light is too bright and improves
-        * image quality in 640x480, but worsens it in 1280x1024 */
+       {SENSOR, S5K4AA_READ_MODE, S5K4AA_RM_H_FLIP, 0x00},
        {SENSOR, 0x37, 0x01, 0x00},
-       /* ROWSTART_HI, ROWSTART_LO : 10 + (1024-960)/2 = 42 = 0x002a */
        {SENSOR, S5K4AA_ROWSTART_HI, 0x00, 0x00},
-       {SENSOR, S5K4AA_ROWSTART_LO, 0x2a, 0x00},
+       {SENSOR, S5K4AA_ROWSTART_LO, 0x09, 0x00},
        {SENSOR, S5K4AA_COLSTART_HI, 0x00, 0x00},
-       {SENSOR, S5K4AA_COLSTART_LO, 0x0c, 0x00},
-       /* window_height_hi, window_height_lo : 960 = 0x03c0 */
-       {SENSOR, S5K4AA_WINDOW_HEIGHT_HI, 0x03, 0x00},
-       {SENSOR, S5K4AA_WINDOW_HEIGHT_LO, 0xc0, 0x00},
-       /* window_width_hi, window_width_lo : 1280 = 0x0500 */
+       {SENSOR, S5K4AA_COLSTART_LO, 0x0a, 0x00},
+       {SENSOR, S5K4AA_WINDOW_HEIGHT_HI, 0x04, 0x00},
+       {SENSOR, S5K4AA_WINDOW_HEIGHT_LO, 0x00, 0x00},
        {SENSOR, S5K4AA_WINDOW_WIDTH_HI, 0x05, 0x00},
        {SENSOR, S5K4AA_WINDOW_WIDTH_LO, 0x00, 0x00},
-       {SENSOR, S5K4AA_H_BLANK_HI__, 0x00, 0x00},
-       {SENSOR, S5K4AA_H_BLANK_LO__, 0xa8, 0x00}, /* helps to sync... */
+       {SENSOR, S5K4AA_H_BLANK_HI__, 0x01, 0x00},
+       {SENSOR, S5K4AA_H_BLANK_LO__, 0xa8, 0x00},
        {SENSOR, S5K4AA_EXPOSURE_HI, 0x01, 0x00},
        {SENSOR, S5K4AA_EXPOSURE_LO, 0x00, 0x00},
        {SENSOR, 0x11, 0x04, 0x00},
        {SENSOR, 0x12, 0xc3, 0x00},
        {SENSOR, S5K4AA_PAGE_MAP, 0x02, 0x00},
        {SENSOR, 0x02, 0x0e, 0x00},
-       {SENSOR_LONG, S5K4AA_GLOBAL_GAIN__, 0x0f, 0x00},
-       {SENSOR, S5K4AA_GAIN_1, 0x0b, 0x00},
-       {SENSOR, S5K4AA_GAIN_2, 0xa0, 0x00}
 };
-
 #endif