From: Daode Huang <huangda...@hisilicon.com>

The default driver sets anchor led bit to 0 when link down,
actually, the anchor bit should be set to 1, so fixes it when
link status is down.
Secondly, change the return value of cpld_set_led_id to 0, which
means leave the cpld to control led blink frequece other than the
driver itself.

Signed-off-by: Daode Huang <huangda...@hisilicon.com>
Signed-off-by: Yisen Zhuang <yisen.zhu...@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c 
b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
index aff9d77..8473287 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_misc.c
@@ -86,9 +86,10 @@ static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int 
link_status,
                        mac_cb->cpld_led_value = value;
                }
        } else {
-               dsaf_write_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg,
-                                 CPLD_LED_DEFAULT_VALUE);
-               mac_cb->cpld_led_value = CPLD_LED_DEFAULT_VALUE;
+               value = (mac_cb->cpld_led_value) & (0x1 << DSAF_LED_ANCHOR_B);
+               dsaf_write_syscon(mac_cb->cpld_ctrl,
+                                 mac_cb->cpld_ctrl_reg, value);
+               mac_cb->cpld_led_value = value;
        }
 }
 
@@ -114,7 +115,7 @@ static int cpld_set_led_id(struct hns_mac_cb *mac_cb,
                             CPLD_LED_ON_VALUE);
                dsaf_write_syscon(mac_cb->cpld_ctrl, mac_cb->cpld_ctrl_reg,
                                  mac_cb->cpld_led_value);
-               return 2;
+               break;
        case HNAE_LED_INACTIVE:
                dsaf_set_bit(mac_cb->cpld_led_value, DSAF_LED_ANCHOR_B,
                             CPLD_LED_DEFAULT_VALUE);
@@ -122,7 +123,8 @@ static int cpld_set_led_id(struct hns_mac_cb *mac_cb,
                                  mac_cb->cpld_led_value);
                break;
        default:
-               break;
+               dev_err(mac_cb->dev, "invalid led state: %d!", status);
+               return -EINVAL;
        }
 
        return 0;
-- 
1.9.1

Reply via email to