This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 4e70cc1e696fd6de36da69019411869aeb2bfa73 Author: Michal Lenc <michall...@seznam.cz> AuthorDate: Thu Feb 20 10:56:54 2025 +0100 samv7/pwm: add support for PWMIOC_FAULTS_FETCH_AND_CLEAR ioctl This ioctl fetches and clears PWM faults. Signed-off-by: Michal Lenc <michall...@seznam.cz> --- arch/arm/src/samv7/sam_pwm.c | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/arch/arm/src/samv7/sam_pwm.c b/arch/arm/src/samv7/sam_pwm.c index 23101e3f63..f503706b9b 100644 --- a/arch/arm/src/samv7/sam_pwm.c +++ b/arch/arm/src/samv7/sam_pwm.c @@ -1118,7 +1118,43 @@ static int pwm_stop(struct pwm_lowerhalf_s *dev) static int pwm_ioctl(struct pwm_lowerhalf_s *dev, int cmd, unsigned long arg) { - return -ENOTTY; + struct sam_pwm_s *priv = (struct sam_pwm_s *)dev; + uint32_t regval; + int ret = OK; + + switch (cmd) + { + case PWMIOC_FAULTS_FETCH_AND_CLEAR: + { + unsigned long clear = arg != 0 ? + *(unsigned long *)(uintptr_t)arg : FCR_FCLR_MASK; + + /* Get current faults. */ + + regval = pwm_getreg(priv, SAMV7_PWM_FSR); + + /* Clear the faults. */ + + clear &= ((regval & FSR_FS_MASK) >> FSR_FS_SHIFT); + pwm_putreg(priv, SAMV7_PWM_FCR, FCR_FCLR_SEL(clear)); + + /* And return the previously read faults. */ + + if (arg != 0) + { + *(unsigned long *)(uintptr_t)arg = + (regval & FSR_FS_MASK) >> FSR_FS_SHIFT; + } + } + break; + default: + { + pwmerr("ERROR: Unknown cmd: %d\n", cmd); + ret = -ENOTTY; + } + } + + return ret; } /****************************************************************************