staging: dgap: make dgap_found_board() return a brd pointer
authorDaeseok Youn <daeseok.youn@gmail.com>
Fri, 20 Jun 2014 09:21:50 +0000 (18:21 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Jun 2014 15:28:02 +0000 (08:28 -0700)
Make dgap_found_board() return a brd pointer and that brd pointer
assign to dgap_board[] in the end of the dgap_init_one().

Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/dgap/dgap.c

index 5c8e62201c8d9903473041ff8c5cd63b559ca4cd..d4f80afe947d00ba43d5d91531507b86025595fc 100644 (file)
@@ -70,7 +70,8 @@ MODULE_SUPPORTED_DEVICE("dgap");
 
 static int dgap_start(void);
 static void dgap_init_globals(void);
-static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum);
+static struct board_t *dgap_found_board(struct pci_dev *pdev, int id,
+                                       int boardnum);
 static void dgap_cleanup_board(struct board_t *brd);
 static void dgap_poll_handler(ulong dummy);
 static int dgap_init_pci(void);
@@ -582,11 +583,10 @@ static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (rc)
                return -EIO;
 
-       rc = dgap_found_board(pdev, ent->driver_data, dgap_numboards);
-       if (rc)
-               return rc;
+       brd = dgap_found_board(pdev, ent->driver_data, dgap_numboards);
+       if (IS_ERR(brd))
+               return PTR_ERR(brd);
 
-       brd = dgap_board[dgap_numboards++];
        rc = dgap_firmware_load(pdev, ent->driver_data, brd);
        if (rc)
                goto cleanup_brd;
@@ -617,6 +617,8 @@ static int dgap_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        brd->state = BOARD_READY;
        brd->dpastatus = BD_RUNNING;
 
+       dgap_board[dgap_numboards++] = brd;
+
        return 0;
 
 tty_free:
@@ -630,7 +632,7 @@ free_flipbuf:
 cleanup_brd:
        dgap_release_remap(brd);
        kfree(brd);
-       dgap_board[--dgap_numboards] = NULL;
+
        return rc;
 }
 
@@ -717,7 +719,8 @@ static void dgap_cleanup_board(struct board_t *brd)
  *
  * A board has been found, init it.
  */
-static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum)
+static struct board_t *dgap_found_board(struct pci_dev *pdev, int id,
+                                       int boardnum)
 {
        struct board_t *brd;
        unsigned int pci_irq;
@@ -727,9 +730,7 @@ static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum)
        /* get the board structure and prep it */
        brd = kzalloc(sizeof(struct board_t), GFP_KERNEL);
        if (!brd)
-               return -ENOMEM;
-
-       dgap_board[boardnum] = brd;
+               return ERR_PTR(-ENOMEM);
 
        /* store the info for the board we've found */
        brd->magic = DGAP_BOARD_MAGIC;
@@ -828,13 +829,12 @@ static int dgap_found_board(struct pci_dev *pdev, int id, int boardnum)
        pr_info("dgap: board %d: %s (rev %d), irq %ld\n",
                boardnum, brd->name, brd->rev, brd->irq);
 
-       return 0;
+       return brd;
 
 free_brd:
        kfree(brd);
-       dgap_board[boardnum] = NULL;
 
-       return ret;
+       return ERR_PTR(ret);
 }