Merge "msm: copper: Add Android USB platform device" into msm-3.0
diff --git a/arch/arm/configs/msm8960-perf_defconfig b/arch/arm/configs/msm8960-perf_defconfig
index 2ae5230..68870b6 100644
--- a/arch/arm/configs/msm8960-perf_defconfig
+++ b/arch/arm/configs/msm8960-perf_defconfig
@@ -86,6 +86,8 @@
CONFIG_MSM_QDSS=y
CONFIG_MSM_SLEEP_STATS=y
CONFIG_MSM_DCVS=y
+CONFIG_MSM_CACHE_ERP=y
+CONFIG_MSM_L2_ERP_2BIT_PANIC=y
CONFIG_STRICT_MEMORY_RWX=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
diff --git a/arch/arm/configs/msm8960_defconfig b/arch/arm/configs/msm8960_defconfig
index b2e0786..ccf448d 100644
--- a/arch/arm/configs/msm8960_defconfig
+++ b/arch/arm/configs/msm8960_defconfig
@@ -88,6 +88,10 @@
CONFIG_MSM_DCVS=y
CONFIG_MSM_RTB=y
CONFIG_MSM_RTB_SEPARATE_CPUS=y
+CONFIG_MSM_CACHE_ERP=y
+CONFIG_MSM_L1_ERR_PANIC=y
+CONFIG_MSM_L2_ERP_1BIT_PANIC=y
+CONFIG_MSM_L2_ERP_2BIT_PANIC=y
CONFIG_STRICT_MEMORY_RWX=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
diff --git a/arch/arm/mach-msm/board-8064.c b/arch/arm/mach-msm/board-8064.c
index 82ce0df..01478ac 100644
--- a/arch/arm/mach-msm/board-8064.c
+++ b/arch/arm/mach-msm/board-8064.c
@@ -1792,6 +1792,7 @@
#endif
&apq8064_cpu_idle_device,
&apq8064_msm_gov_device,
+ &apq8064_device_cache_erp,
};
static struct platform_device *sim_devices[] __initdata = {
diff --git a/arch/arm/mach-msm/board-8930.c b/arch/arm/mach-msm/board-8930.c
index f2bd41b..51c8af6 100644
--- a/arch/arm/mach-msm/board-8930.c
+++ b/arch/arm/mach-msm/board-8930.c
@@ -1820,6 +1820,7 @@
&msm_bus_8930_mm_fabric,
&msm_bus_8930_sys_fpb,
&msm_bus_8930_cpss_fpb,
+ &msm8960_device_cache_erp,
};
static struct platform_device *cdp_devices[] __initdata = {
diff --git a/arch/arm/mach-msm/board-8960.c b/arch/arm/mach-msm/board-8960.c
index db0bbff..384da36 100644
--- a/arch/arm/mach-msm/board-8960.c
+++ b/arch/arm/mach-msm/board-8960.c
@@ -2192,6 +2192,7 @@
#endif
&msm8960_cpu_idle_device,
&msm8960_msm_gov_device,
+ &msm8960_device_cache_erp,
};
static struct platform_device *sim_devices[] __initdata = {
diff --git a/arch/arm/mach-msm/board-msm7627a-display.c b/arch/arm/mach-msm/board-msm7627a-display.c
index 86343f5..e4d44b4 100644
--- a/arch/arm/mach-msm/board-msm7627a-display.c
+++ b/arch/arm/mach-msm/board-msm7627a-display.c
@@ -549,6 +549,93 @@
};
#endif
+static int evb_backlight_control(int level)
+{
+
+ int i = 0;
+ int remainder;
+ /* device address byte = 0x72 */
+ gpio_set_value_cansleep(96, 0);
+ udelay(67);
+ gpio_set_value_cansleep(96, 1);
+ udelay(33);
+ gpio_set_value_cansleep(96, 0);
+ udelay(33);
+ gpio_set_value_cansleep(96, 1);
+ udelay(67);
+ gpio_set_value_cansleep(96, 0);
+ udelay(33);
+ gpio_set_value_cansleep(96, 1);
+ udelay(67);
+ gpio_set_value_cansleep(96, 0);
+ udelay(33);
+ gpio_set_value_cansleep(96, 1);
+ udelay(67);
+ gpio_set_value_cansleep(96, 0);
+ udelay(67);
+ gpio_set_value_cansleep(96, 1);
+ udelay(33);
+ gpio_set_value_cansleep(96, 0);
+ udelay(67);
+ gpio_set_value_cansleep(96, 1);
+ udelay(33);
+ gpio_set_value_cansleep(96, 0);
+ udelay(33);
+ gpio_set_value_cansleep(96, 1);
+ udelay(67);
+ gpio_set_value_cansleep(96, 0);
+ udelay(67);
+ gpio_set_value_cansleep(96, 1);
+ udelay(33);
+
+ /* t-EOS and t-start */
+ gpio_set_value_cansleep(96, 0);
+ ndelay(4200);
+ gpio_set_value_cansleep(96, 1);
+ ndelay(9000);
+
+ /* data byte */
+ /* RFA = 0 */
+ gpio_set_value_cansleep(96, 0);
+ udelay(67);
+ gpio_set_value_cansleep(96, 1);
+ udelay(33);
+
+ /* Address bits */
+ gpio_set_value_cansleep(96, 0);
+ udelay(67);
+ gpio_set_value_cansleep(96, 1);
+ udelay(33);
+ gpio_set_value_cansleep(96, 0);
+ udelay(67);
+ gpio_set_value_cansleep(96, 1);
+ udelay(33);
+
+ /* Data bits */
+ for (i = 0; i < 5; i++) {
+ remainder = (level) & (16);
+ if (remainder) {
+ gpio_set_value_cansleep(96, 0);
+ udelay(33);
+ gpio_set_value_cansleep(96, 1);
+ udelay(67);
+ } else {
+ gpio_set_value_cansleep(96, 0);
+ udelay(67);
+ gpio_set_value_cansleep(96, 1);
+ udelay(33);
+ }
+ level = level << 1;
+ }
+
+ /* t-EOS */
+ gpio_set_value_cansleep(96, 0);
+ ndelay(12000);
+ gpio_set_value_cansleep(96, 1);
+ return 0;
+}
+
+
static struct msm_panel_common_pdata mipi_truly_pdata = {
.pmic_backlight = mipi_truly_set_bl,
};
@@ -562,7 +649,7 @@
};
static struct msm_panel_common_pdata mipi_NT35510_pdata = {
- .pmic_backlight = NULL,/*mipi_NT35510_set_bl,*/
+ .pmic_backlight = evb_backlight_control,
};
static struct platform_device mipi_dsi_NT35510_panel_device = {
@@ -990,7 +1077,7 @@
return rc;
rc = gpio_tlmm_config(GPIO_CFG(GPIO_QRD3_LCD_BACKLIGHT_EN, 0,
- GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA),
+ GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_2MA),
GPIO_CFG_ENABLE);
if (rc < 0) {
pr_err("failed QRD3 GPIO_BACKLIGHT_EN tlmm config\n");
@@ -1046,7 +1133,17 @@
qrd3_dsi_gpio_initialized = 1;
}
- gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, !!on);
+ if (on) {
+ gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, 1);
+ udelay(190);
+ gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, 0);
+ udelay(286);
+ gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, 1);
+ /* 1 wire mode starts from this low to high transition */
+ udelay(50);
+ } else
+ gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, !!on);
+
gpio_set_value_cansleep(GPIO_QRD3_LCD_EXT_2V85_EN, !!on);
gpio_set_value_cansleep(GPIO_QRD3_LCD_EXT_1V8_EN, !!on);
@@ -1109,10 +1206,11 @@
if (machine_is_msm7627a_qrd1())
platform_add_devices(qrd_fb_devices,
ARRAY_SIZE(qrd_fb_devices));
- else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb())
+ else if (machine_is_msm7627a_evb() || machine_is_msm8625_evb()) {
+ mipi_NT35510_pdata.bl_lock = 1;
platform_add_devices(evb_fb_devices,
ARRAY_SIZE(evb_fb_devices));
- else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) {
+ } else if (machine_is_msm7627a_qrd3() || machine_is_msm8625_qrd7()) {
sku3_lcdc_lcd_camera_power_init();
platform_add_devices(qrd3_fb_devices,
ARRAY_SIZE(qrd3_fb_devices));
diff --git a/arch/arm/mach-msm/devices-8064.c b/arch/arm/mach-msm/devices-8064.c
index 1e539b2..3965413 100644
--- a/arch/arm/mach-msm/devices-8064.c
+++ b/arch/arm/mach-msm/devices-8064.c
@@ -2190,3 +2190,23 @@
.platform_data = &apq8064_core_info,
},
};
+
+static struct resource msm_cache_erp_resources[] = {
+ {
+ .name = "l1_irq",
+ .start = SC_SICCPUXEXTFAULTIRPTREQ,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .name = "l2_irq",
+ .start = APCC_QGICL2IRPTREQ,
+ .flags = IORESOURCE_IRQ,
+ }
+};
+
+struct platform_device apq8064_device_cache_erp = {
+ .name = "msm_cache_erp",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(msm_cache_erp_resources),
+ .resource = msm_cache_erp_resources,
+};
diff --git a/arch/arm/mach-msm/devices-8960.c b/arch/arm/mach-msm/devices-8960.c
index 42df652..c45a137 100644
--- a/arch/arm/mach-msm/devices-8960.c
+++ b/arch/arm/mach-msm/devices-8960.c
@@ -3270,3 +3270,23 @@
.platform_data = &msm8960_core_info,
},
};
+
+static struct resource msm_cache_erp_resources[] = {
+ {
+ .name = "l1_irq",
+ .start = SC_SICCPUXEXTFAULTIRPTREQ,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .name = "l2_irq",
+ .start = APCC_QGICL2IRPTREQ,
+ .flags = IORESOURCE_IRQ,
+ }
+};
+
+struct platform_device msm8960_device_cache_erp = {
+ .name = "msm_cache_erp",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(msm_cache_erp_resources),
+ .resource = msm_cache_erp_resources,
+};
diff --git a/arch/arm/mach-msm/devices.h b/arch/arm/mach-msm/devices.h
index 199ff85..1c5f397 100644
--- a/arch/arm/mach-msm/devices.h
+++ b/arch/arm/mach-msm/devices.h
@@ -71,6 +71,7 @@
extern struct platform_device msm8960_device_ispif;
extern struct platform_device msm8960_device_vfe;
extern struct platform_device msm8960_device_vpe;
+extern struct platform_device msm8960_device_cache_erp;
extern struct platform_device apq8064_device_uart_gsbi1;
extern struct platform_device apq8064_device_uart_gsbi3;
@@ -82,6 +83,7 @@
extern struct platform_device apq8064_slim_ctrl;
extern struct platform_device apq8064_device_ssbi_pmic1;
extern struct platform_device apq8064_device_ssbi_pmic2;
+extern struct platform_device apq8064_device_cache_erp;
extern struct platform_device msm9615_device_uart_gsbi4;
extern struct platform_device msm9615_device_qup_i2c_gsbi5;
diff --git a/arch/arm/mach-msm/include/mach/board.h b/arch/arm/mach-msm/include/mach/board.h
index ae4d632..aaeb5cc 100644
--- a/arch/arm/mach-msm/include/mach/board.h
+++ b/arch/arm/mach-msm/include/mach/board.h
@@ -351,6 +351,7 @@
struct msm_panel_common_pdata {
uintptr_t hw_revision_addr;
int gpio;
+ bool bl_lock;
int (*backlight_level)(int level, int max, int min);
int (*pmic_backlight)(int level);
int (*panel_num)(void);
diff --git a/arch/arm/mach-msm/mpm-8625.c b/arch/arm/mach-msm/mpm-8625.c
index 63de944..8ef7d61 100644
--- a/arch/arm/mach-msm/mpm-8625.c
+++ b/arch/arm/mach-msm/mpm-8625.c
@@ -352,6 +352,7 @@
*/
int msm_gic_irq_enter_sleep2(bool modem_wake, int from_idle)
{
+ int i;
if (from_idle && !modem_wake)
return 0;
@@ -370,11 +371,17 @@
}
if (modem_wake) {
- irq_set_irq_type(MSM8625_INT_A9_M2A_6, IRQF_TRIGGER_RISING);
/* save the contents of GIC CPU interface and Distributor */
msm_gic_save();
+ /* Disable all the Interrupts, if we enter from idle pc */
+ if (from_idle) {
+ for (i = 0; (i * 32) < max_irqs; i++)
+ writel_relaxed(0xffffffff, dist_base
+ + GIC_DIST_ENABLE_CLEAR + i * 4);
+ }
+ irq_set_irq_type(MSM8625_INT_A9_M2A_6, IRQF_TRIGGER_RISING);
enable_irq(MSM8625_INT_A9_M2A_6);
- pr_info("%s Good to go for sleep now\n", __func__);
+ pr_debug("%s going for sleep now\n", __func__);
}
return 0;
diff --git a/arch/arm/mach-msm/pm2.c b/arch/arm/mach-msm/pm2.c
index 6dc1859..2691836 100644
--- a/arch/arm/mach-msm/pm2.c
+++ b/arch/arm/mach-msm/pm2.c
@@ -438,40 +438,43 @@
#define APPS_CLK_SLEEP_EN (MSM_APCS_GCC_BASE + 0x020)
#define APPS_PWRDOWN (MSM_ACC0_BASE + 0x01c)
#define APPS_SECOP (MSM_TCSR_BASE + 0x038)
-#else /* defined(CONFIG_ARCH_MSM7X30) */
+#define APPS_STANDBY_CTL NULL
+#else
#define APPS_CLK_SLEEP_EN (MSM_CSR_BASE + 0x11c)
#define APPS_PWRDOWN (MSM_CSR_BASE + 0x440)
#define APPS_STANDBY_CTL (MSM_CSR_BASE + 0x108)
-#endif /* defined(CONFIG_ARCH_MSM7X30) */
+#define APPS_SECOP NULL
+#endif
/*
* Configure hardware registers in preparation for Apps power down.
*/
static void msm_pm_config_hw_before_power_down(void)
{
-#if defined(CONFIG_ARCH_MSM7X30)
- __raw_writel(1, APPS_PWRDOWN);
- mb();
- __raw_writel(4, APPS_SECOP);
- mb();
-#elif defined(CONFIG_ARCH_MSM7X27)
- __raw_writel(0x1f, APPS_CLK_SLEEP_EN);
- mb();
- __raw_writel(1, APPS_PWRDOWN);
- mb();
-#elif defined(CONFIG_ARCH_MSM7x27A)
- __raw_writel(0x7, APPS_CLK_SLEEP_EN);
- mb();
- __raw_writel(1, APPS_PWRDOWN);
- mb();
-#else
- __raw_writel(0x1f, APPS_CLK_SLEEP_EN);
- mb();
- __raw_writel(1, APPS_PWRDOWN);
- mb();
- __raw_writel(0, APPS_STANDBY_CTL);
- mb();
-#endif
+ if (cpu_is_msm7x30() || cpu_is_msm8x55()) {
+ __raw_writel(1, APPS_PWRDOWN);
+ mb();
+ __raw_writel(4, APPS_SECOP);
+ mb();
+ } else if (cpu_is_msm7x27()) {
+ __raw_writel(0x1f, APPS_CLK_SLEEP_EN);
+ mb();
+ __raw_writel(1, APPS_PWRDOWN);
+ mb();
+ } else if (cpu_is_msm7x27a() || cpu_is_msm7x27aa() ||
+ cpu_is_msm7x25a() || cpu_is_msm7x25aa()) {
+ __raw_writel(0x7, APPS_CLK_SLEEP_EN);
+ mb();
+ __raw_writel(1, APPS_PWRDOWN);
+ mb();
+ } else {
+ __raw_writel(0x1f, APPS_CLK_SLEEP_EN);
+ mb();
+ __raw_writel(1, APPS_PWRDOWN);
+ mb();
+ __raw_writel(0, APPS_STANDBY_CTL);
+ mb();
+ }
}
/*
@@ -479,23 +482,18 @@
*/
static void msm_pm_config_hw_after_power_up(void)
{
-#if defined(CONFIG_ARCH_MSM7X30)
- __raw_writel(0, APPS_SECOP);
- mb();
- __raw_writel(0, APPS_PWRDOWN);
- mb();
- msm_spm_reinit();
-#elif defined(CONFIG_ARCH_MSM7x27A)
- __raw_writel(0, APPS_PWRDOWN);
- mb();
- __raw_writel(0, APPS_CLK_SLEEP_EN);
- mb();
-#else
- __raw_writel(0, APPS_PWRDOWN);
- mb();
- __raw_writel(0, APPS_CLK_SLEEP_EN);
- mb();
-#endif
+ if (cpu_is_msm7x30() || cpu_is_msm8x55()) {
+ __raw_writel(0, APPS_SECOP);
+ mb();
+ __raw_writel(0, APPS_PWRDOWN);
+ mb();
+ msm_spm_reinit();
+ } else {
+ __raw_writel(0, APPS_PWRDOWN);
+ mb();
+ __raw_writel(0, APPS_CLK_SLEEP_EN);
+ mb();
+ }
}
/*
@@ -503,16 +501,17 @@
*/
static void msm_pm_config_hw_before_swfi(void)
{
-#if defined(CONFIG_ARCH_QSD8X50)
- __raw_writel(0x1f, APPS_CLK_SLEEP_EN);
- mb();
-#elif defined(CONFIG_ARCH_MSM7X27)
- __raw_writel(0x0f, APPS_CLK_SLEEP_EN);
- mb();
-#elif defined(CONFIG_ARCH_MSM7X27A)
- __raw_writel(0x7, APPS_CLK_SLEEP_EN);
- mb();
-#endif
+ if (cpu_is_qsd8x50()) {
+ __raw_writel(0x1f, APPS_CLK_SLEEP_EN);
+ mb();
+ } else if (cpu_is_msm7x27()) {
+ __raw_writel(0x0f, APPS_CLK_SLEEP_EN);
+ mb();
+ } else if (cpu_is_msm7x27a() || cpu_is_msm7x27aa() ||
+ cpu_is_msm7x25a() || cpu_is_msm7x25aa()) {
+ __raw_writel(0x7, APPS_CLK_SLEEP_EN);
+ mb();
+ }
}
/*
@@ -1785,8 +1784,6 @@
pmd_t *pmd;
unsigned long pmdval;
- if (cpu_is_msm8625())
- return 0;
/* Page table for cores to come back up safely. */
pc_pgd = pgd_alloc(&init_mm);
if (!pc_pgd)
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 362bdbe..7d34bfd 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -122,17 +122,21 @@
if (mrq->data) {
#ifdef CONFIG_MMC_PERF_PROFILING
- diff = ktime_sub(ktime_get(), host->perf.start);
- if (mrq->data->flags == MMC_DATA_READ) {
- host->perf.rbytes_drv +=
+ if (host->perf_enable) {
+ diff = ktime_sub(ktime_get(), host->perf.start);
+ if (mrq->data->flags == MMC_DATA_READ) {
+ host->perf.rbytes_drv +=
+ mrq->data->bytes_xfered;
+ host->perf.rtime_drv =
+ ktime_add(host->perf.rtime_drv,
+ diff);
+ } else {
+ host->perf.wbytes_drv +=
mrq->data->bytes_xfered;
- host->perf.rtime_drv =
- ktime_add(host->perf.rtime_drv, diff);
- } else {
- host->perf.wbytes_drv +=
- mrq->data->bytes_xfered;
- host->perf.wtime_drv =
- ktime_add(host->perf.wtime_drv, diff);
+ host->perf.wtime_drv =
+ ktime_add(host->perf.wtime_drv,
+ diff);
+ }
}
#endif
pr_debug("%s: %d bytes transferred: %d\n",
@@ -210,7 +214,8 @@
mrq->stop->mrq = mrq;
}
#ifdef CONFIG_MMC_PERF_PROFILING
- host->perf.start = ktime_get();
+ if (host->perf_enable)
+ host->perf.start = ktime_get();
#endif
}
mmc_host_clk_hold(host);
diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index 1985745..a162586 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -399,18 +399,23 @@
{
int64_t value;
struct mmc_host *host = dev_get_drvdata(dev);
+
sscanf(buf, "%lld", &value);
+ spin_lock(&host->lock);
if (!value) {
- spin_lock(&host->lock);
memset(&host->perf, 0, sizeof(host->perf));
- spin_unlock(&host->lock);
+ host->perf_enable = false;
+ } else {
+ host->perf_enable = true;
}
+ spin_unlock(&host->lock);
return count;
}
static DEVICE_ATTR(perf, S_IRUGO | S_IWUSR,
show_perf, set_perf);
+
#endif
static struct attribute *dev_attrs[] = {
diff --git a/drivers/mmc/host/msm_sdcc.c b/drivers/mmc/host/msm_sdcc.c
index e91cf3e..69ec647 100644
--- a/drivers/mmc/host/msm_sdcc.c
+++ b/drivers/mmc/host/msm_sdcc.c
@@ -1184,7 +1184,9 @@
{
if (status & MCI_DATACRCFAIL) {
if (!(data->mrq->cmd->opcode == MMC_BUS_TEST_W
- || data->mrq->cmd->opcode == MMC_BUS_TEST_R)) {
+ || data->mrq->cmd->opcode == MMC_BUS_TEST_R
+ || data->mrq->cmd->opcode ==
+ MMC_SEND_TUNING_BLOCK_HS200)) {
pr_err("%s: Data CRC error\n",
mmc_hostname(host->mmc));
pr_err("%s: opcode 0x%.8x\n", __func__,
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 84c3ff5..0865f91 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -82,7 +82,7 @@
config USB_GADGET_VBUS_DRAW
int "Maximum VBUS Power usage (2-500 mA)"
range 2 500
- default 2
+ default 500
help
Some devices need to draw power from USB when they are
configured, perhaps to operate circuitry or to recharge
diff --git a/drivers/usb/gadget/ci13xxx_msm.c b/drivers/usb/gadget/ci13xxx_msm.c
index eb727b8..9f7affc 100644
--- a/drivers/usb/gadget/ci13xxx_msm.c
+++ b/drivers/usb/gadget/ci13xxx_msm.c
@@ -40,7 +40,7 @@
case CI13XXX_CONTROLLER_RESET_EVENT:
dev_dbg(dev, "CI13XXX_CONTROLLER_RESET_EVENT received\n");
writel(0, USB_AHBBURST);
- writel(0, USB_AHBMODE);
+ writel_relaxed(0x08, USB_AHBMODE);
break;
default:
dev_dbg(dev, "unknown ci13xxx_udc event\n");
diff --git a/drivers/usb/gadget/ci13xxx_msm_hsic.c b/drivers/usb/gadget/ci13xxx_msm_hsic.c
index 3736367..95a70d5 100644
--- a/drivers/usb/gadget/ci13xxx_msm_hsic.c
+++ b/drivers/usb/gadget/ci13xxx_msm_hsic.c
@@ -570,7 +570,7 @@
case CI13XXX_CONTROLLER_RESET_EVENT:
dev_dbg(dev, "CI13XXX_CONTROLLER_RESET_EVENT received\n");
writel_relaxed(0, USB_AHBBURST);
- writel_relaxed(0, USB_AHBMODE);
+ writel_relaxed(0x08, USB_AHBMODE);
break;
case CI13XXX_CONTROLLER_CONNECT_EVENT:
dev_dbg(dev, "CI13XXX_CONTROLLER_CONNECT_EVENT received\n");
diff --git a/drivers/usb/host/ehci-msm-hsic.c b/drivers/usb/host/ehci-msm-hsic.c
index 9d1cef7..347711b 100644
--- a/drivers/usb/host/ehci-msm-hsic.c
+++ b/drivers/usb/host/ehci-msm-hsic.c
@@ -596,7 +596,7 @@
/* bursts of unspecified length. */
writel_relaxed(0, USB_AHBBURST);
/* Use the AHB transactor */
- writel_relaxed(0, USB_AHBMODE);
+ writel_relaxed(0x08, USB_AHBMODE);
/* Disable streaming mode and select host mode */
writel_relaxed(0x13, USB_USBMODE);
diff --git a/drivers/usb/host/ehci-msm.c b/drivers/usb/host/ehci-msm.c
index 5649fd0..6a86632 100644
--- a/drivers/usb/host/ehci-msm.c
+++ b/drivers/usb/host/ehci-msm.c
@@ -1,6 +1,6 @@
/* ehci-msm.c - HSUSB Host Controller Driver Implementation
*
- * Copyright (c) 2008-2011, Code Aurora Forum. All rights reserved.
+ * Copyright (c) 2008-2012, Code Aurora Forum. All rights reserved.
*
* Partly derived from ehci-fsl.c and ehci-hcd.c
* Copyright (c) 2000-2004 by David Brownell
@@ -67,7 +67,7 @@
/* bursts of unspecified length. */
writel(0, USB_AHBBURST);
/* Use the AHB transactor */
- writel(0, USB_AHBMODE);
+ writel_relaxed(0x08, USB_AHBMODE);
/* Disable streaming mode and select host mode */
writel(0x13, USB_USBMODE);
diff --git a/drivers/usb/host/ehci-msm2.c b/drivers/usb/host/ehci-msm2.c
index fc43a0d..17fa7b1 100644
--- a/drivers/usb/host/ehci-msm2.c
+++ b/drivers/usb/host/ehci-msm2.c
@@ -515,7 +515,7 @@
msleep(100);
writel_relaxed(0x0, USB_AHBBURST);
- writel_relaxed(0x00, USB_AHBMODE);
+ writel_relaxed(0x08, USB_AHBMODE);
/* Ensure that RESET operation is completed before turning off clock */
mb();
@@ -703,7 +703,7 @@
/* bursts of unspecified length. */
writel_relaxed(0, USB_AHBBURST);
/* Use the AHB transactor */
- writel_relaxed(0, USB_AHBMODE);
+ writel_relaxed(0x08, USB_AHBMODE);
/* Disable streaming mode and select host mode */
writel_relaxed(0x13, USB_USBMODE);
diff --git a/drivers/usb/otg/msm_otg.c b/drivers/usb/otg/msm_otg.c
index e596b3f..bf3c6d5 100644
--- a/drivers/usb/otg/msm_otg.c
+++ b/drivers/usb/otg/msm_otg.c
@@ -515,7 +515,7 @@
/* select ULPI phy */
writel_relaxed(0x80000000, USB_PORTSC);
writel_relaxed(0x0, USB_AHBBURST);
- writel_relaxed(0x00, USB_AHBMODE);
+ writel_relaxed(0x08, USB_AHBMODE);
return 0;
}
diff --git a/drivers/video/msm/mdp.c b/drivers/video/msm/mdp.c
index 232faa0..6c05833 100644
--- a/drivers/video/msm/mdp.c
+++ b/drivers/video/msm/mdp.c
@@ -2032,6 +2032,8 @@
rc = -ENODEV;
goto mdp_probe_err;
}
+ INIT_WORK(&mfd->dma_update_worker,
+ mdp_lcd_update_workqueue_handler);
#endif
mdp_config_vsync(mfd);
break;
diff --git a/drivers/video/msm/mipi_NT35510.c b/drivers/video/msm/mipi_NT35510.c
index 930b4e9..a62d1ac 100644
--- a/drivers/video/msm/mipi_NT35510.c
+++ b/drivers/video/msm/mipi_NT35510.c
@@ -18,6 +18,7 @@
static struct msm_panel_common_pdata *mipi_nt35510_pdata;
static struct dsi_buf nt35510_tx_buf;
static struct dsi_buf nt35510_rx_buf;
+spinlock_t bl_spinlock;
#define NT35510_SLEEP_OFF_DELAY 150
#define NT35510_DISPLAY_ON_DELAY 150
@@ -523,8 +524,16 @@
static void mipi_nt35510_set_backlight(struct msm_fb_data_type *mfd)
{
- /* Add backlight changes later*/
- return;
+ int bl_level;
+ unsigned long flags;
+ bl_level = mfd->bl_level;
+
+ if (mipi_nt35510_pdata->bl_lock) {
+ spin_lock_irqsave(&bl_spinlock, flags);
+ mipi_nt35510_pdata->pmic_backlight(bl_level);
+ spin_unlock_irqrestore(&bl_spinlock, flags);
+ } else
+ mipi_nt35510_pdata->pmic_backlight(bl_level);
}
static struct msm_fb_panel_data nt35510_panel_data = {
@@ -552,6 +561,8 @@
return -ENODEV;
ch_used[channel] = TRUE;
+ if (mipi_nt35510_pdata->bl_lock)
+ spin_lock_init(&bl_spinlock);
ret = mipi_nt35510_lcd_init();
if (ret) {
@@ -564,7 +575,6 @@
return -ENOMEM;
nt35510_panel_data.panel_info = *pinfo;
-
ret = platform_device_add_data(pdev, &nt35510_panel_data,
sizeof(nt35510_panel_data));
if (ret) {
diff --git a/drivers/video/msm/mipi_NT35510_cmd_wvga_pt.c b/drivers/video/msm/mipi_NT35510_cmd_wvga_pt.c
index 2c4ee3e..f052e93 100644
--- a/drivers/video/msm/mipi_NT35510_cmd_wvga_pt.c
+++ b/drivers/video/msm/mipi_NT35510_cmd_wvga_pt.c
@@ -56,7 +56,7 @@
pinfo.lcdc.border_clr = 0; /* blk */
pinfo.lcdc.underflow_clr = 0xff; /* blue */
pinfo.lcdc.hsync_skew = 0;
- pinfo.bl_max = 100;
+ pinfo.bl_max = 31;
pinfo.bl_min = 1;
pinfo.fb_num = 2;
diff --git a/drivers/video/msm/mipi_NT35510_video_wvga_pt.c b/drivers/video/msm/mipi_NT35510_video_wvga_pt.c
index 82e03b2..4e97d99 100644
--- a/drivers/video/msm/mipi_NT35510_video_wvga_pt.c
+++ b/drivers/video/msm/mipi_NT35510_video_wvga_pt.c
@@ -59,7 +59,7 @@
delayed from VSYNC active edge */
pinfo.lcdc.hsync_skew = 0;
pinfo.clk_rate = 499000000;
- pinfo.bl_max = 100; /*16; CHECK THIS!!!*/
+ pinfo.bl_max = 31;
pinfo.bl_min = 1;
pinfo.fb_num = 2;
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 46f71a1..e19225e 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -352,6 +352,7 @@
ktime_t wtime_drv; /* Wr time MMC Host */
ktime_t start;
} perf;
+ bool perf_enable;
#endif
struct mmc_async_req *areq; /* active async req */