* [PATCH 0/3] Add support for high resolution PWMs @ 2023-03-16 19:21 Anjelique Melendez 2023-03-16 19:21 ` [PATCH 1/3] dt-bindings: leds-qcom-lpg: Add qcom,pmk8550-pwm compatible string Anjelique Melendez ` (3 more replies) 0 siblings, 4 replies; 9+ messages in thread From: Anjelique Melendez @ 2023-03-16 19:21 UTC (permalink / raw) To: pavel, lee, robh+dt, krzysztof.kozlowski+dt, andersson Cc: linux-leds, devicetree, linux-kernel, quic_c_skakit, Anjelique Melendez Certain PMICs have a high reolution PWM module which can support from 8-bit to 15-bit PWM. This change series adds support for those PMICs. Thanks! Anjelique Melendez (3): dt-bindings: leds-qcom-lpg: Add qcom,pmk8550-pwm compatible string leds: rgb: leds-qcom-lpg: Add support for high resolution PWM leds: rgb: leds-qcom-lpg: Add support for PMK8550 PWM .../bindings/leds/leds-qcom-lpg.yaml | 1 + drivers/leds/rgb/leds-qcom-lpg.c | 151 +++++++++++++----- 2 files changed, 110 insertions(+), 42 deletions(-) -- 2.39.0 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] dt-bindings: leds-qcom-lpg: Add qcom,pmk8550-pwm compatible string 2023-03-16 19:21 [PATCH 0/3] Add support for high resolution PWMs Anjelique Melendez @ 2023-03-16 19:21 ` Anjelique Melendez 2023-03-17 16:04 ` Krzysztof Kozlowski 2023-03-16 19:21 ` [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM Anjelique Melendez ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: Anjelique Melendez @ 2023-03-16 19:21 UTC (permalink / raw) To: pavel, lee, robh+dt, krzysztof.kozlowski+dt, andersson Cc: linux-leds, devicetree, linux-kernel, quic_c_skakit, Anjelique Melendez Add qcom,pmk8550-pwm compatible string for the Qualcomm Technologies, Inc. PMK8550 PMIC which has two high resolution PWM channels. Signed-off-by: Anjelique Melendez <quic_amelende@quicinc.com> --- Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml b/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml index 1df837798249..6295c91f43e8 100644 --- a/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml +++ b/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml @@ -27,6 +27,7 @@ properties: - qcom,pmc8180c-lpg - qcom,pmi8994-lpg - qcom,pmi8998-lpg + - qcom,pmk8550-pwm "#pwm-cells": const: 2 -- 2.39.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] dt-bindings: leds-qcom-lpg: Add qcom,pmk8550-pwm compatible string 2023-03-16 19:21 ` [PATCH 1/3] dt-bindings: leds-qcom-lpg: Add qcom,pmk8550-pwm compatible string Anjelique Melendez @ 2023-03-17 16:04 ` Krzysztof Kozlowski 0 siblings, 0 replies; 9+ messages in thread From: Krzysztof Kozlowski @ 2023-03-17 16:04 UTC (permalink / raw) To: Anjelique Melendez, pavel, lee, robh+dt, krzysztof.kozlowski+dt, andersson Cc: linux-leds, devicetree, linux-kernel, quic_c_skakit On 16/03/2023 20:21, Anjelique Melendez wrote: > Add qcom,pmk8550-pwm compatible string for the Qualcomm Technologies, Inc. > PMK8550 PMIC which has two high resolution PWM channels. > Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Your driver code has build warnings, so anyway new version is expected... Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM 2023-03-16 19:21 [PATCH 0/3] Add support for high resolution PWMs Anjelique Melendez 2023-03-16 19:21 ` [PATCH 1/3] dt-bindings: leds-qcom-lpg: Add qcom,pmk8550-pwm compatible string Anjelique Melendez @ 2023-03-16 19:21 ` Anjelique Melendez 2023-03-17 11:18 ` kernel test robot ` (2 more replies) 2023-03-16 19:21 ` [PATCH 3/3] leds: rgb: leds-qcom-lpg: Add support for PMK8550 PWM Anjelique Melendez 2023-03-30 13:01 ` [PATCH 0/3] Add support for high resolution PWMs Lee Jones 3 siblings, 3 replies; 9+ messages in thread From: Anjelique Melendez @ 2023-03-16 19:21 UTC (permalink / raw) To: pavel, lee, robh+dt, krzysztof.kozlowski+dt, andersson Cc: linux-leds, devicetree, linux-kernel, quic_c_skakit, Anjelique Melendez Certain PMICs like PMK8550 have a high resolution PWM module which can support from 8-bit to 15-bit PWM. Add support for it. Signed-off-by: Anjelique Melendez <quic_amelende@quicinc.com> --- drivers/leds/rgb/leds-qcom-lpg.c | 142 ++++++++++++++++++++++--------- 1 file changed, 100 insertions(+), 42 deletions(-) diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c index 67f48f222109..534ca4c0dea4 100644 --- a/drivers/leds/rgb/leds-qcom-lpg.c +++ b/drivers/leds/rgb/leds-qcom-lpg.c @@ -2,6 +2,7 @@ /* * Copyright (c) 2017-2022 Linaro Ltd * Copyright (c) 2010-2012, The Linux Foundation. All rights reserved. + * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved. */ #include <linux/bits.h> #include <linux/bitfield.h> @@ -17,10 +18,13 @@ #define LPG_SUBTYPE_REG 0x05 #define LPG_SUBTYPE_LPG 0x2 #define LPG_SUBTYPE_PWM 0xb +#define LPG_SUBTYPE_HI_RES_PWM 0xc #define LPG_SUBTYPE_LPG_LITE 0x11 #define LPG_PATTERN_CONFIG_REG 0x40 #define LPG_SIZE_CLK_REG 0x41 #define PWM_CLK_SELECT_MASK GENMASK(1, 0) +#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 #define PWM_FREQ_PRE_DIV_MASK GENMASK(6, 5) #define PWM_FREQ_EXP_MASK GENMASK(2, 0) @@ -43,8 +47,10 @@ #define LPG_LUT_REG(x) (0x40 + (x) * 2) #define RAMP_CONTROL_REG 0xc8 -#define LPG_RESOLUTION 512 +#define LPG_RESOLUTION BIT(9) +#define LPG_RESOLUTION_HI_RES BIT(15) #define LPG_MAX_M 7 +#define LPG_MAX_PREDIV 6 struct lpg_channel; struct lpg_data; @@ -106,6 +112,7 @@ struct lpg { * @clk_sel: reference clock frequency selector * @pre_div_sel: divider selector of the reference clock * @pre_div_exp: exponential divider of the reference clock + * @pwm_size_sel: pwm size selector * @ramp_enabled: duty cycle is driven by iterating over lookup table * @ramp_ping_pong: reverse through pattern, rather than wrapping to start * @ramp_oneshot: perform only a single pass over the pattern @@ -138,6 +145,7 @@ struct lpg_channel { unsigned int clk_sel; unsigned int pre_div_sel; unsigned int pre_div_exp; + unsigned int pwm_size_sel; bool ramp_enabled; bool ramp_ping_pong; @@ -253,17 +261,24 @@ 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_size[] = {9}; +static const unsigned int lpg_pwm_size_hi_res[] = {8, 9, 10, 11, 12, 13, 14, 15}; static int lpg_calc_freq(struct lpg_channel *chan, uint64_t period) { - unsigned int clk_sel, best_clk = 0; + unsigned int i, pwm_size_len, best_pwm_size_sel = 0; + const unsigned int *clk_rate_arr, *pwm_size_arr; + unsigned int clk_sel, clk_len, best_clk = 0; unsigned int div, best_div = 0; unsigned int m, best_m = 0; + unsigned int resolution; unsigned int error; unsigned int best_err = UINT_MAX; u64 best_period = 0; u64 max_period; + u64 max_res; /* * The PWM period is determined by: @@ -272,73 +287,104 @@ static int lpg_calc_freq(struct lpg_channel *chan, uint64_t period) * period = -------------------------- * refclk * - * With resolution fixed at 2^9 bits, pre_div = {1, 3, 5, 6} and + * Resolution = 2^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, as the PWM framework - * wants a period of equal or lower length than requested, reject - * anything below 27uS. + * This allows for periods between 27uS 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. */ - if (period <= (u64)NSEC_PER_SEC * LPG_RESOLUTION / 19200000) + + if (chan->subtype == LPG_SUBTYPE_HI_RES_PWM) { + clk_rate_arr = lpg_clk_rates_hi_res; + clk_len = ARRAY_SIZE(lpg_clk_rates_hi_res); + pwm_size_arr = lpg_pwm_size_hi_res; + pwm_size_len = ARRAY_SIZE(lpg_pwm_size_hi_res); + max_res = LPG_RESOLUTION_HI_RES; + } else { + clk_rate_arr = lpg_clk_rates; + clk_len = ARRAY_SIZE(lpg_clk_rates); + pwm_size_arr = lpg_pwm_size; + pwm_size_len = ARRAY_SIZE(lpg_pwm_size); + max_res = LPG_RESOLUTION; + } + + if (period <= (u64)NSEC_PER_SEC * (1 << pwm_size_arr[0]) / clk_rate_arr[clk_len - 1]) return -EINVAL; /* Limit period to largest possible value, to avoid overflows */ - max_period = (u64)NSEC_PER_SEC * LPG_RESOLUTION * 6 * (1 << LPG_MAX_M) / 1024; + max_period = (u64)NSEC_PER_SEC * max_res * LPG_MAX_PREDIV * (1 << LPG_MAX_M) / 1024; if (period > max_period) period = max_period; /* - * Search for the pre_div, refclk and M by solving the rewritten formula - * for each refclk and pre_div value: + * Search for the pre_div, refclk, resolution and M by solving the rewritten formula + * for each refclk, resolution and pre_div value: * * period * refclk * M = log2 ------------------------------------- * NSEC_PER_SEC * pre_div * resolution */ - for (clk_sel = 1; clk_sel < ARRAY_SIZE(lpg_clk_rates); clk_sel++) { - u64 numerator = period * lpg_clk_rates[clk_sel]; - - for (div = 0; div < ARRAY_SIZE(lpg_pre_divs); div++) { - u64 denominator = (u64)NSEC_PER_SEC * lpg_pre_divs[div] * LPG_RESOLUTION; - u64 actual; - u64 ratio; - - if (numerator < denominator) - continue; - - ratio = div64_u64(numerator, denominator); - m = ilog2(ratio); - if (m > LPG_MAX_M) - m = LPG_MAX_M; - - actual = DIV_ROUND_UP_ULL(denominator * (1 << m), lpg_clk_rates[clk_sel]); - - error = period - actual; - if (error < best_err) { - best_err = error; - best_div = div; - best_m = m; - best_clk = clk_sel; - best_period = actual; + for (i = 0; i < pwm_size_len; i++) { + resolution = 1 << pwm_size_arr[i]; + for (clk_sel = 1; clk_sel < clk_len; clk_sel++) { + u64 numerator = period * clk_rate_arr[clk_sel]; + + for (div = 0; div < ARRAY_SIZE(lpg_pre_divs); div++) { + u64 denominator = (u64)NSEC_PER_SEC * lpg_pre_divs[div] * + resolution; + u64 actual; + u64 ratio; + + if (numerator < denominator) + continue; + + ratio = div64_u64(numerator, denominator); + m = ilog2(ratio); + if (m > LPG_MAX_M) + m = LPG_MAX_M; + + actual = DIV_ROUND_UP_ULL(denominator * (1 << m), + clk_rate_arr[clk_sel]); + error = period - actual; + if (error < best_err) { + best_err = error; + best_div = div; + best_m = m; + best_clk = clk_sel; + best_period = actual; + best_pwm_size_sel = i; + } } } } - chan->clk_sel = best_clk; chan->pre_div_sel = best_div; chan->pre_div_exp = best_m; chan->period = best_period; - + chan->pwm_size_sel = best_pwm_size_sel; return 0; } static void lpg_calc_duty(struct lpg_channel *chan, uint64_t duty) { - unsigned int max = LPG_RESOLUTION - 1; + unsigned int max; unsigned int val; + unsigned int clk_rate; + + if (chan->subtype == LPG_SUBTYPE_HI_RES_PWM) { + max = LPG_RESOLUTION_HI_RES - 1; + clk_rate = lpg_clk_rates_hi_res[chan->clk_sel]; + } else { + max = LPG_RESOLUTION - 1; + clk_rate = lpg_clk_rates[chan->clk_sel]; + } - val = div64_u64(duty * lpg_clk_rates[chan->clk_sel], + val = div64_u64(duty * clk_rate, (u64)NSEC_PER_SEC * lpg_pre_divs[chan->pre_div_sel] * (1 << chan->pre_div_exp)); chan->pwm_value = min(val, max); @@ -354,7 +400,7 @@ static void lpg_apply_freq(struct lpg_channel *chan) val = chan->clk_sel; - /* Specify 9bit resolution, based on the subtype of the channel */ + /* Specify resolution, based on the subtype of the channel */ switch (chan->subtype) { case LPG_SUBTYPE_LPG: val |= GENMASK(5, 4); @@ -362,6 +408,9 @@ static void lpg_apply_freq(struct lpg_channel *chan) case LPG_SUBTYPE_PWM: val |= BIT(2); break; + case LPG_SUBTYPE_HI_RES_PWM: + val |= FIELD_PREP(PWM_SIZE_HI_RES_MASK, chan->pwm_size_sel); + break; case LPG_SUBTYPE_LPG_LITE: default: val |= BIT(4); @@ -977,6 +1026,7 @@ static int lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm, { struct lpg *lpg = container_of(chip, struct lpg, pwm); struct lpg_channel *chan = &lpg->channels[pwm->hwpwm]; + unsigned int pwm_size; unsigned int pre_div; unsigned int refclk; unsigned int val; @@ -988,7 +1038,14 @@ static int lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm, if (ret) return ret; - refclk = lpg_clk_rates[val & PWM_CLK_SELECT_MASK]; + if (chan->subtype == LPG_SUBTYPE_HI_RES_PWM) { + refclk = lpg_clk_rates_hi_res[FIELD_GET(PWM_CLK_SELECT_HI_RES_MASK, val)]; + pwm_size = lpg_pwm_size_hi_res[FIELD_GET(PWM_SIZE_HI_RES_MASK, val)]; + } else { + refclk = lpg_clk_rates[FIELD_GET(PWM_CLK_SELECT_MASK, val)]; + pwm_size = 9; + } + if (refclk) { ret = regmap_read(lpg->map, chan->base + LPG_PREDIV_CLK_REG, &val); if (ret) @@ -1001,7 +1058,8 @@ static int lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm, if (ret) return ret; - state->period = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * LPG_RESOLUTION * pre_div * (1 << m), refclk); + state->period = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * (1 << pwm_size) * + pre_div * (1 << m), refclk); state->duty_cycle = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * pwm_value * pre_div * (1 << m), refclk); } else { state->period = 0; -- 2.39.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM 2023-03-16 19:21 ` [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM Anjelique Melendez @ 2023-03-17 11:18 ` kernel test robot 2023-03-17 15:54 ` kernel test robot 2023-03-23 19:49 ` Pavel Machek 2 siblings, 0 replies; 9+ messages in thread From: kernel test robot @ 2023-03-17 11:18 UTC (permalink / raw) To: Anjelique Melendez, pavel, lee, robh+dt, krzysztof.kozlowski+dt, andersson Cc: oe-kbuild-all, linux-leds, devicetree, linux-kernel, quic_c_skakit, Anjelique Melendez Hi Anjelique, Thank you for the patch! Yet something to improve: [auto build test ERROR on lee-leds/for-leds-next] [also build test ERROR on robh/for-next pavel-leds/for-next linus/master v6.3-rc2 next-20230317] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Anjelique-Melendez/dt-bindings-leds-qcom-lpg-Add-qcom-pmk8550-pwm-compatible-string/20230317-032340 base: https://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git for-leds-next patch link: https://lore.kernel.org/r/20230316192134.26436-3-quic_amelende%40quicinc.com patch subject: [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM config: parisc-randconfig-r014-20230312 (https://download.01.org/0day-ci/archive/20230317/202303171848.oTjlkAvF-lkp@intel.com/config) compiler: hppa-linux-gcc (GCC) 12.1.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/916dd0b271b3f035efd07efdaa696e7c815f7e6c git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Anjelique-Melendez/dt-bindings-leds-qcom-lpg-Add-qcom-pmk8550-pwm-compatible-string/20230317-032340 git checkout 916dd0b271b3f035efd07efdaa696e7c815f7e6c # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=parisc SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202303171848.oTjlkAvF-lkp@intel.com/ All errors (new ones prefixed by >>, old ones prefixed by <<): >> ERROR: modpost: "__udivdi3" [drivers/leds/rgb/leds-qcom-lpg.ko] undefined! >> ERROR: modpost: "__divdi3" [drivers/leds/rgb/leds-qcom-lpg.ko] undefined! -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM 2023-03-16 19:21 ` [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM Anjelique Melendez 2023-03-17 11:18 ` kernel test robot @ 2023-03-17 15:54 ` kernel test robot 2023-03-23 19:49 ` Pavel Machek 2 siblings, 0 replies; 9+ messages in thread From: kernel test robot @ 2023-03-17 15:54 UTC (permalink / raw) To: Anjelique Melendez, pavel, lee, robh+dt, krzysztof.kozlowski+dt, andersson Cc: oe-kbuild-all, linux-leds, devicetree, linux-kernel, quic_c_skakit, Anjelique Melendez Hi Anjelique, Thank you for the patch! Yet something to improve: [auto build test ERROR on lee-leds/for-leds-next] [also build test ERROR on robh/for-next pavel-leds/for-next linus/master v6.3-rc2 next-20230317] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Anjelique-Melendez/dt-bindings-leds-qcom-lpg-Add-qcom-pmk8550-pwm-compatible-string/20230317-032340 base: https://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git for-leds-next patch link: https://lore.kernel.org/r/20230316192134.26436-3-quic_amelende%40quicinc.com patch subject: [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM config: arm-allmodconfig (https://download.01.org/0day-ci/archive/20230317/202303172326.QZxzjZq4-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 12.1.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/916dd0b271b3f035efd07efdaa696e7c815f7e6c git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Anjelique-Melendez/dt-bindings-leds-qcom-lpg-Add-qcom-pmk8550-pwm-compatible-string/20230317-032340 git checkout 916dd0b271b3f035efd07efdaa696e7c815f7e6c # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202303172326.QZxzjZq4-lkp@intel.com/ All errors (new ones prefixed by >>, old ones prefixed by <<): >> ERROR: modpost: "__aeabi_uldivmod" [drivers/leds/rgb/leds-qcom-lpg.ko] undefined! >> ERROR: modpost: "__aeabi_ldivmod" [drivers/leds/rgb/leds-qcom-lpg.ko] undefined! -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM 2023-03-16 19:21 ` [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM Anjelique Melendez 2023-03-17 11:18 ` kernel test robot 2023-03-17 15:54 ` kernel test robot @ 2023-03-23 19:49 ` Pavel Machek 2 siblings, 0 replies; 9+ messages in thread From: Pavel Machek @ 2023-03-23 19:49 UTC (permalink / raw) To: Anjelique Melendez Cc: lee, robh+dt, krzysztof.kozlowski+dt, andersson, linux-leds, devicetree, linux-kernel, quic_c_skakit [-- Attachment #1: Type: text/plain, Size: 424 bytes --] On Thu 2023-03-16 12:21:33, Anjelique Melendez wrote: > Certain PMICs like PMK8550 have a high resolution PWM module which can > support from 8-bit to 15-bit PWM. Add support for it. > > Signed-off-by: Anjelique Melendez <quic_amelende@quicinc.com> Provided build problems are fixed: Acked-by: Pavel Machek <pavel@ucw.cz> Pavel -- People of Russia, stop Putin before his war on Ukraine escalates. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 195 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/3] leds: rgb: leds-qcom-lpg: Add support for PMK8550 PWM 2023-03-16 19:21 [PATCH 0/3] Add support for high resolution PWMs Anjelique Melendez 2023-03-16 19:21 ` [PATCH 1/3] dt-bindings: leds-qcom-lpg: Add qcom,pmk8550-pwm compatible string Anjelique Melendez 2023-03-16 19:21 ` [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM Anjelique Melendez @ 2023-03-16 19:21 ` Anjelique Melendez 2023-03-30 13:01 ` [PATCH 0/3] Add support for high resolution PWMs Lee Jones 3 siblings, 0 replies; 9+ messages in thread From: Anjelique Melendez @ 2023-03-16 19:21 UTC (permalink / raw) To: pavel, lee, robh+dt, krzysztof.kozlowski+dt, andersson Cc: linux-leds, devicetree, linux-kernel, quic_c_skakit, Anjelique Melendez Add support for pmk8550 compatible and lpg_data. Signed-off-by: Anjelique Melendez <quic_amelende@quicinc.com> --- drivers/leds/rgb/leds-qcom-lpg.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/leds/rgb/leds-qcom-lpg.c b/drivers/leds/rgb/leds-qcom-lpg.c index 534ca4c0dea4..0fe51fcb42b0 100644 --- a/drivers/leds/rgb/leds-qcom-lpg.c +++ b/drivers/leds/rgb/leds-qcom-lpg.c @@ -1487,6 +1487,14 @@ static const struct lpg_data pm8350c_pwm_data = { }, }; +static const struct lpg_data pmk8550_pwm_data = { + .num_channels = 2, + .channels = (const struct lpg_channel_data[]) { + { .base = 0xe800 }, + { .base = 0xe900 }, + }, +}; + static const struct of_device_id lpg_of_table[] = { { .compatible = "qcom,pm8150b-lpg", .data = &pm8150b_lpg_data }, { .compatible = "qcom,pm8150l-lpg", .data = &pm8150l_lpg_data }, @@ -1497,6 +1505,7 @@ static const struct of_device_id lpg_of_table[] = { { .compatible = "qcom,pmi8994-lpg", .data = &pmi8994_lpg_data }, { .compatible = "qcom,pmi8998-lpg", .data = &pmi8998_lpg_data }, { .compatible = "qcom,pmc8180c-lpg", .data = &pm8150l_lpg_data }, + { .compatible = "qcom,pmk8550-pwm", .data = &pmk8550_pwm_data }, {} }; MODULE_DEVICE_TABLE(of, lpg_of_table); -- 2.39.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] Add support for high resolution PWMs 2023-03-16 19:21 [PATCH 0/3] Add support for high resolution PWMs Anjelique Melendez ` (2 preceding siblings ...) 2023-03-16 19:21 ` [PATCH 3/3] leds: rgb: leds-qcom-lpg: Add support for PMK8550 PWM Anjelique Melendez @ 2023-03-30 13:01 ` Lee Jones 3 siblings, 0 replies; 9+ messages in thread From: Lee Jones @ 2023-03-30 13:01 UTC (permalink / raw) To: Anjelique Melendez Cc: pavel, robh+dt, krzysztof.kozlowski+dt, andersson, linux-leds, devicetree, linux-kernel, quic_c_skakit On Thu, 16 Mar 2023, Anjelique Melendez wrote: > Certain PMICs have a high reolution PWM module which can support from 8-bit > to 15-bit PWM. This change series adds support for those PMICs. Thanks! > > Anjelique Melendez (3): > dt-bindings: leds-qcom-lpg: Add qcom,pmk8550-pwm compatible string > leds: rgb: leds-qcom-lpg: Add support for high resolution PWM > leds: rgb: leds-qcom-lpg: Add support for PMK8550 PWM > > .../bindings/leds/leds-qcom-lpg.yaml | 1 + > drivers/leds/rgb/leds-qcom-lpg.c | 151 +++++++++++++----- > 2 files changed, 110 insertions(+), 42 deletions(-) I guess you'll be fixing the build issues and resubmitting? Please retrain the Acks you've collected. -- Lee Jones [李琼斯] ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-03-30 13:01 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-03-16 19:21 [PATCH 0/3] Add support for high resolution PWMs Anjelique Melendez 2023-03-16 19:21 ` [PATCH 1/3] dt-bindings: leds-qcom-lpg: Add qcom,pmk8550-pwm compatible string Anjelique Melendez 2023-03-17 16:04 ` Krzysztof Kozlowski 2023-03-16 19:21 ` [PATCH 2/3] leds: rgb: leds-qcom-lpg: Add support for high resolution PWM Anjelique Melendez 2023-03-17 11:18 ` kernel test robot 2023-03-17 15:54 ` kernel test robot 2023-03-23 19:49 ` Pavel Machek 2023-03-16 19:21 ` [PATCH 3/3] leds: rgb: leds-qcom-lpg: Add support for PMK8550 PWM Anjelique Melendez 2023-03-30 13:01 ` [PATCH 0/3] Add support for high resolution PWMs Lee Jones
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).