diff options
author | Choi jonghwan <jhbird.choi@samsung.com> | 2010-10-18 10:12:00 -0700 |
---|---|---|
committer | Arve Hjønnevåg <arve@android.com> | 2011-11-17 17:51:37 -0800 |
commit | 7ca12d1abac7a4a27183a1885572b8714b4dd5e7 (patch) | |
tree | 33469ed77f60bcf4f42d90168ad41b81ee68aaa4 | |
parent | d9ad4d14c342e15c2bc5ee606060c7c79274cfb7 (diff) | |
download | kernel_samsung_crespo-7ca12d1abac7a4a27183a1885572b8714b4dd5e7.zip kernel_samsung_crespo-7ca12d1abac7a4a27183a1885572b8714b4dd5e7.tar.gz kernel_samsung_crespo-7ca12d1abac7a4a27183a1885572b8714b4dd5e7.tar.bz2 |
S5PC11X: S3CFB: Bug fix: Move request_irq location.
Run request_irq function after device interrupt is enabled.
Change-Id: I381784c0971c14465ec5a59b0eba002e552ffb35
Signed-off-by: Choi jonghwan <jhbird.choi@samsung.com>
-rw-r--r-- | drivers/video/samsung/s3cfb.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/drivers/video/samsung/s3cfb.c b/drivers/video/samsung/s3cfb.c index 6b686e8..1c226e9 100644 --- a/drivers/video/samsung/s3cfb.c +++ b/drivers/video/samsung/s3cfb.c @@ -885,7 +885,7 @@ static int __devinit s3cfb_probe(struct platform_device *pdev) struct s3c_platform_fb *pdata; struct s3cfb_global *fbdev; struct resource *res; - int i, ret = 0; + int i, j, ret = 0; fbdev = kzalloc(sizeof(struct s3cfb_global), GFP_KERNEL); if (!fbdev) { @@ -945,14 +945,6 @@ static int __devinit s3cfb_probe(struct platform_device *pdev) goto err_mem; } - fbdev->irq = platform_get_irq(pdev, 0); - if (request_irq(fbdev->irq, s3cfb_irq_frame, IRQF_SHARED, - pdev->name, fbdev)) { - dev_err(fbdev->dev, "request_irq failed\n"); - ret = -EINVAL; - goto err_irq; - } - s3cfb_set_vsync_interrupt(fbdev, 1); s3cfb_set_global_interrupt(fbdev, 1); s3cfb_init_global(fbdev); @@ -972,6 +964,14 @@ static int __devinit s3cfb_probe(struct platform_device *pdev) s3cfb_display_on(fbdev); + fbdev->irq = platform_get_irq(pdev, 0); + if (request_irq(fbdev->irq, s3cfb_irq_frame, IRQF_SHARED, + pdev->name, fbdev)) { + dev_err(fbdev->dev, "request_irq failed\n"); + ret = -EINVAL; + goto err_irq; + } + #ifdef CONFIG_FB_S3C_LCD_INIT #if defined(CONFIG_FB_S3C_TL2796) if (pdata->backlight_on) @@ -997,6 +997,14 @@ static int __devinit s3cfb_probe(struct platform_device *pdev) return 0; +err_irq: + s3cfb_display_off(fbdev); + s3cfb_set_window(fbdev, pdata->default_win, 0); + for (i = pdata->default_win; + i < pdata->nr_wins + pdata->default_win; i++) { + j = i % pdata->nr_wins; + unregister_framebuffer(fbdev->fb[j]); + } err_register: for (i = 0; i < pdata->nr_wins; i++) { if (i == pdata->default_win) @@ -1006,9 +1014,6 @@ err_register: kfree(fbdev->fb); err_alloc: - free_irq(fbdev->irq, fbdev); - -err_irq: iounmap(fbdev->regs); err_mem: |