All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Jones <lee@kernel.org>
To: Anjelique Melendez <anjelique.melendez@oss.qualcomm.com>
Cc: pavel@kernel.org, andersson@kernel.org,
	krzysztof.kozlowski@linaro.org, morf3089@gmail.com,
	u.kleine-koenig@pengutronix.de, marijn.suijten@somainline.org,
	linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-msm@vger.kernel.org,
	Zejiong Huang <zejiongh@qti.qualcomm.com>
Subject: Re: [PATCH] leds: rgb: leds-qcom-lpg: Add support for 6-bit PWM resolution
Date: Thu, 20 Feb 2025 14:55:22 +0000	[thread overview]
Message-ID: <20250220145522.GA778229@google.com> (raw)
In-Reply-To: <20250213003533.1684131-1-anjelique.melendez@oss.qualcomm.com>

On Wed, 12 Feb 2025, Anjelique Melendez wrote:

> Currently, driver only allows for PWM modules to use 9-bit resolution.
> However, PWM modules can support 6-bit and 9-bit resolution. Add support
> for 6-bit resolution.
> 
> Suggested-by: Zejiong Huang <zejiongh@qti.qualcomm.com>
> Signed-off-by: Anjelique Melendez <anjelique.melendez@oss.qualcomm.com>
> ---
>  drivers/leds/rgb/leds-qcom-lpg.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c
> index f3c9ef2bfa57..4e5c56ded1f0 100644
> --- a/drivers/leds/rgb/leds-qcom-lpg.c
> +++ b/drivers/leds/rgb/leds-qcom-lpg.c
> @@ -24,6 +24,7 @@
>  #define LPG_PATTERN_CONFIG_REG	0x40
>  #define LPG_SIZE_CLK_REG	0x41
>  #define  PWM_CLK_SELECT_MASK	GENMASK(1, 0)
> +#define  PWM_SIZE_SELECT_MASK	BIT(2)

Are you sure you want to shove this between 2 seemingly related defines?

>  #define  PWM_CLK_SELECT_HI_RES_MASK	GENMASK(2, 0)
>  #define  PWM_SIZE_HI_RES_MASK	GENMASK(6, 4)
>  #define LPG_PREDIV_CLK_REG	0x42
> @@ -412,8 +413,8 @@ static int lpg_lut_sync(struct lpg *lpg, unsigned int mask)
>  static const unsigned int lpg_clk_rates[] = {0, 1024, 32768, 19200000};
>  static const unsigned int lpg_clk_rates_hi_res[] = {0, 1024, 32768, 19200000, 76800000};
>  static const unsigned int lpg_pre_divs[] = {1, 3, 5, 6};
> -static const unsigned int lpg_pwm_resolution[] =  {9};
> -static const unsigned int lpg_pwm_resolution_hi_res[] =  {8, 9, 10, 11, 12, 13, 14, 15};
> +static const unsigned int lpg_pwm_resolution[] = {6, 9};
> +static const unsigned int lpg_pwm_resolution_hi_res[] = {8, 9, 10, 11, 12, 13, 14, 15};
>  
>  static int lpg_calc_freq(struct lpg_channel *chan, uint64_t period)
>  {
> @@ -436,12 +437,12 @@ static int lpg_calc_freq(struct lpg_channel *chan, uint64_t period)
>  	 * period = --------------------------
>  	 *                   refclk
>  	 *
> -	 * Resolution = 2^9 bits for PWM or
> +	 * Resolution = 2^{6 or 9} bits for PWM or
>  	 *              2^{8, 9, 10, 11, 12, 13, 14, 15} bits for high resolution PWM
>  	 * pre_div = {1, 3, 5, 6} and
>  	 * M = [0..7].
>  	 *
> -	 * This allows for periods between 27uS and 384s for PWM channels and periods between
> +	 * This allows for periods between 3uS and 384s for PWM channels and periods between
>  	 * 3uS and 24576s for high resolution PWMs.
>  	 * The PWM framework wants a period of equal or lower length than requested,
>  	 * reject anything below minimum period.
> @@ -558,7 +559,7 @@ static void lpg_apply_freq(struct lpg_channel *chan)
>  		val |= GENMASK(5, 4);
>  		break;
>  	case LPG_SUBTYPE_PWM:
> -		val |= BIT(2);
> +		val |= FIELD_PREP(PWM_SIZE_SELECT_MASK, chan->pwm_resolution_sel);
>  		break;
>  	case LPG_SUBTYPE_HI_RES_PWM:
>  		val |= FIELD_PREP(PWM_SIZE_HI_RES_MASK, chan->pwm_resolution_sel);
> @@ -1276,7 +1277,7 @@ static int lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
>  		resolution = lpg_pwm_resolution_hi_res[FIELD_GET(PWM_SIZE_HI_RES_MASK, val)];
>  	} else {
>  		refclk = lpg_clk_rates[FIELD_GET(PWM_CLK_SELECT_MASK, val)];
> -		resolution = 9;
> +		resolution = lpg_pwm_resolution[FIELD_GET(PWM_SIZE_SELECT_MASK, val)];
>  	}
>  
>  	if (refclk) {
> -- 
> 2.34.1
> 
> 

-- 
Lee Jones [李琼斯]

  reply	other threads:[~2025-02-20 14:55 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-13  0:35 [PATCH] leds: rgb: leds-qcom-lpg: Add support for 6-bit PWM resolution Anjelique Melendez
2025-02-20 14:55 ` Lee Jones [this message]
2025-02-20 21:30   ` Anjelique Melendez
2025-02-27 16:54 ` (subset) " Lee Jones

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=20250220145522.GA778229@google.com \
    --to=lee@kernel.org \
    --cc=andersson@kernel.org \
    --cc=anjelique.melendez@oss.qualcomm.com \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=marijn.suijten@somainline.org \
    --cc=morf3089@gmail.com \
    --cc=pavel@kernel.org \
    --cc=u.kleine-koenig@pengutronix.de \
    --cc=zejiongh@qti.qualcomm.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 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.