mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
stmmac: fix driver Kconfig when built as module
This patches fixes the driver when built as dynamic module. In fact, the platform part cannot be built and the probe fails (thanks to Bob Liu that reported this bug). v2: as D. Miller suggested, it is not necessary to make the pci and the platform code mutually exclusive. Having both could also help, at built time ,to verify that all the code is validated and compiles fine. v3: removed wrong Reviewed-by from the patch Reported-by: Bob Liu <lliubbo@gmail.com> cc: Rayagond Kokatanur <rayagond@vayavyalabs.com> Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3d2377144c
commit
ba27ec66ff
5 changed files with 31 additions and 35 deletions
|
@ -13,9 +13,8 @@ config STMMAC_ETH
|
|||
if STMMAC_ETH
|
||||
|
||||
config STMMAC_PLATFORM
|
||||
tristate "STMMAC platform bus support"
|
||||
bool "STMMAC Platform bus support"
|
||||
depends on STMMAC_ETH
|
||||
default y
|
||||
---help---
|
||||
This selects the platform specific bus support for
|
||||
the stmmac device driver. This is the driver used
|
||||
|
@ -26,7 +25,7 @@ config STMMAC_PLATFORM
|
|||
If unsure, say N.
|
||||
|
||||
config STMMAC_PCI
|
||||
tristate "STMMAC support on PCI bus (EXPERIMENTAL)"
|
||||
bool "STMMAC PCI bus support (EXPERIMENTAL)"
|
||||
depends on STMMAC_ETH && PCI && EXPERIMENTAL
|
||||
---help---
|
||||
This is to select the Synopsys DWMAC available on PCI devices,
|
||||
|
|
|
@ -95,7 +95,8 @@ extern int stmmac_mdio_register(struct net_device *ndev);
|
|||
extern void stmmac_set_ethtool_ops(struct net_device *netdev);
|
||||
extern const struct stmmac_desc_ops enh_desc_ops;
|
||||
extern const struct stmmac_desc_ops ndesc_ops;
|
||||
|
||||
extern struct pci_driver stmmac_pci_driver;
|
||||
extern struct platform_driver stmmac_pltfr_driver;
|
||||
int stmmac_freeze(struct net_device *ndev);
|
||||
int stmmac_restore(struct net_device *ndev);
|
||||
int stmmac_resume(struct net_device *ndev);
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#include <linux/dma-mapping.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/prefetch.h>
|
||||
#include <linux/pci.h>
|
||||
#ifdef CONFIG_STMMAC_DEBUG_FS
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/seq_file.h>
|
||||
|
@ -2093,6 +2094,30 @@ int stmmac_restore(struct net_device *ndev)
|
|||
}
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static int __init stmmac_init(void)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
err = platform_driver_register(&stmmac_pltfr_driver);
|
||||
|
||||
if (!err) {
|
||||
err = pci_register_driver(&stmmac_pci_driver);
|
||||
if (err)
|
||||
platform_driver_unregister(&stmmac_pltfr_driver);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void __exit stmmac_exit(void)
|
||||
{
|
||||
pci_unregister_driver(&stmmac_pci_driver);
|
||||
platform_driver_unregister(&stmmac_pltfr_driver);
|
||||
}
|
||||
|
||||
module_init(stmmac_init);
|
||||
module_exit(stmmac_exit);
|
||||
|
||||
#ifndef MODULE
|
||||
static int __init stmmac_cmdline_opt(char *str)
|
||||
{
|
||||
|
|
|
@ -179,7 +179,7 @@ static DEFINE_PCI_DEVICE_TABLE(stmmac_id_table) = {
|
|||
|
||||
MODULE_DEVICE_TABLE(pci, stmmac_id_table);
|
||||
|
||||
static struct pci_driver stmmac_driver = {
|
||||
struct pci_driver stmmac_pci_driver = {
|
||||
.name = STMMAC_RESOURCE_NAME,
|
||||
.id_table = stmmac_id_table,
|
||||
.probe = stmmac_pci_probe,
|
||||
|
@ -190,33 +190,6 @@ static struct pci_driver stmmac_driver = {
|
|||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
* stmmac_init_module - Entry point for the driver
|
||||
* Description: This function is the entry point for the driver.
|
||||
*/
|
||||
static int __init stmmac_init_module(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = pci_register_driver(&stmmac_driver);
|
||||
if (ret < 0)
|
||||
pr_err("%s: ERROR: driver registration failed\n", __func__);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* stmmac_cleanup_module - Cleanup routine for the driver
|
||||
* Description: This function is the cleanup routine for the driver.
|
||||
*/
|
||||
static void __exit stmmac_cleanup_module(void)
|
||||
{
|
||||
pci_unregister_driver(&stmmac_driver);
|
||||
}
|
||||
|
||||
module_init(stmmac_init_module);
|
||||
module_exit(stmmac_cleanup_module);
|
||||
|
||||
MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet PCI driver");
|
||||
MODULE_AUTHOR("Rayagond Kokatanur <rayagond.kokatanur@vayavyalabs.com>");
|
||||
MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>");
|
||||
|
|
|
@ -255,7 +255,7 @@ static const struct of_device_id stmmac_dt_ids[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(of, stmmac_dt_ids);
|
||||
|
||||
static struct platform_driver stmmac_driver = {
|
||||
struct platform_driver stmmac_pltfr_driver = {
|
||||
.probe = stmmac_pltfr_probe,
|
||||
.remove = stmmac_pltfr_remove,
|
||||
.driver = {
|
||||
|
@ -266,8 +266,6 @@ static struct platform_driver stmmac_driver = {
|
|||
},
|
||||
};
|
||||
|
||||
module_platform_driver(stmmac_driver);
|
||||
|
||||
MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet PLATFORM driver");
|
||||
MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
Loading…
Reference in a new issue