request_irq always returns EINVAL

request_irq always returns EINVAL
What am I doing wrong here ?

int mydrvr_open(struct inode *inode, struct file *filp)
{
     int ret;
    printk("<1> \nModule Opened!"); 
    //disable_irq(4);
	//free_irq(4, NULL);
    ret = request_irq(4, &imr_interrupt_handler,IRQF_SHARED, "mediadeviceintr", NULL);
    printk("<1>irqReturn=%d\n",ret);
	if(ret>0)  enable_irq(4);
    return 0;
}

---------- Post updated at 10:54 PM ---------- Previous update was at 03:27 AM ----------

Ok, I figured it out... since this was a shared interrupt, I could not pass a NULL device ID, just one of reasons why it would return EINVAL or -22.