Merge "msm: 8226/8610: change phys offset to discard the lower 1M of memory"
diff --git a/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c b/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c
index 2999a23..2c8c8b8 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c
+++ b/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c
@@ -147,7 +147,6 @@
{
uint32_t irq;
struct csid_device *csid_dev = data;
- uint32_t val = 0;
void __iomem *csidbase;
csidbase = csid_dev->base;
@@ -164,12 +163,6 @@
pr_debug("%s CSID%d_IRQ_STATUS_ADDR = 0x%x\n",
__func__, csid_dev->pdev->id, irq);
irq_count++;
- if (irq_count >= 5) {
- msm_camera_io_w(0x7f010800 | val,
- csidbase + CSID_IRQ_MASK_ADDR);
- msm_camera_io_w(0x7f010800 | val,
- csidbase + CSID_IRQ_CLEAR_CMD_ADDR);
- }
}
msm_camera_io_w(irq, csid_dev->base + CSID_IRQ_CLEAR_CMD_ADDR);
return IRQ_HANDLED;
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index ed6856e..8002496 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -895,8 +895,13 @@
}
}
- if (data->flags & MMC_DATA_READ)
+ if (data->flags & MMC_DATA_READ) {
mode |= SDHCI_TRNS_READ;
+ if (host->ops->toggle_cdr)
+ host->ops->toggle_cdr(host, true);
+ }
+ if (host->ops->toggle_cdr && (data->flags & MMC_DATA_WRITE))
+ host->ops->toggle_cdr(host, false);
if (host->flags & SDHCI_REQ_USE_DMA)
mode |= SDHCI_TRNS_DMA;
@@ -1713,7 +1718,7 @@
{
struct sdhci_host *host;
u16 ctrl;
- u32 ier;
+ u32 ier = 0;
int tuning_loop_counter = MAX_TUNING_LOOP;
unsigned long timeout;
int err = 0;
@@ -1734,9 +1739,9 @@
* If the Host Controller supports the HS200 mode then the
* tuning function has to be executed.
*/
- if (((ctrl & SDHCI_CTRL_UHS_MASK) == SDHCI_CTRL_UHS_SDR50) &&
- (host->flags & SDHCI_SDR50_NEEDS_TUNING ||
- host->flags & SDHCI_HS200_NEEDS_TUNING))
+ if ((((ctrl & SDHCI_CTRL_UHS_MASK) == SDHCI_CTRL_UHS_SDR50) &&
+ (host->flags & SDHCI_SDR50_NEEDS_TUNING)) ||
+ (host->flags & SDHCI_HS200_NEEDS_TUNING))
requires_tuning_nonuhs = true;
if (((ctrl & SDHCI_CTRL_UHS_MASK) == SDHCI_CTRL_UHS_SDR104) ||
@@ -1749,6 +1754,14 @@
return 0;
}
+ if (host->ops->execute_tuning) {
+ spin_unlock(&host->lock);
+ enable_irq(host->irq);
+ host->ops->execute_tuning(host, opcode);
+ disable_irq(host->irq);
+ spin_lock(&host->lock);
+ goto out;
+ }
sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
/*
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index b00d280..4f8d01d 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -278,6 +278,8 @@
void (*platform_suspend)(struct sdhci_host *host);
void (*platform_resume)(struct sdhci_host *host);
void (*check_power_status)(struct sdhci_host *host);
+ int (*execute_tuning)(struct sdhci_host *host, u32 opcode);
+ void (*toggle_cdr)(struct sdhci_host *host, bool enable);
};
#ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
diff --git a/drivers/platform/msm/ipa/ipa.c b/drivers/platform/msm/ipa/ipa.c
index ccf5f96..870a6bc 100644
--- a/drivers/platform/msm/ipa/ipa.c
+++ b/drivers/platform/msm/ipa/ipa.c
@@ -1417,7 +1417,8 @@
{
void *bam_cnfg_bits;
- if (ipa_ctx->ipa_hw_type == IPA_HW_v1_0) {
+ if ((ipa_ctx->ipa_hw_type == IPA_HW_v1_0) ||
+ (ipa_ctx->ipa_hw_type == IPA_HW_v1_1)) {
bam_cnfg_bits = ioremap(res->ipa_mem_base +
IPA_BAM_REG_BASE_OFST,
IPA_BAM_REMAP_SIZE);
diff --git a/drivers/usb/otg/msm_otg.c b/drivers/usb/otg/msm_otg.c
index c69071d..bd1423d 100644
--- a/drivers/usb/otg/msm_otg.c
+++ b/drivers/usb/otg/msm_otg.c
@@ -984,12 +984,18 @@
/* usb phy no more require TCXO clock, hence vote for TCXO disable */
if (!host_bus_suspend) {
- ret = msm_xo_mode_vote(motg->xo_handle, MSM_XO_MODE_OFF);
- if (ret)
- dev_err(phy->dev, "%s failed to devote for "
- "TCXO D0 buffer%d\n", __func__, ret);
- else
+ if (!IS_ERR(motg->xo_clk)) {
+ clk_disable_unprepare(motg->xo_clk);
motg->lpm_flags |= XO_SHUTDOWN;
+ } else {
+ ret = msm_xo_mode_vote(motg->xo_handle,
+ MSM_XO_MODE_OFF);
+ if (ret)
+ dev_err(phy->dev, "%s fail to devote XO %d\n",
+ __func__, ret);
+ else
+ motg->lpm_flags |= XO_SHUTDOWN;
+ }
}
if (motg->caps & ALLOW_PHY_POWER_COLLAPSE &&
@@ -1052,10 +1058,14 @@
/* Vote for TCXO when waking up the phy */
if (motg->lpm_flags & XO_SHUTDOWN) {
- ret = msm_xo_mode_vote(motg->xo_handle, MSM_XO_MODE_ON);
- if (ret)
- dev_err(phy->dev, "%s failed to vote for "
- "TCXO D0 buffer%d\n", __func__, ret);
+ if (!IS_ERR(motg->xo_clk)) {
+ clk_prepare_enable(motg->xo_clk);
+ } else {
+ ret = msm_xo_mode_vote(motg->xo_handle, MSM_XO_MODE_ON);
+ if (ret)
+ dev_err(phy->dev, "%s fail to vote for XO %d\n",
+ __func__, ret);
+ }
motg->lpm_flags &= ~XO_SHUTDOWN;
}
@@ -3919,20 +3929,31 @@
motg->async_irq = 0;
}
- motg->xo_handle = msm_xo_get(MSM_XO_TCXO_D0, "usb");
- if (IS_ERR(motg->xo_handle)) {
- dev_err(&pdev->dev, "%s not able to get the handle "
- "to vote for TCXO D0 buffer\n", __func__);
- ret = PTR_ERR(motg->xo_handle);
- goto free_regs;
+ motg->xo_clk = clk_get(&pdev->dev, "xo");
+ if (IS_ERR(motg->xo_clk)) {
+ motg->xo_handle = msm_xo_get(MSM_XO_TCXO_D0, "usb");
+ if (IS_ERR(motg->xo_handle)) {
+ dev_err(&pdev->dev, "%s fail to get handle for TCXO\n",
+ __func__);
+ ret = PTR_ERR(motg->xo_handle);
+ goto free_regs;
+ } else {
+ ret = msm_xo_mode_vote(motg->xo_handle, MSM_XO_MODE_ON);
+ if (ret) {
+ dev_err(&pdev->dev, "%s XO voting failed %d\n",
+ __func__, ret);
+ goto free_xo_handle;
+ }
+ }
+ } else {
+ ret = clk_prepare_enable(motg->xo_clk);
+ if (ret) {
+ dev_err(&pdev->dev, "%s failed to vote for TCXO %d\n",
+ __func__, ret);
+ goto free_xo_handle;
+ }
}
- ret = msm_xo_mode_vote(motg->xo_handle, MSM_XO_MODE_ON);
- if (ret) {
- dev_err(&pdev->dev, "%s failed to vote for TCXO "
- "D0 buffer%d\n", __func__, ret);
- goto free_xo_handle;
- }
clk_prepare_enable(motg->pclk);
@@ -4154,9 +4175,15 @@
vdd_val[motg->vdd_type][VDD_MAX]);
devote_xo_handle:
clk_disable_unprepare(motg->pclk);
- msm_xo_mode_vote(motg->xo_handle, MSM_XO_MODE_OFF);
+ if (!IS_ERR(motg->xo_clk))
+ clk_disable_unprepare(motg->xo_clk);
+ else
+ msm_xo_mode_vote(motg->xo_handle, MSM_XO_MODE_OFF);
free_xo_handle:
- msm_xo_put(motg->xo_handle);
+ if (!IS_ERR(motg->xo_clk))
+ clk_put(motg->xo_clk);
+ else
+ msm_xo_put(motg->xo_handle);
free_regs:
iounmap(motg->regs);
put_pclk:
@@ -4229,7 +4256,12 @@
clk_disable_unprepare(motg->pclk);
clk_disable_unprepare(motg->core_clk);
- msm_xo_put(motg->xo_handle);
+ if (!IS_ERR(motg->xo_clk)) {
+ clk_disable_unprepare(motg->xo_clk);
+ clk_put(motg->xo_clk);
+ } else {
+ msm_xo_put(motg->xo_handle);
+ }
msm_hsusb_ldo_enable(motg, USB_PHY_REG_OFF);
msm_hsusb_ldo_init(motg, 0);
regulator_disable(hsusb_vddcx);
diff --git a/include/linux/usb/msm_hsusb.h b/include/linux/usb/msm_hsusb.h
index b0b718f..e249953 100644
--- a/include/linux/usb/msm_hsusb.h
+++ b/include/linux/usb/msm_hsusb.h
@@ -304,6 +304,7 @@
struct msm_otg_platform_data *pdata;
int irq;
int async_irq;
+ struct clk *xo_clk;
struct clk *clk;
struct clk *pclk;
struct clk *phy_reset_clk;