From nobody Mon May 12 01:38:47 2025
Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com
 [209.85.208.53])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.subspace.kernel.org (Postfix) with ESMTPS id B368E1E1E1A
	for <linux-kernel@vger.kernel.org>; Sat,  5 Apr 2025 09:27:46 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org;
 arc=none smtp.client-ip=209.85.208.53
ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
	t=1743845268; cv=none;
 b=SzgecdqYXAipTZGVAgT3uvqBHAEydY0oT1ooNiF5KcaCXpAtoysga4U6t0EDMH4NNPQb+G3M+vi/7lBZgPg0rVC9Xztj2LQoGzMexamu2wF8rLQ0xqm3caKtoiROH3bkc7c7j7D8x5b433H46JwA/g7RxJPOvLmMgKCCnTAvMxg=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1743845268; c=relaxed/simple;
	bh=OiM7+jqt6Q921Kpmw9b8tSzzTFzLcdB8tQr9oQGe03Y=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version:Content-Type;
 b=ItmlnQ2DCuqAOfedIy4axcwQISaTb/dvjTci+PL5iWBQiQPPHEF6cOmVaHvxCm9Aml7+V0G44yDS2z/GxJpXYsT+vLxPOltEemLIzD/fhSgRVs8cVm/DdiIBaxJLiCsecFb5enQbUlZLTRyPmGP3DIfGEuHV4XpMBv8SddM46gE=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dmarc=none (p=none dis=none) header.from=baylibre.com;
 spf=pass smtp.mailfrom=baylibre.com;
 dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com
 header.i=@baylibre-com.20230601.gappssmtp.com header.b=tmi0N1EQ;
 arc=none smtp.client-ip=209.85.208.53
Authentication-Results: smtp.subspace.kernel.org;
 dmarc=none (p=none dis=none) header.from=baylibre.com
Authentication-Results: smtp.subspace.kernel.org;
 spf=pass smtp.mailfrom=baylibre.com
Authentication-Results: smtp.subspace.kernel.org;
	dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com
 header.i=@baylibre-com.20230601.gappssmtp.com header.b="tmi0N1EQ"
Received: by mail-ed1-f53.google.com with SMTP id
 4fb4d7f45d1cf-5eb5ecf3217so4810961a12.3
        for <linux-kernel@vger.kernel.org>;
 Sat, 05 Apr 2025 02:27:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1743845265;
 x=1744450065; darn=vger.kernel.org;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:from:to:cc:subject:date
         :message-id:reply-to;
        bh=8qXAEECYwT3mvFz4b37atfzJpcEAFkVbCcjXByt9ryg=;
        b=tmi0N1EQzFnou2AgOrggkSKdEjjXyzpIG+CVZ+2L9CjaRNfCY0p6JmsJ7vqMbdleSb
         vOnxlJZzb1VdbEKCkBt2iwJqR50GEPDJOzAPmomrPe4aWX6Zho/qSutx5wKCD1St+YB7
         Tw+agm1lm3qVBTiOFRiV7L51ErD3K7u+EHYtFXz4wUMdwM1/4LTzAbgi0ax39Nsiwg1a
         kvkVJGKc5uYuKQyMZA8q+2+1X2gTYnrCwTtSg0werl/H8hrosEoX/kM8Ccwp2X4ukmNg
         34TSUeM3Pxe1Dw5fFmT7b837pd0vTK+4Ffy1aHbYAB0nTJwJdSkfWvTc7x3J9rKVAj00
         d7sw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20230601; t=1743845265; x=1744450065;
        h=content-transfer-encoding:mime-version:references:in-reply-to
         :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
         :subject:date:message-id:reply-to;
        bh=8qXAEECYwT3mvFz4b37atfzJpcEAFkVbCcjXByt9ryg=;
        b=n6ZX5rs7d18R76GCV2gy4M/cXBgjfapJs7Hb5e5I2libSWTn8o4INV+QfLFWKP6oRI
         OBfCw6nH91g7VH9QUax3BFqz0PYhLZYJwTWn4V5Bu45a7+pS5sINGqhkuYwHQgU9jldi
         Usllfi8IFcmV3W8EIR5QAEhK0bOEnEWDHfwW9OSBHOIV6ianG+gDldGorTsKCR0qgf0I
         GBxoWLDdstC+Ipwp/aWY4hTPBzEQs1aKqwGwflwnD2aX5dtECV1sloOHWdNLuqrxNCYf
         rbWvJGnDlb/xfz7jRb9b/v5gv2LPk0NyAcxCNUnSgkZro5G+oFG4meIK6+E6bwJpx69S
         qPHg==
