Commit 0b178883 authored by Kristoffer Ericson's avatar Kristoffer Ericson Committed by Linus Torvalds

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: default avatarKristoffer Ericson <Kristoffer.Ericson@gmail.com>
Acked-by: default avatarThibaut Varène <varenet@parisc-linux.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4d31a2b7
...@@ -50,6 +50,11 @@ ...@@ -50,6 +50,11 @@
#define dbg(fmt, args...) do { } while (0) #define dbg(fmt, args...) do { } while (0)
#endif #endif
static const int __devinitconst s1d13xxxfb_revisions[] = {
S1D13506_CHIP_REV, /* Rev.4 on HP Jornada 7xx S1D13506 */
S1D13806_CHIP_REV, /* Rev.7 on .. */
};
/* /*
* Here we define the default struct fb_fix_screeninfo * Here we define the default struct fb_fix_screeninfo
*/ */
...@@ -538,6 +543,7 @@ s1d13xxxfb_probe(struct platform_device *pdev) ...@@ -538,6 +543,7 @@ s1d13xxxfb_probe(struct platform_device *pdev)
struct fb_info *info; struct fb_info *info;
struct s1d13xxxfb_pdata *pdata = NULL; struct s1d13xxxfb_pdata *pdata = NULL;
int ret = 0; int ret = 0;
int i;
u8 revision; u8 revision;
dbg("probe called: device is %p\n", pdev); dbg("probe called: device is %p\n", pdev);
...@@ -607,10 +613,19 @@ s1d13xxxfb_probe(struct platform_device *pdev) ...@@ -607,10 +613,19 @@ s1d13xxxfb_probe(struct platform_device *pdev)
goto bail; goto bail;
} }
revision = s1d13xxxfb_readreg(default_par, S1DREG_REV_CODE); revision = s1d13xxxfb_readreg(default_par, S1DREG_REV_CODE) >> 2;
if ((revision >> 2) != S1D_CHIP_REV) {
printk(KERN_INFO PFX "chip not found: %i\n", (revision >> 2)); ret = -ENODEV;
ret = -ENODEV;
for (i = 0; i < ARRAY_SIZE(s1d13xxxfb_revisions); i++) {
if (revision == s1d13xxxfb_revisions[i])
ret = 0;
}
if (!ret)
printk(KERN_INFO PFX "chip revision %i\n", revision);
else {
printk(KERN_INFO PFX "unknown chip revision %i\n", revision);
goto bail; goto bail;
} }
......
...@@ -14,7 +14,8 @@ ...@@ -14,7 +14,8 @@
#define S1D13XXXFB_H #define S1D13XXXFB_H
#define S1D_PALETTE_SIZE 256 #define S1D_PALETTE_SIZE 256
#define S1D_CHIP_REV 7 /* expected chip revision number for s1d13806 */ #define S1D13506_CHIP_REV 4 /* expected chip revision number for s1d13506 */
#define S1D13806_CHIP_REV 7 /* expected chip revision number for s1d13806 */
#define S1D_FBID "S1D13806" #define S1D_FBID "S1D13806"
#define S1D_DEVICENAME "s1d13806fb" #define S1D_DEVICENAME "s1d13806fb"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment