diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2012-06-19 10:44:16 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2012-06-19 10:44:16 +0000 |
commit | b934fa2f160d6c652b5597e686ae31507031ffa9 (patch) | |
tree | f8632923f4b9c6c5d36280c4772c51971f4a5714 /target/linux | |
parent | f509a87f2dfd6524792ace9725b0fb25521a0510 (diff) | |
download | upstream-b934fa2f160d6c652b5597e686ae31507031ffa9.tar.gz upstream-b934fa2f160d6c652b5597e686ae31507031ffa9.tar.bz2 upstream-b934fa2f160d6c652b5597e686ae31507031ffa9.zip |
generic: ar8216: allow to configure AR8327 LEDs via platform data
SVN-Revision: 32456
Diffstat (limited to 'target/linux')
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.c | 23 | ||||
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.h | 2 | ||||
-rw-r--r-- | target/linux/generic/files/include/linux/ar8216_platform.h | 9 |
3 files changed, 33 insertions, 1 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 97ce04720c..698d92dd7d 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -733,6 +733,8 @@ static int ar8327_hw_init(struct ar8216_priv *priv) { struct ar8327_platform_data *pdata; + struct ar8327_led_cfg *led_cfg; + u32 pos, new_pos; u32 t; int i; @@ -747,7 +749,26 @@ ar8327_hw_init(struct ar8216_priv *priv) t = ar8327_get_pad_cfg(pdata->pad6_cfg); priv->write(priv, AR8327_REG_PAD6_MODE, t); - priv->write(priv, AR8327_REG_POWER_ON_STRIP, 0x40000000); + pos = priv->read(priv, AR8327_REG_POWER_ON_STRIP); + new_pos = pos; + + led_cfg = pdata->led_cfg; + if (led_cfg) { + if (led_cfg->open_drain) + new_pos |= AR8327_POWER_ON_STRIP_LED_OPEN_EN; + else + new_pos &= ~AR8327_POWER_ON_STRIP_LED_OPEN_EN; + + priv->write(priv, AR8327_REG_LED_CTRL0, led_cfg->led_ctrl0); + priv->write(priv, AR8327_REG_LED_CTRL1, led_cfg->led_ctrl1); + priv->write(priv, AR8327_REG_LED_CTRL2, led_cfg->led_ctrl2); + priv->write(priv, AR8327_REG_LED_CTRL3, led_cfg->led_ctrl3); + } + + if (new_pos != pos) { + new_pos |= AR8327_POWER_ON_STRIP_POWER_ON_SEL; + priv->write(priv, AR8327_REG_POWER_ON_STRIP, new_pos); + } for (i = 0; i < AR8327_NUM_PHYS; i++) ar8327_phy_fixup(priv, i); diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h b/target/linux/generic/files/drivers/net/phy/ar8216.h index c9b5e9f579..8948c52054 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.h +++ b/target/linux/generic/files/drivers/net/phy/ar8216.h @@ -198,6 +198,8 @@ #define AR8327_PAD_RGMII_EN BIT(26) #define AR8327_REG_POWER_ON_STRIP 0x010 +#define AR8327_POWER_ON_STRIP_POWER_ON_SEL BIT(31) +#define AR8327_POWER_ON_STRIP_LED_OPEN_EN BIT(24) #define AR8327_REG_INT_STATUS0 0x020 #define AR8327_INT0_VT_DONE BIT(20) diff --git a/target/linux/generic/files/include/linux/ar8216_platform.h b/target/linux/generic/files/include/linux/ar8216_platform.h index 1ecb6e5bf2..f5c2ef065f 100644 --- a/target/linux/generic/files/include/linux/ar8216_platform.h +++ b/target/linux/generic/files/include/linux/ar8216_platform.h @@ -62,11 +62,20 @@ struct ar8327_port_cfg { int duplex:1; }; +struct ar8327_led_cfg { + u32 led_ctrl0; + u32 led_ctrl1; + u32 led_ctrl2; + u32 led_ctrl3; + bool open_drain; +}; + struct ar8327_platform_data { struct ar8327_pad_cfg *pad0_cfg; struct ar8327_pad_cfg *pad5_cfg; struct ar8327_pad_cfg *pad6_cfg; struct ar8327_port_cfg cpuport_cfg; + struct ar8327_led_cfg *led_cfg; }; #endif /* AR8216_PLATFORM_H */
\ No newline at end of file |