diff mbox

[4/5] mfd: qcom-rpm: Add support for pm8018 RPM Regulator

Message ID 1466158929-19524-5-git-send-email-narmstrong@baylibre.com
State Not Applicable
Headers show

Commit Message

Neil Armstrong June 17, 2016, 10:22 a.m. UTC
In order to support the Qualcomm MDM9615 SoC, add support for the
RPM regulator entries in the qcom-rpm driver.

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
---
 Documentation/devicetree/bindings/mfd/qcom-rpm.txt |  1 +
 drivers/mfd/qcom_rpm.c                             | 45 ++++++++++++++++++++++
 include/dt-bindings/mfd/qcom-rpm.h                 | 23 +++++++++++
 3 files changed, 69 insertions(+)

Comments

Bjorn Andersson June 22, 2016, 5:23 a.m. UTC | #1
On Fri 17 Jun 03:22 PDT 2016, Neil Armstrong wrote:

[..]
> diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
[..]
> +
> +static const struct qcom_rpm_data mdm9615_template = {
> +	.version = 3,
> +	.resource_table = mdm9615_rpm_resource_table,
> +	.n_resources = ARRAY_SIZE(mdm9615_rpm_resource_table),
> +};

Please see:
https://patchwork.kernel.org/patch/9177159/

You should set the new .sel_size to 4 here, please either rebase ontop
of Linus patch or send an update after both are merged.

> +
>  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..db85912 100644
> --- a/include/dt-bindings/mfd/qcom-rpm.h
> +++ b/include/dt-bindings/mfd/qcom-rpm.h
> @@ -148,6 +148,29 @@
>  #define QCOM_RPM_SMB208_S2a			138
>  #define QCOM_RPM_SMB208_S2b			139
>  
> +#define QCOM_RPM_PM8018_SMPS1			200

These numbers are a logical identifier and as such you shouldn't skip
140-199.

> +#define QCOM_RPM_PM8018_SMPS2			201
> +#define QCOM_RPM_PM8018_SMPS3			202
> +#define QCOM_RPM_PM8018_SMPS4			203
> +#define QCOM_RPM_PM8018_SMPS5			204
> +#define QCOM_RPM_PM8018_LDO1			205
> +#define QCOM_RPM_PM8018_LDO2			206
> +#define QCOM_RPM_PM8018_LDO3			207
> +#define QCOM_RPM_PM8018_LDO4			208
> +#define QCOM_RPM_PM8018_LDO5			209
> +#define QCOM_RPM_PM8018_LDO6			210
> +#define QCOM_RPM_PM8018_LDO7			211
> +#define QCOM_RPM_PM8018_LDO8			212
> +#define QCOM_RPM_PM8018_LDO9			213
> +#define QCOM_RPM_PM8018_LDO10			214
> +#define QCOM_RPM_PM8018_LDO11			215
> +#define QCOM_RPM_PM8018_LDO12			216
> +#define QCOM_RPM_PM8018_LDO13			217
> +#define QCOM_RPM_PM8018_LDO14			218
> +#define QCOM_RPM_PM8018_LVS1			219
> +#define QCOM_RPM_NCP				220

We already have PM8921_NCP and PM8058_NCP, so better make this
QCOM_RPM_PM8018_NCP for consistency.

> +#define QCOM_RPM_VOLTAGE_CORNER			221
> +

Other then these details
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>

Regards,
Bjorn
Neil Armstrong June 22, 2016, 8:34 a.m. UTC | #2
On 06/22/2016 07:23 AM, Bjorn Andersson wrote:
> On Fri 17 Jun 03:22 PDT 2016, Neil Armstrong wrote:
> 
> [..]
>> diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
> [..]
>> +
>> +static const struct qcom_rpm_data mdm9615_template = {
>> +	.version = 3,
>> +	.resource_table = mdm9615_rpm_resource_table,
>> +	.n_resources = ARRAY_SIZE(mdm9615_rpm_resource_table),
>> +};
> 
> Please see:
> https://patchwork.kernel.org/patch/9177159/
> 
> You should set the new .sel_size to 4 here, please either rebase ontop
> of Linus patch or send an update after both are merged.
> 
>> +
>>  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..db85912 100644
>> --- a/include/dt-bindings/mfd/qcom-rpm.h
>> +++ b/include/dt-bindings/mfd/qcom-rpm.h
>> @@ -148,6 +148,29 @@
>>  #define QCOM_RPM_SMB208_S2a			138
>>  #define QCOM_RPM_SMB208_S2b			139
>>  
>> +#define QCOM_RPM_PM8018_SMPS1			200
> 
> These numbers are a logical identifier and as such you shouldn't skip
> 140-199.
> 
>> +#define QCOM_RPM_PM8018_SMPS2			201
>> +#define QCOM_RPM_PM8018_SMPS3			202
>> +#define QCOM_RPM_PM8018_SMPS4			203
>> +#define QCOM_RPM_PM8018_SMPS5			204
>> +#define QCOM_RPM_PM8018_LDO1			205
>> +#define QCOM_RPM_PM8018_LDO2			206
>> +#define QCOM_RPM_PM8018_LDO3			207
>> +#define QCOM_RPM_PM8018_LDO4			208
>> +#define QCOM_RPM_PM8018_LDO5			209
>> +#define QCOM_RPM_PM8018_LDO6			210
>> +#define QCOM_RPM_PM8018_LDO7			211
>> +#define QCOM_RPM_PM8018_LDO8			212
>> +#define QCOM_RPM_PM8018_LDO9			213
>> +#define QCOM_RPM_PM8018_LDO10			214
>> +#define QCOM_RPM_PM8018_LDO11			215
>> +#define QCOM_RPM_PM8018_LDO12			216
>> +#define QCOM_RPM_PM8018_LDO13			217
>> +#define QCOM_RPM_PM8018_LDO14			218
>> +#define QCOM_RPM_PM8018_LVS1			219
>> +#define QCOM_RPM_NCP				220
> 
> We already have PM8921_NCP and PM8058_NCP, so better make this
> QCOM_RPM_PM8018_NCP for consistency.
> 
>> +#define QCOM_RPM_VOLTAGE_CORNER			221
>> +
> 
> Other then these details
> Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> 
> Regards,
> Bjorn
> 
Thanks,

I rebased on Linus two patches ("fix offset error for msm8660" and "parametrize also ack selector size")

I suppose I should also drop the QCOM_RPM_VOLTAGE_CORNER rpm entry also ?

Neil
Bjorn Andersson June 22, 2016, 3:52 p.m. UTC | #3
On Wed 22 Jun 01:34 PDT 2016, Neil Armstrong wrote:

