|
@@ -114,7 +114,6 @@ struct i5k_amb_data {
|
|
|
void __iomem *amb_mmio;
|
|
|
struct i5k_device_attribute *attrs;
|
|
|
unsigned int num_attrs;
|
|
|
- unsigned long chipset_id;
|
|
|
};
|
|
|
|
|
|
static ssize_t show_name(struct device *dev, struct device_attribute *devattr,
|
|
@@ -444,8 +443,6 @@ static int __devinit i5k_find_amb_registers(struct i5k_amb_data *data,
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- data->chipset_id = devid;
|
|
|
-
|
|
|
res = 0;
|
|
|
out:
|
|
|
pci_dev_put(pcidev);
|
|
@@ -478,23 +475,13 @@ out:
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
-static unsigned long i5k_channel_pci_id(struct i5k_amb_data *data,
|
|
|
- unsigned long channel)
|
|
|
-{
|
|
|
- switch (data->chipset_id) {
|
|
|
- case PCI_DEVICE_ID_INTEL_5000_ERR:
|
|
|
- return PCI_DEVICE_ID_INTEL_5000_FBD0 + channel;
|
|
|
- case PCI_DEVICE_ID_INTEL_5400_ERR:
|
|
|
- return PCI_DEVICE_ID_INTEL_5400_FBD0 + channel;
|
|
|
- default:
|
|
|
- BUG();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static unsigned long chipset_ids[] = {
|
|
|
- PCI_DEVICE_ID_INTEL_5000_ERR,
|
|
|
- PCI_DEVICE_ID_INTEL_5400_ERR,
|
|
|
- 0
|
|
|
+static struct {
|
|
|
+ unsigned long err;
|
|
|
+ unsigned long fbd0;
|
|
|
+} chipset_ids[] __devinitdata = {
|
|
|
+ { PCI_DEVICE_ID_INTEL_5000_ERR, PCI_DEVICE_ID_INTEL_5000_FBD0 },
|
|
|
+ { PCI_DEVICE_ID_INTEL_5400_ERR, PCI_DEVICE_ID_INTEL_5400_FBD0 },
|
|
|
+ { 0, 0 }
|
|
|
};
|
|
|
|
|
|
#ifdef MODULE
|
|
@@ -510,8 +497,7 @@ static int __devinit i5k_amb_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
struct i5k_amb_data *data;
|
|
|
struct resource *reso;
|
|
|
- int i;
|
|
|
- int res = -ENODEV;
|
|
|
+ int i, res;
|
|
|
|
|
|
data = kzalloc(sizeof(*data), GFP_KERNEL);
|
|
|
if (!data)
|
|
@@ -520,22 +506,22 @@ static int __devinit i5k_amb_probe(struct platform_device *pdev)
|
|
|
/* Figure out where the AMB registers live */
|
|
|
i = 0;
|
|
|
do {
|
|
|
- res = i5k_find_amb_registers(data, chipset_ids[i]);
|
|
|
+ res = i5k_find_amb_registers(data, chipset_ids[i].err);
|
|
|
+ if (res == 0)
|
|
|
+ break;
|
|
|
i++;
|
|
|
- } while (res && chipset_ids[i]);
|
|
|
+ } while (chipset_ids[i].err);
|
|
|
|
|
|
if (res)
|
|
|
goto err;
|
|
|
|
|
|
/* Copy the DIMM presence map for the first two channels */
|
|
|
- res = i5k_channel_probe(&data->amb_present[0],
|
|
|
- i5k_channel_pci_id(data, 0));
|
|
|
+ res = i5k_channel_probe(&data->amb_present[0], chipset_ids[i].fbd0);
|
|
|
if (res)
|
|
|
goto err;
|
|
|
|
|
|
/* Copy the DIMM presence map for the optional second two channels */
|
|
|
- i5k_channel_probe(&data->amb_present[2],
|
|
|
- i5k_channel_pci_id(data, 1));
|
|
|
+ i5k_channel_probe(&data->amb_present[2], chipset_ids[i].fbd0 + 1);
|
|
|
|
|
|
/* Set up resource regions */
|
|
|
reso = request_mem_region(data->amb_base, data->amb_len, DRVNAME);
|