return true;
 }
 
+static void lpss_dma_put_device(void *dma_dev)
+{
+       pci_dev_put(dma_dev);
+}
+
 static int lpss_spi_setup(struct pci_dev *dev, struct pxa_spi_info *c)
 {
        struct pci_dev *dma_dev;
+       int ret;
 
        c->num_chipselect = 1;
        c->max_clk_rate = 50000000;
 
        dma_dev = pci_get_slot(dev->bus, PCI_DEVFN(PCI_SLOT(dev->devfn), 0));
+       ret = devm_add_action_or_reset(&dev->dev, lpss_dma_put_device, dma_dev);
+       if (ret)
+               return ret;
 
        if (c->tx_param) {
                struct dw_dma_slave *slave = c->tx_param;
 
 static int mrfld_spi_setup(struct pci_dev *dev, struct pxa_spi_info *c)
 {
-       struct pci_dev *dma_dev = pci_get_slot(dev->bus, PCI_DEVFN(21, 0));
        struct dw_dma_slave *tx, *rx;
+       struct pci_dev *dma_dev;
+       int ret;
 
        switch (PCI_FUNC(dev->devfn)) {
        case 0:
                return -ENODEV;
        }
 
+       dma_dev = pci_get_slot(dev->bus, PCI_DEVFN(21, 0));
+       ret = devm_add_action_or_reset(&dev->dev, lpss_dma_put_device, dma_dev);
+       if (ret)
+               return ret;
+
        tx = c->tx_param;
        tx->dma_dev = &dma_dev->dev;