diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index f7961b22e051..c3f51e123990 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -4431,6 +4431,55 @@ brcmf_sdio_prepare_fw_request(struct brcmf_sdio *bus) return fwreq; } +static char brcmf_fw_name[BRCMF_FW_NAME_LEN]; + +#ifdef CONFIG_PROC_FS +#include + +static int brcmf_sdio_proc_show(struct seq_file *m, void *v) +{ + seq_printf(m, "brcmf_sdio\n"); + return 0; +} + +static int brcmf_sdio_proc_open(struct inode *inode, struct file *file) +{ + return single_open(file, brcmf_sdio_proc_show, NULL); +} + +static ssize_t brcmf_sdio_proc_read(struct file * file, char __user * buf, size_t size, loff_t * loff) +{ + int len; + len = strlen(brcmf_fw_name); + return simple_read_from_buffer(buf, size, loff, brcmf_fw_name, len); +} + +static ssize_t brcmf_sdio_proc_write(struct file * file, const char __user * buf, size_t size, loff_t * loff) +{ + return size; +} + +static const struct proc_ops brcmf_sdio_proc_fops = { + .proc_open = brcmf_sdio_proc_open, + .proc_read = brcmf_sdio_proc_read, + .proc_write = brcmf_sdio_proc_write, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; + +static int __init brcmf_sdio_proc_init(void) +{ + struct proc_dir_entry *r; + + r = proc_create("driver/brcmf_fw", S_IRWXUGO, NULL, &brcmf_sdio_proc_fops); + if (!r) + return -ENOMEM; + return 0; +} +#else +static inline int brcmf_sdio_proc_init(void) { return 0; } +#endif /* CONFIG_PROC_FS */ + struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev) { int ret; @@ -4439,6 +4488,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev) struct brcmf_fw_request *fwreq; brcmf_dbg(TRACE, "Enter\n"); + msleep(1000); /* Allocate private bus interface state */ bus = kzalloc(sizeof(struct brcmf_sdio), GFP_ATOMIC); @@ -4533,6 +4583,9 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev) goto fail; } + sprintf(brcmf_fw_name, "%s\n", sdiodev->fw_name); + brcmf_sdio_proc_init(); + return bus; fail: