diff options
Diffstat (limited to 'target/linux/sunxi/patches-3.13/192-stmmac-use-platform-data-with-compat.patch')
-rw-r--r-- | target/linux/sunxi/patches-3.13/192-stmmac-use-platform-data-with-compat.patch | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/target/linux/sunxi/patches-3.13/192-stmmac-use-platform-data-with-compat.patch b/target/linux/sunxi/patches-3.13/192-stmmac-use-platform-data-with-compat.patch new file mode 100644 index 0000000000..70b50750a0 --- /dev/null +++ b/target/linux/sunxi/patches-3.13/192-stmmac-use-platform-data-with-compat.patch @@ -0,0 +1,73 @@ +From 34722924d416c3521de2bc8d10dfcd07a55135ea Mon Sep 17 00:00:00 2001 +From: Chen-Yu Tsai <wens@csie.org> +Date: Sat, 7 Dec 2013 01:29:36 +0800 +Subject: [PATCH] net: stmmac: Use platform data tied with compatible strings + +Signed-off-by: Chen-Yu Tsai <wens@csie.org> +--- + .../net/ethernet/stmicro/stmmac/stmmac_platform.c | 29 ++++++++++++++-------- + 1 file changed, 19 insertions(+), 10 deletions(-) + +diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +index 74c7aef..df3fd1c 100644 +--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c ++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +@@ -26,8 +26,19 @@ + #include <linux/io.h> + #include <linux/of.h> + #include <linux/of_net.h> ++#include <linux/of_device.h> + #include "stmmac.h" + ++static const struct of_device_id stmmac_dt_ids[] = { ++ { .compatible = "st,spear600-gmac"}, ++ { .compatible = "snps,dwmac-3.610"}, ++ { .compatible = "snps,dwmac-3.70a"}, ++ { .compatible = "snps,dwmac-3.710"}, ++ { .compatible = "snps,dwmac"}, ++ { /* sentinel */ } ++}; ++MODULE_DEVICE_TABLE(of, stmmac_dt_ids); ++ + #ifdef CONFIG_OF + static int stmmac_probe_config_dt(struct platform_device *pdev, + struct plat_stmmacenet_data *plat, +@@ -35,10 +46,18 @@ static int stmmac_probe_config_dt(struct platform_device *pdev, + { + struct device_node *np = pdev->dev.of_node; + struct stmmac_dma_cfg *dma_cfg; ++ const struct of_device_id *device; + + if (!np) + return -ENODEV; + ++ device = of_match_device(stmmac_dt_ids, &pdev->dev); ++ if (!device) ++ return -ENODEV; ++ ++ if (device->data) ++ memcpy(plat, device->data, sizeof(*plat)); ++ + *mac = of_get_mac_address(np); + plat->interface = of_get_phy_mode(np); + +@@ -257,16 +276,6 @@ int stmmac_pltfr_restore(struct device *dev) + static const struct dev_pm_ops stmmac_pltfr_pm_ops; + #endif /* CONFIG_PM */ + +-static const struct of_device_id stmmac_dt_ids[] = { +- { .compatible = "st,spear600-gmac"}, +- { .compatible = "snps,dwmac-3.610"}, +- { .compatible = "snps,dwmac-3.70a"}, +- { .compatible = "snps,dwmac-3.710"}, +- { .compatible = "snps,dwmac"}, +- { /* sentinel */ } +-}; +-MODULE_DEVICE_TABLE(of, stmmac_dt_ids); +- + struct platform_driver stmmac_pltfr_driver = { + .probe = stmmac_pltfr_probe, + .remove = stmmac_pltfr_remove, +-- +1.8.5.1 + |