]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/video/via/vt1636.c
Merge tag 'v2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / video / via / vt1636.c
index d65bf1aee87c1868db5b1127afb95af5cf2426dd..60e4192c2b34845368d42d7c159dcfd6ff297bba 100644 (file)
 #include <linux/via_i2c.h>
 #include "global.h"
 
+static const struct IODATA common_init_data[] = {
+/*  Index, Mask, Value */
+       /* Set panel power sequence timing */
+       {0x10, 0xC0, 0x00},
+       /* T1: VDD on - Data on. Each increment is 1 ms. (50ms = 031h) */
+       {0x0B, 0xFF, 0x40},
+       /* T2: Data on - Backlight on. Each increment is 2 ms. (210ms = 068h) */
+       {0x0C, 0xFF, 0x31},
+       /* T3: Backlight off -Data off. Each increment is 2 ms. (210ms = 068h)*/
+       {0x0D, 0xFF, 0x31},
+       /* T4: Data off - VDD off. Each increment is 1 ms. (50ms = 031h) */
+       {0x0E, 0xFF, 0x68},
+       /* T5: VDD off - VDD on. Each increment is 100 ms. (500ms = 04h) */
+       {0x0F, 0xFF, 0x68},
+       /* LVDS output power up */
+       {0x09, 0xA0, 0xA0},
+       /* turn on back light */
+       {0x10, 0x33, 0x13}
+};
+
+/* Index, Mask, Value */
+static const struct IODATA dual_channel_enable_data = {0x08, 0xF0, 0xE0};
+static const struct IODATA single_channel_enable_data = {0x08, 0xF0, 0x00};
+static const struct IODATA dithering_enable_data = {0x0A, 0x70, 0x50};
+static const struct IODATA dithering_disable_data = {0x0A, 0x70, 0x00};
+static const struct IODATA vdd_on_data = {0x10, 0x20, 0x20};
+static const struct IODATA vdd_off_data = {0x10, 0x20, 0x00};
+
 u8 viafb_gpio_i2c_read_lvds(struct lvds_setting_information
        *plvds_setting_info, struct lvds_chip_information *plvds_chip_info,
        u8 index)
@@ -55,108 +83,41 @@ void viafb_init_lvds_vt1636(struct lvds_setting_information
        int reg_num, i;
 
        /* Common settings: */
-       reg_num = ARRAY_SIZE(COMMON_INIT_TBL_VT1636);
-
-       for (i = 0; i < reg_num; i++) {
+       reg_num = ARRAY_SIZE(common_init_data);
+       for (i = 0; i < reg_num; i++)
                viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
-                                        plvds_chip_info,
-                                        COMMON_INIT_TBL_VT1636[i]);
-       }
+                       plvds_chip_info, common_init_data[i]);
 
        /* Input Data Mode Select */
-       if (plvds_setting_info->device_lcd_dualedge) {
+       if (plvds_setting_info->device_lcd_dualedge)
                viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
-                                        plvds_chip_info,
-                                        DUAL_CHANNEL_ENABLE_TBL_VT1636[0]);
-       } else {
+                       plvds_chip_info, dual_channel_enable_data);
+       else
                viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
-                                        plvds_chip_info,
-                                        SINGLE_CHANNEL_ENABLE_TBL_VT1636[0]);
-       }
+                       plvds_chip_info, single_channel_enable_data);
 
-       if (plvds_setting_info->LCDDithering) {
+       if (plvds_setting_info->LCDDithering)
                viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
-                                        plvds_chip_info,
-                                        DITHERING_ENABLE_TBL_VT1636[0]);
-       } else {
+                       plvds_chip_info, dithering_enable_data);
+       else
                viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
-                                        plvds_chip_info,
-                                        DITHERING_DISABLE_TBL_VT1636[0]);
-       }
+                       plvds_chip_info, dithering_disable_data);
 }
 
 void viafb_enable_lvds_vt1636(struct lvds_setting_information
                        *plvds_setting_info,
                        struct lvds_chip_information *plvds_chip_info)
 {
-
        viafb_gpio_i2c_write_mask_lvds(plvds_setting_info, plvds_chip_info,
-                                VDD_ON_TBL_VT1636[0]);
-
-       /* Pad on: */
-       switch (plvds_chip_info->output_interface) {
-       case INTERFACE_DVP0:
-               {
-                       viafb_write_reg_mask(SR1E, VIASR, 0xC0, 0xC0);
-                       break;
-               }
-
-       case INTERFACE_DVP1:
-               {
-                       viafb_write_reg_mask(SR1E, VIASR, 0x30, 0x30);
-                       break;
-               }
-
-       case INTERFACE_DFP_LOW:
-               {
-                       viafb_write_reg_mask(SR2A, VIASR, 0x03, 0x03);
-                       break;
-               }
-
-       case INTERFACE_DFP_HIGH:
-               {
-                       viafb_write_reg_mask(SR2A, VIASR, 0x03, 0x0C);
-                       break;
-               }
-
-       }
+               vdd_on_data);
 }
 
 void viafb_disable_lvds_vt1636(struct lvds_setting_information
                         *plvds_setting_info,
                         struct lvds_chip_information *plvds_chip_info)
 {
-
        viafb_gpio_i2c_write_mask_lvds(plvds_setting_info, plvds_chip_info,
-                                VDD_OFF_TBL_VT1636[0]);
-
-       /* Pad off: */
-       switch (plvds_chip_info->output_interface) {
-       case INTERFACE_DVP0:
-               {
-                       viafb_write_reg_mask(SR1E, VIASR, 0x00, 0xC0);
-                       break;
-               }
-
-       case INTERFACE_DVP1:
-               {
-                       viafb_write_reg_mask(SR1E, VIASR, 0x00, 0x30);
-                       break;
-               }
-
-       case INTERFACE_DFP_LOW:
-               {
-                       viafb_write_reg_mask(SR2A, VIASR, 0x00, 0x03);
-                       break;
-               }
-
-       case INTERFACE_DFP_HIGH:
-               {
-                       viafb_write_reg_mask(SR2A, VIASR, 0x00, 0x0C);
-                       break;
-               }
-
-       }
+               vdd_off_data);
 }
 
 bool viafb_lvds_identify_vt1636(u8 i2c_adapter)