]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/staging/olpc_dcon/olpc_dcon.c
Merge remote-tracking branch 'moduleh/module.h-split'
[karo-tx-linux.git] / drivers / staging / olpc_dcon / olpc_dcon.c
index ad306ff5ee671e973ba929922cb6b66bfd536796..200fc844648b5c9881eeeb5d641fbd0b0e262f90 100644 (file)
@@ -37,9 +37,6 @@
 static int resumeline = 898;
 module_param(resumeline, int, 0444);
 
-static int noinit;
-module_param(noinit, int, 0444);
-
 /* Default off since it doesn't work on DCON ASIC in B-test OLPC board */
 static int useaa = 1;
 module_param(useaa, int, 0444);
@@ -69,11 +66,10 @@ static s32 dcon_read(struct dcon_priv *dcon, u8 reg)
 
 static int dcon_hw_init(struct dcon_priv *dcon, int is_init)
 {
-       struct i2c_client *client = dcon->client;
        uint16_t ver;
        int rc = 0;
 
-       ver = i2c_smbus_read_word_data(client, DCON_REG_ID);
+       ver = dcon_read(dcon, DCON_REG_ID);
        if ((ver >> 8) != 0xDC) {
                printk(KERN_ERR "olpc-dcon:  DCON ID not 0xDCxx: 0x%04x "
                                "instead.\n", ver);
@@ -91,30 +87,19 @@ static int dcon_hw_init(struct dcon_priv *dcon, int is_init)
                }
        }
 
-       if (ver < 0xdc02 && !noinit) {
-               /* Initialize the DCON registers */
-
-               /* Start with work-arounds for DCON ASIC */
-               i2c_smbus_write_word_data(client, 0x4b, 0x00cc);
-               i2c_smbus_write_word_data(client, 0x4b, 0x00cc);
-               i2c_smbus_write_word_data(client, 0x4b, 0x00cc);
-               i2c_smbus_write_word_data(client, 0x0b, 0x007a);
-               i2c_smbus_write_word_data(client, 0x36, 0x025c);
-               i2c_smbus_write_word_data(client, 0x37, 0x025e);
-
-               /* Initialise SDRAM */
-
-               i2c_smbus_write_word_data(client, 0x3b, 0x002b);
-               i2c_smbus_write_word_data(client, 0x41, 0x0101);
-               i2c_smbus_write_word_data(client, 0x42, 0x0101);
-       } else if (!noinit) {
-               /* SDRAM setup/hold time */
-               i2c_smbus_write_word_data(client, 0x3a, 0xc040);
-               i2c_smbus_write_word_data(client, 0x41, 0x0000);
-               i2c_smbus_write_word_data(client, 0x41, 0x0101);
-               i2c_smbus_write_word_data(client, 0x42, 0x0101);
+       if (ver < 0xdc02) {
+               dev_err(&dcon->client->dev,
+                               "DCON v1 is unsupported, giving up..\n");
+               rc = -ENODEV;
+               goto err;
        }
 
+       /* SDRAM setup/hold time */
+       dcon_write(dcon, 0x3a, 0xc040);
+       dcon_write(dcon, 0x41, 0x0000);
+       dcon_write(dcon, 0x41, 0x0101);
+       dcon_write(dcon, 0x42, 0x0101);
+
        /* Colour swizzle, AA, no passthrough, backlight */
        if (is_init) {
                dcon->disp_mode = MODE_PASSTHRU | MODE_BL_ENABLE |
@@ -122,11 +107,11 @@ static int dcon_hw_init(struct dcon_priv *dcon, int is_init)
                if (useaa)
                        dcon->disp_mode |= MODE_COL_AA;
        }
-       i2c_smbus_write_word_data(client, DCON_REG_MODE, dcon->disp_mode);
+       dcon_write(dcon, DCON_REG_MODE, dcon->disp_mode);
 
 
        /* Set the scanline to interrupt on during resume */
-       i2c_smbus_write_word_data(client, DCON_REG_SCAN_INT, resumeline);
+       dcon_write(dcon, DCON_REG_SCAN_INT, resumeline);
 
 err:
        return rc;