iwmc3200top: clean up fw_download
authorTomas Winkler <tomas.winkler@intel.com>
Wed, 16 Dec 2009 04:26:24 +0000 (04:26 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 Dec 2009 22:13:31 +0000 (14:13 -0800)
1. removed redundant NULL-pointers checks in iwmct_fw_load
as release_firmware and kfree are NULL pointer friendly
2. remove redundant memset of the parser since the structure
is fully initialized in iwmct_fw_parser_init function

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/misc/iwmc3200top/fw-download.c

index 50d431e469f5e4318d37c6d322cc2fa7e36e8ef4..474be92289045cf3874a8105ad68abc015446722 100644 (file)
@@ -50,8 +50,7 @@ static int iwmct_fw_parser_init(struct iwmct_priv *priv, const u8 *file,
        parser->file = file;
        parser->file_size = file_size;
        parser->cur_pos = 0;
-       parser->buf = NULL;
-
+       parser->entry_point = 0;
        parser->buf = kzalloc(block_size, GFP_KERNEL);
        if (!parser->buf) {
                LOG_ERROR(priv, FW_DOWNLOAD, "kzalloc error\n");
@@ -298,8 +297,6 @@ int iwmct_fw_load(struct iwmct_priv *priv)
        __le32 addr;
        int ret;
 
-       /* clear parser struct */
-       memset(&priv->parser, 0, sizeof(struct iwmct_parser));
 
        /* get the firmware */
        ret = request_firmware(&raw, fw_name, &priv->func->dev);
@@ -317,6 +314,7 @@ int iwmct_fw_load(struct iwmct_priv *priv)
 
        LOG_INFO(priv, FW_DOWNLOAD, "Read firmware '%s'\n", fw_name);
 
+       /* clear parser struct */
        ret = iwmct_fw_parser_init(priv, raw->data, raw->size, priv->trans_len);
        if (ret < 0) {
                LOG_ERROR(priv, FW_DOWNLOAD,
@@ -324,7 +322,6 @@ int iwmct_fw_load(struct iwmct_priv *priv)
                goto exit;
        }
 
-       /* checksum  */
        if (!iwmct_checksum(priv)) {
                LOG_ERROR(priv, FW_DOWNLOAD, "checksum error\n");
                ret = -EINVAL;
@@ -333,23 +330,18 @@ int iwmct_fw_load(struct iwmct_priv *priv)
 
        /* download firmware to device */
        while (iwmct_parse_next_section(priv, &pdata, &len, &addr)) {
-               if (iwmct_download_section(priv, pdata, len, addr)) {
+               ret = iwmct_download_section(priv, pdata, len, addr);
+               if (ret) {
                        LOG_ERROR(priv, FW_DOWNLOAD,
                                  "%s download section failed\n", fw_name);
-                       ret = -EIO;
                        goto exit;
                }
        }
 
-       iwmct_kick_fw(priv, !!(priv->barker & BARKER_DNLOAD_JUMP_MSK));
+       ret = iwmct_kick_fw(priv, !!(priv->barker & BARKER_DNLOAD_JUMP_MSK));
 
 exit:
        kfree(priv->parser.buf);
-
-       if (raw)
-               release_firmware(raw);
-
-       raw = NULL;
-
+       release_firmware(raw);
        return ret;
 }