pata_ipx4xx_cf: fix IRQ check
authorSergey Shtylyov <s.shtylyov@omprussia.ru>
Thu, 25 Mar 2021 20:51:10 +0000 (23:51 +0300)
committerJens Axboe <axboe@kernel.dk>
Fri, 26 Mar 2021 23:13:02 +0000 (17:13 -0600)
The driver's probe() method is written as if platform_get_irq() returns 0
on error, while actually it returns a negative error code (with all the
other values considered valid IRQs).  Rewrite the driver's IRQ checking
code to pass the positive IRQ #s to ata_host_activate(), propagate errors
upstream, and treat IRQ0 as error, returning -EINVAL, as the libata code
treats 0  as  an indication that polling should be used anyway...

Fixes: 0df0d0a0ea9f ("[libata] ARM: add ixp4xx PATA driver")
Signed-off-by: Sergey Shtylyov <s.shtylyov@omprussia.ru>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/ata/pata_ixp4xx_cf.c

index d1644a8..abc0e87 100644 (file)
@@ -165,8 +165,12 @@ static int ixp4xx_pata_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        irq = platform_get_irq(pdev, 0);
-       if (irq)
+       if (irq > 0)
                irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING);
+       else if (irq < 0)
+               return irq;
+       else
+               return -EINVAL;
 
        /* Setup expansion bus chip selects */
        *data->cs0_cfg = data->cs0_bits;