<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/pwm, branch v3.11.4</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>pwm: pwm-tiehrpwm: Use clk_enable/disable instead clk_prepare/unprepare.</title>
<updated>2013-06-26T21:23:54+00:00</updated>
<author>
<name>Marek Belisko</name>
<email>marek.belisko@gmail.com</email>
</author>
<published>2013-06-26T12:38:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=b388f15fd14c3ae62deb9a059464aa99b524ea4a'/>
<id>b388f15fd14c3ae62deb9a059464aa99b524ea4a</id>
<content type='text'>
This was found when using pwm-led on am33xx and enable
heartbeat trigger.

[  808.624876] =================================
[  808.629443] [ INFO: inconsistent lock state ]
[  808.634021] 3.9.0 #2 Not tainted
[  808.637415] ---------------------------------
[  808.641981] inconsistent {SOFTIRQ-ON-W} -&gt; {IN-SOFTIRQ-W} usage.
[  808.648288] swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
[  808.653494]  (prepare_lock){+.?.+.}, at: [&lt;c027c211&gt;] clk_unprepare+0x15/0x24
[  808.661040] {SOFTIRQ-ON-W} state was registered at:
[  808.666155]   [&lt;c004ec4d&gt;] __lock_acquire+0x411/0x824
[  808.671465]   [&lt;c004f359&gt;] lock_acquire+0x41/0x50
[  808.676412]   [&lt;c039ee9d&gt;] mutex_lock_nested+0x31/0x1d8
[  808.681912]   [&lt;c027c275&gt;] clk_prepare+0x15/0x28
[  808.686764]   [&lt;c0590c6b&gt;] _init+0x117/0x1e0
[  808.691256]   [&lt;c0019ef9&gt;] omap_hwmod_for_each+0x29/0x3c
[  808.696842]   [&lt;c0591107&gt;] __omap_hwmod_setup_all+0x17/0x2c
[  808.702696]   [&lt;c0008653&gt;] do_one_initcall+0xc3/0x10c
[  808.708017]   [&lt;c058a627&gt;] kernel_init_freeable+0xa7/0x134
[  808.713778]   [&lt;c039a543&gt;] kernel_init+0x7/0x98
[  808.718544]   [&lt;c000cd95&gt;] ret_from_fork+0x11/0x3c
[  808.723583] irq event stamp: 1379172
[  808.727328] hardirqs last  enabled at (1379172): [&lt;c03a0759&gt;] _raw_spin_unlock_irqrestore+0x21/0x30
[  808.736828] hardirqs last disabled at (1379171): [&lt;c03a03c3&gt;] _raw_spin_lock_irqsave+0x13/0x38
[  808.745876] softirqs last  enabled at (1379164): [&lt;c002ae5d&gt;] irq_enter+0x49/0x4c
[  808.753747] softirqs last disabled at (1379165): [&lt;c002aec3&gt;] irq_exit+0x63/0x88
[  808.761518]
[  808.761518] other info that might help us debug this:
[  808.768373]  Possible unsafe locking scenario:
[  808.768373]
[  808.774578]        CPU0
[  808.777141]        ----
[  808.779705]   lock(prepare_lock);
[  808.783186]   &lt;Interrupt&gt;
[  808.785929]     lock(prepare_lock);
[  808.789595]
[  808.789595]  *** DEADLOCK ***
[  808.789595]
[  808.795805] 1 lock held by swapper/0:
[  808.799643]  #0:  (((&amp;heartbeat_data-&gt;timer))){+.-...}, at: [&lt;c002e204&gt;] call_timer_fn+0x0/0x90
[  808.808814]
[  808.808814] stack backtrace:
[  808.813402] [&lt;c000ff19&gt;] (unwind_backtrace+0x1/0x98) from [&lt;c039bd75&gt;] (print_usage_bug.part.25+0x16d/0x1cc)
[  808.823721] [&lt;c039bd75&gt;] (print_usage_bug.part.25+0x16d/0x1cc) from [&lt;c004e595&gt;] (mark_lock+0x18d/0x434)
[  808.833669] [&lt;c004e595&gt;] (mark_lock+0x18d/0x434) from [&lt;c004ec1d&gt;] (__lock_acquire+0x3e1/0x824)
[  808.842803] [&lt;c004ec1d&gt;] (__lock_acquire+0x3e1/0x824) from [&lt;c004f359&gt;] (lock_acquire+0x41/0x50)
[  808.852031] [&lt;c004f359&gt;] (lock_acquire+0x41/0x50) from [&lt;c039ee9d&gt;] (mutex_lock_nested+0x31/0x1d8)
[  808.861433] [&lt;c039ee9d&gt;] (mutex_lock_nested+0x31/0x1d8) from [&lt;c027c211&gt;] (clk_unprepare+0x15/0x24)
[  808.870930] [&lt;c027c211&gt;] (clk_unprepare+0x15/0x24) from [&lt;c019f7bf&gt;] (ehrpwm_pwm_disable+0x5f/0x80)
[  808.880431] [&lt;c019f7bf&gt;] (ehrpwm_pwm_disable+0x5f/0x80) from [&lt;c019f29f&gt;] (pwm_disable+0x27/0x28)
[  808.889751] [&lt;c019f29f&gt;] (pwm_disable+0x27/0x28) from [&lt;c026f8f3&gt;] (led_heartbeat_function+0x3f/0xb0)
[  808.899431] [&lt;c026f8f3&gt;] (led_heartbeat_function+0x3f/0xb0) from [&lt;c002e249&gt;] (call_timer_fn+0x45/0x90)
[  808.909288] [&lt;c002e249&gt;] (call_timer_fn+0x45/0x90) from [&lt;c002e399&gt;] (run_timer_softirq+0x105/0x17c)
[  808.918884] [&lt;c002e399&gt;] (run_timer_softirq+0x105/0x17c) from [&lt;c002abc5&gt;] (__do_softirq+0xa5/0x150)
[  808.928486] [&lt;c002abc5&gt;] (__do_softirq+0xa5/0x150) from [&lt;c002aec3&gt;] (irq_exit+0x63/0x88)
[  808.937098] [&lt;c002aec3&gt;] (irq_exit+0x63/0x88) from [&lt;c000d599&gt;] (handle_IRQ+0x21/0x54)
[  808.945415] [&lt;c000d599&gt;] (handle_IRQ+0x21/0x54) from [&lt;c0008495&gt;] (omap3_intc_handle_irq+0x5d/0x68)
[  808.954900] [&lt;c0008495&gt;] (omap3_intc_handle_irq+0x5d/0x68) from [&lt;c000c7ff&gt;] (__irq_svc+0x3f/0x64)
[  808.964287] Exception stack(0xc05b1f68 to 0xc05b1fb0)
[  808.969587] 1f60:                   00000001 00000001 00000000 00000000 c05b0000 c0619748
[  808.978158] 1f80: c05b0000 c05b0000 c0619748 413fc082 00000000 00000000 01000000 c05b1fb0
[  808.986719] 1fa0: c004f989 c000d6f0 400f0033 ffffffff
[  808.992024] [&lt;c000c7ff&gt;] (__irq_svc+0x3f/0x64) from [&lt;c000d6f0&gt;] (cpu_idle+0x60/0x98)
[  809.000250] [&lt;c000d6f0&gt;] (cpu_idle+0x60/0x98) from [&lt;c058a535&gt;] (start_kernel+0x1e9/0x234)

