Alter the mpc i2c driver to use the NO_IRQ symbol instead of the constant zero when checking for valid interrupts. NO_IRQ=-1 on ppc and NO_IRQ=0 on powerpc so the checks against zero are not correct.
Unified · Split
| @@ -99,7 +99,7 @@ static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing) · 98 unmodified lines | ||
| 99 | 99 | u32 x; |
| 100 | 100 | int result = 0; |
| 101 | 101 | |
| 102 | − if (i2c->irq == 0) | |
| 102 | + if (i2c->irq == NO_IRQ) | |
| 103 | 103 | { |
| 104 | 104 | while (!(readb(i2c->base + MPC_I2C_SR) & CSR_MIF)) { |
| 105 | 105 | schedule(); |
| @@ -329,10 +329,9 @@ static int fsl_i2c_probe(struct platform_device *pdev) · 223 unmodified lines | ||
| 329 | 329 | return -ENOMEM; |
| 330 | 330 | |
| 331 | 331 | i2c->irq = platform_get_irq(pdev, 0); |
| 332 | − if (i2c->irq < 0) { | |
| 333 | − result = -ENXIO; | |
| 334 | − goto fail_get_irq; | |
| 335 | − } | |
| 332 | + if (i2c->irq < 0) | |
| 333 | + i2c->irq = NO_IRQ; /* Use polling */ | |
| 334 | + | |
| 336 | 335 | i2c->flags = pdata->device_flags; |
| 337 | 336 | init_waitqueue_head(&i2c->queue); |
| 338 | 337 | |
| @@ -344,7 +343,7 @@ static int fsl_i2c_probe(struct platform_device *pdev) · 5 unmodified lines | ||
| 344 | 343 | goto fail_map; |
| 345 | 344 | } |
| 346 | 345 | |
| 347 | − if (i2c->irq != 0) | |
| 346 | + if (i2c->irq != NO_IRQ) | |
| 348 | 347 | if ((result = request_irq(i2c->irq, mpc_i2c_isr, |
| 349 | 348 | IRQF_SHARED, "i2c-mpc", i2c)) < 0) { |
| 350 | 349 | printk(KERN_ERR |
| @@ -367,12 +366,11 @@ static int fsl_i2c_probe(struct platform_device *pdev) · 16 unmodified lines | ||
| 367 | 366 | return result; |
| 368 | 367 | |
| 369 | 368 | fail_add: |
| 370 | − if (i2c->irq != 0) | |
| 369 | + if (i2c->irq != NO_IRQ) | |
| 371 | 370 | free_irq(i2c->irq, i2c); |
| 372 | 371 | fail_irq: |
| 373 | 372 | iounmap(i2c->base); |
| 374 | 373 | fail_map: |
| 375 | − fail_get_irq: | |
| 376 | 374 | kfree(i2c); |
| 377 | 375 | return result; |
| 378 | 376 | }; |
| @@ -384,7 +382,7 @@ static int fsl_i2c_remove(struct platform_device *pdev) · 5 unmodified lines | ||
| 384 | 382 | i2c_del_adapter(&i2c->adap); |
| 385 | 383 | platform_set_drvdata(pdev, NULL); |
| 386 | 384 | |
| 387 | − if (i2c->irq != 0) | |
| 385 | + if (i2c->irq != NO_IRQ) | |
| 388 | 386 | free_irq(i2c->irq, i2c); |
| 389 | 387 | |
| 390 | 388 | iounmap(i2c->base); |