public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* (no subject)
@ 2016-07-19 13:51 Neil Armstrong
  2016-07-19 13:51 ` [PATCH v3 1/4] mfd: pm8921: Add support for pm8018 Neil Armstrong
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Neil Armstrong @ 2016-07-19 13:51 UTC (permalink / raw)
  To: andy.gross, david.brown, lee.jones, lgirdwood, broonie, a.zummo,
	alexandre.belloni
  Cc: Neil Armstrong, linux-input, linux-kernel, linux-arm-msm,
	linux-soc, rtc-linux

Subject: [PATCH v3 0/4] Add support for the Qualcomm PM8018 PMIC

In order to support the Qualcomm MDM9615 in the Sierra Wireless WP8548
Modules, add the PM8018 PMIC support into MFD, Regulator, RTC and input.

This patchset is part of a global SoC + Module + Board support for the
Sierra Wireless mangOH Board support with the WP8548 module.

Patch "mfd: qcom-rpm: Add support for pm8018 RPM Regulator" depends on :
 - "fix offset error for msm8660" at http://lkml.kernel.org/r/1465897725-16213-1-git-send-email-linus.walleij@linaro.org
 - "parametrize also ack selector size" at http://lkml.kernel.org/r/1466576837-21995-1-git-send-email-linus.walleij@linaro.org

Changes since v2 at http://lkml.kernel.org/r/1466759887-25394-1-git-send-email-narmstrong@baylibre.com :
 - Dropped pwrkey changes

Changes since v1 at http://lkml.kernel.org/r/1466158929-19524-1-git-send-email-narmstrong@baylibre.com :
 - Rebase mfd/qcom_rpm.c on top of Linus "fix offset error for msm8660" and "parametrize also ack selector size" patches
 - Rename QCOM_RPM_NCP in to QCOM_RPM_PM8018_NCP
 - Rebased qcom-rpm.h PM8018 defines numbers without a gap
 - Dropped regulator corner

Neil Armstrong (4):
  mfd: pm8921: Add support for pm8018
  rtc: rtc-pm8xxx: Add support for pm8018 rtc
  mfd: qcom-rpm: Add support for pm8018 RPM Regulator
  regulator: qcom_rpm-regulator: Add support for pm8018 rpm regulator

 .../devicetree/bindings/mfd/qcom-pm8xxx.txt        |   1 +
 Documentation/devicetree/bindings/mfd/qcom-rpm.txt |  15 ++++
 drivers/mfd/pm8921-core.c                          |   1 +
 drivers/mfd/qcom_rpm.c                             |  51 +++++++++++
 drivers/regulator/qcom_rpm-regulator.c             | 100 +++++++++++++++++++++
 drivers/rtc/rtc-pm8xxx.c                           |  11 +++
 include/dt-bindings/mfd/qcom-rpm.h                 |  22 +++++
 7 files changed, 201 insertions(+)

-- 
1.9.1

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

* [PATCH v3 1/4] mfd: pm8921: Add support for pm8018
  2016-07-19 13:51 Neil Armstrong
@ 2016-07-19 13:51 ` Neil Armstrong
  2016-07-19 13:51 ` [PATCH v3 2/4] rtc: rtc-pm8xxx: Add support for pm8018 rtc Neil Armstrong
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Neil Armstrong @ 2016-07-19 13:51 UTC (permalink / raw)
  To: andy.gross, david.brown, lee.jones, lgirdwood, broonie, a.zummo,
	alexandre.belloni
  Cc: Neil Armstrong, linux-input, linux-kernel, linux-arm-msm,
	linux-soc, rtc-linux

In order to support the Qualcomm MDM9615 PMIC, add support for the
pm8018 in pm8921 mfd driver.

Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
 drivers/mfd/pm8921-core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/mfd/pm8921-core.c b/drivers/mfd/pm8921-core.c
index 1b7ec08..0e3a2ea 100644
--- a/drivers/mfd/pm8921-core.c
+++ b/drivers/mfd/pm8921-core.c
@@ -309,6 +309,7 @@ static const struct regmap_config ssbi_regmap_config = {
 };
 
 static const struct of_device_id pm8921_id_table[] = {
+	{ .compatible = "qcom,pm8018", },
 	{ .compatible = "qcom,pm8058", },
 	{ .compatible = "qcom,pm8921", },
 	{ }
-- 
1.9.1

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

* [PATCH v3 2/4] rtc: rtc-pm8xxx: Add support for pm8018 rtc
  2016-07-19 13:51 Neil Armstrong
  2016-07-19 13:51 ` [PATCH v3 1/4] mfd: pm8921: Add support for pm8018 Neil Armstrong
@ 2016-07-19 13:51 ` Neil Armstrong
  2016-08-04 21:58   ` Stephen Boyd
  2016-07-19 13:51 ` [PATCH v3 3/4] mfd: qcom-rpm: Add support for pm8018 RPM Regulator Neil Armstrong
  2016-07-19 13:51 ` [PATCH v3 4/4] regulator: qcom_rpm-regulator: Add support for pm8018 rpm regulator Neil Armstrong
  3 siblings, 1 reply; 8+ messages in thread
