From: "Mathieu Dubois-Briand" <mathieu.dubois-briand@bootlin.com>
To: "Uwe Kleine-König" <ukleinek@kernel.org>
Cc: "Lee Jones" <lee@kernel.org>, "Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Kamel Bouhara" <kamel.bouhara@bootlin.com>,
"Linus Walleij" <linus.walleij@linaro.org>,
"Bartosz Golaszewski" <brgl@bgdev.pl>,
"Dmitry Torokhov" <dmitry.torokhov@gmail.com>,
"Michael Walle" <mwalle@kernel.org>,
"Mark Brown" <broonie@kernel.org>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
"Danilo Krummrich" <dakr@kernel.org>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-gpio@vger.kernel.org, linux-input@vger.kernel.org,
linux-pwm@vger.kernel.org, andriy.shevchenko@intel.com,
"Grégory Clement" <gregory.clement@bootlin.com>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v8 04/11] pwm: max7360: Add MAX7360 PWM support
Date: Fri, 16 May 2025 14:57:29 +0200 [thread overview]
Message-ID: <D9XLOWTZPRC4.EHVI8W16H3J9@bootlin.com> (raw)
In-Reply-To: <D9WJRVV500O3.GUV0MKHRGTH2@bootlin.com>
On Thu May 15, 2025 at 9:14 AM CEST, Mathieu Dubois-Briand wrote:
> On Tue May 13, 2025 at 12:08 PM CEST, Uwe Kleine-König wrote:
>> Hello,
>>
>> On Fri, May 09, 2025 at 11:14:38AM +0200, mathieu.dubois-briand@bootlin.com wrote:
>>> From: Kamel Bouhara <kamel.bouhara@bootlin.com>
>>> ...
>>>
>>> +
>>> +static int max7360_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
>>> +{
>>> + struct regmap *regmap = pwmchip_get_drvdata(chip);
>>> + int ret;
>>> +
>>> + ret = regmap_write_bits(regmap, MAX7360_REG_PWMCFG(pwm->hwpwm),
>>> + MAX7360_PORT_CFG_COMMON_PWM, 0);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + return regmap_write_bits(regmap, MAX7360_REG_PORTS, BIT(pwm->hwpwm), BIT(pwm->hwpwm));
>>
>> What is the effect of these writes? It doesn't need to be undone in a
>> matching .free()?
>>
>
> The first one (MAX7360_PORT_CFG_COMMON_PWM) asks to use a specific duty
> cycle for this PWM output and not a value shared across all PWMs. I
> believe this one have no reason to be ever reverted.
>
> About the second one, it does switch the output value. Reading the
> datasheet, it's not clear if and why setting this here is required. I
> will make some tests on the hardware a bit later this week. Still, I
> believe there is no need to revert it later.
>
I just tested it, I confirm we can remove the second one.
>>> +}
>>>
>>> ...
>>>
>>> +static int max7360_pwm_write_waveform(struct pwm_chip *chip,
>>> + struct pwm_device *pwm,
>>> + const void *_wfhw)
>>> +{
>>> + struct regmap *regmap = pwmchip_get_drvdata(chip);
>>> + const struct max7360_pwm_waveform *wfhw = _wfhw;
>>> + unsigned int val;
>>> + int ret;
>>> +
>>> + val = wfhw->enabled ? BIT(pwm->hwpwm) : 0;
>>> + ret = regmap_write_bits(regmap, MAX7360_REG_GPIOCTRL, BIT(pwm->hwpwm), val);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + if (wfhw->duty_steps)
>>> + return regmap_write(regmap, MAX7360_REG_PWM(pwm->hwpwm), wfhw->duty_steps);
>>
>> Would it make sense to first write duty_steps and only then enable?
>> Otherwise it might happen that you enable and still have a wrong duty
>> configuration in the MAX7360_REG_PWM register and emit a wrong period?
>>
>
> Yes, I believe it does make sense: I will try to invert them.
>
Also tested, and everything seems to be working fine: I will go this
way.
>> Do you need to write duty_steps = 0 if enabled is false?
>>
>
> No, this is not needed: output will be in hi-Z mode. As we have
> "wfhw->enabled = !!wf->duty_length_ns", this should be correct here. But
> reading this, I believe I could modify above code to be more clear with:
>
> if (wfhw->enabled)
> return regmap_write(regmap, MAX7360_REG_PWM(pwm->hwpwm), wfhw->duty_steps);
>
>
>>> + return 0;
>>> +}
>>
>> Best regards
>> Uwe
Best regards,
Mathieu
--
Mathieu Dubois-Briand, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2025-05-16 12:57 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-09 9:14 [PATCH v8 00/11] Add support for MAX7360 Mathieu Dubois-Briand
2025-05-09 9:14 ` [PATCH v8 01/11] dt-bindings: mfd: gpio: Add MAX7360 Mathieu Dubois-Briand
2025-05-09 9:14 ` [PATCH v8 02/11] mfd: Add max7360 support mathieu.dubois-briand
2025-05-09 9:29 ` Christophe JAILLET
2025-05-09 9:53 ` Mathieu Dubois-Briand
2025-05-12 9:21 ` Andy Shevchenko
2025-05-13 8:25 ` Mathieu Dubois-Briand
2025-05-13 9:31 ` Lee Jones
2025-05-13 11:14 ` Mathieu Dubois-Briand
2025-05-09 9:14 ` [PATCH v8 03/11] pinctrl: Add MAX7360 pinctrl driver Mathieu Dubois-Briand
2025-05-12 9:16 ` Andy Shevchenko
2025-05-09 9:14 ` [PATCH v8 04/11] pwm: max7360: Add MAX7360 PWM support mathieu.dubois-briand
2025-05-13 10:08 ` Uwe Kleine-König
2025-05-15 7:14 ` Mathieu Dubois-Briand
2025-05-16 12:57 ` Mathieu Dubois-Briand [this message]
2025-05-19 13:13 ` Andy Shevchenko
2025-05-09 9:14 ` [PATCH v8 05/11] regmap: irq: Add support for chips without separate IRQ status Mathieu Dubois-Briand
2025-05-14 9:59 ` Mark Brown
2025-05-14 11:59 ` Mathieu Dubois-Briand
2025-05-09 9:14 ` [PATCH v8 06/11] gpio: regmap: Allow to allocate regmap-irq device Mathieu Dubois-Briand
2025-05-19 13:16 ` Andy Shevchenko
2025-05-09 9:14 ` [PATCH v8 07/11] gpio: regmap: Allow to provide init_valid_mask callback Mathieu Dubois-Briand
2025-05-09 9:14 ` [PATCH v8 08/11] gpio: max7360: Add MAX7360 gpio support Mathieu Dubois-Briand
2025-05-19 13:19 ` Andy Shevchenko
2025-05-20 13:33 ` Mathieu Dubois-Briand
2025-05-09 9:14 ` [PATCH v8 09/11] input: keyboard: Add support for MAX7360 keypad Mathieu Dubois-Briand
2025-05-09 9:14 ` [PATCH v8 10/11] input: misc: Add support for MAX7360 rotary Mathieu Dubois-Briand
2025-05-09 9:14 ` [PATCH v8 11/11] MAINTAINERS: Add entry on MAX7360 driver Mathieu Dubois-Briand
2025-05-23 15:55 ` (subset) [PATCH v8 00/11] Add support for MAX7360 Mark Brown
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=D9XLOWTZPRC4.EHVI8W16H3J9@bootlin.com \
--to=mathieu.dubois-briand@bootlin.com \
--cc=andriy.shevchenko@intel.com \
--cc=brgl@bgdev.pl \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=dakr@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=gregory.clement@bootlin.com \
--cc=kamel.bouhara@bootlin.com \
--cc=krzk+dt@kernel.org \
--cc=lee@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=mwalle@kernel.org \
--cc=rafael@kernel.org \
--cc=robh@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=ukleinek@kernel.org \
/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