diff options
-rwxr-xr-x | arch/arm/mach-exynos/include/mach/gpio-rev00-t0.h | 9 | ||||
-rw-r--r-- | arch/arm/mach-exynos/include/mach/gpio-rev00-t0ctc.h | 11 | ||||
-rw-r--r-- | arch/arm/mach-exynos/include/mach/gpio-rev00-t0cu-duos.h | 4 | ||||
-rw-r--r-- | arch/arm/mach-exynos/midas-lcd.c | 22 | ||||
-rw-r--r-- | drivers/video/samsung/s3cfb_ea8061.c | 67 | ||||
-rw-r--r-- | drivers/video/samsung/s3cfb_ops.c | 11 | ||||
-rw-r--r-- | drivers/video/samsung/s3cfb_s6evr02.c | 15 |
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__); |