X-Forwarded-Encrypted: i=1;
 AJvYcCVH1thS2qBBLkDCE9zr06t1NAoT5YVN+kwPcGDjL+b3RV9IDOFkFETDynHto0gIigVe/G/6kQuUNV9JhdU=@vger.kernel.org
X-Gm-Message-State: AOJu0YxhczIle2GeThquW7lbUE4qmO5NvT/8MdmaRy9EZgn1LDMWc2HE
	AXxJAk4zSIPpZzj24Z0NSGzLRDMK8UvG0lDVRv7C7WI6LNtkXn8+LikpjwE16Ko=
X-Gm-Gg: ASbGncuW7HnnL4Lsy+4d6uEcRI9EOESKqdLnq3rpZuZSq9wNc8l+SDFv7LUnRTharop
	ezmjXXnuHJmU0K/MbO03lIE6MtwN4UFzi122BtqQrccqA52RMXeeaWy9qYvpETKStwvW27nB6fJ
	PyhRjbYV5KOCdemZ5pZy01AHWp25553GmPBZo3l7ZlEfL4tGUQOEulKTXrlg2R72DYD3pHYga1A
	/97rfqgWFiYGFbl5uC+Y6GunLeWHWAGnMU0rMuIJHEJ8+MXxZwTUIIOGpS9s41KFJWNSK8djEmF
	J0VjHWAiiDiOc58AUeXTvv6+p7iLskJ27CB3etuO4xFObNbcuxSMTo9G2GpS
X-Google-Smtp-Source: 
 AGHT+IH/Vu+m+Mp96HrPw4Gc+WIBgyrjTJKLuS6DXnK5YxiYpNywofXLPxP1H8Q6LOOpccRFikcNhQ==
X-Received: by 2002:a05:6402:1941:b0:5f0:9eb3:8e6a with SMTP id
 4fb4d7f45d1cf-5f0b471645fmr5054504a12.32.1743845264986;
        Sat, 05 Apr 2025 02:27:44 -0700 (PDT)
Received: from localhost ([2a02:8071:b783:6940:36f3:9aff:fec2:7e46])
        by smtp.gmail.com with UTF8SMTPSA id
 4fb4d7f45d1cf-5f087f0945bsm3642602a12.45.2025.04.05.02.27.44
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Sat, 05 Apr 2025 02:27:44 -0700 (PDT)
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@baylibre.com>
To: linux-pwm@vger.kernel.org
Cc: Michael Hennerich <michael.hennerich@analog.com>,
	=?utf-8?q?Nuno_S=C3=A1?= <nuno.sa@analog.com>,
	Trevor Gamblin <tgamblin@baylibre.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH 5/6] pwm: axi-pwmgen: Let .round_waveform_tohw() signal when
 request was rounded up
Date: Sat,  5 Apr 2025 11:27:16 +0200
Message-ID: 
 <ba451573f0218d76645f068cec78bd97802cf010.1743844730.git.u.kleine-koenig@baylibre.com>
