X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/320e8ef881264fc560ad4634493842403811169d..ec7835703b0a91aa8385936c3a5c0a386b1de3ec:/target/linux/generic/files/drivers/net/phy/rtl8366s.c diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366s.c b/target/linux/generic/files/drivers/net/phy/rtl8366s.c index 4936ceadf..6f3fdd509 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366s.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366s.c @@ -15,7 +15,6 @@ #include #include #include -#include #include #include "rtl8366_smi.h" @@ -170,12 +169,6 @@ #define RTL8366S_VLAN_FID_SHIFT 12 #define RTL8366S_VLAN_FID_MASK 0x7 -struct rtl8366s { - struct device *parent; - struct rtl8366_smi smi; - struct switch_dev dev; -}; - static struct rtl8366_mib_counter rtl8366s_mib_counters[] = { { 0, 0, 4, "IfInOctets" }, { 0, 4, 4, "EtherStatsOctets" }, @@ -231,22 +224,6 @@ static struct rtl8366_mib_counter rtl8366s_mib_counters[] = { return err; \ } while (0) -static inline struct rtl8366s *smi_to_rtl8366s(struct rtl8366_smi *smi) -{ - return container_of(smi, struct rtl8366s, smi); -} - -static inline struct rtl8366s *sw_to_rtl8366s(struct switch_dev *sw) -{ - return container_of(sw, struct rtl8366s, dev); -} - -static inline struct rtl8366_smi *sw_to_rtl8366_smi(struct switch_dev *sw) -{ - struct rtl8366s *rtl = sw_to_rtl8366s(sw); - return &rtl->smi; -} - static int rtl8366s_reset_chip(struct rtl8366_smi *smi) { int timeout = 10; @@ -1053,25 +1030,25 @@ static struct switch_dev rtl8366_switch_dev = { .reset_switch = rtl8366s_sw_reset_switch, }; -static int rtl8366s_switch_init(struct rtl8366s *rtl) +static int rtl8366s_switch_init(struct rtl8366_smi *smi) { - struct switch_dev *dev = &rtl->dev; + struct switch_dev *dev = &smi->sw_dev; int err; memcpy(dev, &rtl8366_switch_dev, sizeof(struct switch_dev)); - dev->priv = rtl; - dev->devname = dev_name(rtl->parent); + dev->priv = smi; + dev->devname = dev_name(smi->parent); err = register_switch(dev, NULL); if (err) - dev_err(rtl->parent, "switch registration failed\n"); + dev_err(smi->parent, "switch registration failed\n"); return err; } -static void rtl8366s_switch_cleanup(struct rtl8366s *rtl) +static void rtl8366s_switch_cleanup(struct rtl8366_smi *smi) { - unregister_switch(&rtl->dev); + unregister_switch(&smi->sw_dev); } static int rtl8366s_mii_read(struct mii_bus *bus, int addr, int reg) @@ -1106,9 +1083,8 @@ static int rtl8366s_mii_bus_match(struct mii_bus *bus) bus->write == rtl8366s_mii_write); } -static int rtl8366s_setup(struct rtl8366s *rtl) +static int rtl8366s_setup(struct rtl8366_smi *smi) { - struct rtl8366_smi *smi = &rtl->smi; int ret; ret = rtl8366s_reset_chip(smi); @@ -1170,7 +1146,6 @@ static int __init rtl8366s_probe(struct platform_device *pdev) { static int rtl8366_smi_version_printed; struct rtl8366s_platform_data *pdata; - struct rtl8366s *rtl; struct rtl8366_smi *smi; int err; @@ -1185,17 +1160,12 @@ static int __init rtl8366s_probe(struct platform_device *pdev) goto err_out; } - rtl = kzalloc(sizeof(*rtl), GFP_KERNEL); - if (!rtl) { - dev_err(&pdev->dev, "no memory for private data\n"); + smi = rtl8366_smi_alloc(&pdev->dev); + if (!smi) { err = -ENOMEM; goto err_out; } - rtl->parent = &pdev->dev; - - smi = &rtl->smi; - smi->parent = &pdev->dev; smi->gpio_sda = pdata->gpio_sda; smi->gpio_sck = pdata->gpio_sck; smi->ops = &rtl8366s_smi_ops; @@ -1207,15 +1177,15 @@ static int __init rtl8366s_probe(struct platform_device *pdev) err = rtl8366_smi_init(smi); if (err) - goto err_free_rtl; + goto err_free_smi; - platform_set_drvdata(pdev, rtl); + platform_set_drvdata(pdev, smi); - err = rtl8366s_setup(rtl); + err = rtl8366s_setup(smi); if (err) goto err_clear_drvdata; - err = rtl8366s_switch_init(rtl); + err = rtl8366s_switch_init(smi); if (err) goto err_clear_drvdata; @@ -1224,8 +1194,8 @@ static int __init rtl8366s_probe(struct platform_device *pdev) err_clear_drvdata: platform_set_drvdata(pdev, NULL); rtl8366_smi_cleanup(smi); - err_free_rtl: - kfree(rtl); + err_free_smi: + kfree(smi); err_out: return err; } @@ -1258,13 +1228,13 @@ static struct phy_driver rtl8366s_phy_driver = { static int __devexit rtl8366s_remove(struct platform_device *pdev) { - struct rtl8366s *rtl = platform_get_drvdata(pdev); + struct rtl8366_smi *smi = platform_get_drvdata(pdev); - if (rtl) { - rtl8366s_switch_cleanup(rtl); + if (smi) { + rtl8366s_switch_cleanup(smi); platform_set_drvdata(pdev, NULL); - rtl8366_smi_cleanup(&rtl->smi); - kfree(rtl); + rtl8366_smi_cleanup(smi); + kfree(smi); } return 0;