From: Neil Armstrong @ 2016-07-19 13:51 UTC (permalink / raw)
  To: andy.gross, david.brown, lee.jones, lgirdwood, broonie, a.zummo,
	alexandre.belloni
  Cc: Neil Armstrong, linux-input, linux-kernel, linux-arm-msm,
	linux-soc, rtc-linux

In order to support RTC on Qualcomm MDM9615 SoC, add support for
the pm8018 rtc in rtc-pm8xxx driver.

Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
 Documentation/devicetree/bindings/mfd/qcom-pm8xxx.txt |  1 +
 drivers/rtc/rtc-pm8xxx.c                              | 11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/Documentation/devicetree/bindings/mfd/qcom-pm8xxx.txt b/Documentation/devicetree/bindings/mfd/qcom-pm8xxx.txt
index f24f334..37a088f 100644
--- a/Documentation/devicetree/bindings/mfd/qcom-pm8xxx.txt
+++ b/Documentation/devicetree/bindings/mfd/qcom-pm8xxx.txt
@@ -62,6 +62,7 @@ The below bindings specify the set of valid subnodes.
 		    "qcom,pm8058-rtc"
 		    "qcom,pm8921-rtc"
 		    "qcom,pm8941-rtc"
+		    "qcom,pm8018-rtc"
 
 - reg:
 	Usage: required
diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c
index 795fcbd..976f5f6 100644
--- a/drivers/rtc/rtc-pm8xxx.c
+++ b/drivers/rtc/rtc-pm8xxx.c
@@ -393,6 +393,16 @@ static int pm8xxx_rtc_enable(struct pm8xxx_rtc *rtc_dd)
 	return 0;
 }
 
