summaryrefslogtreecommitdiff
path: root/drivers/dahdi/wcb4xxp
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2010-07-26 00:30:41 +0000
committerShaun Ruffell <sruffell@digium.com>2010-07-26 00:30:41 +0000
commit9e8885a50b7923c9a9b7456bbf2ecc61923c8734 (patch)
tree57dc2f7e5a6c358c0a13eb4a8d0f7856b5e8077a /drivers/dahdi/wcb4xxp
parent5fd3fdc1cea7af8b1c46bbf2a5edd0c6fe2d3e54 (diff)
dahdi: Move the callbacks in dahdi_span into its own structure.
Part of preparation for adding additional callbacks to allow board drivers to advertise and support gathering pre-echocan data from hardware echocans. git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@8985 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/wcb4xxp')
-rw-r--r--drivers/dahdi/wcb4xxp/base.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/drivers/dahdi/wcb4xxp/base.c b/drivers/dahdi/wcb4xxp/base.c
index a4ccaf4..fd916dc 100644
--- a/drivers/dahdi/wcb4xxp/base.c
+++ b/drivers/dahdi/wcb4xxp/base.c
@@ -143,8 +143,6 @@ static struct devtype hfc4s_EV = {"CCD HFC-4S Eval. Board", .ports = 4,
#define CARD_HAS_EC(card) ((card)->card_type == B410P)
-static int echocan_create(struct dahdi_chan *chan, struct dahdi_echocanparams *ecp,
- struct dahdi_echocanparam *p, struct dahdi_echocan_state **ec);
static void echocan_free(struct dahdi_chan *chan, struct dahdi_echocan_state *ec);
static const struct dahdi_echocan_features my_ec_features = {
@@ -2085,12 +2083,17 @@ static void b4xxp_update_leds(struct b4xxp *b4)
}
}
-static int echocan_create(struct dahdi_chan *chan, struct dahdi_echocanparams *ecp,
- struct dahdi_echocanparam *p, struct dahdi_echocan_state **ec)
+static int b4xxp_echocan_create(struct dahdi_chan *chan,
+ struct dahdi_echocanparams *ecp,
+ struct dahdi_echocanparam *p,
+ struct dahdi_echocan_state **ec)
{
struct b4xxp_span *bspan = container_of(chan->span, struct b4xxp_span, span);
int channel;
+ if (!vpmsupport || !CARD_HAS_EC(bspan->parent))
+ return -ENODEV;
+
if (chan->chanpos == 3) {
printk(KERN_WARNING "Cannot enable echo canceller on D channel of span %d; failing request\n", chan->span->offset);
return -EINVAL;
@@ -2309,6 +2312,18 @@ static void b4xxp_hdlc_hard_xmit(struct dahdi_chan *chan)
/* internal functions, not specific to the hardware or DAHDI */
+static const struct dahdi_span_ops b4xxp_span_ops = {
+ .spanconfig = b4xxp_spanconfig,
+ .chanconfig = b4xxp_chanconfig,
+ .startup = b4xxp_startup,
+ .shutdown = b4xxp_shutdown,
+ .open = b4xxp_open,
+ .close = b4xxp_close,
+ .ioctl = b4xxp_ioctl,
+ .hdlc_hard_xmit = b4xxp_hdlc_hard_xmit,
+ .echocan_create = b4xxp_echocan_create,
+};
+
/* initialize the span/chan structures. Doesn't touch hardware, although the callbacks might. */
static void init_spans(struct b4xxp *b4)
{
@@ -2346,17 +2361,7 @@ static void init_spans(struct b4xxp *b4)
b4->pdev->bus->number, PCI_SLOT(b4->pdev->devfn) + 1);
bspan->span.owner = THIS_MODULE;
- bspan->span.spanconfig = b4xxp_spanconfig;
- bspan->span.chanconfig = b4xxp_chanconfig;
- bspan->span.startup = b4xxp_startup;
- bspan->span.shutdown = b4xxp_shutdown;
- bspan->span.open = b4xxp_open;
- bspan->span.close = b4xxp_close;
- bspan->span.ioctl = b4xxp_ioctl;
- bspan->span.hdlc_hard_xmit = b4xxp_hdlc_hard_xmit;
- if (vpmsupport && CARD_HAS_EC(b4))
- bspan->span.echocan_create = echocan_create;
-
+ bspan->span.ops = &b4xxp_span_ops;
/* HDLC stuff */
bspan->sigchan = NULL;
bspan->sigactive = 0;