* [PATCH 0/2] leds: flash: leds-qcom-flash: update torch current clamp setting
@ 2025-07-25 10:04 Fenglin Wu via B4 Relay
2025-07-25 10:04 ` [PATCH 1/2] " Fenglin Wu via B4 Relay
2025-07-25 10:04 ` [PATCH 2/2] leds: flash: leds-qcom-flash: add a separate register map for PMI8998 Fenglin Wu via B4 Relay
0 siblings, 2 replies; 8+ messages in thread
From: Fenglin Wu via B4 Relay @ 2025-07-25 10:04 UTC (permalink / raw)
To: kernel, Lee Jones, Pavel Machek, Fenglin Wu
Cc: Subbaraman Narayanamurthy, linux-leds, linux-kernel, Fenglin Wu
There is a current clamp register needs to be updated when enabling
torch LED, and the register address is different between different
PMIC flash LED modules. Add changes to address it.
Signed-off-by: Fenglin Wu <fenglin.wu@oss.qualcomm.com>
---
Fenglin Wu (2):
leds: flash: leds-qcom-flash: update torch current clamp setting
leds: flash: leds-qcom-flash: add a separate register map for PMI8998
drivers/leds/flash/leds-qcom-flash.c | 41 ++++++++++++++++++++++++++++++++----
1 file changed, 37 insertions(+), 4 deletions(-)
---
base-commit: 4903924ac7ef31fbbe48b3261b1bc86ce6cd7e97
change-id: 20250725-fix-torch-clamp-issue-ca25212aa224
Best regards,
--
Fenglin Wu <fenglin.wu@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/2] leds: flash: leds-qcom-flash: update torch current clamp setting 2025-07-25 10:04 [PATCH 0/2] leds: flash: leds-qcom-flash: update torch current clamp setting Fenglin Wu via B4 Relay @ 2025-07-25 10:04 ` Fenglin Wu via B4 Relay 2025-07-25 12:37 ` Konrad Dybcio 2025-07-25 10:04 ` [PATCH 2/2] leds: flash: leds-qcom-flash: add a separate register map for PMI8998 Fenglin Wu via B4 Relay 1 sibling, 1 reply; 8+ messages in thread From: Fenglin Wu via B4 Relay @ 2025-07-25 10:04 UTC (permalink / raw) To: kernel, Lee Jones, Pavel Machek, Fenglin Wu Cc: Subbaraman Narayanamurthy, linux-leds, linux-kernel, Fenglin Wu From: Fenglin Wu <fenglin.wu@oss.qualcomm.com> There is a register to clamp the flash current per LED channel when safety timer is disabled. It needs to be updated according to the maximum torch LED current setting to ensure the torch current won't be clamped unexpectedly. Fixes: 96a2e242a5dc ("leds: flash: Add driver to support flash LED module in QCOM PMICs") Signed-off-by: Fenglin Wu <fenglin.wu@oss.qualcomm.com> --- drivers/leds/flash/leds-qcom-flash.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/leds/flash/leds-qcom-flash.c b/drivers/leds/flash/leds-qcom-flash.c index 89cf5120f5d55bbb7e24faa8c3a946416f8fed46..9c2e41cfddcf2d50d5a633cb157084371a631d74 100644 --- a/drivers/leds/flash/leds-qcom-flash.c +++ b/drivers/leds/flash/leds-qcom-flash.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022, 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved. */ #include <linux/bitfield.h> @@ -111,6 +111,7 @@ enum { REG_IRESOLUTION, REG_CHAN_STROBE, REG_CHAN_EN, + REG_TORCH_CLAMP, REG_THERM_THRSH1, REG_THERM_THRSH2, REG_THERM_THRSH3, @@ -127,6 +128,7 @@ static const struct reg_field mvflash_3ch_regs[REG_MAX_COUNT] = { REG_FIELD(0x47, 0, 5), /* iresolution */ REG_FIELD_ID(0x49, 0, 2, 3, 1), /* chan_strobe */ REG_FIELD(0x4c, 0, 2), /* chan_en */ + REG_FIELD(0xec, 0, 6), /* torch_clamp */ REG_FIELD(0x56, 0, 2), /* therm_thrsh1 */ REG_FIELD(0x57, 0, 2), /* therm_thrsh2 */ REG_FIELD(0x58, 0, 2), /* therm_thrsh3 */ @@ -142,6 +144,7 @@ static const struct reg_field mvflash_4ch_regs[REG_MAX_COUNT] = { REG_FIELD(0x49, 0, 3), /* iresolution */ REG_FIELD_ID(0x4a, 0, 6, 4, 1), /* chan_strobe */ REG_FIELD(0x4e, 0, 3), /* chan_en */ + REG_FIELD(0xed, 0, 6), /* torch_clamp */ REG_FIELD(0x7a, 0, 2), /* therm_thrsh1 */ REG_FIELD(0x78, 0, 2), /* therm_thrsh2 */ }; @@ -156,6 +159,7 @@ struct qcom_flash_data { u8 max_channels; u8 chan_en_bits; u8 revision; + u8 torch_clamp; }; struct qcom_flash_led { @@ -702,6 +706,7 @@ static int qcom_flash_register_led_device(struct device *dev, u32 current_ua, timeout_us; u32 channels[4]; int i, rc, count; + u8 torch_clamp; count = fwnode_property_count_u32(node, "led-sources"); if (count <= 0) { @@ -751,6 +756,12 @@ static int qcom_flash_register_led_device(struct device *dev, current_ua = min_t(u32, current_ua, TORCH_CURRENT_MAX_UA * led->chan_count); led->max_torch_current_ma = current_ua / UA_PER_MA; + torch_clamp = (current_ua / led->chan_count) / TORCH_IRES_UA; + if (torch_clamp != 0) + torch_clamp--; + + flash_data->torch_clamp = max_t(u8, flash_data->torch_clamp, torch_clamp); + if (fwnode_property_present(node, "flash-max-microamp")) { flash->led_cdev.flags |= LED_DEV_CAP_FLASH; @@ -917,8 +928,7 @@ static int qcom_flash_led_probe(struct platform_device *pdev) flash_data->leds_count++; } - return 0; - + return regmap_field_write(flash_data->r_fields[REG_TORCH_CLAMP], flash_data->torch_clamp); release: while (flash_data->v4l2_flash[flash_data->leds_count] && flash_data->leds_count) v4l2_flash_release(flash_data->v4l2_flash[flash_data->leds_count--]); -- 2.34.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] leds: flash: leds-qcom-flash: update torch current clamp setting 2025-07-25 10:04 ` [PATCH 1/2] " Fenglin Wu via B4 Relay @ 2025-07-25 12:37 ` Konrad Dybcio 2025-07-25 12:45 ` Konrad Dybcio 2025-07-28 2:27 ` Fenglin Wu 0 siblings, 2 replies; 8+ messages in thread From: Konrad Dybcio @ 2025-07-25 12:37 UTC (permalink / raw) To: fenglin.wu, kernel, Lee Jones, Pavel Machek, Fenglin Wu Cc: Subbaraman Narayanamurthy, linux-leds, linux-kernel On 7/25/25 12:04 PM, 'Fenglin Wu via B4 Relay' via kernel wrote: > From: Fenglin Wu <fenglin.wu@oss.qualcomm.com> > > There is a register to clamp the flash current per LED channel when > safety timer is disabled. It needs to be updated according to the > maximum torch LED current setting to ensure the torch current won't > be clamped unexpectedly. > > Fixes: 96a2e242a5dc ("leds: flash: Add driver to support flash LED module in QCOM PMICs") > Signed-off-by: Fenglin Wu <fenglin.wu@oss.qualcomm.com> > --- > drivers/leds/flash/leds-qcom-flash.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/drivers/leds/flash/leds-qcom-flash.c b/drivers/leds/flash/leds-qcom-flash.c > index 89cf5120f5d55bbb7e24faa8c3a946416f8fed46..9c2e41cfddcf2d50d5a633cb157084371a631d74 100644 > --- a/drivers/leds/flash/leds-qcom-flash.c > +++ b/drivers/leds/flash/leds-qcom-flash.c > @@ -1,6 +1,6 @@ > // SPDX-License-Identifier: GPL-2.0-only > /* > - * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved. > + * Copyright (c) 2022, 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved. > */ > > #include <linux/bitfield.h> > @@ -111,6 +111,7 @@ enum { > REG_IRESOLUTION, > REG_CHAN_STROBE, > REG_CHAN_EN, > + REG_TORCH_CLAMP, This is not the name of this register on at least PM8150L > REG_THERM_THRSH1, > REG_THERM_THRSH2, > REG_THERM_THRSH3, > @@ -127,6 +128,7 @@ static const struct reg_field mvflash_3ch_regs[REG_MAX_COUNT] = { > REG_FIELD(0x47, 0, 5), /* iresolution */ > REG_FIELD_ID(0x49, 0, 2, 3, 1), /* chan_strobe */ > REG_FIELD(0x4c, 0, 2), /* chan_en */ > + REG_FIELD(0xec, 0, 6), /* torch_clamp */ Please keep it sorted by address > REG_FIELD(0x56, 0, 2), /* therm_thrsh1 */ > REG_FIELD(0x57, 0, 2), /* therm_thrsh2 */ > REG_FIELD(0x58, 0, 2), /* therm_thrsh3 */ > @@ -142,6 +144,7 @@ static const struct reg_field mvflash_4ch_regs[REG_MAX_COUNT] = { > REG_FIELD(0x49, 0, 3), /* iresolution */ > REG_FIELD_ID(0x4a, 0, 6, 4, 1), /* chan_strobe */ > REG_FIELD(0x4e, 0, 3), /* chan_en */ > + REG_FIELD(0xed, 0, 6), /* torch_clamp */ > REG_FIELD(0x7a, 0, 2), /* therm_thrsh1 */ > REG_FIELD(0x78, 0, 2), /* therm_thrsh2 */ > }; > @@ -156,6 +159,7 @@ struct qcom_flash_data { > u8 max_channels; > u8 chan_en_bits; > u8 revision; > + u8 torch_clamp; > }; > > struct qcom_flash_led { > @@ -702,6 +706,7 @@ static int qcom_flash_register_led_device(struct device *dev, > u32 current_ua, timeout_us; > u32 channels[4]; > int i, rc, count; > + u8 torch_clamp; > > count = fwnode_property_count_u32(node, "led-sources"); > if (count <= 0) { > @@ -751,6 +756,12 @@ static int qcom_flash_register_led_device(struct device *dev, > current_ua = min_t(u32, current_ua, TORCH_CURRENT_MAX_UA * led->chan_count); > led->max_torch_current_ma = current_ua / UA_PER_MA; > > + torch_clamp = (current_ua / led->chan_count) / TORCH_IRES_UA; > + if (torch_clamp != 0) > + torch_clamp--; In case anyone's wondering, ((1<<6) + 1) 4 * 5000 == 1280000 which we set on some (all?) devices Konrad ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] leds: flash: leds-qcom-flash: update torch current clamp setting 2025-07-25 12:37 ` Konrad Dybcio @ 2025-07-25 12:45 ` Konrad Dybcio 2025-07-28 2:27 ` Fenglin Wu 1 sibling, 0 replies; 8+ messages in thread From: Konrad Dybcio @ 2025-07-25 12:45 UTC (permalink / raw) To: fenglin.wu, kernel, Lee Jones, Pavel Machek, Fenglin Wu Cc: Subbaraman Narayanamurthy, linux-leds, linux-kernel On 7/25/25 2:37 PM, Konrad Dybcio wrote: > On 7/25/25 12:04 PM, 'Fenglin Wu via B4 Relay' via kernel wrote: >> From: Fenglin Wu <fenglin.wu@oss.qualcomm.com> >> >> There is a register to clamp the flash current per LED channel when >> safety timer is disabled. It needs to be updated according to the >> maximum torch LED current setting to ensure the torch current won't >> be clamped unexpectedly. >> >> Fixes: 96a2e242a5dc ("leds: flash: Add driver to support flash LED module in QCOM PMICs") >> Signed-off-by: Fenglin Wu <fenglin.wu@oss.qualcomm.com> >> --- >> drivers/leds/flash/leds-qcom-flash.c | 16 +++++++++++++--- >> 1 file changed, 13 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/leds/flash/leds-qcom-flash.c b/drivers/leds/flash/leds-qcom-flash.c >> index 89cf5120f5d55bbb7e24faa8c3a946416f8fed46..9c2e41cfddcf2d50d5a633cb157084371a631d74 100644 >> --- a/drivers/leds/flash/leds-qcom-flash.c >> +++ b/drivers/leds/flash/leds-qcom-flash.c >> @@ -1,6 +1,6 @@ >> // SPDX-License-Identifier: GPL-2.0-only >> /* >> - * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved. >> + * Copyright (c) 2022, 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved. >> */ >> >> #include <linux/bitfield.h> >> @@ -111,6 +111,7 @@ enum { >> REG_IRESOLUTION, >> REG_CHAN_STROBE, >> REG_CHAN_EN, >> + REG_TORCH_CLAMP, > > This is not the name of this register on at least PM8150L > >> REG_THERM_THRSH1, >> REG_THERM_THRSH2, >> REG_THERM_THRSH3, >> @@ -127,6 +128,7 @@ static const struct reg_field mvflash_3ch_regs[REG_MAX_COUNT] = { >> REG_FIELD(0x47, 0, 5), /* iresolution */ >> REG_FIELD_ID(0x49, 0, 2, 3, 1), /* chan_strobe */ >> REG_FIELD(0x4c, 0, 2), /* chan_en */ >> + REG_FIELD(0xec, 0, 6), /* torch_clamp */ > > Please keep it sorted by address > > >> REG_FIELD(0x56, 0, 2), /* therm_thrsh1 */ >> REG_FIELD(0x57, 0, 2), /* therm_thrsh2 */ >> REG_FIELD(0x58, 0, 2), /* therm_thrsh3 */ >> @@ -142,6 +144,7 @@ static const struct reg_field mvflash_4ch_regs[REG_MAX_COUNT] = { >> REG_FIELD(0x49, 0, 3), /* iresolution */ >> REG_FIELD_ID(0x4a, 0, 6, 4, 1), /* chan_strobe */ >> REG_FIELD(0x4e, 0, 3), /* chan_en */ >> + REG_FIELD(0xed, 0, 6), /* torch_clamp */ >> REG_FIELD(0x7a, 0, 2), /* therm_thrsh1 */ >> REG_FIELD(0x78, 0, 2), /* therm_thrsh2 */ >> }; >> @@ -156,6 +159,7 @@ struct qcom_flash_data { >> u8 max_channels; >> u8 chan_en_bits; >> u8 revision; >> + u8 torch_clamp; >> }; >> >> struct qcom_flash_led { >> @@ -702,6 +706,7 @@ static int qcom_flash_register_led_device(struct device *dev, >> u32 current_ua, timeout_us; >> u32 channels[4]; >> int i, rc, count; >> + u8 torch_clamp; >> >> count = fwnode_property_count_u32(node, "led-sources"); >> if (count <= 0) { >> @@ -751,6 +756,12 @@ static int qcom_flash_register_led_device(struct device *dev, >> current_ua = min_t(u32, current_ua, TORCH_CURRENT_MAX_UA * led->chan_count); >> led->max_torch_current_ma = current_ua / UA_PER_MA; >> >> + torch_clamp = (current_ua / led->chan_count) / TORCH_IRES_UA; >> + if (torch_clamp != 0) >> + torch_clamp--; > > In case anyone's wondering, ((1<<6) + 1) 4 * 5000 == 1280000 which we set > on some (all?) devices Scratch "the + 1", I had both the width of the field and its max value in mind.. the rhs still matches.. Konrad ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] leds: flash: leds-qcom-flash: update torch current clamp setting 2025-07-25 12:37 ` Konrad Dybcio 2025-07-25 12:45 ` Konrad Dybcio @ 2025-07-28 2:27 ` Fenglin Wu 2025-07-28 9:18 ` Konrad Dybcio 1 sibling, 1 reply; 8+ messages in thread From: Fenglin Wu @ 2025-07-28 2:27 UTC (permalink / raw) To: Konrad Dybcio, kernel, Lee Jones, Pavel Machek, Fenglin Wu Cc: Subbaraman Narayanamurthy, linux-leds, linux-kernel On 7/25/2025 8:37 PM, Konrad Dybcio wrote: > On 7/25/25 12:04 PM, 'Fenglin Wu via B4 Relay' via kernel wrote: >> From: Fenglin Wu <fenglin.wu@oss.qualcomm.com> >> >> There is a register to clamp the flash current per LED channel when >> safety timer is disabled. It needs to be updated according to the >> maximum torch LED current setting to ensure the torch current won't >> be clamped unexpectedly. >> >> Fixes: 96a2e242a5dc ("leds: flash: Add driver to support flash LED module in QCOM PMICs") >> Signed-off-by: Fenglin Wu <fenglin.wu@oss.qualcomm.com> >> --- >> drivers/leds/flash/leds-qcom-flash.c | 16 +++++++++++++--- >> 1 file changed, 13 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/leds/flash/leds-qcom-flash.c b/drivers/leds/flash/leds-qcom-flash.c >> index 89cf5120f5d55bbb7e24faa8c3a946416f8fed46..9c2e41cfddcf2d50d5a633cb157084371a631d74 100644 >> --- a/drivers/leds/flash/leds-qcom-flash.c >> +++ b/drivers/leds/flash/leds-qcom-flash.c >> @@ -1,6 +1,6 @@ >> // SPDX-License-Identifier: GPL-2.0-only >> /* >> - * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved. >> + * Copyright (c) 2022, 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved. >> */ >> >> #include <linux/bitfield.h> >> @@ -111,6 +111,7 @@ enum { >> REG_IRESOLUTION, >> REG_CHAN_STROBE, >> REG_CHAN_EN, >> + REG_TORCH_CLAMP, > This is not the name of this register on at least PM8150L The register is referred to as 'TIMER_DISA_MITIGATION_CLAMP' in the documentation. 'TIMER_DISA' indicates the flash module operating in torch mode. We can remove 'MITIGATION' to create a shorter name for the enum. > >> REG_THERM_THRSH1, >> REG_THERM_THRSH2, >> REG_THERM_THRSH3, >> @@ -127,6 +128,7 @@ static const struct reg_field mvflash_3ch_regs[REG_MAX_COUNT] = { >> REG_FIELD(0x47, 0, 5), /* iresolution */ >> REG_FIELD_ID(0x49, 0, 2, 3, 1), /* chan_strobe */ >> REG_FIELD(0x4c, 0, 2), /* chan_en */ >> + REG_FIELD(0xec, 0, 6), /* torch_clamp */ > Please keep it sorted by address I need to keep the 'therm_thrsh1/2/3' register fields at the end of this array because 'mvflash_4ch_regs' doesn't include a 'therm_thrsh3' register. Placing the 'therm_thrshx' registers in the middle would require creating a placeholder, which I couldn't figure out how to do effectively. Do you have any suggestions? > > >> REG_FIELD(0x56, 0, 2), /* therm_thrsh1 */ >> REG_FIELD(0x57, 0, 2), /* therm_thrsh2 */ >> REG_FIELD(0x58, 0, 2), /* therm_thrsh3 */ >> @@ -142,6 +144,7 @@ static const struct reg_field mvflash_4ch_regs[REG_MAX_COUNT] = { >> REG_FIELD(0x49, 0, 3), /* iresolution */ >> REG_FIELD_ID(0x4a, 0, 6, 4, 1), /* chan_strobe */ >> REG_FIELD(0x4e, 0, 3), /* chan_en */ >> + REG_FIELD(0xed, 0, 6), /* torch_clamp */ >> REG_FIELD(0x7a, 0, 2), /* therm_thrsh1 */ >> REG_FIELD(0x78, 0, 2), /* therm_thrsh2 */ >> }; >> @@ -156,6 +159,7 @@ struct qcom_flash_data { >> u8 max_channels; >> u8 chan_en_bits; >> u8 revision; >> + u8 torch_clamp; >> }; >> >> struct qcom_flash_led { >> @@ -702,6 +706,7 @@ static int qcom_flash_register_led_device(struct device *dev, >> u32 current_ua, timeout_us; >> u32 channels[4]; >> int i, rc, count; >> + u8 torch_clamp; >> >> count = fwnode_property_count_u32(node, "led-sources"); >> if (count <= 0) { >> @@ -751,6 +756,12 @@ static int qcom_flash_register_led_device(struct device *dev, >> current_ua = min_t(u32, current_ua, TORCH_CURRENT_MAX_UA * led->chan_count); >> led->max_torch_current_ma = current_ua / UA_PER_MA; >> >> + torch_clamp = (current_ua / led->chan_count) / TORCH_IRES_UA; >> + if (torch_clamp != 0) >> + torch_clamp--; > In case anyone's wondering, ((1<<6) + 1) 4 * 5000 == 1280000 which we set > on some (all?) devices > > Konrad ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] leds: flash: leds-qcom-flash: update torch current clamp setting 2025-07-28 2:27 ` Fenglin Wu @ 2025-07-28 9:18 ` Konrad Dybcio 0 siblings, 0 replies; 8+ messages in thread From: Konrad Dybcio @ 2025-07-28 9:18 UTC (permalink / raw) To: Fenglin Wu, kernel, Lee Jones, Pavel Machek, Fenglin Wu Cc: Subbaraman Narayanamurthy, linux-leds, linux-kernel On 7/28/25 4:27 AM, Fenglin Wu wrote: > > On 7/25/2025 8:37 PM, Konrad Dybcio wrote: >> On 7/25/25 12:04 PM, 'Fenglin Wu via B4 Relay' via kernel wrote: >>> From: Fenglin Wu <fenglin.wu@oss.qualcomm.com> >>> >>> There is a register to clamp the flash current per LED channel when >>> safety timer is disabled. It needs to be updated according to the >>> maximum torch LED current setting to ensure the torch current won't >>> be clamped unexpectedly. >>> >>> Fixes: 96a2e242a5dc ("leds: flash: Add driver to support flash LED module in QCOM PMICs") >>> Signed-off-by: Fenglin Wu <fenglin.wu@oss.qualcomm.com> >>> --- >>> drivers/leds/flash/leds-qcom-flash.c | 16 +++++++++++++--- >>> 1 file changed, 13 insertions(+), 3 deletions(-) >>> >>> diff --git a/drivers/leds/flash/leds-qcom-flash.c b/drivers/leds/flash/leds-qcom-flash.c >>> index 89cf5120f5d55bbb7e24faa8c3a946416f8fed46..9c2e41cfddcf2d50d5a633cb157084371a631d74 100644 >>> --- a/drivers/leds/flash/leds-qcom-flash.c >>> +++ b/drivers/leds/flash/leds-qcom-flash.c >>> @@ -1,6 +1,6 @@ >>> // SPDX-License-Identifier: GPL-2.0-only >>> /* >>> - * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved. >>> + * Copyright (c) 2022, 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved. >>> */ >>> #include <linux/bitfield.h> >>> @@ -111,6 +111,7 @@ enum { >>> REG_IRESOLUTION, >>> REG_CHAN_STROBE, >>> REG_CHAN_EN, >>> + REG_TORCH_CLAMP, >> This is not the name of this register on at least PM8150L > The register is referred to as 'TIMER_DISA_MITIGATION_CLAMP' in the documentation. 'TIMER_DISA' indicates the flash module operating in torch mode. We can remove 'MITIGATION' to create a shorter name for the enum.>> >>> REG_THERM_THRSH1, >>> REG_THERM_THRSH2, >>> REG_THERM_THRSH3, >>> @@ -127,6 +128,7 @@ static const struct reg_field mvflash_3ch_regs[REG_MAX_COUNT] = { >>> REG_FIELD(0x47, 0, 5), /* iresolution */ >>> REG_FIELD_ID(0x49, 0, 2, 3, 1), /* chan_strobe */ >>> REG_FIELD(0x4c, 0, 2), /* chan_en */ >>> + REG_FIELD(0xec, 0, 6), /* torch_clamp */ >> Please keep it sorted by address > I need to keep the 'therm_thrsh1/2/3' register fields at the end of this array because 'mvflash_4ch_regs' doesn't include a 'therm_thrsh3' register. Placing the 'therm_thrshx' registers in the middle would require creating a placeholder, which I couldn't figure out how to do effectively. Do you have any suggestions? Designated initializers (i.e. [REG_CHAN_EN] = REG_FIELD(...),) Konrad ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] leds: flash: leds-qcom-flash: add a separate register map for PMI8998 2025-07-25 10:04 [PATCH 0/2] leds: flash: leds-qcom-flash: update torch current clamp setting Fenglin Wu via B4 Relay 2025-07-25 10:04 ` [PATCH 1/2] " Fenglin Wu via B4 Relay @ 2025-07-25 10:04 ` Fenglin Wu via B4 Relay 2025-07-25 12:42 ` Konrad Dybcio 1 sibling, 1 reply; 8+ messages in thread From: Fenglin Wu via B4 Relay @ 2025-07-25 10:04 UTC (permalink / raw) To: kernel, Lee Jones, Pavel Machek, Fenglin Wu Cc: Subbaraman Narayanamurthy, linux-leds, linux-kernel, Fenglin Wu From: Fenglin Wu <fenglin.wu@oss.qualcomm.com> The 3-channel flash module in PMI8998 has several registers different than the others, such as: torch_clamp. Add different register fields for it. Signed-off-by: Fenglin Wu <fenglin.wu@oss.qualcomm.com> --- drivers/leds/flash/leds-qcom-flash.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/leds/flash/leds-qcom-flash.c b/drivers/leds/flash/leds-qcom-flash.c index 9c2e41cfddcf2d50d5a633cb157084371a631d74..2554ef7bcae6bc8f66edbffc7c885a9386b263ad 100644 --- a/drivers/leds/flash/leds-qcom-flash.c +++ b/drivers/leds/flash/leds-qcom-flash.c @@ -118,6 +118,22 @@ enum { REG_MAX_COUNT, }; +static const struct reg_field mvflash_3ch_pmi8998_regs[REG_MAX_COUNT] = { + REG_FIELD(0x08, 0, 7), /* status1 */ + REG_FIELD(0x09, 0, 7), /* status2 */ + REG_FIELD(0x0a, 0, 7), /* status3 */ + REG_FIELD_ID(0x40, 0, 7, 3, 1), /* chan_timer */ + REG_FIELD_ID(0x43, 0, 6, 3, 1), /* itarget */ + REG_FIELD(0x46, 7, 7), /* module_en */ + REG_FIELD(0x47, 0, 5), /* iresolution */ + REG_FIELD_ID(0x49, 0, 2, 3, 1), /* chan_strobe */ + REG_FIELD(0x4c, 0, 2), /* chan_en */ + REG_FIELD(0xea, 0, 6), /* torch_clamp */ + REG_FIELD(0x56, 0, 2), /* therm_thrsh1 */ + REG_FIELD(0x57, 0, 2), /* therm_thrsh2 */ + REG_FIELD(0x58, 0, 2), /* therm_thrsh3 */ +}; + static const struct reg_field mvflash_3ch_regs[REG_MAX_COUNT] = { REG_FIELD(0x08, 0, 7), /* status1 */ REG_FIELD(0x09, 0, 7), /* status2 */ @@ -862,13 +878,20 @@ static int qcom_flash_led_probe(struct platform_device *pdev) return rc; } - if (val == FLASH_SUBTYPE_3CH_PM8150_VAL || val == FLASH_SUBTYPE_3CH_PMI8998_VAL) { + if (val == FLASH_SUBTYPE_3CH_PM8150_VAL) { flash_data->hw_type = QCOM_MVFLASH_3CH; flash_data->max_channels = 3; regs = devm_kmemdup(dev, mvflash_3ch_regs, sizeof(mvflash_3ch_regs), GFP_KERNEL); if (!regs) return -ENOMEM; + } else if (val == FLASH_SUBTYPE_3CH_PMI8998_VAL) { + flash_data->hw_type = QCOM_MVFLASH_3CH; + flash_data->max_channels = 3; + regs = devm_kmemdup(dev, mvflash_3ch_pmi8998_regs, + sizeof(mvflash_3ch_pmi8998_regs), GFP_KERNEL); + if (!regs) + return -ENOMEM; } else if (val == FLASH_SUBTYPE_4CH_VAL) { flash_data->hw_type = QCOM_MVFLASH_4CH; flash_data->max_channels = 4; -- 2.34.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] leds: flash: leds-qcom-flash: add a separate register map for PMI8998 2025-07-25 10:04 ` [PATCH 2/2] leds: flash: leds-qcom-flash: add a separate register map for PMI8998 Fenglin Wu via B4 Relay @ 2025-07-25 12:42 ` Konrad Dybcio 0 siblings, 0 replies; 8+ messages in thread From: Konrad Dybcio @ 2025-07-25 12:42 UTC (permalink / raw) To: fenglin.wu, kernel, Lee Jones, Pavel Machek, Fenglin Wu Cc: Subbaraman Narayanamurthy, linux-leds, linux-kernel On 7/25/25 12:04 PM, 'Fenglin Wu via B4 Relay' via kernel wrote: > From: Fenglin Wu <fenglin.wu@oss.qualcomm.com> > > The 3-channel flash module in PMI8998 has several registers different > than the others, such as: torch_clamp. Add different register fields > for it. > > Signed-off-by: Fenglin Wu <fenglin.wu@oss.qualcomm.com> > --- > drivers/leds/flash/leds-qcom-flash.c | 25 ++++++++++++++++++++++++- > 1 file changed, 24 insertions(+), 1 deletion(-) > > diff --git a/drivers/leds/flash/leds-qcom-flash.c b/drivers/leds/flash/leds-qcom-flash.c > index 9c2e41cfddcf2d50d5a633cb157084371a631d74..2554ef7bcae6bc8f66edbffc7c885a9386b263ad 100644 > --- a/drivers/leds/flash/leds-qcom-flash.c > +++ b/drivers/leds/flash/leds-qcom-flash.c > @@ -118,6 +118,22 @@ enum { > REG_MAX_COUNT, > }; > > +static const struct reg_field mvflash_3ch_pmi8998_regs[REG_MAX_COUNT] = { > + REG_FIELD(0x08, 0, 7), /* status1 */ bits 0-5 > + REG_FIELD(0x09, 0, 7), /* status2 */ > + REG_FIELD(0x0a, 0, 7), /* status3 */ > + REG_FIELD_ID(0x40, 0, 7, 3, 1), /* chan_timer */ > + REG_FIELD_ID(0x43, 0, 6, 3, 1), /* itarget */ > + REG_FIELD(0x46, 7, 7), /* module_en */ > + REG_FIELD(0x47, 0, 5), /* iresolution */ > + REG_FIELD_ID(0x49, 0, 2, 3, 1), /* chan_strobe */ > + REG_FIELD(0x4c, 0, 2), /* chan_en */ > + REG_FIELD(0xea, 0, 6), /* torch_clamp */ > + REG_FIELD(0x56, 0, 2), /* therm_thrsh1 */ > + REG_FIELD(0x57, 0, 2), /* therm_thrsh2 */ > + REG_FIELD(0x58, 0, 2), /* therm_thrsh3 */ Please keep them sorted Konrad ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-07-28 9:18 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-07-25 10:04 [PATCH 0/2] leds: flash: leds-qcom-flash: update torch current clamp setting Fenglin Wu via B4 Relay 2025-07-25 10:04 ` [PATCH 1/2] " Fenglin Wu via B4 Relay 2025-07-25 12:37 ` Konrad Dybcio 2025-07-25 12:45 ` Konrad Dybcio 2025-07-28 2:27 ` Fenglin Wu 2025-07-28 9:18 ` Konrad Dybcio 2025-07-25 10:04 ` [PATCH 2/2] leds: flash: leds-qcom-flash: add a separate register map for PMI8998 Fenglin Wu via B4 Relay 2025-07-25 12:42 ` Konrad Dybcio
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®