[lkml]   [2017]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH v2 6/6] wl1251: Use request_firmware_prefer_user() for loading NVS calibration data
    NVS calibration data for wl1251 are model specific. Every one device with
    wl1251 chip has different and calibrated in factory.

    Not all wl1251 chips have own EEPROM where are calibration data stored. And
    in that case there is no "standard" place. Every device has stored them on
    different place (some in rootfs file, some in dedicated nand partition,
    some in another proprietary structure).

    Kernel wl1251 driver cannot support every one different storage decided by
    device manufacture so it will use request_firmware_prefer_user() call for
    loading NVS calibration data and userspace helper will be responsible to
    prepare correct data.

    In case userspace helper fails request_firmware_prefer_user() still try to
    load data file directly from VFS as fallback mechanism.

    On Nokia N900 device, which has wl1251 chip, NVS calibration data are
    stored in CAL nand partition. CAL is proprietary Nokia key/value format for
    nand devices.

    With this patch it is finally possible to load correct model specific NVS
    calibration data for Nokia N900.

    Userspace tool for reading NVS calibration data on Nokia N900 is available
    in git repository at:

    Signed-off-by: Pali Rohár <>
    drivers/net/wireless/ti/wl1251/Kconfig | 1 +
    drivers/net/wireless/ti/wl1251/main.c | 2 +-
    2 files changed, 2 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/wireless/ti/wl1251/Kconfig b/drivers/net/wireless/ti/wl1251/Kconfig
    index 7142ccf..affe154 100644
    --- a/drivers/net/wireless/ti/wl1251/Kconfig
    +++ b/drivers/net/wireless/ti/wl1251/Kconfig
    @@ -2,6 +2,7 @@ config WL1251
    tristate "TI wl1251 driver support"
    depends on MAC80211
    select FW_LOADER
    select CRC7
    This will enable TI wl1251 driver support. The drivers make
    diff --git a/drivers/net/wireless/ti/wl1251/main.c b/drivers/net/wireless/ti/wl1251/main.c
    index 1f423be..e9d232c 100644
    --- a/drivers/net/wireless/ti/wl1251/main.c
    +++ b/drivers/net/wireless/ti/wl1251/main.c
    @@ -108,7 +108,7 @@ static int wl1251_fetch_nvs(struct wl1251 *wl)
    struct device *dev = wiphy_dev(wl->hw->wiphy);
    int ret;

    - ret = request_firmware(&fw, WL1251_NVS_NAME, dev);
    + ret = request_firmware_prefer_user(&fw, WL1251_NVS_NAME, dev);

    if (ret < 0) {
    wl1251_error("could not get nvs file: %d", ret);
     \ /
      Last update: 2017-11-10 00:39    [W:2.882 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site