Remove non atomic clk api calls and use only atomic for enable/disable because
can be called from atomic context (led_heartbeat_function is timer callback).

Signed-off-by: Marek Belisko &lt;marek.belisko@streamunlimited.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This was found when using pwm-led on am33xx and enable
heartbeat trigger.

[  808.624876] =================================
[  808.629443] [ INFO: inconsistent lock state ]
[  808.634021] 3.9.0 #2 Not tainted
[  808.637415] ---------------------------------
[  808.641981] inconsistent {SOFTIRQ-ON-W} -&gt; {IN-SOFTIRQ-W} usage.
[  808.648288] swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
[  808.653494]  (prepare_lock){+.?.+.}, at: [&lt;c027c211&gt;] clk_unprepare+0x15/0x24
[  808.661040] {SOFTIRQ-ON-W} state was registered at:
[  808.666155]   [&lt;c004ec4d&gt;] __lock_acquire+0x411/0x824
[  808.671465]   [&lt;c004f359&gt;] lock_acquire+0x41/0x50
[  808.676412]   [&lt;c039ee9d&gt;] mutex_lock_nested+0x31/0x1d8
[  808.681912]   [&lt;c027c275&gt;] clk_prepare+0x15/0x28
[  808.686764]   [&lt;c0590c6b&gt;] _init+0x117/0x1e0
[  808.691256]   [&lt;c0019ef9&gt;] omap_hwmod_for_each+0x29/0x3c
[  808.696842]   [&lt;c0591107&gt;] __omap_hwmod_setup_all+0x17/0x2c
[  808.702696]   [&lt;c0008653&gt;] do_one_initcall+0xc3/0x10c
[  808.708017]   [&lt;c058a627&gt;] kernel_init_freeable+0xa7/0x134
[  808.713778]   [&lt;c039a543&gt;] kernel_init+0x7/0x98
[  808.718544]   [&lt;c000cd95&gt;] ret_from_fork+0x11/0x3c
[  808.723583] irq event stamp: 1379172
[  808.727328] hardirqs last  enabled at (1379172): [&lt;c03a0759&gt;] _raw_spin_unlock_irqrestore+0x21/0x30
[  808.736828] hardirqs last disabled at (1379171): [&lt;c03a03c3&gt;] _raw_spin_lock_irqsave+0x13/0x38
[  808.745876] softirqs last  enabled at (1379164): [&lt;c002ae5d&gt;] irq_enter+0x49/0x4c
[  808.753747] softirqs last disabled at (1379165): [&lt;c002aec3&gt;] irq_exit+0x63/0x88
[  808.761518]
[  808.761518] other info that might help us debug this:
[  808.768373]  Possible unsafe locking scenario:
[  808.768373]
[  808.774578]        CPU0
[  808.777141]        ----
[  808.779705]   lock(prepare_lock);
[  808.783186]   &lt;Interrupt&gt;
[  808.785929]     lock(prepare_lock);
[  808.789595]
[  808.789595]  *** DEADLOCK ***
[  808.789595]
[  808.795805] 1 lock held by swapper/0:
[  808.799643]  #0:  (((&amp;heartbeat_data-&gt;timer))){+.-...}, at: [&lt;c002e204&gt;] call_timer_fn+0x0/0x90
[  808.808814]
[  808.808814] stack backtrace:
[  808.813402] [&lt;c000ff19&gt;] (unwind_backtrace+0x1/0x98) from [&lt;c039bd75&gt;] (print_usage_bug.part.25+0x16d/0x1cc)
[  808.823721] [&lt;c039bd75&gt;] (print_usage_bug.part.25+0x16d/0x1cc) from [&lt;c004e595&gt;] (mark_lock+0x18d/0x434)
[  808.833669] [&lt;c004e595&gt;] (mark_lock+0x18d/0x434) from [&lt;c004ec1d&gt;] (__lock_acquire+0x3e1/0x824)
[  808.842803] [&lt;c004ec1d&gt;] (__lock_acquire+0x3e1/0x824) from [&lt;c004f359&gt;] (lock_acquire+0x41/0x50)
[  808.852031] [&lt;c004f359&gt;] (lock_acquire+0x41/0x50) from [&lt;c039ee9d&gt;] (mutex_lock_nested+0x31/0x1d8)
[  808.861433] [&lt;c039ee9d&gt;] (mutex_lock_nested+0x31/0x1d8) from [&lt;c027c211&gt;] (clk_unprepare+0x15/0x24)
[  808.870930] [&lt;c027c211&gt;] (clk_unprepare+0x15/0x24) from [&lt;c019f7bf&gt;] (ehrpwm_pwm_disable+0x5f/0x80)
[  808.880431] [&lt;c019f7bf&gt;] (ehrpwm_pwm_disable+0x5f/0x80) from [&lt;c019f29f&gt;] (pwm_disable+0x27/0x28)
[  808.889751] [&lt;c019f29f&gt;] (pwm_disable+0x27/0x28) from [&lt;c026f8f3&gt;] (led_heartbeat_function+0x3f/0xb0)
[  808.899431] [&lt;c026f8f3&gt;] (led_heartbeat_function+0x3f/0xb0) from [&lt;c002e249&gt;] (call_timer_fn+0x45/0x90)
[  808.909288] [&lt;c002e249&gt;] (call_timer_fn+0x45/0x90) from [&lt;c002e399&gt;] (run_timer_softirq+0x105/0x17c)
[  808.918884] [&lt;c002e399&gt;] (run_timer_softirq+0x105/0x17c) from [&lt;c002abc5&gt;] (__do_softirq+0xa5/0x150)
[  808.928486] [&lt;c002abc5&gt;] (__do_softirq+0xa5/0x150) from [&lt;c002aec3&gt;] (irq_exit+0x63/0x88)
[  808.937098] [&lt;c002aec3&gt;] (irq_exit+0x63/0x88) from [&lt;c000d599&gt;] (handle_IRQ+0x21/0x54)
[  808.945415] [&lt;c000d599&gt;] (handle_IRQ+0x21/0x54) from [&lt;c0008495&gt;] (omap3_intc_handle_irq+0x5d/0x68)
[  808.954900] [&lt;c0008495&gt;] (omap3_intc_handle_irq+0x5d/0x68) from [&lt;c000c7ff&gt;] (__irq_svc+0x3f/0x64)
[  808.964287] Exception stack(0xc05b1f68 to 0xc05b1fb0)
[  808.969587] 1f60:                   00000001 00000001 00000000 00000000 c05b0000 c0619748
[  808.978158] 1f80: c05b0000 c05b0000 c0619748 413fc082 00000000 00000000 01000000 c05b1fb0
[  808.986719] 1fa0: c004f989 c000d6f0 400f0033 ffffffff
[  808.992024] [&lt;c000c7ff&gt;] (__irq_svc+0x3f/0x64) from [&lt;c000d6f0&gt;] (cpu_idle+0x60/0x98)
[  809.000250] [&lt;c000d6f0&gt;] (cpu_idle+0x60/0x98) from [&lt;c058a535&gt;] (start_kernel+0x1e9/0x234)

