diff options
Diffstat (limited to 'drivers/video/samsung/s6dr171.c')
-rw-r--r-- | drivers/video/samsung/s6dr171.c | 146 |
1 files changed, 76 insertions, 70 deletions
diff --git a/drivers/video/samsung/s6dr171.c b/drivers/video/samsung/s6dr171.c index 167f658..868c006 100644 --- a/drivers/video/samsung/s6dr171.c +++ b/drivers/video/samsung/s6dr171.c @@ -79,7 +79,10 @@ struct lcd_info { struct dsim_global *dsim; }; -static int s6e8ax0_write(struct lcd_info *lcd, const unsigned char *seq, int len) +extern void (*lcd_early_suspend)(void); +extern void (*lcd_late_resume)(void); + +static int s6dr171_write(struct lcd_info *lcd, const unsigned char *seq, int len) { int size; const unsigned char *wbuf; @@ -104,7 +107,7 @@ static int s6e8ax0_write(struct lcd_info *lcd, const unsigned char *seq, int len return 0; } -static int _s6e8ax0_read(struct lcd_info *lcd, const u8 addr, u16 count, u8 *buf) +static int _s6dr171_read(struct lcd_info *lcd, const u8 addr, u16 count, u8 *buf) { int ret = 0; @@ -121,12 +124,12 @@ static int _s6e8ax0_read(struct lcd_info *lcd, const u8 addr, u16 count, u8 *buf return ret; } -static int s6e8ax0_read(struct lcd_info *lcd, const u8 addr, u16 count, u8 *buf, u8 retry_cnt) +static int s6dr171_read(struct lcd_info *lcd, const u8 addr, u16 count, u8 *buf, u8 retry_cnt) { int ret = 0; read_retry: - ret = _s6e8ax0_read(lcd, addr, count, buf); + ret = _s6dr171_read(lcd, addr, count, buf); if (!ret) { if (retry_cnt) { printk(KERN_WARNING "[WARN:LCD] %s : retry cnt : %d\n", __func__, retry_cnt); @@ -139,55 +142,55 @@ read_retry: return ret; } -static int s6e8ax0_ldi_init(struct lcd_info *lcd) +static int s6dr171_ldi_init(struct lcd_info *lcd) { int ret = 0; - s6e8ax0_write(lcd, SEQ_APPLY_LEVEL_1_KEY, ARRAY_SIZE(SEQ_APPLY_LEVEL_1_KEY)); - s6e8ax0_write(lcd, SEQ_APPLY_MTP_KEY_ENABLE, ARRAY_SIZE(SEQ_APPLY_MTP_KEY_ENABLE)); - s6e8ax0_write(lcd, SEQ_PWRSEQCTL, ARRAY_SIZE(SEQ_PWRSEQCTL)); - s6e8ax0_write(lcd, SEQ_DISPLAY_BRIGHTNESSS, ARRAY_SIZE(SEQ_DISPLAY_BRIGHTNESSS)); - s6e8ax0_write(lcd, SEQ_CONTROL_DISPLAY, ARRAY_SIZE(SEQ_CONTROL_DISPLAY)); - s6e8ax0_write(lcd, SEQ_SLEEP_OUT, ARRAY_SIZE(SEQ_SLEEP_OUT)); + s6dr171_write(lcd, SEQ_APPLY_LEVEL_1_KEY, ARRAY_SIZE(SEQ_APPLY_LEVEL_1_KEY)); + s6dr171_write(lcd, SEQ_APPLY_MTP_KEY_ENABLE, ARRAY_SIZE(SEQ_APPLY_MTP_KEY_ENABLE)); + s6dr171_write(lcd, SEQ_PWRSEQCTL, ARRAY_SIZE(SEQ_PWRSEQCTL)); + s6dr171_write(lcd, SEQ_DISPLAY_BRIGHTNESSS, ARRAY_SIZE(SEQ_DISPLAY_BRIGHTNESSS)); + s6dr171_write(lcd, SEQ_CONTROL_DISPLAY, ARRAY_SIZE(SEQ_CONTROL_DISPLAY)); + s6dr171_write(lcd, SEQ_SLEEP_OUT, ARRAY_SIZE(SEQ_SLEEP_OUT)); msleep(120); - s6e8ax0_write(lcd, SEQ_PANEL_CONDITION_SET, ARRAY_SIZE(SEQ_PANEL_CONDITION_SET)); - s6e8ax0_write(lcd, SEQ_DISPLAY_CONDITION_SET, ARRAY_SIZE(SEQ_DISPLAY_CONDITION_SET)); - s6e8ax0_write(lcd, SEQ_GAMMA_CONDITION_SET, ARRAY_SIZE(SEQ_GAMMA_CONDITION_SET)); - s6e8ax0_write(lcd, SEQ_GAMMA_UPDATE, ARRAY_SIZE(SEQ_GAMMA_UPDATE)); + s6dr171_write(lcd, SEQ_PANEL_CONDITION_SET, ARRAY_SIZE(SEQ_PANEL_CONDITION_SET)); + s6dr171_write(lcd, SEQ_DISPLAY_CONDITION_SET, ARRAY_SIZE(SEQ_DISPLAY_CONDITION_SET)); + s6dr171_write(lcd, SEQ_GAMMA_CONDITION_SET, ARRAY_SIZE(SEQ_GAMMA_CONDITION_SET)); + s6dr171_write(lcd, SEQ_GAMMA_UPDATE, ARRAY_SIZE(SEQ_GAMMA_UPDATE)); msleep(20); - s6e8ax0_write(lcd, SEQ_GAMMA_UPDATE2, ARRAY_SIZE(SEQ_GAMMA_UPDATE2)); + s6dr171_write(lcd, SEQ_GAMMA_UPDATE2, ARRAY_SIZE(SEQ_GAMMA_UPDATE2)); msleep(20); - s6e8ax0_write(lcd, SEQ_ETC_SOURCE_CONTROL, ARRAY_SIZE(SEQ_ETC_SOURCE_CONTROL)); - s6e8ax0_write(lcd, SEQ_ETC_NVM_SETTING, ARRAY_SIZE(SEQ_ETC_NVM_SETTING)); - s6e8ax0_write(lcd, SEQ_ETC_POWER_CONTROL, ARRAY_SIZE(SEQ_ETC_POWER_CONTROL)); + s6dr171_write(lcd, SEQ_ETC_SOURCE_CONTROL, ARRAY_SIZE(SEQ_ETC_SOURCE_CONTROL)); + s6dr171_write(lcd, SEQ_ETC_NVM_SETTING, ARRAY_SIZE(SEQ_ETC_NVM_SETTING)); + s6dr171_write(lcd, SEQ_ETC_POWER_CONTROL, ARRAY_SIZE(SEQ_ETC_POWER_CONTROL)); - s6e8ax0_write(lcd, SEQ_ELVSS_CONTROL, ARRAY_SIZE(SEQ_ELVSS_CONTROL)); + s6dr171_write(lcd, SEQ_ELVSS_CONTROL, ARRAY_SIZE(SEQ_ELVSS_CONTROL)); return ret; } -static int s6e8ax0_ldi_enable(struct lcd_info *lcd) +static int s6dr171_ldi_enable(struct lcd_info *lcd) { int ret = 0; - s6e8ax0_write(lcd, SEQ_DISPLAY_ON, ARRAY_SIZE(SEQ_DISPLAY_ON)); + s6dr171_write(lcd, SEQ_DISPLAY_ON, ARRAY_SIZE(SEQ_DISPLAY_ON)); return ret; } -static int s6e8ax0_ldi_disable(struct lcd_info *lcd) +static int s6dr171_ldi_disable(struct lcd_info *lcd) { int ret = 0; - s6e8ax0_write(lcd, SEQ_DISPLAY_OFF, ARRAY_SIZE(SEQ_DISPLAY_OFF)); - s6e8ax0_write(lcd, SEQ_STANDBY_ON, ARRAY_SIZE(SEQ_STANDBY_ON)); + s6dr171_write(lcd, SEQ_DISPLAY_OFF, ARRAY_SIZE(SEQ_DISPLAY_OFF)); + s6dr171_write(lcd, SEQ_STANDBY_ON, ARRAY_SIZE(SEQ_STANDBY_ON)); return ret; } -static int s6e8ax0_power_on(struct lcd_info *lcd) +static int s6dr171_power_on(struct lcd_info *lcd) { int ret = 0; struct lcd_platform_data *pd = NULL; @@ -195,7 +198,7 @@ static int s6e8ax0_power_on(struct lcd_info *lcd) /* dev_info(&lcd->ld->dev, "%s\n", __func__); */ - ret = s6e8ax0_ldi_init(lcd); + ret = s6dr171_ldi_init(lcd); if (ret) { dev_err(&lcd->ld->dev, "failed to initialize ldi.\n"); goto err; @@ -203,7 +206,7 @@ static int s6e8ax0_power_on(struct lcd_info *lcd) msleep(120); - ret = s6e8ax0_ldi_enable(lcd); + ret = s6dr171_ldi_enable(lcd); if (ret) { dev_err(&lcd->ld->dev, "failed to enable ldi.\n"); goto err; @@ -216,7 +219,7 @@ err: return ret; } -static int s6e8ax0_power_off(struct lcd_info *lcd) +static int s6dr171_power_off(struct lcd_info *lcd) { int ret = 0; @@ -224,21 +227,21 @@ static int s6e8ax0_power_off(struct lcd_info *lcd) lcd->ldi_enable = 0; - ret = s6e8ax0_ldi_disable(lcd); + ret = s6dr171_ldi_disable(lcd); msleep(135); return ret; } -static int s6e8ax0_power(struct lcd_info *lcd, int power) +static int s6dr171_power(struct lcd_info *lcd, int power) { int ret = 0; if (POWER_IS_ON(power) && !POWER_IS_ON(lcd->power)) - ret = s6e8ax0_power_on(lcd); + ret = s6dr171_power_on(lcd); else if (!POWER_IS_ON(power) && POWER_IS_ON(lcd->power)) - ret = s6e8ax0_power_off(lcd); + ret = s6dr171_power_off(lcd); if (!ret) lcd->power = power; @@ -246,7 +249,7 @@ static int s6e8ax0_power(struct lcd_info *lcd, int power) return ret; } -static int s6e8ax0_set_power(struct lcd_device *ld, int power) +static int s6dr171_set_power(struct lcd_device *ld, int power) { struct lcd_info *lcd = lcd_get_data(ld); @@ -256,17 +259,17 @@ static int s6e8ax0_set_power(struct lcd_device *ld, int power) return -EINVAL; } - return s6e8ax0_power(lcd, power); + return s6dr171_power(lcd, power); } -static int s6e8ax0_get_power(struct lcd_device *ld) +static int s6dr171_get_power(struct lcd_device *ld) { struct lcd_info *lcd = lcd_get_data(ld); return lcd->power; } -static int s6e8ax0_set_brightness(struct backlight_device *bd) +static int s6dr171_set_brightness(struct backlight_device *bd) { int ret = 0; int brightness = bd->props.brightness; @@ -292,13 +295,13 @@ static int s6e8ax0_set_brightness(struct backlight_device *bd) return ret; } -static struct lcd_ops s6e8ax0_lcd_ops = { - .set_power = s6e8ax0_set_power, - .get_power = s6e8ax0_get_power, +static struct lcd_ops s6dr171_lcd_ops = { + .set_power = s6dr171_set_power, + .get_power = s6dr171_get_power, }; -static const struct backlight_ops s6e8ax0_backlight_ops = { - .update_status = s6e8ax0_set_brightness, +static const struct backlight_ops s6dr171_backlight_ops = { + .update_status = s6dr171_set_brightness, }; static ssize_t power_reduce_show(struct device *dev, @@ -329,7 +332,7 @@ static ssize_t power_reduce_store(struct device *dev, mutex_lock(&lcd->bl_lock); lcd->acl_enable = value; /* if (lcd->ldi_enable) - s6e8ax0_set_acl(lcd); */ + s6dr171_set_acl(lcd); */ mutex_unlock(&lcd->bl_lock); } } @@ -389,25 +392,25 @@ static DEVICE_ATTR(auto_brightness, 0644, auto_brightness_show, auto_brightness_ #ifdef CONFIG_HAS_EARLYSUSPEND struct lcd_info *g_lcd; -void s6e8ax0_early_suspend(void) +void s6dr171_early_suspend(void) { struct lcd_info *lcd = g_lcd; set_dsim_lcd_enabled(0); dev_info(&lcd->ld->dev, "+%s\n", __func__); - s6e8ax0_power(lcd, FB_BLANK_POWERDOWN); + s6dr171_power(lcd, FB_BLANK_POWERDOWN); dev_info(&lcd->ld->dev, "-%s\n", __func__); return ; } -void s6e8ax0_late_resume(void) +void s6dr171_late_resume(void) { struct lcd_info *lcd = g_lcd; dev_info(&lcd->ld->dev, "+%s\n", __func__); - s6e8ax0_power(lcd, FB_BLANK_UNBLANK); + s6dr171_power(lcd, FB_BLANK_UNBLANK); dev_info(&lcd->ld->dev, "-%s\n", __func__); set_dsim_lcd_enabled(1); @@ -416,28 +419,28 @@ void s6e8ax0_late_resume(void) } #endif -static int s6e8ax0_read_mtp(struct lcd_info *lcd, u8 *mtp_data) +static int s6dr171_read_mtp(struct lcd_info *lcd, u8 *mtp_data) { int ret, i; for (i = 0; i < 3; i++) - ret = s6e8ax0_read(lcd, LDI_MTP_ADDR+i, LDI_MTP_LENGTH, mtp_data, 0); + ret = s6dr171_read(lcd, LDI_MTP_ADDR+i, LDI_MTP_LENGTH, mtp_data, 0); return ret; } -static void s6e8ax0_read_id(struct lcd_info *lcd, u8 *buf) +static void s6dr171_read_id(struct lcd_info *lcd, u8 *buf) { int ret = 0; - ret = s6e8ax0_read(lcd, LDI_ID_REG, LDI_ID_LEN, buf, 3); + ret = s6dr171_read(lcd, LDI_ID_REG, LDI_ID_LEN, buf, 3); if (!ret) { lcd->connected = 0; dev_info(&lcd->ld->dev, "panel is not connected well\n"); } } -static int s6e8ax0_probe(struct device *dev) +static int s6dr171_probe(struct device *dev) { int ret = 0; struct lcd_info *lcd; @@ -452,14 +455,14 @@ static int s6e8ax0_probe(struct device *dev) g_lcd = lcd; - lcd->ld = lcd_device_register("panel", dev, lcd, &s6e8ax0_lcd_ops); + lcd->ld = lcd_device_register("panel", dev, lcd, &s6dr171_lcd_ops); if (IS_ERR(lcd->ld)) { pr_err("failed to register lcd device\n"); ret = PTR_ERR(lcd->ld); goto out_free_lcd; } - lcd->bd = backlight_device_register("panel", dev, lcd, &s6e8ax0_backlight_ops, NULL); + lcd->bd = backlight_device_register("panel", dev, lcd, &s6dr171_backlight_ops, NULL); if (IS_ERR(lcd->bd)) { pr_err("failed to register backlight device\n"); ret = PTR_ERR(lcd->bd); @@ -498,18 +501,21 @@ static int s6e8ax0_probe(struct device *dev) mutex_init(&lcd->lock); mutex_init(&lcd->bl_lock); - s6e8ax0_read_id(lcd, lcd->id); + s6dr171_read_id(lcd, lcd->id); dev_info(&lcd->ld->dev, "ID: %x, %x, %x\n", lcd->id[0], lcd->id[1], lcd->id[2]); dev_info(&lcd->ld->dev, "lcd panel driver has been probed.\n"); - ret = s6e8ax0_read_mtp(lcd, mtp_data); + ret = s6dr171_read_mtp(lcd, mtp_data); if (!ret) { printk(KERN_ERR "[LCD:ERROR] : %s read mtp failed\n", __func__); /*return -EPERM;*/ } + lcd_early_suspend = s6dr171_early_suspend; + lcd_late_resume = s6dr171_late_resume; + return 0; out_free_backlight: @@ -525,11 +531,11 @@ err_alloc: return ret; } -static int __devexit s6e8ax0_remove(struct device *dev) +static int __devexit s6dr171_remove(struct device *dev) { struct lcd_info *lcd = dev_get_drvdata(dev); - s6e8ax0_power(lcd, FB_BLANK_POWERDOWN); + s6dr171_power(lcd, FB_BLANK_POWERDOWN); lcd_device_unregister(lcd->ld); backlight_device_unregister(lcd->bd); kfree(lcd); @@ -538,34 +544,34 @@ static int __devexit s6e8ax0_remove(struct device *dev) } /* Power down all displays on reboot, poweroff or halt. */ -static void s6e8ax0_shutdown(struct device *dev) +static void s6dr171_shutdown(struct device *dev) { struct lcd_info *lcd = dev_get_drvdata(dev); dev_info(&lcd->ld->dev, "%s\n", __func__); - s6e8ax0_power(lcd, FB_BLANK_POWERDOWN); + s6dr171_power(lcd, FB_BLANK_POWERDOWN); } -static struct mipi_lcd_driver s6e8ax0_mipi_driver = { +static struct mipi_lcd_driver s6dr171_mipi_driver = { .name = "s6e8aa0", - .probe = s6e8ax0_probe, - .remove = __devexit_p(s6e8ax0_remove), - .shutdown = s6e8ax0_shutdown, + .probe = s6dr171_probe, + .remove = __devexit_p(s6dr171_remove), + .shutdown = s6dr171_shutdown, }; -static int s6e8ax0_init(void) +static int s6dr171_init(void) { - return s5p_dsim_register_lcd_driver(&s6e8ax0_mipi_driver); + return s5p_dsim_register_lcd_driver(&s6dr171_mipi_driver); } -static void s6e8ax0_exit(void) +static void s6dr171_exit(void) { return; } -module_init(s6e8ax0_init); -module_exit(s6e8ax0_exit); +module_init(s6dr171_init); +module_exit(s6dr171_exit); -MODULE_DESCRIPTION("MIPI-DSI S6E8AA0:AMS529HA01 (800x1280) Panel Driver"); +MODULE_DESCRIPTION("MIPI-DSI S6DR171:AMS480GZ01-0 (720x1280) Panel Driver"); MODULE_LICENSE("GPL"); |