mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/3] leds: aat1290: Add support for AAT1270
@ 2026-10-13 18:18 Svyatoslav Ryhel
  2026-10-13 18:18 ` [PATCH v2 1/3] dt-bindings: leds: skyworks,aat1290: Document AAT1270 Current Regulator for Flash LEDs Svyatoslav Ryhel
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-13 18:18 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Kees Cook, Svyatoslav Ryhel, Jacek Anaszewski
  Cc: linux-leds, devicetree, linux-kernel

Document AAT1270 and FLINH pin, adjust driver to support AAT1270.

---
Changes in v2:
- added formulas for calculations
- adjusted mm_to_fl_ratio to be set according to chip info
- adjusted timeout configuration to be set according to chip info
---

Svyatoslav Ryhel (3):
  dt-bindings: leds: skyworks,aat1290: Document AAT1270 Current
    Regulator for Flash LEDs
  dt-bindings: leds: skyworks,aat1290: Document FLINH pin
  leds: aat1290: Add support for AAT1270 Current Regulator for Flash
    LEDs

 .../bindings/leds/skyworks,aat1290.yaml       | 13 ++-
 drivers/leds/flash/leds-aat1290.c             | 91 ++++++++++++++-----
 2 files changed, 77 insertions(+), 27 deletions(-)

-- 
2.53.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 1/3] dt-bindings: leds: skyworks,aat1290: Document AAT1270 Current Regulator for Flash LEDs
  2026-10-13 18:18 [PATCH v2 0/3] leds: aat1290: Add support for AAT1270 Svyatoslav Ryhel
@ 2026-10-13 18:18 ` Svyatoslav Ryhel
  2026-10-13 19:37   ` Jacek Anaszewski
  2026-10-13 18:18 ` [PATCH v2 2/3] dt-bindings: leds: skyworks,aat1290: Document FLINH pin Svyatoslav Ryhel
  2026-10-13 18:18 ` [PATCH v2 3/3] leds: aat1290: Add support for AAT1270 Current Regulator for Flash LEDs Svyatoslav Ryhel
  2 siblings, 1 reply; 6+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-13 18:18 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Kees Cook, Svyatoslav Ryhel, Jacek Anaszewski
  Cc: linux-leds, devicetree, linux-kernel

The AAT1270 Current Regulator for Flash LEDs has a similar configuration
to the AAT1290, but it uses a different programming model and requires a
separate compatible.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
 .../devicetree/bindings/leds/skyworks,aat1290.yaml       | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml b/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml
index 65576dfdca110..7c26bb135c0a7 100644
--- a/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml
+++ b/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml
@@ -19,7 +19,9 @@ description: |
 
 properties:
   compatible:
-    const: skyworks,aat1290
+    enum:
+      - skyworks,aat1290
+      - skyworks,aat1270
 
   enset-gpios:
     maxItems: 1
@@ -39,12 +41,13 @@ properties:
       flash-max-microamp:
         description: |
           Maximum flash LED supply current can be calculated using following
-          formula: I = 1A * 162 kOhm / Rset.
+          formula: I = 1A * 162 kOhm / Rset (for AAT1290) and
+          I = 1A * 81 kOhm / Rset (for AAT1270).
 
       flash-max-timeout-us:
         description: |
           Maximum flash timeout can be calculated using following formula:
-            T = 8.82 * 10^9 * Ct.
+          T = 8.82 * 10^9 * Ct (for AAT1290) and T = 21.5 * 10^9 * Ct (for AAT1270).
 
     required:
       - flash-max-microamp
-- 
2.53.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 2/3] dt-bindings: leds: skyworks,aat1290: Document FLINH pin
  2026-10-13 18:18 [PATCH v2 0/3] leds: aat1290: Add support for AAT1270 Svyatoslav Ryhel
  2026-10-13 18:18 ` [PATCH v2 1/3] dt-bindings: leds: skyworks,aat1290: Document AAT1270 Current Regulator for Flash LEDs Svyatoslav Ryhel
