atm_info(usbatm, "%s\n", "DSL line goes down"); 
atm_info(usbatm, "DSL line goes down\n"); 
static void speedtch_handle_int(struct urb *int_urb, struct pt_regs *regs){	struct speedtch_instance_data *instance = int_urb->context;	struct usbatm_data *usbatm = instance->usbatm;	unsigned int count = int_urb->actual_length;	int ret = int_urb->status;	/* The magic interrupt for "up state" */	const static unsigned char up_int[6]   = { 0xa1, 0x00, 0x01, 0x00, 0x00, 0x00 };	/* The magic interrupt for "down state" */	const static unsigned char down_int[6] = { 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00 };	atm_dbg(usbatm, "%s entered\n", __func__);	if (ret < 0) {		atm_dbg(usbatm, "%s: nonzero urb status %d!\n", __func__, ret);		goto fail;	}	if ((count == 6) && !memcmp(up_int, instance->int_data, 6)) {		del_timer(&instance->status_checker.timer);		atm_info(usbatm, "%s\n", "DSL line goes up");	} else if ((count == 6) && !memcmp(down_int, instance->int_data, 6)) {		atm_info(usbatm, "%s\n", "DSL line goes down");	} else {		int i;		atm_dbg(usbatm, "%s: unknown interrupt packet of length %d:", __func__, count);		for (i = 0; i < count; i++)			printk(" %02x", instance->int_data[i]);		printk("\n");		goto fail;	}	if ((int_urb = instance->int_urb)) {		ret = usb_submit_urb(int_urb, GFP_ATOMIC);		schedule_work(&instance->status_checker);		if (ret < 0) {			atm_dbg(usbatm, "%s: usb_submit_urb failed with result %d\n", __func__, ret);			goto fail;		}	}	return;fail:	if ((int_urb = instance->int_urb))		mod_timer(&instance->resubmit_timer, jiffies + msecs_to_jiffies(RESUBMIT_DELAY));}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/52fbae2a392b6e084195bedc7a280991a94c14d0/speedtch.c/clean/drivers/usb/atm/speedtch.c