From patchwork Thu Apr 11 19:38:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Murphy X-Patchwork-Id: 162073 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp7820374jan; Thu, 11 Apr 2019 12:39:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqyPuToq0TkmP//aeDTU+p0kzj7D1SzFRu54ybeGjg+E+4USgwPWbLg0ExUXSURPoxT22F7e X-Received: by 2002:a17:902:6949:: with SMTP id k9mr52081497plt.59.1555011552830; Thu, 11 Apr 2019 12:39:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555011552; cv=none; d=google.com; s=arc-20160816; b=cxHkI2si4nhugulEu+kYsakrIh3sjh22Iq8qt/3Fwy5xALySVS+vHMNFqVsUgPrji+ 5gscp8MIK5zANAkcmkqtKTxUjRWLzg11c9oBdzY3RyL1Xj5CJj9/r2ilGQchiModsSyB ceWbyc08KcqRbBVhwJIqI+TImfHfAMo7kPwfVZSJ0aa6v8Ux370k7wXAJNsz2mDt6185 Q1mYCUXo35pIVSHM6bKx94CgdB1cRVFNCPn/0We3638oIk9wFr52ECLCNlPvR1lCFMa0 mcypje/ekO72g5rkmxq4FaGUANyKa97lSeVIgMC3nztpUY/2hOt43gm3VCJv0sNrwmNz qrHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=t3YrqG0Nm7PYbsiOLOPSZsjrnOS/RgZqdo+csKzF08c=; b=n4wi/l8EJyzy3geOeXZ5kg089Db81APlilK2ZG5I8abe27OlvDZ5muJb+R2Oqt/QzS WYlOn96yleEcPdH/FCMNcNTR/eNKUCeQUYTXWI+BKSR0df5HpfeP8AWWZXNtQuFmzk7t UkfWNEEvi6exRtWK+cYXaJp6r5RZfb1okx7omUaR6DItKSesY2X3Xrlm5Ma1YXvR79OD VRBOXj72piYQF6NTQcEqUH1fkR2aTt8Bcfc7wrgKY3/F+aP4IdpbFg4JuF2Ajno1LoQ2 YmmUWDzqkrQ7LOqyoLOqBglp70X3c0MLnSuGlV29S2dMHua3+dfDW3zOTkWP3NEo8So7 0Isw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=xwcSybCl; spf=pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-leds-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j30si35420028pgl.338.2019.04.11.12.39.12; Thu, 11 Apr 2019 12:39:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=xwcSybCl; spf=pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-leds-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726633AbfDKTjL (ORCPT + 1 other); Thu, 11 Apr 2019 15:39:11 -0400 Received: from fllv0015.ext.ti.com ([198.47.19.141]:52022 "EHLO fllv0015.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726646AbfDKTjL (ORCPT ); Thu, 11 Apr 2019 15:39:11 -0400 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x3BJcoFv116875; Thu, 11 Apr 2019 14:38:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1555011530; bh=t3YrqG0Nm7PYbsiOLOPSZsjrnOS/RgZqdo+csKzF08c=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=xwcSybCl8YX+gJqWNAyO6Oaz7Dzkb0/lh+uRDt4AeIKJfe3eq6telw532AqWTsm/0 7bDwVDU+wrV8Ws2WdgwfvxzzeG0M4MO5x6/Emm2Hr2hCVBNlg8hnudRwELZEFCB5wh DqsdtatAzMxrO1AALTQWoRPfLaJlB/yzfkOonfcs= Received: from DLEE112.ent.ti.com (dlee112.ent.ti.com [157.170.170.23]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x3BJcoDU095215 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 11 Apr 2019 14:38:50 -0500 Received: from DLEE104.ent.ti.com (157.170.170.34) by DLEE112.ent.ti.com (157.170.170.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Thu, 11 Apr 2019 14:38:50 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DLEE104.ent.ti.com (157.170.170.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Thu, 11 Apr 2019 14:38:50 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id x3BJco1T073804; Thu, 11 Apr 2019 14:38:50 -0500 From: Dan Murphy To: , , , , CC: , , , Dan Murphy Subject: [PATCH v2 2/7] dt: bindings: Add multicolor class dt bindings documention Date: Thu, 11 Apr 2019 14:38:43 -0500 Message-ID: <20190411193848.23140-3-dmurphy@ti.com> X-Mailer: git-send-email 2.21.0.5.gaeb582a983 In-Reply-To: <20190411193848.23140-1-dmurphy@ti.com> References: <20190411193848.23140-1-dmurphy@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-leds-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-leds@vger.kernel.org Add DT bindings for the LEDs multicolor class framework. Signed-off-by: Dan Murphy --- .../devicetree/bindings/leds/common.txt | 2 + .../bindings/leds/leds-class-multicolor.txt | 142 ++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 Documentation/devicetree/bindings/leds/leds-class-multicolor.txt -- 2.21.0.5.gaeb582a983 diff --git a/Documentation/devicetree/bindings/leds/common.txt b/Documentation/devicetree/bindings/leds/common.txt index 7497a3c221fe..bc424a9ba547 100644 --- a/Documentation/devicetree/bindings/leds/common.txt +++ b/Documentation/devicetree/bindings/leds/common.txt @@ -23,6 +23,8 @@ Optional properties for child nodes: - color : Color of the LED. Use one of the LED_COLOR_ID_* prefixed definitions from the header include/dt-bindings/leds/common.h. If there is no matching LED_COLOR_ID available, add a new one. + For multi color LED support see leds-multicolor.txt within this + directory. - led-enumerator: Integer to be used for LED differentiation when neither function nor color can be used for that purpose. diff --git a/Documentation/devicetree/bindings/leds/leds-class-multicolor.txt b/Documentation/devicetree/bindings/leds/leds-class-multicolor.txt new file mode 100644 index 000000000000..9cbc4aece53d --- /dev/null +++ b/Documentation/devicetree/bindings/leds/leds-class-multicolor.txt @@ -0,0 +1,142 @@ +* Multicolor LED properties + +Multicolor LEDs can consist of a RGB, RGBW or a RGBA LED clusters. These devices +can be grouped together and also provide a modeling mechanism so that the +cluster LEDs can vary in hue and intensity to produce a wide range of colors. + +The nodes and properties defined in this document are unique to the multicolor +LED class. Common LED nodes and properties are inherited from the common.txt +within this documentation directory. + +Required LED Child properties: + - color : For multicolor LED support this property should be defined as + LED_COLOR_ID_MULTI and further definition can be found in + include/linux/leds/common.h. + +Optional LED Child properties: + - available-brightness-models : This is the phandle to the brightness-model + node(s) that this LED cluster can support. + +Required Brightness model properties + - led-brightness-model : This flag alerts the device driver and class + code that this node is a brightness model node + and to process the properties differently. + +Required Brightness model child properties + - model_name : This is the name of the model presented to the user. This + should be a color that the LED cluster can produce for + the device it is attached to. + - layout : This is the LED layout for the levels. This layout will + determine the color order of the levels. The layout and + level-x properties array should be the same size. + - level-x : These are the values for the LEDs to produce the color that + is defined. These values are placed in the array according + to the layout property. + +led-controller@30 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "ti,lp5024"; + reg = <0x29>; + + lp5024_model_yellow: brightness-models { + led-brightness-model; + model@0 { + model_name = "yellow"; + layout = ; + level-1 = <255 227 40>; + level-2 = <255 240 136>; + level-3 = <255 247 196>; + }; + }; + + lp5024_model_orange: brightness-models { + led-brightness-model; + model@1 { + model_name = "orange"; + layout = ; + level-1 = <236 140 16>; + level-2 = <236 157 55>; + level-3 = <236 183 115>; + }; + }; + + multi-led@4 { + #address-cells = <1>; + #size-cells = <0>; + reg = <4>; + color = ; + function = LED_FUNCTION_ACTIVITY; + available-brightness-models = <&lp5024_model_yellow>; + + led@12 { + reg = <12>; + color = ; + }; + + led@13 { + reg = <13>; + color = ; + }; + + led@14 { + reg = <14>; + color = ; + }; + }; + + /* Only support RGB no model defined */ + multi-led@1 { + #address-cells = <1>; + #size-cells = <0>; + reg = <1>; + label = "rgb:led_mod1"; + + led@3 { + reg = <3>; + color = ; + }; + + led@4 { + reg = <4>; + color = ; + }; + + led@5 { + reg = <5>; + color = ; + }; + }; + + multi-led@2 { + #address-cells = <1>; + #size-cells = <0>; + label = "rgb:banks"; + reg = <2>; + ti,led-bank = <2 3 5>; + available-brightness-models = <&lp5024_model_orange>; + + led@6 { + reg = <0x6>; + color = ; + led-sources = <6 9 15>; + }; + + led@7 { + reg = <0x7>; + color = ; + led-sources = <7 10 16>; + }; + + led@8 { + reg = <0x8>; + color = ; + led-sources = <8 11 17>; + }; + }; + +}; From patchwork Thu Apr 11 19:38:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Murphy X-Patchwork-Id: 162072 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp7820343jan; Thu, 11 Apr 2019 12:39:11 -0700 (PDT) X-Google-Smtp-Source: APXvYqzB280sHSWdVdZbHSMlJf/SclcPw0702yaUZSdMU0PjagWSyj8aqJBdxzMYaBrk49K8M8NX X-Received: by 2002:a63:f40d:: with SMTP id g13mr49953817pgi.345.1555011551332; Thu, 11 Apr 2019 12:39:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555011551; cv=none; d=google.com; s=arc-20160816; b=Q3Ny1A5qSxTYhM7WNrxq8NQeXhymi5Kg0N7q4xMfybw+sAe3AHy0Lu6xHFvNlYyj+4 8cmzGAqOCjZuDdx6F7dHVz4t03yAvBRkE0HwYMRDJUv8xuNH3Zz6za4JPrEO0w7bZith Ihf/otYOFc88NdFgtwxkyLo69y9blzdVwF5WQ+ck2tuvC5T0ps45Od3BiVbcWwTRDnTd 7j+TQzrq4apvSzh7TOiRXkZnOPdgKALhVxdNrmSag1ubiqCL+pEptdj63K/Im98OeVAS 3u8DpLTXSHQylxND5/s4r2LVB8Nfyo25+4wUK0MJLsRpirE105FHBlEVj9KVVALMQu4J ibPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=baqNVO7clRuyE5fP6zoOVX4pSxUZ/nsAbVFV7wkYINw=; b=e2NiDSEXDuFXaeeRwZ2ctw323m1E3d51++35QYoVrWeVE5hWdm/VbPzhQ+ed0+tSij qG0Yr7PE6Xkw8o4brdn5xlBLQzEM6Nb8Eydik5Y+PxvDqk11j/Pa1KPDvnS4v3Kc5/rU OhtCsKwFm099/dGl3ShaR4+uDLJXxjlEUwih9ArkoNsd4puwiZ9S4rFEv/2JtfdzmWej 4Fa52rg6aaGFadCole4ukMMi2G85tEYTLT8AlkkZl5MMSTxLIJGpDze6HQJ/KLiLDOkP Hxs6Ep9N/edECClIvBzSWvPNmGh5ZZfmK6wTgQIlcXSn9h1JY1aBbBNOQSWr5/HzA/ki ElfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=VExnVpkW; spf=pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-leds-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k131si35616713pga.267.2019.04.11.12.39.11; Thu, 11 Apr 2019 12:39:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=VExnVpkW; spf=pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-leds-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726661AbfDKTjL (ORCPT + 1 other); Thu, 11 Apr 2019 15:39:11 -0400 Received: from lelv0142.ext.ti.com ([198.47.23.249]:50452 "EHLO lelv0142.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726633AbfDKTjK (ORCPT ); Thu, 11 Apr 2019 15:39:10 -0400 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id x3BJcpPs097034; Thu, 11 Apr 2019 14:38:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1555011531; bh=baqNVO7clRuyE5fP6zoOVX4pSxUZ/nsAbVFV7wkYINw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=VExnVpkW31gv5R/TPVQKllr6TeY+e/4B98I503LB8AJySE3+65ySZwL8NvZcP633g ZyP7iO5pySLtC/lrWaHY28P25f6+pvKJA5W0c5fQIcjHkk+9n3W+6NDEeDXvwTwvCr vyUcd0idH4aawprBpoNyUMfAIwJAz4tW0Gd+PN0E= Received: from DLEE109.ent.ti.com (dlee109.ent.ti.com [157.170.170.41]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x3BJcp6Z120624 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 11 Apr 2019 14:38:51 -0500 Received: from DLEE103.ent.ti.com (157.170.170.33) by DLEE109.ent.ti.com (157.170.170.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Thu, 11 Apr 2019 14:38:51 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Thu, 11 Apr 2019 14:38:51 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id x3BJcoZW073810; Thu, 11 Apr 2019 14:38:50 -0500 From: Dan Murphy To: , , , , CC: , , , Dan Murphy Subject: [PATCH v2 4/7] dt-bindings: leds: Add multicolor ID to the color ID list Date: Thu, 11 Apr 2019 14:38:45 -0500 Message-ID: <20190411193848.23140-5-dmurphy@ti.com> X-Mailer: git-send-email 2.21.0.5.gaeb582a983 In-Reply-To: <20190411193848.23140-1-dmurphy@ti.com> References: <20190411193848.23140-1-dmurphy@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-leds-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-leds@vger.kernel.org Add a new color ID that is declared as MULTICOLOR as with the multicolor framework declaring a definitive color is not accurate as the node can contain multiple colors. Signed-off-by: Dan Murphy --- drivers/leds/led-class.c | 1 + include/dt-bindings/leds/common.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) -- 2.21.0.5.gaeb582a983 diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index bfd46a9bba63..11dd78b63403 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c @@ -35,6 +35,7 @@ const char *led_colors[LED_COLOR_ID_COUNT] = { [LED_COLOR_ID_VIOLET] = "violet", [LED_COLOR_ID_YELLOW] = "yellow", [LED_COLOR_ID_IR] = "ir", + [LED_COLOR_ID_MULTI] = "multicolor", }; EXPORT_SYMBOL_GPL(led_colors); diff --git a/include/dt-bindings/leds/common.h b/include/dt-bindings/leds/common.h index c95f39b3a254..f6df2c63398e 100644 --- a/include/dt-bindings/leds/common.h +++ b/include/dt-bindings/leds/common.h @@ -64,6 +64,7 @@ #define LED_COLOR_ID_VIOLET 5 #define LED_COLOR_ID_YELLOW 6 #define LED_COLOR_ID_IR 7 -#define LED_COLOR_ID_COUNT 8 +#define LED_COLOR_ID_MULTI 8 +#define LED_COLOR_ID_COUNT 9 #endif /* __DT_BINDINGS_LEDS_H */ From patchwork Thu Apr 11 19:38:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Murphy X-Patchwork-Id: 162077 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp7820808jan; Thu, 11 Apr 2019 12:39:40 -0700 (PDT) X-Google-Smtp-Source: APXvYqy9tU8DBADVAzoTTG/P9XMUt3AevdSEeryasAQbRHcBgFC4WpIP8WyXa8mTQ/uYcBJVyi5y X-Received: by 2002:a62:b418:: with SMTP id h24mr51587305pfn.145.1555011580162; Thu, 11 Apr 2019 12:39:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555011580; cv=none; d=google.com; s=arc-20160816; b=K2/7d4WB+wgdQpn2qVN+HQiQqr97LJgGMOyPHTk+e8l5hk67fd4GFp1zGfkYvJPKl7 8z+qdnNMdmGPpasRnIklhNlFer8UfOvzZMmzB1Yra/gWLMBE1aBm+j7k0HgQsH1n+RBH dtePPUbeqA02ffmOiUC6rvzA0VITjlE7KRHRgUeq7XuytOHxaMy8sAZZNWzOyXGk2NzT buFy+hTBYLFPo6Tt9I9tkfEbCTSAiL7n/sTYVZ1N4RDOP33FCk80r0LmQLI83GRYfW3S ctxjMl3yLmN2/paPEfAknzMedbkZkK3xRiegQ8drn8rOhZoAPBuy7oIXIN9su4Rdx18D RYbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=vToNwzZQlvlPe1znDzav9uCkfdmhArgCOxvQEkVQK+E=; b=k+YjjfqEGHkzWFrIeStRHDn2ydEI+Ckcm6eZElB30QTGRmAO0xQS3HfHu3wcIMrPmQ eoB8epKPgsaJxMzrEReIRLezoxEiT6EI4u8KK+vqFfntNrEfwUlenKbDZ9unAQL5PQ9C oJ4OAtTsLgd2G6Pxb4VHfBYw+Dibb8smfEbmzTx2FGt8ESziDronxZInI8EqkCoJ3AsM VuRbb3JTw7+R+N1WGMYp/haJ9sxM7yLD2nhXlYXI5tgsYBjMHhajoR2JxBpg2iSH2VAI i1nMd7Jt1V3otmXmxZjwhOBggkfgl13NaUYW8AS/084V6ukpH7GZbJC+iLxp9hVNJfOt sQYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=NsnYV0eE; spf=pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-leds-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i24si34879435pgh.434.2019.04.11.12.39.40; Thu, 11 Apr 2019 12:39:40 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=NsnYV0eE; spf=pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-leds-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726937AbfDKTjj (ORCPT + 1 other); Thu, 11 Apr 2019 15:39:39 -0400 Received: from lelv0142.ext.ti.com ([198.47.23.249]:50456 "EHLO lelv0142.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726649AbfDKTjL (ORCPT ); Thu, 11 Apr 2019 15:39:11 -0400 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id x3BJcpG8097038; Thu, 11 Apr 2019 14:38:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1555011531; bh=vToNwzZQlvlPe1znDzav9uCkfdmhArgCOxvQEkVQK+E=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=NsnYV0eEwTi3qf2f6UtHskq/bSMDTvdeBkx+qn99xy40VEv0RIcf2H57UGmfgRJxM SYaLIFtQUcDy+Sf4HHCRTcWuJzBLUcPgkcaJkXPfzUDCwlA9oNSWL5H24/8j0R+JoI Yh+IB9i8cTWZpmXNl542qTZj1OVgjZh2CON8ToBo= Received: from DFLE114.ent.ti.com (dfle114.ent.ti.com [10.64.6.35]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x3BJcpcB095226 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 11 Apr 2019 14:38:51 -0500 Received: from DFLE109.ent.ti.com (10.64.6.30) by DFLE114.ent.ti.com (10.64.6.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Thu, 11 Apr 2019 14:38:51 -0500 Received: from fllv0039.itg.ti.com (10.64.41.19) by DFLE109.ent.ti.com (10.64.6.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Thu, 11 Apr 2019 14:38:51 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id x3BJcpqk082072; Thu, 11 Apr 2019 14:38:51 -0500 From: Dan Murphy To: , , , , CC: , , , Dan Murphy Subject: [PATCH v2 5/7] leds: multicolor: Introduce a multicolor class definition Date: Thu, 11 Apr 2019 14:38:46 -0500 Message-ID: <20190411193848.23140-6-dmurphy@ti.com> X-Mailer: git-send-email 2.21.0.5.gaeb582a983 In-Reply-To: <20190411193848.23140-1-dmurphy@ti.com> References: <20190411193848.23140-1-dmurphy@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-leds-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-leds@vger.kernel.org Introduce a multicolor class that groups colored LEDs within a LED node. The framework allows for dynamically setting individual LEDs or setting brightness levels of LEDs and updating them virtually simultaneously. Signed-off-by: Dan Murphy --- drivers/leds/Kconfig | 10 + drivers/leds/Makefile | 1 + drivers/leds/led-class-multicolor.c | 401 +++++++++++++++++++++++++++ include/linux/led-class-multicolor.h | 74 +++++ 4 files changed, 486 insertions(+) create mode 100644 drivers/leds/led-class-multicolor.c create mode 100644 include/linux/led-class-multicolor.h -- 2.21.0.5.gaeb582a983 diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index f24d31138471..1e400af24114 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -29,6 +29,16 @@ config LEDS_CLASS_FLASH for the flash related features of a LED device. It can be built as a module. +config LEDS_CLASS_MULTI_COLOR + tristate "LED Mulit Color LED Class Support" + depends on LEDS_CLASS + help + This option enables the multicolor LED sysfs class in /sys/class/leds. + It wraps LED Class and adds multicolor LED specific sysfs attributes + and kernel internal API to it. You'll need this to provide support + for multicolor LEDs that are grouped together. This class is not + intended for single color LEDs. It can be built as a module. + config LEDS_BRIGHTNESS_HW_CHANGED bool "LED Class brightness_hw_changed attribute support" depends on LEDS_CLASS diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile index 4c1b0054f379..c57c2aec9510 100644 --- a/drivers/leds/Makefile +++ b/drivers/leds/Makefile @@ -4,6 +4,7 @@ obj-$(CONFIG_NEW_LEDS) += led-core.o obj-$(CONFIG_LEDS_CLASS) += led-class.o obj-$(CONFIG_LEDS_CLASS_FLASH) += led-class-flash.o +obj-$(CONFIG_LEDS_CLASS_MULTI_COLOR) += led-class-multicolor.o obj-$(CONFIG_LEDS_TRIGGERS) += led-triggers.o # LED Platform Drivers diff --git a/drivers/leds/led-class-multicolor.c b/drivers/leds/led-class-multicolor.c new file mode 100644 index 000000000000..481ef0ac217c --- /dev/null +++ b/drivers/leds/led-class-multicolor.c @@ -0,0 +1,401 @@ +// SPDX-License-Identifier: GPL-2.0 +// LED Multi Color class interface +// Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/ + +#include +#include +#include +#include +#include +#include "leds.h" + +struct led_classdev_mc_data { + struct led_classdev_mc *mcled_cdev; + struct kobject *color_kobj; + struct kobject *led_kobj; + + struct device_attribute sync_attr; + struct device_attribute sync_enable_attr; + + struct list_head color_list; +}; + +struct led_classdev_mc_priv { + struct led_classdev_mc *mcled_cdev; + + struct device_attribute max_brightness_attr; + struct device_attribute brightness_attr; + + enum led_brightness max_brightness; + enum led_brightness brightness; + struct list_head list; + + int color_id; +}; + +static ssize_t sync_store(struct device *dev, + struct device_attribute *sync_attr, + const char *buf, size_t size) +{ + struct led_classdev_mc_data *data = container_of(sync_attr, + struct led_classdev_mc_data, + sync_attr); + struct led_classdev_mc *mcled_cdev = data->mcled_cdev; + struct led_classdev *led_cdev = &mcled_cdev->led_cdev; + const struct led_multicolor_ops *ops = mcled_cdev->ops; + struct led_classdev_mc_priv *priv; + unsigned long sync_value; + ssize_t ret = -EINVAL; + + mutex_lock(&led_cdev->led_access); + + if (!mcled_cdev->sync_enabled) + goto unlock; + + ret = kstrtoul(buf, 0, &sync_value); + if (ret) + goto unlock; + + if (!sync_value) { + ret = size; + goto unlock; + } + + list_for_each_entry(priv, &data->color_list, list) { + ret = ops->set_color_brightness(priv->mcled_cdev, + priv->color_id, + priv->brightness); + if (ret < 0) + goto unlock; + } + + ret = size; +unlock: + mutex_unlock(&led_cdev->led_access); + return ret; +} + +static ssize_t sync_enable_store(struct device *dev, + struct device_attribute *sync_enable_attr, + const char *buf, size_t size) +{ + struct led_classdev_mc_data *data = container_of(sync_enable_attr, + struct led_classdev_mc_data, + sync_enable_attr); + struct led_classdev_mc *mcled_cdev = data->mcled_cdev; + struct led_classdev *led_cdev = &mcled_cdev->led_cdev; + unsigned long sync_value; + ssize_t ret = -EINVAL; + + mutex_lock(&led_cdev->led_access); + + ret = kstrtoul(buf, 0, &sync_value); + if (ret) + goto unlock; + + mcled_cdev->sync_enabled = sync_value; + + ret = size; +unlock: + mutex_unlock(&led_cdev->led_access); + return ret; +} + +static ssize_t sync_enable_show(struct device *dev, + struct device_attribute *sync_enable_attr, + char *buf) +{ + struct led_classdev_mc_data *data = container_of(sync_enable_attr, + struct led_classdev_mc_data, + sync_enable_attr); + struct led_classdev_mc *mcled_cdev = data->mcled_cdev; + + return sprintf(buf, "%d\n", mcled_cdev->sync_enabled); +} + +static ssize_t brightness_store(struct device *dev, + struct device_attribute *brightness_attr, + const char *buf, size_t size) +{ + struct led_classdev_mc_priv *priv = container_of(brightness_attr, + struct led_classdev_mc_priv, + brightness_attr); + struct led_multicolor_ops *ops = priv->mcled_cdev->ops; + struct led_classdev *led_cdev = &priv->mcled_cdev->led_cdev; + + int old_brightness; + unsigned long value; + ssize_t ret = -EINVAL; + + mutex_lock(&led_cdev->led_access); + + ret = kstrtoul(buf, 10, &value); + if (ret) + goto unlock; + + if (value > priv->max_brightness) { + ret = -EINVAL; + goto unlock; + } + + /* Retain the current brightness in case writing the LED fails */ + old_brightness = priv->brightness; + priv->brightness = value; + + if (priv->mcled_cdev->sync_enabled) { + ret = size; + goto unlock; + } + + ret = ops->set_color_brightness(priv->mcled_cdev, + priv->color_id, value); + if (ret < 0) { + priv->brightness = old_brightness; + goto unlock; + } + + ret = size; +unlock: + mutex_unlock(&led_cdev->led_access); + return ret; +} + +static ssize_t brightness_show(struct device *dev, + struct device_attribute *brightness_attr, char *buf) +{ + struct led_classdev_mc_priv *priv = container_of(brightness_attr, + struct led_classdev_mc_priv, + brightness_attr); + const struct led_multicolor_ops *ops = priv->mcled_cdev->ops; + int value = 0; + + if (priv->mcled_cdev->sync_enabled) { + value = priv->brightness; + goto sync_enabled; + } + + if (ops->get_color_brightness) { + value = ops->get_color_brightness(priv->mcled_cdev, + priv->color_id); + priv->brightness = value; + } else { + value = priv->brightness; + } + +sync_enabled: + return sprintf(buf, "%d\n", value); +} + +static ssize_t max_brightness_show(struct device *dev, + struct device_attribute *max_brightness_attr, + char *buf) +{ + struct led_classdev_mc_priv *priv = container_of(max_brightness_attr, + struct led_classdev_mc_priv, + max_brightness_attr); + + return sprintf(buf, "%d\n", priv->max_brightness); +} + +static int led_multicolor_init_color(struct led_classdev_mc_data *data, + struct led_classdev_mc *mcled_cdev, + int color_id) +{ + struct led_classdev *led_cdev = &mcled_cdev->led_cdev; + struct led_classdev_mc_priv *mc_priv; + int ret; + + mc_priv = devm_kzalloc(led_cdev->dev, sizeof(*mc_priv), GFP_KERNEL); + if (!mc_priv) + return -ENOMEM; + + mc_priv->color_id = color_id; + mc_priv->mcled_cdev = mcled_cdev; + + data->led_kobj = kobject_create_and_add(led_colors[color_id], + data->color_kobj); + if (!data->led_kobj) + return -EINVAL; + + sysfs_attr_init(&mc_priv->brightness_attr.attr); + mc_priv->brightness_attr.attr.name = "brightness"; + mc_priv->brightness_attr.attr.mode = S_IRUSR | S_IWUSR; + mc_priv->brightness_attr.show = brightness_show; + mc_priv->brightness_attr.store = brightness_store; + ret = sysfs_create_file(data->led_kobj, + &mc_priv->brightness_attr.attr); + if (ret) + goto err_out; + + sysfs_attr_init(&mc_priv->max_brightness_attr.attr); + mc_priv->max_brightness_attr.attr.name = "max_brightness"; + mc_priv->max_brightness_attr.attr.mode = S_IRUSR; + mc_priv->max_brightness_attr.show = max_brightness_show; + ret = sysfs_create_file(data->led_kobj, + &mc_priv->max_brightness_attr.attr); + if (ret) + goto err_out; + + mc_priv->max_brightness = LED_FULL; + list_add_tail(&mc_priv->list, &data->color_list); + +err_out: + return ret; +} + +static int led_multicolor_init_color_dir(struct led_classdev_mc_data *data, + struct led_classdev_mc *mcled_cdev) +{ + struct led_classdev *led_cdev = &mcled_cdev->led_cdev; + int ret; + + data->color_kobj = kobject_create_and_add("colors", + &led_cdev->dev->kobj); + if (!data->color_kobj) + return -EINVAL; + + sysfs_attr_init(&data->sync_enable_attr.attr); + data->sync_enable_attr.attr.name = "sync_enable"; + data->sync_enable_attr.attr.mode = S_IRUSR | S_IWUSR; + data->sync_enable_attr.show = sync_enable_show; + data->sync_enable_attr.store = sync_enable_store; + ret = sysfs_create_file(data->color_kobj, + &data->sync_enable_attr.attr); + if (ret) + goto err_out; + + sysfs_attr_init(&data->sync_attr.attr); + data->sync_attr.attr.name = "sync"; + data->sync_attr.attr.mode = S_IWUSR; + data->sync_attr.store = sync_store; + ret = sysfs_create_file(data->color_kobj, + &data->sync_attr.attr); + if (ret) + goto err_out; + + data->mcled_cdev = mcled_cdev; + +err_out: + return ret; +} + +int led_classdev_multicolor_register_ext(struct device *parent, + struct led_classdev_mc *mcled_cdev, + struct led_init_data *init_data) +{ + struct led_classdev *led_cdev; + struct led_multicolor_ops *ops; + struct led_classdev_mc_data *data; + int ret; + int i; + + if (!mcled_cdev) + return -EINVAL; + + ops = mcled_cdev->ops; + if (!ops || !ops->set_color_brightness) + return -EINVAL; + + data = kzalloc(sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + led_cdev = &mcled_cdev->led_cdev; + + INIT_LIST_HEAD(&data->color_list); + + /* Register led class device */ + ret = led_classdev_register_ext(parent, led_cdev, init_data); + if (ret) + return ret; + + ret = led_multicolor_init_color_dir(data, mcled_cdev); + if (ret) + return ret; + + + /* Select the sysfs attributes to be created for the device */ + for (i = 0; i < mcled_cdev->num_leds; i++) { + ret = led_multicolor_init_color(data, mcled_cdev, + mcled_cdev->available_colors[i]); + if (ret) + break; + } + + return ret; +} +EXPORT_SYMBOL_GPL(led_classdev_multicolor_register_ext); + +void led_classdev_multicolor_unregister(struct led_classdev_mc *mcled_cdev) +{ + if (!mcled_cdev) + return; + + led_classdev_unregister(&mcled_cdev->led_cdev); +} +EXPORT_SYMBOL_GPL(led_classdev_multicolor_unregister); + +static void devm_led_classdev_multicolor_release(struct device *dev, void *res) +{ + led_classdev_multicolor_unregister(*(struct led_classdev_mc **)res); +} + +/** + * devm_of_led_classdev_register - resource managed led_classdev_register() + * + * @parent: parent of LED device + * @led_cdev: the led_classdev structure for this device. + */ +int devm_led_classdev_multicolor_register(struct device *parent, + struct led_classdev_mc *mcled_cdev) +{ + struct led_classdev_mc **dr; + int ret; + + dr = devres_alloc(devm_led_classdev_multicolor_release, + sizeof(*dr), GFP_KERNEL); + if (!dr) + return -ENOMEM; + + ret = led_classdev_multicolor_register(parent, mcled_cdev); + if (ret) { + devres_free(dr); + return ret; + } + + *dr = mcled_cdev; + devres_add(parent, dr); + + return 0; +} +EXPORT_SYMBOL_GPL(devm_led_classdev_multicolor_register); + +static int devm_led_classdev_multicolor_match(struct device *dev, + void *res, void *data) +{ + struct mcled_cdev **p = res; + + if (WARN_ON(!p || !*p)) + return 0; + + return *p == data; +} + +/** + * devm_led_classdev_multicolor_unregister() - resource managed + * led_classdev_multicolor_unregister() + * @parent: The device to unregister. + * @mcled_cdev: the led_classdev_mc structure for this device. + */ +void devm_led_classdev_multicolor_unregister(struct device *dev, + struct led_classdev_mc *mcled_cdev) +{ + WARN_ON(devres_release(dev, + devm_led_classdev_multicolor_release, + devm_led_classdev_multicolor_match, mcled_cdev)); +} +EXPORT_SYMBOL_GPL(devm_led_classdev_multicolor_unregister); + +MODULE_AUTHOR("Dan Murphy "); +MODULE_DESCRIPTION("Multi Color LED class interface"); +MODULE_LICENSE("GPL v2"); diff --git a/include/linux/led-class-multicolor.h b/include/linux/led-class-multicolor.h new file mode 100644 index 000000000000..af52ef84b475 --- /dev/null +++ b/include/linux/led-class-multicolor.h @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: GPL-2.0 +/* LED Multicolor class interface + * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/ + */ + +#ifndef __LINUX_MULTICOLOR_LEDS_H_INCLUDED +#define __LINUX_MULTICOLOR_LEDS_H_INCLUDED + +#include +#include + +struct led_classdev_mc; + +struct led_multicolor_ops { + /* Set brightness for a specific color id */ + int (*set_color_brightness)(struct led_classdev_mc *mcled_cdev, + int color_id, int value); + /* Read current color setting */ + int (*get_color_brightness)(struct led_classdev_mc *mcled_cdev, + int color_id); +}; + +struct led_classdev_mc { + /* led class device */ + struct led_classdev led_cdev; + + /* multicolor led specific ops */ + struct led_multicolor_ops *ops; + + u32 available_colors[LED_COLOR_ID_COUNT]; + int num_leds; + + bool sync_enabled; +}; + +static inline struct led_classdev_mc *lcdev_to_mccdev( + struct led_classdev *lcdev) +{ + return container_of(lcdev, struct led_classdev_mc, led_cdev); +} + +/** + * led_classdev_multicolor_register_ext - register a new object of led_classdev + * class with support for multicolor LEDs + * @parent: the multicolor LED to register + * @mcled_cdev: the led_classdev_mc structure for this device + * @init_data: the LED class Multi color device initialization data + * + * Returns: 0 on success or negative error value on failure + */ +extern int led_classdev_multicolor_register_ext(struct device *parent, + struct led_classdev_mc *mcled_cdev, + struct led_init_data *init_data); + +#define led_classdev_multicolor_register(parent, mcled_cdev) \ + led_classdev_multicolor_register_ext(parent, mcled_cdev, NULL) + +/** + * led_classdev_multicolor_unregister - unregisters an object of led_classdev + * class with support for multicolor LEDs + * @mcled_cdev: the multicolor LED to unregister + * + * Unregister a previously registered via led_classdev_multicolor_register + * object + */ +extern void led_classdev_multicolor_unregister(struct led_classdev_mc *mcled_cdev); + +extern int devm_led_classdev_multicolor_register(struct device *parent, + struct led_classdev_mc *mcled_cdev); + +extern void devm_led_classdev_multicolor_unregister(struct device *parent, + struct led_classdev_mc *mcled_cdev); + +#endif /* __LINUX_MULTICOLOR_LEDS_H_INCLUDED */ From patchwork Thu Apr 11 19:38:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Murphy X-Patchwork-Id: 162076 Delivered-To: patch@linaro.org Received: by 2002:a02:c6d8:0:0:0:0:0 with SMTP id r24csp7820557jan; Thu, 11 Apr 2019 12:39:26 -0700 (PDT) X-Google-Smtp-Source: APXvYqw8zJzq8BhlvCWsWqAPRZiNlVJzgATrr8MCBdZ7QdEammYStTj37EKYGeZTslH82RbrBokM X-Received: by 2002:a17:902:2e83:: with SMTP id r3mr52211294plb.153.1555011566657; Thu, 11 Apr 2019 12:39:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555011566; cv=none; d=google.com; s=arc-20160816; b=MfsmlMNS8B5TYjwgeRO65xMRpPZDGcevjNSraL3xgJiEw57+yBSxQbM6ToCrM/RwBO XPQ3mkgz9dddV2YmoqLWw+UM5vEXzuC8n6QIh5vVRkDsgK8H1wNhy/czbEuW+mdcykvh 47S1uc06Is7NbeThd/MvqTeSZDmgZ/JGbGOWGOUWJzeJVz1KJvxwVlQTm6ozQLIH2dJW YvxmgeS0za6xPOPabYzhuT3CxDAOOWy9aEOBm0EkCa1Ilwl+nqxEIVnbo1EpCQdQYWAL qgldtX31QhOxb4hKSAtAfMaMobrxgZYimLYYNBzEHB5lxR2per+fwfdSDc7Qb5gaXxZP D8Eg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=4iYtDYDNVNI0hoN0zLGA9gCKJuyiDxoBbBvazWpBlPQ=; b=fChFdMYacl6s0WMQ9Zr1MoRM9rOUllaaxtJIfOH+QF/Oy2cFnlM8BEi5eiB+R1vF4X AH6qFWUnmLx7kz+DNBQsMdNbbNAG9EWdqTqBYdXqRdSDjLTRBbiMFOTDJP7u1NzyUL/z 8J3OMxzyfEtQiLsl/5eSdIw7xb7OONqGaO+tKJ1QCBXQydwTQQyLD7u7th92ccLGnw05 f/nmv27SvVVTAJUjCV9EfMNsdRBXL6Ua1Vfn6PgFalyd3ZxWypEyeqybmxIRBaPz9uUl RAJXT8MULJYM0r17KhKGms2FmMNkAegnrTyejWWRCteYNJHY04h8yOgdx1iukILKzneX /XzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=aIpiEc2v; spf=pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-leds-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v20si34975866pgn.105.2019.04.11.12.39.26; Thu, 11 Apr 2019 12:39:26 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=aIpiEc2v; spf=pass (google.com: best guess record for domain of linux-leds-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-leds-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726752AbfDKTj0 (ORCPT + 1 other); Thu, 11 Apr 2019 15:39:26 -0400 Received: from fllv0016.ext.ti.com ([198.47.19.142]:36164 "EHLO fllv0016.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726860AbfDKTjN (ORCPT ); Thu, 11 Apr 2019 15:39:13 -0400 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id x3BJcqXC061867; Thu, 11 Apr 2019 14:38:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1555011532; bh=4iYtDYDNVNI0hoN0zLGA9gCKJuyiDxoBbBvazWpBlPQ=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=aIpiEc2vUhhmRSAVHjc+si2H7by6SchUgz0EeimI/dSuIjhBAw0OUOPAK8nNDC7hz vlPSqNws+Dso24Pyzz9LcBMoCBGof5nVGFNrrxDiy8mHph3RFBZUFdVpJd2xIRU02b MpYFwPkEr9BQC07hT3n/jZjqtXRRfUXsbVPtah2U= Received: from DLEE109.ent.ti.com (dlee109.ent.ti.com [157.170.170.41]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x3BJcpGa120630 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 11 Apr 2019 14:38:52 -0500 Received: from DLEE101.ent.ti.com (157.170.170.31) by DLEE109.ent.ti.com (157.170.170.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Thu, 11 Apr 2019 14:38:51 -0500 Received: from lelv0326.itg.ti.com (10.180.67.84) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Thu, 11 Apr 2019 14:38:51 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id x3BJcpA7103620; Thu, 11 Apr 2019 14:38:51 -0500 From: Dan Murphy To: , , , , CC: , , , Dan Murphy Subject: [PATCH v2 6/7] dt: bindings: lp50xx: Introduce the lp50xx family of RGB drivers Date: Thu, 11 Apr 2019 14:38:47 -0500 Message-ID: <20190411193848.23140-7-dmurphy@ti.com> X-Mailer: git-send-email 2.21.0.5.gaeb582a983 In-Reply-To: <20190411193848.23140-1-dmurphy@ti.com> References: <20190411193848.23140-1-dmurphy@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-leds-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-leds@vger.kernel.org Introduce the bindings for the Texas Instruments LP5036, LP5030, LP5024 and the LP5018 RGB LED device driver. The LP5036/3024/18 can control RGB LEDs individually or as part of a control bank group. These devices have the ability to adjust the mixing control for the RGB LEDs to obtain different colors independent of the overall brightness of the LED grouping. Datasheet: http://www.ti.com/lit/ds/symlink/lp5024.pdf http://www.ti.com/lit/ds/symlink/lp5036.pdf Signed-off-by: Dan Murphy --- .../devicetree/bindings/leds/leds-lp50xx.txt | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 Documentation/devicetree/bindings/leds/leds-lp50xx.txt -- 2.21.0.5.gaeb582a983 Reviewed-by: Rob Herring diff --git a/Documentation/devicetree/bindings/leds/leds-lp50xx.txt b/Documentation/devicetree/bindings/leds/leds-lp50xx.txt new file mode 100644 index 000000000000..48ea7f164ce6 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/leds-lp50xx.txt @@ -0,0 +1,142 @@ +* Texas Instruments - LP5018/24/30/36 RGB LED driver + +The LP50XX is multi-channel, I2C RGB LED Drivers that can group RGB LEDs into +a LED group or control them individually. + +The difference in these RGB LED drivers is the number of supported RGB modules. + +Required parent properties: + - compatible: + "ti,lp5018" + "ti,lp5024" + "ti,lp5030" + "ti,lp5036" + - reg : I2C slave address + lp5018/24 - 0x28 + lp5030/36 - 0x30 + - #address-cells : 1 + - #size-cells : 0 + +Optional parent properties: + - enable-gpios : gpio pin to enable/disable the device. + - vled-supply : LED supply + +Required child properties: + - #address-cells : 1 + - #size-cells : 0 + - reg : This is the LED module number. + - color : see Documentation/devicetree/bindings/leds/common.txt + - function : see Documentation/devicetree/bindings/leds/common.txt + +Required child properties only is LED modules will be banked: + - ti,led-bank : This property denotes the LED module numbers that will + be controlled as a single RGB cluster. Each LED module + number will be controlled by a single LED class instance. + There can only be one instance of the ti,led-bank + property for each device node. + +Required grandchildren properties: + - reg : A single entry denoting the LED module that controls + the RGB cluster. + - color : see Documentation/devicetree/bindings/leds/leds-multicolor.txt + - led-sources : see Documentation/devicetree/bindings/leds/common.txt + +The LED outputs associated with the LED modules are defined in Table 1 of the +corresponding data sheets. + +LP5018 - 6 Total RGB cluster LED outputs 0-5 +LP5024 - 8 Total RGB cluster LED outputs 0-7 +LP5030 - 10 Total RGB cluster LED outputs 0-9 +LP5036 - 12 Total RGB cluster LED outputs 0-11 + +Optional child properties: + - label : see Documentation/devicetree/bindings/leds/common.txt + - linux,default-trigger : + see Documentation/devicetree/bindings/leds/common.txt + +Examples: +led-controller@29 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "ti,lp5024"; + reg = <0x29>; + enable-gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>; + vled-supply = <&vmmcsd_fixed>; + + multi-led@2 { + #address-cells = <1>; + #size-cells = <0>; + reg = <2>; + color = ; + function = LED_FUNCTION_STANDBY; + ti,led-bank = <2 3 5>; + + led@6 { + reg = <0x6>; + color = ; + led-sources = <6 9 15>; + }; + + led@7 { + reg = <0x7>; + color = ; + led-sources = <7 10 16>; + }; + + led@8 { + reg = <0x8>; + color = ; + led-sources = <8 11 17>; + }; + }; + + multi-led@1 { + #address-cells = <1>; + #size-cells = <0>; + reg = <1>; + color = ; + function = LED_FUNCTION_STATUS; + + led@3 { + reg = <3>; + color = ; + }; + + led@4 { + reg = <4>; + color = ; + }; + + led@5 { + reg = <5>; + color = ; + }; + }; + + multi-led@4 { + #address-cells = <1>; + #size-cells = <0>; + reg = <4>; + color = ; + function = LED_FUNCTION_ACTIVITY; + + led@12 { + reg = <12>; + color = ; + }; + + led@13 { + reg = <13>; + color = ; + }; + + led@14 { + reg = <14>; + color = ; + }; + }; +}; + +For more product information please see the link below: +http://www.ti.com/lit/ds/symlink/lp5024.pdf +http://www.ti.com/lit/ds/symlink/lp5036.pdf