summaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-07-15 13:05:16 +0000
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-07-15 13:05:16 +0000
commitec7835703b0a91aa8385936c3a5c0a386b1de3ec (patch)
tree51d59fc34fa30e5ef09f2029caa877ee0c1c4baa /target/linux
parenta8fb744861bfea47b0097db0b1a8fb0e59edf950 (diff)
generic: rtl8366: introduce rtl8366_smi_alloc
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22195 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8366_smi.c20
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8366_smi.h1
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8366rb.c4
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8366s.c4
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 d0b368056..ac8862ced 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 bd16cbe55..775f95935 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 2156078f8..aa0b4a0b7 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 923f51a97..6f3fdd509 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;