+static const struct pm8xxx_rtc_regs pm8018_regs = {
+	.ctrl		= 0x11d,
+	.write		= 0x11f,
+	.read		= 0x123,
+	.alarm_rw	= 0x127,
+	.alarm_ctrl	= 0x11d,
+	.alarm_ctrl2	= 0x11e,
+	.alarm_en	= BIT(1),
+};
+
 static const struct pm8xxx_rtc_regs pm8921_regs = {
 	.ctrl		= 0x11d,
 	.write		= 0x11f,
@@ -428,6 +438,7 @@ static const struct pm8xxx_rtc_regs pm8941_regs = {
  */
 static const struct of_device_id pm8xxx_id_table[] = {
 	{ .compatible = "qcom,pm8921-rtc", .data = &pm8921_regs },
+	{ .compatible = "qcom,pm8018-rtc", .data = &pm8018_regs },
 	{ .compatible = "qcom,pm8058-rtc", .data = &pm8058_regs },
 	{ .compatible = "qcom,pm8941-rtc", .data = &pm8941_regs },
 	{ },
-- 
1.9.1

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

* [PATCH v3 3/4] mfd: qcom-rpm: Add support for pm8018 RPM Regulator
  2016-07-19 13:51 Neil Armstrong
  2016-07-19 13:51 ` [PATCH v3 1/4] mfd: pm8921: Add support for pm8018 Neil Armstrong
  2016-07-19 13:51 ` [PATCH v3 2/4] rtc: rtc-pm8xxx: Add support for pm8018 rtc Neil Armstrong
@ 2016-07-19 13:51 ` Neil Armstrong
  2016-07-19 13:51 ` [PATCH v3 4/4] regulator: qcom_rpm-regulator: Add support for pm8018 rpm regulator Neil Armstrong
  3 siblings, 0 replies; 8+ messages in thread
From: Neil Armstrong @ 2016-07-19 13:51 UTC (permalink / raw)
  To: andy.gross, david.brown, lee.jones, lgirdwood, broonie, a.zummo,
	alexandre.belloni
  Cc: Neil Armstrong, linux-input, linux-kernel, linux-arm-msm,
	linux-soc, rtc-linux

In order to support the Qualcomm MDM9615 SoC, add support for the
RPM regulator entries in the qcom-rpm driver.

Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Acked-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
 Documentation/devicetree/bindings/mfd/qcom-rpm.txt |  1 +
 drivers/mfd/qcom_rpm.c                             | 51 ++++++++++++++++++++++
 include/dt-bindings/mfd/qcom-rpm.h                 | 22 ++++++++++
 3 files changed, 74 insertions(+)

diff --git a/Documentation/devicetree/bindings/mfd/qcom-rpm.txt b/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
index b98b291..72d68d4 100644
--- a/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
+++ b/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
@@ -13,6 +13,7 @@ frequencies.
 		    "qcom,rpm-msm8660"
 		    "qcom,rpm-msm8960"
 		    "qcom,rpm-ipq8064"
+		    "qcom,rpm-mdm9615"
 
 - reg:
 	Usage: required
diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
index 880d469..c309ebe 100644
--- a/drivers/mfd/qcom_rpm.c
+++ b/drivers/mfd/qcom_rpm.c
@@ -390,11 +390,62 @@ static const struct qcom_rpm_data ipq806x_template = {
 	.ack_sel_size = 7,
 };
 
+static const struct qcom_rpm_resource mdm9615_rpm_resource_table[] = {
+	[QCOM_RPM_CXO_CLK] =			{ 25, 9, 5, 1 },
+	[QCOM_RPM_SYS_FABRIC_CLK] =		{ 26, 10, 9, 1 },
+	[QCOM_RPM_DAYTONA_FABRIC_CLK] =		{ 27, 11, 11, 1 },
+	[QCOM_RPM_SFPB_CLK] =			{ 28, 12, 12, 1 },
+	[QCOM_RPM_CFPB_CLK] =			{ 29, 13, 13, 1 },
+	[QCOM_RPM_EBI1_CLK] =			{ 30, 14, 16, 1 },
+	[QCOM_RPM_APPS_FABRIC_HALT] =		{ 31, 15, 22, 2 },
+	[QCOM_RPM_APPS_FABRIC_MODE] =		{ 33, 16, 23, 3 },
+	[QCOM_RPM_APPS_FABRIC_IOCTL] =		{ 36, 17, 24, 1 },
+	[QCOM_RPM_APPS_FABRIC_ARB] =		{ 37, 18, 25, 27 },
+	[QCOM_RPM_PM8018_SMPS1] =		{ 64, 19, 30, 2 },
+	[QCOM_RPM_PM8018_SMPS2] =		{ 66, 21, 31, 2 },
+	[QCOM_RPM_PM8018_SMPS3] =		{ 68, 23, 32, 2 },
+	[QCOM_RPM_PM8018_SMPS4] =		{ 70, 25, 33, 2 },
+	[QCOM_RPM_PM8018_SMPS5] =		{ 72, 27, 34, 2 },
+	[QCOM_RPM_PM8018_LDO1] =		{ 74, 29, 35, 2 },
+	[QCOM_RPM_PM8018_LDO2] =		{ 76, 31, 36, 2 },
+	[QCOM_RPM_PM8018_LDO3] =		{ 78, 33, 37, 2 },
+	[QCOM_RPM_PM8018_LDO4] =		{ 80, 35, 38, 2 },
+	[QCOM_RPM_PM8018_LDO5] =		{ 82, 37, 39, 2 },
+	[QCOM_RPM_PM8018_LDO6] =		{ 84, 39, 40, 2 },
+	[QCOM_RPM_PM8018_LDO7] =		{ 86, 41, 41, 2 },
+	[QCOM_RPM_PM8018_LDO8] =		{ 88, 43, 42, 2 },
+	[QCOM_RPM_PM8018_LDO9] =		{ 90, 45, 43, 2 },
+	[QCOM_RPM_PM8018_LDO10] =		{ 92, 47, 44, 2 },
+	[QCOM_RPM_PM8018_LDO11] =		{ 94, 49, 45, 2 },
+	[QCOM_RPM_PM8018_LDO12] =		{ 96, 51, 46, 2 },
+	[QCOM_RPM_PM8018_LDO13] =		{ 98, 53, 47, 2 },
+	[QCOM_RPM_PM8018_LDO14] =		{ 100, 55, 48, 2 },
+	[QCOM_RPM_PM8018_LVS1] =		{ 102, 57, 49, 1 },
+	[QCOM_RPM_PM8018_NCP] =			{ 103, 58, 80, 2 },
+	[QCOM_RPM_CXO_BUFFERS] =		{ 105, 60, 81, 1 },
+	[QCOM_RPM_USB_OTG_SWITCH] =		{ 106, 61, 82, 1 },
+	[QCOM_RPM_HDMI_SWITCH] =		{ 107, 62, 83, 1 },
+	[QCOM_RPM_VOLTAGE_CORNER] =		{ 109, 64, 87, 1 },
+};
+
+static const struct qcom_rpm_data mdm9615_template = {
+	.version = 3,
+	.resource_table = mdm9615_rpm_resource_table,
+	.n_resources = ARRAY_SIZE(mdm9615_rpm_resource_table),
+	.req_ctx_off = 3,
+	.req_sel_off = 11,
+	.ack_ctx_off = 15,
+	.ack_sel_off = 23,
+	.req_sel_size = 4,
+	.ack_sel_size = 7,
+};
+
 static const struct of_device_id qcom_rpm_of_match[] = {
 	{ .compatible = "qcom,rpm-apq8064", .data = &apq8064_template },
 	{ .compatible = "qcom,rpm-msm8660", .data = &msm8660_template },
 	{ .compatible = "qcom,rpm-msm8960", .data = &msm8960_template },
 	{ .compatible = "qcom,rpm-ipq8064", .data = &ipq806x_template },
+	{ .compatible = "qcom,rpm-mdm9615", .data = &mdm9615_template },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, qcom_rpm_of_match);
diff --git a/include/dt-bindings/mfd/qcom-rpm.h b/include/dt-bindings/mfd/qcom-rpm.h
index 13a9d4b..54aef5e 100644
--- a/include/dt-bindings/mfd/qcom-rpm.h
+++ b/include/dt-bindings/mfd/qcom-rpm.h
@@ -147,6 +147,28 @@
 #define QCOM_RPM_SMB208_S1b			137
 #define QCOM_RPM_SMB208_S2a			138
 #define QCOM_RPM_SMB208_S2b			139
+#define QCOM_RPM_PM8018_SMPS1			140
+#define QCOM_RPM_PM8018_SMPS2			141
+#define QCOM_RPM_PM8018_SMPS3			142
+#define QCOM_RPM_PM8018_SMPS4			143
+#define QCOM_RPM_PM8018_SMPS5			144
+#define QCOM_RPM_PM8018_LDO1			145
+#define QCOM_RPM_PM8018_LDO2			146
+#define QCOM_RPM_PM8018_LDO3			147
+#define QCOM_RPM_PM8018_LDO4			148
+#define QCOM_RPM_PM8018_LDO5			149
+#define QCOM_RPM_PM8018_LDO6			150
+#define QCOM_RPM_PM8018_LDO7			151
+#define QCOM_RPM_PM8018_LDO8			152
+#define QCOM_RPM_PM8018_LDO9			153
+#define QCOM_RPM_PM8018_LDO10			154
+#define QCOM_RPM_PM8018_LDO11			155
+#define QCOM_RPM_PM8018_LDO12			156
+#define QCOM_RPM_PM8018_LDO13			157
+#define QCOM_RPM_PM8018_LDO14			158
+#define QCOM_RPM_PM8018_LVS1			159
+#define QCOM_RPM_PM8018_NCP			160
+#define QCOM_RPM_VOLTAGE_CORNER			161
 
 /*
  * Constants used to select force mode for regulators.
-- 
1.9.1

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

* [PATCH v3 4/4] regulator: qcom_rpm-regulator: Add support for pm8018 rpm regulator
  2016-07-19 13:51 Neil Armstrong
                   ` (2 preceding siblings ...)
  2016-07-19 13:51 ` [PATCH v3 3/4] mfd: qcom-rpm: Add support for pm8018 RPM Regulator Neil Armstrong
@ 2016-07-19 13:51 ` Neil Armstrong
  2016-08-04 22:04   ` Stephen Boyd
  3 siblings, 1 reply; 8+ messages in thread
From: Neil Armstrong @ 2016-07-19 13:51 UTC (permalink / raw)
  To: andy.gross, david.brown, lee.jones, lgirdwood, broonie, a.zummo,
	alexandre.belloni
  Cc: Neil Armstrong, linux-input, linux-kernel, linux-arm-msm,
	linux-soc, rtc-linux

In order to support eh Qualcomm MDM9615 SoC, add support for the
PM8018 RPM regulator in the qcom_rpm-regulator driver.

Acked-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
 Documentation/devicetree/bindings/mfd/qcom-rpm.txt |  14 +++
 drivers/regulator/qcom_rpm-regulator.c             | 100 +++++++++++++++++++++
 2 files changed, 114 insertions(+)

diff --git a/Documentation/devicetree/bindings/mfd/qcom-rpm.txt b/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
index 72d68d4..485bc59 100644
--- a/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
+++ b/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
@@ -60,6 +60,7 @@ Regulator nodes are identified by their compatible:
 		    "qcom,rpm-pm8058-regulators"
 		    "qcom,rpm-pm8901-regulators"
 		    "qcom,rpm-pm8921-regulators"
+		    "qcom,rpm-pm8018-regulators"
 
 - vdd_l0_l1_lvs-supply:
 - vdd_l2_l11_l12-supply:
@@ -138,6 +139,15 @@ Regulator nodes are identified by their compatible:
 	Definition: reference to regulator supplying the input pin, as
 		    described in the data sheet
 
+- vin_lvs1-supply:
+- vdd_l7-supply:
+- vdd_l8-supply:
+- vdd_l9_l10_l11_l12-supply:
+	Usage: optional (pm8018 only)
+	Value type: <phandle>
+	Definition: reference to regulator supplying the input pin, as
+		    described in the data sheet
+
 The regulator node houses sub-nodes for each regulator within the device. Each
 sub-node is identified using the node's name, with valid values listed for each
 of the pmics below.
@@ -157,6 +167,10 @@ pm8921:
 	l29, lvs1, lvs2, lvs3, lvs4, lvs5, lvs6, lvs7, usb-switch, hdmi-switch,
 	ncp
 
+pm8018:
+	s1, s2, s3, s4, s5, , l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11,
+	l12, l14, lvs1
+
 The content of each sub-node is defined by the standard binding for regulators -
 see regulator.txt - with additional custom properties described below:
 
diff --git a/drivers/regulator/qcom_rpm-regulator.c b/drivers/regulator/qcom_rpm-regulator.c
index e254272..0734a5f 100644
--- a/drivers/regulator/qcom_rpm-regulator.c
+++ b/drivers/regulator/qcom_rpm-regulator.c
@@ -70,6 +70,40 @@ struct qcom_rpm_reg {
 	bool supports_force_mode_bypass;
 };
 
+static struct rpm_reg_parts rpm8018_ldo_parts = {
+	.request_len	= 2,
+	.uV		= { 0, 0x007FFFFF,  0},
+	.pd		= { 0, 0x00800000, 23},
+	.pc		= { 0, 0x0F000000, 24},
+	.pf		= { 0, 0xF0000000, 28},
+	.ip		= { 1, 0x000003FF,  0},
+	.ia		= { 1, 0x000FFC00, 10},
+	.fm		= { 1, 0x00700000, 20},
+};
+
+static struct rpm_reg_parts rpm8018_smps_parts = {
+	.request_len	= 2,
+	.uV		= {  0, 0x007FFFFF,  0},
+	.pd		= {  0, 0x00800000, 23},
+	.pc		= {  0, 0x0F000000, 24},
+	.pf		= {  0, 0xF0000000, 28},
+	.ip		= {  1, 0x000003FF,  0},
+	.ia		= {  1, 0x000FFC00, 10},
+	.fm		= {  1, 0x00700000, 20},
+	.pm		= {  1, 0x00800000, 23},
+	.freq		= {  1, 0x1F000000, 24},
+	.freq_clk_src	= {  1, 0x60000000, 29},
+};
+
+static struct rpm_reg_parts rpm8018_switch_parts = {
+	.request_len	= 1,
+	.enable_state	= {  0, 0x00000001,  0},
+	.pd		= {  0, 0x00000002,  1},
+	.pc		= {  0, 0x0000003C,  2},
+	.pf		= {  0, 0x000003C0,  6},
+	.hpm		= {  0, 0x00000C00, 10},
+};
+
 static const struct rpm_reg_parts rpm8660_ldo_parts = {
 	.request_len    = 2,
 	.mV             = { 0, 0x00000FFF,  0 },
@@ -448,6 +482,44 @@ static struct regulator_ops switch_ops = {
 };
 
 /*
+ * PM8018 regulators
+ */
+static const struct qcom_rpm_reg pm8018_pldo = {
+	.desc.linear_ranges = pldo_ranges,
+	.desc.n_linear_ranges = ARRAY_SIZE(pldo_ranges),
+	.desc.n_voltages = 161,
+	.desc.ops = &uV_ops,
+	.parts = &rpm8018_ldo_parts,
+	.supports_force_mode_auto = false,
+	.supports_force_mode_bypass = false,
+};
+
+static const struct qcom_rpm_reg pm8018_nldo = {
+	.desc.linear_ranges = nldo_ranges,
+	.desc.n_linear_ranges = ARRAY_SIZE(nldo_ranges),
+	.desc.n_voltages = 64,
+	.desc.ops = &uV_ops,
+	.parts = &rpm8018_ldo_parts,
+	.supports_force_mode_auto = false,
+	.supports_force_mode_bypass = false,
+};
+
+static const struct qcom_rpm_reg pm8018_smps = {
+	.desc.linear_ranges = smps_ranges,
+	.desc.n_linear_ranges = ARRAY_SIZE(smps_ranges),
+	.desc.n_voltages = 154,
+	.desc.ops = &uV_ops,
+	.parts = &rpm8018_smps_parts,
+	.supports_force_mode_auto = false,
+	.supports_force_mode_bypass = false,
+};
+
+static const struct qcom_rpm_reg pm8018_switch = {
+	.desc.ops = &switch_ops,
+	.parts = &rpm8018_switch_parts,
+};
+
+/*
  * PM8058 regulators
  */
 static const struct qcom_rpm_reg pm8058_pldo = {
@@ -755,6 +827,32 @@ struct rpm_regulator_data {
 	const char *supply;
 };
 
+static const struct rpm_regulator_data rpm_pm8018_regulators[] = {
+	{ "s1",  QCOM_RPM_PM8018_SMPS1, &pm8018_smps, "vdd_s1" },
+	{ "s2",  QCOM_RPM_PM8018_SMPS2, &pm8018_smps, "vdd_s2" },
+	{ "s3",  QCOM_RPM_PM8018_SMPS3, &pm8018_smps, "vdd_s3" },
+	{ "s4",  QCOM_RPM_PM8018_SMPS4, &pm8018_smps, "vdd_s4" },
+	{ "s5",  QCOM_RPM_PM8018_SMPS5, &pm8018_smps, "vdd_s5" },
+
+	{ "l2",  QCOM_RPM_PM8018_LDO2,  &pm8018_pldo, "vdd_l2" },
+	{ "l3",  QCOM_RPM_PM8018_LDO3,  &pm8018_pldo, "vdd_l3" },
+	{ "l4",  QCOM_RPM_PM8018_LDO4,  &pm8018_pldo, "vdd_l4" },
+	{ "l5",  QCOM_RPM_PM8018_LDO5,  &pm8018_pldo, "vdd_l5" },
+	{ "l6",  QCOM_RPM_PM8018_LDO6,  &pm8018_pldo, "vdd_l7" },
+	{ "l7",  QCOM_RPM_PM8018_LDO7,  &pm8018_pldo, "vdd_l7" },
+	{ "l8",  QCOM_RPM_PM8018_LDO8,  &pm8018_nldo, "vdd_l8" },
+	{ "l9",  QCOM_RPM_PM8018_LDO9,  &pm8921_nldo1200,
+						      "vdd_l9_l10_l11_l12" },
+	{ "l10", QCOM_RPM_PM8018_LDO10, &pm8018_nldo, "vdd_l9_l10_l11_l12" },
+	{ "l11", QCOM_RPM_PM8018_LDO11, &pm8018_nldo, "vdd_l9_l10_l11_l12" },
+	{ "l12", QCOM_RPM_PM8018_LDO12, &pm8018_nldo, "vdd_l9_l10_l11_l12" },
+	{ "l14", QCOM_RPM_PM8018_LDO14, &pm8018_pldo, "vdd_l14" },
+
+	{ "lvs1", QCOM_RPM_PM8018_LVS1, &pm8018_switch, "lvs1_in" },
+
+	{ }
+};
+
 static const struct rpm_regulator_data rpm_pm8058_regulators[] = {
 	{ "l0",   QCOM_RPM_PM8058_LDO0,   &pm8058_nldo, "vdd_l0_l1_lvs"	},
 	{ "l1",   QCOM_RPM_PM8058_LDO1,   &pm8058_nldo, "vdd_l0_l1_lvs" },
@@ -870,6 +968,8 @@ static const struct rpm_regulator_data rpm_pm8921_regulators[] = {
 };
 
 static const struct of_device_id rpm_of_match[] = {
+	{ .compatible = "qcom,rpm-pm8018-regulators",
+		.data = &rpm_pm8018_regulators },
 	{ .compatible = "qcom,rpm-pm8058-regulators", .data = &rpm_pm8058_regulators },
 	{ .compatible = "qcom,rpm-pm8901-regulators", .data = &rpm_pm8901_regulators },
 	{ .compatible = "qcom,rpm-pm8921-regulators", .data = &rpm_pm8921_regulators },
-- 
1.9.1

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

* Re: [PATCH v3 2/4] rtc: rtc-pm8xxx: Add support for pm8018 rtc
  2016-07-19 13:51 ` [PATCH v3 2/4] rtc: rtc-pm8xxx: Add support for pm8018 rtc Neil Armstrong
@ 2016-08-04 21:58   ` Stephen Boyd
  0 siblings, 0 replies; 8+ messages in thread
From: Stephen Boyd @ 2016-08-04 21:58 UTC (permalink / raw)
  To: Neil Armstrong, andy.gross, david.brown, lee.jones, lgirdwood,
	broonie, a.zummo, alexandre.belloni
  Cc: linux-input, linux-kernel, linux-arm-msm, linux-soc, rtc-linux

On 07/19/2016 06:51 AM, Neil Armstrong wrote:
> diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c
> index 795fcbd..976f5f6 100644
> --- a/drivers/rtc/rtc-pm8xxx.c
> +++ b/drivers/rtc/rtc-pm8xxx.c
> @@ -393,6 +393,16 @@ static int pm8xxx_rtc_enable(struct pm8xxx_rtc *rtc_dd)
>  	return 0;
>  }
>  
> +static const struct pm8xxx_rtc_regs pm8018_regs = {
> +	.ctrl		= 0x11d,
> +	.write		= 0x11f,
> +	.read		= 0x123,
> +	.alarm_rw	= 0x127,
> +	.alarm_ctrl	= 0x11d,
> +	.alarm_ctrl2	= 0x11e,
> +	.alarm_en	= BIT(1),
> +};

This is the same as pm8921_regs, so why do we need to duplicate it?
Can't we point the new compatible at the same data?

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

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

* Re: [PATCH v3 4/4] regulator: qcom_rpm-regulator: Add support for pm8018 rpm regulator
  2016-07-19 13:51 ` [PATCH v3 4/4] regulator: qcom_rpm-regulator: Add support for pm8018 rpm regulator Neil Armstrong
@ 2016-08-04 22:04   ` Stephen Boyd
  2016-08-11 13:05     ` Neil Armstrong
  0 siblings, 1 reply; 8+ messages in thread
From: Stephen Boyd @ 2016-08-04 22:04 UTC (permalink / raw)
  To: Neil Armstrong, andy.gross, david.brown, lee.jones, lgirdwood,
	broonie, a.zummo, alexandre.belloni
  Cc: linux-input, linux-kernel, linux-arm-msm, linux-soc, rtc-linux

On 07/19/2016 06:51 AM, Neil Armstrong wrote:
> In order to support eh Qualcomm MDM9615 SoC, add support for the

s/eh/the/

> PM8018 RPM regulator in the qcom_rpm-regulator driver.
>
> Acked-by: Mark Brown <broonie@kernel.org>
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
>
> diff --git a/drivers/regulator/qcom_rpm-regulator.c b/drivers/regulator/qcom_rpm-regulator.c
> index e254272..0734a5f 100644
> --- a/drivers/regulator/qcom_rpm-regulator.c
> +++ b/drivers/regulator/qcom_rpm-regulator.c
> @@ -70,6 +70,40 @@ struct qcom_rpm_reg {
>  	bool supports_force_mode_bypass;
>  };
>  
> +static struct rpm_reg_parts rpm8018_ldo_parts = {
> +	.request_len	= 2,
> +	.uV		= { 0, 0x007FFFFF,  0},
> +	.pd		= { 0, 0x00800000, 23},
> +	.pc		= { 0, 0x0F000000, 24},
> +	.pf		= { 0, 0xF0000000, 28},
> +	.ip		= { 1, 0x000003FF,  0},
> +	.ia		= { 1, 0x000FFC00, 10},
> +	.fm		= { 1, 0x00700000, 20},
> +};
> +
> +static struct rpm_reg_parts rpm8018_smps_parts = {
> +	.request_len	= 2,
> +	.uV		= {  0, 0x007FFFFF,  0},
> +	.pd		= {  0, 0x00800000, 23},
> +	.pc		= {  0, 0x0F000000, 24},
> +	.pf		= {  0, 0xF0000000, 28},
> +	.ip		= {  1, 0x000003FF,  0},
> +	.ia		= {  1, 0x000FFC00, 10},
> +	.fm		= {  1, 0x00700000, 20},
> +	.pm		= {  1, 0x00800000, 23},
> +	.freq		= {  1, 0x1F000000, 24},
> +	.freq_clk_src	= {  1, 0x60000000, 29},
> +};
> +
> +static struct rpm_reg_parts rpm8018_switch_parts = {
> +	.request_len	= 1,
> +	.enable_state	= {  0, 0x00000001,  0},
> +	.pd		= {  0, 0x00000002,  1},
> +	.pc		= {  0, 0x0000003C,  2},
> +	.pf		= {  0, 0x000003C0,  6},
> +	.hpm		= {  0, 0x00000C00, 10},
> +};
> +

These are all the same as the rpm8960 ones, so why don't we reuse those
structures?

>  static const struct rpm_reg_parts rpm8660_ldo_parts = {
>  	.request_len    = 2,
>  	.mV             = { 0, 0x00000FFF,  0 },
> @@ -448,6 +482,44 @@ static struct regulator_ops switch_ops = {
>  };
>  
>  /*
> + * PM8018 regulators
> + */
> +static const struct qcom_rpm_reg pm8018_pldo = {
> +	.desc.linear_ranges = pldo_ranges,
> +	.desc.n_linear_ranges = ARRAY_SIZE(pldo_ranges),
> +	.desc.n_voltages = 161,
> +	.desc.ops = &uV_ops,
> +	.parts = &rpm8018_ldo_parts,
> +	.supports_force_mode_auto = false,
> +	.supports_force_mode_bypass = false,
> +};
> +
> +static const struct qcom_rpm_reg pm8018_nldo = {
> +	.desc.linear_ranges = nldo_ranges,
> +	.desc.n_linear_ranges = ARRAY_SIZE(nldo_ranges),
> +	.desc.n_voltages = 64,
> +	.desc.ops = &uV_ops,
> +	.parts = &rpm8018_ldo_parts,
> +	.supports_force_mode_auto = false,
> +	.supports_force_mode_bypass = false,
> +};
> +
> +static const struct qcom_rpm_reg pm8018_smps = {
> +	.desc.linear_ranges = smps_ranges,
> +	.desc.n_linear_ranges = ARRAY_SIZE(smps_ranges),
> +	.desc.n_voltages = 154,
> +	.desc.ops = &uV_ops,
> +	.parts = &rpm8018_smps_parts,
> +	.supports_force_mode_auto = false,
> +	.supports_force_mode_bypass = false,
> +};
> +
> +static const struct qcom_rpm_reg pm8018_switch = {
> +	.desc.ops = &switch_ops,
> +	.parts = &rpm8018_switch_parts,
> +};
> +

These are all the same as the pm8921 ones too? So just use those instead?

We should probably rethink this design and have these structures based
on PMIC derivatives instead of SoCs because things are quite similar
across many PMICs.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

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

* Re: [PATCH v3 4/4] regulator: qcom_rpm-regulator: Add support for pm8018 rpm regulator
  2016-08-04 22:04   ` Stephen Boyd
@ 2016-08-11 13:05     ` Neil Armstrong
  0 siblings, 0 replies; 8+ messages in thread
From: Neil Armstrong @ 2016-08-11 13:05 UTC (permalink / raw)
  To: Stephen Boyd, andy.gross, david.brown, lee.jones, lgirdwood,
	broonie, a.zummo, alexandre.belloni
  Cc: linux-input, linux-kernel, linux-arm-msm, linux-soc, rtc-linux

Hi Stephen,
On 08/05/2016 12:04 AM, Stephen Boyd wrote:
> On 07/19/2016 06:51 AM, Neil Armstrong wrote:
>> In order to support eh Qualcomm MDM9615 SoC, add support for the
> 
> s/eh/the/
> 
>> PM8018 RPM regulator in the qcom_rpm-regulator driver.
>>
>> Acked-by: Mark Brown <broonie@kernel.org>
>> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
>>
>> diff --git a/drivers/regulator/qcom_rpm-regulator.c b/drivers/regulator/qcom_rpm-regulator.c
>> index e254272..0734a5f 100644
>> --- a/drivers/regulator/qcom_rpm-regulator.c
>> +++ b/drivers/regulator/qcom_rpm-regulator.c
>> @@ -70,6 +70,40 @@ struct qcom_rpm_reg {
>>  	bool supports_force_mode_bypass;
>>  };
>>  
>> +static struct rpm_reg_parts rpm8018_ldo_parts = {
>> +	.request_len	= 2,
>> +	.uV		= { 0, 0x007FFFFF,  0},
>> +	.pd		= { 0, 0x00800000, 23},
>> +	.pc		= { 0, 0x0F000000, 24},
>> +	.pf		= { 0, 0xF0000000, 28},
>> +	.ip		= { 1, 0x000003FF,  0},
>> +	.ia		= { 1, 0x000FFC00, 10},
>> +	.fm		= { 1, 0x00700000, 20},
>> +};
>> +
>> +static struct rpm_reg_parts rpm8018_smps_parts = {
>> +	.request_len	= 2,
>> +	.uV		= {  0, 0x007FFFFF,  0},
>> +	.pd		= {  0, 0x00800000, 23},
>> +	.pc		= {  0, 0x0F000000, 24},
>> +	.pf		= {  0, 0xF0000000, 28},
>> +	.ip		= {  1, 0x000003FF,  0},
>> +	.ia		= {  1, 0x000FFC00, 10},
>> +	.fm		= {  1, 0x00700000, 20},
>> +	.pm		= {  1, 0x00800000, 23},
>> +	.freq		= {  1, 0x1F000000, 24},
>> +	.freq_clk_src	= {  1, 0x60000000, 29},
>> +};
>> +
>> +static struct rpm_reg_parts rpm8018_switch_parts = {
>> +	.request_len	= 1,
>> +	.enable_state	= {  0, 0x00000001,  0},
>> +	.pd		= {  0, 0x00000002,  1},
>> +	.pc		= {  0, 0x0000003C,  2},
>> +	.pf		= {  0, 0x000003C0,  6},
>> +	.hpm		= {  0, 0x00000C00, 10},
>> +};
>> +
> 
> These are all the same as the rpm8960 ones, so why don't we reuse those
> structures?

Indeed, I will reuse them.

> 
>>  static const struct rpm_reg_parts rpm8660_ldo_parts = {
>>  	.request_len    = 2,
>>  	.mV             = { 0, 0x00000FFF,  0 },
>> @@ -448,6 +482,44 @@ static struct regulator_ops switch_ops = {
>>  };
>>  
>>  /*
>> + * PM8018 regulators
>> + */
>> +static const struct qcom_rpm_reg pm8018_pldo = {
>> +	.desc.linear_ranges = pldo_ranges,
>> +	.desc.n_linear_ranges = ARRAY_SIZE(pldo_ranges),
>> +	.desc.n_voltages = 161,
>> +	.desc.ops = &uV_ops,
>> +	.parts = &rpm8018_ldo_parts,
>> +	.supports_force_mode_auto = false,
>> +	.supports_force_mode_bypass = false,
>> +};
>> +
>> +static const struct qcom_rpm_reg pm8018_nldo = {
>> +	.desc.linear_ranges = nldo_ranges,
>> +	.desc.n_linear_ranges = ARRAY_SIZE(nldo_ranges),
>> +	.desc.n_voltages = 64,
>> +	.desc.ops = &uV_ops,
>> +	.parts = &rpm8018_ldo_parts,
>> +	.supports_force_mode_auto = false,
>> +	.supports_force_mode_bypass = false,
>> +};
>> +
>> +static const struct qcom_rpm_reg pm8018_smps = {
>> +	.desc.linear_ranges = smps_ranges,
>> +	.desc.n_linear_ranges = ARRAY_SIZE(smps_ranges),
>> +	.desc.n_voltages = 154,
>> +	.desc.ops = &uV_ops,
>> +	.parts = &rpm8018_smps_parts,
>> +	.supports_force_mode_auto = false,
>> +	.supports_force_mode_bypass = false,
>> +};
>> +
>> +static const struct qcom_rpm_reg pm8018_switch = {
>> +	.desc.ops = &switch_ops,
>> +	.parts = &rpm8018_switch_parts,
>> +};
>> +
> 
> These are all the same as the pm8921 ones too? So just use those instead?

They look but the supports_force_mode_bypass is set to "true" for pm8921.
These pm8018 structures are still needed.

> 
> We should probably rethink this design and have these structures based
> on PMIC derivatives instead of SoCs because things are quite similar
> across many PMICs.
> 
This would help to support the huge pmic family !

Neil

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

end of thread, other threads:[~2016-08-11 13:05 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-19 13:51 Neil Armstrong
2016-07-19 13:51 ` [PATCH v3 1/4] mfd: pm8921: Add support for pm8018 Neil Armstrong
2016-07-19 13:51 ` [PATCH v3 2/4] rtc: rtc-pm8xxx: Add support for pm8018 rtc Neil Armstrong
2016-08-04 21:58   ` Stephen Boyd
2016-07-19 13:51 ` [PATCH v3 3/4] mfd: qcom-rpm: Add support for pm8018 RPM Regulator Neil Armstrong
2016-07-19 13:51 ` [PATCH v3 4/4] regulator: qcom_rpm-regulator: Add support for pm8018 rpm regulator Neil Armstrong
2016-08-04 22:04   ` Stephen Boyd
2016-08-11 13:05     ` Neil Armstrong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox