get_device, put_device and device_release_driver are no longer available to non-GPL modules. The whole process of unregistering the device from another driver seems dodgy, lets just skip it --- slmodem-2.9.10/drivers/amrmo_init.c.orig 2005-01-03 14:52:23.178287912 +0000 +++ slmodem-2.9.10/drivers/amrmo_init.c 2005-01-03 15:06:46.603027400 +0000 @@ -718,15 +718,8 @@ dev->driver->remove(dev); dev->driver = NULL; #else - struct device *reldev = get_device(&dev->dev); - AMRMO_DBG("device %04x:%04x is grabbed by driver %s: try to release\n", - dev->vendor,dev->device, - (reldev&&reldev->driver)? - reldev->driver->name:"unknown"); - if (reldev) { - device_release_driver(reldev); - put_device(reldev); - } + AMRMO_DBG("device %04x:%04x is grabbed by another driver, ignoring", + dev->vendor,dev->device); #endif } }