diff options
Diffstat (limited to 'drivers/spi/spi-dw-pci.c')
-rw-r--r-- | drivers/spi/spi-dw-pci.c | 47 |
1 files changed, 12 insertions, 35 deletions
diff --git a/drivers/spi/spi-dw-pci.c b/drivers/spi/spi-dw-pci.c index 66fa9955ea14..3f3dc1226edf 100644 --- a/drivers/spi/spi-dw-pci.c +++ b/drivers/spi/spi-dw-pci.c | |||
@@ -43,35 +43,25 @@ static int spi_pci_probe(struct pci_dev *pdev, | |||
43 | dev_info(&pdev->dev, "found PCI SPI controller(ID: %04x:%04x)\n", | 43 | dev_info(&pdev->dev, "found PCI SPI controller(ID: %04x:%04x)\n", |
44 | pdev->vendor, pdev->device); | 44 | pdev->vendor, pdev->device); |
45 | 45 | ||
46 | ret = pci_enable_device(pdev); | 46 | ret = pcim_enable_device(pdev); |
47 | if (ret) | 47 | if (ret) |
48 | return ret; | 48 | return ret; |
49 | 49 | ||
50 | dwpci = kzalloc(sizeof(struct dw_spi_pci), GFP_KERNEL); | 50 | dwpci = devm_kzalloc(&pdev->dev, sizeof(struct dw_spi_pci), |
51 | if (!dwpci) { | 51 | GFP_KERNEL); |
52 | ret = -ENOMEM; | 52 | if (!dwpci) |
53 | goto err_disable; | 53 | return -ENOMEM; |
54 | } | ||
55 | 54 | ||
56 | dwpci->pdev = pdev; | 55 | dwpci->pdev = pdev; |
57 | dws = &dwpci->dws; | 56 | dws = &dwpci->dws; |
58 | 57 | ||
59 | /* Get basic io resource and map it */ | 58 | /* Get basic io resource and map it */ |
60 | dws->paddr = pci_resource_start(pdev, pci_bar); | 59 | dws->paddr = pci_resource_start(pdev, pci_bar); |
61 | dws->iolen = pci_resource_len(pdev, pci_bar); | ||
62 | 60 | ||
63 | ret = pci_request_region(pdev, pci_bar, dev_name(&pdev->dev)); | 61 | ret = pcim_iomap_regions(pdev, 1, dev_name(&pdev->dev)); |
64 | if (ret) | 62 | if (ret) |
65 | goto err_kfree; | 63 | return ret; |
66 | |||
67 | dws->regs = ioremap_nocache((unsigned long)dws->paddr, | ||
68 | pci_resource_len(pdev, pci_bar)); | ||
69 | if (!dws->regs) { | ||
70 | ret = -ENOMEM; | ||
71 | goto err_release_reg; | ||
72 | } | ||
73 | 64 | ||
74 | dws->parent_dev = &pdev->dev; | ||
75 | dws->bus_num = 0; | 65 | dws->bus_num = 0; |
76 | dws->num_cs = 4; | 66 | dws->num_cs = 4; |
77 | dws->irq = pdev->irq; | 67 | dws->irq = pdev->irq; |
@@ -83,26 +73,17 @@ static int spi_pci_probe(struct pci_dev *pdev, | |||
83 | if (pdev->device == 0x0800) { | 73 | if (pdev->device == 0x0800) { |
84 | ret = dw_spi_mid_init(dws); | 74 | ret = dw_spi_mid_init(dws); |
85 | if (ret) | 75 | if (ret) |
86 | goto err_unmap; | 76 | return ret; |
87 | } | 77 | } |
88 | 78 | ||
89 | ret = dw_spi_add_host(dws); | 79 | ret = dw_spi_add_host(&pdev->dev, dws); |
90 | if (ret) | 80 | if (ret) |
91 | goto err_unmap; | 81 | return ret; |
92 | 82 | ||
93 | /* PCI hook and SPI hook use the same drv data */ | 83 | /* PCI hook and SPI hook use the same drv data */ |
94 | pci_set_drvdata(pdev, dwpci); | 84 | pci_set_drvdata(pdev, dwpci); |
95 | return 0; | ||
96 | 85 | ||
97 | err_unmap: | 86 | return 0; |
98 | iounmap(dws->regs); | ||
99 | err_release_reg: | ||
100 | pci_release_region(pdev, pci_bar); | ||
101 | err_kfree: | ||
102 | kfree(dwpci); | ||
103 | err_disable: | ||
104 | pci_disable_device(pdev); | ||
105 | return ret; | ||
106 | } | 87 | } |
107 | 88 | ||
108 | static void spi_pci_remove(struct pci_dev *pdev) | 89 | static void spi_pci_remove(struct pci_dev *pdev) |
@@ -110,10 +91,6 @@ static void spi_pci_remove(struct pci_dev *pdev) | |||
110 | struct dw_spi_pci *dwpci = pci_get_drvdata(pdev); | 91 | struct dw_spi_pci *dwpci = pci_get_drvdata(pdev); |
111 | 92 | ||
112 | dw_spi_remove_host(&dwpci->dws); | 93 | dw_spi_remove_host(&dwpci->dws); |
113 | iounmap(dwpci->dws.regs); | ||
114 | pci_release_region(pdev, 0); | ||
115 | kfree(dwpci); | ||
116 | pci_disable_device(pdev); | ||
117 | } | 94 | } |
118 | 95 | ||
119 | #ifdef CONFIG_PM | 96 | #ifdef CONFIG_PM |
@@ -148,7 +125,7 @@ static int spi_resume(struct pci_dev *pdev) | |||
148 | #define spi_resume NULL | 125 | #define spi_resume NULL |
149 | #endif | 126 | #endif |
150 | 127 | ||
151 | static DEFINE_PCI_DEVICE_TABLE(pci_ids) = { | 128 | static const struct pci_device_id pci_ids[] = { |
152 | /* Intel MID platform SPI controller 0 */ | 129 | /* Intel MID platform SPI controller 0 */ |
153 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0800) }, | 130 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0800) }, |
154 | {}, | 131 | {}, |