Signed-off-by: Marc Reilly <marc@xxxxxxxxxxxxxxx> --- commands/Kconfig | 7 ++++++ commands/pwm.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/commands/Kconfig b/commands/Kconfig index cc7585bbb2..f2a6d22f69 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -1940,6 +1940,13 @@ config CMD_PWM Controls the pwm values such as period and duty cycle + + pwm_get - get pwm state + + Usage: pwm_get [d] + + Displays the pwm values such as period and duty cycle + config CMD_LED bool depends on LED diff --git a/commands/pwm.c b/commands/pwm.c index a21b918c89..d344f7e1ec 100644 --- a/commands/pwm.c +++ b/commands/pwm.c @@ -141,3 +141,60 @@ BAREBOX_CMD_START(pwm_set) BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP) BAREBOX_CMD_HELP(cmd_pwm_set_help) BAREBOX_CMD_END + +#define HZ_FROM_NANOSECONDS(x) (1000000000UL/(x)) + +static int do_pwm_get(int argc, char *argv[]) +{ + struct pwm_device *pwm = NULL; + struct pwm_state state; + int error = 0; + char *devname = NULL; + int opt; + + while ((opt = getopt(argc, argv, "d:")) > 0) { + switch (opt) { + case 'd': + devname = optarg; + break; + } + } + + if (!devname) { + printf(" need to specify a device\n"); + return COMMAND_ERROR_USAGE; + } + + pwm = pwm_request(devname); + if (!pwm) { + printf(" pwm device %s not found\n", devname); + return -ENODEV; + } + + pwm_get_state(pwm, &state); + + printf(" pwm params for '%s':\n", devname); + printf(" period_ns: %u (ns)\n", state.period_ns); + printf(" duty_ns : %u (ns)\n", state.duty_ns); + printf(" enabled : %d\n", state.p_enable); + printf(" polarity : %s\n", state.polarity == 0 ? "Normal" : "Inverted"); + printf(" freq : %lu (Hz)\n", HZ_FROM_NANOSECONDS(state.period_ns)); + + pwm_free(pwm); + return error; +} + +BAREBOX_CMD_HELP_START(pwm_get) +BAREBOX_CMD_HELP_TEXT("Gets a pwm device parameters.") +BAREBOX_CMD_HELP_TEXT(" Specify the device by device name") +BAREBOX_CMD_HELP_TEXT("Options:") +BAREBOX_CMD_HELP_OPT("-d string", "device name (eg 'pwm0')") +BAREBOX_CMD_HELP_END + +BAREBOX_CMD_START(pwm_get) + .cmd = do_pwm_get, + BAREBOX_CMD_DESC("get pwm") + BAREBOX_CMD_OPTS("[-d]") + BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP) + BAREBOX_CMD_HELP(cmd_pwm_get_help) +BAREBOX_CMD_END -- 2.35.3