* [PATCH v10 0/1] Fix bugs in kona pwm driver and pwm core
@ 2015-10-17 0:40 Jonathan Richardson
2015-10-17 0:40 ` [PATCH v10 1/1] pwm: core: Set enable state properly on failed call to enable Jonathan Richardson
0 siblings, 1 reply; 3+ messages in thread
From: Jonathan Richardson @ 2015-10-17 0:40 UTC (permalink / raw)
To: Tim Kryger, Dmitry Torokhov, Anatol Pomazau, Arun Ramamurthy,
Thierry Reding
Cc: Scott Branden, Jonathan Richardson, bcm-kernel-feedback-list,
linux-kernel, linux-pwm
Fixes a bug in the pwm core where the enabled state was incorrect on failed
calls to enable.
Changes from v9:
- pwm_set_polarity() enabled check is protected using the same mutex as
pwm_enable() in pwm core. Implemented as suggested by Thierry.
Changes from v8:
- Accepted patches not included. Patch to introduce debug statements to config
in kona pwm driver not included - will be addressed later.
- Added mutex to pwm core enable function to prevent potential concurrency
issue, as suggested by Thierry.
- Fixed commit message for kona pwm changes. Also changed wording in comments
from enable to trigger.
Changes from v7:
- Polarity changes take effect immediately instead of being deferred until
enable is called.
Changes from v6:
- Move new debugging info for duty cycle and period in config function into
its own commit.
- Add kona_pwmc_prepare_for_settings() function to remove duplicated code.
Changes from v5:
- Address Dmitry's comment on code cleanup of pwm_enable() in pwm core.
- Including all patches from different contributors in this patchset. Some
were left out in v4.
Changes from v4:
- Rebased to Tim Kryger's patch that adds support in pwm core to add driver
with inversed polarity.
- Removed patch 2 that resolved difference between hardware default polarity
and pwm framework default polarity. The default polarity is set properly now
when the pwm driver is registered with the pwm framework.
Jonathan Richardson (1):
pwm: core: Set enable state properly on failed call to enable
drivers/pwm/core.c | 33 ++++++++++++++++++++++++++-------
include/linux/pwm.h | 2 ++
2 files changed, 28 insertions(+), 7 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v10 1/1] pwm: core: Set enable state properly on failed call to enable
2015-10-17 0:40 [PATCH v10 0/1] Fix bugs in kona pwm driver and pwm core Jonathan Richardson
@ 2015-10-17 0:40 ` Jonathan Richardson
2015-11-06 13:46 ` Thierry Reding
0 siblings, 1 reply; 3+ messages in thread
From: Jonathan Richardson @ 2015-10-17 0:40 UTC (permalink / raw)
To: Tim Kryger, Dmitry Torokhov, Anatol Pomazau, Arun Ramamurthy,
Thierry Reding
Cc: Scott Branden, Jonathan Richardson, bcm-kernel-feedback-list,
linux-kernel, linux-pwm
The pwm_enable function didn't clear the enabled bit if a call to a
clients enable function returned an error. The result was that the state
of the pwm core was wrong. Clearing the bit when enable returns an error
ensures the state is properly set.
Tested-by: Jonathan Richardson <jonathar@broadcom.com>
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Jonathan Richardson <jonathar@broadcom.com>
---
drivers/pwm/core.c | 33 ++++++++++++++++++++++++++-------
include/linux/pwm.h | 2 ++
2 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index 3f9df3e..b8f6c30 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -269,6 +269,7 @@ int pwmchip_add_with_polarity(struct pwm_chip *chip,
pwm->pwm = chip->base + i;
pwm->hwpwm = i;
pwm->polarity = polarity;
+ mutex_init(&pwm->lock);
radix_tree_insert(&pwm_tree, pwm->pwm, pwm);
}
@@ -473,16 +474,22 @@ int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity)
if (!pwm->chip->ops->set_polarity)
return -ENOSYS;
- if (pwm_is_enabled(pwm))
- return -EBUSY;
+ mutex_lock(&pwm->lock);
+
+ if (pwm_is_enabled(pwm)) {
+ err = -EBUSY;
+ goto unlock;
+ }
err = pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity);
if (err)
- return err;
+ goto unlock;
pwm->polarity = polarity;
- return 0;
+unlock:
+ mutex_unlock(&pwm->lock);
+ return err;
}
EXPORT_SYMBOL_GPL(pwm_set_polarity);
@@ -494,10 +501,22 @@ EXPORT_SYMBOL_GPL(pwm_set_polarity);
*/
int pwm_enable(struct pwm_device *pwm)
{
- if (pwm && !test_and_set_bit(PWMF_ENABLED, &pwm->flags))
- return pwm->chip->ops->enable(pwm->chip, pwm);
+ int err = 0;
+
+ if (!pwm)
+ return -EINVAL;
+
+ mutex_lock(&pwm->lock);
+
+ if (!test_and_set_bit(PWMF_ENABLED, &pwm->flags)) {
+ err = pwm->chip->ops->enable(pwm->chip, pwm);
+ if (err)
+ clear_bit(PWMF_ENABLED, &pwm->flags);
+ }
+
+ mutex_unlock(&pwm->lock);
- return pwm ? 0 : -EINVAL;
+ return err;
}
EXPORT_SYMBOL_GPL(pwm_enable);
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
index d681f68..dee7d65 100644
--- a/include/linux/pwm.h
+++ b/include/linux/pwm.h
@@ -3,6 +3,7 @@
#include <linux/err.h>
#include <linux/of.h>
+#include <linux/mutex.h>
struct pwm_device;
struct seq_file;
@@ -98,6 +99,7 @@ struct pwm_device {
unsigned int pwm;
struct pwm_chip *chip;
void *chip_data;
+ struct mutex lock;
unsigned int period;
unsigned int duty_cycle;
--
1.9.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v10 1/1] pwm: core: Set enable state properly on failed call to enable
2015-10-17 0:40 ` [PATCH v10 1/1] pwm: core: Set enable state properly on failed call to enable Jonathan Richardson
@ 2015-11-06 13:46 ` Thierry Reding
0 siblings, 0 replies; 3+ messages in thread
From: Thierry Reding @ 2015-11-06 13:46 UTC (permalink / raw)
To: Jonathan Richardson
Cc: Tim Kryger, Dmitry Torokhov, Anatol Pomazau, Arun Ramamurthy,
Scott Branden, bcm-kernel-feedback-list, linux-kernel, linux-pwm
[-- Attachment #1: Type: text/plain, Size: 702 bytes --]
On Fri, Oct 16, 2015 at 05:40:58PM -0700, Jonathan Richardson wrote:
> The pwm_enable function didn't clear the enabled bit if a call to a
> clients enable function returned an error. The result was that the state
> of the pwm core was wrong. Clearing the bit when enable returns an error
> ensures the state is properly set.
>
> Tested-by: Jonathan Richardson <jonathar@broadcom.com>
> Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Signed-off-by: Jonathan Richardson <jonathar@broadcom.com>
> ---
> drivers/pwm/core.c | 33 ++++++++++++++++++++++++++-------
> include/linux/pwm.h | 2 ++
> 2 files changed, 28 insertions(+), 7 deletions(-)
Applied, thanks.
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-11-06 13:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-17 0:40 [PATCH v10 0/1] Fix bugs in kona pwm driver and pwm core Jonathan Richardson
2015-10-17 0:40 ` [PATCH v10 1/1] pwm: core: Set enable state properly on failed call to enable Jonathan Richardson
2015-11-06 13:46 ` Thierry Reding
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).