aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/isdn/mISDN/dsp_core.c
diff options
context:
space:
mode:
authorAndreas Eversberg <andreas@eversberg.eu>2009-05-22 07:04:49 -0400
committerDavid S. Miller <davem@davemloft.net>2009-05-25 03:51:34 -0400
commitbc138ec4ac58bb83e2d9d5c12328d5452294c1f0 (patch)
tree059a02dfee5e813bdf21131aaa7c15085dd7f768 /drivers/isdn/mISDN/dsp_core.c
parentb5df5a5c3bf0f809d854ad7156ce26b709b533c0 (diff)
mISDN: Hardware acceleration is now possible in conjunction with audio recording
Audio recording requires software audio processing. Both hardware and software processing is simultaniously possible now. Signed-off-by: Andreas Eversberg <andreas@eversberg.eu> Signed-off-by: Karsten Keil <keil@b1-systems.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn/mISDN/dsp_core.c')
-rw-r--r--drivers/isdn/mISDN/dsp_core.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/isdn/mISDN/dsp_core.c b/drivers/isdn/mISDN/dsp_core.c
index 6b4939854306..a0e0af81eb2e 100644
--- a/drivers/isdn/mISDN/dsp_core.c
+++ b/drivers/isdn/mISDN/dsp_core.c
@@ -203,13 +203,13 @@ dsp_rx_off_member(struct dsp *dsp)
203 else if (dsp->dtmf.software) 203 else if (dsp->dtmf.software)
204 rx_off = 0; 204 rx_off = 0;
205 /* echo in software */ 205 /* echo in software */
206 else if (dsp->echo && dsp->pcm_slot_tx < 0) 206 else if (dsp->echo.software)
207 rx_off = 0; 207 rx_off = 0;
208 /* bridge in software */ 208 /* bridge in software */
209 else if (dsp->conf) { 209 else if (dsp->conf && dsp->conf->software)
210 if (dsp->conf->software) 210 rx_off = 0;
211 rx_off = 0; 211 /* data is not required by user space and not required
212 } 212 * for echo dtmf detection, soft-echo, soft-bridging */
213 213
214 if (rx_off == dsp->rx_is_off) 214 if (rx_off == dsp->rx_is_off)
215 return; 215 return;
@@ -415,7 +415,7 @@ tone_off:
415 dsp_rx_off(dsp); 415 dsp_rx_off(dsp);
416 break; 416 break;
417 case DSP_ECHO_ON: /* enable echo */ 417 case DSP_ECHO_ON: /* enable echo */
418 dsp->echo = 1; /* soft echo */ 418 dsp->echo.software = 1; /* soft echo */
419 if (dsp_debug & DEBUG_DSP_CORE) 419 if (dsp_debug & DEBUG_DSP_CORE)
420 printk(KERN_DEBUG "%s: enable cmx-echo\n", __func__); 420 printk(KERN_DEBUG "%s: enable cmx-echo\n", __func__);
421 dsp_cmx_hardware(dsp->conf, dsp); 421 dsp_cmx_hardware(dsp->conf, dsp);
@@ -424,7 +424,8 @@ tone_off:
424 dsp_cmx_debug(dsp); 424 dsp_cmx_debug(dsp);
425 break; 425 break;
426 case DSP_ECHO_OFF: /* disable echo */ 426 case DSP_ECHO_OFF: /* disable echo */
427 dsp->echo = 0; 427 dsp->echo.software = 0;
428 dsp->echo.hardware = 0;
428 if (dsp_debug & DEBUG_DSP_CORE) 429 if (dsp_debug & DEBUG_DSP_CORE)
429 printk(KERN_DEBUG "%s: disable cmx-echo\n", __func__); 430 printk(KERN_DEBUG "%s: disable cmx-echo\n", __func__);
430 dsp_cmx_hardware(dsp->conf, dsp); 431 dsp_cmx_hardware(dsp->conf, dsp);
@@ -722,7 +723,7 @@ dsp_function(struct mISDNchannel *ch, struct sk_buff *skb)
722 skb->len, (dsp_options&DSP_OPT_ULAW)?1:0); 723 skb->len, (dsp_options&DSP_OPT_ULAW)?1:0);
723 } 724 }
724 /* we need to process receive data if software */ 725 /* we need to process receive data if software */
725 if (dsp->pcm_slot_tx < 0 && dsp->pcm_slot_rx < 0) { 726 if (dsp->conf && dsp->conf->software) {
726 /* process data from card at cmx */ 727 /* process data from card at cmx */
727 dsp_cmx_receive(dsp, skb); 728 dsp_cmx_receive(dsp, skb);
728 } 729 }