projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc
[cascardo/linux.git]
/
drivers
/
video
/
au1100fb.c
diff --git
a/drivers/video/au1100fb.c
b/drivers/video/au1100fb.c
index
9ef68cd
..
ef5c16f
100644
(file)
--- a/
drivers/video/au1100fb.c
+++ b/
drivers/video/au1100fb.c
@@
-8,6
+8,7
@@
* <c.pellegrin@exadron.com>
*
* PM support added by Rodolfo Giometti <giometti@linux.it>
* <c.pellegrin@exadron.com>
*
* PM support added by Rodolfo Giometti <giometti@linux.it>
+ * Cursor enable/disable by Rodolfo Giometti <giometti@linux.it>
*
* Copyright 2002 MontaVista Software
* Author: MontaVista Software, Inc.
*
* Copyright 2002 MontaVista Software
* Author: MontaVista Software, Inc.
@@
-40,7
+41,6
@@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
* with this program; if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/errno.h>
@@
-111,6
+111,10
@@
static struct fb_var_screeninfo au1100fb_var __initdata = {
static struct au1100fb_drv_info drv_info;
static struct au1100fb_drv_info drv_info;
+static int nocursor = 0;
+module_param(nocursor, int, 0644);
+MODULE_PARM_DESC(nocursor, "cursor enable/disable");
+
/*
* Set hardware with var settings. This will enable the controller with a specific
* mode, normally validated with the fb_check_var method
/*
* Set hardware with var settings. This will enable the controller with a specific
* mode, normally validated with the fb_check_var method
@@
-157,7
+161,7
@@
int au1100fb_setmode(struct au1100fb_device *fbdev)
info->fix.visual = FB_VISUAL_TRUECOLOR;
info->fix.line_length = info->var.xres_virtual << 1; /* depth=16 */
info->fix.visual = FB_VISUAL_TRUECOLOR;
info->fix.line_length = info->var.xres_virtual << 1; /* depth=16 */
- }
+
}
} else {
/* mono */
info->fix.visual = FB_VISUAL_MONO10;
} else {
/* mono */
info->fix.visual = FB_VISUAL_MONO10;
@@
-165,20
+169,16
@@
int au1100fb_setmode(struct au1100fb_device *fbdev)
}
info->screen_size = info->fix.line_length * info->var.yres_virtual;
}
info->screen_size = info->fix.line_length * info->var.yres_virtual;
+ info->var.rotate = ((fbdev->panel->control_base&LCD_CONTROL_SM_MASK) \
+ >> LCD_CONTROL_SM_BIT) * 90;
/* Determine BPP mode and format */
/* Determine BPP mode and format */
- fbdev->regs->lcd_control = fbdev->panel->control_base |
- ((info->var.rotate/90) << LCD_CONTROL_SM_BIT);
-
- fbdev->regs->lcd_intenable = 0;
- fbdev->regs->lcd_intstatus = 0;
-
+ fbdev->regs->lcd_control = fbdev->panel->control_base;
fbdev->regs->lcd_horztiming = fbdev->panel->horztiming;
fbdev->regs->lcd_horztiming = fbdev->panel->horztiming;
-
fbdev->regs->lcd_verttiming = fbdev->panel->verttiming;
fbdev->regs->lcd_verttiming = fbdev->panel->verttiming;
-
fbdev->regs->lcd_clkcontrol = fbdev->panel->clkcontrol_base;
fbdev->regs->lcd_clkcontrol = fbdev->panel->clkcontrol_base;
-
+ fbdev->regs->lcd_intenable = 0;
+ fbdev->regs->lcd_intstatus = 0;
fbdev->regs->lcd_dmaaddr0 = LCD_DMA_SA_N(fbdev->fb_phys);
if (panel_is_dual(fbdev->panel)) {
fbdev->regs->lcd_dmaaddr0 = LCD_DMA_SA_N(fbdev->fb_phys);
if (panel_is_dual(fbdev->panel)) {
@@
-207,6
+207,8
@@
int au1100fb_setmode(struct au1100fb_device *fbdev)
/* Resume controller */
fbdev->regs->lcd_control |= LCD_CONTROL_GO;
/* Resume controller */
fbdev->regs->lcd_control |= LCD_CONTROL_GO;
+ mdelay(10);
+ au1100fb_fb_blank(VESA_NO_BLANKING, info);
return 0;
}
return 0;
}
@@
-425,6
+427,17
@@
int au1100fb_fb_mmap(struct fb_info *fbi, struct vm_area_struct *vma)
return 0;
}
return 0;
}
+/* fb_cursor
+ * Used to disable cursor drawing...
+ */
+int au1100fb_fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
+{
+ if (nocursor)
+ return 0;
+ else
+ return -EINVAL; /* just to force soft_cursor() call */
+}
+
static struct fb_ops au1100fb_ops =
{
.owner = THIS_MODULE,
static struct fb_ops au1100fb_ops =
{
.owner = THIS_MODULE,
@@
-436,6
+449,7
@@
static struct fb_ops au1100fb_ops =
.fb_imageblit = cfb_imageblit,
.fb_rotate = au1100fb_fb_rotate,
.fb_mmap = au1100fb_fb_mmap,
.fb_imageblit = cfb_imageblit,
.fb_rotate = au1100fb_fb_rotate,
.fb_mmap = au1100fb_fb_mmap,
+ .fb_cursor = au1100fb_fb_cursor,
};
};
@@
-680,7
+694,7
@@
int au1100fb_setup(char *options)
if (options) {
while ((this_opt = strsep(&options,",")) != NULL) {
/* Panel option */
if (options) {
while ((this_opt = strsep(&options,",")) != NULL) {
/* Panel option */
- if (!strncmp(this_opt, "panel:", 6)) {
+
if (!strncmp(this_opt, "panel:", 6)) {
int i;
this_opt += 6;
for (i = 0; i < num_panels; i++) {
int i;
this_opt += 6;
for (i = 0; i < num_panels; i++) {
@@
-688,13
+702,18
@@
int au1100fb_setup(char *options)
known_lcd_panels[i].name,
strlen(this_opt))) {
panel_idx = i;
known_lcd_panels[i].name,
strlen(this_opt))) {
panel_idx = i;
- break;
+ break;
+ }
}
}
- }
if (i >= num_panels) {
print_warn("Panel %s not supported!", this_opt);
}
}
if (i >= num_panels) {
print_warn("Panel %s not supported!", this_opt);
}
}
+ if (!strncmp(this_opt, "nocursor", 8)) {
+ this_opt += 8;
+ nocursor = 1;
+ print_info("Cursor disabled");
+ }
/* Mode option (only option that start with digit) */
else if (isdigit(this_opt[0])) {
mode = kmalloc(strlen(this_opt) + 1, GFP_KERNEL);
/* Mode option (only option that start with digit) */
else if (isdigit(this_opt[0])) {
mode = kmalloc(strlen(this_opt) + 1, GFP_KERNEL);
@@
-703,7
+722,7
@@
int au1100fb_setup(char *options)
/* Unsupported option */
else {
print_warn("Unsupported option \"%s\"", this_opt);
/* Unsupported option */
else {
print_warn("Unsupported option \"%s\"", this_opt);
- }
+
}
}
}
}
}