linux-leds.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] Qualcomm LPG support for PM8150b/l
@ 2020-10-21 22:50 Dmitry Baryshkov
  2020-10-21 22:50 ` [PATCH 1/5] dt-bindings: leds: leds-qcom-lpg: add pm8150[bl] compatible strings Dmitry Baryshkov
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2020-10-21 22:50 UTC (permalink / raw)
  To: Bjorn Andersson, Pavel Machek, Dan Murphy
  Cc: Rob Herring, linux-leds, devicetree, linux-arm-msm

This patchset brings support for LPG blocks on Qualcomm's PM8150[BL]
PMIC chips, see [1]. PM8150L support was tested on RB5 platform.

This patchset can be folded into the aforementioned series, if Bjorn
would like to, or it can go as a separate instance.

[1] https://lore.kernel.org/linux-arm-msm/20201021201224.3430546-1-bjorn.andersson@linaro.org/



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

* [PATCH 1/5] dt-bindings: leds: leds-qcom-lpg: add pm8150[bl] compatible strings
  2020-10-21 22:50 [PATCH 0/5] Qualcomm LPG support for PM8150b/l Dmitry Baryshkov
@ 2020-10-21 22:50 ` Dmitry Baryshkov
  2020-10-23 16:28   ` Rob Herring
  2020-10-21 22:50 ` [PATCH 2/5] leds: qcom-lpg: add support for pm8150[bl] leds Dmitry Baryshkov
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 8+ messages in thread
From: Dmitry Baryshkov @ 2020-10-21 22:50 UTC (permalink / raw)
  To: Bjorn Andersson, Pavel Machek, Dan Murphy
  Cc: Rob Herring, linux-leds, devicetree, linux-arm-msm

Add two more compatible strings for Light Pulse Generator blocks as
found on PM8150B and PM8150A/L chips.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml b/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml
index 5ccf0f3d8f1b..0474f1d998ff 100644
--- a/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml
+++ b/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml
@@ -17,6 +17,8 @@ description: >
 properties:
   compatible:
     enum:
+      - qcom,pm8150b-lpg
+      - qcom,pm8150l-lpg
       - qcom,pm8916-pwm
       - qcom,pm8941-lpg
       - qcom,pm8994-lpg
-- 
2.28.0


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

* [PATCH 2/5] leds: qcom-lpg: add support for pm8150[bl] leds
  2020-10-21 22:50 [PATCH 0/5] Qualcomm LPG support for PM8150b/l Dmitry Baryshkov
  2020-10-21 22:50 ` [PATCH 1/5] dt-bindings: leds: leds-qcom-lpg: add pm8150[bl] compatible strings Dmitry Baryshkov
@ 2020-10-21 22:50 ` Dmitry Baryshkov
  2020-10-29 18:16   ` Pavel Machek
  2020-10-21 22:50 ` [PATCH 3/5] arm64: dts: pm8150b: add Light Pulse Generator device node Dmitry Baryshkov
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 8+ messages in thread
From: Dmitry Baryshkov @ 2020-10-21 22:50 UTC (permalink / raw)
  To: Bjorn Andersson, Pavel Machek, Dan Murphy
  Cc: Rob Herring, linux-leds, devicetree, linux-arm-msm

Add support for the LPG/PWM block found on newer PMICs: PM8150B and
PM8150A/L.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 drivers/leds/leds-qcom-lpg.c | 68 ++++++++++++++++++++++++++++++++----
 1 file changed, 61 insertions(+), 7 deletions(-)

diff --git a/drivers/leds/leds-qcom-lpg.c b/drivers/leds/leds-qcom-lpg.c
index 86131a65d2c5..4d24e0c973d6 100644
--- a/drivers/leds/leds-qcom-lpg.c
+++ b/drivers/leds/leds-qcom-lpg.c
@@ -48,6 +48,8 @@ struct lpg_data;
  * @lut_bitmap:	allocation bitmap for LUT entries
  * @triled_base: base address of the TRILED block (optional)
  * @triled_src:	power-source for the TRILED
+ * @triled_no_atc_ctl:	true if there is no TRI_LED_ATC_CTL register
+ * @triled_no_src_sel:	true if there is no TRI_LED_SRC_SEL register
  * @channels:	list of PWM channels
  * @num_channels: number of @channels
  */
