mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
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: H. Nikolaus Schaller <hns@goldelico.com> Acked-by: Tony Lindgren <tony@atomide.com> Acked-by: Rob Herring <robh@kernel.org> Tested-by: Adam Ford <aford173@gmail.com> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
parent
6ddf6c91e6
commit
42e52616f3
@ -15,12 +15,16 @@ In 'cpus' nodes:
|
|||||||
|
|
||||||
In 'operating-points-v2' table:
|
In 'operating-points-v2' table:
|
||||||
- compatible: Should be
|
- 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
|
- syscon: A phandle pointing to a syscon node representing the control module
|
||||||
register space of the SoC.
|
register space of the SoC.
|
||||||
|
|
||||||
Optional properties:
|
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:
|
For each opp entry in 'operating-points-v2' table:
|
||||||
- opp-supported-hw: Two bitfields indicating:
|
- opp-supported-hw: Two bitfields indicating:
|
||||||
1. Which revision of the SoC the OPP is supported by
|
1. Which revision of the SoC the OPP is supported by
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
struct ti_cpufreq_data;
|
struct ti_cpufreq_data;
|
||||||
|
|
||||||
struct ti_cpufreq_soc_data {
|
struct ti_cpufreq_soc_data {
|
||||||
|
const char * const *reg_names;
|
||||||
unsigned long (*efuse_xlate)(struct ti_cpufreq_data *opp_data,
|
unsigned long (*efuse_xlate)(struct ti_cpufreq_data *opp_data,
|
||||||
unsigned long efuse);
|
unsigned long efuse);
|
||||||
unsigned long efuse_fallback;
|
unsigned long efuse_fallback;
|
||||||
@ -165,7 +166,10 @@ static struct ti_cpufreq_soc_data omap34xx_soc_data = {
|
|||||||
* seems to always read as 0).
|
* seems to always read as 0).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static const char * const omap3_reg_names[] = {"cpu0", "vbb"};
|
||||||
|
|
||||||
static struct ti_cpufreq_soc_data omap36xx_soc_data = {
|
static struct ti_cpufreq_soc_data omap36xx_soc_data = {
|
||||||
|
.reg_names = omap3_reg_names,
|
||||||
.efuse_xlate = omap3_efuse_xlate,
|
.efuse_xlate = omap3_efuse_xlate,
|
||||||
.efuse_offset = OMAP3_CONTROL_DEVICE_STATUS - OMAP3_SYSCON_BASE,
|
.efuse_offset = OMAP3_CONTROL_DEVICE_STATUS - OMAP3_SYSCON_BASE,
|
||||||
.efuse_shift = 9,
|
.efuse_shift = 9,
|
||||||
@ -299,7 +303,7 @@ static int ti_cpufreq_probe(struct platform_device *pdev)
|
|||||||
const struct of_device_id *match;
|
const struct of_device_id *match;
|
||||||
struct opp_table *ti_opp_table;
|
struct opp_table *ti_opp_table;
|
||||||
struct ti_cpufreq_data *opp_data;
|
struct ti_cpufreq_data *opp_data;
|
||||||
const char * const reg_names[] = {"vdd", "vbb"};
|
const char * const default_reg_names[] = {"vdd", "vbb"};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
match = dev_get_platdata(&pdev->dev);
|
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;
|
opp_data->opp_table = ti_opp_table;
|
||||||
|
|
||||||
if (opp_data->soc_data->multi_regulator) {
|
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,
|
ti_opp_table = dev_pm_opp_set_regulators(opp_data->cpu_dev,
|
||||||
reg_names,
|
reg_names,
|
||||||
ARRAY_SIZE(reg_names));
|
ARRAY_SIZE(default_reg_names));
|
||||||
if (IS_ERR(ti_opp_table)) {
|
if (IS_ERR(ti_opp_table)) {
|
||||||
dev_pm_opp_put_supported_hw(opp_data->opp_table);
|
dev_pm_opp_put_supported_hw(opp_data->opp_table);
|
||||||
ret = PTR_ERR(ti_opp_table);
|
ret = PTR_ERR(ti_opp_table);
|
||||||
|
Loading…
Reference in New Issue
Block a user