aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/video/glamo-fb.c92
1 files changed, 41 insertions, 51 deletions
diff --git a/drivers/video/glamo-fb.c b/drivers/video/glamo-fb.c
index 55008a1bf7d..74fdbf691ad 100644
--- a/drivers/video/glamo-fb.c
+++ b/drivers/video/glamo-fb.c
@@ -43,25 +43,29 @@
#include <linux/glamofb.h>
-static void glamofb_program_mode(struct glamofb_handle *glamo);
-
struct glamofb_handle {
struct glamo_core *core;
struct fb_info *fb;
struct device *dev;
+
struct resource *reg;
struct resource *fb_res;
- char __iomem *base;
+ void __iomem *base;
+ void __iomem *cursor_addr;
+
struct glamo_fb_platform_data *mach_info;
- char __iomem *cursor_addr;
+
int cursor_on;
- u_int32_t pseudo_pal[16];
- spinlock_t lock_cmd;
int blank_mode;
int mode_set; /* 0 if the current display mode hasn't been set on the glamo */
int output_enabled; /* 0 if the video output is disabled */
+
+ spinlock_t lock_cmd;
+ uint32_t pseudo_pal[16];
};
+static void glamofb_program_mode(struct glamofb_handle *glamo);
+
static void glamo_output_enable(struct glamofb_handle *gfb)
{
struct glamo_core *gcore = gfb->core;
@@ -91,19 +95,18 @@ static void glamo_output_disable(struct glamofb_handle *gfb)
}
-static inline int reg_read(struct glamofb_handle *glamo,
- u_int16_t reg)
+static inline int reg_read(struct glamofb_handle *glamo, uint16_t reg)
{
return readw(glamo->base + reg);
}
-static inline void reg_write(struct glamofb_handle *glamo,
- uint16_t reg, uint16_t val)
+static inline void reg_write(struct glamofb_handle *glamo, uint16_t reg,
+ uint16_t val)
{
writew(val, glamo->base + reg);
}
-static struct glamo_script glamo_regs[] = {
+static const struct glamo_script glamo_regs[] = {
{ GLAMO_REG_LCD_MODE1, 0x0020 },
/* no display rotation, no hardware cursor, no dither, no gamma,
* no retrace flip, vsync low-active, hsync low active,
@@ -131,12 +134,12 @@ static struct glamo_script glamo_regs[] = {
};
static int glamofb_run_script(struct glamofb_handle *glamo,
- struct glamo_script *script, int len)
+ const struct glamo_script *script, size_t len)
{
- int i;
+ size_t i;
for (i = 0; i < len; i++) {
- struct glamo_script *line = &script[i];
+ const struct glamo_script *line = &script[i];
if (line->reg == 0xffff)
return 0;
@@ -150,7 +153,7 @@ static int glamofb_run_script(struct glamofb_handle *glamo,
}
static int glamofb_check_var(struct fb_var_screeninfo *var,
- struct fb_info *info)
+ struct fb_info *info)
{
struct glamofb_handle *glamo = info->par;
@@ -199,19 +202,16 @@ static int glamofb_check_var(struct fb_var_screeninfo *var,
case 32:
default:
/* The Smedia Glamo doesn't support anything but 16bit color */
- printk(KERN_ERR
- "Smedia driver does not [yet?] support 24/32bpp\n");
return -EINVAL;
}
return 0;
}
-static void reg_set_bit_mask(struct glamofb_handle *glamo,
- uint16_t reg, uint16_t mask,
- uint16_t val)
+static void reg_set_bit_mask(struct glamofb_handle *glamo, uint16_t reg,
+ uint16_t mask, uint16_t val)
{
- u_int16_t tmp;
+ uint16_t tmp;
val &= mask;
@@ -231,9 +231,9 @@ static void reg_set_bit_mask(struct glamofb_handle *glamo,
#define GLAMO_LCD_HV_RETR_DISP_END_MASK 0x03FF
/* the caller has to ensure lock_cmd is held and we are in cmd mode */
-static void __rotate_lcd(struct glamofb_handle *glamo, __u32 rotation)
+static void __rotate_lcd(struct glamofb_handle *glamo, uint32_t rotation)
{
- int glamo_rot;
+ uint32_t glamo_rot;
switch (rotation) {
case FB_ROTATE_CW:
@@ -263,7 +263,7 @@ static void __rotate_lcd(struct glamofb_handle *glamo, __u32 rotation)
static void glamofb_program_mode(struct glamofb_handle *gfb)
{
- int sync, bp, disp, fp, total;
+ unsigned int sync, bp, disp, fp, total;
unsigned long flags;
struct glamo_core *gcore = gfb->core;
struct fb_var_screeninfo *var = &gfb->fb->var;
@@ -340,15 +340,8 @@ out_unlock:
spin_unlock_irqrestore(&gfb->lock_cmd, flags);
}
-
-static int glamofb_pan_display(struct fb_var_screeninfo *var,
- struct fb_info *info)
-{
- return 0;
-}
-
static struct fb_videomode *glamofb_find_mode(struct fb_info *info,
- struct fb_var_screeninfo *var)
+ struct fb_var_screeninfo *var)
{
struct glamofb_handle *glamo = info->par;
struct glamo_fb_platform_data *pdata = glamo->mach_info;
@@ -429,16 +422,15 @@ static int glamofb_blank(int blank_mode, struct fb_info *info)
}
static inline unsigned int chan_to_field(unsigned int chan,
- struct fb_bitfield *bf)
+ struct fb_bitfield *bf)
{
chan &= 0xffff;
chan >>= 16 - bf->length;
return chan << bf->offset;
}
-static int glamofb_setcolreg(unsigned regno,
- unsigned red, unsigned green, unsigned blue,
- unsigned transp, struct fb_info *info)
+static int glamofb_setcolreg(unsigned regno, unsigned red, unsigned green,
+ unsigned blue, unsigned transp, struct fb_info *info)
{
struct glamofb_handle *glamo = info->par;
unsigned int val;
@@ -466,7 +458,7 @@ static int glamofb_setcolreg(unsigned regno,
}
static int glamofb_ioctl(struct fb_info *info, unsigned int cmd,
- unsigned long arg)
+ unsigned long arg)
{
struct glamofb_handle *gfb = (struct glamofb_handle *)info->par;
struct glamo_core *gcore = gfb->core;
@@ -492,8 +484,8 @@ static int glamofb_ioctl(struct fb_info *info, unsigned int cmd,
#ifdef CONFIG_MFD_GLAMO_HWACCEL
-static inline void glamofb_vsync_wait(struct glamofb_handle *glamo,
- int line, int size, int range)
+static inline void glamofb_vsync_wait(struct glamofb_handle *glamo, int line,
+ int size, int range)
{
int count[2];
@@ -681,8 +673,7 @@ int glamofb_cmd_mode(struct glamofb_handle *gfb, int on)
}
EXPORT_SYMBOL_GPL(glamofb_cmd_mode);
-
-int glamofb_cmd_write(struct glamofb_handle *gfb, u_int16_t val)
+int glamofb_cmd_write(struct glamofb_handle *gfb, uint16_t val)
{
int timeout = 200000;
@@ -706,7 +697,6 @@ EXPORT_SYMBOL_GPL(glamofb_cmd_write);
static struct fb_ops glamofb_ops = {
.owner = THIS_MODULE,
.fb_check_var = glamofb_check_var,
- .fb_pan_display = glamofb_pan_display,
.fb_set_par = glamofb_set_par,
.fb_blank = glamofb_blank,
.fb_setcolreg = glamofb_setcolreg,
@@ -730,7 +720,7 @@ static int glamofb_init_regs(struct glamofb_handle *glamo)
return 0;
}
-static int __init glamofb_probe(struct platform_device *pdev)
+static int __devinit glamofb_probe(struct platform_device *pdev)
{
int rc = -EIO;
struct fb_info *fbinfo;
@@ -799,8 +789,8 @@ static int __init glamofb_probe(struct platform_device *pdev)
goto out_release_fb;
}
- fbinfo->fix.smem_start = (unsigned long) glamofb->fb_res->start;
- fbinfo->fix.smem_len = (__u32) resource_size(glamofb->fb_res);
+ fbinfo->fix.smem_start = (unsigned long)glamofb->fb_res->start;
+ fbinfo->fix.smem_len = (__u32)resource_size(glamofb->fb_res);
fbinfo->screen_base = ioremap(glamofb->fb_res->start,
resource_size(glamofb->fb_res));
@@ -879,17 +869,18 @@ out_free:
return rc;
}
-static int glamofb_remove(struct platform_device *pdev)
+static int __devexit glamofb_remove(struct platform_device *pdev)
{
struct glamofb_handle *glamofb = platform_get_drvdata(pdev);
- platform_set_drvdata(pdev, NULL);
iounmap(glamofb->fb->screen_base);
iounmap(glamofb->base);
+
release_mem_region(glamofb->fb_res->start,
resource_size(glamofb->fb_res));
release_mem_region(glamofb->reg->start, resource_size(glamofb->reg));
+ platform_set_drvdata(pdev, NULL);
framebuffer_release(glamofb->fb);
return 0;
@@ -948,7 +939,7 @@ static const struct dev_pm_ops glamofb_pm_ops = {
static struct platform_driver glamofb_driver = {
.probe = glamofb_probe,
- .remove = glamofb_remove,
+ .remove = __devexit_p(glamofb_remove),
.driver = {
.name = "glamo-fb",
.owner = THIS_MODULE,
@@ -956,17 +947,16 @@ static struct platform_driver glamofb_driver = {
},
};
-static int __devinit glamofb_init(void)
+static int __init glamofb_init(void)
{
return platform_driver_register(&glamofb_driver);
}
+module_init(glamofb_init);
static void __exit glamofb_cleanup(void)
{
platform_driver_unregister(&glamofb_driver);
}
-
-module_init(glamofb_init);
module_exit(glamofb_cleanup);
MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");