VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / drivers / isdn / hisax / st5481_d.c
index 45a0300..51d1202 100644 (file)
@@ -623,7 +623,7 @@ static void ph_connect(struct st5481_adapter *adapter)
        st5481_usb_device_ctrl_msg(adapter, FFMSK_D, 0xfc, NULL, NULL);
        st5481_in_mode(d_in, L1_MODE_HDLC);
 
-#if LOOPBACK
+#ifdef LOOPBACK
        // Turn loopback on (data sent on B and D looped back)
        st5481_usb_device_ctrl_msg(cs, LBB, 0x04, NULL, NULL);
 #endif
@@ -652,13 +652,18 @@ static void ph_disconnect(struct st5481_adapter *adapter)
 static int st5481_setup_d_out(struct st5481_adapter *adapter)
 {
        struct usb_device *dev = adapter->usb_dev;
-       struct usb_host_interface *altsetting;
+       struct usb_interface *intf;
+       struct usb_host_interface *altsetting = NULL;
        struct usb_host_endpoint *endpoint;
        struct st5481_d_out *d_out = &adapter->d_out;
 
        DBG(2,"");
 
-       altsetting = &(dev->config->interface[0]->altsetting[3]);
+       intf = usb_ifnum_to_if(dev, 0);
+       if (intf)
+               altsetting = usb_altnum_to_altsetting(intf, 3);
+       if (!altsetting)
+               return -ENXIO;
 
        // Allocate URBs and buffers for the D channel out
        endpoint = &altsetting->endpoint[EP_D_OUT-1];