@@ -65,6 +67,8 @@ struct lpg {
 
 	u32 triled_base;
 	u32 triled_src;
+	bool triled_no_atc_ctl;
+	bool triled_no_src_sel;
 
 	struct lpg_channel *channels;
 	unsigned int num_channels;
@@ -165,6 +169,8 @@ struct lpg_channel_data {
  * @lut_base:		base address of LUT block
  * @lut_size:		number of entries in LUT
  * @triled_base:	base address of TRILED
+ * @triled_no_atc_ctl:	true if there is no TRI_LED_ATC_CTL register
+ * @triled_no_src_sel:	true if there is no TRI_LED_SRC_SEL register
  * @pwm_9bit_mask:	bitmask for switching from 6bit to 9bit pwm
  * @num_channels:	number of channels in LPG
  * @channels:		list of channel initialization data
@@ -173,6 +179,8 @@ struct lpg_data {
 	unsigned int lut_base;
 	unsigned int lut_size;
 	unsigned int triled_base;
+	bool triled_no_atc_ctl;
+	bool triled_no_src_sel;
 	unsigned int pwm_9bit_mask;
 	int num_channels;
 	struct lpg_channel_data *channels;
@@ -986,18 +994,24 @@ static int lpg_init_triled(struct lpg *lpg)
 		return 0;
 
 	lpg->triled_base = lpg->data->triled_base;
-
-	ret = of_property_read_u32(np, "qcom,power-source", &lpg->triled_src);
-	if (ret || lpg->triled_src == 2 || lpg->triled_src > 3) {
-		dev_err(lpg->dev, "invalid power source\n");
-		return -EINVAL;
+	lpg->triled_no_atc_ctl = lpg->data->triled_no_atc_ctl;
+	lpg->triled_no_src_sel = lpg->data->triled_no_src_sel;
+
+	if (!lpg->triled_no_src_sel) {
+		ret = of_property_read_u32(np, "qcom,power-source", &lpg->triled_src);
+		if (ret || lpg->triled_src == 2 || lpg->triled_src > 3) {
+			dev_err(lpg->dev, "invalid power source\n");
+			return -EINVAL;
+		}
 	}
 
 	/* Disable automatic trickle charge LED */
-	regmap_write(lpg->map, lpg->triled_base + TRI_LED_ATC_CTL, 0);
+	if (!lpg->triled_no_atc_ctl)
+		regmap_write(lpg->map, lpg->triled_base + TRI_LED_ATC_CTL, 0);
 
 	/* Configure power source */
-	regmap_write(lpg->map, lpg->triled_base + TRI_LED_SRC_SEL, lpg->triled_src);
+	if (!lpg->triled_no_src_sel)
+		regmap_write(lpg->map, lpg->triled_base + TRI_LED_SRC_SEL, lpg->triled_src);
 
 	/* Default all outputs to off */
 	regmap_write(lpg->map, lpg->triled_base + TRI_LED_EN_CTL, 0);
@@ -1166,12 +1180,52 @@ static const struct lpg_data pmi8998_lpg_data = {
 	},
 };
 
+static const struct lpg_data pm8150b_lpg_data = {
+	.lut_base = 0xb000,
+	.lut_size = 49,
+
+	.triled_base = 0xd000,
+	.triled_no_atc_ctl = true,
+	.triled_no_src_sel = true,
+
+	.pwm_9bit_mask = BIT(4),
+
+	.num_channels = 2,
+	.channels = (struct lpg_channel_data[]) {
+		{ .base = 0xb100, .triled_mask = BIT(7) },
+		{ .base = 0xb200, .triled_mask = BIT(6) },
+	},
+};
+
+static const struct lpg_data pm8150l_lpg_data = {
+	.lut_base = 0xb000,
+	.lut_size = 49,
+
+	.triled_base = 0xd000,
+	.triled_no_atc_ctl = true,
+	.triled_no_src_sel = true,
+
+	.pwm_9bit_mask = BIT(4),
+
+	.num_channels = 5,
+	.channels = (struct lpg_channel_data[]) {
+		{ .base = 0xb100, .triled_mask = BIT(7) },
+		{ .base = 0xb200, .triled_mask = BIT(6) },
+		{ .base = 0xb300, .triled_mask = BIT(5) },
+		{ .base = 0xbc00 },
+		{ .base = 0xbd00 },
+
+	},
+};
+
 static const struct of_device_id lpg_of_table[] = {
 	{ .compatible = "qcom,pm8916-pwm", .data = &pm8916_pwm_data },
 	{ .compatible = "qcom,pm8941-lpg", .data = &pm8941_lpg_data },
 	{ .compatible = "qcom,pm8994-lpg", .data = &pm8994_lpg_data },
 	{ .compatible = "qcom,pmi8994-lpg", .data = &pmi8994_lpg_data },
 	{ .compatible = "qcom,pmi8998-lpg", .data = &pmi8998_lpg_data },
+	{ .compatible = "qcom,pm8150b-lpg", .data = &pm8150b_lpg_data },
+	{ .compatible = "qcom,pm8150l-lpg", .data = &pm8150l_lpg_data },
 	{}
 };
 MODULE_DEVICE_TABLE(of, lpg_of_table);
-- 
2.28.0


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

* [PATCH 3/5] arm64: dts: pm8150b: add Light Pulse Generator device node
  2020-10-21 22:50 [PATCH 0/5] Qualcomm LPG support for PM8150b/l Dmitry Baryshkov
  2020-10-21 22:50 ` [PATCH 1/5] dt-bindings: leds: leds-qcom-lpg: add pm8150[bl] compatible strings Dmitry Baryshkov
  2020-10-21 22:50 ` [PATCH 2/5] leds: qcom-lpg: add support for pm8150[bl] leds Dmitry Baryshkov
@ 2020-10-21 22:50 ` Dmitry Baryshkov
  2020-10-21 22:50 ` [PATCH 4/5] arm64: dts: pm8150l: " Dmitry Baryshkov
  2020-10-21 22:51 ` [PATCH 5/5] arm64: dts: qrb5165-rb5: declare tri-led user leds Dmitry Baryshkov
  4 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2020-10-21 22:50 UTC (permalink / raw)
  To: Bjorn Andersson, Pavel Machek, Dan Murphy
  Cc: Rob Herring, linux-leds, devicetree, linux-arm-msm

Add device node defining LPG/PWM block on PM8150B PMIC chip.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 arch/arm64/boot/dts/qcom/pm8150b.dtsi | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/pm8150b.dtsi b/arch/arm64/boot/dts/qcom/pm8150b.dtsi
index d6e075f92b1e..30e7a5f19e5f 100644
--- a/arch/arm64/boot/dts/qcom/pm8150b.dtsi
+++ b/arch/arm64/boot/dts/qcom/pm8150b.dtsi
@@ -133,5 +133,14 @@ pmic@3 {
 		reg = <0x3 SPMI_USID>;
 		#address-cells = <1>;
 		#size-cells = <0>;
+
+		pm8150b_lpg: lpg {
+			compatible = "qcom,pm8150b-lpg";
+
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			status = "disabled";
+		};
 	};
 };
-- 
2.28.0


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

* [PATCH 4/5] arm64: dts: pm8150l: add Light Pulse Generator device node
  2020-10-21 22:50 [PATCH 0/5] Qualcomm LPG support for PM8150b/l Dmitry Baryshkov
                   ` (2 preceding siblings ...)
  2020-10-21 22:50 ` [PATCH 3/5] arm64: dts: pm8150b: add Light Pulse Generator device node Dmitry Baryshkov
@ 2020-10-21 22:50 ` Dmitry Baryshkov
  2020-10-21 22:51 ` [PATCH 5/5] arm64: dts: qrb5165-rb5: declare tri-led user leds Dmitry Baryshkov
  4 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2020-10-21 22:50 UTC (permalink / raw)
  To: Bjorn Andersson, Pavel Machek, Dan Murphy
  Cc: Rob Herring, linux-leds, devicetree, linux-arm-msm

Add device node defining LPG/PWM block on PM8150L PMIC chip.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 arch/arm64/boot/dts/qcom/pm8150l.dtsi | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/pm8150l.dtsi b/arch/arm64/boot/dts/qcom/pm8150l.dtsi
index 9f214ceec2b7..e8926d6c32cb 100644
--- a/arch/arm64/boot/dts/qcom/pm8150l.dtsi
+++ b/arch/arm64/boot/dts/qcom/pm8150l.dtsi
@@ -114,5 +114,15 @@ pmic@5 {
 		reg = <0x5 SPMI_USID>;
 		#address-cells = <1>;
 		#size-cells = <0>;
+
+		pm8150l_lpg: lpg {
+			compatible = "qcom,pm8150l-lpg";
+
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			status = "disabled";
+		};
+
 	};
 };
-- 
2.28.0


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

* [PATCH 5/5] arm64: dts: qrb5165-rb5: declare tri-led user leds
  2020-10-21 22:50 [PATCH 0/5] Qualcomm LPG support for PM8150b/l Dmitry Baryshkov
                   ` (3 preceding siblings ...)
  2020-10-21 22:50 ` [PATCH 4/5] arm64: dts: pm8150l: " Dmitry Baryshkov
@ 2020-10-21 22:51 ` Dmitry Baryshkov
  4 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2020-10-21 22:51 UTC (permalink / raw)
  To: Bjorn Andersson, Pavel Machek, Dan Murphy
  Cc: Rob Herring, linux-leds, devicetree, linux-arm-msm

Qualcomm RB5 platform uses Light Pulse Generator tri-led block to drive
three green leds. Add device nodes defining those leds.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
index 01708d84fdf6..04eff24f9d71 100644
--- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
+++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
@@ -1014,6 +1014,29 @@ &pm8150_rtc {
 	status = "okay";
 };
 
+&pm8150l_lpg {
+	status = "okay";
+
+	led@1 {
+		reg = <1>;
+		label = "green:user0";
+
+		linux,default-trigger = "heartbeat";
+		default-state = "on";
+	};
+
+	led@2 {
+		reg = <2>;
+		label = "green:user1";
+		default-state = "on";
+	};
+
+	led@3 {
+		reg = <3>;
+		label = "green:user2";
+	};
+};
+
 &qupv3_id_0 {
 	status = "okay";
 };
-- 
2.28.0


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

* Re: [PATCH 1/5] dt-bindings: leds: leds-qcom-lpg: add pm8150[bl] compatible strings
  2020-10-21 22:50 ` [PATCH 1/5] dt-bindings: leds: leds-qcom-lpg: add pm8150[bl] compatible strings Dmitry Baryshkov
@ 2020-10-23 16:28   ` Rob Herring
  0 siblings, 0 replies; 8+ messages in thread
From: Rob Herring @ 2020-10-23 16:28 UTC (permalink / raw)
  To: Dmitry Baryshkov
  Cc: linux-arm-msm, Pavel Machek, Bjorn Andersson, Dan Murphy,
	devicetree, Rob Herring, linux-leds

On Thu, 22 Oct 2020 01:50:56 +0300, Dmitry Baryshkov wrote:
> Add two more compatible strings for Light Pulse Generator blocks as
> found on PM8150B and PM8150A/L chips.
> 
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
>  Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml | 2 ++
>  1 file changed, 2 insertions(+)
> 

Acked-by: Rob Herring <robh@kernel.org>

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

* Re: [PATCH 2/5] leds: qcom-lpg: add support for pm8150[bl] leds
  2020-10-21 22:50 ` [PATCH 2/5] leds: qcom-lpg: add support for pm8150[bl] leds Dmitry Baryshkov
@ 2020-10-29 18:16   ` Pavel Machek
  0 siblings, 0 replies; 8+ messages in thread
From: Pavel Machek @ 2020-10-29 18:16 UTC (permalink / raw)
  To: Dmitry Baryshkov
  Cc: Bjorn Andersson, Dan Murphy, Rob Herring, linux-leds, devicetree,
	linux-arm-msm

[-- Attachment #1: Type: text/plain, Size: 989 bytes --]

Hi!

> Add support for the LPG/PWM block found on newer PMICs: PM8150B and
> PM8150A/L.
> 
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
>  drivers/leds/leds-qcom-lpg.c | 68 ++++++++++++++++++++++++++++++++----
>  1 file changed, 61 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/leds/leds-qcom-lpg.c b/drivers/leds/leds-qcom-lpg.c
> index 86131a65d2c5..4d24e0c973d6 100644
> --- a/drivers/leds/leds-qcom-lpg.c
> +++ b/drivers/leds/leds-qcom-lpg.c
> @@ -48,6 +48,8 @@ struct lpg_data;
>   * @lut_bitmap:	allocation bitmap for LUT entries
>   * @triled_base: base address of the TRILED block (optional)
>   * @triled_src:	power-source for the TRILED
> + * @triled_no_atc_ctl:	true if there is no TRI_LED_ATC_CTL register
> + * @triled_no_src_sel:	true if there is no TRI_LED_SRC_SEL register

Please make logic the other way around. ... triled_has_atc_ctl.

Best regards,
								Pavel
-- 
http://www.livejournal.com/~pavelmachek

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

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

end of thread, other threads:[~2020-10-29 18:16 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-21 22:50 [PATCH 0/5] Qualcomm LPG support for PM8150b/l Dmitry Baryshkov
2020-10-21 22:50 ` [PATCH 1/5] dt-bindings: leds: leds-qcom-lpg: add pm8150[bl] compatible strings Dmitry Baryshkov
2020-10-23 16:28   ` Rob Herring
2020-10-21 22:50 ` [PATCH 2/5] leds: qcom-lpg: add support for pm8150[bl] leds Dmitry Baryshkov
2020-10-29 18:16   ` Pavel Machek
2020-10-21 22:50 ` [PATCH 3/5] arm64: dts: pm8150b: add Light Pulse Generator device node Dmitry Baryshkov
2020-10-21 22:50 ` [PATCH 4/5] arm64: dts: pm8150l: " Dmitry Baryshkov
2020-10-21 22:51 ` [PATCH 5/5] arm64: dts: qrb5165-rb5: declare tri-led user leds Dmitry Baryshkov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).