> On 06/22/2016 07:23 AM, Bjorn Andersson wrote:
> > On Fri 17 Jun 03:22 PDT 2016, Neil Armstrong wrote:
> > 
> > [..]
> >> diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
> > [..]
> >> +
> >> +static const struct qcom_rpm_data mdm9615_template = {
> >> +	.version = 3,
> >> +	.resource_table = mdm9615_rpm_resource_table,
> >> +	.n_resources = ARRAY_SIZE(mdm9615_rpm_resource_table),
> >> +};
> > 
> > Please see:
> > https://patchwork.kernel.org/patch/9177159/
> > 
> > You should set the new .sel_size to 4 here, please either rebase ontop
> > of Linus patch or send an update after both are merged.
> > 
> >> +
> >>  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..db85912 100644
> >> --- a/include/dt-bindings/mfd/qcom-rpm.h
> >> +++ b/include/dt-bindings/mfd/qcom-rpm.h
> >> @@ -148,6 +148,29 @@
> >>  #define QCOM_RPM_SMB208_S2a			138
> >>  #define QCOM_RPM_SMB208_S2b			139
> >>  
> >> +#define QCOM_RPM_PM8018_SMPS1			200
> > 
> > These numbers are a logical identifier and as such you shouldn't skip
> > 140-199.
> > 
> >> +#define QCOM_RPM_PM8018_SMPS2			201
> >> +#define QCOM_RPM_PM8018_SMPS3			202
> >> +#define QCOM_RPM_PM8018_SMPS4			203
> >> +#define QCOM_RPM_PM8018_SMPS5			204
> >> +#define QCOM_RPM_PM8018_LDO1			205
> >> +#define QCOM_RPM_PM8018_LDO2			206
> >> +#define QCOM_RPM_PM8018_LDO3			207
> >> +#define QCOM_RPM_PM8018_LDO4			208
> >> +#define QCOM_RPM_PM8018_LDO5			209
> >> +#define QCOM_RPM_PM8018_LDO6			210
> >> +#define QCOM_RPM_PM8018_LDO7			211
> >> +#define QCOM_RPM_PM8018_LDO8			212
> >> +#define QCOM_RPM_PM8018_LDO9			213
> >> +#define QCOM_RPM_PM8018_LDO10			214
> >> +#define QCOM_RPM_PM8018_LDO11			215
> >> +#define QCOM_RPM_PM8018_LDO12			216
> >> +#define QCOM_RPM_PM8018_LDO13			217
> >> +#define QCOM_RPM_PM8018_LDO14			218
> >> +#define QCOM_RPM_PM8018_LVS1			219
> >> +#define QCOM_RPM_NCP				220
> > 
> > We already have PM8921_NCP and PM8058_NCP, so better make this
> > QCOM_RPM_PM8018_NCP for consistency.
> > 
> >> +#define QCOM_RPM_VOLTAGE_CORNER			221
> >> +
> > 
> > Other then these details
> > Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> > 
> > Regards,
> > Bjorn
> > 
> Thanks,
> 
> I rebased on Linus two patches ("fix offset error for msm8660" and "parametrize also ack selector size")
> 
> I suppose I should also drop the QCOM_RPM_VOLTAGE_CORNER rpm entry also ?

The open question is how we expose the corner to client drivers, but
it's still part of the rpm protocol. So please leave it here.

Regards,
Bjorn
diff mbox

Patch

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 1be47ad..81d78fb 100644
--- a/drivers/mfd/qcom_rpm.c
+++ b/drivers/mfd/qcom_rpm.c
@@ -364,11 +364,56 @@  static const struct qcom_rpm_data ipq806x_template = {
 	.n_resources = ARRAY_SIZE(ipq806x_rpm_resource_table),
 };
 
+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_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),
+};
+
 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..db85912 100644
--- a/include/dt-bindings/mfd/qcom-rpm.h
+++ b/include/dt-bindings/mfd/qcom-rpm.h
@@ -148,6 +148,29 @@ 
 #define QCOM_RPM_SMB208_S2a			138
 #define QCOM_RPM_SMB208_S2b			139
 
+#define QCOM_RPM_PM8018_SMPS1			200
+#define QCOM_RPM_PM8018_SMPS2			201
+#define QCOM_RPM_PM8018_SMPS3			202
+#define QCOM_RPM_PM8018_SMPS4			203
+#define QCOM_RPM_PM8018_SMPS5			204
+#define QCOM_RPM_PM8018_LDO1			205
+#define QCOM_RPM_PM8018_LDO2			206
+#define QCOM_RPM_PM8018_LDO3			207
+#define QCOM_RPM_PM8018_LDO4			208
+#define QCOM_RPM_PM8018_LDO5			209
+#define QCOM_RPM_PM8018_LDO6			210
+#define QCOM_RPM_PM8018_LDO7			211
+#define QCOM_RPM_PM8018_LDO8			212
+#define QCOM_RPM_PM8018_LDO9			213
+#define QCOM_RPM_PM8018_LDO10			214
+#define QCOM_RPM_PM8018_LDO11			215
+#define QCOM_RPM_PM8018_LDO12			216
+#define QCOM_RPM_PM8018_LDO13			217
+#define QCOM_RPM_PM8018_LDO14			218
+#define QCOM_RPM_PM8018_LVS1			219
+#define QCOM_RPM_NCP				220
+#define QCOM_RPM_VOLTAGE_CORNER			221
+
 /*
  * Constants used to select force mode for regulators.
  */