diff options
Diffstat (limited to 'drivers/net/smc91x.c')
| -rw-r--r-- | drivers/net/smc91x.c | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/drivers/net/smc91x.c b/drivers/net/smc91x.c index 7ec08127c9d6..0e9833adf9fe 100644 --- a/drivers/net/smc91x.c +++ b/drivers/net/smc91x.c | |||
| @@ -215,15 +215,12 @@ struct smc_local { | |||
| 215 | 215 | ||
| 216 | spinlock_t lock; | 216 | spinlock_t lock; |
| 217 | 217 | ||
| 218 | #ifdef SMC_CAN_USE_DATACS | ||
| 219 | u32 __iomem *datacs; | ||
| 220 | #endif | ||
| 221 | |||
| 222 | #ifdef SMC_USE_PXA_DMA | 218 | #ifdef SMC_USE_PXA_DMA |
| 223 | /* DMA needs the physical address of the chip */ | 219 | /* DMA needs the physical address of the chip */ |
| 224 | u_long physaddr; | 220 | u_long physaddr; |
| 225 | #endif | 221 | #endif |
| 226 | void __iomem *base; | 222 | void __iomem *base; |
| 223 | void __iomem *datacs; | ||
| 227 | }; | 224 | }; |
| 228 | 225 | ||
| 229 | #if SMC_DEBUG > 0 | 226 | #if SMC_DEBUG > 0 |
| @@ -2104,9 +2101,8 @@ static int smc_enable_device(struct platform_device *pdev) | |||
| 2104 | * Set the appropriate byte/word mode. | 2101 | * Set the appropriate byte/word mode. |
| 2105 | */ | 2102 | */ |
| 2106 | ecsr = readb(addr + (ECSR << SMC_IO_SHIFT)) & ~ECSR_IOIS8; | 2103 | ecsr = readb(addr + (ECSR << SMC_IO_SHIFT)) & ~ECSR_IOIS8; |
| 2107 | #ifndef SMC_CAN_USE_16BIT | 2104 | if (!SMC_CAN_USE_16BIT) |
| 2108 | ecsr |= ECSR_IOIS8; | 2105 | ecsr |= ECSR_IOIS8; |
| 2109 | #endif | ||
| 2110 | writeb(ecsr, addr + (ECSR << SMC_IO_SHIFT)); | 2106 | writeb(ecsr, addr + (ECSR << SMC_IO_SHIFT)); |
| 2111 | local_irq_restore(flags); | 2107 | local_irq_restore(flags); |
| 2112 | 2108 | ||
| @@ -2143,40 +2139,39 @@ static void smc_release_attrib(struct platform_device *pdev) | |||
| 2143 | release_mem_region(res->start, ATTRIB_SIZE); | 2139 | release_mem_region(res->start, ATTRIB_SIZE); |
| 2144 | } | 2140 | } |
| 2145 | 2141 | ||
| 2146 | #ifdef SMC_CAN_USE_DATACS | 2142 | static inline void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev) |
| 2147 | static void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev) | ||
| 2148 | { | 2143 | { |
| 2149 | struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); | 2144 | if (SMC_CAN_USE_DATACS) { |
| 2150 | struct smc_local *lp = netdev_priv(ndev); | 2145 | struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); |
| 2146 | struct smc_local *lp = netdev_priv(ndev); | ||
| 2151 | 2147 | ||
| 2152 | if (!res) | 2148 | if (!res) |
| 2153 | return; | 2149 | return; |
| 2154 | 2150 | ||
| 2155 | if(!request_mem_region(res->start, SMC_DATA_EXTENT, CARDNAME)) { | 2151 | if(!request_mem_region(res->start, SMC_DATA_EXTENT, CARDNAME)) { |
| 2156 | printk(KERN_INFO "%s: failed to request datacs memory region.\n", CARDNAME); | 2152 | printk(KERN_INFO "%s: failed to request datacs memory region.\n", CARDNAME); |
| 2157 | return; | 2153 | return; |
| 2158 | } | 2154 | } |
| 2159 | 2155 | ||
| 2160 | lp->datacs = ioremap(res->start, SMC_DATA_EXTENT); | 2156 | lp->datacs = ioremap(res->start, SMC_DATA_EXTENT); |
| 2157 | } | ||
| 2161 | } | 2158 | } |
| 2162 | 2159 | ||
| 2163 | static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev) | 2160 | static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev) |
| 2164 | { | 2161 | { |
| 2165 | struct smc_local *lp = netdev_priv(ndev); | 2162 | if (SMC_CAN_USE_DATACS) { |
| 2166 | struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); | 2163 | struct smc_local *lp = netdev_priv(ndev); |
| 2164 | struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-data32"); | ||
| 2167 | 2165 | ||
| 2168 | if (lp->datacs) | 2166 | if (lp->datacs) |
| 2169 | iounmap(lp->datacs); | 2167 | iounmap(lp->datacs); |
| 2170 | 2168 | ||
| 2171 | lp->datacs = NULL; | 2169 | lp->datacs = NULL; |
| 2172 | 2170 | ||
| 2173 | if (res) | 2171 | if (res) |
| 2174 | release_mem_region(res->start, SMC_DATA_EXTENT); | 2172 | release_mem_region(res->start, SMC_DATA_EXTENT); |
| 2173 | } | ||
| 2175 | } | 2174 | } |
| 2176 | #else | ||
| 2177 | static void smc_request_datacs(struct platform_device *pdev, struct net_device *ndev) {} | ||
| 2178 | static void smc_release_datacs(struct platform_device *pdev, struct net_device *ndev) {} | ||
| 2179 | #endif | ||
| 2180 | 2175 | ||
| 2181 | /* | 2176 | /* |
| 2182 | * smc_init(void) | 2177 | * smc_init(void) |
| @@ -2221,6 +2216,10 @@ static int smc_drv_probe(struct platform_device *pdev) | |||
| 2221 | 2216 | ||
| 2222 | ndev->dma = (unsigned char)-1; | 2217 | ndev->dma = (unsigned char)-1; |
| 2223 | ndev->irq = platform_get_irq(pdev, 0); | 2218 | ndev->irq = platform_get_irq(pdev, 0); |
| 2219 | if (ndev->irq < 0) { | ||
| 2220 | ret = -ENODEV; | ||
| 2221 | goto out_free_netdev; | ||
| 2222 | } | ||
| 2224 | 2223 | ||
| 2225 | ret = smc_request_attrib(pdev); | 2224 | ret = smc_request_attrib(pdev); |
| 2226 | if (ret) | 2225 | if (ret) |
