Commit graph zephyr/drivers/pwm
Author SHA1 Message Date
Felix Wang
1dd18e8763 drivers: pwm: add support for FlexPWM channel X output
1.Extend the NXP MCUX PWM driver to support three channels (A, B, and X)
instead of two.
2.Add special handling for channel X  polarity control via the OCTRL
register, as it uses VAL0 for pulse width instead of the VAL2/VAL3 pair
used by channels A and B.
3.Restore VAL0 when configuring channels A/B to preserve channel X pulse
4.Adjust LDOK timeout to one PWM period
5.Get clock frequency in init function

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2026-02-06 11:12:09 +01:00
Benjamin Cabé
d4d355632c drivers: pwm: use proper essential type in boolean variables assignments
As per Zephyr coding guideline #59, "operands shall not be of an
inappropriate essential type". This makes sure boolean variables are
assigned true/false values, not 1/0.

Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org>
2026-02-05 10:20:22 +00:00
Albort Xue
807f5e8f1f drivers: pwm: nxp_flexio: Add clock configuration and enable
Add explicit clock configuration and enable calls during driver
initialization.

Note: -ENOSYS is temporarily ignored as not all clock control
drivers currently implement the configure API. This handling
should be removed once all clock drivers support configure.

Signed-off-by: Albort Xue <yao.xue@nxp.com>
2026-02-04 13:55:30 +01:00
Hoang Nguyen
eaf655126a drivers: pwm: renesas: Initialize p_reg in extended configuration
Initialize p_reg with the register base address from devicetree.

Signed-off-by: Hoang Nguyen <hoang.nguyen.jx@bp.renesas.com>
Signed-off-by: Nhut Nguyen <nhut.nguyen.kc@renesas.com>
2026-02-03 09:29:36 +01:00
Missael Maciel
9cbc6616c1 drivers: pwm: sctimer: Add PowerManagement support
pwm_mcux_sctimer driver doesn't support power management actions.
PM Actions added, as well support to save/restore for pwm channels
configurations after exitig from PM3.

Signed-off-by: Missael Maciel <davidmissael.maciel@nxp.com>
2026-01-30 18:02:27 +01:00
Jamie McCrae
80f19801b2 soc: sifive: sifive_freedom: Fix SoC Kconfig naming and issues
Fixes the Kconfig name of this so that it matches the value from
soc.yml, and deprecates the old name - this is required to support
future build system features. Additionally, it fixes an issue in
Kconfigs of this SoC of duplicating existing symbols

Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2026-01-29 17:20:11 +01:00
Charles Hardin
4c23db41ee drivers: pwm: stm32: show the period cycles for the 16-bit limit error
The settings and calculations are often done in micro or nano seconds
and the result is not always shown. So, just add the period cycles as
part of the error message to get the calculated value.

Signed-off-by: Charles Hardin <ckhardin@gmail.com>
2026-01-29 09:04:39 +01:00
Felix Wang
e8dafd27d9 drivers: pwm: Add PWM mode support for tpm
Add support for center-aligned PWM mode in addition to the existing
edge-aligned mode. When center-aligned mode is configured, adjust
pulse and period cycles by dividing by 2 to maintain correct timing.

Add validation checks in PWM capture functionality to edge-aligned
mode only, as capture is not supported in center-aligned mode.

Assign the value directly to avoid re-calculating period_cycles
based on pwm_freq in TPM_SetupPwm, which could lead to precision loss.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2026-01-28 16:13:11 +01:00
Felix Wang
f0acc1d770 drivers: pwm: Fix bugs in tpm
Replace interrupt register checks with explicit capture_active flag
to track capture state. This provides more reliable state management
and fixes potential race conditions when checking if capture is active.

Also optimize TPM_SetupPwm call to only configure the specific channel
being set instead of all channels, improving efficiency.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2026-01-28 16:13:11 +01:00
John Batch
9d4ae9b399 drivers: infineon: tcpwm: counter and pwm clock updates
Updates the Infineon Counter and PWM drivers based on the TCPWM device
to connect with a clock.  This update allows multiple devices to connect
to the same peripheral clock, and supports the TCPWM architecture of the
PSC3 device family.

