* [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* 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
* [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 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