Merge "msm: 9615: Add xo voting support" into msm-3.0

This commit is contained in:
Linux Build Service Account
2012-02-08 08:10:11 -08:00
committed by QuIC Gerrit Code Review
3 changed files with 23 additions and 3 deletions

View File

@@ -257,6 +257,7 @@ config ARCH_MSM9615
select MSM_RPM_REGULATOR select MSM_RPM_REGULATOR
select MULTI_IRQ_HANDLER select MULTI_IRQ_HANDLER
select MSM_PM8X60 if PM select MSM_PM8X60 if PM
select MSM_XO
config ARCH_MSM8625 config ARCH_MSM8625
bool "MSM8625" bool "MSM8625"

View File

@@ -31,6 +31,7 @@
#include <mach/gpio.h> #include <mach/gpio.h>
#include <mach/msm_spi.h> #include <mach/msm_spi.h>
#include <mach/msm_bus_board.h> #include <mach/msm_bus_board.h>
#include <mach/msm_xo.h>
#include "timer.h" #include "timer.h"
#include "devices.h" #include "devices.h"
#include "board-9615.h" #include "board-9615.h"
@@ -568,6 +569,7 @@ static void __init msm9615_common_init(void)
msm9615_i2c_init(); msm9615_i2c_init();
regulator_suppress_info_printing(); regulator_suppress_info_printing();
platform_device_register(&msm9615_device_rpm_regulator); platform_device_register(&msm9615_device_rpm_regulator);
msm_xo_init();
msm_clock_init(&msm9615_clock_init_data); msm_clock_init(&msm9615_clock_init_data);
msm9615_init_buses(); msm9615_init_buses();
msm9615_device_qup_spi_gsbi3.dev.platform_data = msm9615_device_qup_spi_gsbi3.dev.platform_data =

View File

@@ -115,7 +115,7 @@ late_initcall(msm_xo_debugfs_init);
static int msm_xo_update_vote(struct msm_xo *xo) static int msm_xo_update_vote(struct msm_xo *xo)
{ {
int ret; int ret;
unsigned vote, prev_vote = xo->mode; unsigned vote, prev_vote = xo->mode, ctx_set;
struct msm_rpm_iv_pair cmd; struct msm_rpm_iv_pair cmd;
if (xo->votes[MSM_XO_MODE_ON]) if (xo->votes[MSM_XO_MODE_ON])
@@ -141,7 +141,11 @@ static int msm_xo_update_vote(struct msm_xo *xo)
} else if (xo == &msm_xo_sources[MSM_XO_CXO]) { } else if (xo == &msm_xo_sources[MSM_XO_CXO]) {
cmd.id = MSM_RPM_ID_CXO_CLK; cmd.id = MSM_RPM_ID_CXO_CLK;
cmd.value = msm_xo_sources[MSM_XO_CXO].mode ? 1 : 0; cmd.value = msm_xo_sources[MSM_XO_CXO].mode ? 1 : 0;
ret = msm_rpmrs_set_noirq(MSM_RPM_CTX_SET_0, &cmd, 1); if (cpu_is_msm9615())
ctx_set = MSM_RPM_CTX_SET_SLEEP;
else
ctx_set = MSM_RPM_CTX_SET_0;
ret = msm_rpmrs_set_noirq(ctx_set, &cmd, 1);
} else { } else {
cmd.id = MSM_RPM_ID_CXO_BUFFERS; cmd.id = MSM_RPM_ID_CXO_BUFFERS;
cmd.value = (msm_xo_sources[MSM_XO_TCXO_D0].mode << 0) | cmd.value = (msm_xo_sources[MSM_XO_TCXO_D0].mode << 0) |
@@ -304,12 +308,25 @@ EXPORT_SYMBOL(msm_xo_put);
int __init msm_xo_init(void) int __init msm_xo_init(void)
{ {
int i; int i;
int ret; int ret = 0;
struct msm_rpm_iv_pair cmd[2]; struct msm_rpm_iv_pair cmd[2];
for (i = 0; i < ARRAY_SIZE(msm_xo_sources); i++) for (i = 0; i < ARRAY_SIZE(msm_xo_sources); i++)
INIT_LIST_HEAD(&msm_xo_sources[i].voters); INIT_LIST_HEAD(&msm_xo_sources[i].voters);
if (cpu_is_msm9615()) {
cmd[0].id = MSM_RPM_ID_CXO_CLK;
cmd[0].value = 1;
ret = msm_rpmrs_set(MSM_RPM_CTX_SET_0, cmd, 1);
if (ret)
goto out;
cmd[0].id = MSM_RPM_ID_CXO_CLK;
cmd[0].value = 0;
ret = msm_rpmrs_set(MSM_RPM_CTX_SET_SLEEP, cmd, 1);
goto out;
}
cmd[0].id = MSM_RPM_ID_PXO_CLK; cmd[0].id = MSM_RPM_ID_PXO_CLK;
cmd[0].value = 1; cmd[0].value = 1;
cmd[1].id = MSM_RPM_ID_CXO_BUFFERS; cmd[1].id = MSM_RPM_ID_CXO_BUFFERS;