Re: [PATCH v5] pwm: atmel: add Timer Counter Block PWM driver

2013-01-09 Thread Boris BREZILLON
On 09/01/2013 08:46, Thierry Reding wrote:
> On Tue, Jan 08, 2013 at 04:36:42PM +0100, Boris BREZILLON wrote:
>> 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
>>
>> Signed-off-by: Boris BREZILLON 
>> ---
>> 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 10 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
> 
> Applied with minor changes to the commit message, thanks.
> 
> Thierry
> 

Thanks
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v5] pwm: atmel: add Timer Counter Block PWM driver

2013-01-09 Thread Boris BREZILLON
On 09/01/2013 08:46, Thierry Reding wrote:
 On Tue, Jan 08, 2013 at 04:36:42PM +0100, Boris BREZILLON wrote:
 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

 Signed-off-by: Boris BREZILLON linux-...@overkiz.com
 ---
 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 10 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
 
 Applied with minor changes to the commit message, thanks.
 
 Thierry
 

Thanks
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v5] pwm: atmel: add Timer Counter Block PWM driver

2013-01-08 Thread Thierry Reding
On Tue, Jan 08, 2013 at 04:36:42PM +0100, Boris BREZILLON wrote:
> 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
> 
> Signed-off-by: Boris BREZILLON 
> ---
> 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 10 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

Applied with minor changes to the commit message, thanks.

Thierry


pgpAqii8I_kc6.pgp
Description: PGP signature


[PATCH v5] pwm: atmel: add Timer Counter Block PWM driver

2013-01-08 Thread 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 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

Signed-off-by: Boris BREZILLON 
---
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 10 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

diff --git a/Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt 
b/Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt
new file mode 100644
index 000..de0eaed
--- /dev/null
+++ b/Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt
@@ -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>;
+};
diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig
index e513cd9..10b6afc 100644
--- a/drivers/pwm/Kconfig
+++ b/drivers/pwm/Kconfig
@@ -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
diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile
index 62a2963..94ba21e 100644
--- a/drivers/pwm/Makefile
+++ b/drivers/pwm/Makefile
@@ -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
diff --git a/drivers/pwm/pwm-atmel-tcb.c b/drivers/pwm/pwm-atmel-tcb.c
new file mode 100644
index 000..16cb530
--- /dev/null
+++ b/drivers/pwm/pwm-atmel-tcb.c
@@ -0,0 +1,445 @@
+/*
+ * Copyright (C) Overkiz SAS 2012
+ *
+ * Author: Boris BREZILLON 
+ * License terms: GNU General Public License (GPL) version 2
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define NPWM   6
+
+#define ATMEL_TC_ACMR_MASK (ATMEL_TC_ACPA | ATMEL_TC_ACPC |

[PATCH v5] pwm: atmel: add Timer Counter Block PWM driver

2013-01-08 Thread 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 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

Signed-off-by: Boris BREZILLON linux-...@overkiz.com
---
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 10 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

diff --git a/Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt 
b/Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt
new file mode 100644
index 000..de0eaed
--- /dev/null
+++ b/Documentation/devicetree/bindings/pwm/atmel-tcb-pwm.txt
@@ -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;
+};
diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig
index e513cd9..10b6afc 100644
--- a/drivers/pwm/Kconfig
+++ b/drivers/pwm/Kconfig
@@ -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
diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile
index 62a2963..94ba21e 100644
--- a/drivers/pwm/Makefile
+++ b/drivers/pwm/Makefile
@@ -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
diff --git a/drivers/pwm/pwm-atmel-tcb.c b/drivers/pwm/pwm-atmel-tcb.c
new file mode 100644
index 000..16cb530
--- /dev/null
+++ b/drivers/pwm/pwm-atmel-tcb.c
@@ -0,0 +1,445 @@
+/*
+ * Copyright (C) Overkiz SAS 2012
+ *
+ * Author: Boris BREZILLON b.brezil...@overkiz.com
+ * License terms: GNU General Public License (GPL) version 2
+ */
+
+#include linux/module.h
+#include linux/init.h
+#include linux/clocksource.h
+#include linux/clockchips.h
+#include linux/interrupt.h
+#include linux/irq.h
+
+#include linux/clk.h
+#include linux/err.h
+#include linux/ioport.h

Re: [PATCH v5] pwm: atmel: add Timer Counter Block PWM driver

2013-01-08 Thread Thierry Reding
On Tue, Jan 08, 2013 at 04:36:42PM +0100, Boris BREZILLON wrote:
 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
 
 Signed-off-by: Boris BREZILLON linux-...@overkiz.com
 ---
 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 10 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

Applied with minor changes to the commit message, thanks.

Thierry


pgpAqii8I_kc6.pgp
Description: PGP signature