From 2be45d43a07299fcd7a19d4cb914880c53b054de Mon Sep 17 00:00:00 2001 From: Shawn Guo Date: Wed, 16 Jun 2021 16:41:00 +0800 Subject: [PATCH] brcmfmac: support read chipname via sysfs It adds support of reading chipname via sysfs, so that user space can distinguish WiFi module among AP5256, AP5256V and 1MW. - AP5256 reMarkable: ~/ cat /sys/class/ieee80211/phy*/chipname BCM4345/9 - AP5256V reMarkable: ~/ cat /sys/class/ieee80211/phy*/chipname BCM43012/2 - 1MW reMarkable: ~/ cat /sys/class/ieee80211/phy*/chipname BCM4345/6 Signed-off-by: Shawn Guo --- .../broadcom/brcm80211/brcmfmac/core.c | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c index 405745c81697..8116f5c88200 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c @@ -937,6 +937,17 @@ int brcmf_fwlog_attach(struct device *dev) return brcmf_debug_fwlog_init(drvr); } +static ssize_t chipname_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct brcmf_bus *bus_if = dev_get_drvdata(dev->parent); + struct brcmf_pub *drvr = bus_if->drvr; + struct brcmf_rev_info *ri = &drvr->revinfo; + + return snprintf(buf, PAGE_SIZE, "%s\n", ri->chipname); +} +static DEVICE_ATTR_RO(chipname); + static int brcmf_revinfo_read(struct seq_file *s, void *data) { struct brcmf_bus *bus_if = dev_get_drvdata(s->private); @@ -1035,6 +1046,13 @@ int brcmf_bus_started(struct device *dev) #endif #endif /* CONFIG_INET */ + /* Create sysfs file to get chip name */ + ret = device_create_file(&drvr->config->wiphy->dev, &dev_attr_chipname); + if (ret) { + brcmf_err("failed to create sysfs file chipname"); + goto fail; + } + return 0; fail: @@ -1087,6 +1105,8 @@ void brcmf_detach(struct device *dev) if (drvr == NULL) return; + device_remove_file(&drvr->config->wiphy->dev, &dev_attr_chipname); + #ifdef CONFIG_INET unregister_inetaddr_notifier(&drvr->inetaddr_notifier); #endif