From: Pablo Mazzini <pmazzini@gmail.com>
To: linux-wireless@vger.kernel.org
Cc: Pablo Mazzini <pmazzini@gmail.com>, linux-kernel@vger.kernel.org
Subject: [PATCH wireless-next 2/4] wifi: cw1200: describe the chips in a table
Date: Mon, 2 Nov 2026 17:16:01 +0000 [thread overview]
Message-ID: <20261102171603.368298-3-pmazzini@gmail.com> (raw)
In-Reply-To: <20261102171603.368298-1-pmazzini@gmail.com>
Replace the firmware selection switch with a table keyed by the
silicon revision, so per-chip properties can be added in one place.
The SDD path becomes const to take the table's names.
No functional change.
Signed-off-by: Pablo Mazzini <pmazzini@gmail.com>
---
drivers/net/wireless/st/cw1200/cw1200.h | 3 +-
drivers/net/wireless/st/cw1200/fwio.c | 67 +++++++++++++++----------
drivers/net/wireless/st/cw1200/fwio.h | 6 +++
drivers/net/wireless/st/cw1200/main.c | 2 +-
4 files changed, 49 insertions(+), 29 deletions(-)
diff --git a/drivers/net/wireless/st/cw1200/cw1200.h b/drivers/net/wireless/st/cw1200/cw1200.h
index 48f808cdc1cb..8867b2c94c8d 100644
--- a/drivers/net/wireless/st/cw1200/cw1200.h
+++ b/drivers/net/wireless/st/cw1200/cw1200.h
@@ -117,10 +117,11 @@ struct cw1200_common {
CW1200_HW_REV_CUT22 = 22,
CW1X60_HW_REV = 40,
} hw_revision;
+ const struct cw1200_chip *chip;
int hw_refclk;
bool hw_have_5ghz;
const struct firmware *sdd;
- char *sdd_path;
+ const char *sdd_path;
struct cw1200_debug_priv *debug;
diff --git a/drivers/net/wireless/st/cw1200/fwio.c b/drivers/net/wireless/st/cw1200/fwio.c
index 2a03dc533b6a..6601aec1f231 100644
--- a/drivers/net/wireless/st/cw1200/fwio.c
+++ b/drivers/net/wireless/st/cw1200/fwio.c
@@ -48,6 +48,41 @@ static int cw1200_get_hw_type(u32 config_reg_val, int *major_revision)
return hw_type;
}
+static const struct cw1200_chip cw1200_chips[] = {
+ {
+ .revision = CW1200_HW_REV_CUT10,
+ .firmware = FIRMWARE_CUT10,
+ .sdd = SDD_FILE_10,
+ }, {
+ .revision = CW1200_HW_REV_CUT11,
+ .firmware = FIRMWARE_CUT11,
+ .sdd = SDD_FILE_11,
+ }, {
+ .revision = CW1200_HW_REV_CUT20,
+ .firmware = FIRMWARE_CUT20,
+ .sdd = SDD_FILE_20,
+ }, {
+ .revision = CW1200_HW_REV_CUT22,
+ .firmware = FIRMWARE_CUT22,
+ .sdd = SDD_FILE_22,
+ }, {
+ .revision = CW1X60_HW_REV,
+ .firmware = FIRMWARE_CW1X60,
+ .sdd = SDD_FILE_CW1X60,
+ },
+};
+
+static const struct cw1200_chip *cw1200_find_chip(int revision)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(cw1200_chips); i++)
+ if (cw1200_chips[i].revision == revision)
+ return &cw1200_chips[i];
+
+ return NULL;
+}
+
static int cw1200_load_firmware_cw1200(struct cw1200_common *priv)
{
int ret, block, num_blocks;
@@ -90,36 +125,14 @@ static int cw1200_load_firmware_cw1200(struct cw1200_common *priv)
goto exit; \
} while (0)
- switch (priv->hw_revision) {
- case CW1200_HW_REV_CUT10:
- fw_path = FIRMWARE_CUT10;
- if (!priv->sdd_path)
- priv->sdd_path = SDD_FILE_10;
- break;
- case CW1200_HW_REV_CUT11:
- fw_path = FIRMWARE_CUT11;
- if (!priv->sdd_path)
- priv->sdd_path = SDD_FILE_11;
- break;
- case CW1200_HW_REV_CUT20:
- fw_path = FIRMWARE_CUT20;
- if (!priv->sdd_path)
- priv->sdd_path = SDD_FILE_20;
- break;
- case CW1200_HW_REV_CUT22:
- fw_path = FIRMWARE_CUT22;
- if (!priv->sdd_path)
- priv->sdd_path = SDD_FILE_22;
- break;
- case CW1X60_HW_REV:
- fw_path = FIRMWARE_CW1X60;
- if (!priv->sdd_path)
- priv->sdd_path = SDD_FILE_CW1X60;
- break;
- default:
+ priv->chip = cw1200_find_chip(priv->hw_revision);
+ if (!priv->chip) {
pr_err("Invalid silicon revision %d.\n", priv->hw_revision);
return -EINVAL;
}
+ fw_path = priv->chip->firmware;
+ if (!priv->sdd_path)
+ priv->sdd_path = priv->chip->sdd;
/* Initialize common registers */
APB_WRITE(DOWNLOAD_IMAGE_SIZE_REG, DOWNLOAD_ARE_YOU_HERE);
diff --git a/drivers/net/wireless/st/cw1200/fwio.h b/drivers/net/wireless/st/cw1200/fwio.h
index c287160a492e..e97cbcd54e57 100644
--- a/drivers/net/wireless/st/cw1200/fwio.h
+++ b/drivers/net/wireless/st/cw1200/fwio.h
@@ -26,6 +26,12 @@
#define SDD_FILE_11 "sdd_11.bin"
#define SDD_FILE_10 "sdd_10.bin"
+struct cw1200_chip {
+ int revision;
+ const char *firmware;
+ const char *sdd;
+};
+
int cw1200_load_firmware(struct cw1200_common *priv);
/* SDD definitions */
diff --git a/drivers/net/wireless/st/cw1200/main.c b/drivers/net/wireless/st/cw1200/main.c
index 5d569eeb353f..793471acbfb6 100644
--- a/drivers/net/wireless/st/cw1200/main.c
+++ b/drivers/net/wireless/st/cw1200/main.c
@@ -541,7 +541,7 @@ int cw1200_core_probe(const struct hwbus_ops *hwbus_ops,
if (cw1200_refclk)
priv->hw_refclk = cw1200_refclk;
- priv->sdd_path = (char *)sdd_path;
+ priv->sdd_path = sdd_path;
if (cw1200_sdd_path)
priv->sdd_path = cw1200_sdd_path;
--
2.52.0
next prev parent reply other threads:[~2026-11-02 17:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-02 17:15 [PATCH wireless-next 0/4] wifi: cw1200: add XRadio XR819 support Pablo Mazzini
2026-11-02 17:16 ` [PATCH wireless-next 1/4] wifi: cw1200: don't update the beacon in station mode Pablo Mazzini
2026-11-02 17:16 ` Pablo Mazzini [this message]
2026-11-02 17:16 ` [PATCH wireless-next 3/4] wifi: cw1200: handle the XR819 channel switch and join Pablo Mazzini
2026-11-02 17:16 ` [PATCH wireless-next 4/4] wifi: cw1200: add XRadio XR819 support Pablo Mazzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261102171603.368298-3-pmazzini@gmail.com \
--to=pmazzini@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox