Show
Ignore:
Timestamp:
01/11/03 19:50:38 (11 years ago)
Author:
mds
Message:

backport from kernel 2.5.54 which contained changes from

Christoph Hellwig <hch@…> and Pavel <pavel@…>;
Leave in 3 things: refcounts, version.h, and init printk.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/kernel/busses/i2c-amd756.c

    r1616 r1694  
    2828    2002-04-08: Added nForce support. (Csaba Halasz) 
    2929    2002-10-03: Fixed nForce PnP I/O port. (Michael Steil) 
     30    2002-12-28: Rewritten into something that resembles a Linux driver (hch) 
    3031*/ 
    3132 
     
    3839#include <linux/module.h> 
    3940#include <linux/pci.h> 
    40 #include <asm/io.h> 
    4141#include <linux/kernel.h> 
    4242#include <linux/stddef.h> 
     
    4646#include "version.h" 
    4747#include <linux/init.h> 
    48  
    49 #ifndef PCI_DEVICE_ID_AMD_756 
    50 #define PCI_DEVICE_ID_AMD_756 0x740B 
    51 #endif 
    52 #ifndef PCI_DEVICE_ID_AMD_766 
    53 #define PCI_DEVICE_ID_AMD_766 0x7413 
    54 #endif 
    55 #ifndef PCI_DEVICE_ID_AMD_768_SMBUS 
    56 #define PCI_DEVICE_ID_AMD_768_SMBUS 0x7443 
    57 #endif 
    58 #ifndef PCI_DEVICE_ID_AMD_8111_SMBUS 
    59 #define PCI_DEVICE_ID_AMD_8111_SMBUS 0x746B 
    60 #endif 
    61 #ifndef PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 
    62 #define PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS 0x01B4 
    63 #endif 
    64  
    65 struct sd { 
    66     const unsigned short vendor; 
    67     const unsigned short device; 
    68     const unsigned short function; 
    69     const char* name; 
    70     int amdsetup:1; 
    71 }; 
    72  
    73 static struct sd supported[] = { 
    74     {PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_756, 3, "AMD756", 1}, 
    75     {PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_766, 3, "AMD766", 1}, 
    76     {PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_768_SMBUS, 3, "AMD768", 1}, 
    77     {PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_SMBUS, 3, "AMD8111", 1}, 
    78     {PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_SMBUS, 1, "nVidia nForce", 0}, 
    79     {0, 0, 0} 
    80 }; 
     48#include <asm/io.h> 
     49 
     50#define DRV_NAME        "i2c-amd756" 
    8151 
    8252/* AMD756 SMBus address offsets */ 
    8353#define SMB_ADDR_OFFSET        0xE0 
    8454#define SMB_IOSIZE             16 
    85 #define SMB_GLOBAL_STATUS      (0x0 + amd756_smba) 
    86 #define SMB_GLOBAL_ENABLE      (0x2 + amd756_smba) 
    87 #define SMB_HOST_ADDRESS       (0x4 + amd756_smba) 
    88 #define SMB_HOST_DATA          (0x6 + amd756_smba) 
    89 #define SMB_HOST_COMMAND       (0x8 + amd756_smba) 
    90 #define SMB_HOST_BLOCK_DATA    (0x9 + amd756_smba) 
    91 #define SMB_HAS_DATA           (0xA + amd756_smba) 
    92 #define SMB_HAS_DEVICE_ADDRESS (0xC + amd756_smba) 
    93 #define SMB_HAS_HOST_ADDRESS   (0xE + amd756_smba) 
    94 #define SMB_SNOOP_ADDRESS      (0xF + amd756_smba) 
     55#define SMB_GLOBAL_STATUS      (0x0 + amd756_ioport) 
     56#define SMB_GLOBAL_ENABLE      (0x2 + amd756_ioport) 
     57#define SMB_HOST_ADDRESS       (0x4 + amd756_ioport) 
     58#define SMB_HOST_DATA          (0x6 + amd756_ioport) 
     59#define SMB_HOST_COMMAND       (0x8 + amd756_ioport) 
     60#define SMB_HOST_BLOCK_DATA    (0x9 + amd756_ioport) 
     61#define SMB_HAS_DATA           (0xA + amd756_ioport) 
     62#define SMB_HAS_DEVICE_ADDRESS (0xC + amd756_ioport) 
     63#define SMB_HAS_HOST_ADDRESS   (0xE + amd756_ioport) 
     64#define SMB_SNOOP_ADDRESS      (0xF + amd756_ioport) 
    9565 
    9666/* PCI Address Constants */ 
     
    11787#define AMD756_BLOCK_DATA   0x05 
    11888 
    119 /* insmod parameters */ 
    120  
    121 #ifdef MODULE 
    122 static 
    123 #else 
    124 extern 
    125 #endif 
    126 int __init i2c_amd756_init(void); 
    127 static int __init amd756_cleanup(void); 
    128 static int amd756_setup(void); 
    129 static s32 amd756_access(struct i2c_adapter *adap, u16 addr, 
    130                          unsigned short flags, char read_write, 
    131                          u8 command, int size, union i2c_smbus_data *data); 
    132 static void amd756_do_pause(unsigned int amount); 
    133 static void amd756_abort(void); 
    134 static int amd756_transaction(void); 
    135 static void amd756_inc(struct i2c_adapter *adapter); 
    136 static void amd756_dec(struct i2c_adapter *adapter); 
    137 static u32 amd756_func(struct i2c_adapter *adapter); 
    138  
    139 #ifdef MODULE 
    140 extern int init_module(void); 
    141 extern int cleanup_module(void); 
    142 #endif                          /* MODULE */ 
    143  
    144 static struct i2c_algorithm smbus_algorithm = { 
    145         /* name */ "Non-I2C SMBus adapter", 
    146         /* id */ I2C_ALGO_SMBUS, 
    147         /* master_xfer */ NULL, 
    148         /* smbus_access */ amd756_access, 
    149         /* slave;_send */ NULL, 
    150         /* slave_rcv */ NULL, 
    151         /* algo_control */ NULL, 
    152         /* functionality */ amd756_func, 
    153 }; 
    154  
    155 static struct i2c_adapter amd756_adapter = { 
    156         "unset", 
    157         I2C_ALGO_SMBUS | I2C_HW_SMBUS_AMD756, 
    158         &smbus_algorithm, 
    159         NULL, 
    160         amd756_inc, 
    161         amd756_dec, 
    162         NULL, 
    163         NULL, 
    164 }; 
    165  
    166 static int __initdata amd756_initialized; 
    167 static struct sd *amd756_sd = NULL; 
    168 static unsigned short amd756_smba = 0; 
    169  
    170 int amd756_setup(void) 
    171 { 
    172         unsigned char temp; 
    173         struct sd *currdev; 
    174         struct pci_dev *AMD756_dev = NULL; 
    175  
    176         if (pci_present() == 0) { 
    177                 return -ENODEV; 
    178         } 
    179  
    180         /* Look for a supported chip */ 
    181         for(currdev = supported; currdev->vendor; ) { 
    182                 AMD756_dev = pci_find_device(currdev->vendor, 
    183                                                 currdev->device, AMD756_dev); 
    184                 if (AMD756_dev != NULL) { 
    185                         if (PCI_FUNC(AMD756_dev->devfn) == currdev->function) 
    186                                 break; 
    187                 } else { 
    188                     currdev++; 
    189                 } 
    190         } 
    191  
    192         if (AMD756_dev == NULL) { 
    193                 printk 
    194                     ("i2c-amd756.o: Error: No AMD756 or compatible device detected!\n"); 
    195                 return -ENODEV; 
    196         } 
    197         printk(KERN_INFO "i2c-amd756.o: Found %s SMBus controller.\n", currdev->name); 
    198  
    199         if (currdev->amdsetup) 
    200         { 
    201                 pci_read_config_byte(AMD756_dev, SMBGCFG, &temp); 
    202                 if ((temp & 128) == 0) { 
    203                         printk("i2c-amd756.o: Error: SMBus controller I/O not enabled!\n"); 
    204                         return -ENODEV; 
    205                 } 
    206  
    207                 /* Determine the address of the SMBus areas */ 
    208                 /* Technically it is a dword but... */ 
    209                 pci_read_config_word(AMD756_dev, SMBBA, &amd756_smba); 
    210                 amd756_smba &= 0xff00; 
    211                 amd756_smba += SMB_ADDR_OFFSET; 
    212         } else { 
    213                 pci_read_config_word(AMD756_dev, SMBBANFORCE, &amd756_smba); 
    214                 amd756_smba &= 0xfffc; 
    215         } 
    216         if(amd756_smba == 0) { 
    217                 printk(KERN_ERR "i2c-amd756.o: Error: SMB base address uninitialized\n"); 
    218                 return -ENODEV; 
    219         } 
    220         if (check_region(amd756_smba, SMB_IOSIZE)) { 
    221                 printk 
    222                     ("i2c-amd756.o: SMB region 0x%x already in use!\n", 
    223                      amd756_smba); 
    224                 return -ENODEV; 
    225         } 
    226  
    227         /* Everything is happy, let's grab the memory and set things up. */ 
    228         request_region(amd756_smba, SMB_IOSIZE, "amd756-smbus"); 
    229  
    230 #ifdef DEBUG 
    231         pci_read_config_byte(AMD756_dev, SMBREV, &temp); 
    232         printk("i2c-amd756.o: SMBREV = 0x%X\n", temp); 
    233         printk("i2c-amd756.o: AMD756_smba = 0x%X\n", amd756_smba); 
    234 #endif                          /* DEBUG */ 
    235  
    236         /* store struct sd * for future reference */ 
    237         amd756_sd = currdev; 
    238  
    239         return 0; 
    240 } 
     89 
     90static unsigned short amd756_ioport = 0; 
    24191 
    24292/*  
     
    24797 
    24898/* Internally used pause function */ 
    249 void amd756_do_pause(unsigned int amount) 
     99static void amd756_do_pause(unsigned int amount) 
    250100{ 
    251101        current->state = TASK_INTERRUPTIBLE; 
     
    268118#define GE_ABORT (1 << 5) 
    269119 
    270 void amd756_abort(void) 
    271 { 
    272         printk("i2c-amd756.o: Sending abort.\n"); 
    273         outw_p(inw(SMB_GLOBAL_ENABLE) | GE_ABORT, SMB_GLOBAL_ENABLE); 
    274         amd756_do_pause(100); 
    275         outw_p(GS_CLEAR_STS, SMB_GLOBAL_STATUS); 
    276 } 
    277  
    278 int amd756_transaction(void) 
     120 
     121static int amd756_transaction(void) 
    279122{ 
    280123        int temp; 
     
    282125        int timeout = 0; 
    283126 
    284 #ifdef DEBUG 
    285         printk 
    286             ("i2c-amd756.o: Transaction (pre): GS=%04x, GE=%04x, ADD=%04x, DAT=%04x\n", 
    287              inw_p(SMB_GLOBAL_STATUS), inw_p(SMB_GLOBAL_ENABLE), 
    288              inw_p(SMB_HOST_ADDRESS), inb_p(SMB_HOST_DATA)); 
    289 #endif 
     127        pr_debug(DRV_NAME 
     128               ": Transaction (pre): GS=%04x, GE=%04x, ADD=%04x, DAT=%04x\n", 
     129               inw_p(SMB_GLOBAL_STATUS), inw_p(SMB_GLOBAL_ENABLE), 
     130               inw_p(SMB_HOST_ADDRESS), inb_p(SMB_HOST_DATA)); 
    290131 
    291132        /* Make sure the SMBus host is ready to start transmitting */ 
    292133        if ((temp = inw_p(SMB_GLOBAL_STATUS)) & (GS_HST_STS | GS_SMB_STS)) { 
    293 #ifdef DEBUG 
    294                 printk 
    295                     ("i2c-amd756.o: SMBus busy (%04x). Waiting... \n", temp); 
    296 #endif 
     134                pr_debug(DRV_NAME ": SMBus busy (%04x). Waiting... \n", temp); 
    297135                do { 
    298136                        amd756_do_pause(1); 
     
    302140                /* If the SMBus is still busy, we give up */ 
    303141                if (timeout >= MAX_TIMEOUT) { 
    304                         printk("i2c-amd756.o: Busy wait timeout! (%04x)\n", temp); 
    305                         amd756_abort(); 
    306                         return -1; 
     142                        pr_debug(DRV_NAME ": Busy wait timeout (%04x)\n", temp); 
     143                        goto abort; 
    307144                } 
    308145                timeout = 0; 
     
    320157        /* If the SMBus is still busy, we give up */ 
    321158        if (timeout >= MAX_TIMEOUT) { 
    322                 printk("i2c-amd756.o: Completion timeout!\n"); 
    323                 amd756_abort (); 
    324                 return -1; 
     159                pr_debug(DRV_NAME ": Completion timeout!\n"); 
     160                goto abort; 
    325161        } 
    326162 
    327163        if (temp & GS_PRERR_STS) { 
    328164                result = -1; 
    329 #ifdef DEBUG 
    330                 printk("i2c-amd756.o: SMBus Protocol error (no response)!\n"); 
    331 #endif 
     165                pr_debug(DRV_NAME ": SMBus Protocol error (no response)!\n"); 
    332166        } 
    333167 
    334168        if (temp & GS_COL_STS) { 
    335169                result = -1; 
    336                 printk("i2c-amd756.o: SMBus collision!\n"); 
     170                printk(KERN_WARNING DRV_NAME " SMBus collision!\n"); 
    337171        } 
    338172 
    339173        if (temp & GS_TO_STS) { 
    340174                result = -1; 
    341 #ifdef DEBUG 
    342                 printk("i2c-amd756.o: SMBus protocol timeout!\n"); 
    343 #endif 
    344         } 
    345 #ifdef DEBUG 
    346         if (temp & GS_HCYC_STS) { 
    347                 printk("i2c-amd756.o: SMBus protocol success!\n"); 
    348         } 
    349 #endif 
     175                pr_debug(DRV_NAME ": SMBus protocol timeout!\n"); 
     176        } 
     177 
     178        if (temp & GS_HCYC_STS) 
     179                pr_debug(DRV_NAME " SMBus protocol success!\n"); 
    350180 
    351181        outw_p(GS_CLEAR_STS, SMB_GLOBAL_STATUS); 
     
    353183#ifdef DEBUG 
    354184        if (((temp = inw_p(SMB_GLOBAL_STATUS)) & GS_CLEAR_STS) != 0x00) { 
    355                 printk 
    356                     ("i2c-amd756.o: Failed reset at end of transaction (%04x)\n", 
    357                      temp); 
    358         } 
    359         printk 
    360             ("i2c-amd756.o: Transaction (post): GS=%04x, GE=%04x, ADD=%04x, DAT=%04x\n", 
    361             inw_p(SMB_GLOBAL_STATUS), inw_p(SMB_GLOBAL_ENABLE), 
    362             inw_p(SMB_HOST_ADDRESS), inb_p(SMB_HOST_DATA)); 
     185                pr_debug(DRV_NAME 
     186                         ": Failed reset at end of transaction (%04x)\n", temp); 
     187        } 
     188 
     189        pr_debug(DRV_NAME 
     190                 ": Transaction (post): GS=%04x, GE=%04x, ADD=%04x, DAT=%04x\n", 
     191                inw_p(SMB_GLOBAL_STATUS), inw_p(SMB_GLOBAL_ENABLE), 
     192                inw_p(SMB_HOST_ADDRESS), inb_p(SMB_HOST_DATA)); 
    363193#endif 
    364194 
    365195        return result; 
     196 
     197 abort: 
     198        printk(KERN_WARNING DRV_NAME ": Sending abort.\n"); 
     199        outw_p(inw(SMB_GLOBAL_ENABLE) | GE_ABORT, SMB_GLOBAL_ENABLE); 
     200        amd756_do_pause(100); 
     201        outw_p(GS_CLEAR_STS, SMB_GLOBAL_STATUS); 
     202        return -1; 
    366203} 
    367204 
    368205/* Return -1 on error. */ 
    369 s32 amd756_access(struct i2c_adapter * adap, u16 addr, 
     206static s32 amd756_access(struct i2c_adapter * adap, u16 addr, 
    370207                  unsigned short flags, char read_write, 
    371208                  u8 command, int size, union i2c_smbus_data * data) 
     
    373210        int i, len; 
    374211 
    375   /** TODO: Should I supporte the 10-bit transfers? */ 
     212        /** TODO: Should I supporte the 10-bit transfers? */ 
    376213        switch (size) { 
    377214        case I2C_SMBUS_PROC_CALL: 
    378                 printk 
    379                     ("i2c-amd756.o: I2C_SMBUS_PROC_CALL not supported!\n"); 
     215                pr_debug(DRV_NAME ": I2C_SMBUS_PROC_CALL not supported!\n"); 
    380216                /* TODO: Well... It is supported, I'm just not sure what to do here... */ 
    381217                return -1; 
     
    473309} 
    474310 
    475 u32 amd756_func(struct i2c_adapter *adapter) 
     311static u32 amd756_func(struct i2c_adapter *adapter) 
    476312{ 
    477313        return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | 
     
    480316} 
    481317 
    482 int __init i2c_amd756_init(void) 
    483 { 
    484         int res; 
    485         printk("i2c-amd756.o version %s (%s)\n", LM_VERSION, LM_DATE); 
     318static struct i2c_algorithm smbus_algorithm = { 
     319        .name           = "Non-I2C SMBus adapter", 
     320        .id             = I2C_ALGO_SMBUS, 
     321        .smbus_xfer     = amd756_access, 
     322        .functionality  = amd756_func, 
     323}; 
     324 
     325static struct i2c_adapter amd756_adapter = { 
     326        .name           = "unset", 
     327        .id             = I2C_ALGO_SMBUS | I2C_HW_SMBUS_AMD756, 
     328        .algo           = &smbus_algorithm, 
     329        .inc_use        = amd756_inc, 
     330        .dec_use        = amd756_dec, 
     331}; 
     332 
     333enum chiptype { AMD756, AMD766, AMD768, NFORCE }; 
     334 
     335static struct pci_device_id amd756_ids[] __devinitdata = { 
     336        {PCI_VENDOR_ID_AMD, 0x740B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AMD756 }, 
     337        {PCI_VENDOR_ID_AMD, 0x7413, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AMD766 }, 
     338        {PCI_VENDOR_ID_AMD, 0x7443, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AMD768 }, 
     339        {PCI_VENDOR_ID_NVIDIA, 0x01B4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, NFORCE }, 
     340        { 0, } 
     341}; 
     342 
     343static int __devinit amd756_probe(struct pci_dev *pdev, 
     344                                  const struct pci_device_id *id) 
     345{ 
     346        int nforce = (id->driver_data == NFORCE), error; 
     347        u8 temp; 
     348         
     349        if (amd756_ioport) { 
     350                printk(KERN_ERR DRV_NAME ": Only one device supported. " 
     351                       "(you have a strange motherboard, btw..)\n"); 
     352                return -ENODEV; 
     353        } 
     354 
     355        if (nforce) { 
     356                if (PCI_FUNC(pdev->devfn) != 1) 
     357                        return -ENODEV; 
     358 
     359                pci_read_config_word(pdev, SMBBANFORCE, &amd756_ioport); 
     360                amd756_ioport &= 0xfffc; 
     361        } else { /* amd */ 
     362                if (PCI_FUNC(pdev->devfn) != 3) 
     363                        return -ENODEV; 
     364 
     365                pci_read_config_byte(pdev, SMBGCFG, &temp); 
     366                if ((temp & 128) == 0) { 
     367                        printk(KERN_ERR DRV_NAME 
     368                               ": Error: SMBus controller I/O not enabled!\n"); 
     369                        return -ENODEV; 
     370                } 
     371 
     372                /* Determine the address of the SMBus areas */ 
     373                /* Technically it is a dword but... */ 
     374                pci_read_config_word(pdev, SMBBA, &amd756_ioport); 
     375                amd756_ioport &= 0xff00; 
     376                amd756_ioport += SMB_ADDR_OFFSET; 
     377        } 
     378 
     379        if (!request_region(amd756_ioport, SMB_IOSIZE, "amd756-smbus")) { 
     380                printk(KERN_ERR DRV_NAME 
     381                       ": SMB region 0x%x already in use!\n", amd756_ioport); 
     382                return -ENODEV; 
     383        } 
     384 
    486385#ifdef DEBUG 
    487 /* PE- It might be good to make this a permanent part of the code! */ 
    488         if (amd756_initialized) { 
    489                 printk 
    490                     ("i2c-amd756.o: Oops, amd756_init called a second time!\n"); 
    491                 return -EBUSY; 
    492         } 
     386        pci_read_config_byte(pdev, SMBREV, &temp); 
     387        printk(KERN_DEBUG DRV_NAME ": SMBREV = 0x%X\n", temp); 
     388        printk(KERN_DEBUG DRV_NAME ": AMD756_smba = 0x%X\n", amd756_ioport); 
    493389#endif 
    494         amd756_initialized = 0; 
    495         if ((res = amd756_setup())) { 
    496                 printk 
    497                     ("i2c-amd756.o: AMD756 or compatible device not detected, module not inserted.\n"); 
    498                 amd756_cleanup(); 
    499                 return res; 
    500         } 
    501         amd756_initialized++; 
    502         sprintf(amd756_adapter.name, "SMBus %s adapter at %04x", 
    503                 amd756_sd->name, amd756_smba); 
    504         if ((res = i2c_add_adapter(&amd756_adapter))) { 
    505                 printk 
    506                     ("i2c-amd756.o: Adapter registration failed, module not inserted.\n"); 
    507                 amd756_cleanup(); 
    508                 return res; 
    509         } 
    510         amd756_initialized++; 
    511         printk("i2c-amd756.o: %s bus detected and initialized\n", 
    512                amd756_sd->name); 
     390 
     391        sprintf(amd756_adapter.name, 
     392                "SMBus AMD75x adapter at %04x", amd756_ioport); 
     393 
     394        error = i2c_add_adapter(&amd756_adapter); 
     395        if (error) { 
     396                printk(KERN_ERR DRV_NAME 
     397                       ": Adapter registration failed, module not inserted.\n"); 
     398                goto out_err; 
     399        } 
     400 
    513401        return 0; 
    514 } 
    515  
    516 int __init amd756_cleanup(void) 
    517 { 
    518         int res; 
    519         if (amd756_initialized >= 2) { 
    520                 if ((res = i2c_del_adapter(&amd756_adapter))) { 
    521                         printk 
    522                             ("i2c-amd756.o: i2c_del_adapter failed, module not removed\n"); 
    523                         return res; 
    524                 } else 
    525                         amd756_initialized--; 
    526         } 
    527         if (amd756_initialized >= 1) { 
    528                 release_region(amd756_smba, SMB_IOSIZE); 
    529                 amd756_initialized--; 
    530         } 
    531         return 0; 
    532 } 
    533  
    534 EXPORT_NO_SYMBOLS; 
    535  
    536 #ifdef MODULE 
     402 
     403 out_err: 
     404        release_region(amd756_ioport, SMB_IOSIZE); 
     405        return error; 
     406} 
     407 
     408static void __devexit amd756_remove(struct pci_dev *dev) 
     409{ 
     410        i2c_del_adapter(&amd756_adapter); 
     411        release_region(amd756_ioport, SMB_IOSIZE); 
     412} 
     413 
     414static struct pci_driver amd756_driver = { 
     415        .name           = "amd75x smbus", 
     416        .id_table       = amd756_ids, 
     417        .probe          = amd756_probe, 
     418        .remove         = __devexit_p(amd756_remove), 
     419}; 
     420 
     421static int __init amd756_init(void) 
     422{ 
     423        printk(KERN_INFO "i2c-amd756.o version %s (%s)\n", LM_VERSION, LM_DATE); 
     424        return pci_module_init(&amd756_driver); 
     425} 
     426 
     427static void __exit amd756_exit(void) 
     428{ 
     429        pci_unregister_driver(&amd756_driver); 
     430} 
    537431 
    538432MODULE_AUTHOR("Merlin Hughes <merlin@merlin.org>"); 
    539433MODULE_DESCRIPTION("AMD756/766/768/nVidia nForce SMBus driver"); 
    540  
    541 #ifdef MODULE_LICENSE 
    542434MODULE_LICENSE("GPL"); 
    543 #endif 
    544  
    545 int init_module(void) 
    546 { 
    547         return i2c_amd756_init(); 
    548 } 
    549  
    550 int cleanup_module(void) 
    551 { 
    552         return amd756_cleanup(); 
    553 } 
    554  
    555 #endif                          /* MODULE */ 
     435 
     436module_init(amd756_init) 
     437module_exit(amd756_exit)