From 982a1dab66c3522e292dd62eef13e05e15a3c4ab Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Wed, 23 Jun 2010 17:39:26 +0200 Subject: glamo-fb: Remove nops in reg_{read,write} --- drivers/video/glamo-fb.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/drivers/video/glamo-fb.c b/drivers/video/glamo-fb.c index c74ea733a8c..55008a1bf7d 100644 --- a/drivers/video/glamo-fb.c +++ b/drivers/video/glamo-fb.c @@ -91,25 +91,15 @@ static void glamo_output_disable(struct glamofb_handle *gfb) } -static int reg_read(struct glamofb_handle *glamo, +static inline int reg_read(struct glamofb_handle *glamo, u_int16_t reg) { - int i = 0; - - for (i = 0; i != 2; i++) - nop(); - return readw(glamo->base + reg); } -static void reg_write(struct glamofb_handle *glamo, +static inline void reg_write(struct glamofb_handle *glamo, uint16_t reg, uint16_t val) { - int i = 0; - - for (i = 0; i != 2; i++) - nop(); - writew(val, glamo->base + reg); } -- cgit v1.2.3 From 1e55d72c2ef6fc043d4044de46da6404a5747835 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Wed, 23 Jun 2010 17:49:34 +0200 Subject: glamo-fb: Code style cleanups --- drivers/video/glamo-fb.c | 92 +++++++++++++++++++++--------------------------- 1 file 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 -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 "); -- cgit v1.2.3 From 8870dee7fab9745b2877734c915f153c8aa1409c Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Wed, 23 Jun 2010 17:51:13 +0200 Subject: glamo-fb: Drop unused exports glamo_cmd_mode is only used in glamofb.c and glamo_cmd_write is not used at all. --- drivers/video/glamo-fb.c | 142 ++++++++++++++++++++--------------------------- include/linux/glamofb.h | 9 --- 2 files changed, 60 insertions(+), 91 deletions(-) diff --git a/drivers/video/glamo-fb.c b/drivers/video/glamo-fb.c index 74fdbf691ad..517cc5c711e 100644 --- a/drivers/video/glamo-fb.c +++ b/drivers/video/glamo-fb.c @@ -261,6 +261,66 @@ static void __rotate_lcd(struct glamofb_handle *glamo, uint32_t rotation) GLAMO_LCD_MODE1_ROTATE_EN : 0); } +static inline int glamofb_cmdq_empty(struct glamofb_handle *gfb) +{ + /* DGCMdQempty -- 1 == command queue is empty */ + return reg_read(gfb, GLAMO_REG_LCD_STATUS1) & (1 << 15); +} + +/* call holding gfb->lock_cmd when locking, until you unlock */ +static int glamofb_cmd_mode(struct glamofb_handle *gfb, int on) +{ + int timeout = 2000000; + + dev_dbg(gfb->dev, "glamofb_cmd_mode(gfb=%p, on=%d)\n", gfb, on); + if (on) { + dev_dbg(gfb->dev, "%s: waiting for cmdq empty: ", + __func__); + while (!glamofb_cmdq_empty(gfb) && (timeout--)) + cpu_relax(); + if (timeout < 0) { + printk(KERN_ERR "glamofb cmd_queue never got empty\n"); + return -EIO; + } + dev_dbg(gfb->dev, "empty!\n"); + + /* display the entire frame then switch to command */ + reg_write(gfb, GLAMO_REG_LCD_COMMAND1, + GLAMO_LCD_CMD_TYPE_DISP | + GLAMO_LCD_CMD_DATA_FIRE_VSYNC); + + /* wait until lcd idle */ + dev_dbg(gfb->dev, "waiting for lcd idle: "); + timeout = 2000000; + while (!(reg_read(gfb, GLAMO_REG_LCD_STATUS2) & (1 << 12)) && + (timeout--)) + cpu_relax(); + if (timeout < 0) { + printk(KERN_ERR"*************" + "glamofb lcd never idle" + "*************\n"); + return -EIO; + } + + mdelay(100); + + dev_dbg(gfb->dev, "cmd mode entered\n"); + + } else { + /* RGB interface needs vsync/hsync */ + if (reg_read(gfb, GLAMO_REG_LCD_MODE3) & GLAMO_LCD_MODE3_RGB) + reg_write(gfb, GLAMO_REG_LCD_COMMAND1, + GLAMO_LCD_CMD_TYPE_DISP | + GLAMO_LCD_CMD_DATA_DISP_SYNC); + + reg_write(gfb, GLAMO_REG_LCD_COMMAND1, + GLAMO_LCD_CMD_TYPE_DISP | + GLAMO_LCD_CMD_DATA_DISP_FIRE); + } + + return 0; +} + static void glamofb_program_mode(struct glamofb_handle *gfb) { unsigned int sync, bp, disp, fp, total; @@ -612,88 +672,6 @@ static int glamofb_cursor(struct fb_info *info, struct fb_cursor *cursor) } #endif -static inline int glamofb_cmdq_empty(struct glamofb_handle *gfb) -{ - /* DGCMdQempty -- 1 == command queue is empty */ - return reg_read(gfb, GLAMO_REG_LCD_STATUS1) & (1 << 15); -} - -/* call holding gfb->lock_cmd when locking, until you unlock */ -int glamofb_cmd_mode(struct glamofb_handle *gfb, int on) -{ - int timeout = 2000000; - - dev_dbg(gfb->dev, "glamofb_cmd_mode(gfb=%p, on=%d)\n", gfb, on); - if (on) { - dev_dbg(gfb->dev, "%s: waiting for cmdq empty: ", - __func__); - while (!glamofb_cmdq_empty(gfb) && (timeout--)) - cpu_relax(); - if (timeout < 0) { - printk(KERN_ERR "glamofb cmd_queue never got empty\n"); - return -EIO; - } - dev_dbg(gfb->dev, "empty!\n"); - - /* display the entire frame then switch to command */ - reg_write(gfb, GLAMO_REG_LCD_COMMAND1, - GLAMO_LCD_CMD_TYPE_DISP | - GLAMO_LCD_CMD_DATA_FIRE_VSYNC); - - /* wait until lcd idle */ - dev_dbg(gfb->dev, "waiting for lcd idle: "); - timeout = 2000000; - while (!(reg_read(gfb, GLAMO_REG_LCD_STATUS2) & (1 << 12)) && - (timeout--)) - cpu_relax(); - if (timeout < 0) { - printk(KERN_ERR"*************" - "glamofb lcd never idle" - "*************\n"); - return -EIO; - } - - mdelay(100); - - dev_dbg(gfb->dev, "cmd mode entered\n"); - - } else { - /* RGB interface needs vsync/hsync */ - if (reg_read(gfb, GLAMO_REG_LCD_MODE3) & GLAMO_LCD_MODE3_RGB) - reg_write(gfb, GLAMO_REG_LCD_COMMAND1, - GLAMO_LCD_CMD_TYPE_DISP | - GLAMO_LCD_CMD_DATA_DISP_SYNC); - - reg_write(gfb, GLAMO_REG_LCD_COMMAND1, - GLAMO_LCD_CMD_TYPE_DISP | - GLAMO_LCD_CMD_DATA_DISP_FIRE); - } - - return 0; -} -EXPORT_SYMBOL_GPL(glamofb_cmd_mode); - -int glamofb_cmd_write(struct glamofb_handle *gfb, uint16_t val) -{ - int timeout = 200000; - - dev_dbg(gfb->dev, "%s: waiting for cmdq empty\n", __func__); - while ((!glamofb_cmdq_empty(gfb)) && (timeout--)) - yield(); - if (timeout < 0) { - printk(KERN_ERR"*************" - "glamofb cmd_queue never got empty" - "*************\n"); - return 1; - } - dev_dbg(gfb->dev, "idle, writing 0x%04x\n", val); - - reg_write(gfb, GLAMO_REG_LCD_COMMAND1, val); - - return 0; -} -EXPORT_SYMBOL_GPL(glamofb_cmd_write); - static struct fb_ops glamofb_ops = { .owner = THIS_MODULE, .fb_check_var = glamofb_check_var, diff --git a/include/linux/glamofb.h b/include/linux/glamofb.h index 5f9fab5a487..e6edadbe81a 100644 --- a/include/linux/glamofb.h +++ b/include/linux/glamofb.h @@ -17,15 +17,6 @@ struct glamo_fb_platform_data { struct glamo_core *core; }; -int glamofb_cmd_mode(struct glamofb_handle *gfb, int on); -int glamofb_cmd_write(struct glamofb_handle *gfb, u_int16_t val); - -#ifdef CONFIG_MFD_GLAMO -void glamo_lcm_reset(struct platform_device *pdev, int level); -#else -#define glamo_lcm_reset(...) do {} while (0) -#endif - #endif #define GLAMOFB_ENGINE_ENABLE _IOW('F', 0x1, __u32) -- cgit v1.2.3 From c42fae0d24de8e7590a0b36e66eb6bc3b3e773c7 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Wed, 23 Jun 2010 17:55:46 +0200 Subject: glamofb: Drop unsued core field from glamo_fb_platform_data --- include/linux/glamofb.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/include/linux/glamofb.h b/include/linux/glamofb.h index e6edadbe81a..896579be1a0 100644 --- a/include/linux/glamofb.h +++ b/include/linux/glamofb.h @@ -1,20 +1,15 @@ #ifndef _LINUX_GLAMOFB_H #define _LINUX_GLAMOFB_H -#include - #ifdef __KERNEL__ -struct glamo_core; -struct glamofb_handle; +#include struct glamo_fb_platform_data { int width, height; int num_modes; struct fb_videomode *modes; - - struct glamo_core *core; }; #endif -- cgit v1.2.3