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/ar8216_platform.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/of_device.h>
|
||||
|
||||
#include "ar8216.h"
|
||||
|
||||
/* size of the vlan table */
|
||||
|
@ -1086,6 +1088,50 @@ ar8327_hw_config_pdata(struct ar8xxx_priv *priv,
|
|||
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
|
||||
ar8327_hw_init(struct ar8xxx_priv *priv)
|
||||
{
|
||||
|
@ -1093,7 +1139,12 @@ ar8327_hw_init(struct ar8xxx_priv *priv)
|
|||
int ret;
|
||||
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)
|
||||
return ret;
|
||||
|
||||
|
|
Loading…
Reference in a new issue