diff options
Diffstat (limited to 'drivers/char/hpet.c')
-rw-r--r-- | drivers/char/hpet.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c index 762fa430fb5b..c055bb630ffc 100644 --- a/drivers/char/hpet.c +++ b/drivers/char/hpet.c | |||
@@ -44,7 +44,7 @@ | |||
44 | /* | 44 | /* |
45 | * The High Precision Event Timer driver. | 45 | * The High Precision Event Timer driver. |
46 | * This driver is closely modelled after the rtc.c driver. | 46 | * This driver is closely modelled after the rtc.c driver. |
47 | * http://www.intel.com/labs/platcomp/hpet/hpetspec.htm | 47 | * http://www.intel.com/hardwaredesign/hpetspec.htm |
48 | */ | 48 | */ |
49 | #define HPET_USER_FREQ (64) | 49 | #define HPET_USER_FREQ (64) |
50 | #define HPET_DRIFT (500) | 50 | #define HPET_DRIFT (500) |
@@ -100,14 +100,14 @@ static struct hpets *hpets; | |||
100 | #endif | 100 | #endif |
101 | 101 | ||
102 | #ifndef readq | 102 | #ifndef readq |
103 | static unsigned long long __inline readq(void __iomem *addr) | 103 | static inline unsigned long long readq(void __iomem *addr) |
104 | { | 104 | { |
105 | return readl(addr) | (((unsigned long long)readl(addr + 4)) << 32LL); | 105 | return readl(addr) | (((unsigned long long)readl(addr + 4)) << 32LL); |
106 | } | 106 | } |
107 | #endif | 107 | #endif |
108 | 108 | ||
109 | #ifndef writeq | 109 | #ifndef writeq |
110 | static void __inline writeq(unsigned long long v, void __iomem *addr) | 110 | static inline void writeq(unsigned long long v, void __iomem *addr) |
111 | { | 111 | { |
112 | writel(v & 0xffffffff, addr); | 112 | writel(v & 0xffffffff, addr); |
113 | writel(v >> 32, addr + 4); | 113 | writel(v >> 32, addr + 4); |
@@ -273,7 +273,6 @@ static int hpet_mmap(struct file *file, struct vm_area_struct *vma) | |||
273 | 273 | ||
274 | vma->vm_flags |= VM_IO; | 274 | vma->vm_flags |= VM_IO; |
275 | vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | 275 | vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); |
276 | addr = __pa(addr); | ||
277 | 276 | ||
278 | if (io_remap_pfn_range(vma, vma->vm_start, addr >> PAGE_SHIFT, | 277 | if (io_remap_pfn_range(vma, vma->vm_start, addr >> PAGE_SHIFT, |
279 | PAGE_SIZE, vma->vm_page_prot)) { | 278 | PAGE_SIZE, vma->vm_page_prot)) { |
@@ -712,7 +711,7 @@ static void hpet_register_interpolator(struct hpets *hpetp) | |||
712 | ti->shift = 10; | 711 | ti->shift = 10; |
713 | ti->addr = &hpetp->hp_hpet->hpet_mc; | 712 | ti->addr = &hpetp->hp_hpet->hpet_mc; |
714 | ti->frequency = hpet_time_div(hpets->hp_period); | 713 | ti->frequency = hpet_time_div(hpets->hp_period); |
715 | ti->drift = ti->frequency * HPET_DRIFT / 1000000; | 714 | ti->drift = HPET_DRIFT; |
716 | ti->mask = -1; | 715 | ti->mask = -1; |
717 | 716 | ||
718 | hpetp->hp_interpolator = ti; | 717 | hpetp->hp_interpolator = ti; |
@@ -906,11 +905,15 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data) | |||
906 | if (irqp->number_of_interrupts > 0) { | 905 | if (irqp->number_of_interrupts > 0) { |
907 | hdp->hd_nirqs = irqp->number_of_interrupts; | 906 | hdp->hd_nirqs = irqp->number_of_interrupts; |
908 | 907 | ||
909 | for (i = 0; i < hdp->hd_nirqs; i++) | 908 | for (i = 0; i < hdp->hd_nirqs; i++) { |
910 | hdp->hd_irq[i] = | 909 | int rc = |
911 | acpi_register_gsi(irqp->interrupts[i], | 910 | acpi_register_gsi(irqp->interrupts[i], |
912 | irqp->edge_level, | 911 | irqp->edge_level, |
913 | irqp->active_high_low); | 912 | irqp->active_high_low); |
913 | if (rc < 0) | ||
914 | return AE_ERROR; | ||
915 | hdp->hd_irq[i] = rc; | ||
916 | } | ||
914 | } | 917 | } |
915 | } | 918 | } |
916 | 919 | ||