diff options
Diffstat (limited to 'drivers/video/samsung/s6d6aa1.c')
-rw-r--r-- | drivers/video/samsung/s6d6aa1.c | 393 |
1 files changed, 274 insertions, 119 deletions
diff --git a/drivers/video/samsung/s6d6aa1.c b/drivers/video/samsung/s6d6aa1.c index 2a4c4ad..e974b0a 100644 --- a/drivers/video/samsung/s6d6aa1.c +++ b/drivers/video/samsung/s6d6aa1.c @@ -37,13 +37,13 @@ #define MIN_BRIGHTNESS 0 #define MAX_BRIGHTNESS 255 -#define DEFAULT_BRIGHTNESS 170 +#define DEFAULT_BRIGHTNESS 160 + struct lcd_info { unsigned int bl; unsigned int current_bl; - unsigned int acl_enable; - + unsigned int auto_brightness; unsigned int ldi_enable; unsigned int power; struct mutex lock; @@ -57,10 +57,69 @@ struct lcd_info { unsigned int irq; unsigned int connected; +#if defined(GPIO_OLED_DET) + struct delayed_work oled_detection; + unsigned int oled_detection_count; +#endif struct dsim_global *dsim; }; +static const unsigned char SEQ_PASSWD1[] = { + 0xF0, + 0x5A, 0x5A +}; + +static const unsigned char SEQ_PASSWD2[] = { + 0xF1, + 0x5A, 0x5A +}; + +static const unsigned char SEQ_SONY_IP_SET1[] = { + 0xC4, + 0x7C, 0xE6, 0x7C, 0xE6, 0x7C, 0xE6, 0x7C, 0x7C, + 0x05, 0x0F, 0x1F, 0x01, 0x00, 0x00, +}; + +static const unsigned char SEQ_SONY_IP_SET2[] = { + 0xC5, + 0x80, 0x80, 0x80, 0x41, 0x43, 0x34, 0x80, 0x80, + 0x01, 0xFF, 0x25, 0x58, 0x50 +}; + +/* Should be removed when panel nvm is updated */ +static const unsigned char SEQ_PGAMMACTL[] = { + 0xFA, 0x9C, 0xBF, 0x1A, 0xD6, 0xE3, 0xE3, 0x1B, + 0xDA, 0x9B, 0x16, 0x51, 0x12, 0x15, 0xD9, 0x9B, + 0x1A, 0xDD, 0x62, 0x2D, 0x79, 0x6A, 0x2C, 0x7F, + 0x11, 0x09, 0x53, 0x91, 0x09, 0x08, 0xCA, 0x06, + 0x04, 0x87, 0x0B, 0x4E, 0xD2, 0x13, 0xD7, 0x18, + 0x1A, 0x9A, 0xC1, 0x0F, 0xFF, 0xD7, 0x53, 0x61, + 0xE2, 0x5A, 0x9A, 0xDC, 0x59, 0x96, 0x98, 0x5C, + 0x1F, 0xE3, 0x25, 0xE6, 0x27, 0x23, 0x23, 0x4C, +}; + +static const unsigned char SEQ_NGAMMACTL[] = { + 0xFB, 0x9C, 0xBF, 0x1A, 0xD6, 0xE3, 0xE3, 0x1B, + 0xDA, 0x9B, 0x16, 0x51, 0x12, 0x15, 0xD9, 0x9B, + 0x1A, 0xDD, 0x62, 0x2D, 0x79, 0x6A, 0x2C, 0x7F, + 0x11, 0x09, 0x53, 0x91, 0x09, 0x08, 0xCA, 0x06, + 0x04, 0x87, 0x0B, 0x4E, 0xD2, 0x13, 0xD7, 0x18, + 0x1A, 0x9A, 0xC1, 0x0F, 0xFF, 0xD7, 0x53, 0x61, + 0xE2, 0x5A, 0x9A, 0xDC, 0x59, 0x96, 0x98, 0x5C, + 0x1F, 0xE3, 0x25, 0xE6, 0x27, 0x23, 0x23, 0x4C, +}; + +static const unsigned char SEQ_PASSWD1_DISABLE[] = { + 0xF0, + 0xA5, 0xA5 +}; + +static const unsigned char SEQ_PASSWD2_DISABLE[] = { + 0xF1, + 0xA5, 0xA5 +}; + static const unsigned char SEQ_SLPOUT[] = { 0x11, 0x00, @@ -73,12 +132,6 @@ static const unsigned char SEQ_DSCTL[] = { 0x00 }; -static const unsigned char SEQ_WRDISBV[] = { - 0x51, - 0xFF, - 0x00 -}; - static const unsigned char SEQ_WRCTRLD[] = { 0x53, 0x2C, @@ -91,6 +144,12 @@ static const unsigned char SEQ_WRCABC[] = { 0x00 }; +static const unsigned char SEQ_WRCABC_OUTDOOR[] = { + 0x55, + 0x04, + 0x00 +}; + static const unsigned char SEQ_DISPON[] = { 0x29, 0x00, @@ -115,8 +174,85 @@ static unsigned char SEQ_WRDISBV_CTL[] = { 0x00 }; +static unsigned char TRANS_BRIGHTNESS[] = { + 0, 1, 1, 2, 2, 3, 3, 4, + 4, 5, 5, 6, 6, 7, 7, 8, + 8, 9, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 48, + 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 255, +}; + +extern void (*lcd_early_suspend)(void); +extern void (*lcd_late_resume)(void); + +#if defined(GPIO_OLED_DET) +static void esd_reset_lcd(struct lcd_info *lcd) +{ + dev_info(&lcd->ld->dev, "++%s\n", __func__); + if (lcd_early_suspend) + lcd_early_suspend(); + lcd->dsim->ops->suspend(); + + lcd->dsim->ops->resume(); + if (lcd_late_resume) + lcd_late_resume(); + dev_info(&lcd->ld->dev, "--%s\n", __func__); +} + +static void oled_detection_work(struct work_struct *work) +{ + struct lcd_info *lcd = + container_of(work, struct lcd_info, oled_detection.work); + + int oled_det_level = gpio_get_value(GPIO_OLED_DET); + + dev_info(&lcd->ld->dev, "%s, %d, %d\n", __func__, lcd->oled_detection_count, oled_det_level); + if (!oled_det_level) + esd_reset_lcd(lcd); +} + +static irqreturn_t oled_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); + + return IRQ_HANDLED; +} +#endif -static int s6e8ax0_write(struct lcd_info *lcd, const unsigned char *seq, int len) + +static int s6d6aa1_write(struct lcd_info *lcd, const unsigned char *seq, int len) { int size; const unsigned char *wbuf; @@ -141,7 +277,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 _s6d6aa1_read(struct lcd_info *lcd, const u8 addr, u16 count, u8 *buf) { int ret = 0; @@ -158,12 +294,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 s6d6aa1_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 = _s6d6aa1_read(lcd, addr, count, buf); if (!ret) { if (retry_cnt) { printk(KERN_WARNING "[WARN:LCD] %s : retry cnt : %d\n", __func__, retry_cnt); @@ -180,23 +316,13 @@ static int get_backlight_level_from_brightness(int brightness) { int backlightlevel; - /* brightness setting from platform is from 0 to 255 - * But in this driver, brightness is only supported from 0 to 24 */ + backlightlevel = TRANS_BRIGHTNESS[brightness]; - switch (brightness) { - case 0 ... 255: - backlightlevel = brightness; - break; - default: - backlightlevel = brightness; - break; - } return backlightlevel; } static int update_brightness(struct lcd_info *lcd, u8 force) { - int ret; u32 brightness; mutex_lock(&lcd->bl_lock); @@ -209,7 +335,7 @@ static int update_brightness(struct lcd_info *lcd, u8 force) lcd->current_bl = lcd->bl; SEQ_WRDISBV_CTL[1] = lcd->bl; - s6e8ax0_write(lcd, SEQ_WRDISBV_CTL, \ + s6d6aa1_write(lcd, SEQ_WRDISBV_CTL, \ ARRAY_SIZE(SEQ_WRDISBV_CTL)); dev_info(&lcd->ld->dev, "brightness=%d, bl=%d\n", brightness, lcd->bl); @@ -220,43 +346,52 @@ static int update_brightness(struct lcd_info *lcd, u8 force) return 0; } -static int s6e8ax0_ldi_init(struct lcd_info *lcd) +static int s6d6aa1_ldi_init(struct lcd_info *lcd) { int ret = 0; - s6e8ax0_write(lcd, SEQ_SLPOUT, ARRAY_SIZE(SEQ_SLPOUT)); + msleep(15); + + s6d6aa1_write(lcd, SEQ_SLPOUT, ARRAY_SIZE(SEQ_SLPOUT)); - msleep(200); + msleep(145); - s6e8ax0_write(lcd, SEQ_DSCTL, ARRAY_SIZE(SEQ_DSCTL)); - s6e8ax0_write(lcd, SEQ_WRDISBV, ARRAY_SIZE(SEQ_WRDISBV)); - s6e8ax0_write(lcd, SEQ_WRCTRLD, ARRAY_SIZE(SEQ_WRCTRLD)); - s6e8ax0_write(lcd, SEQ_WRCABC, ARRAY_SIZE(SEQ_WRCABC)); + s6d6aa1_write(lcd, SEQ_PASSWD1, ARRAY_SIZE(SEQ_PASSWD1)); + s6d6aa1_write(lcd, SEQ_PASSWD2, ARRAY_SIZE(SEQ_PASSWD2)); + s6d6aa1_write(lcd, SEQ_SONY_IP_SET1, ARRAY_SIZE(SEQ_SONY_IP_SET1)); + s6d6aa1_write(lcd, SEQ_SONY_IP_SET2, ARRAY_SIZE(SEQ_SONY_IP_SET2)); + s6d6aa1_write(lcd, SEQ_PGAMMACTL, ARRAY_SIZE(SEQ_PGAMMACTL)); + s6d6aa1_write(lcd, SEQ_NGAMMACTL, ARRAY_SIZE(SEQ_NGAMMACTL)); + s6d6aa1_write(lcd, SEQ_PASSWD1_DISABLE, ARRAY_SIZE(SEQ_PASSWD1_DISABLE)); + s6d6aa1_write(lcd, SEQ_PASSWD2_DISABLE, ARRAY_SIZE(SEQ_PASSWD2_DISABLE)); + s6d6aa1_write(lcd, SEQ_DSCTL, ARRAY_SIZE(SEQ_DSCTL)); + s6d6aa1_write(lcd, SEQ_WRCTRLD, ARRAY_SIZE(SEQ_WRCTRLD)); + s6d6aa1_write(lcd, SEQ_WRCABC, ARRAY_SIZE(SEQ_WRCABC)); return ret; } -static int s6e8ax0_ldi_enable(struct lcd_info *lcd) +static int s6d6aa1_ldi_enable(struct lcd_info *lcd) { int ret = 0; - s6e8ax0_write(lcd, SEQ_DISPON, ARRAY_SIZE(SEQ_DISPON)); + s6d6aa1_write(lcd, SEQ_DISPON, ARRAY_SIZE(SEQ_DISPON)); return ret; } -static int s6e8ax0_ldi_disable(struct lcd_info *lcd) +static int s6d6aa1_ldi_disable(struct lcd_info *lcd) { int ret = 0; - s6e8ax0_write(lcd, SEQ_DISPOFF, ARRAY_SIZE(SEQ_DISPOFF)); - s6e8ax0_write(lcd, SEQ_SLPIN, ARRAY_SIZE(SEQ_SLPIN)); + s6d6aa1_write(lcd, SEQ_DISPOFF, ARRAY_SIZE(SEQ_DISPOFF)); + s6d6aa1_write(lcd, SEQ_SLPIN, ARRAY_SIZE(SEQ_SLPIN)); return ret; } -static int s6e8ax0_power_on(struct lcd_info *lcd) +static int s6d6aa1_power_on(struct lcd_info *lcd) { int ret = 0; struct lcd_platform_data *pd = NULL; @@ -264,15 +399,14 @@ static int s6e8ax0_power_on(struct lcd_info *lcd) /* dev_info(&lcd->ld->dev, "%s\n", __func__); */ - ret = s6e8ax0_ldi_init(lcd); + ret = s6d6aa1_ldi_init(lcd); if (ret) { dev_err(&lcd->ld->dev, "failed to initialize ldi.\n"); goto err; } - msleep(120); - ret = s6e8ax0_ldi_enable(lcd); + ret = s6d6aa1_ldi_enable(lcd); if (ret) { dev_err(&lcd->ld->dev, "failed to enable ldi.\n"); goto err; @@ -285,7 +419,7 @@ err: return ret; } -static int s6e8ax0_power_off(struct lcd_info *lcd) +static int s6d6aa1_power_off(struct lcd_info *lcd) { int ret = 0; @@ -293,21 +427,21 @@ static int s6e8ax0_power_off(struct lcd_info *lcd) lcd->ldi_enable = 0; - ret = s6e8ax0_ldi_disable(lcd); + ret = s6d6aa1_ldi_disable(lcd); msleep(135); return ret; } -static int s6e8ax0_power(struct lcd_info *lcd, int power) +static int s6d6aa1_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 = s6d6aa1_power_on(lcd); else if (!POWER_IS_ON(power) && POWER_IS_ON(lcd->power)) - ret = s6e8ax0_power_off(lcd); + ret = s6d6aa1_power_off(lcd); if (!ret) lcd->power = power; @@ -315,7 +449,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 s6d6aa1_set_power(struct lcd_device *ld, int power) { struct lcd_info *lcd = lcd_get_data(ld); @@ -325,17 +459,27 @@ static int s6e8ax0_set_power(struct lcd_device *ld, int power) return -EINVAL; } - return s6e8ax0_power(lcd, power); + return s6d6aa1_power(lcd, power); +} + + static int s6d6aa1_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); + + return 0; } -static int s6e8ax0_get_power(struct lcd_device *ld) +static int s6d6aa1_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 s6d6aa1_set_brightness(struct backlight_device *bd) { int ret = 0; int brightness = bd->props.brightness; @@ -361,7 +505,7 @@ static int s6e8ax0_set_brightness(struct backlight_device *bd) return ret; } -static int s6e8ax0_get_brightness(struct backlight_device *bd) +static int s6d6aa1_get_brightness(struct backlight_device *bd) { struct lcd_info *lcd = bl_get_data(bd); @@ -369,28 +513,43 @@ static int s6e8ax0_get_brightness(struct backlight_device *bd) } static struct lcd_ops panel_lcd_ops = { - .set_power = s6e8ax0_set_power, - .get_power = s6e8ax0_get_power, + .set_power = s6d6aa1_set_power, + .get_power = s6d6aa1_get_power, + .check_fb = s6d6aa1_check_fb, }; static const struct backlight_ops panel_backlight_ops = { - .get_brightness = s6e8ax0_get_brightness, - .update_status = s6e8ax0_set_brightness, + .get_brightness = s6d6aa1_get_brightness, + .update_status = s6d6aa1_set_brightness, }; -static ssize_t power_reduce_show(struct device *dev, +static ssize_t lcd_type_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + char temp[15]; + + sprintf(temp, "JDI_ACX445BLN\n"); + + strcat(buf, temp); + + return strlen(buf); +} + +static DEVICE_ATTR(lcd_type, 0444, lcd_type_show, NULL); + +static ssize_t auto_brightness_show(struct device *dev, struct device_attribute *attr, char *buf) { struct lcd_info *lcd = dev_get_drvdata(dev); char temp[3]; - sprintf(temp, "%d\n", lcd->acl_enable); + sprintf(temp, "%d\n", lcd->auto_brightness); strcpy(buf, temp); return strlen(buf); } -static ssize_t power_reduce_store(struct device *dev, +static ssize_t auto_brightness_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct lcd_info *lcd = dev_get_drvdata(dev); @@ -401,39 +560,21 @@ static ssize_t power_reduce_store(struct device *dev, if (rc < 0) return rc; else { - if (lcd->acl_enable != value) { - dev_info(dev, "%s - %d, %d\n", __func__, lcd->acl_enable, value); - mutex_lock(&lcd->bl_lock); - lcd->acl_enable = value; - if (lcd->ldi_enable) - /*s6e8ax0_set_acl(lcd);*/ - mutex_unlock(&lcd->bl_lock); - } + lcd->auto_brightness = value; + if (lcd->auto_brightness < 4) + s6d6aa1_write(lcd, SEQ_WRCABC, ARRAY_SIZE(SEQ_WRCABC)); + else + s6d6aa1_write(lcd, SEQ_WRCABC_OUTDOOR, ARRAY_SIZE(SEQ_WRCABC_OUTDOOR)); } return size; } -static DEVICE_ATTR(power_reduce, 0664, power_reduce_show, power_reduce_store); - -static ssize_t lcd_type_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - char temp[15]; - - sprintf(temp, "SMD_AMS480GYXX\n"); - - strcat(buf, temp); - - return strlen(buf); -} - -static DEVICE_ATTR(lcd_type, 0444, lcd_type_show, NULL); - +static DEVICE_ATTR(auto_brightness, 0644, auto_brightness_show, auto_brightness_store); #ifdef CONFIG_HAS_EARLYSUSPEND struct lcd_info *g_lcd; -void s6e8ax0_early_suspend(void) +void s6d6aa1_early_suspend(void) { struct lcd_info *lcd = g_lcd; @@ -441,21 +582,33 @@ void s6e8ax0_early_suspend(void) dev_info(&lcd->ld->dev, "+%s\n", __func__); - s6e8ax0_power(lcd, FB_BLANK_POWERDOWN); +#if defined(GPIO_OLED_DET) + 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); +#endif + s6d6aa1_power(lcd, FB_BLANK_POWERDOWN); dev_info(&lcd->ld->dev, "-%s\n", __func__); return ; } -void s6e8ax0_late_resume(void) +void s6d6aa1_late_resume(void) { struct lcd_info *lcd = g_lcd; dev_info(&lcd->ld->dev, "+%s\n", __func__); - s6e8ax0_power(lcd, FB_BLANK_UNBLANK); - + s6d6aa1_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); + enable_irq(lcd->irq); +#endif dev_info(&lcd->ld->dev, "-%s\n", __func__); set_dsim_lcd_enabled(1); @@ -464,20 +617,7 @@ void s6e8ax0_late_resume(void) } #endif -#if 0 -static void s6e8ax0_read_id(struct lcd_info *lcd, u8 *buf) -{ - int ret = 0; - - ret = s6e8ax0_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"); - } -} -#endif - -static int s6e8ax0_probe(struct device *dev) +static int s6d6aa1_probe(struct device *dev) { int ret = 0; struct lcd_info *lcd; @@ -512,17 +652,15 @@ static int s6e8ax0_probe(struct device *dev) lcd->bl = 0; lcd->current_bl = lcd->bl; - lcd->acl_enable = 0; - lcd->power = FB_BLANK_UNBLANK; lcd->ldi_enable = 1; lcd->connected = 1; - ret = device_create_file(&lcd->ld->dev, &dev_attr_power_reduce); + ret = device_create_file(&lcd->ld->dev, &dev_attr_lcd_type); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); - ret = device_create_file(&lcd->ld->dev, &dev_attr_lcd_type); + ret = device_create_file(&lcd->bd->dev, &dev_attr_auto_brightness); if (ret < 0) dev_err(&lcd->ld->dev, "failed to add sysfs entries, %d\n", __LINE__); @@ -533,6 +671,23 @@ static int s6e8ax0_probe(struct device *dev) dev_info(&lcd->ld->dev, "s6e8aa0 lcd panel driver has been probed.\n"); +#if defined(GPIO_OLED_DET) + if (lcd->connected) { + INIT_DELAYED_WORK(&lcd->oled_detection, oled_detection_work); + + lcd->irq = gpio_to_irq(GPIO_OLED_DET); + + s3c_gpio_cfgpin(GPIO_OLED_DET, S3C_GPIO_SFN(0xf)); + s3c_gpio_setpull(GPIO_OLED_DET, S3C_GPIO_PULL_NONE); + if (request_irq(lcd->irq, oled_detection_int, + IRQF_TRIGGER_FALLING, "oled_detection", lcd)) + pr_err("failed to reqeust irq. %d\n", lcd->irq); + } +#endif + + lcd_early_suspend = s6d6aa1_early_suspend; + lcd_late_resume = s6d6aa1_late_resume; + return 0; out_free_backlight: @@ -548,11 +703,11 @@ err_alloc: return ret; } -static int __devexit s6e8ax0_remove(struct device *dev) +static int __devexit s6d6aa1_remove(struct device *dev) { struct lcd_info *lcd = dev_get_drvdata(dev); - s6e8ax0_power(lcd, FB_BLANK_POWERDOWN); + s6d6aa1_power(lcd, FB_BLANK_POWERDOWN); lcd_device_unregister(lcd->ld); backlight_device_unregister(lcd->bd); kfree(lcd); @@ -561,35 +716,35 @@ 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 s6d6aa1_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); + s6d6aa1_power(lcd, FB_BLANK_POWERDOWN); } -static struct mipi_lcd_driver s6e8ax0_mipi_driver = { +static struct mipi_lcd_driver s6d6aa1_mipi_driver = { .name = "s6d6aa1", - .probe = s6e8ax0_probe, - .remove = __devexit_p(s6e8ax0_remove), - .shutdown = s6e8ax0_shutdown, + .probe = s6d6aa1_probe, + .remove = __devexit_p(s6d6aa1_remove), + .shutdown = s6d6aa1_shutdown, }; -static int s6e8ax0_init(void) +static int s6d6aa1_init(void) { - return s5p_dsim_register_lcd_driver(&s6e8ax0_mipi_driver); + return s5p_dsim_register_lcd_driver(&s6d6aa1_mipi_driver); } -static void s6e8ax0_exit(void) +static void s6d6aa1_exit(void) { return; } -module_init(s6e8ax0_init); -module_exit(s6e8ax0_exit); +module_init(s6d6aa1_init); +module_exit(s6d6aa1_exit); -MODULE_DESCRIPTION("MIPI-DSI S6E8AA0:AMS529HA01 (800x1280) Panel Driver"); +MODULE_DESCRIPTION("MIPI-DSI S6D6AA1:ACX445BLN SCLCD (720x1280) Panel Driver"); MODULE_LICENSE("GPL"); |