diff options
author | Shaun Ruffell <sruffell@digium.com> | 2010-02-24 19:19:07 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2010-02-24 19:19:07 +0000 |
commit | 139e84c0e994542300f7634715c63b5b0f09a8f3 (patch) | |
tree | e59059bfe07162d082c14a139476297040a13428 | |
parent | 90200463bfcb7a8199a337116d8fd92bac4cff59 (diff) |
Merged revisions 8080 via svnmerge from
https://origsvn.digium.com/svn/dahdi/linux/trunk
........
r8080 | sruffell | 2010-02-24 13:13:05 -0600 (Wed, 24 Feb 2010) | 4 lines
wctdm24xxp, wcte12xp: Abort attach if interface fails to come out of reset.
If the reset bit never clears, then just assume we cannot talk to the board and
error on the attach. DAHDI-515.
........
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.2@8086 a0bf4364-ded3-4de4-8d8a-66a801d63aff
-rw-r--r-- | drivers/dahdi/voicebus/voicebus.c | 29 | ||||
-rw-r--r-- | drivers/dahdi/wcte12xp/base.c | 1 |
2 files changed, 18 insertions, 12 deletions
diff --git a/drivers/dahdi/voicebus/voicebus.c b/drivers/dahdi/voicebus/voicebus.c index b77ccdb..dfe59be 100644 --- a/drivers/dahdi/voicebus/voicebus.c +++ b/drivers/dahdi/voicebus/voicebus.c @@ -738,8 +738,8 @@ vb_reset_interface(struct voicebus *vb) } while ((reg & 0x00000001) && time_before(jiffies, timeout)); if (reg & 0x00000001) { - dev_warn(&vb->pdev->dev, "Hardware did not come out of reset " - "within 100ms!"); + dev_warn(&vb->pdev->dev, "Did not come out of reset " + "within 100ms\n"); return -EIO; } @@ -1801,14 +1801,6 @@ voicebus_init(struct pci_dev *pdev, u32 framesize, const char *board_name, vb->idle_vbb = dma_alloc_coherent(&vb->pdev->dev, vb->framesize, &vb->idle_vbb_dma_addr, GFP_KERNEL); - retval = vb_initialize_tx_descriptors(vb); - if (retval) - goto cleanup; - - retval = vb_initialize_rx_descriptors(vb); - if (retval) - goto cleanup; - /* ---------------------------------------------------------------- Configure the hardware interface. ---------------------------------------------------------------- */ @@ -1821,6 +1813,20 @@ voicebus_init(struct pci_dev *pdev, u32 framesize, const char *board_name, pci_set_master(pdev); vb_enable_io_access(vb); + if (vb_reset_interface(vb)) { + retval = -EIO; + dev_warn(&vb->pdev->dev, "Failed reset.\n"); + goto cleanup; + } + + retval = vb_initialize_tx_descriptors(vb); + if (retval) + goto cleanup; + + retval = vb_initialize_rx_descriptors(vb); + if (retval) + goto cleanup; + #if VOICEBUS_DEFERRED != TIMER retval = request_irq(pdev->irq, vb_isr, DAHDI_IRQ_SHARED, board_name, vb); @@ -1865,7 +1871,8 @@ cleanup: pci_disable_device(vb->pdev); kfree(vb); - WARN_ON(0 == retval); + if (0 == retval) + retval = -EIO; return retval; } EXPORT_SYMBOL(voicebus_init); diff --git a/drivers/dahdi/wcte12xp/base.c b/drivers/dahdi/wcte12xp/base.c index 2438fb3..4d9cb4d 100644 --- a/drivers/dahdi/wcte12xp/base.c +++ b/drivers/dahdi/wcte12xp/base.c @@ -1807,7 +1807,6 @@ static int __devinit te12xp_init_one(struct pci_dev *pdev, const struct pci_devi if ((res = voicebus_init(pdev, SFRAME_SIZE, wc->name, t1_handle_receive, t1_handle_transmit, wc, debug, &wc->vb))) { - WARN_ON(1); free_wc(wc); ifaces[index] = NULL; return res; |