[V6,4/7] ata: ahci_tegra: initialize regulators from soc_data

Message ID 1515482234-24716-5-git-send-email-pchandru@nvidia.com
State Not Applicable
Delegated to: David Miller
Headers show
Series
  • Refactor and add AHCI support for tegra210
Related show

Commit Message

Preetham Chandru Ramchandra Jan. 9, 2018, 7:17 a.m.
From: Preetham Ramchandra <pchandru@nvidia.com>

Get the regulator names to be initialized from soc_data
and initialize them.

Signed-off-by: Preetham Chandru R <pchandru@nvidia.com>
---
 drivers/ata/ahci_tegra.c | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

Comments

Mikko Perttunen Jan. 23, 2018, 3:47 p.m. | #1
On 01/09/2018 09:17 AM, Preetham Chandru Ramchandra wrote:
> From: Preetham Ramchandra <pchandru@nvidia.com>
> 
> Get the regulator names to be initialized from soc_data
> and initialize them.
> 
> Signed-off-by: Preetham Chandru R <pchandru@nvidia.com>
> ---
>   drivers/ata/ahci_tegra.c | 32 ++++++++++++++++++++++----------
>   1 file changed, 22 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/ata/ahci_tegra.c b/drivers/ata/ahci_tegra.c
> index 71850e96e787..90dfa803607e 100644
> --- a/drivers/ata/ahci_tegra.c
> +++ b/drivers/ata/ahci_tegra.c
> @@ -164,6 +164,8 @@ struct tegra_ahci_ops {
>   };
>   
>   struct tegra_ahci_soc {
> +	const char *const	*supply_names;
> +	u32			num_supplies;
>   	struct tegra_ahci_ops	ops;
>   };
>   
> @@ -175,10 +177,14 @@ struct tegra_ahci_priv {
>   	struct reset_control	   *sata_cold_rst;
>   	/* Needs special handling, cannot use ahci_platform */
>   	struct clk		   *sata_clk;
> -	struct regulator_bulk_data supplies[5];
> +	struct regulator_bulk_data *supplies;
>   	struct tegra_ahci_soc	   *soc_data;
>   };
>   
> +static const char *const tegra124_supply_names[] = {
> +	"avdd", "hvdd", "vddio", "target-5v", "target-12v"
> +};
> +

Nitpick: this should be just above the tegra124_ahci_soc_data structure.

>   static int tegra124_ahci_init(struct ahci_host_priv *hpriv)
>   {
>   	struct tegra_ahci_priv *tegra = hpriv->plat_data;
> @@ -224,6 +230,8 @@ static int tegra124_ahci_init(struct ahci_host_priv *hpriv)
>   }
>   
>   static const struct tegra_ahci_soc tegra124_ahci_soc_data = {
> +	.supply_names = tegra124_supply_names,
> +	.num_supplies = ARRAY_SIZE(tegra124_supply_names),
>   	.ops = {
>   		.init = tegra124_ahci_init,
>   	},
> @@ -234,7 +242,7 @@ static int tegra_ahci_power_on(struct ahci_host_priv *hpriv)
>   	struct tegra_ahci_priv *tegra = hpriv->plat_data;
>   	int ret;
>   
> -	ret = regulator_bulk_enable(ARRAY_SIZE(tegra->supplies),
> +	ret = regulator_bulk_enable(tegra->soc_data->num_supplies,
>   				    tegra->supplies);
>   	if (ret)
>   		return ret;
> @@ -263,7 +271,7 @@ static int tegra_ahci_power_on(struct ahci_host_priv *hpriv)
>   	tegra_powergate_power_off(TEGRA_POWERGATE_SATA);
>   
>   disable_regulators:
> -	regulator_bulk_disable(ARRAY_SIZE(tegra->supplies), tegra->supplies);
> +	regulator_bulk_disable(tegra->soc_data->num_supplies, tegra->supplies);
>   	return ret;
>   }
>   
> @@ -280,7 +288,7 @@ static void tegra_ahci_power_off(struct ahci_host_priv *hpriv)
>   	clk_disable_unprepare(tegra->sata_clk);
>   	tegra_powergate_power_off(TEGRA_POWERGATE_SATA);
>   
> -	regulator_bulk_disable(ARRAY_SIZE(tegra->supplies), tegra->supplies);
> +	regulator_bulk_disable(tegra->soc_data->num_supplies, tegra->supplies);
>   }
>   
>   static int tegra_ahci_controller_init(struct ahci_host_priv *hpriv)
> @@ -502,13 +510,17 @@ static int tegra_ahci_probe(struct platform_device *pdev)
>   		return PTR_ERR(tegra->sata_clk);
>   	}
>   
> -	tegra->supplies[0].supply = "avdd";
> -	tegra->supplies[1].supply = "hvdd";
> -	tegra->supplies[2].supply = "vddio";
> -	tegra->supplies[3].supply = "target-5v";
> -	tegra->supplies[4].supply = "target-12v";
> +	tegra->supplies = devm_kcalloc(&pdev->dev,
> +				       tegra->soc_data->num_supplies,
> +				       sizeof(*tegra->supplies), GFP_KERNEL);
> +	if (!tegra->supplies)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < tegra->soc_data->num_supplies; i++)
> +		tegra->supplies[i].supply = tegra->soc_data->supply_names[i];
>   
> -	ret = devm_regulator_bulk_get(&pdev->dev, ARRAY_SIZE(tegra->supplies),
> +	ret = devm_regulator_bulk_get(&pdev->dev,
> +				      tegra->soc_data->num_supplies,
>   				      tegra->supplies);
>   	if (ret) {
>   		dev_err(&pdev->dev, "Failed to get regulators\n");
> 

Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Preetham Chandru Ramchandra Feb. 12, 2018, 5:11 p.m. | #2
>-----Original Message-----

>From: Mikko Perttunen [mailto:cyndis@kapsi.fi]

>Sent: Tuesday, January 23, 2018 9:18 PM

>To: Preetham Chandru <pchandru@nvidia.com>; thierry.reding@gmail.com;

>tj@kernel.org

>Cc: preetham260@gmail.com; linux-tegra@vger.kernel.org; linux-

>ide@vger.kernel.org; Venu Byravarasu <vbyravarasu@nvidia.com>; Pavan

>Kunapuli <pkunapuli@nvidia.com>

>Subject: Re: [PATCH V6 4/7] ata: ahci_tegra: initialize regulators from soc_data

>

>On 01/09/2018 09:17 AM, Preetham Chandru Ramchandra wrote:

>> From: Preetham Ramchandra <pchandru@nvidia.com>

>>

>> Get the regulator names to be initialized from soc_data and initialize

>> them.

>>

>> Signed-off-by: Preetham Chandru R <pchandru@nvidia.com>

>> ---

>>   drivers/ata/ahci_tegra.c | 32 ++++++++++++++++++++++----------

>>   1 file changed, 22 insertions(+), 10 deletions(-)

>>

>> diff --git a/drivers/ata/ahci_tegra.c b/drivers/ata/ahci_tegra.c index

>> 71850e96e787..90dfa803607e 100644

>> --- a/drivers/ata/ahci_tegra.c

>> +++ b/drivers/ata/ahci_tegra.c

>> @@ -164,6 +164,8 @@ struct tegra_ahci_ops {

>>   };

>>

>>   struct tegra_ahci_soc {

>> +	const char *const	*supply_names;

>> +	u32			num_supplies;

>>   	struct tegra_ahci_ops	ops;

>>   };

>>

>> @@ -175,10 +177,14 @@ struct tegra_ahci_priv {

>>   	struct reset_control	   *sata_cold_rst;

>>   	/* Needs special handling, cannot use ahci_platform */

>>   	struct clk		   *sata_clk;

>> -	struct regulator_bulk_data supplies[5];

>> +	struct regulator_bulk_data *supplies;

>>   	struct tegra_ahci_soc	   *soc_data;

>>   };

>>

>> +static const char *const tegra124_supply_names[] = {

>> +	"avdd", "hvdd", "vddio", "target-5v", "target-12v"

>> +};

>> +

>

>Nitpick: this should be just above the tegra124_ahci_soc_data structure.

>

okay
>>   static int tegra124_ahci_init(struct ahci_host_priv *hpriv)

>>   {

>>   	struct tegra_ahci_priv *tegra = hpriv->plat_data; @@ -224,6 +230,8

>> @@ static int tegra124_ahci_init(struct ahci_host_priv *hpriv)

>>   }

>>

>>   static const struct tegra_ahci_soc tegra124_ahci_soc_data = {

>> +	.supply_names = tegra124_supply_names,

>> +	.num_supplies = ARRAY_SIZE(tegra124_supply_names),

>>   	.ops = {

>>   		.init = tegra124_ahci_init,

>>   	},

>> @@ -234,7 +242,7 @@ static int tegra_ahci_power_on(struct ahci_host_priv

>*hpriv)

>>   	struct tegra_ahci_priv *tegra = hpriv->plat_data;

>>   	int ret;

>>

>> -	ret = regulator_bulk_enable(ARRAY_SIZE(tegra->supplies),

>> +	ret = regulator_bulk_enable(tegra->soc_data->num_supplies,

>>   				    tegra->supplies);

>>   	if (ret)

>>   		return ret;

>> @@ -263,7 +271,7 @@ static int tegra_ahci_power_on(struct ahci_host_priv

>*hpriv)

>>   	tegra_powergate_power_off(TEGRA_POWERGATE_SATA);

>>

>>   disable_regulators:

>> -	regulator_bulk_disable(ARRAY_SIZE(tegra->supplies), tegra->supplies);

>> +	regulator_bulk_disable(tegra->soc_data->num_supplies,

>> +tegra->supplies);

>>   	return ret;

>>   }

>>

>> @@ -280,7 +288,7 @@ static void tegra_ahci_power_off(struct ahci_host_priv

>*hpriv)

>>   	clk_disable_unprepare(tegra->sata_clk);

>>   	tegra_powergate_power_off(TEGRA_POWERGATE_SATA);

>>

>> -	regulator_bulk_disable(ARRAY_SIZE(tegra->supplies), tegra->supplies);

>> +	regulator_bulk_disable(tegra->soc_data->num_supplies,

>> +tegra->supplies);

>>   }

>>

>>   static int tegra_ahci_controller_init(struct ahci_host_priv *hpriv)

>> @@ -502,13 +510,17 @@ static int tegra_ahci_probe(struct platform_device

>*pdev)

>>   		return PTR_ERR(tegra->sata_clk);

>>   	}

>>

>> -	tegra->supplies[0].supply = "avdd";

>> -	tegra->supplies[1].supply = "hvdd";

>> -	tegra->supplies[2].supply = "vddio";

>> -	tegra->supplies[3].supply = "target-5v";

>> -	tegra->supplies[4].supply = "target-12v";

>> +	tegra->supplies = devm_kcalloc(&pdev->dev,

>> +				       tegra->soc_data->num_supplies,

>> +				       sizeof(*tegra->supplies), GFP_KERNEL);

>> +	if (!tegra->supplies)

>> +		return -ENOMEM;

>> +

>> +	for (i = 0; i < tegra->soc_data->num_supplies; i++)

>> +		tegra->supplies[i].supply = tegra->soc_data->supply_names[i];

>>

>> -	ret = devm_regulator_bulk_get(&pdev->dev, ARRAY_SIZE(tegra-

>>supplies),

>> +	ret = devm_regulator_bulk_get(&pdev->dev,

>> +				      tegra->soc_data->num_supplies,

>>   				      tegra->supplies);

>>   	if (ret) {

>>   		dev_err(&pdev->dev, "Failed to get regulators\n");

>>

>

>Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>

Patch

diff --git a/drivers/ata/ahci_tegra.c b/drivers/ata/ahci_tegra.c
index 71850e96e787..90dfa803607e 100644
--- a/drivers/ata/ahci_tegra.c
+++ b/drivers/ata/ahci_tegra.c
@@ -164,6 +164,8 @@  struct tegra_ahci_ops {
 };
 
 struct tegra_ahci_soc {
+	const char *const	*supply_names;
+	u32			num_supplies;
 	struct tegra_ahci_ops	ops;
 };
 
@@ -175,10 +177,14 @@  struct tegra_ahci_priv {
 	struct reset_control	   *sata_cold_rst;
 	/* Needs special handling, cannot use ahci_platform */
 	struct clk		   *sata_clk;
-	struct regulator_bulk_data supplies[5];
+	struct regulator_bulk_data *supplies;
 	struct tegra_ahci_soc	   *soc_data;
 };
 
+static const char *const tegra124_supply_names[] = {
+	"avdd", "hvdd", "vddio", "target-5v", "target-12v"
+};
+
 static int tegra124_ahci_init(struct ahci_host_priv *hpriv)
 {
 	struct tegra_ahci_priv *tegra = hpriv->plat_data;
@@ -224,6 +230,8 @@  static int tegra124_ahci_init(struct ahci_host_priv *hpriv)
 }
 
 static const struct tegra_ahci_soc tegra124_ahci_soc_data = {
+	.supply_names = tegra124_supply_names,
+	.num_supplies = ARRAY_SIZE(tegra124_supply_names),
 	.ops = {
 		.init = tegra124_ahci_init,
 	},
@@ -234,7 +242,7 @@  static int tegra_ahci_power_on(struct ahci_host_priv *hpriv)
 	struct tegra_ahci_priv *tegra = hpriv->plat_data;
 	int ret;
 
-	ret = regulator_bulk_enable(ARRAY_SIZE(tegra->supplies),
+	ret = regulator_bulk_enable(tegra->soc_data->num_supplies,
 				    tegra->supplies);
 	if (ret)
 		return ret;
@@ -263,7 +271,7 @@  static int tegra_ahci_power_on(struct ahci_host_priv *hpriv)
 	tegra_powergate_power_off(TEGRA_POWERGATE_SATA);
 
 disable_regulators:
-	regulator_bulk_disable(ARRAY_SIZE(tegra->supplies), tegra->supplies);
+	regulator_bulk_disable(tegra->soc_data->num_supplies, tegra->supplies);
 	return ret;
 }
 
@@ -280,7 +288,7 @@  static void tegra_ahci_power_off(struct ahci_host_priv *hpriv)
 	clk_disable_unprepare(tegra->sata_clk);
 	tegra_powergate_power_off(TEGRA_POWERGATE_SATA);
 
-	regulator_bulk_disable(ARRAY_SIZE(tegra->supplies), tegra->supplies);
+	regulator_bulk_disable(tegra->soc_data->num_supplies, tegra->supplies);
 }
 
 static int tegra_ahci_controller_init(struct ahci_host_priv *hpriv)
@@ -502,13 +510,17 @@  static int tegra_ahci_probe(struct platform_device *pdev)
 		return PTR_ERR(tegra->sata_clk);
 	}
 
-	tegra->supplies[0].supply = "avdd";
-	tegra->supplies[1].supply = "hvdd";
-	tegra->supplies[2].supply = "vddio";
-	tegra->supplies[3].supply = "target-5v";
-	tegra->supplies[4].supply = "target-12v";
+	tegra->supplies = devm_kcalloc(&pdev->dev,
+				       tegra->soc_data->num_supplies,
+				       sizeof(*tegra->supplies), GFP_KERNEL);
+	if (!tegra->supplies)
+		return -ENOMEM;
+
+	for (i = 0; i < tegra->soc_data->num_supplies; i++)
+		tegra->supplies[i].supply = tegra->soc_data->supply_names[i];
 
-	ret = devm_regulator_bulk_get(&pdev->dev, ARRAY_SIZE(tegra->supplies),
+	ret = devm_regulator_bulk_get(&pdev->dev,
+				      tegra->soc_data->num_supplies,
 				      tegra->supplies);
 	if (ret) {
 		dev_err(&pdev->dev, "Failed to get regulators\n");