diff options
-rw-r--r-- | drivers/ata/libata-core.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index ec3ce120a517..89fd0e9ed746 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -7178,6 +7178,10 @@ int ata_host_register(struct ata_host *host, struct scsi_host_template *sht) | |||
7178 | * request IRQ and register it. This helper takes necessasry | 7178 | * request IRQ and register it. This helper takes necessasry |
7179 | * arguments and performs the three steps in one go. | 7179 | * arguments and performs the three steps in one go. |
7180 | * | 7180 | * |
7181 | * An invalid IRQ skips the IRQ registration and expects the host to | ||
7182 | * have set polling mode on the port. In this case, @irq_handler | ||
7183 | * should be NULL. | ||
7184 | * | ||
7181 | * LOCKING: | 7185 | * LOCKING: |
7182 | * Inherited from calling layer (may sleep). | 7186 | * Inherited from calling layer (may sleep). |
7183 | * | 7187 | * |
@@ -7194,6 +7198,12 @@ int ata_host_activate(struct ata_host *host, int irq, | |||
7194 | if (rc) | 7198 | if (rc) |
7195 | return rc; | 7199 | return rc; |
7196 | 7200 | ||
7201 | /* Special case for polling mode */ | ||
7202 | if (!irq) { | ||
7203 | WARN_ON(irq_handler); | ||
7204 | return ata_host_register(host, sht); | ||
7205 | } | ||
7206 | |||
7197 | rc = devm_request_irq(host->dev, irq, irq_handler, irq_flags, | 7207 | rc = devm_request_irq(host->dev, irq, irq_handler, irq_flags, |
7198 | dev_driver_string(host->dev), host); | 7208 | dev_driver_string(host->dev), host); |
7199 | if (rc) | 7209 | if (rc) |