Remove non atomic clk api calls and use only atomic for enable/disable because
can be called from atomic context (led_heartbeat_function is timer callback).

Signed-off-by: Marek Belisko &lt;marek.belisko@streamunlimited.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>pwm: pca9685: Fix wrong argument to set MODE1_SLEEP bit</title>
<updated>2013-06-26T21:23:54+00:00</updated>
<author>
<name>Axel Lin</name>
<email>axel.lin@ingics.com</email>
</author>
<published>2013-06-19T17:27:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=fed1bf8dc76cd102892379fce59b9ba237afd438'/>
<id>fed1bf8dc76cd102892379fce59b9ba237afd438</id>
<content type='text'>
Current code actually does not set MODE1_SLEEP bit because the new value for
bitmask (0x1) is wrong. To set MODE1_SLEEP bit, we should pass MODE1_SLEEP
as the new value for bitmask.

Signed-off-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Reviewed-by: Steffen Trumtrar &lt;s.trumtrar@pengutronix.de&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Current code actually does not set MODE1_SLEEP bit because the new value for
bitmask (0x1) is wrong. To set MODE1_SLEEP bit, we should pass MODE1_SLEEP
as the new value for bitmask.

Signed-off-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Reviewed-by: Steffen Trumtrar &lt;s.trumtrar@pengutronix.de&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>pwm: renesas-tpu: Add MODULE_ALIAS to make module auto loading work</title>
<updated>2013-06-26T09:48:26+00:00</updated>
<author>
<name>Axel Lin</name>
<email>axel.lin@ingics.com</email>
</author>
<published>2013-06-25T16:25:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=71077bc8db67f560453d62c48e3bec467ec6b37f'/>
<id>71077bc8db67f560453d62c48e3bec467ec6b37f</id>
<content type='text'>
This driver can be built as module, add MODULE_ALIAS to make module auto loading
work.

