On Thu, Jun 27, 2013 at 09:17:13AM +0300, Felipe Balbi wrote: > On Wed, Jun 26, 2013 at 05:00:34PM +0200, Sylwester Nawrocki wrote: > > Hi, > > > > On 06/25/2013 05:06 PM, Felipe Balbi wrote: > > >> +static struct platform_driver exynos_video_phy_driver = { > > >> > + .probe = exynos_video_phy_probe, > > > > > > you *must* provide a remove method. drivers with NULL remove are > > > non-removable :-) > > > > Actually the remove() callback can be NULL, it's just missing module_exit > > function that makes a module not unloadable. > > look at the implementation of platform_drv_remove(): > > 499 static int platform_drv_remove(struct device *_dev) > 500 { > 501 struct platform_driver *drv = to_platform_driver(_dev->driver); > 502 struct platform_device *dev = to_platform_device(_dev); > 503 int ret; > 504 > 505 ret = drv->remove(dev); > 506 if (ACPI_HANDLE(_dev)) > 507 acpi_dev_pm_detach(_dev, true); > 508 > 509 return ret; > 510 } > > that's not a conditional call right :-) Wrong. if (drv->remove) drv->driver.remove = platform_drv_remove; The function you quote will only be used if drv->remove is non-NULL. You do not need to provide a remove method. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html