diff --git a/drivers/staging/sep/sep_driver.c b/drivers/staging/sep/sep_driver.c
index ab3bb9e..23bc8a81 100644
--- a/drivers/staging/sep/sep_driver.c
+++ b/drivers/staging/sep/sep_driver.c
@@ -196,11 +196,6 @@
 static int sep_register_driver_to_fs(void);
 
 /*
-  this function unregisters driver from fs
-*/
-static void sep_unregister_driver_from_fs(void);
-
-/*
   this function calculates the size of data that can be inserted into the lli
   table from this array the condition is that either the table is full
   (all etnries are entered), or there are no more entries in the lli array
@@ -383,14 +378,6 @@
 -----------------------------------------------*/
 
 /*
-  This functions locks the area of the resisnd and cache sep code
-*/
-static void sep_lock_cache_resident_area(void)
-{
-	return;
-}
-
-/*
   This functions copies the cache and resident from their source location into
   destination memory, which is external to Linux VM and is given as
    physical address
@@ -2202,9 +2189,6 @@
 	if (error)
 		goto end_function;
 
-	/* lock the area (if needed) */
-	sep_lock_cache_resident_area();
-
 	command_args.new_base_addr = sep_dev->phys_shared_area_addr;
 
 	/* find the new base address according to the lowest address between
@@ -2765,17 +2749,6 @@
 	.probe = sep_probe
 };
 
-/*
-  this function registers th driver to
-  the device subsystem( either PCI, USB, etc)
-*/
-static int sep_register_driver_to_device(void)
-{
-	return pci_register_driver(&sep_pci_driver);
-}
-
-
-
 /* major and minor device numbers */
 static dev_t sep_devno;
 
@@ -2827,16 +2800,6 @@
       return ret_val;
 }
 
-/*
-  this function unregisters driver from fs
-*/
-static void sep_unregister_driver_from_fs(void)
-{
-	cdev_del(&sep_cdev);
-	/* unregister dev numbers */
-	unregister_chrdev_region(sep_devno, 1);
-}
-
 
 /*--------------------------------------------------------------
   init function
@@ -2864,7 +2827,8 @@
 	/* set the starting mode to blocking */
 	sep_dev->block_mode_flag = 1;
 
-	ret_val = sep_register_driver_to_device();
+	/* FIXME: Probe can occur before we are ready to survive a probe */
+	ret_val = pci_register_driver(&sep_pci_driver);
 	if (ret_val) {
 		edbg("sep_driver:sep_driver_to_device failed, ret_val is %d\n", ret_val);
 		goto end_function_unregister_from_fs;
@@ -2920,7 +2884,9 @@
 	goto end_function;
 end_function_unregister_from_fs:
 	/* unregister from fs */
-	sep_unregister_driver_from_fs();
+	cdev_del(&sep_cdev);
+	/* unregister dev numbers */
+	unregister_chrdev_region(sep_devno, 1);
 end_function_deallocate_sep_shared_area:
 	/* de-allocate shared area */
 	sep_unmap_and_free_shared_area(size, sep_dev->shared_area_addr, sep_dev->phys_shared_area_addr);
@@ -2944,7 +2910,9 @@
 	dbg("SEP Driver:--------> Exit start\n");
 
 	/* unregister from fs */
-	sep_unregister_driver_from_fs();
+	cdev_del(&sep_cdev);
+	/* unregister dev numbers */
+	unregister_chrdev_region(sep_devno, 1);
 	/* calculate the total size for de-allocation */
 	size = SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES +
 	    SEP_DRIVER_SYNCHRONIC_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES + SEP_DRIVER_FLOW_DMA_TABLES_AREA_SIZE_IN_BYTES + SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES + SEP_DRIVER_SYSTEM_DATA_MEMORY_SIZE_IN_BYTES;
diff --git a/drivers/staging/sep/sep_driver_ext_api.h b/drivers/staging/sep/sep_driver_ext_api.h
index eabd67d..cad9057 100644
--- a/drivers/staging/sep/sep_driver_ext_api.h
+++ b/drivers/staging/sep/sep_driver_ext_api.h
@@ -42,11 +42,6 @@
 static void sep_load_rom_code(void);
 
 /*
-This functions locks the area of the resident and cache sep code (if possible)
-*/
-static void sep_lock_cache_resident_area(void);
-
-/*
 This functions copies the cache and resident from their source location into
 destination memory, which is external to Linux VM and is given as physical
 address
@@ -86,10 +81,4 @@
 */
 static unsigned long sep_shared_area_phys_to_virt(unsigned long phys_address);
 
-/*
-This function registers th driver to the device
-subsystem (either PCI, USB, etc)
-*/
-static int sep_register_driver_to_device(void);
-
 #endif /*__SEP_DRIVER_EXT_API_H__*/
