pwm: atmel: add Timer Counter Block PWM driver
Subsystems (3)
PATCH v5 1/1 pwm: atmel: add Timer Counter Block PWM driver
Hi,
This patch adds a PWM driver based on Atmel Timer Counter Block. Timer Counter Block is used in Waveform generator mode.
A Timer Counter Block provides up to 6 PWM devices grouped by 2:
* group 0 = PWM 0 and 1
* group 1 = PWM 2 and 3
* group 2 = PMW 4 and 5
PWM devices in a given group must be configured with the same period value.
If a PWM device in a group tries to change the period value and the other device is already configured with a different value an error will be returned.
This driver requires device tree support.
The Timer Counter Block number used to create a PWM chip is given by tc-block field in an "atmel,tcb-pwm" compatible node.
This patch was tested on kizbox board (at91sam9g20 SoC) with pwm-leds.
Regards,
Boris
---
Changes since v1:
- Fix device tree binding Documentation
- Fix Kconfig issues (missing OF dependency, deprecated HAVE_PWM select, ...)
- Fix various coding style issues.
- Cleanup code and add some comments.
Changes since v2:
- Replace kzalloc/kfree with managed versions (devm_kzalloc/devm_kfree).
- Add one cell to device tree binding to support polarity flag.
- Replace min computation (2 div -> 1 mul + 1 div).
Changes since v3:
- Fix device tree binding Documentation
- Fix Kconfig description
- Fix coding style issues (function parameters alignment)
- Replace 1000000000 value with NSEC_PER_SEC macro
- Get rid of newcmr variable in enable/disable functions
- Remove unneeded devm_kfree
- Add missing atmel_tc_free
Changes since v4:
- Add missing comments
- Fix coding style issues (multi-line error string)
- Fix wrong MODULE_DEVICE_TABLE setting
- Remove unneeded MODULE_ALIAS declaration
.../devicetree/bindings/pwm/atmel-tcb-pwm.txt | 18 + drivers/pwm/Kconfig | 12 + drivers/pwm/Makefile | 1 + drivers/pwm/pwm-atmel-tcb.c | 445 ++++++++++++++++++++ 4 files changed, 476 insertions(+), 0 deletions(-) create mode 100644 Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt create mode 100644 drivers/pwm/pwm-atmel-tcb.c
Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt new file +18 -0
@@ -0,0 +1,18 @@ +Atmel TCB PWM controller + +Required properties: +- compatible: should be "atmel,tcb-pwm" +- #pwm-cells: Should be 3. The first cell specifies the per-chip index + of the PWM to use, the second cell is the period in nanoseconds and + bit 0 in the third cell is used to encode the polarity of PWM output. + Set bit 0 of the third cell in PWM specifier to 1 for inverse polarity & + set to 0 for normal polarity. +- tc-block: The Timer Counter block to use as a PWM chip. + +Example: + +pwm { + compatible = "atmel,tcb-pwm"; + #pwm-cells = <3>; + tc-block = <1>; +};
drivers/pwm/Kconfig +12 -0
@@ -37,6 +37,18 @@ config PWM_AB8500 To compile this driver as a module, choose M here: the module will be called pwm-ab8500. +config PWM_ATMEL_TCB + tristate "TC Block PWM" + depends on ATMEL_TCLIB && OF + help + Generic PWM framework driver for Atmel Timer Counter Block. + + A Timer Counter Block provides 6 PWM devices grouped by 2. + Devices in a given group must have the same period. + + To compile this driver as a module, choose M here: the module + will be called pwm-atmel-tcb. + config PWM_BFIN tristate "Blackfin PWM support" depends on BFIN_GPTIMERS
drivers/pwm/Makefile +1 -0
@@ -1,5 +1,6 @@ obj-$(CONFIG_PWM) += core.o obj-$(CONFIG_PWM_AB8500) += pwm-ab8500.o +obj-$(CONFIG_PWM_ATMEL_TCB) += pwm-atmel-tcb.o obj-$(CONFIG_PWM_BFIN) += pwm-bfin.o obj-$(CONFIG_PWM_IMX) += pwm-imx.o obj-$(CONFIG_PWM_JZ4740) += pwm-jz4740.o
drivers/pwm/pwm-atmel-tcb.c new file +445 -0
445 lines not on this page · raw message
Signature · 1 line
1.7.0.4
Quoted 58 lines · Boris BREZILLON
Hi,
This patch adds a PWM driver based on Atmel Timer Counter Block. Timer Counter Block is used in Waveform generator mode.
A Timer Counter Block provides up to 6 PWM devices grouped by 2:
* group 0 = PWM 0 and 1
* group 1 = PWM 2 and 3
* group 2 = PMW 4 and 5PWM devices in a given group must be configured with the same period value.
If a PWM device in a group tries to change the period value and the other device is already configured with a different value an error will be returned.This driver requires device tree support.
The Timer Counter Block number used to create a PWM chip is given by tc-block field in an "atmel,tcb-pwm" compatible node.This patch was tested on kizbox board (at91sam9g20 SoC) with pwm-leds.
Regards,
Boris
Signed-off-by Boris BREZILLON <[email protected]>---
Changes since v1:
- Fix device tree binding Documentation
- FixKconfigissues (missing OF dependency, deprecatedHAVE_PWMselect, ...)
- Fix various coding style issues.
- Cleanup code and add some comments.Changes since v2:
- Replace kzalloc/kfree with managed versions (devm_kzalloc/devm_kfree).
- Add one cell to device tree binding to support polarity flag.
- Replace min computation (2 div -> 1 mul + 1 div).Changes since v3:
- Fix device tree binding Documentation
- FixKconfigdescription
- Fix coding style issues (function parameters alignment)
- Replace 1000000000 value withNSEC_PER_SECmacro
- Get rid of newcmr variable in enable/disable functions
- Remove unneededdevm_kfree
- Add missingatmel_tc_freeChanges since v4:
- Add missing comments
- Fix coding style issues (multi-line error string)
- Fix wrongMODULE_DEVICE_TABLEsetting
- Remove unneededMODULE_ALIASdeclaration
Quoted 7 lines
.../devicetree/bindings/pwm/atmel-tcb-pwm.txt | 18 + drivers/pwm/Kconfig | 12 + drivers/pwm/Makefile | 1 + drivers/pwm/pwm-atmel-tcb.c | 445 ++++++++++++++++++++ 4 files changed, 476 insertions(+), 0 deletions(-) create mode 100644 Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt create mode 100644 drivers/pwm/pwm-atmel-tcb.c
Applied with minor changes to the commit message, thanks.
Thierry
Quoted 67 lines · Thierry Reding
Quoted 58 lines · Boris BREZILLON
Hi,
This patch adds a PWM driver based on Atmel Timer Counter Block. Timer Counter Block is used in Waveform generator mode.
A Timer Counter Block provides up to 6 PWM devices grouped by 2:
* group 0 = PWM 0 and 1
* group 1 = PWM 2 and 3
* group 2 = PMW 4 and 5PWM devices in a given group must be configured with the same period value.
If a PWM device in a group tries to change the period value and the other device is already configured with a different value an error will be returned.This driver requires device tree support.
The Timer Counter Block number used to create a PWM chip is given by tc-block field in an "atmel,tcb-pwm" compatible node.This patch was tested on kizbox board (at91sam9g20 SoC) with pwm-leds.
Regards,
Boris
Signed-off-by Boris BREZILLON <[email protected]>---
Changes since v1:
- Fix device tree binding Documentation
- FixKconfigissues (missing OF dependency, deprecatedHAVE_PWMselect, ...)
- Fix various coding style issues.
- Cleanup code and add some comments.Changes since v2:
- Replace kzalloc/kfree with managed versions (devm_kzalloc/devm_kfree).
- Add one cell to device tree binding to support polarity flag.
- Replace min computation (2 div -> 1 mul + 1 div).Changes since v3:
- Fix device tree binding Documentation
- FixKconfigdescription
- Fix coding style issues (function parameters alignment)
- Replace 1000000000 value withNSEC_PER_SECmacro
- Get rid of newcmr variable in enable/disable functions
- Remove unneededdevm_kfree
- Add missingatmel_tc_freeChanges since v4:
- Add missing comments
- Fix coding style issues (multi-line error string)
- Fix wrongMODULE_DEVICE_TABLEsetting
- Remove unneededMODULE_ALIASdeclarationQuoted 7 lines
.../devicetree/bindings/pwm/atmel-tcb-pwm.txt | 18 + drivers/pwm/Kconfig | 12 + drivers/pwm/Makefile | 1 + drivers/pwm/pwm-atmel-tcb.c | 445 ++++++++++++++++++++ 4 files changed, 476 insertions(+), 0 deletions(-) create mode 100644 Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt create mode 100644 drivers/pwm/pwm-atmel-tcb.c
Quoted 4 lines
Applied with minor changes to the commit message, thanks.
Thierry
Thanks