b43: add an option to register BROKEN bcma driver
authorRafał Miłecki <zajec5@gmail.com>
Thu, 2 Jun 2011 07:56:04 +0000 (09:56 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 3 Jun 2011 19:16:31 +0000 (15:16 -0400)
It does nothing useful yet, so it is matched as BROKEN.
For now this is just an option for b43, in future we may want to make
b43 support SSB or BCMA (note: or, not xor).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/b43/Kconfig
drivers/net/wireless/b43/b43.h
drivers/net/wireless/b43/main.c

index 480595f04411a0523537df7e82549a414eb4b415..fe26bf448fdbf5b54f0acfdff41aa8a4f860d235 100644 (file)
@@ -26,6 +26,11 @@ config B43
          This driver can be built as a module (recommended) that will be called "b43".
          If unsure, say M.
 
+config B43_BCMA
+       bool "Support for BCMA bus"
+       depends on B43 && BCMA && BROKEN
+       default y
+
 # Auto-select SSB PCI-HOST support, if possible
 config B43_PCI_AUTOSELECT
        bool
index 0a3c7012901bd35f04c7985e4a39c058751407b7..81d78bfa0e825fa232a5e663b70982bff2cf1b24 100644 (file)
@@ -5,6 +5,7 @@
 #include <linux/spinlock.h>
 #include <linux/interrupt.h>
 #include <linux/hw_random.h>
+#include <linux/bcma/bcma.h>
 #include <linux/ssb/ssb.h>
 #include <net/mac80211.h>
 
index 1b9d3cc2dd960afbffd54a7d99cc20cea0d65991..1d8d98324d15f3924cca0ccad39e9433ccc6c2fa 100644 (file)
@@ -113,6 +113,16 @@ static int b43_modparam_pio = B43_PIO_DEFAULT;
 module_param_named(pio, b43_modparam_pio, int, 0644);
 MODULE_PARM_DESC(pio, "Use PIO accesses by default: 0=DMA, 1=PIO");
 
+#ifdef CONFIG_B43_BCMA
+static const struct bcma_device_id b43_bcma_tbl[] = {
+       BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 0x17, BCMA_ANY_CLASS),
+       BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 0x18, BCMA_ANY_CLASS),
+       BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 0x1D, BCMA_ANY_CLASS),
+       BCMA_CORETABLE_END
+};
+MODULE_DEVICE_TABLE(bcma, b43_bcma_tbl);
+#endif
+
 static const struct ssb_device_id b43_ssb_tbl[] = {
        SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
        SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 6),
@@ -4986,6 +4996,26 @@ static struct b43_wl *b43_wireless_init(struct ssb_device *dev)
        return wl;
 }
 
+#ifdef CONFIG_B43_BCMA
+static int b43_bcma_probe(struct bcma_device *core)
+{
+       b43err(NULL, "BCMA is not supported yet!");
+       return -EOPNOTSUPP;
+}
+
+static void b43_bcma_remove(struct bcma_device *core)
+{
+       /* TODO */
+}
+
+static struct bcma_driver b43_bcma_driver = {
+       .name           = KBUILD_MODNAME,
+       .id_table       = b43_bcma_tbl,
+       .probe          = b43_bcma_probe,
+       .remove         = b43_bcma_remove,
+};
+#endif
+
 static
 int b43_ssb_probe(struct ssb_device *sdev, const struct ssb_device_id *id)
 {
@@ -5116,14 +5146,23 @@ static int __init b43_init(void)
        err = b43_sdio_init();
        if (err)
                goto err_pcmcia_exit;
-       err = ssb_driver_register(&b43_ssb_driver);
+#ifdef CONFIG_B43_BCMA
+       err = bcma_driver_register(&b43_bcma_driver);
        if (err)
                goto err_sdio_exit;
+#endif
+       err = ssb_driver_register(&b43_ssb_driver);
+       if (err)
+               goto err_bcma_driver_exit;
        b43_print_driverinfo();
 
        return err;
 
+err_bcma_driver_exit:
+#ifdef CONFIG_B43_BCMA
+       bcma_driver_unregister(&b43_bcma_driver);
 err_sdio_exit:
+#endif
        b43_sdio_exit();
 err_pcmcia_exit:
        b43_pcmcia_exit();
@@ -5135,6 +5174,9 @@ err_dfs_exit:
 static void __exit b43_exit(void)
 {
        ssb_driver_unregister(&b43_ssb_driver);
+#ifdef CONFIG_B43_BCMA
+       bcma_driver_unregister(&b43_bcma_driver);
+#endif
        b43_sdio_exit();
        b43_pcmcia_exit();
        b43_debugfs_exit();