diff --git a/bes2600/bes2600_factory.c b/bes2600/bes2600_factory.c index 8d60b7c..1cda447 100644 --- a/bes2600/bes2600_factory.c +++ b/bes2600/bes2600_factory.c @@ -31,6 +31,18 @@ static DEFINE_MUTEX(factory_lock); +/* + * struct device * for request_firmware() context. Set once at SDIO + * probe via bes2600_factory_set_dev(). NULL is tolerated (falls back + * to the udev-less firmware-class path) but loses per-device logging. + */ +static struct device *bes2600_factory_dev; + +void bes2600_factory_set_dev(struct device *dev) +{ + bes2600_factory_dev = dev; +} + /* * It is only used for temporary storage. * Every time get the factory, it will read from the @@ -148,7 +160,7 @@ static int factory_section_read_file(char *path, void *buffer) bes_devel("requesting firmware-class %s\n", path); - ret = request_firmware(&fw, path, NULL); + ret = request_firmware(&fw, path, bes2600_factory_dev); if (ret) { bes_devel("BES2600: request_firmware(%s) failed: %d\n", path, ret); return -1; diff --git a/bes2600/bes2600_factory.h b/bes2600/bes2600_factory.h index 3835b0d..7dbe9f8 100644 --- a/bes2600/bes2600_factory.h +++ b/bes2600/bes2600_factory.h @@ -199,6 +199,9 @@ enum factory_cali_status { /* just calibrate 11n, other protocols are automatically mapped */ #define WIFI_RF_11N_MODE 0x15 +/* set the struct device * used for request_firmware() context */ +void bes2600_factory_set_dev(struct device *dev); + /* read wifi & bt factory cali value*/ u8* bes2600_get_factory_cali_data(u8 *file_buffer, u32 *data_len, char *path); void factory_little_endian_cvrt(u8 *data); diff --git a/bes2600/bes2600_sdio.c b/bes2600/bes2600_sdio.c index 13d4ff1..f172d53 100644 --- a/bes2600/bes2600_sdio.c +++ b/bes2600/bes2600_sdio.c @@ -30,6 +30,7 @@ #include "bes2600.h" #include "sbus.h" #include "bes2600_plat.h" +#include "bes2600_factory.h" #include "hwio.h" #include "bes_chardev.h" #include "bes_log.h" @@ -1834,6 +1835,9 @@ static int bes2600_sdio_probe(struct sdio_func *func, if (ret) goto err; + /* wire struct device into factory.c for request_firmware() context */ + bes2600_factory_set_dev(dev); + self->pdata = bes2600_get_platform_data(); self->func = func; self->dev = &func->dev;