diff options
Diffstat (limited to 'target/linux/generic')
4 files changed, 20 insertions, 9 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c index d0b3680562..ac8862ced6 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c @@ -741,13 +741,27 @@ static void rtl8366_smi_mii_cleanup(struct rtl8366_smi *smi) mdiobus_free(smi->mii_bus); } +struct rtl8366_smi *rtl8366_smi_alloc(struct device *parent) +{ + struct rtl8366_smi *smi; + + BUG_ON(!parent); + + smi = kzalloc(sizeof(*smi), GFP_KERNEL); + if (!smi) { + dev_err(parent, "no memory for private data\n"); + return NULL; + } + + smi->parent = parent; + return smi; +} +EXPORT_SYMBOL_GPL(rtl8366_smi_alloc); + int rtl8366_smi_init(struct rtl8366_smi *smi) { int err; - if (!smi->parent) - return -EINVAL; - if (!smi->ops) return -EINVAL; diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h index bd16cbe55e..775f95935e 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h +++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h @@ -87,6 +87,7 @@ struct rtl8366_smi_ops { int port, unsigned long long *val); }; +struct rtl8366_smi *rtl8366_smi_alloc(struct device *parent); int rtl8366_smi_init(struct rtl8366_smi *smi); void rtl8366_smi_cleanup(struct rtl8366_smi *smi); int rtl8366_smi_write_reg(struct rtl8366_smi *smi, u32 addr, u32 data); diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c index 2156078f86..aa0b4a0b71 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c @@ -1133,14 +1133,12 @@ static int __init rtl8366rb_probe(struct platform_device *pdev) goto err_out; } - smi = kzalloc(sizeof(*smi), GFP_KERNEL); + smi = rtl8366_smi_alloc(&pdev->dev); if (!smi) { - dev_err(&pdev->dev, "no memory for private data\n"); err = -ENOMEM; goto err_out; } - smi->parent = &pdev->dev; smi->gpio_sda = pdata->gpio_sda; smi->gpio_sck = pdata->gpio_sck; smi->ops = &rtl8366rb_smi_ops; diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366s.c b/target/linux/generic/files/drivers/net/phy/rtl8366s.c index 923f51a977..6f3fdd5092 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366s.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366s.c @@ -1160,14 +1160,12 @@ static int __init rtl8366s_probe(struct platform_device *pdev) goto err_out; } - smi = kzalloc(sizeof(*smi), GFP_KERNEL); + smi = rtl8366_smi_alloc(&pdev->dev); if (!smi) { - dev_err(&pdev->dev, "no memory for private data\n"); err = -ENOMEM; goto err_out; } - smi->parent = &pdev->dev; smi->gpio_sda = pdata->gpio_sda; smi->gpio_sck = pdata->gpio_sck; smi->ops = &rtl8366s_smi_ops; |