/linux/drivers/pwm/ |
H A D | Kconfig | 1 # SPDX-License-Identifier: GPL-2.0-only 2 menuconfig PWM config 3 bool "Pulse-Width Modulation (PWM) Support" 5 Generic Pulse-Width Modulation (PWM) support. 7 In Pulse-Width Modulation, a variation of the width of pulses 14 This framework provides a generic interface to PWM devices 16 to register and unregister a PWM chip, an abstraction of a PWM 17 controller, that supports one or more PWM devices. Client 18 drivers can request PWM devices and use the generic framework 21 This generic framework replaces the legacy PWM framework which [all …]
|
H A D | Makefile | 1 # SPDX-License-Identifier: GPL-2.0 2 obj-$(CONFIG_PWM) += core.o 3 obj-$(CONFIG_PWM_AB8500) += pwm-ab8500.o 4 obj-$(CONFIG_PWM_ADP5585) += pwm-adp5585.o 5 obj-$(CONFIG_PWM_APPLE) += pwm-apple.o 6 obj-$(CONFIG_PWM_ATMEL) += pwm-atmel.o 7 obj-$(CONFIG_PWM_ATMEL_HLCDC_PWM) += pwm-atmel-hlcdc.o 8 obj-$(CONFIG_PWM_ATMEL_TCB) += pwm-atmel-tcb.o 9 obj-$(CONFIG_PWM_AXI_PWMGEN) += pwm-axi-pwmgen.o 10 obj-$(CONFIG_PWM_BCM_IPROC) += pwm-bcm-iproc.o [all …]
|
H A D | core.c | 1 // SPDX-License-Identifier: GPL-2.0-or-later 6 * Copyright (C) 2011-2012 Avionic Design GmbH 9 #define DEFAULT_SYMBOL_NAMESPACE "PWM" 15 #include <linux/pwm.h> 24 #include <dt-bindings/pwm/pwm.h> 27 #include <trace/events/pwm.h> 36 if (chip->atomic) in pwmchip_lock() 37 spin_lock(&chip->atomic_lock); in pwmchip_lock() 39 mutex_lock(&chip->nonatomic_lock); in pwmchip_lock() 44 if (chip->atomic) in pwmchip_unlock() [all …]
|
H A D | pwm-twl.c | 1 // SPDX-License-Identifier: GPL-2.0-only 12 #include <linux/pwm.h> 32 #define TWL4030_PWM_TOGGLE(pwm, x) ((x) << (pwm)) argument 46 #define TWL6030_PWM_TOGGLE(pwm, x) ((x) << (pwm * 3)) argument 59 static int twl_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, in twl_pwm_config() argument 68 * On-cycle is set to 1 (the minimum allowed value) in twl_pwm_config() 70 * 0 -> off cycle = 2, in twl_pwm_config() 71 * 1 -> off cycle = 2, in twl_pwm_config() 72 * 2 -> off cycle = 3, in twl_pwm_config() 73 * 126 - > off cycle 127, in twl_pwm_config() [all …]
|
H A D | pwm-vt8500.c | 1 // SPDX-License-Identifier: GPL-2.0-only 3 * drivers/pwm/pwm-vt8500.c 16 #include <linux/pwm.h> 28 #define REG_CTRL(pwm) (((pwm) << 4) + 0x00) argument 29 #define REG_SCALAR(pwm) (((pwm) << 4) + 0x04) argument 30 #define REG_PERIOD(pwm) (((pwm) << 4) + 0x08) argument 31 #define REG_DUTY(pwm) (((pwm) << 4) + 0x0C) argument 64 while ((readl(vt8500->base + REG_STATUS) & mask) && --loops) in vt8500_pwm_busy_wait() 72 static int vt8500_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, in vt8500_pwm_config() argument 81 err = clk_enable(vt8500->clk); in vt8500_pwm_config() [all …]
|
H A D | pwm-lpss.c | 1 // SPDX-License-Identifier: GPL-2.0-only 3 * Intel Low Power Subsystem PWM controller driver 24 #include "pwm-lpss.h" 26 #define PWM 0x00000000 macro 32 /* Size of each PWM register space if multiple */ 74 static inline u32 pwm_lpss_read(const struct pwm_device *pwm) in pwm_lpss_read() argument 76 struct pwm_lpss_chip *lpwm = to_lpwm(pwm->chip); in pwm_lpss_read() 78 return readl(lpwm->regs + pwm->hwpwm * PWM_SIZE + PWM); in pwm_lpss_read() 81 static inline void pwm_lpss_write(const struct pwm_device *pwm, u32 value) in pwm_lpss_write() argument 83 struct pwm_lpss_chip *lpwm = to_lpwm(pwm->chip); in pwm_lpss_write() [all …]
|
H A D | pwm-twl-led.c | 1 // SPDX-License-Identifier: GPL-2.0-only 8 * This driver is a complete rewrite of the former pwm-twl6030.c authorded by: 15 * - The twl6030 hardware only supports two period lengths (128 clock ticks and 17 * - The hardware doesn't support ON = 0, so the active part of a period doesn't 19 * - The hardware could support inverted polarity (with a similar limitation as 21 * - The hardware emits a constant low output when disabled. 22 * - A request for .duty_cycle = 0 results in an output wave with one active 24 * - The driver only implements setting the relative duty cycle. 25 * - The driver doesn't implement .get_state(). 31 #include <linux/pwm.h> [all …]
|
H A D | pwm-stmpe.c | 1 // SPDX-License-Identifier: GPL-2.0-only 15 #include <linux/pwm.h> 38 static int stmpe_24xx_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) in stmpe_24xx_pwm_enable() argument 44 ret = stmpe_reg_read(stmpe_pwm->stmpe, STMPE24XX_PWMCS); in stmpe_24xx_pwm_enable() 46 dev_dbg(pwmchip_parent(chip), "error reading PWM#%u control\n", in stmpe_24xx_pwm_enable() 47 pwm->hwpwm); in stmpe_24xx_pwm_enable() 51 value = ret | BIT(pwm->hwpwm); in stmpe_24xx_pwm_enable() 53 ret = stmpe_reg_write(stmpe_pwm->stmpe, STMPE24XX_PWMCS, value); in stmpe_24xx_pwm_enable() 55 dev_dbg(pwmchip_parent(chip), "error writing PWM#%u control\n", in stmpe_24xx_pwm_enable() 56 pwm->hwpwm); in stmpe_24xx_pwm_enable() [all …]
|
H A D | pwm-samsung.c | 1 // SPDX-License-Identifier: GPL-2.0-only 5 * Ben Dooks <ben@simtec.co.uk>, <ben-linux@fluff.org> 9 * PWM driver for Samsung SoCs 21 #include <linux/pwm.h> 59 * struct samsung_pwm_channel - private data of PWM channel 71 * struct samsung_pwm_chip - private data of PWM chip 73 * @inverter_mask: inverter status for all channels - one bit per channel 74 * @disabled_mask: disabled status for all channels - one bit per channel 75 * @base: base address of mapped PWM registers 95 * PWM block is shared between pwm-samsung and samsung_pwm_timer drivers [all …]
|
H A D | pwm-jz4740.c | 1 // SPDX-License-Identifier: GPL-2.0-or-later 3 * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de> 4 * JZ4740 platform PWM support 7 * - The .apply callback doesn't complete the currently running period before 15 #include <linux/mfd/ingenic-tcu.h> 20 #include <linux/pwm.h> 39 /* Enable all TCU channels for PWM use by default except channels 0/1 */ in jz4740_pwm_can_use_chn() 40 u32 pwm_channels_mask = GENMASK(chip->npwm - 1, 2); in jz4740_pwm_can_use_chn() 42 device_property_read_u32(pwmchip_parent(chip)->parent, in jz4740_pwm_can_use_chn() 43 "ingenic,pwm-channels-mask", in jz4740_pwm_can_use_chn() [all …]
|
H A D | pwm-omap-dmtimer.c | 1 // SPDX-License-Identifier: GPL-2.0-only 9 * Also based on pwm-samsung.c 13 * PWM driver / controller, using the OMAP's dual-mode timers 15 * reloaded with the load value and the pwm output goes up. 20 * - When PWM is stopped, timer counter gets stopped immediately. This 21 * doesn't allow the current PWM period to complete and stops abruptly. 22 * - When PWM is running and changing both duty cycle and period, 25 * is updated while the pwm pin is high, current pwm period/duty_cycle 27 * - period for current cycle = current_period + new period 28 * - duty_cycle for current period = current period + new duty_cycle. [all …]
|
/linux/drivers/clocksource/ |
H A D | samsung_pwm_timer.c | 1 // SPDX-License-Identifier: GPL-2.0-only 6 * samsung - Common hr-timer support (s3c and s5p) 79 static struct samsung_pwm_clocksource pwm; variable 92 reg = readl(pwm.base + REG_TCFG0); in samsung_timer_set_prescale() 94 reg |= (prescale - 1) << shift; in samsung_timer_set_prescale() 95 writel(reg, pwm.base + REG_TCFG0); in samsung_timer_set_prescale() 107 bits = (fls(divisor) - 1) - pwm.variant.div_base; in samsung_timer_set_divisor() 111 reg = readl(pwm.base + REG_TCFG1); in samsung_timer_set_divisor() 114 writel(reg, pwm.base + REG_TCFG1); in samsung_timer_set_divisor() 129 tcon = readl_relaxed(pwm.base + REG_TCON); in samsung_time_stop() [all …]
|
/linux/Documentation/devicetree/bindings/pwm/ |
H A D | pwm-amlogic.yaml | 1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 3 --- 4 $id: http://devicetree.org/schemas/pwm/pwm-amlogic.yaml# 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 7 title: Amlogic PWM 10 - Heiner Kallweit <hkallweit1@gmail.com> 15 - enum: 16 - amlogic,meson8b-pwm 17 - amlogic,meson-gxbb-pwm 18 - amlogic,meson-gxbb-ao-pwm [all …]
|
H A D | pwm.txt | 1 Specifying PWM information for devices 4 1) PWM user nodes 5 ----------------- 7 PWM users should specify a list of PWM devices that they want to use 8 with a property containing a 'pwm-list': 10 pwm-list ::= <single-pwm> [pwm-list] 11 single-pwm ::= <pwm-phandle> <pwm-specifier> 12 pwm-phandle : phandle to PWM controller node 13 pwm-specifier : array of #pwm-cells specifying the given PWM 16 PWM properties should be named "pwms". The exact meaning of each pwms [all …]
|
H A D | pwm-samsung.yaml | 1 # SPDX-License-Identifier: GPL-2.0 3 --- 4 $id: http://devicetree.org/schemas/pwm/pwm-samsung.yaml# 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 7 title: Samsung SoC PWM timers 10 - Thierry Reding <thierry.reding@gmail.com> 11 - Krzysztof Kozlowski <krzk@kernel.org> 14 Samsung SoCs contain PWM timer blocks which can be used for system clock source 15 and clock event timers, as well as to drive SoC outputs with PWM signal. Each 16 PWM timer block provides 5 PWM channels (not all of them can drive physical [all …]
|
H A D | renesas,pwm-rcar.yaml | 1 # SPDX-License-Identifier: GPL-2.0 3 --- 4 $id: http://devicetree.org/schemas/pwm/renesas,pwm-rcar.yaml# 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 7 title: Renesas R-Car PWM Timer Controller 10 - Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> 15 - enum: 16 - renesas,pwm-r8a7742 # RZ/G1H 17 - renesas,pwm-r8a7743 # RZ/G1M 18 - renesas,pwm-r8a7744 # RZ/G1N [all …]
|
H A D | imx-pwm.yaml | 1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 3 --- 4 $id: http://devicetree.org/schemas/pwm/imx-pwm.yaml# 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 7 title: Freescale i.MX PWM controller 10 - Philipp Zabel <p.zabel@pengutronix.de> 13 - $ref: pwm.yaml# 16 "#pwm-cells": 19 PWM_POLARITY_INVERTED. fsl,imx1-pwm does not support this flags. 24 - enum: [all …]
|
H A D | pwm-rockchip.yaml | 1 # SPDX-License-Identifier: GPL-2.0 3 --- 4 $id: http://devicetree.org/schemas/pwm/pwm-rockchip.yaml# 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 7 title: Rockchip PWM controller 10 - Heiko Stuebner <heiko@sntech.de> 15 - const: rockchip,rk2928-pwm 16 - const: rockchip,rk3288-pwm 17 - const: rockchip,rk3328-pwm 18 - const: rockchip,vop-pwm [all …]
|
H A D | allwinner,sun4i-a10-pwm.yaml | 1 # SPDX-License-Identifier: GPL-2.0 3 --- 4 $id: http://devicetree.org/schemas/pwm/allwinner,sun4i-a10-pwm.yaml# 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 7 title: Allwinner A10 PWM 10 - Chen-Yu Tsai <wens@csie.org> 11 - Maxime Ripard <mripard@kernel.org> 14 "#pwm-cells": 19 - const: allwinner,sun4i-a10-pwm 20 - const: allwinner,sun5i-a10s-pwm [all …]
|
H A D | nvidia,tegra20-pwm.yaml | 1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 3 --- 4 $id: http://devicetree.org/schemas/pwm/nvidia,tegra20-pwm.yaml# 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 10 - Thierry Reding <thierry.reding@gmail.com> 11 - Jon Hunter <jonathanh@nvidia.com> 16 - enum: 17 - nvidia,tegra20-pwm 18 - nvidia,tegra186-pwm 20 - items: [all …]
|
H A D | pwm-sifive.yaml | 1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 4 --- 5 $id: http://devicetree.org/schemas/pwm/pwm-sifive.yaml# 6 $schema: http://devicetree.org/meta-schemas/core.yaml# 8 title: SiFive PWM controller 11 - Paul Walmsley <paul.walmsley@sifive.com> 14 Unlike most other PWM controllers, the SiFive PWM controller currently 15 only supports one period for all channels in the PWM. All PWMs need to 18 achievable period. PWM RTL that corresponds to the IP block version 19 numbers can be found here - [all …]
|
H A D | mediatek,mt2712-pwm.yaml | 1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 3 --- 4 $id: http://devicetree.org/schemas/pwm/mediatek,mt2712-pwm.yaml# 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 7 title: MediaTek PWM Controller 10 - John Crispin <john@phrozen.org> 13 - $ref: pwm.yaml# 18 - enum: 19 - mediatek,mt2712-pwm 20 - mediatek,mt6795-pwm [all …]
|
H A D | mediatek,pwm-disp.yaml | 1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 3 --- 4 $id: http://devicetree.org/schemas/pwm/mediatek,pwm-disp.yaml# 5 $schema: http://devicetree.org/meta-schemas/core.yaml# 10 - Jitao Shi <jitao.shi@mediatek.com> 13 - $ref: pwm.yaml# 18 - enum: 19 - mediatek,mt2701-disp-pwm 20 - mediatek,mt6595-disp-pwm 21 - mediatek,mt8173-disp-pwm [all …]
|
/linux/Documentation/driver-api/ |
H A D | pwm.rst | 2 Pulse Width Modulation (PWM) interface 5 This provides an overview about the Linux PWM interface 9 the Linux PWM API (although they could). However, PWMs are often 12 this kind of flexibility the generic PWM API exists. 15 ---------------- 17 Users of the legacy PWM API use unique IDs to refer to PWM devices. 19 Instead of referring to a PWM device via its unique ID, board setup code 20 should instead register a static mapping that can be used to match PWM 24 PWM_LOOKUP("tegra-pwm", 0, "pwm-backlight", NULL, 36 ---------- [all …]
|
/linux/Documentation/ABI/testing/ |
H A D | sysfs-class-pwm | 1 What: /sys/class/pwm/ 6 The pwm/ class sub-directory belongs to the Generic PWM 7 Framework and provides a sysfs interface for using PWM 10 What: /sys/class/pwm/pwmchip<N>/ 15 A /sys/class/pwm/pwmchipN directory is created for each 16 probed PWM controller/chip where N is the base of the 17 PWM chip. 19 What: /sys/class/pwm/pwmchip<N>/npwm 24 The number of PWM channels supported by the PWM chip. 26 What: /sys/class/pwm/pwmchip<N>/export [all …]
|