diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index e79f795..73d974a 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -1380,7 +1380,6 @@
 	uchar sdtr_period_offset[ASC_MAX_TID + 1];
 	ushort pci_slot_info;
 	uchar adapter_info[6];
-	struct device *dev;
 } ASC_DVC_CFG;
 
 #define ASC_DEF_DVC_CNTL       0xFFFF
@@ -1831,7 +1830,6 @@
 static void AscMemWordCopyPtrFromLram(PortAddr, ushort, uchar *, int);
 static ushort AscInitAscDvcVar(ASC_DVC_VAR *);
 static ushort AscInitFromEEP(ASC_DVC_VAR *);
-static ushort AscInitFromAscDvcVar(ASC_DVC_VAR *);
 static ushort AscInitMicroCodeVar(ASC_DVC_VAR *);
 static int AscTestExternalLram(ASC_DVC_VAR *);
 static uchar AscMsgOutSDTR(ASC_DVC_VAR *, uchar, uchar);
@@ -2827,7 +2825,6 @@
 	ushort serial1;		/* EEPROM serial number word 1 */
 	ushort serial2;		/* EEPROM serial number word 2 */
 	ushort serial3;		/* EEPROM serial number word 3 */
-	struct device *dev;	/* pointer to the pci dev structure for this board */
 } ADV_DVC_CFG;
 
 struct adv_dvc_var;
@@ -3000,7 +2997,6 @@
  */
 static int AdvExeScsiQueue(ADV_DVC_VAR *, ADV_SCSI_REQ_Q *);
 static int AdvISR(ADV_DVC_VAR *);
-static int AdvInitGetConfig(ADV_DVC_VAR *);
 static int AdvInitAsc3550Driver(ADV_DVC_VAR *);
 static int AdvInitAsc38C0800Driver(ADV_DVC_VAR *);
 static int AdvInitAsc38C1600Driver(ADV_DVC_VAR *);