Corrects initialization of the PWM on the PSC3 family to select the
correct output type.

Signed-off-by: John Batch <john.batch@infineon.com>
2026-01-27 08:06:28 +01:00
Albort Xue
dba5c5081f drivers: pwm: mcux_tpm: Add clock configuration support
Add clock_control_configure() call during initialization to properly
configure the TPM clock. The driver now attempts to configure the
clock and handles cases where configuration is not supported by the
platform (-ENOTSUP/-ENOSYS) by continuing with default settings.
Real configuration errors are logged and cause initialization to fail.

Note: -ENOSYS is temporarily ignored as not all clock control
drivers currently implement the configure API. This handling
should be removed once all clock drivers support configure.

Signed-off-by: Albort Xue <yao.xue@nxp.com>
2026-01-20 20:10:19 -05:00
Pieter De Gendt
eee57d48cb drivers: pwm: mcux: Print status value on error
When PWM_SetupPwm returns an error, add the value of status to the error
log message.

Signed-off-by: Pieter De Gendt <pieter.degendt@basalte.be>
2026-01-19 18:47:25 -06:00
Felix Wang
88d4709b45 drivers: pwm: mcux_ctimer: Fix multi-line assertion message formatting
Fix formatting of the __ASSERT message in
mcux_ctimer_pwm_get_cycles_per_sec to properly concatenate the
string across multiple lines.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2026-01-19 15:18:20 +01:00
Hieu Nguyen
4890a26f1c drivers: pwm: Update driver for RZ devices
Implement interrupt settings to expand the driver to RZ/V2H, V2N SoCs

Signed-off-by: Hieu Nguyen <hieu.nguyen.ym@bp.renesas.com>
Signed-off-by: Tien Nguyen <tien.nguyen.zg@renesas.com>
2026-01-19 12:13:58 +01:00
Felix Wang
e72d11e903 drivers: pwm: Add input capture support to nxp,sctimer-pwm
Implement PWM input capture functionality for the NXP SCTimer
driver with support for both pulse width and period measurement
in single-shot and continuous modes.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2026-01-17 17:05:00 +01:00
Felix Wang
e7840a9d27 drivers: pwm: Fix polarity update on duty cycle change
1.Add mcux_sctimer_pwm_update_polarity() function to properly
reconfigure PWM output polarity when duty cycle is updated.
2.Update Match Reload Value register when Match register is
set.
3.Stop timer before update to prevent bus error

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2026-01-17 17:05:00 +01:00
Felix Wang
fa48bee6c4 drivers: pwm: fix prescaler calculation for pwm_mcux_ctimer
The prescaler divides the clock by (prescaler + 1), not by the prescaler
value directly. Update the calculation to correctly account for this.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2026-01-17 17:04:44 +01:00
Felix Wang
8dcd7579eb drivers: pwm: Add PWM capture functionality for pwm_mcux
Add support for PWM input capture functionality to the NXP MCUX PWM
driver. This enables measurement of pulse width and period of external
PWM signals.

Key features added:
- PWM capture configuration and control APIs
- Interrupt-driven capture with overflow handling
- Support for both pulse width and period measurement
- Configurable input filtering
- Support for continuous and one-shot capture modes

The implementation uses FlexPWM channel X as the dedicated input
capture channel, while channels 0 and 1 remain available for PWM
output. Capture functionality is conditionally compiled based on
CONFIG_PWM_CAPTURE configuration option.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2026-01-17 17:04:24 +01:00
Felix Wang
f46f921b7f drivers: pwm: Fix ASSERTION FAIL in pwm_mcux
In PWM_SetupPwm implementation, there is a check:
    temp = pwmClock / pwmFreq_Hz;
    assert(temp <= 0xFFFFU);
