Commit fefae690 authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

net: dsa: b53: Allow SRAB driver to specify platform data

For Northstart Plus SoCs, we cannot detect the switch because only the
revision information is provied in the Management page, instead, rely on
Device Tree to tell us the chip id, and pass it down using the
b53_platform_data structure.
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fb3bbdb8
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/platform_data/b53.h> #include <linux/platform_data/b53.h>
#include <linux/of.h>
#include "b53_priv.h" #include "b53_priv.h"
...@@ -356,12 +357,37 @@ static struct b53_io_ops b53_srab_ops = { ...@@ -356,12 +357,37 @@ static struct b53_io_ops b53_srab_ops = {
.write64 = b53_srab_write64, .write64 = b53_srab_write64,
}; };
static const struct of_device_id b53_srab_of_match[] = {
{ .compatible = "brcm,bcm53010-srab" },
{ .compatible = "brcm,bcm53011-srab" },
{ .compatible = "brcm,bcm53012-srab" },
{ .compatible = "brcm,bcm53018-srab" },
{ .compatible = "brcm,bcm53019-srab" },
{ .compatible = "brcm,bcm5301x-srab" },
{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, b53_srab_of_match);
static int b53_srab_probe(struct platform_device *pdev) static int b53_srab_probe(struct platform_device *pdev)
{ {
struct b53_platform_data *pdata = pdev->dev.platform_data;
struct device_node *dn = pdev->dev.of_node;
const struct of_device_id *of_id = NULL;
struct b53_srab_priv *priv; struct b53_srab_priv *priv;
struct b53_device *dev; struct b53_device *dev;
struct resource *r; struct resource *r;
if (dn)
of_id = of_match_node(b53_srab_of_match, dn);
if (of_id) {
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
if (!pdata)
return -ENOMEM;
pdata->chip_id = (u32)of_id->data;
}
priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
if (!priv) if (!priv)
return -ENOMEM; return -ENOMEM;
...@@ -375,6 +401,9 @@ static int b53_srab_probe(struct platform_device *pdev) ...@@ -375,6 +401,9 @@ static int b53_srab_probe(struct platform_device *pdev)
if (!dev) if (!dev)
return -ENOMEM; return -ENOMEM;
if (pdata)
dev->pdata = pdata;
platform_set_drvdata(pdev, dev); platform_set_drvdata(pdev, dev);
return b53_switch_register(dev); return b53_switch_register(dev);
...@@ -390,16 +419,6 @@ static int b53_srab_remove(struct platform_device *pdev) ...@@ -390,16 +419,6 @@ static int b53_srab_remove(struct platform_device *pdev)
return 0; return 0;
} }
static const struct of_device_id b53_srab_of_match[] = {
{ .compatible = "brcm,bcm53010-srab" },
{ .compatible = "brcm,bcm53011-srab" },
{ .compatible = "brcm,bcm53012-srab" },
{ .compatible = "brcm,bcm53018-srab" },
{ .compatible = "brcm,bcm53019-srab" },
{ .compatible = "brcm,bcm5301x-srab" },
{ /* sentinel */ },
};
static struct platform_driver b53_srab_driver = { static struct platform_driver b53_srab_driver = {
.probe = b53_srab_probe, .probe = b53_srab_probe,
.remove = b53_srab_remove, .remove = b53_srab_remove,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment