From: Clemens Gruber <clemens.gruber@pqgruber.com>
To: linux-pwm@vger.kernel.org
Cc: Thierry Reding <thierry.reding@gmail.com>,
u.kleine-koenig@pengutronix.de,
Sven Van Asbroeck <TheSven73@gmail.com>,
Lee Jones <lee.jones@linaro.org>,
linux-kernel@vger.kernel.org,
Mika Westerberg <mika.westerberg@linux.intel.com>,
David Jander <david@protonic.nl>,
Clemens Gruber <clemens.gruber@pqgruber.com>
Subject: [PATCH v5 4/7] pwm: pca9685: Reset registers to POR state in probe
Date: Tue, 15 Dec 2020 22:22:25 +0100 [thread overview]
Message-ID: <20201215212228.185517-4-clemens.gruber@pqgruber.com> (raw)
In-Reply-To: <20201215212228.185517-1-clemens.gruber@pqgruber.com>
Reset the prescale and ON/OFF registers to their POR default state in
the probe function. Otherwise, the PWMs could still be active after a
watchdog reset and reboot, etc.
Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
---
drivers/pwm/pwm-pca9685.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/pwm/pwm-pca9685.c b/drivers/pwm/pwm-pca9685.c
index 7b14447f3c05..38aadaf50996 100644
--- a/drivers/pwm/pwm-pca9685.c
+++ b/drivers/pwm/pwm-pca9685.c
@@ -47,6 +47,7 @@
#define PCA9685_ALL_LED_OFF_H 0xFD
#define PCA9685_PRESCALE 0xFE
+#define PCA9685_PRESCALE_DEF 0x1E /* => default frequency of ~200 Hz */
#define PCA9685_PRESCALE_MIN 0x03 /* => max. frequency of 1526 Hz */
#define PCA9685_PRESCALE_MAX 0xFF /* => min. frequency of 24 Hz */
@@ -446,9 +447,11 @@ static int pca9685_pwm_probe(struct i2c_client *client,
reg &= ~(MODE1_ALLCALL | MODE1_SUB1 | MODE1_SUB2 | MODE1_SUB3);
regmap_write(pca->regmap, PCA9685_MODE1, reg);
- /* Clear all "full off" bits */
+ /* Reset ON/OFF registers to HW defaults (only full OFF bit is set) */
+ regmap_write(pca->regmap, PCA9685_ALL_LED_ON_L, 0);
+ regmap_write(pca->regmap, PCA9685_ALL_LED_ON_H, 0);
regmap_write(pca->regmap, PCA9685_ALL_LED_OFF_L, 0);
- regmap_write(pca->regmap, PCA9685_ALL_LED_OFF_H, 0);
+ regmap_write(pca->regmap, PCA9685_ALL_LED_OFF_H, LED_FULL);
pca->chip.ops = &pca9685_pwm_ops;
/* Add an extra channel for ALL_LED */
@@ -470,8 +473,10 @@ static int pca9685_pwm_probe(struct i2c_client *client,
/*
* The chip comes out of power-up in the sleep state,
* but force it to sleep in case it was woken up before
+ * and set the default prescale value
*/
pca9685_set_sleep_mode(pca, true);
+ regmap_write(pca->regmap, PCA9685_PRESCALE, PCA9685_PRESCALE_DEF);
pm_runtime_set_suspended(&client->dev);
pm_runtime_enable(&client->dev);
--
2.29.2
next prev parent reply other threads:[~2020-12-15 21:29 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-15 21:22 [PATCH v5 1/7] pwm: pca9685: Switch to atomic API Clemens Gruber
2020-12-15 21:22 ` [PATCH v5 2/7] pwm: pca9685: Support hardware readout Clemens Gruber
2020-12-15 21:22 ` [PATCH v5 3/7] pwm: pca9685: Improve runtime PM behavior Clemens Gruber
2020-12-15 21:22 ` Clemens Gruber [this message]
2020-12-17 4:02 ` [PATCH v5 4/7] pwm: pca9685: Reset registers to POR state in probe Sven Van Asbroeck
2020-12-17 17:45 ` Clemens Gruber
2021-03-01 21:46 ` Uwe Kleine-König
2021-03-04 13:16 ` Clemens Gruber
2020-12-15 21:22 ` [PATCH v5 5/7] pwm: pca9685: Support staggered output ON times Clemens Gruber
2020-12-17 4:02 ` Sven Van Asbroeck
2020-12-17 17:50 ` Clemens Gruber
2020-12-15 21:22 ` [PATCH v5 6/7] dt-bindings: pwm: pca9685: Add nxp,staggered-outputs property Clemens Gruber
2020-12-15 21:22 ` [PATCH v5 7/7] pwm: pca9685: Restrict period change for prescaler users Clemens Gruber
2020-12-17 4:03 ` Sven Van Asbroeck
2020-12-17 18:07 ` Clemens Gruber
2020-12-17 18:17 ` Sven Van Asbroeck
2020-12-17 3:58 ` [PATCH v5 1/7] pwm: pca9685: Switch to atomic API Sven Van Asbroeck
2020-12-17 16:48 ` Clemens Gruber
2020-12-17 17:10 ` Sven Van Asbroeck
2021-03-01 21:41 ` Uwe Kleine-König
2021-03-04 13:10 ` Clemens Gruber
2021-03-22 7:58 ` Thierry Reding
2021-03-27 15:54 ` Clemens Gruber
2021-03-01 21:44 ` Uwe Kleine-König
2021-03-04 13:12 ` Clemens Gruber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201215212228.185517-4-clemens.gruber@pqgruber.com \
--to=clemens.gruber@pqgruber.com \
--cc=TheSven73@gmail.com \
--cc=david@protonic.nl \
--cc=lee.jones@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
--cc=thierry.reding@gmail.com \
--cc=u.kleine-koenig@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.