Currently pwmFreq_Hz is 1, makes assert failed with
high frequency pwmClock. Since VALx values is set
directly for edge aligned PWM, the pwmFreq_Hz here is
a dummy value, set pwmFreq_Hz equal to pwmClock
frequency to pass assert check.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2026-01-17 17:04:24 +01:00
Henrik Brix Andersen
7440bca13d drivers: pwm: shell: add command for getting cycles per second
Add PWM shell command for getting the number of cycles per second for a
given PWM controller/channel.

Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
2026-01-13 15:21:21 +01:00
Hieu Nguyen
a437d3057a drivers: pwm: Initial support for RZ/A2M
Add PWM driver support for Renesas RZ/A2M

Signed-off-by: Hieu Nguyen <hieu.nguyen.ym@bp.renesas.com>
Signed-off-by: Tien Nguyen <tien.nguyen.zg@renesas.com>
2026-01-13 13:32:06 +01:00
Camille BAUD
396249fdd4 drivers: pwm: Add BFLB PWM 1 and 2
Adds BFLB PWMs

Signed-off-by: Camille BAUD <mail@massdriver.space>
2026-01-13 10:13:04 +01:00
Ha Duong Quang
3db533ae91 drivers: pwm: add support pwm(emios) for s32k5
Add support PWM(eMIOS) for S32K5

Signed-off-by: Ha Duong Quang <ha.duongquang@nxp.com>
2026-01-06 13:37:15 +00:00
Nikodem Kastelik
64be8d84b1 drivers: pwm: nrf: fix nrfx instance being zeroed on suspend
PWM driver clears its runtime state on each suspend event.
However, since nrfx 4.0 integration nrfx driver instance is part
of the runtime state structure, so clear action must be limited.

Signed-off-by: Nikodem Kastelik <nikodem.kastelik@nordicsemi.no>
2025-12-19 07:49:28 -06:00
McAtee Maxwell
6ad823ab8d drivers: pwm: add support for Infineon kit_pse84_eval
- Update the driver to support the kit_pse84_eval board
- Update to new peripheral clock allocation scheme

Signed-off-by: McAtee Maxwell <maxwell.mcatee@infineon.com>
2025-12-17 10:52:22 +02:00
Muhammed Asif
20d7d23d53 drivers: pwm: microchip: add support for pwm tc g1
Add pwm driver using tc g1 peripheral.
Adds the support for generating pwm output.
Supports 8-bit, 16-bit and 32-bit mode of tc peripheral

Signed-off-by: Muhammed Asif <muhammed.asif@microchip.com>
2025-12-15 17:07:24 +00:00
Ruibin Chang
d26ffeba9d drivers/pwm/it8xxx2: add pwm init output level property
When EC reboot, pwm pins go back to default GPI mode.
After we set pin mode to pwm mode at init(), it would
output low, so LED will be light (LED is low-activated).
And until set_cycles() is called to set output high,
then LED will be turn off the light (PWM-LED flicker).
So add the property to set PWM channel init output level.

Signed-off-by: Ruibin Chang <Ruibin.Chang@ite.com.tw>
2025-12-12 04:56:42 -05:00
Qingsong Gou
7c39469e17 drivers: pwm: sf32lb: add atim based pwm driver
add atim based pwm driver for sf32lb platform

Signed-off-by: Qingsong Gou <gouqs@hotmail.com>
2025-12-09 09:54:16 -05:00
Sreeram Tatapudi
5ecf248ba3 drivers: infineon: Drop cat1 from the files names
Drop cat1 from the file names to enable reuse by other
category devices as well

Signed-off-by: Sreeram Tatapudi <sreeram.praveen@infineon.com>
2025-12-07 21:19:38 -05:00
Peter van der Perk
084f2a1dda drivers: pwm: Fix prescaler 256 overflow and get cycles
Setting a prescaler of 256 would overflow the uint8_t.
Also get cycles calculation was wrong.

