From patchwork Thu May 2 21:14:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 13652106 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 BD4E31635DB for ; Thu, 2 May 2024 21:14:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684476; cv=none; b=F7MEXjH0m9XJR3/idKSrVxbzb+N19wXfhfAB+ri5rF9sZuXrnLOevuF/+jbtGYM2yLdLQqCcwKTW1AAncJzGdKUwuKbYtUdOuZmoyko3M1+A4DNMl0GlvdksQdDV1Zk9slI/2YfA9mSBX/a2ZnspU0N26QQPpAtlX8rlJwIlsr4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684476; c=relaxed/simple; bh=2x2U8cvQTFXqZFo/pAUSnhgM9zW/DPe349T5mxWeEq4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JZbONWBkY8J8j6n2xSDFkMd2MkTnATemUzSQlgunS72lCtnaI6k/YdlsWxmW03+l7V3Pku7FwiZbFawwDhyLoUGzWBJk4ogdNmdiVVUzTF1gUETP5w2gCZW64dp3QcNZbrRl2CZfD4RqZsJiMmugr+jwiJ3l0yIThw2zHs7hNdk= 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=fWNrHKEk; arc=none smtp.client-ip=170.10.133.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="fWNrHKEk" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714684472; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mzbD3WoZX9fjys/RzjtTlwb3MCxMpXWxPwS6zIkqTUA=; b=fWNrHKEk+I/zHDWkJP18EQK+OJr9P+8CgqqEg2xkBtAFXs8O+nVZNfAxMW+LOXrk33LLTk 7MNm4rRoa2BbjB60qakwhnTcCgYQpIxMT7qOKgbXl4S11lYTEykHLqDWyfEHRk5dr4PLKU ZdC1GoHJaCRD0OdI1Tdm0P2+zzKL4YU= 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-264-fChfnrvMNtSDBhQpkBqlCA-1; Thu, 02 May 2024 17:14:29 -0400 X-MC-Unique: fChfnrvMNtSDBhQpkBqlCA-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (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 1EE7F830D37; Thu, 2 May 2024 21:14:29 +0000 (UTC) Received: from shalem.redhat.com (unknown [10.39.192.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id C0E5D477F80; Thu, 2 May 2024 21:14:27 +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 Subject: [PATCH v8 1/7] leds: rgb: leds-ktd202x: Get device properties through fwnode to support ACPI Date: Thu, 2 May 2024 23:14:19 +0200 Message-ID: <20240502211425.8678-2-hdegoede@redhat.com> In-Reply-To: <20240502211425.8678-1-hdegoede@redhat.com> References: <20240502211425.8678-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.10 From: Kate Hsuan This LED controller is installed on a Xiaomi pad2 and it is an x86 platform. The original driver is based on the device tree and can't be used for this ACPI based system. This patch migrated the driver to use fwnode to access the properties. Moreover, the fwnode API supports the device tree so this work won't affect the original implementations. Signed-off-by: Kate Hsuan Tested-by: AndrĂ© Apitzsch # on BQ Aquaris M5 Reviewed-by: Hans de Goede Signed-off-by: Hans de Goede --- drivers/leds/rgb/Kconfig | 1 - drivers/leds/rgb/leds-ktd202x.c | 64 +++++++++++++++++---------------- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/drivers/leds/rgb/Kconfig b/drivers/leds/rgb/Kconfig index 8fc12d6a2958..222d943d826a 100644 --- a/drivers/leds/rgb/Kconfig +++ b/drivers/leds/rgb/Kconfig @@ -17,7 +17,6 @@ config LEDS_GROUP_MULTICOLOR config LEDS_KTD202X tristate "LED support for KTD202x Chips" depends on I2C - depends on OF select REGMAP_I2C help This option enables support for the Kinetic KTD2026/KTD2027 diff --git a/drivers/leds/rgb/leds-ktd202x.c b/drivers/leds/rgb/leds-ktd202x.c index 514965795a10..f1c810c415a4 100644 --- a/drivers/leds/rgb/leds-ktd202x.c +++ b/drivers/leds/rgb/leds-ktd202x.c @@ -99,7 +99,7 @@ struct ktd202x { struct device *dev; struct regmap *regmap; bool enabled; - int num_leds; + unsigned long num_leds; struct ktd202x_led leds[] __counted_by(num_leds); }; @@ -381,16 +381,19 @@ static int ktd202x_blink_mc_set(struct led_classdev *cdev, mc->num_colors); } -static int ktd202x_setup_led_rgb(struct ktd202x *chip, struct device_node *np, +static int ktd202x_setup_led_rgb(struct ktd202x *chip, struct fwnode_handle *fwnode, struct ktd202x_led *led, struct led_init_data *init_data) { + struct fwnode_handle *child; struct led_classdev *cdev; - struct device_node *child; struct mc_subled *info; int num_channels; int i = 0; - num_channels = of_get_available_child_count(np); + num_channels = 0; + fwnode_for_each_available_child_node(fwnode, child) + num_channels++; + if (!num_channels || num_channels > chip->num_leds) return -EINVAL; @@ -398,22 +401,22 @@ static int ktd202x_setup_led_rgb(struct ktd202x *chip, struct device_node *np, if (!info) return -ENOMEM; - for_each_available_child_of_node(np, child) { + fwnode_for_each_available_child_node(fwnode, child) { u32 mono_color; u32 reg; int ret; - ret = of_property_read_u32(child, "reg", ®); + ret = fwnode_property_read_u32(child, "reg", ®); if (ret != 0 || reg >= chip->num_leds) { - dev_err(chip->dev, "invalid 'reg' of %pOFn\n", child); - of_node_put(child); - return -EINVAL; + dev_err(chip->dev, "invalid 'reg' of %pfw\n", child); + fwnode_handle_put(child); + return ret; } - ret = of_property_read_u32(child, "color", &mono_color); + ret = fwnode_property_read_u32(child, "color", &mono_color); if (ret < 0 && ret != -EINVAL) { - dev_err(chip->dev, "failed to parse 'color' of %pOF\n", child); - of_node_put(child); + dev_err(chip->dev, "failed to parse 'color' of %pfw\n", child); + fwnode_handle_put(child); return ret; } @@ -433,16 +436,16 @@ static int ktd202x_setup_led_rgb(struct ktd202x *chip, struct device_node *np, return devm_led_classdev_multicolor_register_ext(chip->dev, &led->mcdev, init_data); } -static int ktd202x_setup_led_single(struct ktd202x *chip, struct device_node *np, +static int ktd202x_setup_led_single(struct ktd202x *chip, struct fwnode_handle *fwnode, struct ktd202x_led *led, struct led_init_data *init_data) { struct led_classdev *cdev; u32 reg; int ret; - ret = of_property_read_u32(np, "reg", ®); + ret = fwnode_property_read_u32(fwnode, "reg", ®); if (ret != 0 || reg >= chip->num_leds) { - dev_err(chip->dev, "invalid 'reg' of %pOFn\n", np); + dev_err(chip->dev, "invalid 'reg' of %pfw\n", fwnode); return -EINVAL; } led->index = reg; @@ -454,7 +457,7 @@ static int ktd202x_setup_led_single(struct ktd202x *chip, struct device_node *np return devm_led_classdev_register_ext(chip->dev, &led->cdev, init_data); } -static int ktd202x_add_led(struct ktd202x *chip, struct device_node *np, unsigned int index) +static int ktd202x_add_led(struct ktd202x *chip, struct fwnode_handle *fwnode, unsigned int index) { struct ktd202x_led *led = &chip->leds[index]; struct led_init_data init_data = {}; @@ -463,21 +466,21 @@ static int ktd202x_add_led(struct ktd202x *chip, struct device_node *np, unsigne int ret; /* Color property is optional in single color case */ - ret = of_property_read_u32(np, "color", &color); + ret = fwnode_property_read_u32(fwnode, "color", &color); if (ret < 0 && ret != -EINVAL) { - dev_err(chip->dev, "failed to parse 'color' of %pOF\n", np); + dev_err(chip->dev, "failed to parse 'color' of %pfw\n", fwnode); return ret; } led->chip = chip; - init_data.fwnode = of_fwnode_handle(np); + init_data.fwnode = fwnode; if (color == LED_COLOR_ID_RGB) { cdev = &led->mcdev.led_cdev; - ret = ktd202x_setup_led_rgb(chip, np, led, &init_data); + ret = ktd202x_setup_led_rgb(chip, fwnode, led, &init_data); } else { cdev = &led->cdev; - ret = ktd202x_setup_led_single(chip, np, led, &init_data); + ret = ktd202x_setup_led_single(chip, fwnode, led, &init_data); } if (ret) { @@ -490,15 +493,14 @@ static int ktd202x_add_led(struct ktd202x *chip, struct device_node *np, unsigne return 0; } -static int ktd202x_probe_dt(struct ktd202x *chip) +static int ktd202x_probe_fw(struct ktd202x *chip) { - struct device_node *np = dev_of_node(chip->dev), *child; + struct fwnode_handle *child; + struct device *dev = chip->dev; int count; int i = 0; - chip->num_leds = (int)(unsigned long)of_device_get_match_data(chip->dev); - - count = of_get_available_child_count(np); + count = device_get_child_node_count(dev); if (!count || count > chip->num_leds) return -EINVAL; @@ -507,11 +509,11 @@ static int ktd202x_probe_dt(struct ktd202x *chip) /* Allow the device to execute the complete reset */ usleep_range(200, 300); - for_each_available_child_of_node(np, child) { + device_for_each_child_node(dev, child) { int ret = ktd202x_add_led(chip, child, i); if (ret) { - of_node_put(child); + fwnode_handle_put(child); return ret; } i++; @@ -554,6 +556,8 @@ static int ktd202x_probe(struct i2c_client *client) return ret; } + chip->num_leds = (unsigned long)i2c_get_match_data(client); + chip->regulators[0].supply = "vin"; chip->regulators[1].supply = "vio"; ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(chip->regulators), chip->regulators); @@ -568,7 +572,7 @@ static int ktd202x_probe(struct i2c_client *client) return ret; } - ret = ktd202x_probe_dt(chip); + ret = ktd202x_probe_fw(chip); if (ret < 0) { regulator_bulk_disable(ARRAY_SIZE(chip->regulators), chip->regulators); return ret; @@ -605,7 +609,7 @@ static void ktd202x_shutdown(struct i2c_client *client) static const struct of_device_id ktd202x_match_table[] = { { .compatible = "kinetic,ktd2026", .data = (void *)KTD2026_NUM_LEDS }, { .compatible = "kinetic,ktd2027", .data = (void *)KTD2027_NUM_LEDS }, - {}, + {} }; MODULE_DEVICE_TABLE(of, ktd202x_match_table); From patchwork Thu May 2 21:14:20 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: 13652107 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 78D23181322 for ; Thu, 2 May 2024 21:14:37 +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=1714684478; cv=none; b=Ol/JbeACAJuA6AhudkbusX/Q+Hvdg9klH0kFh0LKaJG8mg0p8/wYU8EKIC1GKWUqDjM/gDg9RZ+AowjDeLUEcOeZTfqHlYUXo+FhBvGmYVSfZ+iyQfFZdmFItw7w4s4cdJz5ZdEYEGqD2ttwPf1iXhZ9fhIDj235Z9WJQFtvMdo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684478; c=relaxed/simple; bh=6+iKMDBLa/uW1gaLOf3A/ew9VEwuynfr7LH5wkJyHEg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nvwtLFwMfWSwPe6PR/Cps3Q7mJJdMIe/CEsWEYp9RvGCWOukXan4W7vIVDSpXBQKX4NBEgJcH9k0ESg/8zbG17kWiR4WLwYWGc3RWWRJL6AjWsWa8jZfCYMzkiBVFo0h6A8izpawsGMFc7fDbRVY/2bSL7Jv2GcLydHdH6urzz8= 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=C76TG6hn; 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="C76TG6hn" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714684476; 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=0acOtjkhKZtbTeCtJ35pPqysLlNFjfSdDtnlseC+L2c=; b=C76TG6hnHT7WBwN8nuJE7VR1OKC6u4kXOvTsHl5lUV9XJ/YoHt0SBeH9NLsA04TybA2KKT TxbOmzGJpOncf8XmBPG8aF4jnz6Xk8d4M2obNc/ANnXXewTxEVvs7X3zBJd8C4XbwgIpdJ G4kxpvYYCQcM21wtGhiF6IZoUKGSbg4= 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-379-7LNsTcJpMzmw2NLTRMGKTg-1; Thu, 02 May 2024 17:14:31 -0400 X-MC-Unique: 7LNsTcJpMzmw2NLTRMGKTg-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (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 9F43D800CA2; Thu, 2 May 2024 21:14:30 +0000 (UTC) Received: from shalem.redhat.com (unknown [10.39.192.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4DDD840C5C2; Thu, 2 May 2024 21:14:29 +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 Subject: [PATCH v8 2/7] leds: rgb: leds-ktd202x: I2C ID tables for KTD2026 and 2027 Date: Thu, 2 May 2024 23:14:20 +0200 Message-ID: <20240502211425.8678-3-hdegoede@redhat.com> In-Reply-To: <20240502211425.8678-1-hdegoede@redhat.com> References: <20240502211425.8678-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.10 From: Kate Hsuan This table shows the maximum support LED channel for KTD2026 and KTD-2027. The 3-channel LED controller KTD2026 controls R/G/B three LEDs. The 4-channel LED controller KTD2027 controls R/G/B and flashing LEDs. Link: https://www.kinet-ic.com/uploads/KTD2026-7-04h.pdf Signed-off-by: Kate Hsuan Reviewed-by: Hans de Goede Signed-off-by: Hans de Goede --- drivers/leds/rgb/leds-ktd202x.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/leds/rgb/leds-ktd202x.c b/drivers/leds/rgb/leds-ktd202x.c index f1c810c415a4..60ca6ec34336 100644 --- a/drivers/leds/rgb/leds-ktd202x.c +++ b/drivers/leds/rgb/leds-ktd202x.c @@ -606,6 +606,13 @@ static void ktd202x_shutdown(struct i2c_client *client) regmap_write(chip->regmap, KTD202X_REG_RESET_CONTROL, KTD202X_RSTR_RESET); } +static const struct i2c_device_id ktd202x_id[] = { + {"ktd2026", KTD2026_NUM_LEDS}, + {"ktd2027", KTD2027_NUM_LEDS}, + {} +}; +MODULE_DEVICE_TABLE(i2c, ktd202x_id); + static const struct of_device_id ktd202x_match_table[] = { { .compatible = "kinetic,ktd2026", .data = (void *)KTD2026_NUM_LEDS }, { .compatible = "kinetic,ktd2027", .data = (void *)KTD2027_NUM_LEDS }, @@ -621,6 +628,7 @@ static struct i2c_driver ktd202x_driver = { .probe = ktd202x_probe, .remove = ktd202x_remove, .shutdown = ktd202x_shutdown, + .id_table = ktd202x_id, }; module_i2c_driver(ktd202x_driver); From patchwork Thu May 2 21:14:21 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: 13652108 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 D23CD181313 for ; Thu, 2 May 2024 21:14:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684479; cv=none; b=U1jkArpn+XDHihQKmRascyVpXbMJwzTiePMFqXodsyUJzIV+Gg4rBs9V8Az7v9QdzWipv8iyHQbxPGSOy+1ZkiJnudKKMzDzmnXESggh5v7qEp1TmmfL4pEXBuk+fQFpHmZZNo49jJHgnlODT/cLioW/Fq2e3Y5msTXmtByHtF8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684479; c=relaxed/simple; bh=1S+4GNAUpKXds7LcVmMe/jrs2SUyekeWRn931fwnhR8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SJkNMZiY8M+6LajISJJS4eHn20cLeruciWm2lw4mvyJj26sY2ZYd3gNEtMGumpgKMSv7SciUjQRsXXSFDTepChQo/vEpr3xlkT/dq6O6DFPqdM0Qxc/3YoDd71ifC5ZSdY+nM5NnNGJHH0Lx4o/wz8csIL20j5JGMJDyMYHTe1A= 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=Lyz4gmHi; arc=none smtp.client-ip=170.10.133.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="Lyz4gmHi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714684475; 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=ckF8SmGaQ0kzJOrgoMLDkNyaWhgKpKt8VrEVFWryMwc=; b=Lyz4gmHiaRPj3pzxS1ewTUZlx+Q7+g46DIbG99fBjKuEFef0HTaDLRB0Grb7skxddRN7Xr wqfynH46ZgFDncAYk1Nn29nZLJHoZg8SSTck6N0CdtfxbhMujtRHtdWA6VizUSPTME8Ckz YNsU7JhpTU9sjMaW1JLFft9VmnW0izI= 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-258-sda8g02mNUSwXxz-Kbw2bg-1; Thu, 02 May 2024 17:14:32 -0400 X-MC-Unique: sda8g02mNUSwXxz-Kbw2bg-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (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 2AE313C0256A; Thu, 2 May 2024 21:14:32 +0000 (UTC) Received: from shalem.redhat.com (unknown [10.39.192.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id CDDD340BAA2; Thu, 2 May 2024 21:14:30 +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 Subject: [PATCH v8 3/7] leds: rgb: leds-ktd202x: Initialize mutex earlier Date: Thu, 2 May 2024 23:14:21 +0200 Message-ID: <20240502211425.8678-4-hdegoede@redhat.com> In-Reply-To: <20240502211425.8678-1-hdegoede@redhat.com> References: <20240502211425.8678-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.10 The mutex must be initialized before the LED class device is registered otherwise there is a race where it may get used before it is initialized: DEBUG_LOCKS_WARN_ON(lock->magic != lock) WARNING: CPU: 2 PID: 2045 at kernel/locking/mutex.c:587 __mutex_lock ... RIP: 0010:__mutex_lock+0x7db/0xc10 ... set_brightness_delayed_set_brightness.part.0+0x17/0x60 set_brightness_delayed+0xf1/0x100 process_one_work+0x222/0x5a0 Signed-off-by: Hans de Goede --- drivers/leds/rgb/leds-ktd202x.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/leds/rgb/leds-ktd202x.c b/drivers/leds/rgb/leds-ktd202x.c index 60ca6ec34336..77247a98fe66 100644 --- a/drivers/leds/rgb/leds-ktd202x.c +++ b/drivers/leds/rgb/leds-ktd202x.c @@ -572,21 +572,25 @@ static int ktd202x_probe(struct i2c_client *client) return ret; } + mutex_init(&chip->mutex); + ret = ktd202x_probe_fw(chip); if (ret < 0) { regulator_bulk_disable(ARRAY_SIZE(chip->regulators), chip->regulators); - return ret; + goto destroy_mutex; } ret = regulator_bulk_disable(ARRAY_SIZE(chip->regulators), chip->regulators); if (ret) { dev_err_probe(dev, ret, "Failed to disable regulators.\n"); - return ret; + goto destroy_mutex; } - mutex_init(&chip->mutex); - return 0; + +destroy_mutex: + mutex_destroy(&chip->mutex); + return ret; } static void ktd202x_remove(struct i2c_client *client) From patchwork Thu May 2 21:14: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: 13652109 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 66BD6181BAC for ; Thu, 2 May 2024 21:14:38 +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=1714684479; cv=none; b=Nzo4jFuJixXk3+EfEOmMu4wHFK459kzw8jNEXr71G86kEzWxTV/D9rbkJpejxZm3Eh2Jt7UEvRGE9+N4Djxhi4JB1dBSZGbyGOsyxC1fWaKjM/eLtcXUGa+48wbyqGN7AXsU5uWxR5MokM+lwiciaAh35zv+DzjGPfqFR52qVwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684479; c=relaxed/simple; bh=K+IvcGAV5OhRf8ftXS32wSkCg3sZ/PPwrZ9s12RtRE0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dDLu6FJOZnIEIxgqxJfDBwuT0l+Fvrd17AszktmF2U3LYq1nL5elDrYoCfQW7Ao6bRci8Q7Pjbp7VSqdOMXJXaqbKnnLsSORIt0ocyq99B/fcfrbWN+aj176lI+k4U9F8BdBBsiThc+90yegMPiLtcBApdc+HAkEEqnFuxi32X0= 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=Xkk5cwuo; 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="Xkk5cwuo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714684477; 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=RmP9TPlqerCSr0vu41ZWbe0I6xQ/M9c9XvUNqdIAl3o=; b=Xkk5cwuokSQLngx3Ahw02ycNe+7sJDbf6IntWtMcXmEbRmb0nooRF5rpMQImtyXN1FhzID 70HsKe7sbjJyrMgrqOkVF4Eoc/vZoM5YJDK+A0J7oaphy4KPGpIYhBE1+vx2WpIsZ957N0 VarsziI2oOy6ZWf+XkdUo7h9RqXvN1Q= 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-317-zK4Z11GeMgqUvoF4GvqG1A-1; Thu, 02 May 2024 17:14:34 -0400 X-MC-Unique: zK4Z11GeMgqUvoF4GvqG1A-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (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 C6EEA80591B; Thu, 2 May 2024 21:14:33 +0000 (UTC) Received: from shalem.redhat.com (unknown [10.39.192.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id 59F2B492BC7; Thu, 2 May 2024 21:14:32 +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 v8 4/7] leds: core: Add led_mc_set_brightness() function Date: Thu, 2 May 2024 23:14:22 +0200 Message-ID: <20240502211425.8678-5-hdegoede@redhat.com> In-Reply-To: <20240502211425.8678-1-hdegoede@redhat.com> References: <20240502211425.8678-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.10 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 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 db6b114bb3d9..e80a185e255a 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 Thu May 2 21:14:23 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: 13652110 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 094C4181CE4 for ; Thu, 2 May 2024 21:14:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684481; cv=none; b=RRNW8Inz90izdoPT7XZmN3gt5AGLRPBTx+AA5deyYDxp7OeLHpVzgRshuOkQrWXZh1unf56ayDWirvKRtNE0E9ADaI6SodLrG4B4Di6dC/rqPrr7tRImgC90fA99ov4UDBRs0PjnT8p6Tf/BzXjnLglFzAQgGsq/UAMlvad3mls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684481; c=relaxed/simple; bh=3ysNI5U2U+3tTygWswiPBgv9Q65RxP1D2lXuelGrTOM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Iwm9tgQfvTbQpXabwQkEwnLdcWaybxiNBCSW0uT/IAae1/iiumRygHzQw3KR94i9nqwaCCNuU3uM25fG80ZKrGTaOd+nLH8xzijF+UX4ZbvdqTXjHtGHfcgUBHnyc+CpdX6+IPKFijj9hqIjCc2w3vzQv7ujlO8MsKcLprUZj/I= 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=KRbEKBMX; arc=none smtp.client-ip=170.10.133.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="KRbEKBMX" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714684479; 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=+8uVasP40h7loxQdskjKsc5PJFNGed67tjVg7OEiPLY=; b=KRbEKBMXo2FLWraYOLO2pILXmVraDNj25siartVK3Irxlz9RjFxmLmYISRxDb75WzsSmEc SASmu7fb4FgX78PjdgKY5K0j6iisVF2p9wo91gyleDMbuqRG62hPIsm82+f6MtVrdv86wJ i7Ugw8z7a/8/rBGFkPwMR6J139I8W/0= 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-208-3peqZHmVMp6U3pSa7edqrQ-1; Thu, 02 May 2024 17:14:36 -0400 X-MC-Unique: 3peqZHmVMp6U3pSa7edqrQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (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 6B93481061A; Thu, 2 May 2024 21:14:35 +0000 (UTC) Received: from shalem.redhat.com (unknown [10.39.192.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0161440BAA2; Thu, 2 May 2024 21:14:33 +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 v8 5/7] leds: trigger: Add led_mc_trigger_event() function Date: Thu, 2 May 2024 23:14:23 +0200 Message-ID: <20240502211425.8678-6-hdegoede@redhat.com> In-Reply-To: <20240502211425.8678-1-hdegoede@redhat.com> References: <20240502211425.8678-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.10 Add a new led_mc_trigger_event() function for triggers which want to change the color of a multi-color LED based on their trigger conditions. Reviewed-by: Jacek Anaszewski Signed-off-by: Hans de Goede --- drivers/leds/led-triggers.c | 20 ++++++++++++++++++++ include/linux/leds.h | 6 ++++++ 2 files changed, 26 insertions(+) diff --git a/drivers/leds/led-triggers.c b/drivers/leds/led-triggers.c index 0f5ac30053ad..d72c42f38bd4 100644 --- a/drivers/leds/led-triggers.c +++ b/drivers/leds/led-triggers.c @@ -394,6 +394,26 @@ void led_trigger_event(struct led_trigger *trig, } EXPORT_SYMBOL_GPL(led_trigger_event); +void led_mc_trigger_event(struct led_trigger *trig, + unsigned int *intensity_value, unsigned int num_colors, + enum led_brightness brightness) +{ + struct led_classdev *led_cdev; + + if (!trig) + return; + + rcu_read_lock(); + list_for_each_entry_rcu(led_cdev, &trig->led_cdevs, trig_list) { + if (!(led_cdev->flags & LED_MULTI_COLOR)) + continue; + + led_mc_set_brightness(led_cdev, intensity_value, num_colors, brightness); + } + rcu_read_unlock(); +} +EXPORT_SYMBOL_GPL(led_mc_trigger_event); + static void led_trigger_blink_setup(struct led_trigger *trig, unsigned long delay_on, unsigned long delay_off, diff --git a/include/linux/leds.h b/include/linux/leds.h index e80a185e255a..acd0aafd603c 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h @@ -507,6 +507,9 @@ void led_trigger_register_simple(const char *name, struct led_trigger **trigger); void led_trigger_unregister_simple(struct led_trigger *trigger); void led_trigger_event(struct led_trigger *trigger, enum led_brightness event); +void led_mc_trigger_event(struct led_trigger *trig, + unsigned int *intensity_value, unsigned int num_colors, + enum led_brightness brightness); void led_trigger_blink(struct led_trigger *trigger, unsigned long delay_on, unsigned long delay_off); void led_trigger_blink_oneshot(struct led_trigger *trigger, @@ -543,6 +546,9 @@ static inline void led_trigger_register_simple(const char *name, static inline void led_trigger_unregister_simple(struct led_trigger *trigger) {} static inline void led_trigger_event(struct led_trigger *trigger, enum led_brightness event) {} +static inline void led_mc_trigger_event(struct led_trigger *trig, + unsigned int *intensity_value, unsigned int num_colors, + enum led_brightness brightness) {} static inline void led_trigger_blink(struct led_trigger *trigger, unsigned long delay_on, unsigned long delay_off) {} From patchwork Thu May 2 21:14: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: 13652111 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 925A0181314 for ; Thu, 2 May 2024 21:14:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684483; cv=none; b=XCG16PWmWZpqiwmZQs5r1Sbd8JETz7gpIzxhJeGxNm7p47zbHt5vCjrGrMsZ+Nm9huri/IaIakuZHtsriozYB4bbwMBVKhC1DIfkJkBBYJ2yMwI3eC969XsQfhT2NpMFlRn42LLuidrVaD6WzHmP2JMji/S+/lPUgRa+YY/Xt2o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684483; c=relaxed/simple; bh=MfJvjEc10cIOp0CdsHfMxnxhlHRNsPfXX7j2jqCWcFY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RgcIaD2vjJQdPLOnIxtM3W+RgTgShOApyN9AacdLTWqkfsNe1/bU3+fdMDKN9RRSP0kBxa/NMxBHdZxe2GA2MoOKnsB3pLdD+ZILOmLqhkH69iwkXnL0FIkuiA3y5kc2qdrqnnZJ/qNGQAKDL+JJYjQbV7RvyhUth8n2SNtapJg= 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=c7Juyuic; arc=none smtp.client-ip=170.10.133.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="c7Juyuic" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714684480; 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=tRpnZib8uYipzsd8hXNmiruRJaM0j17iJbQrhowyjnQ=; b=c7JuyuicfCMHi+8oXHQkS8idvC/O6DzcUuR6+O6aVVvY05odxblE9sxws1dRH64lDe/JiY ga1RRxPKbJpvI22SAXuK69Al4BPQ/E2ReqEFBt6CJAiG/2l3idmKzscCJ9/RZP3KVYgFNu otXmk/41sWfCvBiHL2cWHQS+HPGkoX4= 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-360-M9gmqDvaOQyho_tKcfm-zQ-1; Thu, 02 May 2024 17:14:37 -0400 X-MC-Unique: M9gmqDvaOQyho_tKcfm-zQ-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (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 1534D8032FA; Thu, 2 May 2024 21:14:37 +0000 (UTC) Received: from shalem.redhat.com (unknown [10.39.192.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9C1D640C5C3; Thu, 2 May 2024 21:14:35 +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 v8 6/7] power: supply: power-supply-leds: Add charging_orange_full_green trigger for RGB LED Date: Thu, 2 May 2024 23:14:24 +0200 Message-ID: <20240502211425.8678-7-hdegoede@redhat.com> In-Reply-To: <20240502211425.8678-1-hdegoede@redhat.com> References: <20240502211425.8678-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.10 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 [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 }; From patchwork Thu May 2 21:14:25 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: 13652112 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.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 A2C41181318 for ; Thu, 2 May 2024 21:14:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684484; cv=none; b=jiR/RTf8ERmVSFqfGIoK+PvD2zLFVrNv11Ay+BN1jI/7zMRq64B9hfLWG9PbyCU4dvB2gzhpn5V/2u5kf+RJzhyPprp/kOfZjyDWayE/rdV+xzLGr3iRkl8bwZ2hntL1GnxOenMrBJZiTC/64ylNOUIWefX2dNpUqx/1iqSmcz0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714684484; c=relaxed/simple; bh=MMeAWbl4GerV19NWPVRdwyf5tL869ZhpN2F7AxLXf9k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Il04lozhDwXRQ2z5gvL15FGi8hcRF0X75aNf9+xZ0iRNf2COUrbM9/sVfemLuPXtHa7ykJAMDkHNS2vdFEMPRwNWwxRwPuUaXsVpkkvlXALOUGbO/N0Hn0XuH9+flYBecBHZPurKjUIbwnS3JNg9F/jnLcQcIBnTBbKZnDFKTBg= 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=R0sjut35; arc=none smtp.client-ip=170.10.133.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="R0sjut35" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714684481; 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=fukb6bdJnnF4Pi+8FCoy/hhI7DCgB2hnwu3U79wYpLI=; b=R0sjut35xUAL1u8dCf07LFOuRpZofNna4v/Dja+GPZXTxjjgVTo0+aRsLEVf5OeBOw/k4t 1HQVrLEfkmw0tKnMOndLaWrOBbYnxXIWrjcEedf/Fzloop53UzPyVZAWbZCCA3xKKdF7ka ceiGNyCO/D7jp/eZ4cJ//Mx3OR4EXGQ= 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-554-NjZF_RA3MwiSiG1SNdnzRw-1; Thu, 02 May 2024 17:14:39 -0400 X-MC-Unique: NjZF_RA3MwiSiG1SNdnzRw-1 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (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 982DE3C0256A; Thu, 2 May 2024 21:14:38 +0000 (UTC) Received: from shalem.redhat.com (unknown [10.39.192.33]) by smtp.corp.redhat.com (Postfix) with ESMTP id 44E7D492BC7; Thu, 2 May 2024 21:14:37 +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 Subject: [PATCH v8 7/7] platform: x86-android-tablets: Xiaomi pad2 RGB LED fwnode updates Date: Thu, 2 May 2024 23:14:25 +0200 Message-ID: <20240502211425.8678-8-hdegoede@redhat.com> In-Reply-To: <20240502211425.8678-1-hdegoede@redhat.com> References: <20240502211425.8678-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.10 From: Kate Hsuan Xiaomi pad2 RGB LED fwnode updates: 1. Set "label" instead "function" to change the LED classdev name from "rgb:indicator" to "i2c-ktd2026:rgb:indicator" to match the usual triplet name format for LED classdevs. 2. Set the trigger to the new "bq27520-0-charging-orange-full-green" powersupply trigger type for multi-color LEDs. 3. Put the fwnode link for red before green in ktd2026_node_group[] so that multi_index becomes "red green blue". Signed-off-by: Kate Hsuan Co-developed-by: Hans de Goede Signed-off-by: Hans de Goede --- drivers/platform/x86/x86-android-tablets/other.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/platform/x86/x86-android-tablets/other.c b/drivers/platform/x86/x86-android-tablets/other.c index ce487b3c972c..198ea894d071 100644 --- a/drivers/platform/x86/x86-android-tablets/other.c +++ b/drivers/platform/x86/x86-android-tablets/other.c @@ -609,8 +609,8 @@ static const struct software_node ktd2026_node = { static const struct property_entry ktd2026_rgb_led_props[] = { PROPERTY_ENTRY_U32("reg", 0), PROPERTY_ENTRY_U32("color", LED_COLOR_ID_RGB), - PROPERTY_ENTRY_STRING("function", "indicator"), - PROPERTY_ENTRY_STRING("linux,default-trigger", "bq27520-0-charging"), + PROPERTY_ENTRY_STRING("label", "i2c-ktd2026:rgb:indicator"), + PROPERTY_ENTRY_STRING("linux,default-trigger", "bq27520-0-charging-orange-full-green"), { } }; @@ -656,9 +656,9 @@ static const struct software_node ktd2026_red_led_node = { static const struct software_node *ktd2026_node_group[] = { &ktd2026_node, &ktd2026_rgb_led_node, + &ktd2026_red_led_node, &ktd2026_green_led_node, &ktd2026_blue_led_node, - &ktd2026_red_led_node, NULL };