提交 1e4babee 编写于 作者: L LiuJian 提交者: David S. Miller

net: hns: add acpi function of xge led control

The current code only support DT method to control xge led.
This patch is the implementation of acpi method to control xge led.
Signed-off-by: NLiuJian <liujian56@huawei.com>
Reviewed-by: NJohn Garry <john.garry@huawei.com>
Reviewed-by: NYunsheng Lin <linyunsheng@huawei.com>
Reviewed-by: NDaode Huang <huangdaode@hisilicon.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 230cd127
...@@ -776,8 +776,9 @@ void hns_ae_update_led_status(struct hnae_handle *handle) ...@@ -776,8 +776,9 @@ void hns_ae_update_led_status(struct hnae_handle *handle)
assert(handle); assert(handle);
mac_cb = hns_get_mac_cb(handle); mac_cb = hns_get_mac_cb(handle);
if (!mac_cb->cpld_ctrl) if (mac_cb->media_type != HNAE_MEDIA_TYPE_FIBER)
return; return;
hns_set_led_opt(mac_cb); hns_set_led_opt(mac_cb);
} }
......
...@@ -53,6 +53,34 @@ static u32 dsaf_read_sub(struct dsaf_device *dsaf_dev, u32 reg) ...@@ -53,6 +53,34 @@ static u32 dsaf_read_sub(struct dsaf_device *dsaf_dev, u32 reg)
return ret; return ret;
} }
static void hns_dsaf_acpi_ledctrl_by_port(struct hns_mac_cb *mac_cb, u8 op_type,
u32 link, u32 port, u32 act)
{
union acpi_object *obj;
union acpi_object obj_args[3], argv4;
obj_args[0].integer.type = ACPI_TYPE_INTEGER;
obj_args[0].integer.value = link;
obj_args[1].integer.type = ACPI_TYPE_INTEGER;
obj_args[1].integer.value = port;
obj_args[2].integer.type = ACPI_TYPE_INTEGER;
obj_args[2].integer.value = act;
argv4.type = ACPI_TYPE_PACKAGE;
argv4.package.count = 3;
argv4.package.elements = obj_args;
obj = acpi_evaluate_dsm(ACPI_HANDLE(mac_cb->dev),
&hns_dsaf_acpi_dsm_guid, 0, op_type, &argv4);
if (!obj) {
dev_warn(mac_cb->dev, "ledctrl fail, link:%d port:%d act:%d!\n",
link, port, act);
return;
}
ACPI_FREE(obj);
}
static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status, static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status,
u16 speed, int data) u16 speed, int data)
{ {
...@@ -93,6 +121,18 @@ static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status, ...@@ -93,6 +121,18 @@ static void hns_cpld_set_led(struct hns_mac_cb *mac_cb, int link_status,
} }
} }
static void hns_cpld_set_led_acpi(struct hns_mac_cb *mac_cb, int link_status,
u16 speed, int data)
{
if (!mac_cb) {
pr_err("cpld_led_set mac_cb is null!\n");
return;
}
hns_dsaf_acpi_ledctrl_by_port(mac_cb, HNS_OP_LED_SET_FUNC,
link_status, mac_cb->mac_id, data);
}
static void cpld_led_reset(struct hns_mac_cb *mac_cb) static void cpld_led_reset(struct hns_mac_cb *mac_cb)
{ {
if (!mac_cb || !mac_cb->cpld_ctrl) if (!mac_cb || !mac_cb->cpld_ctrl)
...@@ -103,6 +143,20 @@ static void cpld_led_reset(struct hns_mac_cb *mac_cb) ...@@ -103,6 +143,20 @@ static void cpld_led_reset(struct hns_mac_cb *mac_cb)
mac_cb->cpld_led_value = CPLD_LED_DEFAULT_VALUE; mac_cb->cpld_led_value = CPLD_LED_DEFAULT_VALUE;
} }
static void cpld_led_reset_acpi(struct hns_mac_cb *mac_cb)
{
if (!mac_cb) {
pr_err("cpld_led_reset mac_cb is null!\n");
return;
}
if (mac_cb->media_type != HNAE_MEDIA_TYPE_FIBER)
return;
hns_dsaf_acpi_ledctrl_by_port(mac_cb, HNS_OP_LED_SET_FUNC,
0, mac_cb->mac_id, 0);
}
static int cpld_set_led_id(struct hns_mac_cb *mac_cb, static int cpld_set_led_id(struct hns_mac_cb *mac_cb,
enum hnae_led_state status) enum hnae_led_state status)
{ {
...@@ -604,8 +658,8 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev) ...@@ -604,8 +658,8 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev)
misc_op->cfg_serdes_loopback = hns_mac_config_sds_loopback; misc_op->cfg_serdes_loopback = hns_mac_config_sds_loopback;
} else if (is_acpi_node(dsaf_dev->dev->fwnode)) { } else if (is_acpi_node(dsaf_dev->dev->fwnode)) {
misc_op->cpld_set_led = hns_cpld_set_led; misc_op->cpld_set_led = hns_cpld_set_led_acpi;
misc_op->cpld_reset_led = cpld_led_reset; misc_op->cpld_reset_led = cpld_led_reset_acpi;
misc_op->cpld_set_led_id = cpld_set_led_id; misc_op->cpld_set_led_id = cpld_set_led_id;
misc_op->dsaf_reset = hns_dsaf_rst_acpi; misc_op->dsaf_reset = hns_dsaf_rst_acpi;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册