par->chan[1].par = par;
        par->chan[2].par = par;
 
-       par->chan[0].ddc_base = 0x36;
-       nvidia_setup_i2c_bus(&par->chan[0], "nvidia #0", I2C_CLASS_HWMON);
+       par->chan[0].ddc_base = (par->reverse_i2c) ? 0x36 : 0x3e;
+       nvidia_setup_i2c_bus(&par->chan[0], "nvidia #0", 0);
 
-       par->chan[1].ddc_base = 0x3e;
-       nvidia_setup_i2c_bus(&par->chan[1], "nvidia #1", 0);
+       par->chan[1].ddc_base = (par->reverse_i2c) ? 0x3e : 0x36;
+       nvidia_setup_i2c_bus(&par->chan[1], "nvidia #1", I2C_CLASS_HWMON);
 
        par->chan[2].ddc_base = 0x50;
        nvidia_setup_i2c_bus(&par->chan[2], "nvidia #2", 0);
 
 static int paneltweak __devinitdata = 0;
 static int vram __devinitdata = 0;
 static int bpp __devinitdata = 8;
+static int reverse_i2c __devinitdata;
 #ifdef CONFIG_MTRR
 static int nomtrr __devinitdata = 0;
 #endif
        par->CRTCnumber = forceCRTC;
        par->FpScale = (!noscale);
        par->paneltweak = paneltweak;
+       par->reverse_i2c = reverse_i2c;
 
        /* enable IO and mem if not already done */
        pci_read_config_word(pd, PCI_COMMAND, &cmd);
                        noaccel = 1;
                } else if (!strncmp(this_opt, "noscale", 7)) {
                        noscale = 1;
+               } else if (!strncmp(this_opt, "reverse_i2c", 11)) {
+                       reverse_i2c = 1;
                } else if (!strncmp(this_opt, "paneltweak:", 11)) {
                        paneltweak = simple_strtoul(this_opt+11, NULL, 0);
                } else if (!strncmp(this_opt, "vram:", 5)) {
 module_param(bpp, int, 0);
 MODULE_PARM_DESC(bpp, "pixel width in bits"
                 "(default=8)");
+module_param(reverse_i2c, int, 0);
+MODULE_PARM_DESC(reverse_i2c, "reverse port assignment of the i2c bus");
 #ifdef CONFIG_MTRR
 module_param(nomtrr, bool, 0);
 MODULE_PARM_DESC(nomtrr, "Disables MTRR support (0 or 1=disabled) "