Signed-off-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This driver can be built as module, add MODULE_ALIAS to make module auto loading
work.

Signed-off-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>pwm: renesas-tpu: fix return value check in tpu_probe()</title>
<updated>2013-06-25T10:20:06+00:00</updated>
<author>
<name>Wei Yongjun</name>
<email>yongjun_wei@trendmicro.com.cn</email>
</author>
<published>2013-06-25T02:09:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=00cf99ee00c9f1241359c8ee5ca9230318e27a57'/>
<id>00cf99ee00c9f1241359c8ee5ca9230318e27a57</id>
<content type='text'>
In case of error, the function devm_ioremap_resource() returns ERR_PTR()
and never returns NULL. The NULL test in the return value check should
be replaced with IS_ERR().

Signed-off-by: Wei Yongjun &lt;yongjun_wei@trendmicro.com.cn&gt;
Reviewed-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Acked-by: Laurent Pinchart &lt;laurent.pinchart@ideasonboard.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In case of error, the function devm_ioremap_resource() returns ERR_PTR()
and never returns NULL. The NULL test in the return value check should
be replaced with IS_ERR().

Signed-off-by: Wei Yongjun &lt;yongjun_wei@trendmicro.com.cn&gt;
Reviewed-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Acked-by: Laurent Pinchart &lt;laurent.pinchart@ideasonboard.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>pwm: Add Renesas TPU PWM driver</title>
<updated>2013-06-21T09:33:28+00:00</updated>
<author>
<name>Laurent Pinchart</name>
<email>laurent.pinchart+renesas@ideasonboard.com</email>
</author>
<published>2013-06-13T16:54:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=99b82abb0a35b07310ea6334257829af168c8e08'/>
<id>99b82abb0a35b07310ea6334257829af168c8e08</id>
<content type='text'>
The Timer Pulse Unit (TPU) is a 4-channels 16-bit timer used to generate
waveforms. This driver exposes PWM functions through the PWM API for
other drivers to use.

