diff options
Diffstat (limited to 'drivers/hwmon/i5k_amb.c')
| -rw-r--r-- | drivers/hwmon/i5k_amb.c | 42 | 
1 files changed, 14 insertions, 28 deletions
diff --git a/drivers/hwmon/i5k_amb.c b/drivers/hwmon/i5k_amb.c index c4c40be0edb..d22f241b6a6 100644 --- a/drivers/hwmon/i5k_amb.c +++ b/drivers/hwmon/i5k_amb.c @@ -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);  |