Commit 42e52616 authored by H. Nikolaus Schaller's avatar H. Nikolaus Schaller Committed by Viresh Kumar
Browse files

cpufreq: ti-cpufreq: omap36xx use "cpu0","vbb" if run in multi_regulator mode



In preparation for using the multi_regulator capability of
this driver for handling the ABB LDO for OPP1G of the omap36xx
we have to take care that the (legacy) vdd-supply name is
cpu0-supply = <&vcc>;

To do this we add another field to the SoC description table which
optionally can specify a list of regulator names.

For omap36xx we define "cpu0-supply" and "vbb-supply".

The default remains "vdd-supply" and "vbb-supply".

Signed-off-by: default avatarH. Nikolaus Schaller <hns@goldelico.com>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
Acked-by: default avatarRob Herring <robh@kernel.org>
Tested-by: default avatarAdam Ford <aford173@gmail.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
parent 6ddf6c91
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -15,12 +15,16 @@ In 'cpus' nodes:

In 'operating-points-v2' table:
- compatible: Should be
	- 'operating-points-v2-ti-cpu' for am335x, am43xx, and dra7xx/am57xx SoCs
	- 'operating-points-v2-ti-cpu' for am335x, am43xx, and dra7xx/am57xx,
	  omap34xx, omap36xx and am3517 SoCs
- syscon: A phandle pointing to a syscon node representing the control module
	  register space of the SoC.

Optional properties:
--------------------
- "vdd-supply", "vbb-supply": to define two regulators for dra7xx
- "cpu0-supply", "vbb-supply": to define two regulators for omap36xx

For each opp entry in 'operating-points-v2' table:
- opp-supported-hw: Two bitfields indicating:
	1. Which revision of the SoC the OPP is supported by
+10 −2
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@
struct ti_cpufreq_data;

struct ti_cpufreq_soc_data {
	const char * const *reg_names;
	unsigned long (*efuse_xlate)(struct ti_cpufreq_data *opp_data,
				     unsigned long efuse);
	unsigned long efuse_fallback;
@@ -165,7 +166,10 @@ static struct ti_cpufreq_soc_data omap34xx_soc_data = {
 *    seems to always read as 0).
 */

static const char * const omap3_reg_names[] = {"cpu0", "vbb"};

static struct ti_cpufreq_soc_data omap36xx_soc_data = {
	.reg_names = omap3_reg_names,
	.efuse_xlate = omap3_efuse_xlate,
	.efuse_offset = OMAP3_CONTROL_DEVICE_STATUS - OMAP3_SYSCON_BASE,
	.efuse_shift = 9,
@@ -299,7 +303,7 @@ static int ti_cpufreq_probe(struct platform_device *pdev)
	const struct of_device_id *match;
	struct opp_table *ti_opp_table;
	struct ti_cpufreq_data *opp_data;
	const char * const reg_names[] = {"vdd", "vbb"};
	const char * const default_reg_names[] = {"vdd", "vbb"};
	int ret;

	match = dev_get_platdata(&pdev->dev);
@@ -355,9 +359,13 @@ static int ti_cpufreq_probe(struct platform_device *pdev)
	opp_data->opp_table = ti_opp_table;

	if (opp_data->soc_data->multi_regulator) {
		const char * const *reg_names = default_reg_names;

		if (opp_data->soc_data->reg_names)
			reg_names = opp_data->soc_data->reg_names;
		ti_opp_table = dev_pm_opp_set_regulators(opp_data->cpu_dev,
							 reg_names,
							 ARRAY_SIZE(reg_names));
							 ARRAY_SIZE(default_reg_names));
		if (IS_ERR(ti_opp_table)) {
			dev_pm_opp_put_supported_hw(opp_data->opp_table);
			ret =  PTR_ERR(ti_opp_table);