Commit 47fd22f2 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by David S. Miller

cs89x0: rework driver configuration

There are two drivers in the cs89x0 file, with the CONFIG_CS89x0_PLATFORM
symbol deciding which one is getting built. This is somewhat confusing
and makes it more likely ton configure a driver that works nowhere.

Split up the Kconfig option into separate ISA and PLATFORM drivers,
with the ISA symbol explicitly connecting to the static probing in
drivers/net/Space.c

The two drivers are still mutually incompatible at compile time,
which could be lifted by splitting them into multiple files,
but in practice this will make no difference.

The platform driver can now be enabled for compile-testing on
non-ARM machines.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8bbdf1bd
......@@ -77,11 +77,9 @@ static struct devprobe2 isa_probes[] __initdata = {
#ifdef CONFIG_SMC9194
{smc_init, 0},
#endif
#ifdef CONFIG_CS89x0
#ifndef CONFIG_CS89x0_PLATFORM
#ifdef CONFIG_CS89x0_ISA
{cs89x0_probe, 0},
#endif
#endif
#if defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET) /* Intel */
{i82596_probe, 0}, /* I82596 */
#endif
......
......@@ -6,7 +6,7 @@
config NET_VENDOR_CIRRUS
bool "Cirrus devices"
default y
depends on ISA || EISA || ARM || MAC
depends on ISA || EISA || ARM || MAC || COMPILE_TEST
help
If you have a network (Ethernet) card belonging to this class, say Y.
......@@ -18,9 +18,15 @@ config NET_VENDOR_CIRRUS
if NET_VENDOR_CIRRUS
config CS89x0
tristate "CS89x0 support"
depends on ISA || EISA || ARM
tristate
config CS89x0_ISA
tristate "CS89x0 ISA driver support"
depends on HAS_IOPORT_MAP
depends on ISA
depends on !PPC32
depends on CS89x0_PLATFORM=n
select CS89x0
help
Support for CS89x0 chipset based Ethernet cards. If you have a
network (Ethernet) card of this type, say Y and read the file
......@@ -30,15 +36,15 @@ config CS89x0
will be called cs89x0.
config CS89x0_PLATFORM
bool "CS89x0 platform driver support" if HAS_IOPORT_MAP
default !HAS_IOPORT_MAP
depends on CS89x0
tristate "CS89x0 platform driver support"
depends on ARM || COMPILE_TEST
select CS89x0
help
Say Y to compile the cs89x0 driver as a platform driver. This
makes this driver suitable for use on certain evaluation boards
such as the iMX21ADS.
Say Y to compile the cs89x0 platform driver. This makes this driver
suitable for use on certain evaluation boards such as the iMX21ADS.
If you are unsure, say N.
To compile this driver as a module, choose M here. The module
will be called cs89x0.
config EP93XX_ETH
tristate "EP93xx Ethernet support"
......
......@@ -104,7 +104,7 @@ static char version[] __initdata =
* them to system IRQ numbers. This mapping is card specific and is set to
* the configuration of the Cirrus Eval board for this chip.
*/
#ifndef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_ISA)
static unsigned int netcard_portlist[] __used __initdata = {
0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240,
0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0
......@@ -292,7 +292,7 @@ write_irq(struct net_device *dev, int chip_type, int irq)
int i;
if (chip_type == CS8900) {
#ifndef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_ISA)
/* Search the mapping table for the corresponding IRQ pin. */
for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++)
if (cs8900_irq_map[i] == irq)
......@@ -859,7 +859,7 @@ net_open(struct net_device *dev)
goto bad_out;
}
} else {
#if !defined(CONFIG_CS89x0_PLATFORM)
#if IS_ENABLED(CONFIG_CS89x0_ISA)
if (((1 << dev->irq) & lp->irq_map) == 0) {
pr_err("%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
dev->name, dev->irq, lp->irq_map);
......@@ -1523,7 +1523,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
dev->irq = i;
} else {
i = lp->isa_config & INT_NO_MASK;
#ifndef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_ISA)
if (lp->chip_type == CS8900) {
/* Translate the IRQ using the IRQ mapping table. */
if (i >= ARRAY_SIZE(cs8900_irq_map))
......@@ -1576,7 +1576,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
return retval;
}
#ifndef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_ISA)
/*
* This function converts the I/O port address used by the cs89x0_probe() and
* init_module() functions to the I/O memory address used by the
......@@ -1682,11 +1682,7 @@ struct net_device * __init cs89x0_probe(int unit)
pr_warn("no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
return ERR_PTR(err);
}
#endif
#endif
#if defined(MODULE) && !defined(CONFIG_CS89x0_PLATFORM)
#else
static struct net_device *dev_cs89x0;
/* Support the 'debug' module parm even if we're compiled for non-debug to
......@@ -1759,7 +1755,7 @@ MODULE_LICENSE("GPL");
int __init init_module(void)
{
struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
struct net_device *dev;
struct net_local *lp;
int ret = 0;
......@@ -1768,6 +1764,7 @@ int __init init_module(void)
#else
debug = 0;
#endif
dev = alloc_etherdev(sizeof(struct net_local));
if (!dev)
return -ENOMEM;
......@@ -1838,9 +1835,10 @@ cleanup_module(void)
release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT);
free_netdev(dev_cs89x0);
}
#endif /* MODULE && !CONFIG_CS89x0_PLATFORM */
#endif /* MODULE */
#endif /* CONFIG_CS89x0_ISA */
#ifdef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_PLATFORM)
static int __init cs89x0_platform_probe(struct platform_device *pdev)
{
struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment