mirror of
https://github.com/torvalds/linux.git
synced 2025-04-12 06:49:52 +00:00
wifi: mwifiex: Fix RF calibration data download from file
This patch resolves an issue where RF calibration data from a file could not be downloaded to the firmware. The feature to download calibration data from a file was broken by the commit: d39fbc88956e. The issue arose because the function `mwifiex_cmd_cfg_data()` was modified in a way that prevented proper handling of file-based calibration data. While this patch restores the ability to download RF calibration data from a file, it may inadvertently break the feature to download calibration data from the device tree. This is because the function `mwifiex_dnld_dt_cfgdata()`, which also relies on `mwifiex_cmd_cfg_data()`, is still used for device tree-based calibration data downloads. Fixes: d39fbc88956e ("mwifiex: remove cfg_data construction") Signed-off-by: Jeff Chen <jeff.chen_1@nxp.com> Link: https://patch.msgid.link/20250318050739.2239376-3-jeff.chen_1@nxp.com [add newline for shorter lines] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
69ae7e1f73
commit
9868c4ce94
@ -454,6 +454,11 @@ enum mwifiex_channel_flags {
|
||||
#define HostCmd_RET_BIT 0x8000
|
||||
#define HostCmd_ACT_GEN_GET 0x0000
|
||||
#define HostCmd_ACT_GEN_SET 0x0001
|
||||
#define HOST_CMD_ACT_GEN_SET 0x0001
|
||||
/* Add this non-CamelCase-style macro to comply with checkpatch requirements.
|
||||
* This macro will eventually replace all existing CamelCase-style macros in
|
||||
* the future for consistency.
|
||||
*/
|
||||
#define HostCmd_ACT_GEN_REMOVE 0x0004
|
||||
#define HostCmd_ACT_BITWISE_SET 0x0002
|
||||
#define HostCmd_ACT_BITWISE_CLR 0x0003
|
||||
@ -2352,6 +2357,14 @@ struct host_cmd_ds_add_station {
|
||||
u8 tlv[];
|
||||
} __packed;
|
||||
|
||||
#define MWIFIEX_CFG_TYPE_CAL 0x2
|
||||
|
||||
struct host_cmd_ds_802_11_cfg_data {
|
||||
__le16 action;
|
||||
__le16 type;
|
||||
__le16 data_len;
|
||||
} __packed;
|
||||
|
||||
struct host_cmd_ds_command {
|
||||
__le16 command;
|
||||
__le16 size;
|
||||
@ -2431,6 +2444,7 @@ struct host_cmd_ds_command {
|
||||
struct host_cmd_ds_pkt_aggr_ctrl pkt_aggr_ctrl;
|
||||
struct host_cmd_ds_sta_configure sta_cfg;
|
||||
struct host_cmd_ds_add_station sta_info;
|
||||
struct host_cmd_ds_802_11_cfg_data cfg_data;
|
||||
} params;
|
||||
} __packed;
|
||||
|
||||
|
@ -1507,6 +1507,7 @@ static int mwifiex_cmd_cfg_data(struct mwifiex_private *priv,
|
||||
u32 len;
|
||||
u8 *data = (u8 *)cmd + S_DS_GEN;
|
||||
int ret;
|
||||
struct host_cmd_ds_802_11_cfg_data *pcfg_data;
|
||||
|
||||
if (prop) {
|
||||
len = prop->length;
|
||||
@ -1514,12 +1515,20 @@ static int mwifiex_cmd_cfg_data(struct mwifiex_private *priv,
|
||||
data, len);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
cmd->size = cpu_to_le16(S_DS_GEN + len);
|
||||
mwifiex_dbg(adapter, INFO,
|
||||
"download cfg_data from device tree: %s\n",
|
||||
prop->name);
|
||||
} else if (adapter->cal_data->data && adapter->cal_data->size > 0) {
|
||||
len = mwifiex_parse_cal_cfg((u8 *)adapter->cal_data->data,
|
||||
adapter->cal_data->size, data);
|
||||
adapter->cal_data->size,
|
||||
data + sizeof(*pcfg_data));
|
||||
pcfg_data = &cmd->params.cfg_data;
|
||||
pcfg_data->action = cpu_to_le16(HOST_CMD_ACT_GEN_SET);
|
||||
pcfg_data->type = cpu_to_le16(MWIFIEX_CFG_TYPE_CAL);
|
||||
pcfg_data->data_len = cpu_to_le16(len);
|
||||
cmd->size = cpu_to_le16(S_DS_GEN + sizeof(*pcfg_data) + len);
|
||||
mwifiex_dbg(adapter, INFO,
|
||||
"download cfg_data from config file\n");
|
||||
} else {
|
||||
@ -1527,7 +1536,6 @@ static int mwifiex_cmd_cfg_data(struct mwifiex_private *priv,
|
||||
}
|
||||
|
||||
cmd->command = cpu_to_le16(HostCmd_CMD_CFG_DATA);
|
||||
cmd->size = cpu_to_le16(S_DS_GEN + len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user