diff options
| author | Jiri Pirko <jiri@nvidia.com> | 2024-10-30 09:11:56 +0100 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2024-11-03 08:39:07 -0800 |
| commit | a1afb959add1fad43cb337448c244ed70bac3109 (patch) | |
| tree | c38924a7877174d0a29eaa311a3e9fec2145baf9 /drivers/dpll | |
| parent | dbb9a7ef347828870df3e5e6ddf19469a3277fc9 (diff) | |
| download | linux-a1afb959add1fad43cb337448c244ed70bac3109.tar.gz linux-a1afb959add1fad43cb337448c244ed70bac3109.tar.bz2 linux-a1afb959add1fad43cb337448c244ed70bac3109.zip | |
dpll: add clock quality level attribute and op
In order to allow driver expose quality level of the clock it is
running, introduce a new netlink attr with enum to carry it to the
userspace. Also, introduce an op the dpll netlink code calls into the
driver to obtain the value.
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Link: https://patch.msgid.link/20241030081157.966604-2-jiri@resnulli.us
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/dpll')
| -rw-r--r-- | drivers/dpll/dpll_netlink.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/dpll/dpll_netlink.c b/drivers/dpll/dpll_netlink.c index fc0280dcddd1..c130f87147fa 100644 --- a/drivers/dpll/dpll_netlink.c +++ b/drivers/dpll/dpll_netlink.c @@ -170,6 +170,27 @@ dpll_msg_add_temp(struct sk_buff *msg, struct dpll_device *dpll, } static int +dpll_msg_add_clock_quality_level(struct sk_buff *msg, struct dpll_device *dpll, + struct netlink_ext_ack *extack) +{ + const struct dpll_device_ops *ops = dpll_device_ops(dpll); + DECLARE_BITMAP(qls, DPLL_CLOCK_QUALITY_LEVEL_MAX) = { 0 }; + enum dpll_clock_quality_level ql; + int ret; + + if (!ops->clock_quality_level_get) + return 0; + ret = ops->clock_quality_level_get(dpll, dpll_priv(dpll), qls, extack); + if (ret) + return ret; + for_each_set_bit(ql, qls, DPLL_CLOCK_QUALITY_LEVEL_MAX) + if (nla_put_u32(msg, DPLL_A_CLOCK_QUALITY_LEVEL, ql)) + return -EMSGSIZE; + + return 0; +} + +static int dpll_msg_add_pin_prio(struct sk_buff *msg, struct dpll_pin *pin, struct dpll_pin_ref *ref, struct netlink_ext_ack *extack) @@ -559,6 +580,9 @@ dpll_device_get_one(struct dpll_device *dpll, struct sk_buff *msg, ret = dpll_msg_add_lock_status(msg, dpll, extack); if (ret) return ret; + ret = dpll_msg_add_clock_quality_level(msg, dpll, extack); + if (ret) + return ret; ret = dpll_msg_add_mode(msg, dpll, extack); if (ret) return ret; |