@@ -3597,6 +3593,7 @@
  * field. It is guaranteed to be allocated from DMA-able memory.
  */
 typedef struct asc_board {
+	struct device *dev;
 	int id;			/* Board Id */
 	uint flags;		/* Board flags */
 	union {
@@ -4672,7 +4669,6 @@
 	ASC_DBG(2, "asc_scsi_done_list: begin\n");
 	while (scp != NULL) {
 		asc_board_t *boardp;
-		struct device *dev;
 
 		ASC_DBG1(3, "asc_scsi_done_list: scp 0x%lx\n", (ulong)scp);
 		tscp = REQPNEXT(scp);
@@ -4680,17 +4676,12 @@
 
 		boardp = ASC_BOARDP(scp->device->host);
 
-		if (ASC_NARROW_BOARD(boardp))
-			dev = boardp->dvc_cfg.asc_dvc_cfg.dev;
-		else
-			dev = boardp->dvc_cfg.adv_dvc_cfg.dev;
-
 		if (scp->use_sg)
-			dma_unmap_sg(dev,
+			dma_unmap_sg(boardp->dev,
 				     (struct scatterlist *)scp->request_buffer,
 				     scp->use_sg, scp->sc_data_direction);
 		else if (scp->request_bufflen)
-			dma_unmap_single(dev, scp->SCp.dma_handle,
+			dma_unmap_single(boardp->dev, scp->SCp.dma_handle,
 					 scp->request_bufflen,
 					 scp->sc_data_direction);
 
@@ -4929,8 +4920,6 @@
  */
 static int asc_build_req(asc_board_t *boardp, struct scsi_cmnd *scp)
 {
-	struct device *dev = boardp->dvc_cfg.asc_dvc_cfg.dev;
-
 	/*
 	 * Mutually exclusive access is required to 'asc_scsi_q' and
 	 * 'asc_sg_head' until after the request is started.
@@ -4994,7 +4983,7 @@
 		 */
 		ASC_STATS(scp->device->host, cont_cnt);
 		scp->SCp.dma_handle = scp->request_bufflen ?
-		    dma_map_single(dev, scp->request_buffer,
+		    dma_map_single(boardp->dev, scp->request_buffer,
 				   scp->request_bufflen,
 				   scp->sc_data_direction) : 0;
 		asc_scsi_q.q1.data_addr = cpu_to_le32(scp->SCp.dma_handle);
@@ -5012,15 +5001,14 @@
 		struct scatterlist *slp;
 
 		slp = (struct scatterlist *)scp->request_buffer;
-		use_sg =
-		    dma_map_sg(dev, slp, scp->use_sg, scp->sc_data_direction);
+		use_sg = dma_map_sg(boardp->dev, slp, scp->use_sg,
+				    scp->sc_data_direction);
 
 		if (use_sg > scp->device->host->sg_tablesize) {
-			ASC_PRINT3
-			    ("asc_build_req: board %d: use_sg %d > sg_tablesize %d\n",
-			     boardp->id, use_sg,
-			     scp->device->host->sg_tablesize);
-			dma_unmap_sg(dev, slp, scp->use_sg,
+			ASC_PRINT3("asc_build_req: board %d: use_sg %d > "
+				   "sg_tablesize %d\n", boardp->id, use_sg,
+				   scp->device->host->sg_tablesize);
+			dma_unmap_sg(boardp->dev, slp, scp->use_sg,
 				     scp->sc_data_direction);
 			scp->result = HOST_BYTE(DID_ERROR);
 			asc_enqueue(&boardp->done, scp, ASC_BACK);
@@ -5081,7 +5069,6 @@
 	ADV_SCSI_REQ_Q *scsiqp;
 	int i;
 	int ret;
-	struct device *dev = boardp->dvc_cfg.adv_dvc_cfg.dev;
 
 	/*
 	 * Allocate an adv_req_t structure from the board to execute
@@ -5168,7 +5155,7 @@
 		if (scp->request_bufflen) {
 			scsiqp->vdata_addr = scp->request_buffer;
 			scp->SCp.dma_handle =
-			    dma_map_single(dev, scp->request_buffer,
+			    dma_map_single(boardp->dev, scp->request_buffer,
 					   scp->request_bufflen,
 					   scp->sc_data_direction);
 		} else {
@@ -5189,22 +5176,21 @@
 		int use_sg;
 
 		slp = (struct scatterlist *)scp->request_buffer;
-		use_sg =
-		    dma_map_sg(dev, slp, scp->use_sg, scp->sc_data_direction);
+		use_sg = dma_map_sg(boardp->dev, slp, scp->use_sg,
+				    scp->sc_data_direction);
 
 		if (use_sg > ADV_MAX_SG_LIST) {
-			ASC_PRINT3
-			    ("adv_build_req: board %d: use_sg %d > ADV_MAX_SG_LIST %d\n",
-			     boardp->id, use_sg,
-			     scp->device->host->sg_tablesize);
-			dma_unmap_sg(dev, slp, scp->use_sg,
+			ASC_PRINT3("adv_build_req: board %d: use_sg %d > "
+				   "ADV_MAX_SG_LIST %d\n", boardp->id, use_sg,
+				   scp->device->host->sg_tablesize);
+			dma_unmap_sg(boardp->dev, slp, scp->use_sg,
 				     scp->sc_data_direction);
 			scp->result = HOST_BYTE(DID_ERROR);
 			asc_enqueue(&boardp->done, scp, ASC_BACK);
 
 			/*
-			 * Free the 'adv_req_t' structure by adding it back to the
-			 * board free list.
+			 * Free the 'adv_req_t' structure by adding it back
+			 * to the board free list.
 			 */
 			reqp->next_reqp = boardp->adv_reqp;
 			boardp->adv_reqp = reqp;
@@ -5212,12 +5198,11 @@
 			return ASC_ERROR;
 		}
 
-		if ((ret =
-		     adv_get_sglist(boardp, reqp, scp,
-				    use_sg)) != ADV_SUCCESS) {
+		ret = adv_get_sglist(boardp, reqp, scp, use_sg);
+		if (ret != ADV_SUCCESS) {
 			/*
-			 * Free the adv_req_t structure by adding it back to the
-			 * board free list.
+			 * Free the adv_req_t structure by adding it back to
+			 * the board free list.
 			 */
 			reqp->next_reqp = boardp->adv_reqp;
 			boardp->adv_reqp = reqp;
@@ -10219,30 +10204,21 @@
 	return warn_code;
 }
 
-static ushort __devinit AscInitSetConfig(ASC_DVC_VAR *asc_dvc)
+static unsigned short __devinit
+AscInitSetConfig(struct pci_dev *pdev, ASC_DVC_VAR *asc_dvc)
 {
-	ushort warn_code = 0;
+	PortAddr iop_base = asc_dvc->iop_base;
+	unsigned short cfg_msw;
+	unsigned short warn_code = 0;
 
 	asc_dvc->init_state |= ASC_INIT_STATE_BEG_SET_CFG;
 	if (asc_dvc->err_code != 0)
-		return (UW_ERR);
-	if (AscFindSignature(asc_dvc->iop_base)) {
-		warn_code |= AscInitFromAscDvcVar(asc_dvc);
-		asc_dvc->init_state |= ASC_INIT_STATE_END_SET_CFG;
-	} else {
+		return UW_ERR;
+	if (!AscFindSignature(asc_dvc->iop_base)) {
 		asc_dvc->err_code = ASC_IERR_BAD_SIGNATURE;
+		return 0;
 	}
-	return (warn_code);
-}
 
-static ushort __devinit AscInitFromAscDvcVar(ASC_DVC_VAR *asc_dvc)
-{
-	PortAddr iop_base;
-	ushort cfg_msw;
-	ushort warn_code;
-
-	iop_base = asc_dvc->iop_base;
-	warn_code = 0;
 	cfg_msw = AscGetChipCfgMsw(iop_base);
 	if ((cfg_msw & ASC_CFG_MSW_CLR_MASK) != 0) {
 		cfg_msw &= (~(ASC_CFG_MSW_CLR_MASK));
@@ -10265,7 +10241,6 @@
 	}
 #ifdef CONFIG_PCI
 	if (asc_dvc->bus_type & ASC_IS_PCI) {
-		struct pci_dev *pdev = to_pci_dev(asc_dvc->cfg->dev);
 		cfg_msw &= 0xFFC0;
 		AscSetChipCfgMsw(iop_base, cfg_msw);
 		if ((asc_dvc->bus_type & ASC_IS_PCI_ULTRA) == ASC_IS_PCI_ULTRA) {
@@ -10295,7 +10270,9 @@
 		AscSetIsaDmaSpeed(iop_base, asc_dvc->cfg->isa_dma_speed);
 	}
 #endif /* CONFIG_ISA */
-	return (warn_code);
+
+	asc_dvc->init_state |= ASC_INIT_STATE_END_SET_CFG;
+	return warn_code;
 }
 
 static ushort AscInitAsc1000Driver(ASC_DVC_VAR *asc_dvc)
@@ -13599,11 +13576,11 @@
  * For a non-fatal error return a warning code. If there are no warnings
  * then 0 is returned.
  */
-static int __devinit AdvInitGetConfig(ADV_DVC_VAR *asc_dvc)
+static int __devinit
+AdvInitGetConfig(struct pci_dev *pdev, ADV_DVC_VAR *asc_dvc)
 {
 	unsigned short warn_code = 0;
 	AdvPortAddr iop_base = asc_dvc->iop_base;
-	struct pci_dev *pdev = to_pci_dev(asc_dvc->cfg->dev);
 	u16 cmd;
 	int status;
 
@@ -17094,6 +17071,7 @@
 	memset(boardp, 0, sizeof(asc_board_t));
 	boardp->id = asc_board_count++;
 	spin_lock_init(&boardp->lock);
+	boardp->dev = dev;
 
 	/*
 	 * Handle both narrow and wide boards.
@@ -17180,7 +17158,6 @@
 #endif /* CONFIG_PROC_FS */
 
 	if (ASC_NARROW_BOARD(boardp)) {
-		asc_dvc_varp->cfg->dev = dev;
 		/*
 		 * Set the board bus type and PCI IRQ before
 		 * calling AscInitGetConfig().
@@ -17220,7 +17197,6 @@
 			break;
 		}
 	} else {
-		adv_dvc_varp->cfg->dev = dev;
 		/*
 		 * For Wide boards set PCI information before calling
 		 * AdvInitGetConfig().
@@ -17289,7 +17265,9 @@
 		}
 	} else {
 		ASC_DBG(2, "advansys_board_found: AdvInitGetConfig()\n");
-		if ((ret = AdvInitGetConfig(adv_dvc_varp)) != 0) {
+
+		ret = AdvInitGetConfig(pdev, adv_dvc_varp);
+		if (ret != 0) {
 			ASC_PRINT2
 			    ("AdvInitGetConfig: board %d: warning: 0x%x\n",
 			     boardp->id, ret);
@@ -17345,7 +17323,7 @@
 		 * Modify board configuration.
 		 */
 		ASC_DBG(2, "advansys_board_found: AscInitSetConfig()\n");
-		switch (ret = AscInitSetConfig(asc_dvc_varp)) {
+		switch (ret = AscInitSetConfig(pdev, asc_dvc_varp)) {
 		case 0:	/* No error. */
 			break;
 		case ASC_WARN_IO_PORT_ROTATE:
