Merge changes Id6a4cc88,I5b3ae2c8 into msm-3.4
* changes:
msm: board-qrd7627a: Add gpio regulator for ov8825 sensor
board-msm7627a: Display: Add support for shared GPIO
diff --git a/arch/arm/mach-msm/board-msm7627a-display.c b/arch/arm/mach-msm/board-msm7627a-display.c
index bd38f30..c2b7b9d 100644
--- a/arch/arm/mach-msm/board-msm7627a-display.c
+++ b/arch/arm/mach-msm/board-msm7627a-display.c
@@ -1140,6 +1140,7 @@
static int mipi_dsi_panel_qrd3_power(int on)
{
int rc = 0;
+ static struct regulator *gpio_reg_2p85v, *gpio_reg_1p8v;
if (!qrd3_dsi_gpio_initialized) {
rc = gpio_request(GPIO_QRD3_LCD_BACKLIGHT_EN,
@@ -1147,47 +1148,21 @@
if (rc < 0)
return rc;
- rc = gpio_request(GPIO_QRD3_LCD_EXT_2V85_EN,
- "qrd3_gpio_ext_2v85_en");
- if (rc < 0)
- return rc;
-
- rc = gpio_tlmm_config(GPIO_CFG(GPIO_QRD3_LCD_EXT_2V85_EN, 0,
- GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA),
- GPIO_CFG_ENABLE);
- if (rc < 0) {
- pr_err("failed QRD3 GPIO_QRD3_LCD_EXT_2V85_EN tlmm config\n");
- return rc;
+ gpio_reg_2p85v = regulator_get(&msm8625_mipi_dsi_device.dev,
+ "lcd_vdd");
+ if (IS_ERR(gpio_reg_2p85v)) {
+ pr_err("%s:ext_2p85v regulator get failed", __func__);
+ return -EINVAL;
}
- rc = gpio_direction_output(GPIO_QRD3_LCD_EXT_2V85_EN, 1);
- if (rc < 0) {
- pr_err("failed to enable external 2V85\n");
- gpio_free(GPIO_QRD3_LCD_EXT_2V85_EN);
- return rc;
+ gpio_reg_1p8v = regulator_get(&msm8625_mipi_dsi_device.dev,
+ "lcd_vddi");
+ if (IS_ERR(gpio_reg_1p8v)) {
+ pr_err("%s:ext_1p8v regulator get failed", __func__);
+ return -EINVAL;
}
- rc = gpio_request(GPIO_QRD3_LCD_EXT_1V8_EN,
- "qrd3_gpio_ext_1v8_en");
- if (rc < 0)
- return rc;
-
- rc = gpio_tlmm_config(GPIO_CFG(GPIO_QRD3_LCD_EXT_1V8_EN, 0,
- GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA),
- GPIO_CFG_ENABLE);
- if (rc < 0) {
- pr_err("failed QRD3 GPIO_QRD3_LCD_EXT_1V8_EN tlmm config\n");
- return rc;
- }
-
- rc = gpio_direction_output(GPIO_QRD3_LCD_EXT_1V8_EN, 1);
- if (rc < 0) {
- pr_err("failed to enable external 1v8\n");
- gpio_free(GPIO_QRD3_LCD_EXT_1V8_EN);
- return rc;
- }
-
- qrd3_dsi_gpio_initialized = 1;
+ qrd3_dsi_gpio_initialized = 1;
}
if (on) {
@@ -1204,7 +1179,7 @@
gpio_free(GPIO_QRD3_LCD_BACKLIGHT_EN);
return rc;
}
-
+ /*Toggle Backlight GPIO*/
gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, 1);
udelay(190);
gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, 0);
@@ -1212,18 +1187,17 @@
gpio_set_value_cansleep(GPIO_QRD3_LCD_BACKLIGHT_EN, 1);
/* 1 wire mode starts from this low to high transition */
udelay(50);
- } else {
- gpio_tlmm_config(GPIO_CFG(GPIO_QRD3_LCD_BACKLIGHT_EN, 0,
- GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA),
- GPIO_CFG_DISABLE);
- }
- gpio_set_value_cansleep(GPIO_QRD3_LCD_EXT_2V85_EN, !!on);
- gpio_set_value_cansleep(GPIO_QRD3_LCD_EXT_1V8_EN, !!on);
+ /*Enable EXT_2.85 and 1.8 regulators*/
+ rc = regulator_enable(gpio_reg_2p85v);
+ if (rc < 0)
+ pr_err("%s: reg enable failed\n", __func__);
+ rc = regulator_enable(gpio_reg_1p8v);
+ if (rc < 0)
+ pr_err("%s: reg enable failed\n", __func__);
- if (on) {
+ /*Configure LCD Bridge reset*/
rc = gpio_tlmm_config(qrd3_mipi_dsi_gpio[0], GPIO_CFG_ENABLE);
-
if (rc < 0) {
pr_err("Failed to enable LCD Bridge reset enable\n");
return rc;
@@ -1237,18 +1211,32 @@
return rc;
}
+ /*Toggle Bridge Reset GPIO*/
msleep(20);
gpio_set_value_cansleep(GPIO_QRD3_LCD_BRDG_RESET_N, 0);
msleep(20);
gpio_set_value_cansleep(GPIO_QRD3_LCD_BRDG_RESET_N, 1);
msleep(20);
+
} else {
+ gpio_tlmm_config(GPIO_CFG(GPIO_QRD3_LCD_BACKLIGHT_EN, 0,
+ GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA),
+ GPIO_CFG_DISABLE);
+
gpio_tlmm_config(GPIO_CFG(GPIO_QRD3_LCD_BRDG_RESET_N, 0,
GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA),
GPIO_CFG_DISABLE);
+
+ rc = regulator_disable(gpio_reg_2p85v);
+ if (rc < 0)
+ pr_err("%s: reg disable failed\n", __func__);
+ rc = regulator_disable(gpio_reg_1p8v);
+ if (rc < 0)
+ pr_err("%s: reg disable failed\n", __func__);
+
}
- return rc;
+ return rc;
}
static int mipi_dsi_panel_power(int on)
diff --git a/arch/arm/mach-msm/board-qrd7627a.c b/arch/arm/mach-msm/board-qrd7627a.c
index 761a3c9..c8f8b10 100644
--- a/arch/arm/mach-msm/board-qrd7627a.c
+++ b/arch/arm/mach-msm/board-qrd7627a.c
@@ -652,14 +652,16 @@
#define GPIO_VREG_ID_EXT_1P8V 1
static struct regulator_consumer_supply vreg_consumers_EXT_2P85V[] = {
- REGULATOR_SUPPLY("cam0_avdd", "0-006c"),
- REGULATOR_SUPPLY("cam1_avdd", "0-0078"),
+ REGULATOR_SUPPLY("cam_ov5647_avdd", "0-006c"),
+ REGULATOR_SUPPLY("cam_ov7692_avdd", "0-0078"),
+ REGULATOR_SUPPLY("cam_ov8825_avdd", "0-000d"),
REGULATOR_SUPPLY("lcd_vdd", "mipi_dsi.1"),
};
static struct regulator_consumer_supply vreg_consumers_EXT_1P8V[] = {
- REGULATOR_SUPPLY("cam0_vdd", "0-006c"),
- REGULATOR_SUPPLY("cam1_vdd", "0-0078"),
+ REGULATOR_SUPPLY("cam_ov5647_vdd", "0-006c"),
+ REGULATOR_SUPPLY("cam_ov7692_vdd", "0-0078"),
+ REGULATOR_SUPPLY("cam_ov8825_vdd", "0-000d"),
REGULATOR_SUPPLY("lcd_vddi", "mipi_dsi.1"),
};
diff --git a/arch/arm/mach-msm/devices-msm7x27a.c b/arch/arm/mach-msm/devices-msm7x27a.c
index 4654606..adc9169 100644
--- a/arch/arm/mach-msm/devices-msm7x27a.c
+++ b/arch/arm/mach-msm/devices-msm7x27a.c
@@ -1445,7 +1445,7 @@
},
};
-static struct platform_device msm8625_mipi_dsi_device = {
+struct platform_device msm8625_mipi_dsi_device = {
.name = "mipi_dsi",
.id = 1,
.num_resources = ARRAY_SIZE(msm8625_mipi_dsi_resources),
diff --git a/arch/arm/mach-msm/devices.h b/arch/arm/mach-msm/devices.h
index f1d7aa0..2b2fcc7 100644
--- a/arch/arm/mach-msm/devices.h
+++ b/arch/arm/mach-msm/devices.h
@@ -300,6 +300,7 @@
extern struct platform_device msm_kgsl_2d1;
extern struct platform_device msm_mipi_dsi1_device;
+extern struct platform_device msm8625_mipi_dsi_device;
extern struct platform_device msm_lvds_device;
extern struct platform_device msm_ebi2_lcdc_device;