From 7066d5e4ae78beb2a368e6cae08862f605186dd7 Mon Sep 17 00:00:00 2001 From: juhosg Date: Tue, 19 Jun 2012 10:44:16 +0000 Subject: generic: ar8216: allow to configure AR8327 LEDs via platform data git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32456 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../linux/generic/files/drivers/net/phy/ar8216.c | 23 +++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'target/linux/generic/files/drivers/net/phy/ar8216.c') diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 97ce04720..698d92dd7 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); -- cgit v1.2.3