diff options
author | Kristoffer Ericson <kristoffer.ericson@gmail.com> | 2008-10-16 01:03:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-16 14:21:45 -0400 |
commit | 0b178883b36e6f522e4a7019bf5a147daf521a01 (patch) | |
tree | 2f9051da715044d4aa00b843eb6bef2b887d5659 /drivers/video | |
parent | 4d31a2b74c6d063362ae10ce3be3e80d8713bf23 (diff) |
fbdev: allow more chip revisions in Epson s1d13... video driver
The Epson s1d13xxx hardware is common in many handhelds, but our driver is
currently locked to a single chip revision. This patch adds an array of
known to work revisions (which can be extended).
[akpm@linux-foundation.org: cleanups]
Signed-off-by: Kristoffer Ericson <Kristoffer.Ericson@gmail.com>
Acked-by: Thibaut Varène <varenet@parisc-linux.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/s1d13xxxfb.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/drivers/video/s1d13xxxfb.c b/drivers/video/s1d13xxxfb.c index b829dc7c5edf..a7b01d2724b5 100644 --- a/drivers/video/s1d13xxxfb.c +++ b/drivers/video/s1d13xxxfb.c | |||
@@ -50,6 +50,11 @@ | |||
50 | #define dbg(fmt, args...) do { } while (0) | 50 | #define dbg(fmt, args...) do { } while (0) |
51 | #endif | 51 | #endif |
52 | 52 | ||
53 | static const int __devinitconst s1d13xxxfb_revisions[] = { | ||
54 | S1D13506_CHIP_REV, /* Rev.4 on HP Jornada 7xx S1D13506 */ | ||
55 | S1D13806_CHIP_REV, /* Rev.7 on .. */ | ||
56 | }; | ||
57 | |||
53 | /* | 58 | /* |
54 | * Here we define the default struct fb_fix_screeninfo | 59 | * Here we define the default struct fb_fix_screeninfo |
55 | */ | 60 | */ |
@@ -538,6 +543,7 @@ s1d13xxxfb_probe(struct platform_device *pdev) | |||
538 | struct fb_info *info; | 543 | struct fb_info *info; |
539 | struct s1d13xxxfb_pdata *pdata = NULL; | 544 | struct s1d13xxxfb_pdata *pdata = NULL; |
540 | int ret = 0; | 545 | int ret = 0; |
546 | int i; | ||
541 | u8 revision; | 547 | u8 revision; |
542 | 548 | ||
543 | dbg("probe called: device is %p\n", pdev); | 549 | dbg("probe called: device is %p\n", pdev); |
@@ -607,10 +613,19 @@ s1d13xxxfb_probe(struct platform_device *pdev) | |||
607 | goto bail; | 613 | goto bail; |
608 | } | 614 | } |
609 | 615 | ||
610 | revision = s1d13xxxfb_readreg(default_par, S1DREG_REV_CODE); | 616 | revision = s1d13xxxfb_readreg(default_par, S1DREG_REV_CODE) >> 2; |
611 | if ((revision >> 2) != S1D_CHIP_REV) { | 617 | |
612 | printk(KERN_INFO PFX "chip not found: %i\n", (revision >> 2)); | 618 | ret = -ENODEV; |
613 | ret = -ENODEV; | 619 | |
620 | for (i = 0; i < ARRAY_SIZE(s1d13xxxfb_revisions); i++) { | ||
621 | if (revision == s1d13xxxfb_revisions[i]) | ||
622 | ret = 0; | ||
623 | } | ||
624 | |||
625 | if (!ret) | ||
626 | printk(KERN_INFO PFX "chip revision %i\n", revision); | ||
627 | else { | ||
628 | printk(KERN_INFO PFX "unknown chip revision %i\n", revision); | ||
614 | goto bail; | 629 | goto bail; |
615 | } | 630 | } |
616 | 631 | ||