aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChoi jonghwan <jhbird.choi@samsung.com>2010-10-18 10:12:00 -0700
committerArve Hjønnevåg <arve@android.com>2011-11-17 17:51:37 -0800
commit7ca12d1abac7a4a27183a1885572b8714b4dd5e7 (patch)
tree33469ed77f60bcf4f42d90168ad41b81ee68aaa4
parentd9ad4d14c342e15c2bc5ee606060c7c79274cfb7 (diff)
downloadkernel_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.c29
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: