mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
fbdev fixes and updates for kernel 6.0-rc3
Major fixes: - Revert the changes for fbcon console when vc_resize() fails [Shigeru Yoshida] - Avoid a potential divide by zero error in fb_pm2fb [Letu Ren] Minor fixes: - Add missing pci_disable_device() in chipsfb_pci_init() [Yang Yingliang] - Fix tests for platform_get_irq() failure in omapfb [Yu Zhe] - Destroy mutex on freeing struct fb_info in fbsysfs [Shigeru Yoshida] Cleanups: - Move fbdev drivers from strlcpy to strscpy [Wolfram Sang] - Indenting fixes, comment fixes, ... [Jiapeng Chong & Jilin Yuan] -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQS86RI+GtKfB8BJu973ErUQojoPXwUCYwkNcgAKCRD3ErUQojoP X9yzAQCgHdQ185Q9hMFNMbT/mAiZ54RMWjUmHB95TVht41F8dgD/ZNngl1psEixg 3QkoY3dAmK7lytp6XWe7vyXvHa+hNg4= =Zipi -----END PGP SIGNATURE----- Merge tag 'fbdev-for-6.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev Pull fbdev fixes and updates from Helge Deller: "Mostly just small patches, with the exception of the bigger indenting cleanups in the sisfb and radeonfb drivers. Two patches should be mentioned though: A fix-up for fbdev if the screen resize fails (by Shigeru Yoshida), and a potential divide by zero fix in fb_pm2fb (by Letu Ren). Summary: Major fixes: - Revert the changes for fbcon console when vc_resize() fails [Shigeru Yoshida] - Avoid a potential divide by zero error in fb_pm2fb [Letu Ren] Minor fixes: - Add missing pci_disable_device() in chipsfb_pci_init() [Yang Yingliang] - Fix tests for platform_get_irq() failure in omapfb [Yu Zhe] - Destroy mutex on freeing struct fb_info in fbsysfs [Shigeru Yoshida] Cleanups: - Move fbdev drivers from strlcpy to strscpy [Wolfram Sang] - Indenting fixes, comment fixes, ... [Jiapeng Chong & Jilin Yuan]" * tag 'fbdev-for-6.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev: fbdev: fbcon: Properly revert changes when vc_resize() failed fbdev: Move fbdev drivers from strlcpy to strscpy fbdev: omap: Remove unnecessary print function dev_err() fbdev: chipsfb: Add missing pci_disable_device() in chipsfb_pci_init() fbdev: fbcon: Destroy mutex on freeing struct fb_info fbdev: radeon: Clean up some inconsistent indenting fbdev: sisfb: Clean up some inconsistent indenting fbdev: fb_pm2fb: Avoid potential divide by zero error fbdev: ssd1307fb: Fix repeated words in comments fbdev: omapfb: Fix tests for platform_get_irq() failure
This commit is contained in:
commit
89b749d855
34 changed files with 242 additions and 203 deletions
|
@ -290,7 +290,7 @@ static char default_sti_path[21] __read_mostly;
|
|||
static int __init sti_setup(char *str)
|
||||
{
|
||||
if (str)
|
||||
strlcpy (default_sti_path, str, sizeof (default_sti_path));
|
||||
strscpy(default_sti_path, str, sizeof(default_sti_path));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -3891,7 +3891,7 @@ static int __init atyfb_setup(char *options)
|
|||
&& (!strncmp(this_opt, "Mach64:", 7))) {
|
||||
static unsigned char m64_num;
|
||||
static char mach64_str[80];
|
||||
strlcpy(mach64_str, this_opt + 7, sizeof(mach64_str));
|
||||
strscpy(mach64_str, this_opt + 7, sizeof(mach64_str));
|
||||
if (!store_video_par(mach64_str, m64_num)) {
|
||||
m64_num++;
|
||||
mach64_count = m64_num;
|
||||
|
|
|
@ -1980,7 +1980,7 @@ static int radeon_set_fbinfo(struct radeonfb_info *rinfo)
|
|||
info->screen_base = rinfo->fb_base;
|
||||
info->screen_size = rinfo->mapped_vram;
|
||||
/* Fill fix common fields */
|
||||
strlcpy(info->fix.id, rinfo->name, sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, rinfo->name, sizeof(info->fix.id));
|
||||
info->fix.smem_start = rinfo->fb_base_phys;
|
||||
info->fix.smem_len = rinfo->video_ram;
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
|
@ -2094,34 +2094,34 @@ static void radeon_identify_vram(struct radeonfb_info *rinfo)
|
|||
u32 tmp;
|
||||
|
||||
/* framebuffer size */
|
||||
if ((rinfo->family == CHIP_FAMILY_RS100) ||
|
||||
if ((rinfo->family == CHIP_FAMILY_RS100) ||
|
||||
(rinfo->family == CHIP_FAMILY_RS200) ||
|
||||
(rinfo->family == CHIP_FAMILY_RS300) ||
|
||||
(rinfo->family == CHIP_FAMILY_RC410) ||
|
||||
(rinfo->family == CHIP_FAMILY_RS400) ||
|
||||
(rinfo->family == CHIP_FAMILY_RS480) ) {
|
||||
u32 tom = INREG(NB_TOM);
|
||||
tmp = ((((tom >> 16) - (tom & 0xffff) + 1) << 6) * 1024);
|
||||
u32 tom = INREG(NB_TOM);
|
||||
|
||||
radeon_fifo_wait(6);
|
||||
OUTREG(MC_FB_LOCATION, tom);
|
||||
OUTREG(DISPLAY_BASE_ADDR, (tom & 0xffff) << 16);
|
||||
OUTREG(CRTC2_DISPLAY_BASE_ADDR, (tom & 0xffff) << 16);
|
||||
OUTREG(OV0_BASE_ADDR, (tom & 0xffff) << 16);
|
||||
tmp = ((((tom >> 16) - (tom & 0xffff) + 1) << 6) * 1024);
|
||||
radeon_fifo_wait(6);
|
||||
OUTREG(MC_FB_LOCATION, tom);
|
||||
OUTREG(DISPLAY_BASE_ADDR, (tom & 0xffff) << 16);
|
||||
OUTREG(CRTC2_DISPLAY_BASE_ADDR, (tom & 0xffff) << 16);
|
||||
OUTREG(OV0_BASE_ADDR, (tom & 0xffff) << 16);
|
||||
|
||||
/* This is supposed to fix the crtc2 noise problem. */
|
||||
OUTREG(GRPH2_BUFFER_CNTL, INREG(GRPH2_BUFFER_CNTL) & ~0x7f0000);
|
||||
/* This is supposed to fix the crtc2 noise problem. */
|
||||
OUTREG(GRPH2_BUFFER_CNTL, INREG(GRPH2_BUFFER_CNTL) & ~0x7f0000);
|
||||
|
||||
if ((rinfo->family == CHIP_FAMILY_RS100) ||
|
||||
(rinfo->family == CHIP_FAMILY_RS200)) {
|
||||
/* This is to workaround the asic bug for RMX, some versions
|
||||
of BIOS doesn't have this register initialized correctly.
|
||||
*/
|
||||
OUTREGP(CRTC_MORE_CNTL, CRTC_H_CUTOFF_ACTIVE_EN,
|
||||
~CRTC_H_CUTOFF_ACTIVE_EN);
|
||||
}
|
||||
} else {
|
||||
tmp = INREG(CNFG_MEMSIZE);
|
||||
if ((rinfo->family == CHIP_FAMILY_RS100) ||
|
||||
(rinfo->family == CHIP_FAMILY_RS200)) {
|
||||
/* This is to workaround the asic bug for RMX, some versions
|
||||
* of BIOS doesn't have this register initialized correctly.
|
||||
*/
|
||||
OUTREGP(CRTC_MORE_CNTL, CRTC_H_CUTOFF_ACTIVE_EN,
|
||||
~CRTC_H_CUTOFF_ACTIVE_EN);
|
||||
}
|
||||
} else {
|
||||
tmp = INREG(CNFG_MEMSIZE);
|
||||
}
|
||||
|
||||
/* mem size is bits [28:0], mask off the rest */
|
||||
|
|
|
@ -182,7 +182,7 @@ static int bw2_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
|
|||
|
||||
static void bw2_init_fix(struct fb_info *info, int linebytes)
|
||||
{
|
||||
strlcpy(info->fix.id, "bwtwo", sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, "bwtwo", sizeof(info->fix.id));
|
||||
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
info->fix.visual = FB_VISUAL_MONO01;
|
||||
|
|
|
@ -430,6 +430,7 @@ static int chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent)
|
|||
err_release_fb:
|
||||
framebuffer_release(p);
|
||||
err_disable:
|
||||
pci_disable_device(dp);
|
||||
err_out:
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -1999,7 +1999,7 @@ static int cirrusfb_set_fbinfo(struct fb_info *info)
|
|||
}
|
||||
|
||||
/* Fill fix common fields */
|
||||
strlcpy(info->fix.id, cirrusfb_board_info[cinfo->btype].name,
|
||||
strscpy(info->fix.id, cirrusfb_board_info[cinfo->btype].name,
|
||||
sizeof(info->fix.id));
|
||||
|
||||
/* monochrome: only 1 memory plane */
|
||||
|
|
|
@ -326,7 +326,7 @@ static int clps711x_fb_probe(struct platform_device *pdev)
|
|||
info->var.vmode = FB_VMODE_NONINTERLACED;
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
info->fix.accel = FB_ACCEL_NONE;
|
||||
strlcpy(info->fix.id, CLPS711X_FB_NAME, sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, CLPS711X_FB_NAME, sizeof(info->fix.id));
|
||||
fb_videomode_to_var(&info->var, &cfb->mode);
|
||||
|
||||
ret = fb_alloc_cmap(&info->cmap, BIT(CLPS711X_FB_BPP_MAX), 0);
|
||||
|
|
|
@ -412,7 +412,7 @@ static int __init fb_console_setup(char *this_opt)
|
|||
|
||||
while ((options = strsep(&this_opt, ",")) != NULL) {
|
||||
if (!strncmp(options, "font:", 5)) {
|
||||
strlcpy(fontname, options + 5, sizeof(fontname));
|
||||
strscpy(fontname, options + 5, sizeof(fontname));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2401,15 +2401,21 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, int charcount,
|
|||
struct fb_info *info = fbcon_info_from_console(vc->vc_num);
|
||||
struct fbcon_ops *ops = info->fbcon_par;
|
||||
struct fbcon_display *p = &fb_display[vc->vc_num];
|
||||
int resize;
|
||||
int resize, ret, old_userfont, old_width, old_height, old_charcount;
|
||||
char *old_data = NULL;
|
||||
|
||||
resize = (w != vc->vc_font.width) || (h != vc->vc_font.height);
|
||||
if (p->userfont)
|
||||
old_data = vc->vc_font.data;
|
||||
vc->vc_font.data = (void *)(p->fontdata = data);
|
||||
old_userfont = p->userfont;
|
||||
if ((p->userfont = userfont))
|
||||
REFCOUNT(data)++;
|
||||
|
||||
old_width = vc->vc_font.width;
|
||||
old_height = vc->vc_font.height;
|
||||
old_charcount = vc->vc_font.charcount;
|
||||
|
||||
vc->vc_font.width = w;
|
||||
vc->vc_font.height = h;
|
||||
vc->vc_font.charcount = charcount;
|
||||
|
@ -2425,7 +2431,9 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, int charcount,
|
|||
rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres);
|
||||
cols /= w;
|
||||
rows /= h;
|
||||
vc_resize(vc, cols, rows);
|
||||
ret = vc_resize(vc, cols, rows);
|
||||
if (ret)
|
||||
goto err_out;
|
||||
} else if (con_is_visible(vc)
|
||||
&& vc->vc_mode == KD_TEXT) {
|
||||
fbcon_clear_margins(vc, 0);
|
||||
|
@ -2435,6 +2443,21 @@ static int fbcon_do_set_font(struct vc_data *vc, int w, int h, int charcount,
|
|||
if (old_data && (--REFCOUNT(old_data) == 0))
|
||||
kfree(old_data - FONT_EXTRA_WORDS * sizeof(int));
|
||||
return 0;
|
||||
|
||||
err_out:
|
||||
p->fontdata = old_data;
|
||||
vc->vc_font.data = (void *)old_data;
|
||||
|
||||
if (userfont) {
|
||||
p->userfont = old_userfont;
|
||||
REFCOUNT(data)--;
|
||||
}
|
||||
|
||||
vc->vc_font.width = old_width;
|
||||
vc->vc_font.height = old_height;
|
||||
vc->vc_font.charcount = old_charcount;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -84,6 +84,10 @@ void framebuffer_release(struct fb_info *info)
|
|||
if (WARN_ON(refcount_read(&info->count)))
|
||||
return;
|
||||
|
||||
#if IS_ENABLED(CONFIG_FB_BACKLIGHT)
|
||||
mutex_destroy(&info->bl_curve_mutex);
|
||||
#endif
|
||||
|
||||
kfree(info->apertures);
|
||||
kfree(info);
|
||||
}
|
||||
|
|
|
@ -1134,7 +1134,7 @@ int cyber2000fb_attach(struct cyberpro_info *info, int idx)
|
|||
info->fb_size = int_cfb_info->fb.fix.smem_len;
|
||||
info->info = int_cfb_info;
|
||||
|
||||
strlcpy(info->dev_name, int_cfb_info->fb.fix.id,
|
||||
strscpy(info->dev_name, int_cfb_info->fb.fix.id,
|
||||
sizeof(info->dev_name));
|
||||
}
|
||||
|
||||
|
@ -1229,7 +1229,7 @@ static int cyber2000fb_ddc_getsda(void *data)
|
|||
|
||||
static int cyber2000fb_setup_ddc_bus(struct cfb_info *cfb)
|
||||
{
|
||||
strlcpy(cfb->ddc_adapter.name, cfb->fb.fix.id,
|
||||
strscpy(cfb->ddc_adapter.name, cfb->fb.fix.id,
|
||||
sizeof(cfb->ddc_adapter.name));
|
||||
cfb->ddc_adapter.owner = THIS_MODULE;
|
||||
cfb->ddc_adapter.class = I2C_CLASS_DDC;
|
||||
|
@ -1304,7 +1304,7 @@ static int cyber2000fb_i2c_getscl(void *data)
|
|||
|
||||
static int cyber2000fb_i2c_register(struct cfb_info *cfb)
|
||||
{
|
||||
strlcpy(cfb->i2c_adapter.name, cfb->fb.fix.id,
|
||||
strscpy(cfb->i2c_adapter.name, cfb->fb.fix.id,
|
||||
sizeof(cfb->i2c_adapter.name));
|
||||
cfb->i2c_adapter.owner = THIS_MODULE;
|
||||
cfb->i2c_adapter.algo_data = &cfb->i2c_algo;
|
||||
|
@ -1500,7 +1500,7 @@ static int cyber2000fb_setup(char *options)
|
|||
if (strncmp(opt, "font:", 5) == 0) {
|
||||
static char default_font_storage[40];
|
||||
|
||||
strlcpy(default_font_storage, opt + 5,
|
||||
strscpy(default_font_storage, opt + 5,
|
||||
sizeof(default_font_storage));
|
||||
default_font = default_font_storage;
|
||||
continue;
|
||||
|
|
|
@ -883,7 +883,7 @@ static void ffb_init_fix(struct fb_info *info)
|
|||
} else
|
||||
ffb_type_name = "Elite 3D";
|
||||
|
||||
strlcpy(info->fix.id, ffb_type_name, sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, ffb_type_name, sizeof(info->fix.id));
|
||||
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
info->fix.visual = FB_VISUAL_TRUECOLOR;
|
||||
|
|
|
@ -410,13 +410,13 @@ static void __init gx1fb_setup(char *options)
|
|||
continue;
|
||||
|
||||
if (!strncmp(this_opt, "mode:", 5))
|
||||
strlcpy(mode_option, this_opt + 5, sizeof(mode_option));
|
||||
strscpy(mode_option, this_opt + 5, sizeof(mode_option));
|
||||
else if (!strncmp(this_opt, "crt:", 4))
|
||||
crt_option = !!simple_strtoul(this_opt + 4, NULL, 0);
|
||||
else if (!strncmp(this_opt, "panel:", 6))
|
||||
strlcpy(panel_option, this_opt + 6, sizeof(panel_option));
|
||||
strscpy(panel_option, this_opt + 6, sizeof(panel_option));
|
||||
else
|
||||
strlcpy(mode_option, this_opt, sizeof(mode_option));
|
||||
strscpy(mode_option, this_opt, sizeof(mode_option));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -650,7 +650,7 @@ static int gxt4500_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
cardtype = ent->driver_data;
|
||||
par->refclk_ps = cardinfo[cardtype].refclk_ps;
|
||||
info->fix = gxt4500_fix;
|
||||
strlcpy(info->fix.id, cardinfo[cardtype].cardname,
|
||||
strscpy(info->fix.id, cardinfo[cardtype].cardname,
|
||||
sizeof(info->fix.id));
|
||||
info->pseudo_palette = par->pseudo_palette;
|
||||
|
||||
|
|
|
@ -159,7 +159,7 @@ static int i740fb_setup_ddc_bus(struct fb_info *info)
|
|||
{
|
||||
struct i740fb_par *par = info->par;
|
||||
|
||||
strlcpy(par->ddc_adapter.name, info->fix.id,
|
||||
strscpy(par->ddc_adapter.name, info->fix.id,
|
||||
sizeof(par->ddc_adapter.name));
|
||||
par->ddc_adapter.owner = THIS_MODULE;
|
||||
par->ddc_adapter.class = I2C_CLASS_DDC;
|
||||
|
|
|
@ -681,7 +681,7 @@ static int imxfb_init_fbinfo(struct platform_device *pdev)
|
|||
|
||||
fbi->devtype = pdev->id_entry->driver_data;
|
||||
|
||||
strlcpy(info->fix.id, IMX_NAME, sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, IMX_NAME, sizeof(info->fix.id));
|
||||
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
info->fix.type_aux = 0;
|
||||
|
|
|
@ -2383,9 +2383,9 @@ static int __init matroxfb_setup(char *options) {
|
|||
else if (!strncmp(this_opt, "mem:", 4))
|
||||
mem = simple_strtoul(this_opt+4, NULL, 0);
|
||||
else if (!strncmp(this_opt, "mode:", 5))
|
||||
strlcpy(videomode, this_opt+5, sizeof(videomode));
|
||||
strscpy(videomode, this_opt + 5, sizeof(videomode));
|
||||
else if (!strncmp(this_opt, "outputs:", 8))
|
||||
strlcpy(outputs, this_opt+8, sizeof(outputs));
|
||||
strscpy(outputs, this_opt + 8, sizeof(outputs));
|
||||
else if (!strncmp(this_opt, "dfp:", 4)) {
|
||||
dfp_type = simple_strtoul(this_opt+4, NULL, 0);
|
||||
dfp = 1;
|
||||
|
@ -2455,7 +2455,7 @@ static int __init matroxfb_setup(char *options) {
|
|||
else if (!strcmp(this_opt, "dfp"))
|
||||
dfp = value;
|
||||
else {
|
||||
strlcpy(videomode, this_opt, sizeof(videomode));
|
||||
strscpy(videomode, this_opt, sizeof(videomode));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1642,15 +1642,13 @@ static int omapfb_do_probe(struct platform_device *pdev,
|
|||
goto cleanup;
|
||||
}
|
||||
fbdev->int_irq = platform_get_irq(pdev, 0);
|
||||
if (!fbdev->int_irq) {
|
||||
dev_err(&pdev->dev, "unable to get irq\n");
|
||||
if (fbdev->int_irq < 0) {
|
||||
r = ENXIO;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
fbdev->ext_irq = platform_get_irq(pdev, 1);
|
||||
if (!fbdev->ext_irq) {
|
||||
dev_err(&pdev->dev, "unable to get irq\n");
|
||||
if (fbdev->ext_irq < 0) {
|
||||
r = ENXIO;
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
|
@ -1331,7 +1331,7 @@ static void clear_fb_info(struct fb_info *fbi)
|
|||
{
|
||||
memset(&fbi->var, 0, sizeof(fbi->var));
|
||||
memset(&fbi->fix, 0, sizeof(fbi->fix));
|
||||
strlcpy(fbi->fix.id, MODULE_NAME, sizeof(fbi->fix.id));
|
||||
strscpy(fbi->fix.id, MODULE_NAME, sizeof(fbi->fix.id));
|
||||
}
|
||||
|
||||
static int omapfb_free_all_fbmem(struct omapfb2_device *fbdev)
|
||||
|
|
|
@ -617,6 +617,11 @@ static int pm2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!var->pixclock) {
|
||||
DPRINTK("pixclock is zero\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (PICOS2KHZ(var->pixclock) > PM2_MAX_PIXCLOCK) {
|
||||
DPRINTK("pixclock too high (%ldKHz)\n",
|
||||
PICOS2KHZ(var->pixclock));
|
||||
|
|
|
@ -640,7 +640,7 @@ static int pxa168fb_probe(struct platform_device *pdev)
|
|||
info->flags = FBINFO_DEFAULT | FBINFO_PARTIAL_PAN_OK |
|
||||
FBINFO_HWACCEL_XPAN | FBINFO_HWACCEL_YPAN;
|
||||
info->node = -1;
|
||||
strlcpy(info->fix.id, mi->id, 16);
|
||||
strscpy(info->fix.id, mi->id, 16);
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
info->fix.type_aux = 0;
|
||||
info->fix.xpanstep = 0;
|
||||
|
|
|
@ -2042,7 +2042,7 @@ static int __init pxafb_setup_options(void)
|
|||
return -ENODEV;
|
||||
|
||||
if (options)
|
||||
strlcpy(g_options, options, sizeof(g_options));
|
||||
strscpy(g_options, options, sizeof(g_options));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -248,7 +248,7 @@ static int s3fb_setup_ddc_bus(struct fb_info *info)
|
|||
{
|
||||
struct s3fb_info *par = info->par;
|
||||
|
||||
strlcpy(par->ddc_adapter.name, info->fix.id,
|
||||
strscpy(par->ddc_adapter.name, info->fix.id,
|
||||
sizeof(par->ddc_adapter.name));
|
||||
par->ddc_adapter.owner = THIS_MODULE;
|
||||
par->ddc_adapter.class = I2C_CLASS_DDC;
|
||||
|
|
|
@ -355,7 +355,7 @@ static int simplefb_regulators_get(struct simplefb_par *par,
|
|||
if (!p || p == prop->name)
|
||||
continue;
|
||||
|
||||
strlcpy(name, prop->name,
|
||||
strscpy(name, prop->name,
|
||||
strlen(prop->name) - strlen(SUPPLY_SUFFIX) + 1);
|
||||
regulator = devm_regulator_get_optional(&pdev->dev, name);
|
||||
if (IS_ERR(regulator)) {
|
||||
|
|
|
@ -649,37 +649,37 @@ sisfb_validate_mode(struct sis_video_info *ivideo, int myindex, u32 vbflags)
|
|||
u16 xres=0, yres, myres;
|
||||
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
if(ivideo->sisvga_engine == SIS_300_VGA) {
|
||||
if(!(sisbios_mode[myindex].chipset & MD_SIS300))
|
||||
if (ivideo->sisvga_engine == SIS_300_VGA) {
|
||||
if (!(sisbios_mode[myindex].chipset & MD_SIS300))
|
||||
return -1 ;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
if(ivideo->sisvga_engine == SIS_315_VGA) {
|
||||
if(!(sisbios_mode[myindex].chipset & MD_SIS315))
|
||||
if (ivideo->sisvga_engine == SIS_315_VGA) {
|
||||
if (!(sisbios_mode[myindex].chipset & MD_SIS315))
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
myres = sisbios_mode[myindex].yres;
|
||||
|
||||
switch(vbflags & VB_DISPTYPE_DISP2) {
|
||||
switch (vbflags & VB_DISPTYPE_DISP2) {
|
||||
|
||||
case CRT2_LCD:
|
||||
xres = ivideo->lcdxres; yres = ivideo->lcdyres;
|
||||
|
||||
if((ivideo->SiS_Pr.SiS_CustomT != CUT_PANEL848) &&
|
||||
(ivideo->SiS_Pr.SiS_CustomT != CUT_PANEL856)) {
|
||||
if(sisbios_mode[myindex].xres > xres)
|
||||
if ((ivideo->SiS_Pr.SiS_CustomT != CUT_PANEL848) &&
|
||||
(ivideo->SiS_Pr.SiS_CustomT != CUT_PANEL856)) {
|
||||
if (sisbios_mode[myindex].xres > xres)
|
||||
return -1;
|
||||
if(myres > yres)
|
||||
if (myres > yres)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(ivideo->sisfb_fstn) {
|
||||
if(sisbios_mode[myindex].xres == 320) {
|
||||
if(myres == 240) {
|
||||
switch(sisbios_mode[myindex].mode_no[1]) {
|
||||
if (ivideo->sisfb_fstn) {
|
||||
if (sisbios_mode[myindex].xres == 320) {
|
||||
if (myres == 240) {
|
||||
switch (sisbios_mode[myindex].mode_no[1]) {
|
||||
case 0x50: myindex = MODE_FSTN_8; break;
|
||||
case 0x56: myindex = MODE_FSTN_16; break;
|
||||
case 0x53: return -1;
|
||||
|
@ -688,7 +688,7 @@ sisfb_validate_mode(struct sis_video_info *ivideo, int myindex, u32 vbflags)
|
|||
}
|
||||
}
|
||||
|
||||
if(SiS_GetModeID_LCD(ivideo->sisvga_engine, vbflags, sisbios_mode[myindex].xres,
|
||||
if (SiS_GetModeID_LCD(ivideo->sisvga_engine, vbflags, sisbios_mode[myindex].xres,
|
||||
sisbios_mode[myindex].yres, 0, ivideo->sisfb_fstn,
|
||||
ivideo->SiS_Pr.SiS_CustomT, xres, yres, ivideo->vbflags2) < 0x14) {
|
||||
return -1;
|
||||
|
@ -696,14 +696,14 @@ sisfb_validate_mode(struct sis_video_info *ivideo, int myindex, u32 vbflags)
|
|||
break;
|
||||
|
||||
case CRT2_TV:
|
||||
if(SiS_GetModeID_TV(ivideo->sisvga_engine, vbflags, sisbios_mode[myindex].xres,
|
||||
if (SiS_GetModeID_TV(ivideo->sisvga_engine, vbflags, sisbios_mode[myindex].xres,
|
||||
sisbios_mode[myindex].yres, 0, ivideo->vbflags2) < 0x14) {
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
|
||||
case CRT2_VGA:
|
||||
if(SiS_GetModeID_VGA2(ivideo->sisvga_engine, vbflags, sisbios_mode[myindex].xres,
|
||||
if (SiS_GetModeID_VGA2(ivideo->sisvga_engine, vbflags, sisbios_mode[myindex].xres,
|
||||
sisbios_mode[myindex].yres, 0, ivideo->vbflags2) < 0x14) {
|
||||
return -1;
|
||||
}
|
||||
|
@ -1872,7 +1872,7 @@ sisfb_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info)
|
|||
|
||||
memset(fix, 0, sizeof(struct fb_fix_screeninfo));
|
||||
|
||||
strlcpy(fix->id, ivideo->myid, sizeof(fix->id));
|
||||
strscpy(fix->id, ivideo->myid, sizeof(fix->id));
|
||||
|
||||
mutex_lock(&info->mm_lock);
|
||||
fix->smem_start = ivideo->video_base + ivideo->video_offset;
|
||||
|
@ -2204,82 +2204,88 @@ static bool sisfb_test_DDC1(struct sis_video_info *ivideo)
|
|||
|
||||
static void sisfb_sense_crt1(struct sis_video_info *ivideo)
|
||||
{
|
||||
bool mustwait = false;
|
||||
u8 sr1F, cr17;
|
||||
bool mustwait = false;
|
||||
u8 sr1F, cr17;
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
u8 cr63=0;
|
||||
u8 cr63 = 0;
|
||||
#endif
|
||||
u16 temp = 0xffff;
|
||||
int i;
|
||||
u16 temp = 0xffff;
|
||||
int i;
|
||||
|
||||
sr1F = SiS_GetReg(SISSR, 0x1F);
|
||||
SiS_SetRegOR(SISSR, 0x1F, 0x04);
|
||||
SiS_SetRegAND(SISSR, 0x1F, 0x3F);
|
||||
if(sr1F & 0xc0) mustwait = true;
|
||||
sr1F = SiS_GetReg(SISSR, 0x1F);
|
||||
SiS_SetRegOR(SISSR, 0x1F, 0x04);
|
||||
SiS_SetRegAND(SISSR, 0x1F, 0x3F);
|
||||
|
||||
if (sr1F & 0xc0)
|
||||
mustwait = true;
|
||||
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
if(ivideo->sisvga_engine == SIS_315_VGA) {
|
||||
cr63 = SiS_GetReg(SISCR, ivideo->SiS_Pr.SiS_MyCR63);
|
||||
cr63 &= 0x40;
|
||||
SiS_SetRegAND(SISCR, ivideo->SiS_Pr.SiS_MyCR63, 0xBF);
|
||||
}
|
||||
if (ivideo->sisvga_engine == SIS_315_VGA) {
|
||||
cr63 = SiS_GetReg(SISCR, ivideo->SiS_Pr.SiS_MyCR63);
|
||||
cr63 &= 0x40;
|
||||
SiS_SetRegAND(SISCR, ivideo->SiS_Pr.SiS_MyCR63, 0xBF);
|
||||
}
|
||||
#endif
|
||||
|
||||
cr17 = SiS_GetReg(SISCR, 0x17);
|
||||
cr17 &= 0x80;
|
||||
if(!cr17) {
|
||||
SiS_SetRegOR(SISCR, 0x17, 0x80);
|
||||
mustwait = true;
|
||||
SiS_SetReg(SISSR, 0x00, 0x01);
|
||||
SiS_SetReg(SISSR, 0x00, 0x03);
|
||||
}
|
||||
cr17 = SiS_GetReg(SISCR, 0x17);
|
||||
cr17 &= 0x80;
|
||||
|
||||
if(mustwait) {
|
||||
for(i=0; i < 10; i++) sisfbwaitretracecrt1(ivideo);
|
||||
}
|
||||
if (!cr17) {
|
||||
SiS_SetRegOR(SISCR, 0x17, 0x80);
|
||||
mustwait = true;
|
||||
SiS_SetReg(SISSR, 0x00, 0x01);
|
||||
SiS_SetReg(SISSR, 0x00, 0x03);
|
||||
}
|
||||
|
||||
if (mustwait) {
|
||||
for (i = 0; i < 10; i++)
|
||||
sisfbwaitretracecrt1(ivideo);
|
||||
}
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
if (ivideo->chip >= SIS_330) {
|
||||
SiS_SetRegAND(SISCR, 0x32, ~0x20);
|
||||
if (ivideo->chip >= SIS_340)
|
||||
SiS_SetReg(SISCR, 0x57, 0x4a);
|
||||
else
|
||||
SiS_SetReg(SISCR, 0x57, 0x5f);
|
||||
|
||||
SiS_SetRegOR(SISCR, 0x53, 0x02);
|
||||
while ((SiS_GetRegByte(SISINPSTAT)) & 0x01)
|
||||
break;
|
||||
while (!((SiS_GetRegByte(SISINPSTAT)) & 0x01))
|
||||
break;
|
||||
if ((SiS_GetRegByte(SISMISCW)) & 0x10)
|
||||
temp = 1;
|
||||
|
||||
SiS_SetRegAND(SISCR, 0x53, 0xfd);
|
||||
SiS_SetRegAND(SISCR, 0x57, 0x00);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (temp == 0xffff) {
|
||||
i = 3;
|
||||
|
||||
do {
|
||||
temp = SiS_HandleDDC(&ivideo->SiS_Pr, ivideo->vbflags,
|
||||
ivideo->sisvga_engine, 0, 0, NULL, ivideo->vbflags2);
|
||||
} while (((temp == 0) || (temp == 0xffff)) && i--);
|
||||
|
||||
if ((temp == 0) || (temp == 0xffff)) {
|
||||
if (sisfb_test_DDC1(ivideo))
|
||||
temp = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ((temp) && (temp != 0xffff))
|
||||
SiS_SetRegOR(SISCR, 0x32, 0x20);
|
||||
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
if(ivideo->chip >= SIS_330) {
|
||||
SiS_SetRegAND(SISCR, 0x32, ~0x20);
|
||||
if(ivideo->chip >= SIS_340) {
|
||||
SiS_SetReg(SISCR, 0x57, 0x4a);
|
||||
} else {
|
||||
SiS_SetReg(SISCR, 0x57, 0x5f);
|
||||
}
|
||||
SiS_SetRegOR(SISCR, 0x53, 0x02);
|
||||
while ((SiS_GetRegByte(SISINPSTAT)) & 0x01) break;
|
||||
while (!((SiS_GetRegByte(SISINPSTAT)) & 0x01)) break;
|
||||
if ((SiS_GetRegByte(SISMISCW)) & 0x10) temp = 1;
|
||||
SiS_SetRegAND(SISCR, 0x53, 0xfd);
|
||||
SiS_SetRegAND(SISCR, 0x57, 0x00);
|
||||
}
|
||||
if (ivideo->sisvga_engine == SIS_315_VGA)
|
||||
SiS_SetRegANDOR(SISCR, ivideo->SiS_Pr.SiS_MyCR63, 0xBF, cr63);
|
||||
#endif
|
||||
|
||||
if(temp == 0xffff) {
|
||||
i = 3;
|
||||
do {
|
||||
temp = SiS_HandleDDC(&ivideo->SiS_Pr, ivideo->vbflags,
|
||||
ivideo->sisvga_engine, 0, 0, NULL, ivideo->vbflags2);
|
||||
} while(((temp == 0) || (temp == 0xffff)) && i--);
|
||||
|
||||
if((temp == 0) || (temp == 0xffff)) {
|
||||
if(sisfb_test_DDC1(ivideo)) temp = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if((temp) && (temp != 0xffff)) {
|
||||
SiS_SetRegOR(SISCR, 0x32, 0x20);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
if(ivideo->sisvga_engine == SIS_315_VGA) {
|
||||
SiS_SetRegANDOR(SISCR, ivideo->SiS_Pr.SiS_MyCR63, 0xBF, cr63);
|
||||
}
|
||||
#endif
|
||||
|
||||
SiS_SetRegANDOR(SISCR, 0x17, 0x7F, cr17);
|
||||
|
||||
SiS_SetReg(SISSR, 0x1F, sr1F);
|
||||
SiS_SetRegANDOR(SISCR, 0x17, 0x7F, cr17);
|
||||
SiS_SetReg(SISSR, 0x1F, sr1F);
|
||||
}
|
||||
|
||||
/* Determine and detect attached devices on SiS30x */
|
||||
|
@ -2293,25 +2299,25 @@ static void SiS_SenseLCD(struct sis_video_info *ivideo)
|
|||
ivideo->SiS_Pr.PanelSelfDetected = false;
|
||||
|
||||
/* LCD detection only for TMDS bridges */
|
||||
if(!(ivideo->vbflags2 & VB2_SISTMDSBRIDGE))
|
||||
if (!(ivideo->vbflags2 & VB2_SISTMDSBRIDGE))
|
||||
return;
|
||||
if(ivideo->vbflags2 & VB2_30xBDH)
|
||||
if (ivideo->vbflags2 & VB2_30xBDH)
|
||||
return;
|
||||
|
||||
/* If LCD already set up by BIOS, skip it */
|
||||
reg = SiS_GetReg(SISCR, 0x32);
|
||||
if(reg & 0x08)
|
||||
if (reg & 0x08)
|
||||
return;
|
||||
|
||||
realcrtno = 1;
|
||||
if(ivideo->SiS_Pr.DDCPortMixup)
|
||||
if (ivideo->SiS_Pr.DDCPortMixup)
|
||||
realcrtno = 0;
|
||||
|
||||
/* Check DDC capabilities */
|
||||
temp = SiS_HandleDDC(&ivideo->SiS_Pr, ivideo->vbflags, ivideo->sisvga_engine,
|
||||
realcrtno, 0, &buffer[0], ivideo->vbflags2);
|
||||
|
||||
if((!temp) || (temp == 0xffff) || (!(temp & 0x02)))
|
||||
if ((!temp) || (temp == 0xffff) || (!(temp & 0x02)))
|
||||
return;
|
||||
|
||||
/* Read DDC data */
|
||||
|
@ -2320,17 +2326,17 @@ static void SiS_SenseLCD(struct sis_video_info *ivideo)
|
|||
temp = SiS_HandleDDC(&ivideo->SiS_Pr, ivideo->vbflags,
|
||||
ivideo->sisvga_engine, realcrtno, 1,
|
||||
&buffer[0], ivideo->vbflags2);
|
||||
} while((temp) && i--);
|
||||
} while ((temp) && i--);
|
||||
|
||||
if(temp)
|
||||
if (temp)
|
||||
return;
|
||||
|
||||
/* No digital device */
|
||||
if(!(buffer[0x14] & 0x80))
|
||||
if (!(buffer[0x14] & 0x80))
|
||||
return;
|
||||
|
||||
/* First detailed timing preferred timing? */
|
||||
if(!(buffer[0x18] & 0x02))
|
||||
if (!(buffer[0x18] & 0x02))
|
||||
return;
|
||||
|
||||
xres = buffer[0x38] | ((buffer[0x3a] & 0xf0) << 4);
|
||||
|
@ -2338,26 +2344,26 @@ static void SiS_SenseLCD(struct sis_video_info *ivideo)
|
|||
|
||||
switch(xres) {
|
||||
case 1024:
|
||||
if(yres == 768)
|
||||
if (yres == 768)
|
||||
paneltype = 0x02;
|
||||
break;
|
||||
case 1280:
|
||||
if(yres == 1024)
|
||||
if (yres == 1024)
|
||||
paneltype = 0x03;
|
||||
break;
|
||||
case 1600:
|
||||
if((yres == 1200) && (ivideo->vbflags2 & VB2_30xC))
|
||||
if ((yres == 1200) && (ivideo->vbflags2 & VB2_30xC))
|
||||
paneltype = 0x0b;
|
||||
break;
|
||||
}
|
||||
|
||||
if(!paneltype)
|
||||
if (!paneltype)
|
||||
return;
|
||||
|
||||
if(buffer[0x23])
|
||||
if (buffer[0x23])
|
||||
cr37 |= 0x10;
|
||||
|
||||
if((buffer[0x47] & 0x18) == 0x18)
|
||||
if ((buffer[0x47] & 0x18) == 0x18)
|
||||
cr37 |= ((((buffer[0x47] & 0x06) ^ 0x06) << 5) | 0x20);
|
||||
else
|
||||
cr37 |= 0xc0;
|
||||
|
@ -2372,31 +2378,34 @@ static void SiS_SenseLCD(struct sis_video_info *ivideo)
|
|||
|
||||
static int SISDoSense(struct sis_video_info *ivideo, u16 type, u16 test)
|
||||
{
|
||||
int temp, mytest, result, i, j;
|
||||
int temp, mytest, result, i, j;
|
||||
|
||||
for(j = 0; j < 10; j++) {
|
||||
result = 0;
|
||||
for(i = 0; i < 3; i++) {
|
||||
mytest = test;
|
||||
SiS_SetReg(SISPART4, 0x11, (type & 0x00ff));
|
||||
temp = (type >> 8) | (mytest & 0x00ff);
|
||||
SiS_SetRegANDOR(SISPART4, 0x10, 0xe0, temp);
|
||||
SiS_DDC2Delay(&ivideo->SiS_Pr, 0x1500);
|
||||
mytest >>= 8;
|
||||
mytest &= 0x7f;
|
||||
temp = SiS_GetReg(SISPART4, 0x03);
|
||||
temp ^= 0x0e;
|
||||
temp &= mytest;
|
||||
if(temp == mytest) result++;
|
||||
for (j = 0; j < 10; j++) {
|
||||
result = 0;
|
||||
for (i = 0; i < 3; i++) {
|
||||
mytest = test;
|
||||
SiS_SetReg(SISPART4, 0x11, (type & 0x00ff));
|
||||
temp = (type >> 8) | (mytest & 0x00ff);
|
||||
SiS_SetRegANDOR(SISPART4, 0x10, 0xe0, temp);
|
||||
SiS_DDC2Delay(&ivideo->SiS_Pr, 0x1500);
|
||||
mytest >>= 8;
|
||||
mytest &= 0x7f;
|
||||
temp = SiS_GetReg(SISPART4, 0x03);
|
||||
temp ^= 0x0e;
|
||||
temp &= mytest;
|
||||
if (temp == mytest)
|
||||
result++;
|
||||
#if 1
|
||||
SiS_SetReg(SISPART4, 0x11, 0x00);
|
||||
SiS_SetRegAND(SISPART4, 0x10, 0xe0);
|
||||
SiS_DDC2Delay(&ivideo->SiS_Pr, 0x1000);
|
||||
SiS_SetReg(SISPART4, 0x11, 0x00);
|
||||
SiS_SetRegAND(SISPART4, 0x10, 0xe0);
|
||||
SiS_DDC2Delay(&ivideo->SiS_Pr, 0x1000);
|
||||
#endif
|
||||
}
|
||||
if((result == 0) || (result >= 2)) break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
if ((result == 0) || (result >= 2))
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static void SiS_Sense30x(struct sis_video_info *ivideo)
|
||||
|
@ -4262,18 +4271,17 @@ static int sisfb_post_300_rwtest(struct sis_video_info *ivideo, int iteration,
|
|||
unsigned int k, RankCapacity, PageCapacity, BankNumHigh, BankNumMid;
|
||||
unsigned int PhysicalAdrOtherPage, PhysicalAdrHigh, PhysicalAdrHalfPage;
|
||||
|
||||
for(k = 0; k < ARRAY_SIZE(SiS_DRAMType); k++) {
|
||||
|
||||
for (k = 0; k < ARRAY_SIZE(SiS_DRAMType); k++) {
|
||||
RankCapacity = buswidth * SiS_DRAMType[k][3];
|
||||
|
||||
if(RankCapacity != PseudoRankCapacity)
|
||||
if (RankCapacity != PseudoRankCapacity)
|
||||
continue;
|
||||
|
||||
if((SiS_DRAMType[k][2] + SiS_DRAMType[k][0]) > PseudoAdrPinCount)
|
||||
if ((SiS_DRAMType[k][2] + SiS_DRAMType[k][0]) > PseudoAdrPinCount)
|
||||
continue;
|
||||
|
||||
BankNumHigh = RankCapacity * 16 * iteration - 1;
|
||||
if(iteration == 3) { /* Rank No */
|
||||
if (iteration == 3) { /* Rank No */
|
||||
BankNumMid = RankCapacity * 16 - 1;
|
||||
} else {
|
||||
BankNumMid = RankCapacity * 16 * iteration / 2 - 1;
|
||||
|
@ -4287,18 +4295,22 @@ static int sisfb_post_300_rwtest(struct sis_video_info *ivideo, int iteration,
|
|||
SiS_SetRegAND(SISSR, 0x15, 0xFB); /* Test */
|
||||
SiS_SetRegOR(SISSR, 0x15, 0x04); /* Test */
|
||||
sr14 = (SiS_DRAMType[k][3] * buswidth) - 1;
|
||||
if(buswidth == 4) sr14 |= 0x80;
|
||||
else if(buswidth == 2) sr14 |= 0x40;
|
||||
|
||||
if (buswidth == 4)
|
||||
sr14 |= 0x80;
|
||||
else if (buswidth == 2)
|
||||
sr14 |= 0x40;
|
||||
|
||||
SiS_SetReg(SISSR, 0x13, SiS_DRAMType[k][4]);
|
||||
SiS_SetReg(SISSR, 0x14, sr14);
|
||||
|
||||
BankNumHigh <<= 16;
|
||||
BankNumMid <<= 16;
|
||||
|
||||
if((BankNumHigh + PhysicalAdrHigh >= mapsize) ||
|
||||
(BankNumMid + PhysicalAdrHigh >= mapsize) ||
|
||||
(BankNumHigh + PhysicalAdrHalfPage >= mapsize) ||
|
||||
(BankNumHigh + PhysicalAdrOtherPage >= mapsize))
|
||||
if ((BankNumHigh + PhysicalAdrHigh >= mapsize) ||
|
||||
(BankNumMid + PhysicalAdrHigh >= mapsize) ||
|
||||
(BankNumHigh + PhysicalAdrHalfPage >= mapsize) ||
|
||||
(BankNumHigh + PhysicalAdrOtherPage >= mapsize))
|
||||
continue;
|
||||
|
||||
/* Write data */
|
||||
|
@ -4312,7 +4324,7 @@ static int sisfb_post_300_rwtest(struct sis_video_info *ivideo, int iteration,
|
|||
(FBAddr + BankNumHigh + PhysicalAdrOtherPage));
|
||||
|
||||
/* Read data */
|
||||
if(readw(FBAddr + BankNumHigh + PhysicalAdrHigh) == PhysicalAdrHigh)
|
||||
if (readw(FBAddr + BankNumHigh + PhysicalAdrHigh) == PhysicalAdrHigh)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -5867,7 +5879,7 @@ static int sisfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
ivideo->cardnumber++;
|
||||
}
|
||||
|
||||
strlcpy(ivideo->myid, chipinfo->chip_name, sizeof(ivideo->myid));
|
||||
strscpy(ivideo->myid, chipinfo->chip_name, sizeof(ivideo->myid));
|
||||
|
||||
ivideo->warncount = 0;
|
||||
ivideo->chip_id = pdev->device;
|
||||
|
@ -6150,24 +6162,20 @@ static int sisfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
if(ivideo->sisvga_engine == SIS_315_VGA) {
|
||||
if (ivideo->sisvga_engine == SIS_315_VGA) {
|
||||
int result = 1;
|
||||
/* if((ivideo->chip == SIS_315H) ||
|
||||
(ivideo->chip == SIS_315) ||
|
||||
(ivideo->chip == SIS_315PRO) ||
|
||||
(ivideo->chip == SIS_330)) {
|
||||
sisfb_post_sis315330(pdev);
|
||||
} else */ if(ivideo->chip == XGI_20) {
|
||||
|
||||
if (ivideo->chip == XGI_20) {
|
||||
result = sisfb_post_xgi(pdev);
|
||||
ivideo->sisfb_can_post = 1;
|
||||
} else if((ivideo->chip == XGI_40) && ivideo->haveXGIROM) {
|
||||
} else if ((ivideo->chip == XGI_40) && ivideo->haveXGIROM) {
|
||||
result = sisfb_post_xgi(pdev);
|
||||
ivideo->sisfb_can_post = 1;
|
||||
} else {
|
||||
printk(KERN_INFO "sisfb: Card is not "
|
||||
"POSTed and sisfb can't do this either.\n");
|
||||
}
|
||||
if(!result) {
|
||||
if (!result) {
|
||||
printk(KERN_ERR "sisfb: Failed to POST card\n");
|
||||
ret = -ENODEV;
|
||||
goto error_3;
|
||||
|
|
|
@ -1719,7 +1719,7 @@ static int sm501fb_init_fb(struct fb_info *fb, enum sm501_controller head,
|
|||
enable = 0;
|
||||
}
|
||||
|
||||
strlcpy(fb->fix.id, fbname, sizeof(fb->fix.id));
|
||||
strscpy(fb->fix.id, fbname, sizeof(fb->fix.id));
|
||||
|
||||
memcpy(&par->ops,
|
||||
(head == HEAD_CRT) ? &sm501fb_ops_crt : &sm501fb_ops_pnl,
|
||||
|
|
|
@ -450,7 +450,7 @@ static int ssd1307fb_init(struct ssd1307fb_par *par)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Set Set Area Color Mode ON/OFF & Low Power Display Mode */
|
||||
/* Set Area Color Mode ON/OFF & Low Power Display Mode */
|
||||
if (par->area_color_enable || par->low_power) {
|
||||
u32 mode;
|
||||
|
||||
|
|
|
@ -1382,7 +1382,7 @@ static int sstfb_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
goto fail;
|
||||
}
|
||||
sst_get_memsize(info, &fix->smem_len);
|
||||
strlcpy(fix->id, spec->name, sizeof(fix->id));
|
||||
strscpy(fix->id, spec->name, sizeof(fix->id));
|
||||
|
||||
printk(KERN_INFO "%s (revision %d) with %s dac\n",
|
||||
fix->id, par->revision, par->dac_sw.name);
|
||||
|
|
|
@ -80,7 +80,7 @@ static int gfb_set_fbinfo(struct gfb_info *gp)
|
|||
info->pseudo_palette = gp->pseudo_palette;
|
||||
|
||||
/* Fill fix common fields */
|
||||
strlcpy(info->fix.id, "gfb", sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, "gfb", sizeof(info->fix.id));
|
||||
info->fix.smem_start = gp->fb_base_phys;
|
||||
info->fix.smem_len = gp->fb_size;
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
|
|
|
@ -84,7 +84,7 @@ static int s3d_set_fbinfo(struct s3d_info *sp)
|
|||
info->pseudo_palette = sp->pseudo_palette;
|
||||
|
||||
/* Fill fix common fields */
|
||||
strlcpy(info->fix.id, "s3d", sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, "s3d", sizeof(info->fix.id));
|
||||
info->fix.smem_start = sp->fb_base_phys;
|
||||
info->fix.smem_len = sp->fb_size;
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
|
|
|
@ -207,7 +207,7 @@ static int e3d_set_fbinfo(struct e3d_info *ep)
|
|||
info->pseudo_palette = ep->pseudo_palette;
|
||||
|
||||
/* Fill fix common fields */
|
||||
strlcpy(info->fix.id, "e3d", sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, "e3d", sizeof(info->fix.id));
|
||||
info->fix.smem_start = ep->fb_base_phys;
|
||||
info->fix.smem_len = ep->fb_size;
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
|
|
|
@ -333,7 +333,7 @@ tcx_init_fix(struct fb_info *info, int linebytes)
|
|||
else
|
||||
tcx_name = "TCX24";
|
||||
|
||||
strlcpy(info->fix.id, tcx_name, sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, tcx_name, sizeof(info->fix.id));
|
||||
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
|
||||
|
|
|
@ -1264,7 +1264,7 @@ static int tdfxfb_setup_ddc_bus(struct tdfxfb_i2c_chan *chan, const char *name,
|
|||
{
|
||||
int rc;
|
||||
|
||||
strlcpy(chan->adapter.name, name, sizeof(chan->adapter.name));
|
||||
strscpy(chan->adapter.name, name, sizeof(chan->adapter.name));
|
||||
chan->adapter.owner = THIS_MODULE;
|
||||
chan->adapter.class = I2C_CLASS_DDC;
|
||||
chan->adapter.algo_data = &chan->algo;
|
||||
|
@ -1293,7 +1293,7 @@ static int tdfxfb_setup_i2c_bus(struct tdfxfb_i2c_chan *chan, const char *name,
|
|||
{
|
||||
int rc;
|
||||
|
||||
strlcpy(chan->adapter.name, name, sizeof(chan->adapter.name));
|
||||
strscpy(chan->adapter.name, name, sizeof(chan->adapter.name));
|
||||
chan->adapter.owner = THIS_MODULE;
|
||||
chan->adapter.algo_data = &chan->algo;
|
||||
chan->adapter.dev.parent = dev;
|
||||
|
|
|
@ -1344,7 +1344,7 @@ tgafb_init_fix(struct fb_info *info)
|
|||
memory_size = 16777216;
|
||||
}
|
||||
|
||||
strlcpy(info->fix.id, tga_type_name, sizeof(info->fix.id));
|
||||
strscpy(info->fix.id, tga_type_name, sizeof(info->fix.id));
|
||||
|
||||
info->fix.type = FB_TYPE_PACKED_PIXELS;
|
||||
info->fix.type_aux = 0;
|
||||
|
|
|
@ -270,7 +270,7 @@ static int tridentfb_setup_ddc_bus(struct fb_info *info)
|
|||
{
|
||||
struct tridentfb_par *par = info->par;
|
||||
|
||||
strlcpy(par->ddc_adapter.name, info->fix.id,
|
||||
strscpy(par->ddc_adapter.name, info->fix.id,
|
||||
sizeof(par->ddc_adapter.name));
|
||||
par->ddc_adapter.owner = THIS_MODULE;
|
||||
par->ddc_adapter.class = I2C_CLASS_DDC;
|
||||
|
|
Loading…
Reference in a new issue