X-Mailer: git-send-email 2.47.2
In-Reply-To: <cover.1743844730.git.u.kleine-koenig@baylibre.com>
References: <cover.1743844730.git.u.kleine-koenig@baylibre.com>
Precedence: bulk
X-Mailing-List: linux-kernel@vger.kernel.org
List-Id: <linux-kernel.vger.kernel.org>
List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
X-Developer-Signature: v=1; a=openpgp-sha256; l=2006;
 i=u.kleine-koenig@baylibre.com; h=from:subject:message-id;
 bh=OiM7+jqt6Q921Kpmw9b8tSzzTFzLcdB8tQr9oQGe03Y=;
 b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBn8Pd80SugWzSxb6ho2jCZImiC2vqkQWOStcSd0
 V4RR6iNKFaJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCZ/D3fAAKCRCPgPtYfRL+
 Ti9cB/wM1fMEC3gf4eEravDOl/yv2NTu1+Sze6OydWWzWPeuLRUO2Cp5VV9e/I3a5z9ela0StAk
 qXXo0Pk/yGPLJXL75nXfBUf8nguCShWalSu57ZQI5PETtvUAD6PaXCBjHnV1MC4C8e8yEiDjt7B
 cg/s8T2keZctsewK+pI4biBczLymTI7WDTa7VbHMBnvsQPikdFtR0g9EKgbUZZxkHZ6i/OUHarI
 DqAQHRlzYT99WApwX7HISK2A1FUOx5oB28zZtswNPDx0NpcmuvkykKZwjS5Ho2vrIvPhNpFimlQ
 MZdU4ecdAHSYHDZ2RHmo4Myl5OpX9DAVXOSuSlCEC1aG3GIs
X-Developer-Key: i=u.kleine-koenig@baylibre.com; a=openpgp;
 fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6
Content-Transfer-Encoding: quoted-printable

The .round_waveform_tohw() is supposed to return 1 if the requested
waveform cannot be implemented by rounding down all parameters. Also
adapt the corresponding comment to better describe why the implemented
procedure is right.

Signed-off-by: Uwe Kleine-K=C3=B6nig <u.kleine-koenig@baylibre.com>
Tested-by: Trevor Gamblin <tgamblin@baylibre.com>
---
 drivers/pwm/pwm-axi-pwmgen.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/pwm/pwm-axi-pwmgen.c b/drivers/pwm/pwm-axi-pwmgen.c
index 4259a0db9ff4..4337c8f5acf0 100644
--- a/drivers/pwm/pwm-axi-pwmgen.c
+++ b/drivers/pwm/pwm-axi-pwmgen.c
@@ -75,6 +75,7 @@ static int axi_pwmgen_round_waveform_tohw(struct pwm_chip=
 *chip,
 {
 	struct axi_pwmgen_waveform *wfhw =3D _wfhw;
 	struct axi_pwmgen_ddata *ddata =3D axi_pwmgen_ddata_from_chip(chip);
+	int ret =3D 0;
=20
 	if (wf->period_length_ns =3D=3D 0) {
 		*wfhw =3D (struct axi_pwmgen_waveform){
@@ -91,12 +92,15 @@ static int axi_pwmgen_round_waveform_tohw(struct pwm_ch=
ip *chip,
 		if (wfhw->period_cnt =3D=3D 0) {
 			/*
 			 * The specified period is too short for the hardware.
-			 * Let's round .duty_cycle down to 0 to get a (somewhat)
-			 * valid result.
+			 * So round up .period_cnt to 1 (i.e. the smallest
+			 * possible period). With .duty_cycle and .duty_offset
+			 * being less than or equal to .period, their rounded
+			 * value must be 0.
 			 */
 			wfhw->period_cnt =3D 1;
 			wfhw->duty_cycle_cnt =3D 0;
 			wfhw->duty_offset_cnt =3D 0;
+			ret =3D 1;
 		} else {
 			wfhw->duty_cycle_cnt =3D min_t(u64,
 						     mul_u64_u32_div(wf->duty_length_ns, ddata->clk_rate_hz, NSEC_PE=
R_SEC),
@@ -111,7 +115,7 @@ static int axi_pwmgen_round_waveform_tohw(struct pwm_ch=
ip *chip,
 		pwm->hwpwm, wf->duty_length_ns, wf->period_length_ns, wf->duty_offset_ns,
 		ddata->clk_rate_hz, wfhw->period_cnt, wfhw->duty_cycle_cnt, wfhw->duty_o=
ffset_cnt);
=20
-	return 0;
+	return ret;
 }
=20
 static int axi_pwmgen_round_waveform_fromhw(struct pwm_chip *chip, struct =
pwm_device *pwm,
--=20
2.47.2