Signed-off-by: Peter van der Perk <peter.vanderperk@nxp.com>
2025-12-06 11:37:45 -05:00
Charles Hardin
5c70e93afd drivers: pwm: stm32: change the order of deadtime and enable all timers
For stm32h7 the order matters to get the pwm to output the values as
expected. As reported for the the H730 doesn't produce PWM output when
the LL_TIM_OC_SetDeadTime is called after LL_TIM_EnableAllOutputs. So,
switch the order of the calls and this doesn't impact the stm32f413zh
boards.

Signed-off-by: Charles Hardin <ckhardin@gmail.com>
2025-12-06 07:10:01 -05:00
Jaro Van Landschoot
8407f1766f drivers: pwm: sam: Add period and fault events
The SAM4S pwm supports several events. This commit
implements the events when a channel period has ended
or a fault event has occured.

Signed-off-by: Jaro Van Landschoot <jaro.vanlandschoot@basalte.be>
2025-12-04 14:05:13 -05:00
Jaro Van Landschoot
c6e64a1337 drivers: pwm: extend API to support events
Extend the PWM API to support events, as some
controllers allow interrupts if e.g., a pwm period
has ended or a fault occured.

Signed-off-by: Jaro Van Landschoot <jaro.vanlandschoot@basalte.be>
2025-12-04 14:05:13 -05:00
Martin Hoff
ff3637bf83 soc: silabs: siwx91x: enabled clock control by default for siwx91x soc
Enable clock control by default for siwx91x SoCs. Moreover, most
drivers for siwx91x soc depend on clock control, but didn't declare
it.

Signed-off-by: Martin Hoff <martin.hoff@silabs.com>
2025-12-02 15:18:53 -05:00
Qingsong Gou
6211909b78 drivers: pwm: sf32lb: add gpt based pwm driver support
Add gpt based pwm driver for sf32lb platform

Signed-off-by: Qingsong Gou <gouqs@hotmail.com>
2025-12-01 12:23:17 -05:00
Aksel Skauge Mellbye
a83b19b3f9 soc: silabs: Fix clock control dependency declarations
Most drivers for Series 2 depend on clock control, but didn't
declare it. Enable clock control by default for Series 2 SoCs.

Signed-off-by: Aksel Skauge Mellbye <aksel.mellbye@silabs.com>
2025-12-01 11:11:14 +01:00
Nikodem Kastelik
ad1e5ac253 nordic: update and align to nrfx 4.0.1
New nrfx release contains major rework of nrfx drivers
instantiation making it easier to integrate with dts nodes.
Now, nrfx driver instances can no longer be `const`
because they contain driver runtime state.
Additionally, all nrfx drivers return `errno` error codes
instead of deprecated `nrfx_err_t`.

Signed-off-by: Nikodem Kastelik <nikodem.kastelik@nordicsemi.no>
2025-11-27 14:45:17 +01:00
Etienne Carriere
2f4962fa0a drivers: pwm: stm32: clean indentation in instance init macros
Clean indentation in IRQ_CONNECT_AND_ENABLE_BY_NAME(), IRQ_CONFIG_FUNC()
and IRQ_CONNECT_AND_ENABLE_DEFAULT() macros of STM32 PWM driver.
Remove a useless trailing semi column character in the interrupt function
defined with IRQ_CONFIG_FUNC() macro.

Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
2025-11-26 11:03:50 +00:00
Charles Hardin
76c1d713c1 drivers: pwm: stm32: add device tree configuration for deadtime
When using an stm32 in a bridge circuit with complementary outputs,
the deadtime needs to be configurable to avoid shoot-thru current
on the circuit. So, the HAL has the configuration in the BDTR init
and use that api access to set the configuration.

Signed-off-by: Charles Hardin <ckhardin@gmail.com>
2025-11-20 06:03:20 -05:00
Josuah Demangeon
30950b888d style: drivers: sort Kconfig and CMake includes
Use the "zephyr-keep-sorted-start/stop" comment to have CI check
the alphabetical order of includes, to help reducing the chance
of conflicts while contributing drivers.

