aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wimax/i2400m/fw.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/drivers/net/wimax/i2400m/fw.c b/drivers/net/wimax/i2400m/fw.c
index 798564eb0e9..55fe011a963 100644
--- a/drivers/net/wimax/i2400m/fw.c
+++ b/drivers/net/wimax/i2400m/fw.c
@@ -1288,7 +1288,7 @@ error_dev_rebooted:
*/
int i2400m_dev_bootstrap(struct i2400m *i2400m, enum i2400m_bri flags)
{
- int ret = 0, itr = 0;
+ int ret, itr;
struct device *dev = i2400m_dev(i2400m);
const struct firmware *fw;
const struct i2400m_bcf_hdr *bcf; /* Firmware data */
@@ -1297,32 +1297,31 @@ int i2400m_dev_bootstrap(struct i2400m *i2400m, enum i2400m_bri flags)
d_fnstart(5, dev, "(i2400m %p)\n", i2400m);
/* Load firmware files to memory. */
- itr = 0;
- while(1) {
+ for (itr = 0, bcf = NULL, ret = -ENOENT; ; itr++) {
fw_name = i2400m->bus_fw_names[itr];
if (fw_name == NULL) {
dev_err(dev, "Could not find a usable firmware image\n");
ret = -ENOENT;
- goto error_no_fw;
+ break;
}
+ d_printf(1, dev, "trying firmware %s (%d)\n", fw_name, itr);
ret = request_firmware(&fw, fw_name, dev);
- if (ret == 0)
- break; /* got it */
- if (ret < 0)
+ if (ret < 0) {
dev_err(dev, "fw %s: cannot load file: %d\n",
fw_name, ret);
- itr++;
+ continue;
+ }
+ bcf = (void *) fw->data;
+ i2400m->fw_name = fw_name;
+ ret = i2400m_fw_check(i2400m, bcf, fw->size);
+ if (ret >= 0) {
+ ret = i2400m_fw_dnload(i2400m, bcf, fw->size, flags);
+ if (ret >= 0)
+ break;
+ } else
+ dev_err(dev, "%s: cannot use, skipping\n", fw_name);
+ release_firmware(fw);
}
-
- bcf = (void *) fw->data;
- i2400m->fw_name = fw_name;
- ret = i2400m_fw_check(i2400m, bcf, fw->size);
- if (ret < 0)
- goto error_fw_bad;
- ret = i2400m_fw_dnload(i2400m, bcf, fw->size, flags);
-error_fw_bad:
- release_firmware(fw);
-error_no_fw:
d_fnend(5, dev, "(i2400m %p) = %d\n", i2400m, ret);
return ret;
}