/* Request IRQ for card detect */
        if ((mmc_slot(host).card_detect_irq)) {
-               ret = request_threaded_irq(mmc_slot(host).card_detect_irq,
-                                          NULL,
-                                          omap_hsmmc_detect,
+               ret = devm_request_threaded_irq(&pdev->dev,
+                                               mmc_slot(host).card_detect_irq,
+                                               NULL, omap_hsmmc_detect,
                                           IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
                                           mmc_hostname(mmc), host);
                if (ret) {
 
 err_slot_name:
        mmc_remove_host(mmc);
-       free_irq(mmc_slot(host).card_detect_irq, host);
 err_irq_cd:
        if (host->use_reg)
                omap_hsmmc_reg_put(host);
                omap_hsmmc_reg_put(host);
        if (host->pdata->cleanup)
                host->pdata->cleanup(&pdev->dev);
-       if (mmc_slot(host).card_detect_irq)
-               free_irq(mmc_slot(host).card_detect_irq, host);
 
        if (host->tx_chan)
                dma_release_channel(host->tx_chan);