The code is loosely based on the leds-renesas-tpu driver by Magnus Damm
and the TPU PWM driver shipped in the Armadillo EVA 800 kernel sources.

Signed-off-by: Laurent Pinchart &lt;laurent.pinchart+renesas@ideasonboard.com&gt;
Signed-off-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Tested-by: Simon Horman &lt;horms@verge.net.au&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The Timer Pulse Unit (TPU) is a 4-channels 16-bit timer used to generate
waveforms. This driver exposes PWM functions through the PWM API for
other drivers to use.

The code is loosely based on the leds-renesas-tpu driver by Magnus Damm
and the TPU PWM driver shipped in the Armadillo EVA 800 kernel sources.

Signed-off-by: Laurent Pinchart &lt;laurent.pinchart+renesas@ideasonboard.com&gt;
Signed-off-by: Axel Lin &lt;axel.lin@ingics.com&gt;
Tested-by: Simon Horman &lt;horms@verge.net.au&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>pwm: Add sysfs interface</title>
<updated>2013-06-21T09:32:51+00:00</updated>
<author>
<name>H Hartley Sweeten</name>
<email>hartleys@visionengravers.com</email>
</author>
<published>2013-06-11T17:38:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=76abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3d'/>
<id>76abbdde2d95a3807d0dc6bf9f84d03d0dbd4f3d</id>
<content type='text'>
Add a simple sysfs interface to the generic PWM framework.

  /sys/class/pwm/
  `-- pwmchipN/           for each PWM chip
      |-- export          (w/o) ask the kernel to export a PWM channel
      |-- npwm            (r/o) number of PWM channels in this PWM chip
      |-- pwmX/           for each exported PWM channel
      |   |-- duty_cycle  (r/w) duty cycle (in nanoseconds)
      |   |-- enable      (r/w) enable/disable PWM
      |   |-- period      (r/w) period (in nanoseconds)
      |   `-- polarity    (r/w) polarity of PWM (normal/inversed)
      `-- unexport        (w/o) return a PWM channel to the kernel

Based on work by Lars Poeschel.

Signed-off-by: H Hartley Sweeten &lt;hsweeten@visionengravers.com&gt;
Cc: Thierry Reding &lt;thierry.reding@gmail.com&gt;
Cc: Lars Poeschel &lt;poeschel@lemonage.de&gt;
Cc: Ryan Mallon &lt;rmallon@gmail.com&gt;
Cc: Rob Landley &lt;rob@landley.net&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add a simple sysfs interface to the generic PWM framework.

  /sys/class/pwm/
  `-- pwmchipN/           for each PWM chip
      |-- export          (w/o) ask the kernel to export a PWM channel
      |-- npwm            (r/o) number of PWM channels in this PWM chip
      |-- pwmX/           for each exported PWM channel
      |   |-- duty_cycle  (r/w) duty cycle (in nanoseconds)
      |   |-- enable      (r/w) enable/disable PWM
      |   |-- period      (r/w) period (in nanoseconds)
      |   `-- polarity    (r/w) polarity of PWM (normal/inversed)
      `-- unexport        (w/o) return a PWM channel to the kernel

