fbdev fixes and updates for kernel v5.20-rc1
The two major changes in this patchset corrects VGA modes, color handling and various other smaller fixes in the Atari framebuffer (by Geert Uytterhoeven), and devm_* conversion, platform data fixes and header cleanups in the imxfb driver (by Uwe Kleine-König). Other small patches clean up code in sa1100fb, cirrusfb and omapfb, fix a refcount leak in amba-clcd (by Liang He), and adds parameter checks to arkfb, i740fb, vt8623fb and s3fb (by Zheyu Ma). -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQS86RI+GtKfB8BJu973ErUQojoPXwUCYu7IyAAKCRD3ErUQojoP X2jtAP961tA3uP7AdRkQj5jXzChAsDajkrA9vBf3Ihn1M73SHwEA/A6JOgPQAlp6 NGIwUlHEUikgylU9da2C0jzesstmJwU= =+7rt -----END PGP SIGNATURE----- Merge tag 'for-5.20/fbdev-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev Pull fbdev updates from Helge Deller: "The two major changes in this patchset corrects VGA modes, color handling and various other smaller fixes in the Atari framebuffer (by Geert Uytterhoeven), and devm_* conversion, platform data fixes and header cleanups in the imxfb driver (by Uwe Kleine-König). Other small patches clean up code in sa1100fb, cirrusfb and omapfb, fix a refcount leak in amba-clcd (by Liang He), and adds parameter checks to arkfb, i740fb, vt8623fb and s3fb (by Zheyu Ma)" * tag 'for-5.20/fbdev-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev: (27 commits) video: fbdev: s3fb: Check the size of screen before memset_io() video: fbdev: arkfb: Check the size of screen before memset_io() video: fbdev: vt8623fb: Check the size of screen before memset_io() video: fbdev: i740fb: Check the argument of i740_calc_vclk() video: fbdev: arkfb: Fix a divide-by-zero bug in ark_set_pixclock() video: fbdev: imxfb: fix return value check in imxfb_probe() video: fbdev: sis: fix typos in SiS_GetModeID() video: fbdev: imxfb: Convert request_mem_region + ioremap to devm_ioremap_resource video: fbdev: imxfb: Fold <linux/platform_data/video-imxfb.h> into only user video: fbdev: imxfb: Drop unused symbols from header video: fbdev: imxfb: Drop platform data support video: fbdev: amba-clcd: Fix refcount leak bugs video: fbdev: omapfb: Unexport omap*_update_window_async() video: fbdev: atari: Remove backward bug-compatibility video: fbdev: atari: Remove unused definitions and variables video: fbdev: atari: Fix VGA modes video: fbdev: atari: Fix TT High video mode vertical refresh video: fbdev: atari: Remove unneeded casts to void * video: fbdev: atari: Remove unneeded casts from void * video: fbdev: atari: Fix ext_setcolreg() ...
This commit is contained in:
commit
b5a8466d37
|
@ -367,8 +367,8 @@ activated by a "external:" sub-option.
|
|||
4.1.2) inverse
|
||||
--------------
|
||||
|
||||
Invert the display. This affects both, text (consoles) and graphics
|
||||
(X) display. Usually, the background is chosen to be black. With this
|
||||
Invert the display. This affects only text consoles.
|
||||
Usually, the background is chosen to be black. With this
|
||||
option, you can make the background white.
|
||||
|
||||
4.1.3) font
|
||||
|
|
|
@ -8139,7 +8139,6 @@ L: linux-fbdev@vger.kernel.org
|
|||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: drivers/video/fbdev/imxfb.c
|
||||
F: include/linux/platform_data/video-imxfb.h
|
||||
|
||||
FREESCALE IMX DDR PMU DRIVER
|
||||
M: Frank Li <Frank.li@nxp.com>
|
||||
|
|
|
@ -84,9 +84,6 @@ static const struct fb_fix_screeninfo mc68x328fb_fix __initconst = {
|
|||
/*
|
||||
* Interface used by the world
|
||||
*/
|
||||
int mc68x328fb_init(void);
|
||||
int mc68x328fb_setup(char *);
|
||||
|
||||
static int mc68x328fb_check_var(struct fb_var_screeninfo *var,
|
||||
struct fb_info *info);
|
||||
static int mc68x328fb_set_par(struct fb_info *info);
|
||||
|
@ -403,7 +400,7 @@ static int mc68x328fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
|
|||
#endif
|
||||
}
|
||||
|
||||
int __init mc68x328fb_setup(char *options)
|
||||
static int __init mc68x328fb_setup(char *options)
|
||||
{
|
||||
if (!options || !*options)
|
||||
return 1;
|
||||
|
@ -414,7 +411,7 @@ int __init mc68x328fb_setup(char *options)
|
|||
* Initialisation
|
||||
*/
|
||||
|
||||
int __init mc68x328fb_init(void)
|
||||
static int __init mc68x328fb_init(void)
|
||||
{
|
||||
#ifndef MODULE
|
||||
char *option = NULL;
|
||||
|
|
|
@ -698,16 +698,18 @@ static int clcdfb_of_init_display(struct clcd_fb *fb)
|
|||
return -ENODEV;
|
||||
|
||||
panel = of_graph_get_remote_port_parent(endpoint);
|
||||
if (!panel)
|
||||
return -ENODEV;
|
||||
if (!panel) {
|
||||
err = -ENODEV;
|
||||
goto out_endpoint_put;
|
||||
}
|
||||
|
||||
err = clcdfb_of_get_backlight(&fb->dev->dev, fb->panel);
|
||||
if (err)
|
||||
return err;
|
||||
goto out_panel_put;
|
||||
|
||||
err = clcdfb_of_get_mode(&fb->dev->dev, panel, fb->panel);
|
||||
if (err)
|
||||
return err;
|
||||
goto out_panel_put;
|
||||
|
||||
err = of_property_read_u32(fb->dev->dev.of_node, "max-memory-bandwidth",
|
||||
&max_bandwidth);
|
||||
|
@ -736,11 +738,21 @@ static int clcdfb_of_init_display(struct clcd_fb *fb)
|
|||
|
||||
if (of_property_read_u32_array(endpoint,
|
||||
"arm,pl11x,tft-r0g0b0-pads",
|
||||
tft_r0b0g0, ARRAY_SIZE(tft_r0b0g0)) != 0)
|
||||
return -ENOENT;
|
||||
tft_r0b0g0, ARRAY_SIZE(tft_r0b0g0)) != 0) {
|
||||
err = -ENOENT;
|
||||
goto out_panel_put;
|
||||
}
|
||||
|
||||
of_node_put(panel);
|
||||
of_node_put(endpoint);
|
||||
|
||||
return clcdfb_of_init_tft_panel(fb, tft_r0b0g0[0],
|
||||
tft_r0b0g0[1], tft_r0b0g0[2]);
|
||||
out_panel_put:
|
||||
of_node_put(panel);
|
||||
out_endpoint_put:
|
||||
of_node_put(endpoint);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int clcdfb_of_vram_setup(struct clcd_fb *fb)
|
||||
|
|
|
@ -2540,27 +2540,16 @@ static int amifb_blank(int blank, struct fb_info *info)
|
|||
static int amifb_pan_display(struct fb_var_screeninfo *var,
|
||||
struct fb_info *info)
|
||||
{
|
||||
if (var->vmode & FB_VMODE_YWRAP) {
|
||||
if (var->yoffset < 0 ||
|
||||
var->yoffset >= info->var.yres_virtual || var->xoffset)
|
||||
return -EINVAL;
|
||||
} else {
|
||||
if (!(var->vmode & FB_VMODE_YWRAP)) {
|
||||
/*
|
||||
* TODO: There will be problems when xpan!=1, so some columns
|
||||
* on the right side will never be seen
|
||||
*/
|
||||
if (var->xoffset + info->var.xres >
|
||||
upx(16 << maxfmode, info->var.xres_virtual) ||
|
||||
var->yoffset + info->var.yres > info->var.yres_virtual)
|
||||
upx(16 << maxfmode, info->var.xres_virtual))
|
||||
return -EINVAL;
|
||||
}
|
||||
ami_pan_var(var, info);
|
||||
info->var.xoffset = var->xoffset;
|
||||
info->var.yoffset = var->yoffset;
|
||||
if (var->vmode & FB_VMODE_YWRAP)
|
||||
info->var.vmode |= FB_VMODE_YWRAP;
|
||||
else
|
||||
info->var.vmode &= ~FB_VMODE_YWRAP;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -781,7 +781,12 @@ static int arkfb_set_par(struct fb_info *info)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
ark_set_pixclock(info, (hdiv * info->var.pixclock) / hmul);
|
||||
value = (hdiv * info->var.pixclock) / hmul;
|
||||
if (!value) {
|
||||
fb_dbg(info, "invalid pixclock\n");
|
||||
value = 1;
|
||||
}
|
||||
ark_set_pixclock(info, value);
|
||||
svga_set_timings(par->state.vgabase, &ark_timing_regs, &(info->var), hmul, hdiv,
|
||||
(info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1,
|
||||
(info->var.vmode & FB_VMODE_INTERLACED) ? 2 : 1,
|
||||
|
@ -792,6 +797,8 @@ static int arkfb_set_par(struct fb_info *info)
|
|||
value = ((value * hmul / hdiv) / 8) - 5;
|
||||
vga_wcrt(par->state.vgabase, 0x42, (value + 1) / 2);
|
||||
|
||||
if (screen_size > info->screen_size)
|
||||
screen_size = info->screen_size;
|
||||
memset_io(info->screen_base, 0x00, screen_size);
|
||||
/* Device and screen back on */
|
||||
svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80);
|
||||
|
|
|
@ -236,8 +236,6 @@ static int *MV300_reg = MV300_reg_8bit;
|
|||
#endif /* ATAFB_EXT */
|
||||
|
||||
|
||||
static int inverse;
|
||||
|
||||
/*
|
||||
* struct fb_ops {
|
||||
* * open/release and usage marking
|
||||
|
@ -467,27 +465,27 @@ static struct fb_videomode atafb_modedb[] __initdata = {
|
|||
{
|
||||
/* 320x200, 15 kHz, 60 Hz (ST low) */
|
||||
"st-low", 60, 320, 200, 32000, 32, 16, 31, 14, 96, 4,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
0, FB_VMODE_NONINTERLACED
|
||||
}, {
|
||||
/* 640x200, 15 kHz, 60 Hz (ST medium) */
|
||||
"st-mid", 60, 640, 200, 32000, 32, 16, 31, 14, 96, 4,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
0, FB_VMODE_NONINTERLACED
|
||||
}, {
|
||||
/* 640x400, 30.25 kHz, 63.5 Hz (ST high) */
|
||||
"st-high", 63, 640, 400, 32000, 128, 0, 40, 14, 128, 4,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
0, FB_VMODE_NONINTERLACED
|
||||
}, {
|
||||
/* 320x480, 15 kHz, 60 Hz (TT low) */
|
||||
"tt-low", 60, 320, 480, 31041, 120, 100, 8, 16, 140, 30,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
0, FB_VMODE_NONINTERLACED
|
||||
}, {
|
||||
/* 640x480, 29 kHz, 57 Hz (TT medium) */
|
||||
"tt-mid", 60, 640, 480, 31041, 120, 100, 8, 16, 140, 30,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
0, FB_VMODE_NONINTERLACED
|
||||
}, {
|
||||
/* 1280x960, 72 kHz, 72 Hz (TT high) */
|
||||
"tt-high", 57, 1280, 960, 7760, 260, 60, 36, 4, 192, 4,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
"tt-high", 72, 1280, 960, 7760, 260, 60, 36, 4, 192, 4,
|
||||
0, FB_VMODE_NONINTERLACED
|
||||
},
|
||||
|
||||
/*
|
||||
|
@ -496,12 +494,12 @@ static struct fb_videomode atafb_modedb[] __initdata = {
|
|||
|
||||
{
|
||||
/* 640x480, 31 kHz, 60 Hz (VGA) */
|
||||
"vga", 63.5, 640, 480, 32000, 18, 42, 31, 11, 96, 3,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
"vga", 60, 640, 480, 39721, 42, 18, 31, 11, 100, 3,
|
||||
0, FB_VMODE_NONINTERLACED
|
||||
}, {
|
||||
/* 640x400, 31 kHz, 70 Hz (VGA) */
|
||||
"vga70", 70, 640, 400, 32000, 18, 42, 31, 11, 96, 3,
|
||||
FB_SYNC_VERT_HIGH_ACT | FB_SYNC_COMP_HIGH_ACT, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
"vga70", 70, 640, 400, 39721, 42, 18, 31, 11, 100, 3,
|
||||
FB_SYNC_VERT_HIGH_ACT | FB_SYNC_COMP_HIGH_ACT, FB_VMODE_NONINTERLACED
|
||||
},
|
||||
|
||||
/*
|
||||
|
@ -511,7 +509,7 @@ static struct fb_videomode atafb_modedb[] __initdata = {
|
|||
{
|
||||
/* 896x608, 31 kHz, 60 Hz (Falcon High) */
|
||||
"falh", 60, 896, 608, 32000, 18, 42, 31, 1, 96,3,
|
||||
0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP
|
||||
0, FB_VMODE_NONINTERLACED
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -1010,10 +1008,6 @@ static int falcon_decode_var(struct fb_var_screeninfo *var,
|
|||
else if (yres_virtual < yres)
|
||||
yres_virtual = yres;
|
||||
|
||||
/* backward bug-compatibility */
|
||||
if (var->pixclock > 1)
|
||||
var->pixclock -= 1;
|
||||
|
||||
par->hw.falcon.line_width = bpp * xres / 16;
|
||||
par->hw.falcon.line_offset = bpp * (xres_virtual - xres) / 16;
|
||||
|
||||
|
@ -1072,8 +1066,6 @@ static int falcon_decode_var(struct fb_var_screeninfo *var,
|
|||
xstretch = 2; /* Double pixel width only for hicolor */
|
||||
/* Default values are used for vert./hor. timing if no pixelclock given. */
|
||||
if (var->pixclock == 0) {
|
||||
int linesize;
|
||||
|
||||
/* Choose master pixelclock depending on hor. timing */
|
||||
plen = 1 * xstretch;
|
||||
if ((plen * xres + f25.right + f25.hsync + f25.left) *
|
||||
|
@ -1092,7 +1084,6 @@ static int falcon_decode_var(struct fb_var_screeninfo *var,
|
|||
left_margin = pclock->left / plen;
|
||||
right_margin = pclock->right / plen;
|
||||
hsync_len = pclock->hsync / plen;
|
||||
linesize = left_margin + xres + right_margin + hsync_len;
|
||||
upper_margin = 31;
|
||||
lower_margin = 11;
|
||||
vsync_len = 3;
|
||||
|
@ -1641,7 +1632,7 @@ static irqreturn_t falcon_vbl_switcher(int irq, void *dummy)
|
|||
static int falcon_pan_display(struct fb_var_screeninfo *var,
|
||||
struct fb_info *info)
|
||||
{
|
||||
struct atafb_par *par = (struct atafb_par *)info->par;
|
||||
struct atafb_par *par = info->par;
|
||||
|
||||
int xoffset;
|
||||
int bpp = info->var.bits_per_pixel;
|
||||
|
@ -2208,6 +2199,10 @@ static int ext_setcolreg(unsigned int regno, unsigned int red,
|
|||
if (regno > 255)
|
||||
return 1;
|
||||
|
||||
red >>= 8;
|
||||
green >>= 8;
|
||||
blue >>= 8;
|
||||
|
||||
switch (external_card_type) {
|
||||
case IS_VGA:
|
||||
OUTB(0x3c8, regno);
|
||||
|
@ -2261,7 +2256,7 @@ static void set_screen_base(void *s_base)
|
|||
|
||||
static int pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||
{
|
||||
struct atafb_par *par = (struct atafb_par *)info->par;
|
||||
struct atafb_par *par = info->par;
|
||||
|
||||
if (!fbhw->set_screen_base ||
|
||||
(!ATARIHW_PRESENT(EXTD_SHIFTER) && var->xoffset))
|
||||
|
@ -2407,55 +2402,19 @@ static void atafb_set_disp(struct fb_info *info)
|
|||
static int
|
||||
atafb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||
{
|
||||
int xoffset = var->xoffset;
|
||||
int yoffset = var->yoffset;
|
||||
int err;
|
||||
|
||||
if (var->vmode & FB_VMODE_YWRAP) {
|
||||
if (yoffset < 0 || yoffset >= info->var.yres_virtual || xoffset)
|
||||
return -EINVAL;
|
||||
} else {
|
||||
if (xoffset + info->var.xres > info->var.xres_virtual ||
|
||||
yoffset + info->var.yres > info->var.yres_virtual)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (fbhw->pan_display) {
|
||||
err = fbhw->pan_display(var, info);
|
||||
if (err)
|
||||
return err;
|
||||
} else
|
||||
if (!fbhw->pan_display)
|
||||
return -EINVAL;
|
||||
|
||||
info->var.xoffset = xoffset;
|
||||
info->var.yoffset = yoffset;
|
||||
|
||||
if (var->vmode & FB_VMODE_YWRAP)
|
||||
info->var.vmode |= FB_VMODE_YWRAP;
|
||||
else
|
||||
info->var.vmode &= ~FB_VMODE_YWRAP;
|
||||
|
||||
return 0;
|
||||
return fbhw->pan_display(var, info);
|
||||
}
|
||||
|
||||
/*
|
||||
* generic drawing routines; imageblit needs updating for image depth > 1
|
||||
*/
|
||||
|
||||
#if BITS_PER_LONG == 32
|
||||
#define BYTES_PER_LONG 4
|
||||
#define SHIFT_PER_LONG 5
|
||||
#elif BITS_PER_LONG == 64
|
||||
#define BYTES_PER_LONG 8
|
||||
#define SHIFT_PER_LONG 6
|
||||
#else
|
||||
#define Please update me
|
||||
#endif
|
||||
|
||||
|
||||
static void atafb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
|
||||
{
|
||||
struct atafb_par *par = (struct atafb_par *)info->par;
|
||||
struct atafb_par *par = info->par;
|
||||
int x2, y2;
|
||||
u32 width, height;
|
||||
|
||||
|
@ -2498,7 +2457,7 @@ static void atafb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
|
|||
|
||||
static void atafb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
|
||||
{
|
||||
struct atafb_par *par = (struct atafb_par *)info->par;
|
||||
struct atafb_par *par = info->par;
|
||||
int x2, y2;
|
||||
u32 dx, dy, sx, sy, width, height;
|
||||
int rev_copy = 0;
|
||||
|
@ -2552,10 +2511,8 @@ static void atafb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
|
|||
|
||||
static void atafb_imageblit(struct fb_info *info, const struct fb_image *image)
|
||||
{
|
||||
struct atafb_par *par = (struct atafb_par *)info->par;
|
||||
struct atafb_par *par = info->par;
|
||||
int x2, y2;
|
||||
unsigned long *dst;
|
||||
int dst_idx;
|
||||
const char *src;
|
||||
u32 dx, dy, width, height, pitch;
|
||||
|
||||
|
@ -2582,10 +2539,6 @@ static void atafb_imageblit(struct fb_info *info, const struct fb_image *image)
|
|||
|
||||
if (image->depth == 1) {
|
||||
// used for font data
|
||||
dst = (unsigned long *)
|
||||
((unsigned long)info->screen_base & ~(BYTES_PER_LONG - 1));
|
||||
dst_idx = ((unsigned long)info->screen_base & (BYTES_PER_LONG - 1)) * 8;
|
||||
dst_idx += dy * par->next_line * 8 + dx;
|
||||
src = image->data;
|
||||
pitch = (image->width + 7) / 8;
|
||||
while (height--) {
|
||||
|
@ -2622,14 +2575,14 @@ atafb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
|
|||
switch (cmd) {
|
||||
#ifdef FBCMD_GET_CURRENTPAR
|
||||
case FBCMD_GET_CURRENTPAR:
|
||||
if (copy_to_user((void *)arg, (void *)¤t_par,
|
||||
if (copy_to_user((void *)arg, ¤t_par,
|
||||
sizeof(struct atafb_par)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
#endif
|
||||
#ifdef FBCMD_SET_CURRENTPAR
|
||||
case FBCMD_SET_CURRENTPAR:
|
||||
if (copy_from_user((void *)¤t_par, (void *)arg,
|
||||
if (copy_from_user(¤t_par, (void *)arg,
|
||||
sizeof(struct atafb_par)))
|
||||
return -EFAULT;
|
||||
ata_set_par(¤t_par);
|
||||
|
@ -2695,7 +2648,7 @@ static int atafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
|||
* hw par just decoded */
|
||||
static int atafb_set_par(struct fb_info *info)
|
||||
{
|
||||
struct atafb_par *par = (struct atafb_par *)info->par;
|
||||
struct atafb_par *par = info->par;
|
||||
|
||||
/* Decode wanted screen parameters */
|
||||
fbhw->decode_var(&info->var, par);
|
||||
|
@ -2981,7 +2934,7 @@ static void __init atafb_setup_user(char *spec)
|
|||
}
|
||||
}
|
||||
|
||||
int __init atafb_setup(char *options)
|
||||
static int __init atafb_setup(char *options)
|
||||
{
|
||||
char *this_opt;
|
||||
int temp;
|
||||
|
@ -2996,7 +2949,7 @@ int __init atafb_setup(char *options)
|
|||
default_par = temp;
|
||||
mode_option = this_opt;
|
||||
} else if (!strcmp(this_opt, "inverse"))
|
||||
inverse = 1;
|
||||
fb_invert_cmaps();
|
||||
else if (!strncmp(this_opt, "hwscroll_", 9)) {
|
||||
hwscroll = simple_strtoul(this_opt + 9, NULL, 10);
|
||||
if (hwscroll < 0)
|
||||
|
|
|
@ -2301,7 +2301,7 @@ err_release_fb:
|
|||
return error;
|
||||
}
|
||||
|
||||
void cirrusfb_zorro_unregister(struct zorro_dev *z)
|
||||
static void cirrusfb_zorro_unregister(struct zorro_dev *z)
|
||||
{
|
||||
struct fb_info *info = zorro_get_drvdata(z);
|
||||
|
||||
|
|
|
@ -280,7 +280,7 @@ static struct platform_device dnfb_device = {
|
|||
.name = "dnfb",
|
||||
};
|
||||
|
||||
int __init dnfb_init(void)
|
||||
static int __init dnfb_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
|
@ -293,7 +293,7 @@ static int fm2fb_probe(struct zorro_dev *z, const struct zorro_device_id *id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int __init fm2fb_setup(char *options)
|
||||
static int __init fm2fb_setup(char *options)
|
||||
{
|
||||
char *this_opt;
|
||||
|
||||
|
@ -309,7 +309,7 @@ int __init fm2fb_setup(char *options)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int __init fm2fb_init(void)
|
||||
static int __init fm2fb_init(void)
|
||||
{
|
||||
char *option = NULL;
|
||||
|
||||
|
|
|
@ -375,7 +375,7 @@ static struct dio_driver hpfb_driver = {
|
|||
.remove = hpfb_remove_one,
|
||||
};
|
||||
|
||||
int __init hpfb_init(void)
|
||||
static int __init hpfb_init(void)
|
||||
{
|
||||
unsigned int sid;
|
||||
unsigned char i;
|
||||
|
@ -415,7 +415,7 @@ int __init hpfb_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void __exit hpfb_cleanup_module(void)
|
||||
static void __exit hpfb_cleanup_module(void)
|
||||
{
|
||||
dio_unregister_driver(&hpfb_driver);
|
||||
}
|
||||
|
|
|
@ -400,7 +400,7 @@ static int i740fb_decode_var(const struct fb_var_screeninfo *var,
|
|||
u32 xres, right, hslen, left, xtotal;
|
||||
u32 yres, lower, vslen, upper, ytotal;
|
||||
u32 vxres, xoffset, vyres, yoffset;
|
||||
u32 bpp, base, dacspeed24, mem;
|
||||
u32 bpp, base, dacspeed24, mem, freq;
|
||||
u8 r7;
|
||||
int i;
|
||||
|
||||
|
@ -643,7 +643,12 @@ static int i740fb_decode_var(const struct fb_var_screeninfo *var,
|
|||
par->atc[VGA_ATC_OVERSCAN] = 0;
|
||||
|
||||
/* Calculate VCLK that most closely matches the requested dot clock */
|
||||
i740_calc_vclk((((u32)1e9) / var->pixclock) * (u32)(1e3), par);
|
||||
freq = (((u32)1e9) / var->pixclock) * (u32)(1e3);
|
||||
if (freq < I740_RFREQ_FIX) {
|
||||
fb_dbg(info, "invalid pixclock\n");
|
||||
freq = I740_RFREQ_FIX;
|
||||
}
|
||||
i740_calc_vclk(freq, par);
|
||||
|
||||
/* Since we program the clocks ourselves, always use VCLK2. */
|
||||
par->misc |= 0x0C;
|
||||
|
|
|
@ -41,7 +41,18 @@
|
|||
#include <video/of_videomode.h>
|
||||
#include <video/videomode.h>
|
||||
|
||||
#include <linux/platform_data/video-imxfb.h>
|
||||
#define PCR_TFT (1 << 31)
|
||||
#define PCR_BPIX_8 (3 << 25)
|
||||
#define PCR_BPIX_12 (4 << 25)
|
||||
#define PCR_BPIX_16 (5 << 25)
|
||||
#define PCR_BPIX_18 (6 << 25)
|
||||
|
||||
struct imx_fb_videomode {
|
||||
struct fb_videomode mode;
|
||||
u32 pcr;
|
||||
bool aus_mode;
|
||||
unsigned char bpp;
|
||||
};
|
||||
|
||||
/*
|
||||
* Complain if VAR is out of range.
|
||||
|
@ -656,7 +667,6 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf
|
|||
|
||||
static int imxfb_init_fbinfo(struct platform_device *pdev)
|
||||
{
|
||||
struct imx_fb_platform_data *pdata = dev_get_platdata(&pdev->dev);
|
||||
struct fb_info *info = platform_get_drvdata(pdev);
|
||||
struct imxfb_info *fbi = info->par;
|
||||
struct device_node *np;
|
||||
|
@ -690,25 +700,20 @@ static int imxfb_init_fbinfo(struct platform_device *pdev)
|
|||
info->fbops = &imxfb_ops;
|
||||
info->flags = FBINFO_FLAG_DEFAULT |
|
||||
FBINFO_READS_FAST;
|
||||
if (pdata) {
|
||||
fbi->lscr1 = pdata->lscr1;
|
||||
fbi->dmacr = pdata->dmacr;
|
||||
fbi->pwmr = pdata->pwmr;
|
||||
} else {
|
||||
np = pdev->dev.of_node;
|
||||
info->var.grayscale = of_property_read_bool(np,
|
||||
"cmap-greyscale");
|
||||
fbi->cmap_inverse = of_property_read_bool(np, "cmap-inverse");
|
||||
fbi->cmap_static = of_property_read_bool(np, "cmap-static");
|
||||
|
||||
fbi->lscr1 = IMXFB_LSCR1_DEFAULT;
|
||||
np = pdev->dev.of_node;
|
||||
info->var.grayscale = of_property_read_bool(np,
|
||||
"cmap-greyscale");
|
||||
fbi->cmap_inverse = of_property_read_bool(np, "cmap-inverse");
|
||||
fbi->cmap_static = of_property_read_bool(np, "cmap-static");
|
||||
|
||||
of_property_read_u32(np, "fsl,lpccr", &fbi->pwmr);
|
||||
fbi->lscr1 = IMXFB_LSCR1_DEFAULT;
|
||||
|
||||
of_property_read_u32(np, "fsl,lscr1", &fbi->lscr1);
|
||||
of_property_read_u32(np, "fsl,lpccr", &fbi->pwmr);
|
||||
|
||||
of_property_read_u32(np, "fsl,dmacr", &fbi->dmacr);
|
||||
}
|
||||
of_property_read_u32(np, "fsl,lscr1", &fbi->lscr1);
|
||||
|
||||
of_property_read_u32(np, "fsl,dmacr", &fbi->dmacr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -863,10 +868,10 @@ static int imxfb_probe(struct platform_device *pdev)
|
|||
struct imxfb_info *fbi;
|
||||
struct lcd_device *lcd;
|
||||
struct fb_info *info;
|
||||
struct imx_fb_platform_data *pdata;
|
||||
struct resource *res;
|
||||
struct imx_fb_videomode *m;
|
||||
const struct of_device_id *of_id;
|
||||
struct device_node *display_np;
|
||||
int ret, i;
|
||||
int bytes_per_pixel;
|
||||
|
||||
|
@ -884,8 +889,6 @@ static int imxfb_probe(struct platform_device *pdev)
|
|||
if (!res)
|
||||
return -ENODEV;
|
||||
|
||||
pdata = dev_get_platdata(&pdev->dev);
|
||||
|
||||
info = framebuffer_alloc(sizeof(struct imxfb_info), &pdev->dev);
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
@ -898,43 +901,34 @@ static int imxfb_probe(struct platform_device *pdev)
|
|||
if (ret < 0)
|
||||
goto failed_init;
|
||||
|
||||
if (pdata) {
|
||||
if (!fb_mode)
|
||||
fb_mode = pdata->mode[0].mode.name;
|
||||
fb_mode = NULL;
|
||||
|
||||
fbi->mode = pdata->mode;
|
||||
fbi->num_modes = pdata->num_modes;
|
||||
} else {
|
||||
struct device_node *display_np;
|
||||
fb_mode = NULL;
|
||||
|
||||
display_np = of_parse_phandle(pdev->dev.of_node, "display", 0);
|
||||
if (!display_np) {
|
||||
dev_err(&pdev->dev, "No display defined in devicetree\n");
|
||||
ret = -EINVAL;
|
||||
goto failed_of_parse;
|
||||
}
|
||||
|
||||
/*
|
||||
* imxfb does not support more modes, we choose only the native
|
||||
* mode.
|
||||
*/
|
||||
fbi->num_modes = 1;
|
||||
|
||||
fbi->mode = devm_kzalloc(&pdev->dev,
|
||||
sizeof(struct imx_fb_videomode), GFP_KERNEL);
|
||||
if (!fbi->mode) {
|
||||
ret = -ENOMEM;
|
||||
of_node_put(display_np);
|
||||
goto failed_of_parse;
|
||||
}
|
||||
|
||||
ret = imxfb_of_read_mode(&pdev->dev, display_np, fbi->mode);
|
||||
of_node_put(display_np);
|
||||
if (ret)
|
||||
goto failed_of_parse;
|
||||
display_np = of_parse_phandle(pdev->dev.of_node, "display", 0);
|
||||
if (!display_np) {
|
||||
dev_err(&pdev->dev, "No display defined in devicetree\n");
|
||||
ret = -EINVAL;
|
||||
goto failed_of_parse;
|
||||
}
|
||||
|
||||
/*
|
||||
* imxfb does not support more modes, we choose only the native
|
||||
* mode.
|
||||
*/
|
||||
fbi->num_modes = 1;
|
||||
|
||||
fbi->mode = devm_kzalloc(&pdev->dev,
|
||||
sizeof(struct imx_fb_videomode), GFP_KERNEL);
|
||||
if (!fbi->mode) {
|
||||
ret = -ENOMEM;
|
||||
of_node_put(display_np);
|
||||
goto failed_of_parse;
|
||||
}
|
||||
|
||||
ret = imxfb_of_read_mode(&pdev->dev, display_np, fbi->mode);
|
||||
of_node_put(display_np);
|
||||
if (ret)
|
||||
goto failed_of_parse;
|
||||
|
||||
/* Calculate maximum bytes used per pixel. In most cases this should
|
||||
* be the same as m->bpp/8 */
|
||||
m = &fbi->mode[0];
|
||||
|
@ -943,13 +937,6 @@ static int imxfb_probe(struct platform_device *pdev)
|
|||
info->fix.smem_len = max_t(size_t, info->fix.smem_len,
|
||||
m->mode.xres * m->mode.yres * bytes_per_pixel);
|
||||
|
||||
res = request_mem_region(res->start, resource_size(res),
|
||||
DRIVER_NAME);
|
||||
if (!res) {
|
||||
ret = -EBUSY;
|
||||
goto failed_req;
|
||||
}
|
||||
|
||||
fbi->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
|
||||
if (IS_ERR(fbi->clk_ipg)) {
|
||||
ret = PTR_ERR(fbi->clk_ipg);
|
||||
|
@ -983,10 +970,10 @@ static int imxfb_probe(struct platform_device *pdev)
|
|||
goto failed_getclock;
|
||||
}
|
||||
|
||||
fbi->regs = ioremap(res->start, resource_size(res));
|
||||
if (fbi->regs == NULL) {
|
||||
fbi->regs = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(fbi->regs)) {
|
||||
dev_err(&pdev->dev, "Cannot map frame buffer registers\n");
|
||||
ret = -ENOMEM;
|
||||
ret = PTR_ERR(fbi->regs);
|
||||
goto failed_ioremap;
|
||||
}
|
||||
|
||||
|
@ -1001,13 +988,6 @@ static int imxfb_probe(struct platform_device *pdev)
|
|||
|
||||
info->fix.smem_start = fbi->map_dma;
|
||||
|
||||
if (pdata && pdata->init) {
|
||||
ret = pdata->init(fbi->pdev);
|
||||
if (ret)
|
||||
goto failed_platform_init;
|
||||
}
|
||||
|
||||
|
||||
INIT_LIST_HEAD(&info->modelist);
|
||||
for (i = 0; i < fbi->num_modes; i++)
|
||||
fb_add_videomode(&fbi->mode[i].mode, &info->modelist);
|
||||
|
@ -1059,17 +1039,12 @@ failed_lcd:
|
|||
failed_register:
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
failed_cmap:
|
||||
if (pdata && pdata->exit)
|
||||
pdata->exit(fbi->pdev);
|
||||
failed_platform_init:
|
||||
dma_free_wc(&pdev->dev, fbi->map_size, info->screen_buffer,
|
||||
fbi->map_dma);
|
||||
failed_map:
|
||||
iounmap(fbi->regs);
|
||||
failed_ioremap:
|
||||
failed_getclock:
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
failed_req:
|
||||
failed_of_parse:
|
||||
kfree(info->pseudo_palette);
|
||||
failed_init:
|
||||
|
@ -1079,26 +1054,15 @@ failed_init:
|
|||
|
||||
static int imxfb_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct imx_fb_platform_data *pdata;
|
||||
struct fb_info *info = platform_get_drvdata(pdev);
|
||||
struct imxfb_info *fbi = info->par;
|
||||
struct resource *res;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res)
|
||||
return -EINVAL;
|
||||
|
||||
imxfb_disable_controller(fbi);
|
||||
|
||||
unregister_framebuffer(info);
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
pdata = dev_get_platdata(&pdev->dev);
|
||||
if (pdata && pdata->exit)
|
||||
pdata->exit(fbi->pdev);
|
||||
dma_free_wc(&pdev->dev, fbi->map_size, info->screen_buffer,
|
||||
fbi->map_dma);
|
||||
iounmap(fbi->regs);
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
kfree(info->pseudo_palette);
|
||||
framebuffer_release(info);
|
||||
|
||||
|
|
|
@ -489,7 +489,7 @@ static void hwa742_update_window_auto(struct timer_list *unused)
|
|||
__hwa742_update_window_auto(false);
|
||||
}
|
||||
|
||||
int hwa742_update_window_async(struct fb_info *fbi,
|
||||
static int hwa742_update_window_async(struct fb_info *fbi,
|
||||
struct omapfb_update_window *win,
|
||||
void (*complete_callback)(void *arg),
|
||||
void *complete_callback_data)
|
||||
|
@ -522,7 +522,6 @@ int hwa742_update_window_async(struct fb_info *fbi,
|
|||
out:
|
||||
return r;
|
||||
}
|
||||
EXPORT_SYMBOL(hwa742_update_window_async);
|
||||
|
||||
static int hwa742_setup_plane(int plane, int channel_out,
|
||||
unsigned long offset, int screen_width,
|
||||
|
|
|
@ -227,13 +227,4 @@ extern int omapfb_register_client(struct omapfb_notifier_block *nb,
|
|||
omapfb_notifier_callback_t callback,
|
||||
void *callback_data);
|
||||
extern int omapfb_unregister_client(struct omapfb_notifier_block *nb);
|
||||
extern int omapfb_update_window_async(struct fb_info *fbi,
|
||||
struct omapfb_update_window *win,
|
||||
void (*callback)(void *),
|
||||
void *callback_data);
|
||||
extern int hwa742_update_window_async(struct fb_info *fbi,
|
||||
struct omapfb_update_window *win,
|
||||
void (*callback)(void *),
|
||||
void *callback_data);
|
||||
|
||||
#endif /* __OMAPFB_H */
|
||||
|
|
|
@ -668,7 +668,7 @@ static int omapfb_set_par(struct fb_info *fbi)
|
|||
return r;
|
||||
}
|
||||
|
||||
int omapfb_update_window_async(struct fb_info *fbi,
|
||||
static int omapfb_update_window_async(struct fb_info *fbi,
|
||||
struct omapfb_update_window *win,
|
||||
void (*callback)(void *),
|
||||
void *callback_data)
|
||||
|
@ -714,7 +714,6 @@ int omapfb_update_window_async(struct fb_info *fbi,
|
|||
|
||||
return fbdev->ctrl->update_window(fbi, win, callback, callback_data);
|
||||
}
|
||||
EXPORT_SYMBOL(omapfb_update_window_async);
|
||||
|
||||
static int omapfb_update_win(struct fb_info *fbi,
|
||||
struct omapfb_update_window *win)
|
||||
|
|
|
@ -133,7 +133,7 @@ static struct platform_device q40fb_device = {
|
|||
.name = "q40fb",
|
||||
};
|
||||
|
||||
int __init q40fb_init(void)
|
||||
static int __init q40fb_init(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
|
|
|
@ -905,6 +905,8 @@ static int s3fb_set_par(struct fb_info *info)
|
|||
value = clamp((htotal + hsstart + 1) / 2 + 2, hsstart + 4, htotal + 1);
|
||||
svga_wcrt_multi(par->state.vgabase, s3_dtpc_regs, value);
|
||||
|
||||
if (screen_size > info->screen_size)
|
||||
screen_size = info->screen_size;
|
||||
memset_io(info->screen_base, 0x00, screen_size);
|
||||
/* Device and screen back on */
|
||||
svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80);
|
||||
|
|
|
@ -1224,47 +1224,6 @@ int __init sa1100fb_init(void)
|
|||
return platform_driver_register(&sa1100fb_driver);
|
||||
}
|
||||
|
||||
int __init sa1100fb_setup(char *options)
|
||||
{
|
||||
#if 0
|
||||
char *this_opt;
|
||||
|
||||
if (!options || !*options)
|
||||
return 0;
|
||||
|
||||
while ((this_opt = strsep(&options, ",")) != NULL) {
|
||||
|
||||
if (!strncmp(this_opt, "bpp:", 4))
|
||||
current_par.max_bpp =
|
||||
simple_strtoul(this_opt + 4, NULL, 0);
|
||||
|
||||
if (!strncmp(this_opt, "lccr0:", 6))
|
||||
lcd_shadow.lccr0 =
|
||||
simple_strtoul(this_opt + 6, NULL, 0);
|
||||
if (!strncmp(this_opt, "lccr1:", 6)) {
|
||||
lcd_shadow.lccr1 =
|
||||
simple_strtoul(this_opt + 6, NULL, 0);
|
||||
current_par.max_xres =
|
||||
(lcd_shadow.lccr1 & 0x3ff) + 16;
|
||||
}
|
||||
if (!strncmp(this_opt, "lccr2:", 6)) {
|
||||
lcd_shadow.lccr2 =
|
||||
simple_strtoul(this_opt + 6, NULL, 0);
|
||||
current_par.max_yres =
|
||||
(lcd_shadow.
|
||||
lccr0 & LCCR0_SDS) ? ((lcd_shadow.
|
||||
lccr2 & 0x3ff) +
|
||||
1) *
|
||||
2 : ((lcd_shadow.lccr2 & 0x3ff) + 1);
|
||||
}
|
||||
if (!strncmp(this_opt, "lccr3:", 6))
|
||||
lcd_shadow.lccr3 =
|
||||
simple_strtoul(this_opt + 6, NULL, 0);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(sa1100fb_init);
|
||||
MODULE_DESCRIPTION("StrongARM-1100/1110 framebuffer driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -355,12 +355,12 @@ SiS_GetModeID(int VGAEngine, unsigned int VBFlags, int HDisplay, int VDisplay,
|
|||
}
|
||||
break;
|
||||
case 400:
|
||||
if((!(VBFlags & CRT1_LCDA)) || ((LCDwidth >= 800) && (LCDwidth >= 600))) {
|
||||
if((!(VBFlags & CRT1_LCDA)) || ((LCDwidth >= 800) && (LCDheight >= 600))) {
|
||||
if(VDisplay == 300) ModeIndex = ModeIndex_400x300[Depth];
|
||||
}
|
||||
break;
|
||||
case 512:
|
||||
if((!(VBFlags & CRT1_LCDA)) || ((LCDwidth >= 1024) && (LCDwidth >= 768))) {
|
||||
if((!(VBFlags & CRT1_LCDA)) || ((LCDwidth >= 1024) && (LCDheight >= 768))) {
|
||||
if(VDisplay == 384) ModeIndex = ModeIndex_512x384[Depth];
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -131,8 +131,6 @@ static struct fb_info info;
|
|||
*/
|
||||
static struct xxx_par __initdata current_par;
|
||||
|
||||
int xxxfb_init(void);
|
||||
|
||||
/**
|
||||
* xxxfb_open - Optional function. Called when the framebuffer is
|
||||
* first accessed.
|
||||
|
@ -886,7 +884,7 @@ static struct pci_driver xxxfb_driver = {
|
|||
|
||||
MODULE_DEVICE_TABLE(pci, xxxfb_id_table);
|
||||
|
||||
int __init xxxfb_init(void)
|
||||
static int __init xxxfb_init(void)
|
||||
{
|
||||
/*
|
||||
* For kernel boot options (in 'video=xxxfb:<options>' format)
|
||||
|
@ -967,7 +965,7 @@ static struct platform_device *xxxfb_device;
|
|||
* Only necessary if your driver takes special options,
|
||||
* otherwise we fall back on the generic fb_setup().
|
||||
*/
|
||||
int __init xxxfb_setup(char *options)
|
||||
static int __init xxxfb_setup(char *options)
|
||||
{
|
||||
/* Parse user specified options (`video=xxxfb:') */
|
||||
}
|
||||
|
|
|
@ -90,11 +90,7 @@ struct fb_info_valkyrie {
|
|||
u32 pseudo_palette[16];
|
||||
};
|
||||
|
||||
/*
|
||||
* Exported functions
|
||||
*/
|
||||
int valkyriefb_init(void);
|
||||
int valkyriefb_setup(char*);
|
||||
static int valkyriefb_setup(char*);
|
||||
|
||||
static int valkyriefb_check_var(struct fb_var_screeninfo *var,
|
||||
struct fb_info *info);
|
||||
|
@ -302,7 +298,7 @@ static void __init valkyrie_choose_mode(struct fb_info_valkyrie *p)
|
|||
default_vmode, default_cmode);
|
||||
}
|
||||
|
||||
int __init valkyriefb_init(void)
|
||||
static int __init valkyriefb_init(void)
|
||||
{
|
||||
struct fb_info_valkyrie *p;
|
||||
unsigned long frame_buffer_phys, cmap_regs_phys;
|
||||
|
@ -549,7 +545,7 @@ static int __init valkyrie_init_info(struct fb_info *info,
|
|||
/*
|
||||
* Parse user specified options (`video=valkyriefb:')
|
||||
*/
|
||||
int __init valkyriefb_setup(char *options)
|
||||
static int __init valkyriefb_setup(char *options)
|
||||
{
|
||||
char *this_opt;
|
||||
|
||||
|
|
|
@ -507,6 +507,8 @@ static int vt8623fb_set_par(struct fb_info *info)
|
|||
(info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1, 1,
|
||||
1, info->node);
|
||||
|
||||
if (screen_size > info->screen_size)
|
||||
screen_size = info->screen_size;
|
||||
memset_io(info->screen_base, 0x00, screen_size);
|
||||
|
||||
/* Device and screen back on */
|
||||
|
|
|
@ -1,70 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* This structure describes the machine which we are running on.
|
||||
*/
|
||||
#ifndef __MACH_IMXFB_H__
|
||||
#define __MACH_IMXFB_H__
|
||||
|
||||
#include <linux/fb.h>
|
||||
|
||||
#define PCR_TFT (1 << 31)
|
||||
#define PCR_COLOR (1 << 30)
|
||||
#define PCR_PBSIZ_1 (0 << 28)
|
||||
#define PCR_PBSIZ_2 (1 << 28)
|
||||
#define PCR_PBSIZ_4 (2 << 28)
|
||||
#define PCR_PBSIZ_8 (3 << 28)
|
||||
#define PCR_BPIX_1 (0 << 25)
|
||||
#define PCR_BPIX_2 (1 << 25)
|
||||
#define PCR_BPIX_4 (2 << 25)
|
||||
#define PCR_BPIX_8 (3 << 25)
|
||||
#define PCR_BPIX_12 (4 << 25)
|
||||
#define PCR_BPIX_16 (5 << 25)
|
||||
#define PCR_BPIX_18 (6 << 25)
|
||||
#define PCR_PIXPOL (1 << 24)
|
||||
#define PCR_FLMPOL (1 << 23)
|
||||
#define PCR_LPPOL (1 << 22)
|
||||
#define PCR_CLKPOL (1 << 21)
|
||||
#define PCR_OEPOL (1 << 20)
|
||||
#define PCR_SCLKIDLE (1 << 19)
|
||||
#define PCR_END_SEL (1 << 18)
|
||||
#define PCR_END_BYTE_SWAP (1 << 17)
|
||||
#define PCR_REV_VS (1 << 16)
|
||||
#define PCR_ACD_SEL (1 << 15)
|
||||
#define PCR_ACD(x) (((x) & 0x7f) << 8)
|
||||
#define PCR_SCLK_SEL (1 << 7)
|
||||
#define PCR_SHARP (1 << 6)
|
||||
#define PCR_PCD(x) ((x) & 0x3f)
|
||||
|
||||
#define PWMR_CLS(x) (((x) & 0x1ff) << 16)
|
||||
#define PWMR_LDMSK (1 << 15)
|
||||
#define PWMR_SCR1 (1 << 10)
|
||||
#define PWMR_SCR0 (1 << 9)
|
||||
#define PWMR_CC_EN (1 << 8)
|
||||
#define PWMR_PW(x) ((x) & 0xff)
|
||||
|
||||
#define LSCR1_PS_RISE_DELAY(x) (((x) & 0x7f) << 26)
|
||||
#define LSCR1_CLS_RISE_DELAY(x) (((x) & 0x3f) << 16)
|
||||
#define LSCR1_REV_TOGGLE_DELAY(x) (((x) & 0xf) << 8)
|
||||
#define LSCR1_GRAY2(x) (((x) & 0xf) << 4)
|
||||
#define LSCR1_GRAY1(x) (((x) & 0xf))
|
||||
|
||||
struct imx_fb_videomode {
|
||||
struct fb_videomode mode;
|
||||
u32 pcr;
|
||||
bool aus_mode;
|
||||
unsigned char bpp;
|
||||
};
|
||||
|
||||
struct imx_fb_platform_data {
|
||||
struct imx_fb_videomode *mode;
|
||||
int num_modes;
|
||||
|
||||
u_int pwmr;
|
||||
u_int lscr1;
|
||||
u_int dmacr;
|
||||
|
||||
int (*init)(struct platform_device *);
|
||||
void (*exit)(struct platform_device *);
|
||||
};
|
||||
|
||||
#endif /* ifndef __MACH_IMXFB_H__ */
|
Loading…
Reference in New Issue