Signed-off-by: Josuah Demangeon <me@josuah.net>
2025-11-17 13:48:03 -05:00
S Mohamed Fiaz
5828ba5ea1 driver: pwm: pwm_silabs_siwx91x: fix pm actions when PM is enabled
This fix addresses the issue encountered when power management (pm)
is enabled, as the PWM test suites utilize the GPIO driver, which
now incorporates the latest power domain enhancements and requires
CONFIG_POWER_DOMAIN to be enabled. Power domain functionality
manages device power actions such as turning on and off.

Accordingly, the pm device support for the pwm_silabs_siwx91x
driver has been updated to align with the recent power domain
improvements.

Signed-off-by: S Mohamed Fiaz <Fiaz.Mohamed@silabs.com>
2025-10-29 14:29:34 -04:00
Bjarki Arge Andreasen
beacd7c181 dts: drivers: nordic: nrf54h: Don't manage clocks from drivers
Clocks are requested automatically by hardware on the nRF54H.

Remove additional handling from device drivers, and disable
the now unmanaged clocks in the devicetree.

Updates:
  - can_nrf
  - counter_nrfx_timer
  - uart_nrfx_uarte
  - spi_nrfx_spim
  - spi_nrfx_spis

Signed-off-by: Bjarki Arge Andreasen <bjarki.andreasen@nordicsemi.no>
2025-10-23 18:06:30 +02:00
Stoyan Bogdanov
afd2962dfc drivers: pwm: cc23x0: Add power management
Add PM support for PWM (LGPT0, LGPT1, LGPT2 and LGPT3) to cc23x0 SoC.

Signed-off-by: Stoyan Bogdanov <sbogdanov@baylibre.com>
2025-10-22 18:07:42 -04:00
Felix Wang
190c6dd567 drivers: pwm: Fix qtmr set cycles bug.
The mcux_qtmr_pwm_set_cycles can not set 100% and 0%
duty cycle PWM wave.
Set output compare setting based on pulse_cycles and
period_cycles:
1. If pulse_cycles is 0, generate 0% duty cycle wave.
2. If pulse_cycles equals period_cycles but not 0,
   generate 100% duty cycle wave.
3. Otherwise toggle output when compare value matched.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2025-10-21 22:53:53 +03:00
Felix Wang
8af0f0387f drivers: pwm: enable pwm capture for qtmr driver
Supported mode: single capture, continus capture,
pulse capture, period capture.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2025-10-21 22:53:53 +03:00
Muhammed Asif
8f6b71312f drivers: pwm: microchip: add support for pwm tcc g1 IPs
Add pwm driver using tcc g1 peripheral.
Adds the support for generating pwm output.
Supports both 16-bit and 24bit mode of tcc peripheral

Signed-off-by: Muhammed Asif <muhammed.asif@microchip.com>
2025-10-21 17:23:02 +03:00
Tony Han
802fdc4dd3 drivers: pwm: pwm_sam: update to support Soc SAMA7G5
Redefine some macros due to different naming scheme in the header file.
Get the clock rate from the device tree when 'SOC_ATMEL_SAM_MCK_FREQ_HZ'
is not defined.

Signed-off-by: Tony Han <tony.han@microchip.com>
2025-10-20 19:19:20 -04:00
Tahsin Mutlugun
36a3a4c1e0 drivers: pwm: max32: Simplify prescaler calculation
Replace the look-up table used to obtain the prescaler enumeration with
a simple multiplication.

Signed-off-by: Tahsin Mutlugun <Tahsin.Mutlugun@analog.com>
2025-10-20 19:16:00 -04:00
Felix Wang
94f525eeb9 dirvers: pwm: Fix pwm_mcux_tpm build error.
Combine mode is not for all TPM IP depneds
on IP version, which is necessary for PWM capture feature.
Add pre-process check and wrap
mcux_tpm_capture_data with CONFIG_PWM_CAPTURE macro.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2025-10-16 17:09:56 +03:00
Felix Wang
705a015b53 drivers: pwm: Enable PWM capture feature for TPM
This implementation refers to the code from FTM,
which supports to capture pulse and period.

Signed-off-by: Felix Wang <fei.wang_3@nxp.com>
2025-10-14 12:51:33 +03:00