@ 2026-10-13 18:18 ` Svyatoslav Ryhel
  2026-10-13 18:18 ` [PATCH v2 3/3] leds: aat1290: Add support for AAT1270 Current Regulator for Flash LEDs Svyatoslav Ryhel
  2 siblings, 0 replies; 6+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-13 18:18 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Kees Cook, Svyatoslav Ryhel, Jacek Anaszewski
  Cc: linux-leds, devicetree, linux-kernel

Both the AAT1270 and AAT1290 feature a FLINH pin used for mandatory Flash
inhibition.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
 Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml b/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml
index 7c26bb135c0a7..a5f3eba7d6480 100644
--- a/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml
+++ b/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml
@@ -31,6 +31,10 @@ properties:
     maxItems: 1
     description: FL_EN pin
 
+  flinh-gpios:
+    maxItems: 1
+    description: FLINH pin
+
   led:
     $ref: common.yaml#
     unevaluatedProperties: false
-- 
2.53.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 3/3] leds: aat1290: Add support for AAT1270 Current Regulator for Flash LEDs
  2026-10-13 18:18 [PATCH v2 0/3] leds: aat1290: Add support for AAT1270 Svyatoslav Ryhel
  2026-10-13 18:18 ` [PATCH v2 1/3] dt-bindings: leds: skyworks,aat1290: Document AAT1270 Current Regulator for Flash LEDs Svyatoslav Ryhel
  2026-10-13 18:18 ` [PATCH v2 2/3] dt-bindings: leds: skyworks,aat1290: Document FLINH pin Svyatoslav Ryhel
@ 2026-10-13 18:18 ` Svyatoslav Ryhel
  2026-10-13 19:35   ` Jacek Anaszewski
  2 siblings, 1 reply; 6+ messages in thread
From: Svyatoslav Ryhel @ 2026-10-13 18:18 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Kees Cook, Svyatoslav Ryhel, Jacek Anaszewski
  Cc: linux-leds, devicetree, linux-kernel

The AAT1270 is quite similar to the AAT1290, but it does not support the
Advanced Simple Serial Control (AS2C) used in the AAT1290. The AAT1270
uses an earlier version of AS2C, namely Simple Serial Control, which lacks
address-sending capabilities.

Differentiate the chips by using a description structure with a flag to
indicate if AS2C is supported, Maximum Movie to Flash Mode Current ratio
and if flash timeout is fixed by the hardware.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
 drivers/leds/flash/leds-aat1290.c | 91 +++++++++++++++++++++++--------
 1 file changed, 67 insertions(+), 24 deletions(-)

diff --git a/drivers/leds/flash/leds-aat1290.c b/drivers/leds/flash/leds-aat1290.c
index 4bde0b07fe785..cc1771438510d 100644
--- a/drivers/leds/flash/leds-aat1290.c
+++ b/drivers/leds/flash/leds-aat1290.c
@@ -33,8 +33,8 @@
 #define AAT1290_MM_CURRENT_RATIO_ADDR	20
 #define AAT1290_MM_TO_FL_1_92		1
 
-#define AAT1290_MM_TO_FL_RATIO		1000 / 1920
-#define AAT1290_MAX_MM_CURRENT(fl_max)	(fl_max * AAT1290_MM_TO_FL_RATIO)
+#define AAT1270_MM_TO_FL_RATIO		7300
+#define AAT1290_MM_TO_FL_RATIO		1920
 
 #define AAT1290_LATCH_TIME_MIN_US	500
 #define AAT1290_LATCH_TIME_MAX_US	1000
@@ -43,9 +43,6 @@
 #define AAT1290_FLASH_TM_NUM_LEVELS	16
 #define AAT1290_MM_CURRENT_SCALE_SIZE	15
 
