devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rajkumar Rampelli <rrajk@nvidia.com>
To: robh+dt@kernel.org, mark.rutland@arm.com,
	thierry.reding@gmail.com, jonathanh@nvidia.com,
	jdelvare@suse.com, linux@roeck-us.net, corbet@lwn.net,
	catalin.marinas@arm.com, will.deacon@arm.com,
	kstewart@linuxfoundation.org, gregkh@linuxfoundation.org,
	pombredanne@nexb.com, mmaddireddy@nvidia.com,
	mperttunen@nvidia.com, arnd@arndb.de, timur@codeaurora.org,
	andy.gross@linaro.org, xuwei5@hisilicon.com, elder@linaro.org,
	heiko@sntech.de, krzk@kernel.org, ard.biesheuvel@linaro.org
Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-pwm@vger.kernel.org, linux-tegra@vger.kernel.org,
	linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, ldewangan@nvidia.com,
	rrajk@nvidia.com
Subject: [PATCH V2 1/9] pwm: core: Add support for PWM HW driver with pwm capture only
Date: Wed, 21 Mar 2018 10:10:36 +0530	[thread overview]
Message-ID: <1521607244-29734-2-git-send-email-rrajk@nvidia.com> (raw)
In-Reply-To: <1521607244-29734-1-git-send-email-rrajk@nvidia.com>

Add support for pwm HW driver which has only capture functionality.
This helps to implement the PWM based Tachometer driver which reads
the PWM output signals from electronic fans.

PWM Tachometer captures the period and duty cycle of the PWM signal

Add conditional checks for callabacks enable(), disable(), config()
to check if they are supported by the client driver or not. Skip these
callbacks if they are not supported.

Signed-off-by: Rajkumar Rampelli <rrajk@nvidia.com>
---

V2: Added if conditional checks for pwm callbacks since drivers may
    implements only pwm capture functionality.

 drivers/pwm/core.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index 1581f6a..f70fe68 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -246,6 +246,10 @@ static bool pwm_ops_check(const struct pwm_ops *ops)
 	if (ops->apply)
 		return true;
 
+	/* driver supports capture operation */
+	if (ops->capture)
+		return true;
+
 	return false;
 }
 
@@ -495,7 +499,8 @@ int pwm_apply_state(struct pwm_device *pwm, struct pwm_state *state)
 			 * ->apply().
 			 */
 			if (pwm->state.enabled) {
-				pwm->chip->ops->disable(pwm->chip, pwm);
+				if (pwm->chip->ops->disable)
+					pwm->chip->ops->disable(pwm->chip, pwm);
 				pwm->state.enabled = false;
 			}
 
@@ -509,22 +514,26 @@ int pwm_apply_state(struct pwm_device *pwm, struct pwm_state *state)
 
 		if (state->period != pwm->state.period ||
 		    state->duty_cycle != pwm->state.duty_cycle) {
-			err = pwm->chip->ops->config(pwm->chip, pwm,
+			if (pwm->chip->ops->config) {
+				err = pwm->chip->ops->config(pwm->chip, pwm,
 						     state->duty_cycle,
 						     state->period);
-			if (err)
-				return err;
+				if (err)
+					return err;
+			}
 
 			pwm->state.duty_cycle = state->duty_cycle;
 			pwm->state.period = state->period;
 		}
 
 		if (state->enabled != pwm->state.enabled) {
-			if (state->enabled) {
+			if (state->enabled && pwm->chip->ops->enable) {
 				err = pwm->chip->ops->enable(pwm->chip, pwm);
 				if (err)
 					return err;
-			} else {
+			}
+
+			if (!state->enabled && pwm->chip->ops->disable) {
 				pwm->chip->ops->disable(pwm->chip, pwm);
 			}
 
-- 
2.1.4

  reply	other threads:[~2018-03-21  4:40 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-21  4:40 [PATCH V2 0/9] Implementation of Tegra Tachometer driver Rajkumar Rampelli
2018-03-21  4:40 ` Rajkumar Rampelli [this message]
2018-04-30  9:51   ` [PATCH V2 1/9] pwm: core: Add support for PWM HW driver with pwm capture only Thierry Reding
2018-03-21  4:40 ` [PATCH V2 2/9] arm64: tegra: Add PWM controller on Tegra186 soc Rajkumar Rampelli
2018-03-21  4:40 ` [PATCH V2 3/9] dt-bindings: Tegra186 tachometer device tree bindings Rajkumar Rampelli
2018-03-27 14:52   ` Rob Herring
2018-03-27 15:00     ` Rob Herring
2018-04-09  5:38     ` Mikko Perttunen
2018-04-09 13:21       ` Rob Herring
2018-04-09 14:37         ` Mikko Perttunen
2018-04-10 13:30           ` Rob Herring
2018-04-10 13:43             ` Guenter Roeck
2018-03-21  4:40 ` [PATCH V2 4/9] arm64: tegra: Add Tachometer Controller on Tegra186 Rajkumar Rampelli
2018-03-21  4:40 ` [PATCH V2 5/9] pwm: tegra: Add PWM based Tachometer driver Rajkumar Rampelli
2018-03-21  4:40 ` [PATCH V2 6/9] arm64: tegra: Add pwm based fan support on Tegra186 Rajkumar Rampelli
2018-03-21  4:40 ` [PATCH V2 7/9] hwmon: pwm-fan: add sysfs node to read rpm of fan Rajkumar Rampelli
2018-03-21  6:09   ` Guenter Roeck
2018-03-21  4:40 ` [PATCH V2 8/9] arm64: defconfig: enable Nvidia Tegra Tachometer as a module Rajkumar Rampelli
2018-03-21  4:40 ` [PATCH V2 9/9] arm64: defconfig: enable pwm-fan as a loadable module Rajkumar Rampelli

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=1521607244-29734-2-git-send-email-rrajk@nvidia.com \
    --to=rrajk@nvidia.com \
    --cc=andy.gross@linaro.org \
    --cc=ard.biesheuvel@linaro.org \
    --cc=arnd@arndb.de \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=elder@linaro.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=heiko@sntech.de \
    --cc=jdelvare@suse.com \
    --cc=jonathanh@nvidia.com \
    --cc=krzk@kernel.org \
    --cc=kstewart@linuxfoundation.org \
    --cc=ldewangan@nvidia.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=mark.rutland@arm.com \
    --cc=mmaddireddy@nvidia.com \
    --cc=mperttunen@nvidia.com \
    --cc=pombredanne@nexb.com \
    --cc=robh+dt@kernel.org \
    --cc=thierry.reding@gmail.com \
    --cc=timur@codeaurora.org \
    --cc=will.deacon@arm.com \
    --cc=xuwei5@hisilicon.com \
    /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 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).