summaryrefslogtreecommitdiff
path: root/drivers/dahdi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dahdi')
-rw-r--r--drivers/dahdi/voicebus/voicebus.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/drivers/dahdi/voicebus/voicebus.c b/drivers/dahdi/voicebus/voicebus.c
index f922484..d133006 100644
--- a/drivers/dahdi/voicebus/voicebus.c
+++ b/drivers/dahdi/voicebus/voicebus.c
@@ -717,11 +717,7 @@ vb_submit_rxb(struct voicebus *vb, struct vbb *vbb)
return 0;
}
-/**
- * voicebus_transmit - Queue a buffer on the hardware descriptor ring.
- *
- */
-int voicebus_transmit(struct voicebus *vb, struct vbb *vbb)
+static int __voicebus_transmit(struct voicebus *vb, struct vbb *vbb)
{
struct voicebus_descriptor *d;
struct voicebus_descriptor_list *dl = &vb->txd;
@@ -746,6 +742,17 @@ int voicebus_transmit(struct voicebus *vb, struct vbb *vbb)
atomic_inc(&dl->count);
return 0;
}
+
+/**
+ * voicebus_transmit - Queue a buffer on the hardware descriptor ring.
+ *
+ */
+int voicebus_transmit(struct voicebus *vb, struct vbb *vbb)
+{
+ int res = __voicebus_transmit(vb, vbb);
+ __vb_setctl(vb, 0x0008, 0x00000000);
+ return res;
+}
EXPORT_SYMBOL(voicebus_transmit);
@@ -810,8 +817,9 @@ static void setup_descriptors(struct voicebus *vb)
while (!list_empty(&buffers)) {
vbb = list_entry(buffers.next, struct vbb, entry);
list_del_init(&vbb->entry);
- voicebus_transmit(vb, vbb);
+ __voicebus_transmit(vb, vbb);
}
+ __vb_setctl(vb, 0x0008, 0x00000000);
vb_enable_deferred(vb);
}
@@ -1281,8 +1289,9 @@ static void vb_tasklet_boot(unsigned long data)
while (!list_empty(&buffers)) {
vbb = list_entry(buffers.next, struct vbb, entry);
list_del(&vbb->entry);
- voicebus_transmit(vb, vbb);
+ __voicebus_transmit(vb, vbb);
}
+ __vb_setctl(vb, 0x0008, 0x00000000);
/* If there may still be buffers in the descriptor rings, reschedule
* ourself to run again. We essentially yield here to allow any other
@@ -1356,8 +1365,9 @@ static void vb_tasklet_hx8(unsigned long data)
while (!list_empty(&buffers)) {
vbb = list_entry(buffers.next, struct vbb, entry);
list_del(&vbb->entry);
- voicebus_transmit(vb, vbb);
+ __voicebus_transmit(vb, vbb);
}
+ __vb_setctl(vb, 0x0008, 0x00000000);
/* Print any messages about soft latency bumps after we fix the transmit
* descriptor ring. Otherwise it's possible to take so much time
@@ -1501,8 +1511,9 @@ static void vb_tasklet_normal(unsigned long data)
while (!list_empty(&buffers)) {
vbb = list_entry(buffers.next, struct vbb, entry);
list_del(&vbb->entry);
- voicebus_transmit(vb, vbb);
+ __voicebus_transmit(vb, vbb);
}
+ __vb_setctl(vb, 0x0008, 0x00000000);
/* Print any messages about soft latency bumps after we fix the transmit
* descriptor ring. Otherwise it's possible to take so much time