generic: ar8216: add OF configuration support for AR8327
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> SVN-Revision: 36047
This commit is contained in:
parent
ee12b1b7d5
commit
7ba6a8d8e8
1 changed files with 52 additions and 1 deletions
|
@ -33,6 +33,8 @@
|
||||||
#include <linux/lockdep.h>
|
#include <linux/lockdep.h>
|
||||||
#include <linux/ar8216_platform.h>
|
#include <linux/ar8216_platform.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
#include <linux/of_device.h>
|
||||||
|
|
||||||
#include "ar8216.h"
|
#include "ar8216.h"
|
||||||
|
|
||||||
/* size of the vlan table */
|
/* size of the vlan table */
|
||||||
|
@ -1086,6 +1088,50 @@ ar8327_hw_config_pdata(struct ar8xxx_priv *priv,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
|
static int
|
||||||
|
ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np)
|
||||||
|
{
|
||||||
|
const __be32 *paddr;
|
||||||
|
int len;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
paddr = of_get_property(np, "qca,ar8327-initvals", &len);
|
||||||
|
if (!paddr || len < (2 * sizeof(*paddr)))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
len /= sizeof(*paddr);
|
||||||
|
|
||||||
|
for (i = 0; i < len - 1; i += 2) {
|
||||||
|
u32 reg;
|
||||||
|
u32 val;
|
||||||
|
|
||||||
|
reg = be32_to_cpup(paddr + i);
|
||||||
|
val = be32_to_cpup(paddr + i + 1);
|
||||||
|
|
||||||
|
switch (reg) {
|
||||||
|
case AR8327_REG_PORT_STATUS(0):
|
||||||
|
priv->chip_data.ar8327.port0_status = val;
|
||||||
|
break;
|
||||||
|
case AR8327_REG_PORT_STATUS(6):
|
||||||
|
priv->chip_data.ar8327.port6_status = val;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
priv->write(priv, reg, val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline int
|
||||||
|
ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np)
|
||||||
|
{
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ar8327_hw_init(struct ar8xxx_priv *priv)
|
ar8327_hw_init(struct ar8xxx_priv *priv)
|
||||||
{
|
{
|
||||||
|
@ -1093,7 +1139,12 @@ ar8327_hw_init(struct ar8xxx_priv *priv)
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ret = ar8327_hw_config_pdata(priv, priv->phy->dev.platform_data);
|
if (priv->phy->dev.of_node)
|
||||||
|
ret = ar8327_hw_config_of(priv, priv->phy->dev.of_node);
|
||||||
|
else
|
||||||
|
ret = ar8327_hw_config_pdata(priv,
|
||||||
|
priv->phy->dev.platform_data);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue