diff options
| -rw-r--r-- | drivers/vlynq/vlynq.c | 64 |
1 files changed, 31 insertions, 33 deletions
diff --git a/drivers/vlynq/vlynq.c b/drivers/vlynq/vlynq.c index f885c868a04d..aa250cebecd2 100644 --- a/drivers/vlynq/vlynq.c +++ b/drivers/vlynq/vlynq.c | |||
| @@ -135,40 +135,40 @@ static void vlynq_reset(struct vlynq_device *dev) | |||
| 135 | msleep(5); | 135 | msleep(5); |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | static void vlynq_irq_unmask(unsigned int irq) | 138 | static void vlynq_irq_unmask(struct irq_data *d) |
| 139 | { | 139 | { |
| 140 | u32 val; | 140 | struct vlynq_device *dev = irq_data_get_irq_chip_data(d); |
| 141 | struct vlynq_device *dev = get_irq_chip_data(irq); | ||
| 142 | int virq; | 141 | int virq; |
| 142 | u32 val; | ||
| 143 | 143 | ||
| 144 | BUG_ON(!dev); | 144 | BUG_ON(!dev); |
| 145 | virq = irq - dev->irq_start; | 145 | virq = d->irq - dev->irq_start; |
| 146 | val = readl(&dev->remote->int_device[virq >> 2]); | 146 | val = readl(&dev->remote->int_device[virq >> 2]); |
| 147 | val |= (VINT_ENABLE | virq) << VINT_OFFSET(virq); | 147 | val |= (VINT_ENABLE | virq) << VINT_OFFSET(virq); |
| 148 | writel(val, &dev->remote->int_device[virq >> 2]); | 148 | writel(val, &dev->remote->int_device[virq >> 2]); |
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | static void vlynq_irq_mask(unsigned int irq) | 151 | static void vlynq_irq_mask(struct irq_data *d) |
| 152 | { | 152 | { |
| 153 | u32 val; | 153 | struct vlynq_device *dev = irq_data_get_irq_chip_data(d); |
| 154 | struct vlynq_device *dev = get_irq_chip_data(irq); | ||
| 155 | int virq; | 154 | int virq; |
| 155 | u32 val; | ||
| 156 | 156 | ||
| 157 | BUG_ON(!dev); | 157 | BUG_ON(!dev); |
| 158 | virq = irq - dev->irq_start; | 158 | virq = d->irq - dev->irq_start; |
| 159 | val = readl(&dev->remote->int_device[virq >> 2]); | 159 | val = readl(&dev->remote->int_device[virq >> 2]); |
| 160 | val &= ~(VINT_ENABLE << VINT_OFFSET(virq)); | 160 | val &= ~(VINT_ENABLE << VINT_OFFSET(virq)); |
| 161 | writel(val, &dev->remote->int_device[virq >> 2]); | 161 | writel(val, &dev->remote->int_device[virq >> 2]); |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | static int vlynq_irq_type(unsigned int irq, unsigned int flow_type) | 164 | static int vlynq_irq_type(struct irq_data *d, unsigned int flow_type) |
| 165 | { | 165 | { |
| 166 | u32 val; | 166 | struct vlynq_device *dev = irq_data_get_irq_chip_data(d); |
| 167 | struct vlynq_device *dev = get_irq_chip_data(irq); | ||
| 168 | int virq; | 167 | int virq; |
| 168 | u32 val; | ||
| 169 | 169 | ||
| 170 | BUG_ON(!dev); | 170 | BUG_ON(!dev); |
| 171 | virq = irq - dev->irq_start; | 171 | virq = d->irq - dev->irq_start; |
| 172 | val = readl(&dev->remote->int_device[virq >> 2]); | 172 | val = readl(&dev->remote->int_device[virq >> 2]); |
| 173 | switch (flow_type & IRQ_TYPE_SENSE_MASK) { | 173 | switch (flow_type & IRQ_TYPE_SENSE_MASK) { |
| 174 | case IRQ_TYPE_EDGE_RISING: | 174 | case IRQ_TYPE_EDGE_RISING: |
| @@ -192,10 +192,9 @@ static int vlynq_irq_type(unsigned int irq, unsigned int flow_type) | |||
| 192 | return 0; | 192 | return 0; |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | static void vlynq_local_ack(unsigned int irq) | 195 | static void vlynq_local_ack(struct irq_data *d) |
| 196 | { | 196 | { |
| 197 | struct vlynq_device *dev = get_irq_chip_data(irq); | 197 | struct vlynq_device *dev = irq_data_get_irq_chip_data(d); |
| 198 | |||
| 199 | u32 status = readl(&dev->local->status); | 198 | u32 status = readl(&dev->local->status); |
| 200 | 199 | ||
| 201 | pr_debug("%s: local status: 0x%08x\n", | 200 | pr_debug("%s: local status: 0x%08x\n", |
| @@ -203,10 +202,9 @@ static void vlynq_local_ack(unsigned int irq) | |||
| 203 | writel(status, &dev->local->status); | 202 | writel(status, &dev->local->status); |
| 204 | } | 203 | } |
| 205 | 204 | ||
| 206 | static void vlynq_remote_ack(unsigned int irq) | 205 | static void vlynq_remote_ack(struct irq_data *d) |
| 207 | { | 206 | { |
| 208 | struct vlynq_device *dev = get_irq_chip_data(irq); | 207 | struct vlynq_device *dev = irq_data_get_irq_chip_data(d); |
| 209 | |||
| 210 | u32 status = readl(&dev->remote->status); | 208 | u32 status = readl(&dev->remote->status); |
| 211 | 209 | ||
| 212 | pr_debug("%s: remote status: 0x%08x\n", | 210 | pr_debug("%s: remote status: 0x%08x\n", |
| @@ -238,23 +236,23 @@ static irqreturn_t vlynq_irq(int irq, void *dev_id) | |||
| 238 | 236 | ||
| 239 | static struct irq_chip vlynq_irq_chip = { | 237 | static struct irq_chip vlynq_irq_chip = { |
| 240 | .name = "vlynq", | 238 | .name = "vlynq", |
| 241 | .unmask = vlynq_irq_unmask, | 239 | .irq_unmask = vlynq_irq_unmask, |
| 242 | .mask = vlynq_irq_mask, | 240 | .irq_mask = vlynq_irq_mask, |
| 243 | .set_type = vlynq_irq_type, | 241 | .irq_set_type = vlynq_irq_type, |
| 244 | }; | 242 | }; |
| 245 | 243 | ||
| 246 | static struct irq_chip vlynq_local_chip = { | 244 | static struct irq_chip vlynq_local_chip = { |
| 247 | .name = "vlynq local error", | 245 | .name = "vlynq local error", |
| 248 | .unmask = vlynq_irq_unmask, | 246 | .irq_unmask = vlynq_irq_unmask, |
| 249 | .mask = vlynq_irq_mask, | 247 | .irq_mask = vlynq_irq_mask, |
| 250 | .ack = vlynq_local_ack, | 248 | .irq_ack = vlynq_local_ack, |
| 251 | }; | 249 | }; |
| 252 | 250 | ||
| 253 | static struct irq_chip vlynq_remote_chip = { | 251 | static struct irq_chip vlynq_remote_chip = { |
| 254 | .name = "vlynq local error", | 252 | .name = "vlynq local error", |
| 255 | .unmask = vlynq_irq_unmask, | 253 | .irq_unmask = vlynq_irq_unmask, |
| 256 | .mask = vlynq_irq_mask, | 254 | .irq_mask = vlynq_irq_mask, |
| 257 | .ack = vlynq_remote_ack, | 255 | .irq_ack = vlynq_remote_ack, |
| 258 | }; | 256 | }; |
| 259 | 257 | ||
| 260 | static int vlynq_setup_irq(struct vlynq_device *dev) | 258 | static int vlynq_setup_irq(struct vlynq_device *dev) |
| @@ -291,17 +289,17 @@ static int vlynq_setup_irq(struct vlynq_device *dev) | |||
| 291 | for (i = dev->irq_start; i <= dev->irq_end; i++) { | 289 | for (i = dev->irq_start; i <= dev->irq_end; i++) { |
| 292 | virq = i - dev->irq_start; | 290 | virq = i - dev->irq_start; |
| 293 | if (virq == dev->local_irq) { | 291 | if (virq == dev->local_irq) { |
| 294 | set_irq_chip_and_handler(i, &vlynq_local_chip, | 292 | irq_set_chip_and_handler(i, &vlynq_local_chip, |
| 295 | handle_level_irq); | 293 | handle_level_irq); |
| 296 | set_irq_chip_data(i, dev); | 294 | irq_set_chip_data(i, dev); |
| 297 | } else if (virq == dev->remote_irq) { | 295 | } else if (virq == dev->remote_irq) { |
| 298 | set_irq_chip_and_handler(i, &vlynq_remote_chip, | 296 | irq_set_chip_and_handler(i, &vlynq_remote_chip, |
| 299 | handle_level_irq); | 297 | handle_level_irq); |
| 300 | set_irq_chip_data(i, dev); | 298 | irq_set_chip_data(i, dev); |
| 301 | } else { | 299 | } else { |
| 302 | set_irq_chip_and_handler(i, &vlynq_irq_chip, | 300 | irq_set_chip_and_handler(i, &vlynq_irq_chip, |
| 303 | handle_simple_irq); | 301 | handle_simple_irq); |
| 304 | set_irq_chip_data(i, dev); | 302 | irq_set_chip_data(i, dev); |
| 305 | writel(0, &dev->remote->int_device[virq >> 2]); | 303 | writel(0, &dev->remote->int_device[virq >> 2]); |
| 306 | } | 304 | } |
| 307 | } | 305 | } |
