Index: dahdi-linux-2.4.0/drivers/dahdi/zaphfc.c
===================================================================
--- dahdi-linux-2.4.0.orig/drivers/dahdi/zaphfc.c	2010-10-26 14:41:21.000000000 +0300
+++ dahdi-linux-2.4.0/drivers/dahdi/zaphfc.c	2010-10-26 14:50:14.000000000 +0300
@@ -617,7 +617,7 @@
 }
 
 static int zthfc_startup(struct dahdi_span *span) {
-    struct dahdi_hfc *zthfc = span->pvt;
+    struct dahdi_hfc *zthfc = container_of(span, struct dahdi_hfc, span);
     struct hfc_card *hfctmp = zthfc->card;
     int alreadyrunning;
     
@@ -663,6 +663,19 @@
     return 0;
 }
 
+static const struct dahdi_span_ops zaphfc_span_ops = {
+    .owner = THIS_MODULE,
+    .spanconfig = zthfc_spanconfig,
+    .chanconfig = zthfc_chanconfig,
+    .startup = zthfc_startup,
+    .shutdown = zthfc_shutdown,
+    .maint = zthfc_maint,
+    .rbsbits = zthfc_rbsbits,
+    .open = zthfc_open,
+    .close = zthfc_close,
+    .ioctl = zthfc_ioctl,
+};
+
 static int zthfc_initialize(struct dahdi_hfc *zthfc) {
     struct hfc_card *hfctmp = zthfc->card;
     int i;
@@ -676,15 +689,7 @@
 	sprintf(zthfc->span.desc, "HFC-S PCI A ISDN card %d [TE]", hfc_dev_count + 1);
     }
 
-    zthfc->span.spanconfig = zthfc_spanconfig;
-    zthfc->span.chanconfig = zthfc_chanconfig;
-    zthfc->span.startup = zthfc_startup;
-    zthfc->span.shutdown = zthfc_shutdown;
-    zthfc->span.maint = zthfc_maint;
-    zthfc->span.rbsbits = zthfc_rbsbits;
-    zthfc->span.open = zthfc_open;
-    zthfc->span.close = zthfc_close;
-    zthfc->span.ioctl = zthfc_ioctl;
+    zthfc->span.ops = &zaphfc_span_ops;
 
     zthfc->span.channels = 3;
     zthfc->span.chans = zthfc->_chans;
@@ -695,7 +700,6 @@
     zthfc->span.linecompat = DAHDI_CONFIG_AMI | DAHDI_CONFIG_CCS; // <--- this is really BS
     zthfc->span.offset = 0;
     init_waitqueue_head(&zthfc->span.maintq);
-    zthfc->span.pvt = zthfc;
 
     for (i = 0; i < zthfc->span.channels; i++) {
 	memset(&(zthfc->chans[i]), 0x0, sizeof(struct dahdi_chan));