Based on work by Lars Poeschel.

Signed-off-by: H Hartley Sweeten &lt;hsweeten@visionengravers.com&gt;
Cc: Thierry Reding &lt;thierry.reding@gmail.com&gt;
Cc: Lars Poeschel &lt;poeschel@lemonage.de&gt;
Cc: Ryan Mallon &lt;rmallon@gmail.com&gt;
Cc: Rob Landley &lt;rob@landley.net&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>pwm: Fill in missing .owner fields</title>
<updated>2013-06-12T11:18:29+00:00</updated>
<author>
<name>Thierry Reding</name>
<email>thierry.reding@gmail.com</email>
</author>
<published>2013-06-12T11:18:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=3dd0a909479c1d372341d749b4ff94cd638b57da'/>
<id>3dd0a909479c1d372341d749b4ff94cd638b57da</id>
<content type='text'>
Some drivers don't set the .owner fields of the struct device_driver or
struct pwm_ops, which causes the module usage count to become wrong.

Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some drivers don't set the .owner fields of the struct device_driver or
struct pwm_ops, which causes the module usage count to become wrong.

Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>pwm: add pca9685 driver</title>
<updated>2013-06-12T11:13:18+00:00</updated>
<author>
<name>Steffen Trumtrar</name>
<email>s.trumtrar@pengutronix.de</email>
</author>
<published>2013-05-30T07:50:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=88b613e6234def882b0b601bf831bf89af2e27f0'/>
<id>88b613e6234def882b0b601bf831bf89af2e27f0</id>
<content type='text'>
Add pwm driver for the NXP pca9685 16 channel pwm-led controller.

The driver is really barebones at this stage. E.g. the OE' pin and
therefore the corresponding registers are not supported.
The driver was tested on a HW where this pin is tied to GND.

Signed-off-by: Steffen Trumtrar &lt;s.trumtrar@pengutronix.de&gt;
[thierry.reding@gmail.com: style and whitespace cleanups]
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add pwm driver for the NXP pca9685 16 channel pwm-led controller.

The driver is really barebones at this stage. E.g. the OE' pin and
therefore the corresponding registers are not supported.
The driver was tested on a HW where this pin is tied to GND.

Signed-off-by: Steffen Trumtrar &lt;s.trumtrar@pengutronix.de&gt;
[thierry.reding@gmail.com: style and whitespace cleanups]
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>pwm: atmel-tcb: prepare clk before calling enable</title>
<updated>2013-06-12T10:51:44+00:00</updated>
<author>
<name>Boris BREZILLON</name>
<email>b.brezillon@overkiz.com</email>
</author>
<published>2013-06-07T16:26:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=8796f9c5656dedd186eda88c07db6a58d1985938'/>
<id>8796f9c5656dedd186eda88c07db6a58d1985938</id>
<content type='text'>
Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
avoid common clk framework warnings.

Signed-off-by: Boris BREZILLON &lt;b.brezillon@overkiz.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
avoid common clk framework warnings.

Signed-off-by: Boris BREZILLON &lt;b.brezillon@overkiz.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>pwm: devm: alloc correct pointer size</title>
<updated>2013-06-10T10:50:10+00:00</updated>
<author>
<name>Wolfram Sang</name>
<email>wsa@the-dreams.de</email>
</author>
<published>2013-06-03T20:27:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=77f0b9d2ff0c8ff7b36033dfc5b29dab7a0ebd9a'/>
<id>77f0b9d2ff0c8ff7b36033dfc5b29dab7a0ebd9a</id>
<content type='text'>
The allocated object should be the size of what the pointer is pointing
to and not the size of the pointer itself.

Signed-off-by: Wolfram Sang &lt;wsa@the-dreams.de&gt;
Reviewed-by: Andy Shevchenko &lt;andy.shevchenko@gmail.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The allocated object should be the size of what the pointer is pointing
to and not the size of the pointer itself.

Signed-off-by: Wolfram Sang &lt;wsa@the-dreams.de&gt;
Reviewed-by: Andy Shevchenko &lt;andy.shevchenko@gmail.com&gt;
Signed-off-by: Thierry Reding &lt;thierry.reding@gmail.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