-#define AAT1290_NAME			"aat1290"
-
-
 struct aat1290_led_config_data {
 	/* maximum LED current in movie mode */
 	u32 max_mm_current;
@@ -59,6 +56,17 @@ struct aat1290_led_config_data {
 	enum led_brightness max_brightness;
 };
 
+struct aat1290_led_chip_info {
+	/* led controller name */
+	const char *name;
+	/* Maximum Movie to Flash Mode Current Ratio with 1000 presision */
+	u32 mm_to_fl_ratio;
+	/* Advanced Simple Serial Control support */
+	bool as2c;
+	/* Flash timeout is fixed by the hardware */
+	bool fixed_timeout;
+};
+
 struct aat1290_led {
 	/* platform device data */
 	struct platform_device *pdev;
@@ -74,6 +82,10 @@ struct aat1290_led {
 	struct gpio_desc *gpio_fl_en;
 	/* EN|SET pin  */
 	struct gpio_desc *gpio_en_set;
+
+	/* led controller description */
+	const struct aat1290_led_chip_info *info;
+
 	/* movie mode current scale */
 	int *mm_current_scale;
 	/* device mode */
@@ -101,15 +113,17 @@ static void aat1290_as2cwire_write(struct aat1290_led *led, int addr, int value)
 
 	udelay(AAT1290_FLEN_OFF_DELAY_TIME_US);
 
-	/* write address */
-	for (i = 0; i < addr; ++i) {
-		udelay(AAT1290_EN_SET_TICK_TIME_US);
-		gpiod_direction_output(led->gpio_en_set, 0);
-		udelay(AAT1290_EN_SET_TICK_TIME_US);
-		gpiod_direction_output(led->gpio_en_set, 1);
-	}
+	if (led->info->as2c) {
+		/* write address */
+		for (i = 0; i < addr; ++i) {
+			udelay(AAT1290_EN_SET_TICK_TIME_US);
+			gpiod_direction_output(led->gpio_en_set, 0);
+			udelay(AAT1290_EN_SET_TICK_TIME_US);
+			gpiod_direction_output(led->gpio_en_set, 1);
+		}
 
-	usleep_range(AAT1290_LATCH_TIME_MIN_US, AAT1290_LATCH_TIME_MAX_US);
+		usleep_range(AAT1290_LATCH_TIME_MIN_US, AAT1290_LATCH_TIME_MAX_US);
+	}
 
 	/* write data */
 	for (i = 0; i < value; ++i) {
@@ -150,16 +164,18 @@ static int aat1290_led_brightness_set(struct led_classdev *led_cdev,
 		led->movie_mode = false;
 	} else {
 		if (!led->movie_mode) {
-			aat1290_as2cwire_write(led,
-				AAT1290_MM_CURRENT_RATIO_ADDR,
-				AAT1290_MM_TO_FL_1_92);
+			if (led->info->as2c)
+				aat1290_as2cwire_write(led,
+					AAT1290_MM_CURRENT_RATIO_ADDR,
+					AAT1290_MM_TO_FL_1_92);
 			led->movie_mode = true;
 		}
 
 		aat1290_as2cwire_write(led, AAT1290_MOVIE_MODE_CURRENT_ADDR,
 				AAT1290_MAX_MM_CURR_PERCENT_0 - brightness);
-		aat1290_as2cwire_write(led, AAT1290_MOVIE_MODE_CONFIG_ADDR,
-				AAT1290_MOVIE_MODE_ON);
+		if (led->info->as2c)
+			aat1290_as2cwire_write(led, AAT1290_MOVIE_MODE_CONFIG_ADDR,
+					       AAT1290_MOVIE_MODE_ON);
 	}
 
 	mutex_unlock(&led->lock);
@@ -178,7 +194,8 @@ static int aat1290_led_flash_strobe_set(struct led_classdev_flash *fled_cdev,
 	mutex_lock(&led->lock);
 
 	if (state) {
-		aat1290_set_flash_safety_timer(led, timeout->val);
+		if (!led->info->fixed_timeout)
+			aat1290_set_flash_safety_timer(led, timeout->val);
 		gpiod_direction_output(led->gpio_fl_en, 1);
 	} else {
 		gpiod_direction_output(led->gpio_fl_en, 0);
@@ -308,8 +325,10 @@ static int init_mm_current_scale(struct aat1290_led *led,
 		20, 22, 25, 28, 32, 36, 40, 45, 50, 56,
 		63, 71, 79, 89, 100
 	};
-	int i, max_mm_current =
-			AAT1290_MAX_MM_CURRENT(cfg->max_flash_current);
+	int i, max_mm_current;
+
+	max_mm_current = mult_frac(cfg->max_flash_current, 1000,
+				   led->info->mm_to_fl_ratio);
 
 	led->mm_current_scale = devm_kcalloc(&led->pdev->dev,
 					ARRAY_SIZE(max_mm_current_percent),
@@ -360,7 +379,12 @@ static void aat1290_init_flash_timeout(struct aat1290_led *led,
 
 	/* Init flash timeout setting */
 	setting = &fled_cdev->timeout;
-	setting->min = cfg->max_flash_tm / AAT1290_FLASH_TM_NUM_LEVELS;
+
+	if (!led->info->fixed_timeout)
+		setting->min = cfg->max_flash_tm / AAT1290_FLASH_TM_NUM_LEVELS;
+	else
+		setting->min = cfg->max_flash_tm;
+
 	setting->max = cfg->max_flash_tm;
 	setting->step = setting->min;
 	setting->val = setting->max;
@@ -476,6 +500,10 @@ static int aat1290_led_probe(struct platform_device *pdev)
 	fled_cdev->ops = &flash_ops;
 	led_cdev = &fled_cdev->led_cdev;
 
+	led->info = device_get_match_data(dev);
+	if (!led->info)
+		return -ENODEV;
+
 	ret = aat1290_led_get_configuration(led, &led_cfg, &sub_node);
 	if (ret < 0)
 		return ret;
@@ -490,7 +518,7 @@ static int aat1290_led_probe(struct platform_device *pdev)
 	aat1290_init_flash_timeout(led, &led_cfg);
 
 	init_data.fwnode = of_fwnode_handle(sub_node);
-	init_data.devicename = AAT1290_NAME;
+	init_data.devicename = led->info->name;
 
 	/* Register LED Flash class device */
 	ret = led_classdev_flash_register_ext(&pdev->dev, fled_cdev,
@@ -529,8 +557,23 @@ static void aat1290_led_remove(struct platform_device *pdev)
 	mutex_destroy(&led->lock);
 }
 
+static const struct aat1290_led_chip_info aat1290_info = {
+	.name = "aat1290",
+	.mm_to_fl_ratio = AAT1290_MM_TO_FL_RATIO,
+	.as2c = true,
+	.fixed_timeout = false,
+};
+
+static const struct aat1290_led_chip_info aat1270_info = {
+	.name = "aat1270",
+	.mm_to_fl_ratio = AAT1270_MM_TO_FL_RATIO,
+	.as2c = false,
+	.fixed_timeout = true,
+};
+
 static const struct of_device_id aat1290_led_dt_match[] = {
-	{ .compatible = "skyworks,aat1290" },
+	{ .compatible = "skyworks,aat1290", .data = &aat1290_info },
+	{ .compatible = "skyworks,aat1270", .data = &aat1270_info },
 	{},
 };
 MODULE_DEVICE_TABLE(of, aat1290_led_dt_match);
-- 
2.53.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 3/3] leds: aat1290: Add support for AAT1270 Current Regulator for Flash LEDs
  2026-10-13 18:18 ` [PATCH v2 3/3] leds: aat1290: Add support for AAT1270 Current Regulator for Flash LEDs Svyatoslav Ryhel
@ 2026-10-13 19:35   ` Jacek Anaszewski
  0 siblings, 0 replies; 6+ messages in thread
From: Jacek Anaszewski @ 2026-10-13 19:35 UTC (permalink / raw)
  To: Svyatoslav Ryhel, Lee Jones, Pavel Machek, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Kees Cook
  Cc: linux-leds, devicetree, linux-kernel

Hi Svyatoslav,

Thanks for the update.

On 10/13/26 8:18 PM, Svyatoslav Ryhel wrote:
> The AAT1270 is quite similar to the AAT1290, but it does not support the
> Advanced Simple Serial Control (AS2C) used in the AAT1290. The AAT1270
> uses an earlier version of AS2C, namely Simple Serial Control, which lacks
> address-sending capabilities.
> 
> Differentiate the chips by using a description structure with a flag to
> indicate if AS2C is supported, Maximum Movie to Flash Mode Current ratio
> and if flash timeout is fixed by the hardware.
> 
> Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> ---
>   drivers/leds/flash/leds-aat1290.c | 91 +++++++++++++++++++++++--------
>   1 file changed, 67 insertions(+), 24 deletions(-)

Reviewed-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>

-- 
Best regards,
Jacek Anaszewski

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 1/3] dt-bindings: leds: skyworks,aat1290: Document AAT1270 Current Regulator for Flash LEDs
  2026-10-13 18:18 ` [PATCH v2 1/3] dt-bindings: leds: skyworks,aat1290: Document AAT1270 Current Regulator for Flash LEDs Svyatoslav Ryhel
@ 2026-10-13 19:37   ` Jacek Anaszewski
  0 siblings, 0 replies; 6+ messages in thread
From: Jacek Anaszewski @ 2026-10-13 19:37 UTC (permalink / raw)
  To: Svyatoslav Ryhel, Lee Jones, Pavel Machek, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Kees Cook
  Cc: linux-leds, devicetree, linux-kernel

On 10/13/26 8:18 PM, Svyatoslav Ryhel wrote:
> The AAT1270 Current Regulator for Flash LEDs has a similar configuration
> to the AAT1290, but it uses a different programming model and requires a
> separate compatible.
> 
> Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> ---
>   .../devicetree/bindings/leds/skyworks,aat1290.yaml       | 9 ++++++---
>   1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml b/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml
> index 65576dfdca110..7c26bb135c0a7 100644
> --- a/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml
> +++ b/Documentation/devicetree/bindings/leds/skyworks,aat1290.yaml
> @@ -19,7 +19,9 @@ description: |
>   
>   properties:
>     compatible:
> -    const: skyworks,aat1290
> +    enum:
> +      - skyworks,aat1290
> +      - skyworks,aat1270
>   
>     enset-gpios:
>       maxItems: 1
> @@ -39,12 +41,13 @@ properties:
>         flash-max-microamp:
>           description: |
>             Maximum flash LED supply current can be calculated using following
> -          formula: I = 1A * 162 kOhm / Rset.
> +          formula: I = 1A * 162 kOhm / Rset (for AAT1290) and
> +          I = 1A * 81 kOhm / Rset (for AAT1270).
>   
>         flash-max-timeout-us:
>           description: |
>             Maximum flash timeout can be calculated using following formula:
> -            T = 8.82 * 10^9 * Ct.
> +          T = 8.82 * 10^9 * Ct (for AAT1290) and T = 21.5 * 10^9 * Ct (for AAT1270).
>   
>       required:
>         - flash-max-microamp

Reviewed-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>

-- 
Best regards,
Jacek Anaszewski


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-10-13 19:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-13 18:18 [PATCH v2 0/3] leds: aat1290: Add support for AAT1270 Svyatoslav Ryhel
2026-10-13 18:18 ` [PATCH v2 1/3] dt-bindings: leds: skyworks,aat1290: Document AAT1270 Current Regulator for Flash LEDs Svyatoslav Ryhel
2026-10-13 19:37   ` Jacek Anaszewski
2026-10-13 18:18 ` [PATCH v2 2/3] dt-bindings: leds: skyworks,aat1290: Document FLINH pin Svyatoslav Ryhel
2026-10-13 18:18 ` [PATCH v2 3/3] leds: aat1290: Add support for AAT1270 Current Regulator for Flash LEDs Svyatoslav Ryhel
2026-10-13 19:35   ` Jacek Anaszewski

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®