.. | .. |
---|
82 | 82 | }, |
---|
83 | 83 | }; |
---|
84 | 84 | |
---|
85 | | -static struct irqaction systick_irqaction = { |
---|
86 | | - .handler = systick_interrupt, |
---|
87 | | - .flags = IRQF_PERCPU | IRQF_TIMER, |
---|
88 | | - .dev_id = &systick.dev, |
---|
89 | | -}; |
---|
90 | | - |
---|
91 | 85 | static int systick_shutdown(struct clock_event_device *evt) |
---|
92 | 86 | { |
---|
93 | 87 | struct systick_device *sdev; |
---|
.. | .. |
---|
95 | 89 | sdev = container_of(evt, struct systick_device, dev); |
---|
96 | 90 | |
---|
97 | 91 | if (sdev->irq_requested) |
---|
98 | | - free_irq(systick.dev.irq, &systick_irqaction); |
---|
| 92 | + free_irq(systick.dev.irq, &systick.dev); |
---|
99 | 93 | sdev->irq_requested = 0; |
---|
100 | 94 | iowrite32(0, systick.membase + SYSTICK_CONFIG); |
---|
101 | 95 | |
---|
.. | .. |
---|
104 | 98 | |
---|
105 | 99 | static int systick_set_oneshot(struct clock_event_device *evt) |
---|
106 | 100 | { |
---|
| 101 | + const char *name = systick.dev.name; |
---|
107 | 102 | struct systick_device *sdev; |
---|
| 103 | + int irq = systick.dev.irq; |
---|
108 | 104 | |
---|
109 | 105 | sdev = container_of(evt, struct systick_device, dev); |
---|
110 | 106 | |
---|
111 | | - if (!sdev->irq_requested) |
---|
112 | | - setup_irq(systick.dev.irq, &systick_irqaction); |
---|
| 107 | + if (!sdev->irq_requested) { |
---|
| 108 | + if (request_irq(irq, systick_interrupt, |
---|
| 109 | + IRQF_PERCPU | IRQF_TIMER, name, &systick.dev)) |
---|
| 110 | + pr_err("Failed to request irq %d (%s)\n", irq, name); |
---|
| 111 | + } |
---|
113 | 112 | sdev->irq_requested = 1; |
---|
114 | 113 | iowrite32(CFG_EXT_STK_EN | CFG_CNT_EN, |
---|
115 | 114 | systick.membase + SYSTICK_CONFIG); |
---|
.. | .. |
---|
125 | 124 | if (!systick.membase) |
---|
126 | 125 | return -ENXIO; |
---|
127 | 126 | |
---|
128 | | - systick_irqaction.name = np->name; |
---|
129 | 127 | systick.dev.name = np->name; |
---|
130 | 128 | clockevents_calc_mult_shift(&systick.dev, SYSTICK_FREQ, 60); |
---|
131 | 129 | systick.dev.max_delta_ns = clockevent_delta2ns(0x7fff, &systick.dev); |
---|
.. | .. |
---|
134 | 132 | systick.dev.min_delta_ticks = 0x3; |
---|
135 | 133 | systick.dev.irq = irq_of_parse_and_map(np, 0); |
---|
136 | 134 | if (!systick.dev.irq) { |
---|
137 | | - pr_err("%s: request_irq failed", np->name); |
---|
| 135 | + pr_err("%pOFn: request_irq failed", np); |
---|
138 | 136 | return -EINVAL; |
---|
139 | 137 | } |
---|
140 | 138 | |
---|
.. | .. |
---|
146 | 144 | |
---|
147 | 145 | clockevents_register_device(&systick.dev); |
---|
148 | 146 | |
---|
149 | | - pr_info("%s: running - mult: %d, shift: %d\n", |
---|
150 | | - np->name, systick.dev.mult, systick.dev.shift); |
---|
| 147 | + pr_info("%pOFn: running - mult: %d, shift: %d\n", |
---|
| 148 | + np, systick.dev.mult, systick.dev.shift); |
---|
151 | 149 | |
---|
152 | 150 | return 0; |
---|
153 | 151 | } |
---|