| From 87248a9cf0a516e4100e13d2adb90e75be32576b Mon Sep 17 00:00:00 2001 |
| From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Date: Fri, 7 Jun 2013 13:54:02 +0000 |
| Subject: sh_eth: create initial ID table |
| |
| We are trying to get away from the current driver's scheme of identifying a SoC |
| based on #ifdef's and the platform device ID table matching seems to be a good |
| replacement -- we can use the 'driver_data' field of 'struct platform_device_id' |
| as a pointer to a 'struct sh_eth_cpu_data'. Start by creating the initial table |
| with driver's name as the only entry without the driver data. Check the driver |
| data in the probe() method and if it's not NULL override 'mdp->cd' from it. |
| |
| Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| (cherry picked from commit afe391ad4b05f8f00ca955e165f3b37b480506b7) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/net/ethernet/renesas/sh_eth.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c |
| index 0a7990a1..ede2db2e 100644 |
| --- a/drivers/net/ethernet/renesas/sh_eth.c |
| +++ b/drivers/net/ethernet/renesas/sh_eth.c |
| @@ -2530,6 +2530,7 @@ static int sh_eth_drv_probe(struct platform_device *pdev) |
| struct net_device *ndev = NULL; |
| struct sh_eth_private *mdp = NULL; |
| struct sh_eth_plat_data *pd = pdev->dev.platform_data; |
| + const struct platform_device_id *id = platform_get_device_id(pdev); |
| |
| /* get base addr */ |
| res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| @@ -2593,6 +2594,8 @@ static int sh_eth_drv_probe(struct platform_device *pdev) |
| #else |
| mdp->cd = &sh_eth_my_cpu_data; |
| #endif |
| + if (id->driver_data) |
| + mdp->cd = (struct sh_eth_cpu_data *)id->driver_data; |
| sh_eth_set_default_cpu_data(mdp->cd); |
| |
| /* set function */ |
| @@ -2708,9 +2711,16 @@ static const struct dev_pm_ops sh_eth_dev_pm_ops = { |
| #define SH_ETH_PM_OPS NULL |
| #endif |
| |
| +static struct platform_device_id sh_eth_id_table[] = { |
| + { CARDNAME }, |
| + { } |
| +}; |
| +MODULE_DEVICE_TABLE(platform, sh_eth_id_table); |
| + |
| static struct platform_driver sh_eth_driver = { |
| .probe = sh_eth_drv_probe, |
| .remove = sh_eth_drv_remove, |
| + .id_table = sh_eth_id_table, |
| .driver = { |
| .name = CARDNAME, |
| .pm = SH_ETH_PM_OPS, |
| -- |
| 1.8.4.3.gca3854a |
| |