On Wednesday 19 June 2013, Jingoo Han wrote: > Then, do you mean the following? > > static int __exit exynos_pcie_remove(struct platform_device *pdev) > { > struct pcie_port *pp = platform_get_drvdata(pdev); > > clk_disable_unprepare(pp->bus_clk); > clk_disable_unprepare(pp->clk); > > return 0; > } > > static struct platform_driver exynos_pcie_driver = { > .remove = __exit_p(exynos_pcie_remove), > > [.....] > > /* Exynos PCIe driver does not allow module unload */ > > static int __init pcie_init(void) > { > hook_fault_code(16 + 6, exynos_pcie_abort, SIGBUS, 0, > "imprecise external abort"); > > platform_driver_probe(&exynos_pcie_driver, exynos_pcie_probe); > > return 0; > } > subsys_initcall(pcie_init); > > MODULE_AUTHOR("Jingoo Han <jg1.han@xxxxxxxxxxx>"); > MODULE_DESCRIPTION("Samsung PCIe host controller driver"); > MODULE_LICENSE("GPLv2"); > Yes, this looks good. I would probably use platform_driver_register rather than platform_driver_probe, but that is your choice. using platform_driver_probe() mean you cannot deal with deferred probing. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html