vserver 1.9.5.x5
[linux-2.6.git] / drivers / i2c / chips / via686a.c
index 851c5b2..cacc257 100644 (file)
@@ -52,9 +52,7 @@ MODULE_PARM_DESC(force_addr,
    Note that we can't determine the ISA address until we have initialized
    our module */
 static unsigned short normal_i2c[] = { I2C_CLIENT_END };
-static unsigned short normal_i2c_range[] = { I2C_CLIENT_END };
 static unsigned int normal_isa[] = { 0x0000, I2C_CLIENT_ISA_END };
-static unsigned int normal_isa_range[] = { I2C_CLIENT_ISA_END };
 
 /* Insmod parameters */
 SENSORS_INSMOD_1(via686a);
@@ -383,27 +381,27 @@ static ssize_t set_in_max(struct device *dev, const char *buf,
 static ssize_t                                                         \
        show_in##offset (struct device *dev, char *buf)         \
 {                                                              \
-       return show_in(dev, buf, 0x##offset);                   \
+       return show_in(dev, buf, offset);                       \
 }                                                              \
 static ssize_t                                                         \
        show_in##offset##_min (struct device *dev, char *buf)   \
 {                                                              \
-       return show_in_min(dev, buf, 0x##offset);               \
+       return show_in_min(dev, buf, offset);           \
 }                                                              \
 static ssize_t                                                         \
        show_in##offset##_max (struct device *dev, char *buf)   \
 {                                                              \
-       return show_in_max(dev, buf, 0x##offset);               \
+       return show_in_max(dev, buf, offset);           \
 }                                                              \
 static ssize_t set_in##offset##_min (struct device *dev,       \
                const char *buf, size_t count)                  \
 {                                                              \
-       return set_in_min(dev, buf, count, 0x##offset);         \
+       return set_in_min(dev, buf, count, offset);             \
 }                                                              \
 static ssize_t set_in##offset##_max (struct device *dev,       \
                        const char *buf, size_t count)          \
 {                                                              \
-       return set_in_max(dev, buf, count, 0x##offset);         \
+       return set_in_max(dev, buf, count, offset);             \
 }                                                              \
 static DEVICE_ATTR(in##offset##_input, S_IRUGO, show_in##offset, NULL);\
 static DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR,        \
@@ -451,27 +449,27 @@ static ssize_t set_temp_hyst(struct device *dev, const char *buf,
 #define show_temp_offset(offset)                                       \
 static ssize_t show_temp_##offset (struct device *dev, char *buf)      \
 {                                                                      \
-       return show_temp(dev, buf, 0x##offset - 1);                     \
+       return show_temp(dev, buf, offset - 1);                         \
 }                                                                      \
 static ssize_t                                                         \
 show_temp_##offset##_over (struct device *dev, char *buf)              \
 {                                                                      \
-       return show_temp_over(dev, buf, 0x##offset - 1);                        \
+       return show_temp_over(dev, buf, offset - 1);                    \
 }                                                                      \
 static ssize_t                                                         \
 show_temp_##offset##_hyst (struct device *dev, char *buf)              \
 {                                                                      \
-       return show_temp_hyst(dev, buf, 0x##offset - 1);                        \
+       return show_temp_hyst(dev, buf, offset - 1);                    \
 }                                                                      \
 static ssize_t set_temp_##offset##_over (struct device *dev,           \
                const char *buf, size_t count)                          \
 {                                                                      \
-       return set_temp_over(dev, buf, count, 0x##offset - 1);          \
+       return set_temp_over(dev, buf, count, offset - 1);              \
 }                                                                      \
 static ssize_t set_temp_##offset##_hyst (struct device *dev,           \
                const char *buf, size_t count)                          \
 {                                                                      \
-       return set_temp_hyst(dev, buf, count, 0x##offset - 1);          \
+       return set_temp_hyst(dev, buf, count, offset - 1);              \
 }                                                                      \
 static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, NULL);\
 static DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR,              \
@@ -522,25 +520,25 @@ static ssize_t set_fan_div(struct device *dev, const char *buf,
 #define show_fan_offset(offset)                                                \
 static ssize_t show_fan_##offset (struct device *dev, char *buf)       \
 {                                                                      \
-       return show_fan(dev, buf, 0x##offset - 1);                      \
+       return show_fan(dev, buf, offset - 1);                          \
 }                                                                      \
 static ssize_t show_fan_##offset##_min (struct device *dev, char *buf) \
 {                                                                      \
-       return show_fan_min(dev, buf, 0x##offset - 1);                  \
+       return show_fan_min(dev, buf, offset - 1);                      \
 }                                                                      \
 static ssize_t show_fan_##offset##_div (struct device *dev, char *buf) \
 {                                                                      \
-       return show_fan_div(dev, buf, 0x##offset - 1);                  \
+       return show_fan_div(dev, buf, offset - 1);                      \
 }                                                                      \
 static ssize_t set_fan_##offset##_min (struct device *dev,             \
        const char *buf, size_t count)                                  \
 {                                                                      \
-       return set_fan_min(dev, buf, count, 0x##offset - 1);            \
+       return set_fan_min(dev, buf, count, offset - 1);                \
 }                                                                      \
 static ssize_t set_fan_##offset##_div (struct device *dev,             \
                const char *buf, size_t count)                          \
 {                                                                      \
-       return set_fan_div(dev, buf, count, 0x##offset - 1);            \
+       return set_fan_div(dev, buf, count, offset - 1);                \
 }                                                                      \
 static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, NULL);\
 static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR,               \
@@ -615,7 +613,7 @@ static int via686a_detect(struct i2c_adapter *adapter, int address, int kind)
        }
 
        /* Reserve the ISA region */
-       if (!request_region(address, VIA686A_EXTENT, "via686a-sensor")) {
+       if (!request_region(address, VIA686A_EXTENT, via686a_driver.name)) {
                dev_err(&adapter->dev,"region 0x%x already in use!\n",
                       address);
                return -ENODEV;
@@ -788,15 +786,12 @@ static struct via686a_data *via686a_update_device(struct device *dev)
 }
 
 static struct pci_device_id via686a_pci_ids[] = {
-       {
-              .vendor          = PCI_VENDOR_ID_VIA, 
-              .device          = PCI_DEVICE_ID_VIA_82C686_4, 
-              .subvendor       = PCI_ANY_ID, 
-              .subdevice       = PCI_ANY_ID, 
-       },
+       { PCI_DEVICE(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4) },
        { 0, }
 };
 
+MODULE_DEVICE_TABLE(pci, via686a_pci_ids);
+
 static int __devinit via686a_pci_probe(struct pci_dev *dev,
                                       const struct pci_device_id *id)
 {
@@ -820,30 +815,39 @@ static int __devinit via686a_pci_probe(struct pci_dev *dev,
                return -ENODEV;
        }
        normal_isa[0] = addr;
-       s_bridge = dev;
-       return i2c_add_driver(&via686a_driver);
-}
 
-static void __devexit via686a_pci_remove(struct pci_dev *dev)
-{
-       i2c_del_driver(&via686a_driver);
+       s_bridge = pci_dev_get(dev);
+       if (i2c_add_driver(&via686a_driver)) {
+               pci_dev_put(s_bridge);
+               s_bridge = NULL;
+       }
+
+       /* Always return failure here.  This is to allow other drivers to bind
+        * to this pci device.  We don't really want to have control over the
+        * pci device, we only wanted to read as few register values from it.
+        */
+       return -ENODEV;
 }
 
 static struct pci_driver via686a_pci_driver = {
        .name           = "via686a",
        .id_table       = via686a_pci_ids,
        .probe          = via686a_pci_probe,
-       .remove         = __devexit_p(via686a_pci_remove),
 };
 
 static int __init sm_via686a_init(void)
 {
-       return pci_module_init(&via686a_pci_driver);
+       return pci_register_driver(&via686a_pci_driver);
 }
 
 static void __exit sm_via686a_exit(void)
 {
-       pci_unregister_driver(&via686a_pci_driver);
+       pci_unregister_driver(&via686a_pci_driver);
+       if (s_bridge != NULL) {
+               i2c_del_driver(&via686a_driver);
+               pci_dev_put(s_bridge);
+               s_bridge = NULL;
+       }
 }
 
 MODULE_AUTHOR("Kyösti Mälkki <kmalkki@cc.hut.fi>, "