From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1A4A9EB64DA for ; Wed, 19 Jul 2023 05:03:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: List-Subscribe:List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: In-Reply-To:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Reply-To:Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date :Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=HNEsEM8iZcAbUlMoV8dN+V3pphUdSs5qwT+thbrrhcQ=; b=RQLjtyf+bmvD9xJsmRfx3h4t7f U8KQU2u8MddCwNJjYexVpPX/tf7+P6IZ39HVE4z5uUOtKChNDE9f3KT4guNxJzVEuk41M7ZknImr5 PS0rKcoTa27ZTfOM+QdRfyX32vfy8F2ESABP8UiRIBkmtfyS9FT6aP26uX++xIc4/GOh9StlIP4+O qawk2+Cf+XgoRpFNc496EdyFjVntHkkvHM9qHL5qXnCU1L5xb0jz9Gz+NI43+4TdJRcs/SMk6yIo2 BSUgWv69ioX6Am3W8LZEZMRNK4FYUT03FbyUJqJSEc7tXR8lumvc4qoWKxedqp7XOT2AqIydM55ul 4zdqg5wQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qLzLX-0058Ev-2K; Wed, 19 Jul 2023 05:03:31 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qLzLW-0058E5-1U for linux-arm-kernel@bombadil.infradead.org; Wed, 19 Jul 2023 05:03:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=UOxv6RlPtRQPUg3pZ2EfLHp019vUXq6b634A2+YLSY4=; b=XDgesF4yHUbFMaW16hb6pnnlHo nG2wOi81gdT1PTm0WQU5KjObQS0/uMpK2kGJQUkPL07FckLNjzHSgUqWX9YdIJSNc77z1If00KH1+ f/muu9IJ7reiEikA8Nw3NGzHhB+4fYwpsGq7I7Nq8IH+i/MKDAUJWlOmsQhaQR4g1WwFX78+4hvuG kItCACi2KUXDYWb00+SaeLdcFWyp80jecPLIhDVuMD5kZSVRt8snFk90GYbUc54i02teaYoAfo82+ a0unDupcKs1PAlSvpriOt03cOe/VLq1Pw0AQrFQlyPqTdurvnqJkcpyergucbTtzFG/l6v1/A7vLr JD2672Rw==; Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by desiato.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qLfB2-00BGDN-2v for linux-arm-kernel@lists.infradead.org; Tue, 18 Jul 2023 07:31:22 +0000 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-307d58b3efbso5208907f8f.0 for ; Tue, 18 Jul 2023 00:31:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689665410; x=1692257410; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=UOxv6RlPtRQPUg3pZ2EfLHp019vUXq6b634A2+YLSY4=; b=WUX+f9s6Q4AOZv2hEfP8NWA/Dv+c/KHTGJPIizE1JcrqhVt9rkKdPsmDSNs+/GqbeH YPfdYrsN9b38BtshtUlEfJXw8sIHuin5ZGORF9tNMHkw1R8WXtBaADujgiIXledPYS5J v2CMXIeOT6tltKzLbRFoCLtIpURZXNhjDyFQb0nVhf6TuPs9ov2rUW06xFoK5lVX5S5/ D5uIQoYeaGu3kgM3RpDkJTVKqbRSuXBkPa6SO2RGKTt5kWy3m/pEXDVwizVHm+T5XFcV 5q4n+DD4EjBGbb9pWWKFZXNHsb8nF56x2Nn9A6OTlP+lh/Aba6gLDyHH5cPYXPBUKsU3 WpoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689665410; x=1692257410; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:from:date:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UOxv6RlPtRQPUg3pZ2EfLHp019vUXq6b634A2+YLSY4=; b=kzBAtt//z35ntKG70rPMBMBDWaGwwqMoVpylvWhqyX1nmi0xl9Pox9Gk2POVnLXomV d208sD17EgDd97dVKWgTkuDI71dDvLrhriPoV3M/81kpH2Cok7DxuXDofvhylfGcm8IW xedeJxyu0KkCCz0wi7MS04T98wZKPqVH2SxxaGrNEzjns95Nmi/hGjk0nkLtQe8KzxK9 URafwovtmeqjvBR+Nz+wZvWvh9/ySLT73li68eo0sFbuS+b6YK8bz4QD2k4SfxUySzUv 0kE/4gR/x4GaL2CZQbylMoZt/CWATINbwMj9W32VqmN0Bupbw/+84VAphjKoICKOroCg H67Q== X-Gm-Message-State: ABy/qLb5a+wKWkZfscCtx5r/A+1Zw5fOKeyEojkscpkrsNiY8XQe0lXZ PKdbDx+WqY89Scluq7EucTP7rFXC2To= X-Google-Smtp-Source: APBJJlGd2Ifui1poUv1aZUdKI8gYX8iEPIxgqJJtVIVEhide0moYe92EeJy/EuFeYdYGfH3NA/AJ5g== X-Received: by 2002:a5d:428b:0:b0:314:d31:f7 with SMTP id k11-20020a5d428b000000b003140d3100f7mr11254090wrq.63.1689665410245; Tue, 18 Jul 2023 00:30:10 -0700 (PDT) Received: from orome (p200300e41f4b7100f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f4b:7100:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with ESMTPSA id t7-20020a5d5347000000b003143add4396sm1526055wrv.22.2023.07.18.00.30.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Jul 2023 00:30:09 -0700 (PDT) Date: Tue, 18 Jul 2023 09:30:08 +0200 From: Thierry Reding To: Philipp Zabel Cc: Fabrice Gasnier , Uwe =?utf-8?Q?Kleine-K=C3=B6nig?= , Maxime Coquelin , Alexandre Torgue , linux-pwm@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] pwm: stm32: Implement .get_state() Message-ID: References: <20230608-pwm-stm32-get-state-v1-1-db7e58a7461b@pengutronix.de> MIME-Version: 1.0 In-Reply-To: <20230608-pwm-stm32-get-state-v1-1-db7e58a7461b@pengutronix.de> User-Agent: Mutt/2.2.10 (2023-03-25) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230718_083121_105017_A606334C X-CRM114-Status: GOOD ( 28.29 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============3974316315522375083==" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org --===============3974316315522375083== Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="pr3XEzmve5GXh8Qb" Content-Disposition: inline --pr3XEzmve5GXh8Qb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Jun 08, 2023 at 04:06:02PM +0200, Philipp Zabel wrote: > Stop stm32_pwm_detect_channels() from disabling all channels and count > the number of enabled PWMs to keep the clock running. Implement the > &pwm_ops->get_state callback so drivers can inherit PWM state set by > the bootloader. >=20 > Signed-off-by: Philipp Zabel > --- > Make the necessary changes to allow inheriting PWM state set by the > bootloader, for example to avoid flickering with a pre-enabled PWM > backlight. > --- > drivers/pwm/pwm-stm32.c | 75 ++++++++++++++++++++++++++++++++++++++-----= ------ > 1 file changed, 59 insertions(+), 16 deletions(-) >=20 > diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c > index 62e397aeb9aa..e0677c954bdf 100644 > --- a/drivers/pwm/pwm-stm32.c > +++ b/drivers/pwm/pwm-stm32.c > @@ -52,6 +52,21 @@ static u32 active_channels(struct stm32_pwm *dev) > return ccer & TIM_CCER_CCXE; > } > =20 > +static int read_ccrx(struct stm32_pwm *dev, int ch, u32 *value) > +{ > + switch (ch) { > + case 0: > + return regmap_read(dev->regmap, TIM_CCR1, value); > + case 1: > + return regmap_read(dev->regmap, TIM_CCR2, value); > + case 2: > + return regmap_read(dev->regmap, TIM_CCR3, value); > + case 3: > + return regmap_read(dev->regmap, TIM_CCR4, value); > + } > + return -EINVAL; > +} Looking at the register definitions we should be able to replace this with a single line and parameterize based on channel. I realize you probably just copied from write_ccrx(), but might as well improve this while at it. Could be a separate patch, though. Also, ch should be unsigned int since it comes from pwm->hwpwm. > + > static int write_ccrx(struct stm32_pwm *dev, int ch, u32 value) > { > switch (ch) { > @@ -486,9 +501,40 @@ static int stm32_pwm_apply_locked(struct pwm_chip *c= hip, struct pwm_device *pwm, > return ret; > } > =20 > +static int stm32_pwm_get_state(struct pwm_chip *chip, > + struct pwm_device *pwm, struct pwm_state *state) > +{ > + struct stm32_pwm *priv =3D to_stm32_pwm_dev(chip); > + int ch =3D pwm->hwpwm; This should reflect the type of pwm->hwpwm. > + unsigned long rate; > + u32 ccer, psc, arr, ccr; > + u64 dty, prd; > + int ret; > + > + ret =3D regmap_read(priv->regmap, TIM_CCER, &ccer); > + if (ret) > + return ret; > + > + state->enabled =3D ccer & (TIM_CCER_CC1E << (ch * 4)); > + state->polarity =3D (ccer & (TIM_CCER_CC1P << (ch * 4))) ? > + PWM_POLARITY_INVERSED : PWM_POLARITY_NORMAL; > + regmap_read(priv->regmap, TIM_PSC, &psc); > + regmap_read(priv->regmap, TIM_ARR, &arr); We should probably check regmap_read() consistently here. > + read_ccrx(priv, ch, &ccr); > + rate =3D clk_get_rate(priv->clk); > + > + prd =3D (u64)NSEC_PER_SEC * (psc + 1) * (arr + 1); > + state->period =3D DIV_ROUND_UP_ULL(prd, rate); > + dty =3D (u64)NSEC_PER_SEC * (psc + 1) * ccr; > + state->duty_cycle =3D DIV_ROUND_UP_ULL(dty, rate); > + > + return ret; > +} > + > static const struct pwm_ops stm32pwm_ops =3D { > .owner =3D THIS_MODULE, > .apply =3D stm32_pwm_apply_locked, > + .get_state =3D stm32_pwm_get_state, > .capture =3D IS_ENABLED(CONFIG_DMA_ENGINE) ? stm32_pwm_capture : NULL, > }; > =20 > @@ -579,30 +625,22 @@ static void stm32_pwm_detect_complementary(struct s= tm32_pwm *priv) > priv->have_complementary_output =3D (ccer !=3D 0); > } > =20 > -static int stm32_pwm_detect_channels(struct stm32_pwm *priv) > +static int stm32_pwm_detect_channels(struct stm32_pwm *priv, int *n_enab= led) unsigned int * for n_enabled. > { > - u32 ccer; > - int npwm =3D 0; > + u32 ccer, ccer_backup; > + int npwm; Also make this and the return value unsigned int while at it. These can never be negative. Thierry --pr3XEzmve5GXh8Qb Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEiOrDCAFJzPfAjcif3SOs138+s6EFAmS2P30ACgkQ3SOs138+ s6FVgQ/8DwHqcWHq8jW8Cj3oeOb2zx0zcFsabJGySzaN0DEG0+tG6QRqqaUj+kSy J5G81hoLnLTiO3xyvFFM/5rh6LQe2cUUqiDJ3scER7YUGYShE6ay9tBfLY+jrPlw rGI37WyPb8XgrnaHJLaHRBGGMkNhHWJu5mf4CEq+XW8NcsbS7mK+lPgDBjHMX5MC rCk5a43je5potHQUmh+Cn+1JEz9S/RrulvneiA2J7AktjSWWPLkX4Ul9ALSqUXUh cUDQsZxX7zk0TloXSUDfMlW+/E9ZlhYxDD1x1w1fXy8yEg95Le1v1YTJmejSNo8c HAvjh4RDa//dsI+nEQJqmaE7VNdUhxODs4udliCy9RUsAzk7cMAShbCAAIvBuZ2v dvvfxXdRv0gWIukq5B75bpYUsbs0k3liRL8E+McbWmoHBl6JJ2u7mSXU4m27ogIO MFgCEhc1rVhd5sqVc+vuPMGkjAdFHYsjxX2lfWJLEYnb7lVvQbq5ee44+QYDmN4a KL5vOwR0TFfWmVTzARSEI4P35Ls9nxFemdSj7zZ4FChTQ/VvHRVg/2NnYRJ2YEk/ wymb4HeIgBu6R0GUoZdhzs1NTYgz0PLgCYE/Yp0tW9q7R6wuoT4Ml4lJbSF8yyyv Du2MFCxrqMnemzC8NB60GQDAlEHT3N9CgViwElAfzXUnzwEvhpc= =6iB+ -----END PGP SIGNATURE----- --pr3XEzmve5GXh8Qb-- --===============3974316315522375083== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel --===============3974316315522375083==--