@@ -662,12 +662,12 @@ static const struct file_operations hpet_fops = {
.mmap = hpet_mmap,
};
-static int hpet_is_known(struct hpet_data *hdp)
+static int hpet_is_known(unsigned long phys_address)
{
struct hpets *hpetp;
for (hpetp = hpets; hpetp; hpetp = hpetp->hp_next)
- if (hpetp->hp_hpet_phys == hdp->hd_phys_address)
+ if (hpetp->hp_hpet_phys == phys_address)
return 1;
return 0;
@@ -788,7 +788,7 @@ int hpet_alloc(struct hpet_data *hdp)
* If platform dependent code has allocated the hpet that
* ACPI has also reported, then we catch it here.
*/
- if (hpet_is_known(hdp)) {
+ if (hpet_is_known(hdp->hd_phys_address)) {
printk(KERN_DEBUG "%s: duplicate HPET ignored\n",
__func__);
return 0;
@@ -909,12 +909,7 @@ static int hpet_pnp_add(struct pnp_dev *dev, const struct pnp_device_id *dev_id)
memset(&data, 0, sizeof(data));
mem = pnp_get_resource(dev, IORESOURCE_MEM, 0);
- if (!mem)
- return -ENODEV;
-
- data.hd_phys_address = mem->start;
-
- if (hpet_is_known(&data))
+ if (!mem || hpet_is_known(mem->start))
return -ENODEV;
i = 0;
@@ -926,6 +921,7 @@ static int hpet_pnp_add(struct pnp_dev *dev, const struct pnp_device_id *dev_id)
if (!data.hd_nirqs)
return -ENODEV;
+ data.hd_phys_address = mem->start;
data.hd_address = ioremap(mem->start, resource_size(mem));
return hpet_alloc(&data);