From patchwork Fri May 31 13:54:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lee Jones X-Patchwork-Id: 800783 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F2F315B128; Fri, 31 May 2024 13:54:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717163668; cv=none; b=VG93O9w9mJAAncQna9kIdsrlUP8oI18QAyc5AdsQhF4J1WHEPWup51J1uDye5S6iM2zUk2cVwNpLNjyfkatxvIqo5nw63XF8VHvAKXOwXI5CpebMMd4AL5kSiQv277031yPwJx2BRhp68swy3be3jO0bKgwgHz36LJDewnA4uzM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717163668; c=relaxed/simple; bh=8/nXvdeJFH+6EJxYj0XhzUaatHr625g/RAOJfW1vZDU=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=uzfYPAhS/2UBTlzyOfGuv0Hq6RQZiwf2fLHtuHrFTYl5NPvIGk7PkMRNsA0cIW92FUTd8W90IuZIdgcNFCUB0R/RSWwcFHU+2/MvFHuS86n5xkec0wX2/J7mKeM1+ZEOm2KWmBYe2PO5LOZEDu2JnLDseE58FhEKqFmdu/WHbLQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QZFy7Tz5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QZFy7Tz5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AEC80C116B1; Fri, 31 May 2024 13:54:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717163667; bh=8/nXvdeJFH+6EJxYj0XhzUaatHr625g/RAOJfW1vZDU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=QZFy7Tz51qEdUcedXygDp5F3FeuVLVFf5Y+qyTnGzBAZbcNNb802MtgCqXok1LXN1 sFjON9Z/TTvacLeQRVgAPLKD/sHNZCQjFk7CGAIK+jO4CTA7cQd4ncezejTVqrIXa3 9fUMKm3FSzOZIefvH/QT9HvyezispTVtXdMwezQQY2GvZ/n4FaxWPXCk9XKTBTpWxd +N8koYv2j1z46FvWk0aZBPv2qs8u84ykr414CPvPzf4DJgE2uCqlJku1JI9BnTqQOo 48hXXyza99Hn0P0vXlQUuPY3yxp5fEo6ImxtNXOihhVYVO/3GF0jYaDh02dqX/T4nO oXvVRpG5+DDVQ== Date: Fri, 31 May 2024 14:54:23 +0100 From: Lee Jones To: Hans de Goede Cc: Ilpo =?iso-8859-1?q?J=E4rvinen?= , Andy Shevchenko , Pavel Machek , Kate Hsuan , Sebastian Reichel , platform-driver-x86@vger.kernel.org, =?iso-8859-1?q?Andr=E9?= Apitzsch , linux-leds@vger.kernel.org, linux-pm@vger.kernel.org Subject: [GIT PULL] Immutable branch between LEDs, Power and RGB due for the v6.11 merge window Message-ID: <20240531135423.GM1005600@google.com> References: <20240531114124.45346-1-hdegoede@redhat.com> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240531114124.45346-1-hdegoede@redhat.com> Enjoy! The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/lee/leds.git ib-leds-platform-power-v6.11 for you to fetch changes up to 9af12f57f1f9785f231d31a7365ad244c656b7ff: power: supply: power-supply-leds: Add charging_orange_full_green trigger for RGB LED (2024-05-31 12:57:43 +0100) ---------------------------------------------------------------- Immutable branch between LEDs, Power and RGB due for the v6.11 merge window ---------------------------------------------------------------- Hans de Goede (3): leds: rgb: leds-ktd202x: Initialize mutex earlier leds: core: Add led_mc_set_brightness() function leds: trigger: Add led_mc_trigger_event() function Kate Hsuan (3): leds: rgb: leds-ktd202x: Get device properties through fwnode to support ACPI leds: rgb: leds-ktd202x: I2C ID tables for KTD2026 and 2027 power: supply: power-supply-leds: Add charging_orange_full_green trigger for RGB LED drivers/leds/led-class-multicolor.c | 1 + drivers/leds/led-core.c | 31 +++++++++++++ drivers/leds/led-triggers.c | 20 ++++++++ drivers/leds/rgb/Kconfig | 1 - drivers/leds/rgb/leds-ktd202x.c | 80 ++++++++++++++++++-------------- drivers/power/supply/power_supply_leds.c | 23 +++++++++ include/linux/leds.h | 26 +++++++++++ include/linux/power_supply.h | 2 + 8 files changed, 149 insertions(+), 35 deletions(-) From patchwork Fri May 31 11:41:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 800787 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29ED1157492 for ; Fri, 31 May 2024 11:41:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717155704; cv=none; b=imAcsgJYvtMe9fnq2ebrRhmI6xA+1vhtsfGUO0clUSBp6d4HxiVjzSbPTfULL6vX+pAGK6kOB1Ehm7zeIIbpBMJS2EU8GJA836RrabQy/2pP49Akt/q/qEXnZrNLOdlO2io0xmT3nSEyX2Vu3stqtyJXLzpCWqxOTCkSkzmHnJ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717155704; c=relaxed/simple; bh=w4va6kCGKQCeDZAABE51XbKKWNJjBSrOJrNHuYrHvJc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Tjn4z5UoQ6iyLH8m9jWVG33/Am0yc40GuoSvSMMq+AQ1dPfqnj0uPT75r50yl9GwkLuqOG4wolXt5yy2UzrePm2kYzC0gF4Y+YwBOodPrzLmCiPvSkAl/UEWi2usBXWvwtkD51R/kWXf/4rsfZ8p8H9EaeQAiNMT0eCa0Mpd6vM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Rd1tWQpv; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Rd1tWQpv" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1717155702; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OWZ7iHjHvGZkL0Y0L9fgpKTfMrTghV83LWLiSusHp5g=; b=Rd1tWQpv/4I4aYw/dfQn25tKNfNSmWF9qgWpRu+4SwTdVePh7z3j8d+A9ISATzsErq8GrG x4EQlKyC3AXfqMocVgmLuEWIQIBygr59sPd0BEbZdXXJ7LFttalUDBlwj/Q887BJOwPGV1 HQ3686E/WweYrAjUDAJZcPqv/blfD0E= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-103-5pGBsYS3PN6wcBNwGYDPVQ-1; Fri, 31 May 2024 07:41:38 -0400 X-MC-Unique: 5pGBsYS3PN6wcBNwGYDPVQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id EDCA4801190; Fri, 31 May 2024 11:41:37 +0000 (UTC) Received: from localhost.localdomain (unknown [10.39.192.76]) by smtp.corp.redhat.com (Postfix) with ESMTP id 830BC7412; Fri, 31 May 2024 11:41:36 +0000 (UTC) From: Hans de Goede To: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Andy Shevchenko , Pavel Machek , Lee Jones , Kate Hsuan , Sebastian Reichel Cc: Hans de Goede , platform-driver-x86@vger.kernel.org, =?utf-8?q?Andr=C3=A9_Apitzsch?= , linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Jacek Anaszewski Subject: [PATCH v10 4/6] leds: core: Add led_mc_set_brightness() function Date: Fri, 31 May 2024 13:41:22 +0200 Message-ID: <20240531114124.45346-5-hdegoede@redhat.com> In-Reply-To: <20240531114124.45346-1-hdegoede@redhat.com> References: <20240531114124.45346-1-hdegoede@redhat.com> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 Add a new led_mc_set_brightness() function for in kernel color/brightness changing of multi-color LEDs. led-class-multicolor can be build as a module and led_mc_set_brightness() will have the builtin callers, so put led_mc_set_brightness() inside led-core instead, just like how led_set_brightness() is part of the core and not of the led-class object. This also adds a new LED_MULTI_COLOR led_classdev flag to allow led_mc_set_brightness() to verify that it is operating on a multi-color LED classdev, avoiding casting the passed in LED classdev to a multi-color LED classdev, when it actually is not a multi-color LED. Reviewed-by: Jacek Anaszewski Reviewed-by: Andy Shevchenko Signed-off-by: Hans de Goede --- drivers/leds/led-class-multicolor.c | 1 + drivers/leds/led-core.c | 31 +++++++++++++++++++++++++++++ include/linux/leds.h | 20 +++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/drivers/leds/led-class-multicolor.c b/drivers/leds/led-class-multicolor.c index ec62a4811613..df01c0e66c8b 100644 --- a/drivers/leds/led-class-multicolor.c +++ b/drivers/leds/led-class-multicolor.c @@ -134,6 +134,7 @@ int led_classdev_multicolor_register_ext(struct device *parent, return -EINVAL; led_cdev = &mcled_cdev->led_cdev; + led_cdev->flags |= LED_MULTI_COLOR; mcled_cdev->led_cdev.groups = led_multicolor_groups; return led_classdev_register_ext(parent, led_cdev, init_data); diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c index 89c9806cc97f..ef7d1c6767ca 100644 --- a/drivers/leds/led-core.c +++ b/drivers/leds/led-core.c @@ -8,6 +8,7 @@ */ #include +#include #include #include #include @@ -362,6 +363,36 @@ int led_set_brightness_sync(struct led_classdev *led_cdev, unsigned int value) } EXPORT_SYMBOL_GPL(led_set_brightness_sync); +/* + * This is a led-core function because just like led_set_brightness() + * it is used in the kernel by e.g. triggers. + */ +void led_mc_set_brightness(struct led_classdev *led_cdev, + unsigned int *intensity_value, unsigned int num_colors, + unsigned int brightness) +{ + struct led_classdev_mc *mcled_cdev; + unsigned int i; + + if (!(led_cdev->flags & LED_MULTI_COLOR)) { + dev_err_once(led_cdev->dev, "error not a multi-color LED\n"); + return; + } + + mcled_cdev = lcdev_to_mccdev(led_cdev); + if (num_colors != mcled_cdev->num_colors) { + dev_err_once(led_cdev->dev, "error num_colors mismatch %u != %u\n", + num_colors, mcled_cdev->num_colors); + return; + } + + for (i = 0; i < mcled_cdev->num_colors; i++) + mcled_cdev->subled_info[i].intensity = intensity_value[i]; + + led_set_brightness(led_cdev, brightness); +} +EXPORT_SYMBOL_GPL(led_mc_set_brightness); + int led_update_brightness(struct led_classdev *led_cdev) { int ret; diff --git a/include/linux/leds.h b/include/linux/leds.h index 6300313c46b7..ae07e44f1dcb 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h @@ -107,6 +107,7 @@ struct led_classdev { #define LED_BRIGHT_HW_CHANGED BIT(21) #define LED_RETAIN_AT_SHUTDOWN BIT(22) #define LED_INIT_DEFAULT_TRIGGER BIT(23) +#define LED_MULTI_COLOR BIT(24) /* set_brightness_work / blink_timer flags, atomic, private. */ unsigned long work_flags; @@ -373,6 +374,25 @@ void led_set_brightness(struct led_classdev *led_cdev, unsigned int brightness); */ int led_set_brightness_sync(struct led_classdev *led_cdev, unsigned int value); +/** + * led_mc_set_brightness - set mc LED color intensity values and brightness + * @led_cdev: the LED to set + * @intensity_value: array of per color intensity values to set + * @num_colors: amount of entries in intensity_value array + * @brightness: the brightness to set the LED to + * + * Set a multi-color LED's per color intensity values and brightness. + * If necessary, this cancels the software blink timer. This function is + * guaranteed not to sleep. + * + * Calling this function on a non multi-color led_classdev or with the wrong + * num_colors value is an error. In this case an error will be logged once + * and the call will do nothing. + */ +void led_mc_set_brightness(struct led_classdev *led_cdev, + unsigned int *intensity_value, unsigned int num_colors, + unsigned int brightness); + /** * led_update_brightness - update LED brightness * @led_cdev: the LED to query From patchwork Fri May 31 11:41:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 800786 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 811B115749B for ; Fri, 31 May 2024 11:41:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717155710; cv=none; b=fty2XJ0tH6Hv/D1/F8BTSmt2xXvPRQDLOLwcoSnx4yGvIFlVzWXU2B0GLTwy250E6lKIMZYAExuEv0oKrl7qjaQqnnPlZYowGBDyQtqY9yCZtTgs5tFalR5TB08umtO3Em5QE5L8jmNKxdkhle3VTvNtDyVfH5+Tg0dC2M44NSA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717155710; c=relaxed/simple; bh=/CeZO8P3yRa5P9DPXznYJiofXgqqSZbh6DS+WBO9nL8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=STJaG2f0cLCIvvbclauQUsYh1MrZr7hIrNftGVKhzUrwpFElCimeZDgpm+wyOANUXYjJxsPUCQ/h6WfraIdlgzVLxUnW5YzuvWA0k8t2yq038lnKoE3YKxEgGmO7D82W2VbrUy/3sIRjr6SswYTgbsbvPdQbZcEsL1eu/5hSF/w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=gKE4gZmZ; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gKE4gZmZ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1717155707; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VFZrjXsSoHW+qJc7BEcaZV8+6at8h5OVnX/5Uq+p8GQ=; b=gKE4gZmZ5kcaj+4xyDbSE9oxxYztl/4LePg2UctV4jNQwrWdJ5acFJCeaLVmiLJ1Vel6C4 V89swI8oJlWYaMLHgKVUwsqPXkG9IZcGt1dxoRro9706kLTtYSSDdezIGe8dvVh30Skrpx NHzv9xB1mPTC89F3txeTAPFFAKkz278= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-663-MKuw0uvcM2O_4PMDiXQK_w-1; Fri, 31 May 2024 07:41:41 -0400 X-MC-Unique: MKuw0uvcM2O_4PMDiXQK_w-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3CEAB29AA381; Fri, 31 May 2024 11:41:41 +0000 (UTC) Received: from localhost.localdomain (unknown [10.39.192.76]) by smtp.corp.redhat.com (Postfix) with ESMTP id C18CD740F; Fri, 31 May 2024 11:41:39 +0000 (UTC) From: Hans de Goede To: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Andy Shevchenko , Pavel Machek , Lee Jones , Kate Hsuan , Sebastian Reichel Cc: Hans de Goede , platform-driver-x86@vger.kernel.org, =?utf-8?q?Andr=C3=A9_Apitzsch?= , linux-leds@vger.kernel.org, linux-pm@vger.kernel.org, Sebastian Reichel Subject: [PATCH v10 6/6] power: supply: power-supply-leds: Add charging_orange_full_green trigger for RGB LED Date: Fri, 31 May 2024 13:41:24 +0200 Message-ID: <20240531114124.45346-7-hdegoede@redhat.com> In-Reply-To: <20240531114124.45346-1-hdegoede@redhat.com> References: <20240531114124.45346-1-hdegoede@redhat.com> Precedence: bulk X-Mailing-List: linux-pm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 From: Kate Hsuan Add a charging_orange_full_green LED trigger and the trigger is based on led_mc_trigger_event() which can set an RGB LED when the trigger is triggered. The LED will show orange when the battery status is charging. The LED will show green when the battery status is full. Link: https://lore.kernel.org/linux-leds/f40a0b1a-ceac-e269-c2dd-0158c5b4a1ad@gmail.com/ Acked-by: Sebastian Reichel Signed-off-by: Kate Hsuan Reviewed-by: Andy Shevchenko [hdegoede@redhat.com change color order to RGB] Signed-off-by: Hans de Goede --- drivers/power/supply/power_supply_leds.c | 23 +++++++++++++++++++++++ include/linux/power_supply.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/drivers/power/supply/power_supply_leds.c b/drivers/power/supply/power_supply_leds.c index c7db29d5fcb8..73935de844d9 100644 --- a/drivers/power/supply/power_supply_leds.c +++ b/drivers/power/supply/power_supply_leds.c @@ -22,6 +22,8 @@ static void power_supply_update_bat_leds(struct power_supply *psy) { union power_supply_propval status; + unsigned int intensity_green[3] = { 0, 255, 0 }; + unsigned int intensity_orange[3] = { 255, 128, 0 }; if (power_supply_get_property(psy, POWER_SUPPLY_PROP_STATUS, &status)) return; @@ -36,12 +38,20 @@ static void power_supply_update_bat_leds(struct power_supply *psy) /* Going from blink to LED on requires a LED_OFF event to stop blink */ led_trigger_event(psy->charging_blink_full_solid_trig, LED_OFF); led_trigger_event(psy->charging_blink_full_solid_trig, LED_FULL); + led_mc_trigger_event(psy->charging_orange_full_green_trig, + intensity_green, + ARRAY_SIZE(intensity_green), + LED_FULL); break; case POWER_SUPPLY_STATUS_CHARGING: led_trigger_event(psy->charging_full_trig, LED_FULL); led_trigger_event(psy->charging_trig, LED_FULL); led_trigger_event(psy->full_trig, LED_OFF); led_trigger_blink(psy->charging_blink_full_solid_trig, 0, 0); + led_mc_trigger_event(psy->charging_orange_full_green_trig, + intensity_orange, + ARRAY_SIZE(intensity_orange), + LED_FULL); break; default: led_trigger_event(psy->charging_full_trig, LED_OFF); @@ -49,6 +59,8 @@ static void power_supply_update_bat_leds(struct power_supply *psy) led_trigger_event(psy->full_trig, LED_OFF); led_trigger_event(psy->charging_blink_full_solid_trig, LED_OFF); + led_trigger_event(psy->charging_orange_full_green_trig, + LED_OFF); break; } } @@ -74,6 +86,11 @@ static int power_supply_create_bat_triggers(struct power_supply *psy) if (!psy->charging_blink_full_solid_trig_name) goto charging_blink_full_solid_failed; + psy->charging_orange_full_green_trig_name = kasprintf(GFP_KERNEL, + "%s-charging-orange-full-green", psy->desc->name); + if (!psy->charging_orange_full_green_trig_name) + goto charging_red_full_green_failed; + led_trigger_register_simple(psy->charging_full_trig_name, &psy->charging_full_trig); led_trigger_register_simple(psy->charging_trig_name, @@ -82,9 +99,13 @@ static int power_supply_create_bat_triggers(struct power_supply *psy) &psy->full_trig); led_trigger_register_simple(psy->charging_blink_full_solid_trig_name, &psy->charging_blink_full_solid_trig); + led_trigger_register_simple(psy->charging_orange_full_green_trig_name, + &psy->charging_orange_full_green_trig); return 0; +charging_red_full_green_failed: + kfree(psy->charging_blink_full_solid_trig_name); charging_blink_full_solid_failed: kfree(psy->full_trig_name); full_failed: @@ -101,10 +122,12 @@ static void power_supply_remove_bat_triggers(struct power_supply *psy) led_trigger_unregister_simple(psy->charging_trig); led_trigger_unregister_simple(psy->full_trig); led_trigger_unregister_simple(psy->charging_blink_full_solid_trig); + led_trigger_unregister_simple(psy->charging_orange_full_green_trig); kfree(psy->charging_blink_full_solid_trig_name); kfree(psy->full_trig_name); kfree(psy->charging_trig_name); kfree(psy->charging_full_trig_name); + kfree(psy->charging_orange_full_green_trig_name); } /* Generated power specific LEDs triggers. */ diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 8e5705a56b85..c852cc882501 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -319,6 +319,8 @@ struct power_supply { char *online_trig_name; struct led_trigger *charging_blink_full_solid_trig; char *charging_blink_full_solid_trig_name; + struct led_trigger *charging_orange_full_green_trig; + char *charging_orange_full_green_trig_name; #endif };