Skip to content

Commit

Permalink
[NET] smc91x: prepare SMC_USE_PXA_DMA to be specified in platform data
Browse files Browse the repository at this point in the history
Now that the original SMC_USE_PXA_DMA specific code will always being
built if CONFIG_ARCH_PXA is defined, so to make this part of the code
to be PXA public, and still prevent it from being built if support of
PXA is not selected.

A SMC91X_USE_DMA flag is added to the platform data to allow platform
to choose its usage of DMA. Note this flag itself is so named to be
generic enough (assuming other platforms can also use DMA).

It keeps backward compatibility to set the SMC91X_USE_DMA flag if
SMC_USE_PXA_DMA is still defined.

Signed-off-by: Eric Miao <eric.miao@marvell.com>
Acked-by: Nicolas Pitre <nico@cam.org>
Acked-by: Jeff Garzik <jgarzik@pobox.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Eric Miao authored and Russell King committed Jul 12, 2008
1 parent 1591988 commit 52256c0
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 8 deletions.
13 changes: 8 additions & 5 deletions drivers/net/smc91x.c
Original file line number Diff line number Diff line change
Expand Up @@ -1939,8 +1939,11 @@ static int __init smc_probe(struct net_device *dev, void __iomem *ioaddr,
if (retval)
goto err_out;

#ifdef SMC_USE_PXA_DMA
{
#ifdef CONFIG_ARCH_PXA
# ifdef SMC_USE_PXA_DMA
lp->cfg.flags |= SMC91X_USE_DMA;
# endif
if (lp->cfg.flags & SMC91X_USE_DMA) {
int dma = pxa_request_dma(dev->name, DMA_PRIO_LOW,
smc_pxa_dma_irq, NULL);
if (dma >= 0)
Expand Down Expand Up @@ -1980,7 +1983,7 @@ static int __init smc_probe(struct net_device *dev, void __iomem *ioaddr,
}

err_out:
#ifdef SMC_USE_PXA_DMA
#ifdef CONFIG_ARCH_PXA
if (retval && dev->dma != (unsigned char)-1)
pxa_free_dma(dev->dma);
#endif
Expand Down Expand Up @@ -2198,7 +2201,7 @@ static int smc_drv_probe(struct platform_device *pdev)
goto out_release_attrib;
}

#ifdef SMC_USE_PXA_DMA
#ifdef CONFIG_ARCH_PXA
{
struct smc_local *lp = netdev_priv(ndev);
lp->device = &pdev->dev;
Expand Down Expand Up @@ -2241,7 +2244,7 @@ static int smc_drv_remove(struct platform_device *pdev)

free_irq(ndev->irq, ndev);

#ifdef SMC_USE_PXA_DMA
#ifdef CONFIG_ARCH_PXA
if (ndev->dma != (unsigned char)-1)
pxa_free_dma(ndev->dma);
#endif
Expand Down
6 changes: 3 additions & 3 deletions drivers/net/smc91x.h
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ struct smc_local {

spinlock_t lock;

#ifdef SMC_USE_PXA_DMA
#ifdef CONFIG_ARCH_PXA
/* DMA needs the physical address of the chip */
u_long physaddr;
struct device *device;
Expand All @@ -510,7 +510,7 @@ struct smc_local {
#define SMC_16BIT(p) ((p)->cfg.flags & SMC91X_USE_16BIT)
#define SMC_32BIT(p) ((p)->cfg.flags & SMC91X_USE_32BIT)

#ifdef SMC_USE_PXA_DMA
#ifdef CONFIG_ARCH_PXA
/*
* Let's use the DMA engine on the XScale PXA2xx for RX packets. This is
* always happening in irq context so no need to worry about races. TX is
Expand Down Expand Up @@ -604,7 +604,7 @@ smc_pxa_dma_irq(int dma, void *dummy)
{
DCSR(dma) = 0;
}
#endif /* SMC_USE_PXA_DMA */
#endif /* CONFIG_ARCH_PXA */


/*
Expand Down
2 changes: 2 additions & 0 deletions include/linux/smc91x.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
#define SMC91X_IO_SHIFT_3 (3 << 4)
#define SMC91X_IO_SHIFT(x) (((x) >> 4) & 0x3)

#define SMC91X_USE_DMA (1 << 6)

struct smc91x_platdata {
unsigned long flags;
};
Expand Down

0 comments on commit 52256c0

Please sign in to comment.