aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xarch/arm/mach-exynos/include/mach/gpio-rev00-t0.h9
-rw-r--r--arch/arm/mach-exynos/include/mach/gpio-rev00-t0ctc.h11
-rw-r--r--arch/arm/mach-exynos/include/mach/gpio-rev00-t0cu-duos.h4
-rw-r--r--arch/arm/mach-exynos/midas-lcd.c22
-rw-r--r--drivers/video/samsung/s3cfb_ea8061.c67
-rw-r--r--drivers/video/samsung/s3cfb_ops.c11
-rw-r--r--drivers/video/samsung/s3cfb_s6evr02.c15
7 files changed, 77 insertions, 62 deletions
diff --git a/arch/arm/mach-exynos/include/mach/gpio-rev00-t0.h b/arch/arm/mach-exynos/include/mach/gpio-rev00-t0.h
index 2095f64..bb15f4d 100755
--- a/arch/arm/mach-exynos/include/mach/gpio-rev00-t0.h
+++ b/arch/arm/mach-exynos/include/mach/gpio-rev00-t0.h
@@ -192,9 +192,6 @@ extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config);
#endif
/* Others */
-#define GPIO_LCD_18V_EN EXYNOS4_GPC0(1)
-#define GPIO_LCD_22V_EN_00 EXYNOS4_GPC0(1) /* obsoleted */
-
#define GPIO_OTG_EN EXYNOS4_GPF0(7)
#define GPIO_OLED_ID EXYNOS4_GPF1(0)
@@ -240,7 +237,6 @@ extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config);
/* rev0.0 */
#define GPIO_TSP_LDO_EN EXYNOS4212_GPJ0(6)
/* GPIO_MHL_SEL EXYNOS4212_GPJ0(5) */
-/* GPIO_LCD_22V_EN EXYNOS4_GPC0(1) */
/* Modem Interface GPIOs - M0 HSIC */
@@ -340,6 +336,11 @@ extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config);
#define GPIO_ISDBT_SPI_CS EXYNOS4_GPC1(2)
#define GPIO_ISDBT_SPI_MISO EXYNOS4_GPC1(3)
#define GPIO_ISDBT_SPI_MOSI EXYNOS4_GPC1(4)
+
+#if defined(CONFIG_ISDBT_ANT_DET)
+#define GPIO_ISDBT_ANT_DET EXYNOS4_GPL2(4)
+#define GPIO_ISDBT_IRQ_ANT_DET gpio_to_irq(GPIO_ISDBT_ANT_DET)
+#endif
#endif
/*BARCODE_EMUL*/
diff --git a/arch/arm/mach-exynos/include/mach/gpio-rev00-t0ctc.h b/arch/arm/mach-exynos/include/mach/gpio-rev00-t0ctc.h
index 61315f8..a4d0f2b 100644
--- a/arch/arm/mach-exynos/include/mach/gpio-rev00-t0ctc.h
+++ b/arch/arm/mach-exynos/include/mach/gpio-rev00-t0ctc.h
@@ -144,10 +144,9 @@ extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config);
#define GPIO_MHL_WAKE_UP EXYNOS4212_GPJ1(4)
#define MHL_INT_IRQ gpio_to_irq(GPIO_MHL_INT)
#define MHL_WAKEUP_IRQ gpio_to_irq(GPIO_MHL_WAKE_UP)
-#endif
-
#define GPIO_HDMI_EN EXYNOS4_GPL0(4)
#define GPIO_HDMI_HPD EXYNOS4_GPX3(7)
+#endif
/* Touch key */
#define GPIO_3_TOUCH_SCL EXYNOS4_GPL0(1)
@@ -192,9 +191,6 @@ extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config);
#endif
/* Others */
-#define GPIO_LCD_18V_EN EXYNOS4_GPC0(1)
-#define GPIO_LCD_22V_EN_00 EXYNOS4_GPC0(1) /* obsoleted */
-
#define GPIO_OTG_EN EXYNOS4_GPF0(7)
#define GPIO_OLED_ID EXYNOS4_GPF1(0)
@@ -227,7 +223,6 @@ extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config);
/* rev0.0 */
#define GPIO_TSP_LDO_EN EXYNOS4212_GPJ0(6)
/* GPIO_MHL_SEL EXYNOS4212_GPJ0(5) */
-/* GPIO_LCD_22V_EN EXYNOS4_GPC0(1) */
#if !defined(CONFIG_MACH_T0_CHN_CTC)
@@ -343,13 +338,13 @@ extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config);
#define GPIO_USB_BOOT_EN_REV06 EXYNOS4_GPF2(2)
#define GPIO_BOOT_SW_SEL_REV06 EXYNOS4_GPF3(4)
-#define GPIO_IPC_SLAVE_WAKEUP EXYNOS4_GPC0(3)
+#define GPIO_IPC_SLAVE_WAKEUP EXYNOS4_GPC0(0)
#define GPIO_IPC_HOST_WAKEUP EXYNOS4_GPC0(0)
#define GPIO_CP_DUMP_INT EXYNOS4_GPX1(2)
#define GPIO_CP_MSM_PWRON EXYNOS4_GPL2(5)
#define GPIO_CP_MSM_RST EXYNOS4_GPL2(1)
-#define GPIO_CP_MSM_PMU_RST EXYNOS4_GPC0(0)
+#define GPIO_CP_MSM_PMU_RST EXYNOS4_GPC0(3)
#define GPIO_CP_MSM_DUMP EXYNOS4_GPX1(2)
#define GPIO_MSM_PHONE_ACTIVE EXYNOS4_GPX1(6)
diff --git a/arch/arm/mach-exynos/include/mach/gpio-rev00-t0cu-duos.h b/arch/arm/mach-exynos/include/mach/gpio-rev00-t0cu-duos.h
index e477c7e..6928c60 100644
--- a/arch/arm/mach-exynos/include/mach/gpio-rev00-t0cu-duos.h
+++ b/arch/arm/mach-exynos/include/mach/gpio-rev00-t0cu-duos.h
@@ -185,9 +185,6 @@ extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config);
#endif
/* Others */
-#define GPIO_LCD_18V_EN EXYNOS4_GPC0(1)
-#define GPIO_LCD_22V_EN_00 EXYNOS4_GPC0(1) /* obsoleted */
-
#define GPIO_OTG_EN EXYNOS4_GPF0(7)
#define GPIO_OLED_ID EXYNOS4_GPF1(0)
@@ -227,7 +224,6 @@ extern int s3c_gpio_slp_setpull_updown(unsigned int pin, unsigned int config);
/* rev0.0 */
#define GPIO_TSP_LDO_EN EXYNOS4212_GPJ0(6)
/* GPIO_MHL_SEL EXYNOS4212_GPJ0(5) */
-/* GPIO_LCD_22V_EN EXYNOS4_GPC0(1) */
/* Modem Interface GPIOs - M0 HSIC */
diff --git a/arch/arm/mach-exynos/midas-lcd.c b/arch/arm/mach-exynos/midas-lcd.c
index ad722a6..8612f62 100644
--- a/arch/arm/mach-exynos/midas-lcd.c
+++ b/arch/arm/mach-exynos/midas-lcd.c
@@ -518,7 +518,7 @@ static struct s3cfb_lcd ea8061 = {
.p_width = 74,
.p_height = 131,
.bpp = 24,
- .freq = 60,
+ .freq = 58,
/* minumun value is 0 except for wr_act time. */
.cpu_timing = {
@@ -530,7 +530,7 @@ static struct s3cfb_lcd ea8061 = {
.timing = {
.h_fp = 52,
- .h_bp = 96,
+ .h_bp = 121,
.h_sw = 4,
.v_fp = 13,
.v_fpe = 1,
@@ -598,7 +598,7 @@ static struct s3cfb_lcd ea8061 = {
.p_width = 64,
.p_height = 106,
.bpp = 24,
- .freq = 60,
+ .freq = 58,
/* minumun value is 0 except for wr_act time. */
.cpu_timing = {
@@ -610,7 +610,7 @@ static struct s3cfb_lcd ea8061 = {
.timing = {
.h_fp = 52,
- .h_bp = 96,
+ .h_bp = 121,
.h_sw = 4,
.v_fp = 13,
.v_fpe = 1,
@@ -819,9 +819,11 @@ static void lcd_cfg_gpio(void)
s3c_gpio_cfgpin(GPIO_MLCD_RST, S3C_GPIO_OUTPUT);
s3c_gpio_setpull(GPIO_MLCD_RST, S3C_GPIO_PULL_NONE);
+#if defined(GPIO_LCD_22V_EN_00)
/* LCD_EN */
s3c_gpio_cfgpin(GPIO_LCD_22V_EN_00, S3C_GPIO_OUTPUT);
s3c_gpio_setpull(GPIO_LCD_22V_EN_00, S3C_GPIO_PULL_NONE);
+#endif
return;
}
@@ -899,15 +901,18 @@ static int lcd_power_on(void *ld, int enable)
return -EPERM;
}
+#if defined(GPIO_LCD_22V_EN_00)
err = gpio_request(GPIO_LCD_22V_EN_00, "LCD_EN");
if (err) {
printk(KERN_ERR "failed to request GPM4[4] for "
"LCD_2.2V_EN control\n");
return -EPERM;
}
-
+#endif
if (enable) {
+#if defined(GPIO_LCD_22V_EN_00)
gpio_set_value(GPIO_LCD_22V_EN_00, GPIO_LEVEL_HIGH);
+#endif
#if defined(CONFIG_MACH_T0)
regulator = regulator_get(NULL, "vcc_1.8v_lcd");
@@ -955,16 +960,19 @@ static int lcd_power_on(void *ld, int enable)
regulator_force_disable(regulator);
regulator_put(regulator);
#endif
+#if defined(GPIO_LCD_22V_EN_00)
gpio_set_value(GPIO_LCD_22V_EN_00, GPIO_LEVEL_LOW);
+#endif
gpio_set_value(GPIO_MLCD_RST, 0);
}
out:
/* Release GPIO */
gpio_free(GPIO_MLCD_RST);
+#if defined(GPIO_LCD_22V_EN_00)
gpio_free(GPIO_LCD_22V_EN_00);
-return 0;
-
+#endif
+ return 0;
}
#endif
diff --git a/drivers/video/samsung/s3cfb_ea8061.c b/drivers/video/samsung/s3cfb_ea8061.c
index 5edeaaf..e48ba4f 100644
--- a/drivers/video/samsung/s3cfb_ea8061.c
+++ b/drivers/video/samsung/s3cfb_ea8061.c
@@ -82,11 +82,12 @@ struct lcd_info {
unsigned char b3[GAMMA_MAX][ARRAY_SIZE(SEQ_LTPS_AID)];
#endif
unsigned int irq;
+ unsigned int gpio;
unsigned int connected;
-#if defined(GPIO_OLED_DET)
- struct delayed_work oled_detection;
- unsigned int oled_detection_count;
+#if defined(GPIO_ERR_FG)
+ struct delayed_work err_fg_detection;
+ unsigned int err_fg_detection_count;
#endif
struct dsim_global *dsim;
@@ -114,20 +115,20 @@ static unsigned int aid_candela_table[GAMMA_MAX] = {
extern void (*lcd_early_suspend)(void);
extern void (*lcd_late_resume)(void);
-#if defined(GPIO_OLED_DET)
-static void oled_detection_work(struct work_struct *work)
+#if defined(GPIO_ERR_FG)
+static void err_fg_detection_work(struct work_struct *work)
{
struct lcd_info *lcd =
- container_of(work, struct lcd_info, oled_detection.work);
+ container_of(work, struct lcd_info, err_fg_detection.work);
- int oled_det_level = gpio_get_value(GPIO_OLED_DET);
+ int oled_det_level = gpio_get_value(lcd->gpio);
- dev_info(&lcd->ld->dev, "%s, %d, %d\n", __func__, lcd->oled_detection_count, oled_det_level);
+ dev_info(&lcd->ld->dev, "%s, %d, %d\n", __func__, lcd->err_fg_detection_count, oled_det_level);
if (!oled_det_level) {
- if (lcd->oled_detection_count < 10) {
- schedule_delayed_work(&lcd->oled_detection, HZ/8);
- lcd->oled_detection_count++;
+ if (lcd->err_fg_detection_count < 10) {
+ schedule_delayed_work(&lcd->err_fg_detection, HZ/8);
+ lcd->err_fg_detection_count++;
set_dsim_hs_clk_toggle_count(15);
} else
set_dsim_hs_clk_toggle_count(0);
@@ -136,14 +137,14 @@ static void oled_detection_work(struct work_struct *work)
}
-static irqreturn_t oled_detection_int(int irq, void *_lcd)
+static irqreturn_t err_fg_detection_int(int irq, void *_lcd)
{
struct lcd_info *lcd = _lcd;
dev_info(&lcd->ld->dev, "%s\n", __func__);
- lcd->oled_detection_count = 0;
- schedule_delayed_work(&lcd->oled_detection, HZ/16);
+ lcd->err_fg_detection_count = 0;
+ schedule_delayed_work(&lcd->err_fg_detection, HZ/16);
return IRQ_HANDLED;
}
@@ -390,7 +391,7 @@ static int ea8061_set_acl(struct lcd_info *lcd, u8 force)
break;
}
- if ((!lcd->acl_enable) || (lcd->auto_brightness >= 5))
+ if (!lcd->acl_enable)
level = ACL_STATUS_0P;
if (force || lcd->current_acl != ACL_CUTOFF_TABLE[level][1]) {
@@ -894,7 +895,7 @@ static int ea8061_check_fb(struct lcd_device *ld, struct fb_info *fb)
struct s3cfb_window *win = fb->par;
struct lcd_info *lcd = lcd_get_data(ld);
- dev_info(&lcd->ld->dev, "%s, fb%d\n", __func__, win->id);
+ //dev_info(&lcd->ld->dev, "%s, fb%d\n", __func__, win->id);
return 0;
}
@@ -1043,13 +1044,13 @@ void ea8061_early_suspend(void)
dev_info(&lcd->ld->dev, "+%s\n", __func__);
-#if defined(GPIO_OLED_DET)
+#if defined(GPIO_ERR_FG)
disable_irq(lcd->irq);
- gpio_request(GPIO_OLED_DET, "OLED_DET");
- s3c_gpio_cfgpin(GPIO_OLED_DET, S3C_GPIO_OUTPUT);
- s3c_gpio_setpull(GPIO_OLED_DET, S3C_GPIO_PULL_NONE);
- gpio_direction_output(GPIO_OLED_DET, GPIO_LEVEL_LOW);
- gpio_free(GPIO_OLED_DET);
+ gpio_request(lcd->gpio, "ERR_FG");
+ s3c_gpio_cfgpin(lcd->gpio, S3C_GPIO_OUTPUT);
+ s3c_gpio_setpull(lcd->gpio, S3C_GPIO_PULL_NONE);
+ gpio_direction_output(lcd->gpio, GPIO_LEVEL_LOW);
+ gpio_free(lcd->gpio);
#endif
ea8061_power(lcd, FB_BLANK_POWERDOWN);
@@ -1065,9 +1066,9 @@ void ea8061_late_resume(void)
dev_info(&lcd->ld->dev, "+%s\n", __func__);
ea8061_power(lcd, FB_BLANK_UNBLANK);
-#if defined(GPIO_OLED_DET)
- s3c_gpio_cfgpin(GPIO_OLED_DET, S3C_GPIO_SFN(0xf));
- s3c_gpio_setpull(GPIO_OLED_DET, S3C_GPIO_PULL_NONE);
+#if defined(GPIO_ERR_FG)
+ s3c_gpio_cfgpin(lcd->gpio, S3C_GPIO_SFN(0xf));
+ s3c_gpio_setpull(lcd->gpio, S3C_GPIO_PULL_NONE);
enable_irq(lcd->irq);
#endif
@@ -1210,17 +1211,19 @@ static int ea8061_probe(struct device *dev)
update_brightness(lcd, 1);
#endif
-#if defined(GPIO_OLED_DET)
+#if defined(GPIO_ERR_FG)
if (lcd->connected) {
- INIT_DELAYED_WORK(&lcd->oled_detection, oled_detection_work);
+ INIT_DELAYED_WORK(&lcd->err_fg_detection, err_fg_detection_work);
- lcd->irq = gpio_to_irq(GPIO_OLED_DET);
+ /* lcd->gpio = GPIO_OLED_DET; */
+ lcd->gpio = GPIO_ERR_FG;
+ lcd->irq = gpio_to_irq(lcd->gpio);
- s3c_gpio_cfgpin(GPIO_OLED_DET, S3C_GPIO_SFN(0xf));
- s3c_gpio_setpull(GPIO_OLED_DET, S3C_GPIO_PULL_NONE);
+ s3c_gpio_cfgpin(lcd->gpio, S3C_GPIO_SFN(0xf));
+ s3c_gpio_setpull(lcd->gpio, S3C_GPIO_PULL_NONE);
- if (request_irq(lcd->irq, oled_detection_int,
- IRQF_TRIGGER_FALLING, "oled_detection", lcd))
+ if (request_irq(lcd->irq, err_fg_detection_int,
+ IRQF_TRIGGER_FALLING, "err_fg_detection", lcd))
pr_err("failed to reqeust irq. %d\n", lcd->irq);
}
#endif
diff --git a/drivers/video/samsung/s3cfb_ops.c b/drivers/video/samsung/s3cfb_ops.c
index 759fb63..8d5739d 100644
--- a/drivers/video/samsung/s3cfb_ops.c
+++ b/drivers/video/samsung/s3cfb_ops.c
@@ -196,8 +196,14 @@ int s3cfb_enable_window(struct s3cfb_global *fbdev, int id)
if (CONFIG_FB_S5P_DEFAULT_WINDOW == 3 &&
id == CONFIG_FB_S5P_DEFAULT_WINDOW-1)
dev_lock(fbdev->bus_dev, fbdev->dev, 267160);
- else if (id != CONFIG_FB_S5P_DEFAULT_WINDOW)
- dev_lock(fbdev->bus_dev, fbdev->dev, 133133);
+ else if (id != CONFIG_FB_S5P_DEFAULT_WINDOW) {
+ if (id == CONFIG_FB_S5P_DEFAULT_WINDOW-1)
+ dev_lock(fbdev->bus_dev, fbdev->dev, 267160);
+ else if (id == 3)
+ dev_lock(fbdev->bus_dev, fbdev->dev, 267160);
+ else
+ dev_lock(fbdev->bus_dev, fbdev->dev, 133133);
+ }
#endif
#endif
@@ -1299,6 +1305,7 @@ static u32 s3c_fb_padding(int format)
case S3C_FB_PIXEL_FORMAT_RGB_565:
case S3C_FB_PIXEL_FORMAT_RGBA_8888:
+ case S3C_FB_PIXEL_FORMAT_BGRA_8888:
case S3C_FB_PIXEL_FORMAT_RGBA_5551:
case S3C_FB_PIXEL_FORMAT_RGBA_4444:
return 0;
diff --git a/drivers/video/samsung/s3cfb_s6evr02.c b/drivers/video/samsung/s3cfb_s6evr02.c
index 41ff0c2..dd39cf0 100644
--- a/drivers/video/samsung/s3cfb_s6evr02.c
+++ b/drivers/video/samsung/s3cfb_s6evr02.c
@@ -446,7 +446,7 @@ static int s6evr02_set_acl(struct lcd_info *lcd, u8 force)
break;
}
- if ((!lcd->acl_enable) || (lcd->auto_brightness >= 5))
+ if (!lcd->acl_enable)
level = ACL_STATUS_0P;
if (force || lcd->current_acl != ACL_CUTOFF_TABLE[level][1]) {
@@ -736,6 +736,9 @@ static int update_brightness(struct lcd_info *lcd, u8 force)
brightness = lcd->bd->props.brightness;
+ if (unlikely(!lcd->auto_brightness && brightness > 250))
+ brightness = 250;
+
lcd->bl = get_backlight_level_from_brightness(brightness);
if ((force) || ((lcd->ldi_enable) && (lcd->current_bl != lcd->bl))) {
@@ -1109,10 +1112,12 @@ void s6evr02_late_resume(void)
s3c_gpio_setpull(GPIO_ERR_FG, S3C_GPIO_PULL_NONE);
enable_irq(lcd->irq);
#endif
-#if defined(GPIO_OLED_DET)
- s3c_gpio_cfgpin(GPIO_OLED_DET, S3C_GPIO_SFN(0xf));
- s3c_gpio_setpull(GPIO_OLED_DET, S3C_GPIO_PULL_NONE);
- enable_irq(gpio_to_irq(GPIO_OLED_DET));
+#if defined(GPIO_OLED_DET) && defined(GPIO_OLED_ID)
+ if (gpio_get_value(GPIO_OLED_ID)) {
+ s3c_gpio_cfgpin(GPIO_OLED_DET, S3C_GPIO_SFN(0xf));
+ s3c_gpio_setpull(GPIO_OLED_DET, S3C_GPIO_PULL_NONE);
+ enable_irq(gpio_to_irq(GPIO_OLED_DET));
+ }
#endif
dev_info(&lcd->ld->dev, "-%s\n", __func__);