fbdev changes for v4.17:
- make it possible to load radeonfb driver when offb driver is loaded first (Mathieu Malaterre) - fix memory leak in offb driver (Mathieu Malaterre) - fix unaligned access in udlfb driver (Ladislav Michl) - convert atmel_lcdfb driver to use GPIO descriptors (Ludovic Desroches) - avoid mismatched prototypes in sisfb driver (Arnd Bergmann) - remove VLA usage from viafb driver (Gustavo A. R. Silva) - add missing help text to FB_I810_I2 config option (Ulf Magnusson) - misc fixes (Gustavo A. R. Silva, Colin Ian King, Markus Elfring) - remove dead code from s3c-fb driver for Exynos and S5PV210 platforms - misc cleanups (Corentin Labbe, Ladislav Michl, Ulf Magnusson, Vladimir Zapolskiy, Markus Elfring) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABCAAGBQJazJIDAAoJEH4ztj+gR8ILdYAQAJiFieXsawycxk2k5IUcYv0Q ZVFSk0Y6TjDh3uo8Evv10r863PxwVrl7ii/KjfEPZYBslvUnBzEKqOHkpwLkxk1Q e8JspXqMjgfAUq9Pvjdd88SJMxMm0UetLan6qjMcyc7mRcISS/fCSYxBiwqcOn3o Y4etjk4hF6bvL+TXMb4faeDDn/Q61113T9kgcc9sYIqJUOnaui/lInOFGjBtwraV IEoOlxC5ahG+l+ae0YkayTdH14LZF5DbibLufHAbIQ1cFbPF9/Iox+OizDUrqF6s aQjGuDGxkUokCZBC7uQOqijePSCJRNTI2gQsYXyOaolQ5zXjda7yUmmDrM1fPcJB v/oPRy6w9EwL0JOs0BVR+qJxO5+dBIAre/WSms+oMay1KR/Lbuk5u3CE7clEkg39 ChlbsrYLOK+j1fvdcsHJjjDnWZoxF11u+J2cehdObS84Vz+B8/Ltnl7hN0mcJYzu WPXaiu337GJtC89Iggfytqn5TsYzyB0bxzc/Ti6LuNX+ptogLp9BRIO3w839saph 9ogaoYO1g/2EpzfLzh7+7evSJN9t+N//cp85VPJBpd30x1KLffwh1uCJDLOFpT0u suEVbSscPIiMDcPoLF7l6I6t4+vXmP11JGbgw8SkIruTjGDpuWfeIuoOh7NlTLjb C+32XFVjrKjENrrLT6UW =XqjJ -----END PGP SIGNATURE----- Merge tag 'fbdev-v4.17' of git://github.com/bzolnier/linux Pull fbdev updates from Bartlomiej Zolnierkiewicz: "There is nothing really major here, just a couple of small bugfixes, improvements and cleanups: - make it possible to load radeonfb driver when offb driver is loaded first (Mathieu Malaterre) - fix memory leak in offb driver (Mathieu Malaterre) - fix unaligned access in udlfb driver (Ladislav Michl) - convert atmel_lcdfb driver to use GPIO descriptors (Ludovic Desroches) - avoid mismatched prototypes in sisfb driver (Arnd Bergmann) - remove VLA usage from viafb driver (Gustavo A. R. Silva) - add missing help text to FB_I810_I2 config option (Ulf Magnusson) - misc fixes (Gustavo A. R. Silva, Colin Ian King, Markus Elfring) - remove dead code from s3c-fb driver for Exynos and S5PV210 platforms - misc cleanups (Corentin Labbe, Ladislav Michl, Ulf Magnusson, Vladimir Zapolskiy, Markus Elfring)" * tag 'fbdev-v4.17' of git://github.com/bzolnier/linux: (32 commits) video: fbdev: s3c-fb: remove dead platform code for Exynos and S5PV210 platforms video: au1100fb: Delete an unnecessary variable initialisation in au1100fb_drv_probe() video: au1100fb: Improve a size determination in au1100fb_drv_probe() video: au1100fb: Delete an error message for a failed memory allocation in au1100fb_drv_probe() video/console/sticore: Delete an error message for a failed memory allocation in sti_try_rom_generic() video: ARM CLCD: Improve a size determination in clcdfb_probe() video: ARM CLCD: Delete an error message for a failed memory allocation in clcdfb_probe() video: matroxfb: Delete an error message for a failed memory allocation in matroxfb_crtc2_probe() video: s3c-fb: Improve a size determination in s3c_fb_probe() video: s3c-fb: Delete an error message for a failed memory allocation in s3c_fb_probe() video: fsl-diu-fb: Delete an error message for a failed memory allocation in fsl_diu_init() video: ssd1307fb: Improve a size determination in ssd1307fb_probe() video: smscufx: Delete an error message for a failed memory allocation in ufx_realloc_framebuffer() video: smscufx: Return an error code only as a constant in ufx_realloc_framebuffer() video: smscufx: Less checks in ufx_usb_probe() after error detection video: udlfb: Return an error code only as a constant in dlfb_realloc_framebuffer() video/fbdev/stifb: Delete an error message for a failed memory allocation in stifb_init_fb() video/fbdev/stifb: Return -ENOMEM after a failed kzalloc() in stifb_init_fb() video: fbdev: aty128fb: use true and false for boolean values fbdev: aty: fix missing indentation in if statement ...
This commit is contained in:
commit
5e630afdcb
|
@ -9,9 +9,6 @@ if HAS_IOMEM
|
|||
config HAVE_FB_ATMEL
|
||||
bool
|
||||
|
||||
config SH_LCD_MIPI_DSI
|
||||
bool
|
||||
|
||||
source "drivers/char/agp/Kconfig"
|
||||
|
||||
source "drivers/gpu/vga/Kconfig"
|
||||
|
|
|
@ -827,10 +827,8 @@ static struct sti_struct *sti_try_rom_generic(unsigned long address,
|
|||
}
|
||||
|
||||
sti = kzalloc(sizeof(*sti), GFP_KERNEL);
|
||||
if (!sti) {
|
||||
printk(KERN_ERR "Not enough memory !\n");
|
||||
if (!sti)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
spin_lock_init(&sti->lock);
|
||||
|
||||
|
|
|
@ -1053,6 +1053,11 @@ config FB_I810_I2C
|
|||
bool "Enable DDC Support"
|
||||
depends on FB_I810 && FB_I810_GTF
|
||||
select FB_DDC
|
||||
help
|
||||
Add DDC/I2C support for i810fb. This will allow the driver to get
|
||||
display information, especially for monitors with fickle timings.
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
config FB_LE80578
|
||||
tristate "Intel LE80578 (Vermilion) support"
|
||||
|
@ -1917,8 +1922,7 @@ config FB_TMIO_ACCELL
|
|||
|
||||
config FB_S3C
|
||||
tristate "Samsung S3C framebuffer support"
|
||||
depends on FB && (CPU_S3C2416 || ARCH_S3C64XX || \
|
||||
ARCH_S5PV210 || ARCH_EXYNOS)
|
||||
depends on FB && (CPU_S3C2416 || ARCH_S3C64XX)
|
||||
select FB_CFB_FILLRECT
|
||||
select FB_CFB_COPYAREA
|
||||
select FB_CFB_IMAGEBLIT
|
||||
|
|
|
@ -967,9 +967,8 @@ static int clcdfb_probe(struct amba_device *dev, const struct amba_id *id)
|
|||
goto out;
|
||||
}
|
||||
|
||||
fb = kzalloc(sizeof(struct clcd_fb), GFP_KERNEL);
|
||||
fb = kzalloc(sizeof(*fb), GFP_KERNEL);
|
||||
if (!fb) {
|
||||
printk(KERN_INFO "CLCD: could not allocate new clcd_fb struct\n");
|
||||
ret = -ENOMEM;
|
||||
goto free_region;
|
||||
}
|
||||
|
|
|
@ -18,10 +18,10 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/backlight.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <video/of_display_timing.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <video/videomode.h>
|
||||
|
@ -61,8 +61,7 @@ struct atmel_lcdfb_info {
|
|||
};
|
||||
|
||||
struct atmel_lcdfb_power_ctrl_gpio {
|
||||
int gpio;
|
||||
int active_low;
|
||||
struct gpio_desc *gpiod;
|
||||
|
||||
struct list_head list;
|
||||
};
|
||||
|
@ -1018,7 +1017,7 @@ static void atmel_lcdfb_power_control_gpio(struct atmel_lcdfb_pdata *pdata, int
|
|||
struct atmel_lcdfb_power_ctrl_gpio *og;
|
||||
|
||||
list_for_each_entry(og, &pdata->pwr_gpios, list)
|
||||
gpio_set_value(og->gpio, on);
|
||||
gpiod_set_value(og->gpiod, on);
|
||||
}
|
||||
|
||||
static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
|
||||
|
@ -1031,11 +1030,11 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
|
|||
struct device_node *display_np;
|
||||
struct device_node *timings_np;
|
||||
struct display_timings *timings;
|
||||
enum of_gpio_flags flags;
|
||||
struct atmel_lcdfb_power_ctrl_gpio *og;
|
||||
bool is_gpio_power = false;
|
||||
struct gpio_desc *gpiod;
|
||||
int ret = -ENOENT;
|
||||
int i, gpio;
|
||||
int i;
|
||||
|
||||
sinfo->config = (struct atmel_lcdfb_config*)
|
||||
of_match_device(atmel_lcdfb_dt_ids, dev)->data;
|
||||
|
@ -1072,28 +1071,22 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
|
|||
|
||||
INIT_LIST_HEAD(&pdata->pwr_gpios);
|
||||
ret = -ENOMEM;
|
||||
for (i = 0; i < of_gpio_named_count(display_np, "atmel,power-control-gpio"); i++) {
|
||||
gpio = of_get_named_gpio_flags(display_np, "atmel,power-control-gpio",
|
||||
i, &flags);
|
||||
if (gpio < 0)
|
||||
for (i = 0; i < gpiod_count(dev, "atmel,power-control"); i++) {
|
||||
gpiod = devm_gpiod_get_index(dev, "atmel,power-control",
|
||||
i, GPIOD_ASIS);
|
||||
if (IS_ERR(gpiod))
|
||||
continue;
|
||||
|
||||
og = devm_kzalloc(dev, sizeof(*og), GFP_KERNEL);
|
||||
if (!og)
|
||||
goto put_display_node;
|
||||
|
||||
og->gpio = gpio;
|
||||
og->active_low = flags & OF_GPIO_ACTIVE_LOW;
|
||||
og->gpiod = gpiod;
|
||||
is_gpio_power = true;
|
||||
ret = devm_gpio_request(dev, gpio, "lcd-power-control-gpio");
|
||||
if (ret) {
|
||||
dev_err(dev, "request gpio %d failed\n", gpio);
|
||||
goto put_display_node;
|
||||
}
|
||||
|
||||
ret = gpio_direction_output(gpio, og->active_low);
|
||||
ret = gpiod_direction_output(gpiod, gpiod_is_active_low(gpiod));
|
||||
if (ret) {
|
||||
dev_err(dev, "set direction output gpio %d failed\n", gpio);
|
||||
dev_err(dev, "set direction output gpio atmel,power-control[%d] failed\n", i);
|
||||
goto put_display_node;
|
||||
}
|
||||
list_add(&og->list, &pdata->pwr_gpios);
|
||||
|
|
|
@ -1716,7 +1716,7 @@ static int aty128fb_setup(char *options)
|
|||
continue;
|
||||
}
|
||||
if(!strncmp(this_opt, "nomtrr", 6)) {
|
||||
mtrr = 0;
|
||||
mtrr = false;
|
||||
continue;
|
||||
}
|
||||
#ifdef CONFIG_PPC_PMAC
|
||||
|
|
|
@ -2255,6 +2255,23 @@ static const struct bin_attribute edid2_attr = {
|
|||
.read = radeon_show_edid2,
|
||||
};
|
||||
|
||||
static int radeon_kick_out_firmware_fb(struct pci_dev *pdev)
|
||||
{
|
||||
struct apertures_struct *ap;
|
||||
|
||||
ap = alloc_apertures(1);
|
||||
if (!ap)
|
||||
return -ENOMEM;
|
||||
|
||||
ap->ranges[0].base = pci_resource_start(pdev, 0);
|
||||
ap->ranges[0].size = pci_resource_len(pdev, 0);
|
||||
|
||||
remove_conflicting_framebuffers(ap, KBUILD_MODNAME, false);
|
||||
|
||||
kfree(ap);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int radeonfb_pci_register(struct pci_dev *pdev,
|
||||
const struct pci_device_id *ent)
|
||||
|
@ -2308,6 +2325,10 @@ static int radeonfb_pci_register(struct pci_dev *pdev,
|
|||
rinfo->fb_base_phys = pci_resource_start (pdev, 0);
|
||||
rinfo->mmio_base_phys = pci_resource_start (pdev, 2);
|
||||
|
||||
ret = radeon_kick_out_firmware_fb(pdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* request the mem regions */
|
||||
ret = pci_request_region(pdev, 0, "radeonfb framebuffer");
|
||||
if (ret < 0) {
|
||||
|
|
|
@ -410,18 +410,15 @@ static int au1100fb_setup(struct au1100fb_device *fbdev)
|
|||
|
||||
static int au1100fb_drv_probe(struct platform_device *dev)
|
||||
{
|
||||
struct au1100fb_device *fbdev = NULL;
|
||||
struct au1100fb_device *fbdev;
|
||||
struct resource *regs_res;
|
||||
unsigned long page;
|
||||
struct clk *c;
|
||||
|
||||
/* Allocate new device private */
|
||||
fbdev = devm_kzalloc(&dev->dev, sizeof(struct au1100fb_device),
|
||||
GFP_KERNEL);
|
||||
if (!fbdev) {
|
||||
print_err("fail to allocate device private record");
|
||||
fbdev = devm_kzalloc(&dev->dev, sizeof(*fbdev), GFP_KERNEL);
|
||||
if (!fbdev)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (au1100fb_setup(fbdev))
|
||||
goto failed;
|
||||
|
|
|
@ -1960,12 +1960,8 @@ static int __init fsl_diu_init(void)
|
|||
|
||||
of_node_put(np);
|
||||
coherence_data = vmalloc(coherence_data_size);
|
||||
if (!coherence_data) {
|
||||
pr_err("fsl-diu-fb: could not allocate coherence data "
|
||||
"(size=%zu)\n", coherence_data_size);
|
||||
if (!coherence_data)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
ret = platform_driver_register(&fsl_diu_driver);
|
||||
|
|
|
@ -696,10 +696,9 @@ static void* matroxfb_crtc2_probe(struct matrox_fb_info* minfo) {
|
|||
if (!minfo->devflags.crtc2)
|
||||
return NULL;
|
||||
m2info = kzalloc(sizeof(*m2info), GFP_KERNEL);
|
||||
if (!m2info) {
|
||||
printk(KERN_ERR "matroxfb_crtc2: Not enough memory for CRTC2 control structs\n");
|
||||
if (!m2info)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
m2info->primary_dev = minfo;
|
||||
if (matroxfb_dh_registerfb(m2info)) {
|
||||
kfree(m2info);
|
||||
|
|
|
@ -280,6 +280,7 @@ static void offb_destroy(struct fb_info *info)
|
|||
if (info->screen_base)
|
||||
iounmap(info->screen_base);
|
||||
release_mem_region(info->apertures->ranges[0].base, info->apertures->ranges[0].size);
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
framebuffer_release(info);
|
||||
}
|
||||
|
||||
|
@ -518,6 +519,7 @@ static void __init offb_init_fb(const char *name,
|
|||
return;
|
||||
|
||||
out_err:
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
iounmap(info->screen_base);
|
||||
out_aper:
|
||||
iounmap(par->cmap_adr);
|
||||
|
|
|
@ -1383,11 +1383,9 @@ static int s3c_fb_probe(struct platform_device *pdev)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
sfb = devm_kzalloc(dev, sizeof(struct s3c_fb), GFP_KERNEL);
|
||||
if (!sfb) {
|
||||
dev_err(dev, "no memory for framebuffers\n");
|
||||
sfb = devm_kzalloc(dev, sizeof(*sfb), GFP_KERNEL);
|
||||
if (!sfb)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
dev_dbg(dev, "allocate new framebuffer %p\n", sfb);
|
||||
|
||||
|
@ -1716,63 +1714,6 @@ static struct s3c_fb_win_variant s3c_fb_data_64xx_wins[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct s3c_fb_win_variant s3c_fb_data_s5p_wins[] = {
|
||||
[0] = {
|
||||
.has_osd_c = 1,
|
||||
.osd_size_off = 0x8,
|
||||
.palette_sz = 256,
|
||||
.valid_bpp = (VALID_BPP1248 | VALID_BPP(13) |
|
||||
VALID_BPP(15) | VALID_BPP(16) |
|
||||
VALID_BPP(18) | VALID_BPP(19) |
|
||||
VALID_BPP(24) | VALID_BPP(25) |
|
||||
VALID_BPP(32)),
|
||||
},
|
||||
[1] = {
|
||||
.has_osd_c = 1,
|
||||
.has_osd_d = 1,
|
||||
.osd_size_off = 0xc,
|
||||
.has_osd_alpha = 1,
|
||||
.palette_sz = 256,
|
||||
.valid_bpp = (VALID_BPP1248 | VALID_BPP(13) |
|
||||
VALID_BPP(15) | VALID_BPP(16) |
|
||||
VALID_BPP(18) | VALID_BPP(19) |
|
||||
VALID_BPP(24) | VALID_BPP(25) |
|
||||
VALID_BPP(32)),
|
||||
},
|
||||
[2] = {
|
||||
.has_osd_c = 1,
|
||||
.has_osd_d = 1,
|
||||
.osd_size_off = 0xc,
|
||||
.has_osd_alpha = 1,
|
||||
.palette_sz = 256,
|
||||
.valid_bpp = (VALID_BPP1248 | VALID_BPP(13) |
|
||||
VALID_BPP(15) | VALID_BPP(16) |
|
||||
VALID_BPP(18) | VALID_BPP(19) |
|
||||
VALID_BPP(24) | VALID_BPP(25) |
|
||||
VALID_BPP(32)),
|
||||
},
|
||||
[3] = {
|
||||
.has_osd_c = 1,
|
||||
.has_osd_alpha = 1,
|
||||
.palette_sz = 256,
|
||||
.valid_bpp = (VALID_BPP1248 | VALID_BPP(13) |
|
||||
VALID_BPP(15) | VALID_BPP(16) |
|
||||
VALID_BPP(18) | VALID_BPP(19) |
|
||||
VALID_BPP(24) | VALID_BPP(25) |
|
||||
VALID_BPP(32)),
|
||||
},
|
||||
[4] = {
|
||||
.has_osd_c = 1,
|
||||
.has_osd_alpha = 1,
|
||||
.palette_sz = 256,
|
||||
.valid_bpp = (VALID_BPP1248 | VALID_BPP(13) |
|
||||
VALID_BPP(15) | VALID_BPP(16) |
|
||||
VALID_BPP(18) | VALID_BPP(19) |
|
||||
VALID_BPP(24) | VALID_BPP(25) |
|
||||
VALID_BPP(32)),
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c_fb_driverdata s3c_fb_data_64xx = {
|
||||
.variant = {
|
||||
.nr_windows = 5,
|
||||
|
@ -1804,102 +1745,6 @@ static struct s3c_fb_driverdata s3c_fb_data_64xx = {
|
|||
.win[4] = &s3c_fb_data_64xx_wins[4],
|
||||
};
|
||||
|
||||
static struct s3c_fb_driverdata s3c_fb_data_s5pv210 = {
|
||||
.variant = {
|
||||
.nr_windows = 5,
|
||||
.vidtcon = VIDTCON0,
|
||||
.wincon = WINCON(0),
|
||||
.winmap = WINxMAP(0),
|
||||
.keycon = WKEYCON,
|
||||
.osd = VIDOSD_BASE,
|
||||
.osd_stride = 16,
|
||||
.buf_start = VIDW_BUF_START(0),
|
||||
.buf_size = VIDW_BUF_SIZE(0),
|
||||
.buf_end = VIDW_BUF_END(0),
|
||||
|
||||
.palette = {
|
||||
[0] = 0x2400,
|
||||
[1] = 0x2800,
|
||||
[2] = 0x2c00,
|
||||
[3] = 0x3000,
|
||||
[4] = 0x3400,
|
||||
},
|
||||
|
||||
.has_shadowcon = 1,
|
||||
.has_blendcon = 1,
|
||||
.has_clksel = 1,
|
||||
.has_fixvclk = 1,
|
||||
},
|
||||
.win[0] = &s3c_fb_data_s5p_wins[0],
|
||||
.win[1] = &s3c_fb_data_s5p_wins[1],
|
||||
.win[2] = &s3c_fb_data_s5p_wins[2],
|
||||
.win[3] = &s3c_fb_data_s5p_wins[3],
|
||||
.win[4] = &s3c_fb_data_s5p_wins[4],
|
||||
};
|
||||
|
||||
static struct s3c_fb_driverdata s3c_fb_data_exynos4 = {
|
||||
.variant = {
|
||||
.nr_windows = 5,
|
||||
.vidtcon = VIDTCON0,
|
||||
.wincon = WINCON(0),
|
||||
.winmap = WINxMAP(0),
|
||||
.keycon = WKEYCON,
|
||||
.osd = VIDOSD_BASE,
|
||||
.osd_stride = 16,
|
||||
.buf_start = VIDW_BUF_START(0),
|
||||
.buf_size = VIDW_BUF_SIZE(0),
|
||||
.buf_end = VIDW_BUF_END(0),
|
||||
|
||||
.palette = {
|
||||
[0] = 0x2400,
|
||||
[1] = 0x2800,
|
||||
[2] = 0x2c00,
|
||||
[3] = 0x3000,
|
||||
[4] = 0x3400,
|
||||
},
|
||||
|
||||
.has_shadowcon = 1,
|
||||
.has_blendcon = 1,
|
||||
.has_fixvclk = 1,
|
||||
},
|
||||
.win[0] = &s3c_fb_data_s5p_wins[0],
|
||||
.win[1] = &s3c_fb_data_s5p_wins[1],
|
||||
.win[2] = &s3c_fb_data_s5p_wins[2],
|
||||
.win[3] = &s3c_fb_data_s5p_wins[3],
|
||||
.win[4] = &s3c_fb_data_s5p_wins[4],
|
||||
};
|
||||
|
||||
static struct s3c_fb_driverdata s3c_fb_data_exynos5 = {
|
||||
.variant = {
|
||||
.nr_windows = 5,
|
||||
.vidtcon = FIMD_V8_VIDTCON0,
|
||||
.wincon = WINCON(0),
|
||||
.winmap = WINxMAP(0),
|
||||
.keycon = WKEYCON,
|
||||
.osd = VIDOSD_BASE,
|
||||
.osd_stride = 16,
|
||||
.buf_start = VIDW_BUF_START(0),
|
||||
.buf_size = VIDW_BUF_SIZE(0),
|
||||
.buf_end = VIDW_BUF_END(0),
|
||||
|
||||
.palette = {
|
||||
[0] = 0x2400,
|
||||
[1] = 0x2800,
|
||||
[2] = 0x2c00,
|
||||
[3] = 0x3000,
|
||||
[4] = 0x3400,
|
||||
},
|
||||
.has_shadowcon = 1,
|
||||
.has_blendcon = 1,
|
||||
.has_fixvclk = 1,
|
||||
},
|
||||
.win[0] = &s3c_fb_data_s5p_wins[0],
|
||||
.win[1] = &s3c_fb_data_s5p_wins[1],
|
||||
.win[2] = &s3c_fb_data_s5p_wins[2],
|
||||
.win[3] = &s3c_fb_data_s5p_wins[3],
|
||||
.win[4] = &s3c_fb_data_s5p_wins[4],
|
||||
};
|
||||
|
||||
/* S3C2443/S3C2416 style hardware */
|
||||
static struct s3c_fb_driverdata s3c_fb_data_s3c2443 = {
|
||||
.variant = {
|
||||
|
@ -1941,15 +1786,6 @@ static const struct platform_device_id s3c_fb_driver_ids[] = {
|
|||
{
|
||||
.name = "s3c-fb",
|
||||
.driver_data = (unsigned long)&s3c_fb_data_64xx,
|
||||
}, {
|
||||
.name = "s5pv210-fb",
|
||||
.driver_data = (unsigned long)&s3c_fb_data_s5pv210,
|
||||
}, {
|
||||
.name = "exynos4-fb",
|
||||
.driver_data = (unsigned long)&s3c_fb_data_exynos4,
|
||||
}, {
|
||||
.name = "exynos5-fb",
|
||||
.driver_data = (unsigned long)&s3c_fb_data_exynos5,
|
||||
}, {
|
||||
.name = "s3c2443-fb",
|
||||
.driver_data = (unsigned long)&s3c_fb_data_s3c2443,
|
||||
|
|
|
@ -1461,81 +1461,5 @@ static const struct SiS_LVDSCRT1Data SiS_LVDSCRT1640x480_1_H[] =
|
|||
0x00}}
|
||||
};
|
||||
|
||||
bool SiSInitPtr(struct SiS_Private *SiS_Pr);
|
||||
unsigned short SiS_GetModeID_LCD(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, bool FSTN,
|
||||
unsigned short CustomT, int LCDwith, int LCDheight,
|
||||
unsigned int VBFlags2);
|
||||
unsigned short SiS_GetModeID_TV(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, unsigned int VBFlags2);
|
||||
unsigned short SiS_GetModeID_VGA2(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, unsigned int VBFlags2);
|
||||
|
||||
void SiS_DisplayOn(struct SiS_Private *SiS_Pr);
|
||||
void SiS_DisplayOff(struct SiS_Private *SiS_Pr);
|
||||
void SiSRegInit(struct SiS_Private *SiS_Pr, SISIOADDRESS BaseAddr);
|
||||
void SiS_SetEnableDstn(struct SiS_Private *SiS_Pr, int enable);
|
||||
void SiS_SetEnableFstn(struct SiS_Private *SiS_Pr, int enable);
|
||||
unsigned short SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
bool SiSDetermineROMLayout661(struct SiS_Private *SiS_Pr);
|
||||
|
||||
bool SiS_SearchModeID(struct SiS_Private *SiS_Pr, unsigned short *ModeNo,
|
||||
unsigned short *ModeIdIndex);
|
||||
unsigned short SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
unsigned short SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
|
||||
unsigned short SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
|
||||
unsigned short SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
unsigned short SiS_GetOffset(struct SiS_Private *SiS_Pr,unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex, unsigned short RRTI);
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
void SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *idx1,
|
||||
unsigned short *idx2);
|
||||
unsigned short SiS_GetFIFOThresholdB300(unsigned short idx1, unsigned short idx2);
|
||||
unsigned short SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
|
||||
#endif
|
||||
void SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
|
||||
bool SiSSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
|
||||
void SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
|
||||
void SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
void SiS_Generic_ConvertCRData(struct SiS_Private *SiS_Pr, unsigned char *crdata, int xres,
|
||||
int yres, struct fb_var_screeninfo *var, bool writeres);
|
||||
|
||||
/* From init301.c: */
|
||||
extern void SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex, int chkcrt2mode);
|
||||
extern void SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
extern void SiS_SetYPbPr(struct SiS_Private *SiS_Pr);
|
||||
extern void SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
extern void SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
|
||||
extern void SiS_DisableBridge(struct SiS_Private *);
|
||||
extern bool SiS_SetCRT2Group(struct SiS_Private *, unsigned short);
|
||||
extern unsigned short SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
extern void SiS_WaitRetrace1(struct SiS_Private *SiS_Pr);
|
||||
extern unsigned short SiS_GetResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
extern unsigned short SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax);
|
||||
extern unsigned short SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex, unsigned short RRTI);
|
||||
extern bool SiS_IsVAMode(struct SiS_Private *);
|
||||
extern bool SiS_IsDualEdge(struct SiS_Private *);
|
||||
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
extern unsigned int sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
|
||||
extern void sisfb_write_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg,
|
||||
unsigned int val);
|
||||
#endif
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
extern void sisfb_write_nbridge_pci_byte(struct SiS_Private *SiS_Pr, int reg,
|
||||
unsigned char val);
|
||||
extern unsigned int sisfb_read_mio_pci_word(struct SiS_Private *SiS_Pr, int reg);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -82,6 +82,332 @@
|
|||
#define SiS_I2CDELAY 1000
|
||||
#define SiS_I2CDELAYSHORT 150
|
||||
|
||||
static const unsigned char SiS_YPbPrTable[3][64] = {
|
||||
{
|
||||
0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
|
||||
0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
|
||||
0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
|
||||
0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
|
||||
0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
|
||||
0x03,0x0a,0x65,0x9d /*0x8d*/,0x08,0x92,0x8f,0x40,
|
||||
0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x53 /*0x50*/,
|
||||
0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
|
||||
},
|
||||
{
|
||||
0x33,0x06,0x06,0x09,0x0b,0x0c,0x0c,0x0c,
|
||||
0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
|
||||
0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
|
||||
0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4f,0x13,
|
||||
0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
|
||||
0x51,0x5e,0x60,0x49,0x7d,0x92,0x0f,0x40,
|
||||
0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4e,
|
||||
0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
|
||||
},
|
||||
{
|
||||
#if 0 /* OK, but sticks to left edge */
|
||||
0x13,0x1d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
|
||||
0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
|
||||
0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
|
||||
0xed,0x50,0x70,0x9f,0x16,0x59,0x21 /*0x2b*/,0x13,
|
||||
0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
|
||||
0x4b,0x4b,0x65 /*0x6f*/,0x2f,0x63,0x92,0x0f,0x40,
|
||||
0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x27,
|
||||
0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
|
||||
#endif
|
||||
#if 1 /* Perfect */
|
||||
0x23,0x2d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
|
||||
0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
|
||||
0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
|
||||
0xed,0x50,0x70,0x9f,0x16,0x59,0x60,0x13,
|
||||
0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
|
||||
0x4b,0x4b,0x6f,0x2f,0x63,0x92,0x0f,0x40,
|
||||
0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x73,
|
||||
0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
static const unsigned char SiS_TVPhase[] =
|
||||
{
|
||||
0x21,0xED,0xBA,0x08, /* 0x00 SiS_NTSCPhase */
|
||||
0x2A,0x05,0xE3,0x00, /* 0x01 SiS_PALPhase */
|
||||
0x21,0xE4,0x2E,0x9B, /* 0x02 SiS_PALMPhase */
|
||||
0x21,0xF4,0x3E,0xBA, /* 0x03 SiS_PALNPhase */
|
||||
0x1E,0x8B,0xA2,0xA7,
|
||||
0x1E,0x83,0x0A,0xE0, /* 0x05 SiS_SpecialPhaseM */
|
||||
0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,
|
||||
0x21,0xF0,0x7B,0xD6, /* 0x08 SiS_NTSCPhase2 */
|
||||
0x2A,0x09,0x86,0xE9, /* 0x09 SiS_PALPhase2 */
|
||||
0x21,0xE6,0xEF,0xA4, /* 0x0a SiS_PALMPhase2 */
|
||||
0x21,0xF6,0x94,0x46, /* 0x0b SiS_PALNPhase2 */
|
||||
0x1E,0x8B,0xA2,0xA7,
|
||||
0x1E,0x83,0x0A,0xE0, /* 0x0d SiS_SpecialPhaseM */
|
||||
0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,
|
||||
0x1e,0x8c,0x5c,0x7a, /* 0x10 SiS_SpecialPhase */
|
||||
0x25,0xd4,0xfd,0x5e /* 0x11 SiS_SpecialPhaseJ */
|
||||
};
|
||||
|
||||
static const unsigned char SiS_HiTVGroup3_1[] = {
|
||||
0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
|
||||
0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
|
||||
0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
|
||||
0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
|
||||
0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
|
||||
0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
|
||||
0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
|
||||
0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
|
||||
};
|
||||
|
||||
static const unsigned char SiS_HiTVGroup3_2[] = {
|
||||
0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
|
||||
0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
|
||||
0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
|
||||
0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
|
||||
0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
|
||||
0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
|
||||
0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
|
||||
0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
|
||||
};
|
||||
|
||||
/* 301C / 302ELV extended Part2 TV registers (4 tap scaler) */
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_1[] = {
|
||||
0x00,0x00,
|
||||
0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
|
||||
0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
|
||||
0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
|
||||
0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_2[] = {
|
||||
0x00,0x00,
|
||||
0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
|
||||
0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
|
||||
0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
|
||||
0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_3[] = { /* NTSC, 525i, 525p */
|
||||
0xE0,0x01,
|
||||
0x04,0x1A,0x04,0x7E,0x03,0x1A,0x06,0x7D,0x01,0x1A,0x08,0x7D,0x00,0x19,0x0A,0x7D,
|
||||
0x7F,0x19,0x0C,0x7C,0x7E,0x18,0x0E,0x7C,0x7E,0x17,0x10,0x7B,0x7D,0x15,0x12,0x7C,
|
||||
0x7D,0x13,0x13,0x7D,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0E,0x18,0x7E,
|
||||
0x7D,0x0C,0x19,0x7E,0x7D,0x0A,0x19,0x00,0x7D,0x08,0x1A,0x01,0x7E,0x06,0x1A,0x02,
|
||||
0x58,0x02,
|
||||
0x07,0x14,0x07,0x7E,0x06,0x14,0x09,0x7D,0x05,0x14,0x0A,0x7D,0x04,0x13,0x0B,0x7E,
|
||||
0x03,0x13,0x0C,0x7E,0x02,0x12,0x0D,0x7F,0x01,0x12,0x0E,0x7F,0x01,0x11,0x0F,0x7F,
|
||||
0x00,0x10,0x10,0x00,0x7F,0x0F,0x11,0x01,0x7F,0x0E,0x12,0x01,0x7E,0x0D,0x12,0x03,
|
||||
0x7E,0x0C,0x13,0x03,0x7E,0x0B,0x13,0x04,0x7E,0x0A,0x14,0x04,0x7D,0x09,0x14,0x06,
|
||||
0x00,0x03,
|
||||
0x09,0x0F,0x09,0x7F,0x08,0x0F,0x09,0x00,0x07,0x0F,0x0A,0x00,0x06,0x0F,0x0A,0x01,
|
||||
0x06,0x0E,0x0B,0x01,0x05,0x0E,0x0B,0x02,0x04,0x0E,0x0C,0x02,0x04,0x0D,0x0C,0x03,
|
||||
0x03,0x0D,0x0D,0x03,0x02,0x0C,0x0D,0x05,0x02,0x0C,0x0E,0x04,0x01,0x0B,0x0E,0x06,
|
||||
0x01,0x0B,0x0E,0x06,0x00,0x0A,0x0F,0x07,0x00,0x0A,0x0F,0x07,0x00,0x09,0x0F,0x08,
|
||||
0xFF,0xFF
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_4[] = { /* PAL */
|
||||
0x58,0x02,
|
||||
0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
|
||||
0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
|
||||
0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
|
||||
0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
|
||||
0x00,0x03,
|
||||
0x08,0x12,0x08,0x7E,0x07,0x12,0x09,0x7E,0x06,0x12,0x0A,0x7E,0x05,0x11,0x0B,0x7F,
|
||||
0x04,0x11,0x0C,0x7F,0x03,0x11,0x0C,0x00,0x03,0x10,0x0D,0x00,0x02,0x0F,0x0E,0x01,
|
||||
0x01,0x0F,0x0F,0x01,0x01,0x0E,0x0F,0x02,0x00,0x0D,0x10,0x03,0x7F,0x0C,0x11,0x04,
|
||||
0x7F,0x0C,0x11,0x04,0x7F,0x0B,0x11,0x05,0x7E,0x0A,0x12,0x06,0x7E,0x09,0x12,0x07,
|
||||
0x40,0x02,
|
||||
0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
|
||||
0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
|
||||
0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
|
||||
0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
|
||||
0xFF,0xFF
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_5[] = { /* 750p */
|
||||
0x00,0x03,
|
||||
0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
|
||||
0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
|
||||
0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
|
||||
0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
|
||||
0xFF,0xFF
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_6[] = { /* 1080i */
|
||||
0x00,0x04,
|
||||
0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
|
||||
0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
|
||||
0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
|
||||
0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
|
||||
0xFF,0xFF,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
/* 661 et al LCD data structure (2.03.00) */
|
||||
static const unsigned char SiS_LCDStruct661[] = {
|
||||
/* 1024x768 */
|
||||
/* type|CR37| HDE | VDE | HT | VT | hss | hse */
|
||||
0x02,0xC0,0x00,0x04,0x00,0x03,0x40,0x05,0x26,0x03,0x10,0x00,0x88,
|
||||
0x00,0x02,0x00,0x06,0x00,0x41,0x5A,0x64,0x00,0x00,0x00,0x00,0x04,
|
||||
/* | vss | vse |clck| clock |CRT2DataP|CRT2DataP|idx */
|
||||
/* VESA non-VESA noscale */
|
||||
/* 1280x1024 */
|
||||
0x03,0xC0,0x00,0x05,0x00,0x04,0x98,0x06,0x2A,0x04,0x30,0x00,0x70,
|
||||
0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x08,
|
||||
/* 1400x1050 */
|
||||
0x09,0x20,0x78,0x05,0x1A,0x04,0x98,0x06,0x2A,0x04,0x18,0x00,0x38,
|
||||
0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x09,
|
||||
/* 1600x1200 */
|
||||
0x0B,0xE0,0x40,0x06,0xB0,0x04,0x70,0x08,0xE2,0x04,0x40,0x00,0xC0,
|
||||
0x00,0x01,0x00,0x03,0x00,0xA2,0x70,0x24,0x00,0x00,0x00,0x00,0x0A,
|
||||
/* 1280x768 (_2) */
|
||||
0x0A,0xE0,0x00,0x05,0x00,0x03,0x7C,0x06,0x26,0x03,0x30,0x00,0x70,
|
||||
0x00,0x03,0x00,0x06,0x00,0x4D,0xC8,0x48,0x00,0x00,0x00,0x00,0x06,
|
||||
/* 1280x720 */
|
||||
0x0E,0xE0,0x00,0x05,0xD0,0x02,0x80,0x05,0x26,0x03,0x10,0x00,0x20,
|
||||
0x00,0x01,0x00,0x06,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x05,
|
||||
/* 1280x800 (_2) */
|
||||
0x0C,0xE0,0x00,0x05,0x20,0x03,0x10,0x06,0x2C,0x03,0x30,0x00,0x70,
|
||||
0x00,0x04,0x00,0x03,0x00,0x49,0xCE,0x1E,0x00,0x00,0x00,0x00,0x09,
|
||||
/* 1680x1050 */
|
||||
0x0D,0xE0,0x90,0x06,0x1A,0x04,0x6C,0x07,0x2A,0x04,0x1A,0x00,0x4C,
|
||||
0x00,0x03,0x00,0x06,0x00,0x79,0xBE,0x44,0x00,0x00,0x00,0x00,0x06,
|
||||
/* 1280x800_3 */
|
||||
0x0C,0xE0,0x00,0x05,0x20,0x03,0xAA,0x05,0x2E,0x03,0x30,0x00,0x50,
|
||||
0x00,0x04,0x00,0x03,0x00,0x47,0xA9,0x10,0x00,0x00,0x00,0x00,0x07,
|
||||
/* 800x600 */
|
||||
0x01,0xC0,0x20,0x03,0x58,0x02,0x20,0x04,0x74,0x02,0x2A,0x00,0x80,
|
||||
0x00,0x06,0x00,0x04,0x00,0x28,0x63,0x4B,0x00,0x00,0x00,0x00,0x00,
|
||||
/* 1280x854 */
|
||||
0x08,0xE0,0x00,0x05,0x56,0x03,0x80,0x06,0x5d,0x03,0x10,0x00,0x70,
|
||||
0x00,0x01,0x00,0x03,0x00,0x54,0x75,0x13,0x00,0x00,0x00,0x00,0x08
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
static unsigned char SiS300_TrumpionData[14][80] = {
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x0B,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x10,0x00,0x00,0x04,0x23,
|
||||
0x00,0x00,0x03,0x28,0x03,0x10,0x05,0x08,0x40,0x10,0x00,0x10,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xBC,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x09,0x04,0x04,0x05,
|
||||
0x04,0x0C,0x09,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5A,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x27,0x00,0x80,0x02,
|
||||
0x20,0x03,0x07,0x00,0x5E,0x01,0x0D,0x02,0x60,0x0C,0x30,0x11,0x00,0x00,0x04,0x23,
|
||||
0x00,0x00,0x03,0x80,0x03,0x28,0x06,0x08,0x40,0x11,0x00,0x11,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0x90,0x01,0xFF,0x0F,0xF4,0x19,0x01,0x00,0x05,0x01,0x00,0x04,0x05,
|
||||
0x04,0x0C,0x02,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEC,0x57,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
|
||||
0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
|
||||
0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xD9,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
|
||||
0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x59,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
|
||||
0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
|
||||
0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
|
||||
0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
|
||||
0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
|
||||
0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
|
||||
0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
|
||||
0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
|
||||
0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
|
||||
0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
|
||||
0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
|
||||
/* variant 2 */
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
|
||||
0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
|
||||
0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
|
||||
0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
|
||||
0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
|
||||
0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
|
||||
0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
|
||||
0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
|
||||
0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
|
||||
0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
|
||||
0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
|
||||
0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
|
||||
0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
|
||||
0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
|
||||
0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
|
||||
0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 }
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
static void SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr);
|
||||
static void SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr);
|
||||
static void SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr);
|
||||
static void SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr);
|
||||
#endif /* 315 */
|
||||
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
static bool SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr);
|
||||
#endif
|
||||
|
||||
static unsigned short SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
|
||||
int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
|
||||
bool checkcr32, unsigned int VBFlags2);
|
||||
static unsigned short SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
|
||||
unsigned char *buffer);
|
||||
static void SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_SetStart(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_SetStop(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_SetSCLKLow(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax);
|
||||
static unsigned short SiS_CheckACK(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_WriteDABDDC(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_PrepareDDC(struct SiS_Private *SiS_Pr);
|
||||
static void SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno);
|
||||
static unsigned short SiS_DoProbeDDC(struct SiS_Private *SiS_Pr);
|
||||
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
static void SiS_OEM300Setting(struct SiS_Private *SiS_Pr,
|
||||
unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefTabindex);
|
||||
static void SetOEMLCDData2(struct SiS_Private *SiS_Pr,
|
||||
unsigned short ModeNo, unsigned short ModeIdIndex,unsigned short RefTableIndex);
|
||||
#endif
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
static void SiS_OEM310Setting(struct SiS_Private *SiS_Pr,
|
||||
unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
|
||||
static void SiS_OEM661Setting(struct SiS_Private *SiS_Pr,
|
||||
unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
|
||||
static void SiS_FinalizeLCD(struct SiS_Private *, unsigned short, unsigned short);
|
||||
#endif
|
||||
|
||||
static unsigned short SiS_GetBIOSLCDResInfo(struct SiS_Private *SiS_Pr);
|
||||
static void SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
|
||||
|
||||
|
|
|
@ -66,287 +66,6 @@
|
|||
#include "sis.h"
|
||||
#include <video/sisfb.h>
|
||||
|
||||
static const unsigned char SiS_YPbPrTable[3][64] = {
|
||||
{
|
||||
0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
|
||||
0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
|
||||
0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
|
||||
0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
|
||||
0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
|
||||
0x03,0x0a,0x65,0x9d /*0x8d*/,0x08,0x92,0x8f,0x40,
|
||||
0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x53 /*0x50*/,
|
||||
0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
|
||||
},
|
||||
{
|
||||
0x33,0x06,0x06,0x09,0x0b,0x0c,0x0c,0x0c,
|
||||
0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
|
||||
0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
|
||||
0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4f,0x13,
|
||||
0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
|
||||
0x51,0x5e,0x60,0x49,0x7d,0x92,0x0f,0x40,
|
||||
0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4e,
|
||||
0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
|
||||
},
|
||||
{
|
||||
#if 0 /* OK, but sticks to left edge */
|
||||
0x13,0x1d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
|
||||
0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
|
||||
0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
|
||||
0xed,0x50,0x70,0x9f,0x16,0x59,0x21 /*0x2b*/,0x13,
|
||||
0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
|
||||
0x4b,0x4b,0x65 /*0x6f*/,0x2f,0x63,0x92,0x0f,0x40,
|
||||
0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x27,
|
||||
0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
|
||||
#endif
|
||||
#if 1 /* Perfect */
|
||||
0x23,0x2d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
|
||||
0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
|
||||
0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
|
||||
0xed,0x50,0x70,0x9f,0x16,0x59,0x60,0x13,
|
||||
0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
|
||||
0x4b,0x4b,0x6f,0x2f,0x63,0x92,0x0f,0x40,
|
||||
0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x73,
|
||||
0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
static const unsigned char SiS_TVPhase[] =
|
||||
{
|
||||
0x21,0xED,0xBA,0x08, /* 0x00 SiS_NTSCPhase */
|
||||
0x2A,0x05,0xE3,0x00, /* 0x01 SiS_PALPhase */
|
||||
0x21,0xE4,0x2E,0x9B, /* 0x02 SiS_PALMPhase */
|
||||
0x21,0xF4,0x3E,0xBA, /* 0x03 SiS_PALNPhase */
|
||||
0x1E,0x8B,0xA2,0xA7,
|
||||
0x1E,0x83,0x0A,0xE0, /* 0x05 SiS_SpecialPhaseM */
|
||||
0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,
|
||||
0x21,0xF0,0x7B,0xD6, /* 0x08 SiS_NTSCPhase2 */
|
||||
0x2A,0x09,0x86,0xE9, /* 0x09 SiS_PALPhase2 */
|
||||
0x21,0xE6,0xEF,0xA4, /* 0x0a SiS_PALMPhase2 */
|
||||
0x21,0xF6,0x94,0x46, /* 0x0b SiS_PALNPhase2 */
|
||||
0x1E,0x8B,0xA2,0xA7,
|
||||
0x1E,0x83,0x0A,0xE0, /* 0x0d SiS_SpecialPhaseM */
|
||||
0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,
|
||||
0x1e,0x8c,0x5c,0x7a, /* 0x10 SiS_SpecialPhase */
|
||||
0x25,0xd4,0xfd,0x5e /* 0x11 SiS_SpecialPhaseJ */
|
||||
};
|
||||
|
||||
static const unsigned char SiS_HiTVGroup3_1[] = {
|
||||
0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
|
||||
0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
|
||||
0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
|
||||
0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
|
||||
0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
|
||||
0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
|
||||
0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
|
||||
0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
|
||||
};
|
||||
|
||||
static const unsigned char SiS_HiTVGroup3_2[] = {
|
||||
0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
|
||||
0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
|
||||
0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
|
||||
0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
|
||||
0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
|
||||
0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
|
||||
0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
|
||||
0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
|
||||
};
|
||||
|
||||
/* 301C / 302ELV extended Part2 TV registers (4 tap scaler) */
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_1[] = {
|
||||
0x00,0x00,
|
||||
0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
|
||||
0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
|
||||
0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
|
||||
0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_2[] = {
|
||||
0x00,0x00,
|
||||
0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
|
||||
0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
|
||||
0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
|
||||
0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_3[] = { /* NTSC, 525i, 525p */
|
||||
0xE0,0x01,
|
||||
0x04,0x1A,0x04,0x7E,0x03,0x1A,0x06,0x7D,0x01,0x1A,0x08,0x7D,0x00,0x19,0x0A,0x7D,
|
||||
0x7F,0x19,0x0C,0x7C,0x7E,0x18,0x0E,0x7C,0x7E,0x17,0x10,0x7B,0x7D,0x15,0x12,0x7C,
|
||||
0x7D,0x13,0x13,0x7D,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0E,0x18,0x7E,
|
||||
0x7D,0x0C,0x19,0x7E,0x7D,0x0A,0x19,0x00,0x7D,0x08,0x1A,0x01,0x7E,0x06,0x1A,0x02,
|
||||
0x58,0x02,
|
||||
0x07,0x14,0x07,0x7E,0x06,0x14,0x09,0x7D,0x05,0x14,0x0A,0x7D,0x04,0x13,0x0B,0x7E,
|
||||
0x03,0x13,0x0C,0x7E,0x02,0x12,0x0D,0x7F,0x01,0x12,0x0E,0x7F,0x01,0x11,0x0F,0x7F,
|
||||
0x00,0x10,0x10,0x00,0x7F,0x0F,0x11,0x01,0x7F,0x0E,0x12,0x01,0x7E,0x0D,0x12,0x03,
|
||||
0x7E,0x0C,0x13,0x03,0x7E,0x0B,0x13,0x04,0x7E,0x0A,0x14,0x04,0x7D,0x09,0x14,0x06,
|
||||
0x00,0x03,
|
||||
0x09,0x0F,0x09,0x7F,0x08,0x0F,0x09,0x00,0x07,0x0F,0x0A,0x00,0x06,0x0F,0x0A,0x01,
|
||||
0x06,0x0E,0x0B,0x01,0x05,0x0E,0x0B,0x02,0x04,0x0E,0x0C,0x02,0x04,0x0D,0x0C,0x03,
|
||||
0x03,0x0D,0x0D,0x03,0x02,0x0C,0x0D,0x05,0x02,0x0C,0x0E,0x04,0x01,0x0B,0x0E,0x06,
|
||||
0x01,0x0B,0x0E,0x06,0x00,0x0A,0x0F,0x07,0x00,0x0A,0x0F,0x07,0x00,0x09,0x0F,0x08,
|
||||
0xFF,0xFF
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_4[] = { /* PAL */
|
||||
0x58,0x02,
|
||||
0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
|
||||
0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
|
||||
0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
|
||||
0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
|
||||
0x00,0x03,
|
||||
0x08,0x12,0x08,0x7E,0x07,0x12,0x09,0x7E,0x06,0x12,0x0A,0x7E,0x05,0x11,0x0B,0x7F,
|
||||
0x04,0x11,0x0C,0x7F,0x03,0x11,0x0C,0x00,0x03,0x10,0x0D,0x00,0x02,0x0F,0x0E,0x01,
|
||||
0x01,0x0F,0x0F,0x01,0x01,0x0E,0x0F,0x02,0x00,0x0D,0x10,0x03,0x7F,0x0C,0x11,0x04,
|
||||
0x7F,0x0C,0x11,0x04,0x7F,0x0B,0x11,0x05,0x7E,0x0A,0x12,0x06,0x7E,0x09,0x12,0x07,
|
||||
0x40,0x02,
|
||||
0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
|
||||
0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
|
||||
0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
|
||||
0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
|
||||
0xFF,0xFF
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_5[] = { /* 750p */
|
||||
0x00,0x03,
|
||||
0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
|
||||
0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
|
||||
0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
|
||||
0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
|
||||
0xFF,0xFF
|
||||
};
|
||||
|
||||
static const unsigned char SiS_Part2CLVX_6[] = { /* 1080i */
|
||||
0x00,0x04,
|
||||
0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
|
||||
0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
|
||||
0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
|
||||
0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
|
||||
0xFF,0xFF,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
/* 661 et al LCD data structure (2.03.00) */
|
||||
static const unsigned char SiS_LCDStruct661[] = {
|
||||
/* 1024x768 */
|
||||
/* type|CR37| HDE | VDE | HT | VT | hss | hse */
|
||||
0x02,0xC0,0x00,0x04,0x00,0x03,0x40,0x05,0x26,0x03,0x10,0x00,0x88,
|
||||
0x00,0x02,0x00,0x06,0x00,0x41,0x5A,0x64,0x00,0x00,0x00,0x00,0x04,
|
||||
/* | vss | vse |clck| clock |CRT2DataP|CRT2DataP|idx */
|
||||
/* VESA non-VESA noscale */
|
||||
/* 1280x1024 */
|
||||
0x03,0xC0,0x00,0x05,0x00,0x04,0x98,0x06,0x2A,0x04,0x30,0x00,0x70,
|
||||
0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x08,
|
||||
/* 1400x1050 */
|
||||
0x09,0x20,0x78,0x05,0x1A,0x04,0x98,0x06,0x2A,0x04,0x18,0x00,0x38,
|
||||
0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x09,
|
||||
/* 1600x1200 */
|
||||
0x0B,0xE0,0x40,0x06,0xB0,0x04,0x70,0x08,0xE2,0x04,0x40,0x00,0xC0,
|
||||
0x00,0x01,0x00,0x03,0x00,0xA2,0x70,0x24,0x00,0x00,0x00,0x00,0x0A,
|
||||
/* 1280x768 (_2) */
|
||||
0x0A,0xE0,0x00,0x05,0x00,0x03,0x7C,0x06,0x26,0x03,0x30,0x00,0x70,
|
||||
0x00,0x03,0x00,0x06,0x00,0x4D,0xC8,0x48,0x00,0x00,0x00,0x00,0x06,
|
||||
/* 1280x720 */
|
||||
0x0E,0xE0,0x00,0x05,0xD0,0x02,0x80,0x05,0x26,0x03,0x10,0x00,0x20,
|
||||
0x00,0x01,0x00,0x06,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x05,
|
||||
/* 1280x800 (_2) */
|
||||
0x0C,0xE0,0x00,0x05,0x20,0x03,0x10,0x06,0x2C,0x03,0x30,0x00,0x70,
|
||||
0x00,0x04,0x00,0x03,0x00,0x49,0xCE,0x1E,0x00,0x00,0x00,0x00,0x09,
|
||||
/* 1680x1050 */
|
||||
0x0D,0xE0,0x90,0x06,0x1A,0x04,0x6C,0x07,0x2A,0x04,0x1A,0x00,0x4C,
|
||||
0x00,0x03,0x00,0x06,0x00,0x79,0xBE,0x44,0x00,0x00,0x00,0x00,0x06,
|
||||
/* 1280x800_3 */
|
||||
0x0C,0xE0,0x00,0x05,0x20,0x03,0xAA,0x05,0x2E,0x03,0x30,0x00,0x50,
|
||||
0x00,0x04,0x00,0x03,0x00,0x47,0xA9,0x10,0x00,0x00,0x00,0x00,0x07,
|
||||
/* 800x600 */
|
||||
0x01,0xC0,0x20,0x03,0x58,0x02,0x20,0x04,0x74,0x02,0x2A,0x00,0x80,
|
||||
0x00,0x06,0x00,0x04,0x00,0x28,0x63,0x4B,0x00,0x00,0x00,0x00,0x00,
|
||||
/* 1280x854 */
|
||||
0x08,0xE0,0x00,0x05,0x56,0x03,0x80,0x06,0x5d,0x03,0x10,0x00,0x70,
|
||||
0x00,0x01,0x00,0x03,0x00,0x54,0x75,0x13,0x00,0x00,0x00,0x00,0x08
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
static unsigned char SiS300_TrumpionData[14][80] = {
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x0B,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x10,0x00,0x00,0x04,0x23,
|
||||
0x00,0x00,0x03,0x28,0x03,0x10,0x05,0x08,0x40,0x10,0x00,0x10,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xBC,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x09,0x04,0x04,0x05,
|
||||
0x04,0x0C,0x09,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5A,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x27,0x00,0x80,0x02,
|
||||
0x20,0x03,0x07,0x00,0x5E,0x01,0x0D,0x02,0x60,0x0C,0x30,0x11,0x00,0x00,0x04,0x23,
|
||||
0x00,0x00,0x03,0x80,0x03,0x28,0x06,0x08,0x40,0x11,0x00,0x11,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0x90,0x01,0xFF,0x0F,0xF4,0x19,0x01,0x00,0x05,0x01,0x00,0x04,0x05,
|
||||
0x04,0x0C,0x02,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEC,0x57,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
|
||||
0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
|
||||
0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xD9,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
|
||||
0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x59,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
|
||||
0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
|
||||
0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
|
||||
0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
|
||||
0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
|
||||
0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
|
||||
0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
|
||||
0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
|
||||
0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
|
||||
0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
|
||||
0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
|
||||
/* variant 2 */
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
|
||||
0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
|
||||
0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
|
||||
0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
|
||||
0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
|
||||
0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
|
||||
0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
|
||||
0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
|
||||
0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
|
||||
0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
|
||||
0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
|
||||
0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
|
||||
0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
|
||||
0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
|
||||
0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
|
||||
{ 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
|
||||
0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
|
||||
0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
|
||||
0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
|
||||
0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 }
|
||||
};
|
||||
#endif
|
||||
|
||||
void SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
|
||||
void SiS_EnableCRT2(struct SiS_Private *SiS_Pr);
|
||||
unsigned short SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
|
||||
|
@ -375,16 +94,11 @@ unsigned short SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempax);
|
|||
void SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
|
||||
unsigned char orval,unsigned short andval);
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
static void SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr);
|
||||
static void SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr);
|
||||
static void SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr);
|
||||
static void SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr);
|
||||
void SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr);
|
||||
void SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr);
|
||||
#endif /* 315 */
|
||||
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
static bool SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr);
|
||||
void SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo);
|
||||
#endif
|
||||
|
||||
|
@ -394,40 +108,6 @@ unsigned short SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, i
|
|||
unsigned short adaptnum, unsigned short DDCdatatype,
|
||||
unsigned char *buffer, unsigned int VBFlags2);
|
||||
|
||||
static unsigned short SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
|
||||
int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
|
||||
bool checkcr32, unsigned int VBFlags2);
|
||||
static unsigned short SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
|
||||
unsigned char *buffer);
|
||||
static void SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_SetStart(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_SetStop(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_SetSCLKLow(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax);
|
||||
static unsigned short SiS_CheckACK(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_WriteDABDDC(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr);
|
||||
static unsigned short SiS_PrepareDDC(struct SiS_Private *SiS_Pr);
|
||||
static void SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno);
|
||||
static unsigned short SiS_DoProbeDDC(struct SiS_Private *SiS_Pr);
|
||||
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
static void SiS_OEM300Setting(struct SiS_Private *SiS_Pr,
|
||||
unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefTabindex);
|
||||
static void SetOEMLCDData2(struct SiS_Private *SiS_Pr,
|
||||
unsigned short ModeNo, unsigned short ModeIdIndex,unsigned short RefTableIndex);
|
||||
#endif
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
static void SiS_OEM310Setting(struct SiS_Private *SiS_Pr,
|
||||
unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
|
||||
static void SiS_OEM661Setting(struct SiS_Private *SiS_Pr,
|
||||
unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
|
||||
static void SiS_FinalizeLCD(struct SiS_Private *, unsigned short, unsigned short);
|
||||
#endif
|
||||
|
||||
extern void SiS_DisplayOff(struct SiS_Private *SiS_Pr);
|
||||
extern void SiS_DisplayOn(struct SiS_Private *SiS_Pr);
|
||||
extern bool SiS_SearchModeID(struct SiS_Private *, unsigned short *, unsigned short *);
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
#include "vgatypes.h"
|
||||
#include "vstruct.h"
|
||||
#include "init.h"
|
||||
|
||||
#define VER_MAJOR 1
|
||||
#define VER_MINOR 8
|
||||
|
@ -321,6 +322,85 @@ u8 SiS_GetRegByte(SISIOADDRESS);
|
|||
u16 SiS_GetRegShort(SISIOADDRESS);
|
||||
u32 SiS_GetRegLong(SISIOADDRESS);
|
||||
|
||||
/* Chrontel TV, DDC and DPMS functions */
|
||||
/* from init.c */
|
||||
bool SiSInitPtr(struct SiS_Private *SiS_Pr);
|
||||
unsigned short SiS_GetModeID_LCD(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, bool FSTN,
|
||||
unsigned short CustomT, int LCDwith, int LCDheight,
|
||||
unsigned int VBFlags2);
|
||||
unsigned short SiS_GetModeID_TV(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, unsigned int VBFlags2);
|
||||
unsigned short SiS_GetModeID_VGA2(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, unsigned int VBFlags2);
|
||||
|
||||
void SiS_DisplayOn(struct SiS_Private *SiS_Pr);
|
||||
void SiS_DisplayOff(struct SiS_Private *SiS_Pr);
|
||||
void SiSRegInit(struct SiS_Private *SiS_Pr, SISIOADDRESS BaseAddr);
|
||||
void SiS_SetEnableDstn(struct SiS_Private *SiS_Pr, int enable);
|
||||
void SiS_SetEnableFstn(struct SiS_Private *SiS_Pr, int enable);
|
||||
unsigned short SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
bool SiSDetermineROMLayout661(struct SiS_Private *SiS_Pr);
|
||||
|
||||
bool SiS_SearchModeID(struct SiS_Private *SiS_Pr, unsigned short *ModeNo,
|
||||
unsigned short *ModeIdIndex);
|
||||
unsigned short SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
unsigned short SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
|
||||
unsigned short SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
|
||||
unsigned short SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
unsigned short SiS_GetOffset(struct SiS_Private *SiS_Pr,unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex, unsigned short RRTI);
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
void SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *idx1,
|
||||
unsigned short *idx2);
|
||||
unsigned short SiS_GetFIFOThresholdB300(unsigned short idx1, unsigned short idx2);
|
||||
unsigned short SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
|
||||
#endif
|
||||
void SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
|
||||
bool SiSSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
|
||||
void SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
|
||||
void SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
void SiS_Generic_ConvertCRData(struct SiS_Private *SiS_Pr, unsigned char *crdata, int xres,
|
||||
int yres, struct fb_var_screeninfo *var, bool writeres);
|
||||
|
||||
/* From init301.c: */
|
||||
extern void SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex, int chkcrt2mode);
|
||||
extern void SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
extern void SiS_SetYPbPr(struct SiS_Private *SiS_Pr);
|
||||
extern void SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
extern void SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
|
||||
extern void SiS_DisableBridge(struct SiS_Private *);
|
||||
extern bool SiS_SetCRT2Group(struct SiS_Private *, unsigned short);
|
||||
extern unsigned short SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
extern void SiS_WaitRetrace1(struct SiS_Private *SiS_Pr);
|
||||
extern unsigned short SiS_GetResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex);
|
||||
extern unsigned short SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax);
|
||||
extern unsigned short SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
|
||||
unsigned short ModeIdIndex, unsigned short RRTI);
|
||||
extern bool SiS_IsVAMode(struct SiS_Private *);
|
||||
extern bool SiS_IsDualEdge(struct SiS_Private *);
|
||||
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
extern unsigned int sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
|
||||
extern void sisfb_write_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg,
|
||||
unsigned int val);
|
||||
#endif
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
extern void sisfb_write_nbridge_pci_byte(struct SiS_Private *SiS_Pr, int reg,
|
||||
unsigned char val);
|
||||
extern unsigned int sisfb_read_mio_pci_word(struct SiS_Private *SiS_Pr, int reg);
|
||||
#endif
|
||||
|
||||
|
||||
/* MMIO access macros */
|
||||
#define MMIO_IN8(base, offset) readb((base+offset))
|
||||
#define MMIO_IN16(base, offset) readw((base+offset))
|
||||
|
@ -583,4 +663,55 @@ struct sis_video_info {
|
|||
struct sis_video_info *next;
|
||||
};
|
||||
|
||||
/* from sis_accel.c */
|
||||
extern void fbcon_sis_fillrect(struct fb_info *info,
|
||||
const struct fb_fillrect *rect);
|
||||
extern void fbcon_sis_copyarea(struct fb_info *info,
|
||||
const struct fb_copyarea *area);
|
||||
extern int fbcon_sis_sync(struct fb_info *info);
|
||||
|
||||
/* Internal 2D accelerator functions */
|
||||
extern int sisfb_initaccel(struct sis_video_info *ivideo);
|
||||
extern void sisfb_syncaccel(struct sis_video_info *ivideo);
|
||||
|
||||
/* Internal general routines */
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
unsigned int sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
|
||||
void sisfb_write_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg, unsigned int val);
|
||||
unsigned int sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg);
|
||||
#endif
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
void sisfb_write_nbridge_pci_byte(struct SiS_Private *SiS_Pr, int reg, unsigned char val);
|
||||
unsigned int sisfb_read_mio_pci_word(struct SiS_Private *SiS_Pr, int reg);
|
||||
#endif
|
||||
|
||||
/* SiS-specific exported functions */
|
||||
void sis_malloc(struct sis_memreq *req);
|
||||
void sis_malloc_new(struct pci_dev *pdev, struct sis_memreq *req);
|
||||
void sis_free(u32 base);
|
||||
void sis_free_new(struct pci_dev *pdev, u32 base);
|
||||
|
||||
/* Routines from init.c/init301.c */
|
||||
extern unsigned short SiS_GetModeID_LCD(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, bool FSTN, unsigned short CustomT,
|
||||
int LCDwith, int LCDheight, unsigned int VBFlags2);
|
||||
extern unsigned short SiS_GetModeID_TV(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, unsigned int VBFlags2);
|
||||
extern unsigned short SiS_GetModeID_VGA2(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, unsigned int VBFlags2);
|
||||
extern void SiSRegInit(struct SiS_Private *SiS_Pr, SISIOADDRESS BaseAddr);
|
||||
extern bool SiSSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
|
||||
extern void SiS_SetEnableDstn(struct SiS_Private *SiS_Pr, int enable);
|
||||
extern void SiS_SetEnableFstn(struct SiS_Private *SiS_Pr, int enable);
|
||||
|
||||
extern bool SiSDetermineROMLayout661(struct SiS_Private *SiS_Pr);
|
||||
|
||||
extern bool sisfb_gettotalfrommode(struct SiS_Private *SiS_Pr, unsigned char modeno,
|
||||
int *htotal, int *vtotal, unsigned char rateindex);
|
||||
extern int sisfb_mode_rate_to_dclock(struct SiS_Private *SiS_Pr,
|
||||
unsigned char modeno, unsigned char rateindex);
|
||||
extern int sisfb_mode_rate_to_ddata(struct SiS_Private *SiS_Pr, unsigned char modeno,
|
||||
unsigned char rateindex, struct fb_var_screeninfo *var);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -56,15 +56,66 @@
|
|||
|
||||
#include "sis.h"
|
||||
#include "sis_main.h"
|
||||
#include "init301.h"
|
||||
|
||||
#if !defined(CONFIG_FB_SIS_300) && !defined(CONFIG_FB_SIS_315)
|
||||
#warning Neither CONFIG_FB_SIS_300 nor CONFIG_FB_SIS_315 is set
|
||||
#warning sisfb will not work!
|
||||
#endif
|
||||
|
||||
/* ---------------------- Prototypes ------------------------- */
|
||||
|
||||
/* Interface used by the world */
|
||||
#ifndef MODULE
|
||||
static int sisfb_setup(char *options);
|
||||
#endif
|
||||
|
||||
/* Interface to the low level console driver */
|
||||
static int sisfb_init(void);
|
||||
|
||||
/* fbdev routines */
|
||||
static int sisfb_get_fix(struct fb_fix_screeninfo *fix, int con,
|
||||
struct fb_info *info);
|
||||
|
||||
static int sisfb_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
static int sisfb_set_par(struct fb_info *info);
|
||||
static int sisfb_blank(int blank,
|
||||
struct fb_info *info);
|
||||
|
||||
static void sisfb_handle_command(struct sis_video_info *ivideo,
|
||||
struct sisfb_cmd *sisfb_command);
|
||||
|
||||
static void sisfb_search_mode(char *name, bool quiet);
|
||||
static int sisfb_validate_mode(struct sis_video_info *ivideo, int modeindex, u32 vbflags);
|
||||
static u8 sisfb_search_refresh_rate(struct sis_video_info *ivideo, unsigned int rate,
|
||||
int index);
|
||||
static int sisfb_setcolreg(unsigned regno, unsigned red, unsigned green,
|
||||
unsigned blue, unsigned transp,
|
||||
struct fb_info *fb_info);
|
||||
static int sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive,
|
||||
struct fb_info *info);
|
||||
static void sisfb_pre_setmode(struct sis_video_info *ivideo);
|
||||
static void sisfb_post_setmode(struct sis_video_info *ivideo);
|
||||
static bool sisfb_CheckVBRetrace(struct sis_video_info *ivideo);
|
||||
static bool sisfbcheckvretracecrt2(struct sis_video_info *ivideo);
|
||||
static bool sisfbcheckvretracecrt1(struct sis_video_info *ivideo);
|
||||
static bool sisfb_bridgeisslave(struct sis_video_info *ivideo);
|
||||
static void sisfb_detect_VB_connect(struct sis_video_info *ivideo);
|
||||
static void sisfb_get_VB_type(struct sis_video_info *ivideo);
|
||||
static void sisfb_set_TVxposoffset(struct sis_video_info *ivideo, int val);
|
||||
static void sisfb_set_TVyposoffset(struct sis_video_info *ivideo, int val);
|
||||
|
||||
/* Internal heap routines */
|
||||
static int sisfb_heap_init(struct sis_video_info *ivideo);
|
||||
static struct SIS_OH * sisfb_poh_new_node(struct SIS_HEAP *memheap);
|
||||
static struct SIS_OH * sisfb_poh_allocate(struct SIS_HEAP *memheap, u32 size);
|
||||
static void sisfb_delete_node(struct SIS_OH *poh);
|
||||
static void sisfb_insert_node(struct SIS_OH *pohList, struct SIS_OH *poh);
|
||||
static struct SIS_OH * sisfb_poh_free(struct SIS_HEAP *memheap, u32 base);
|
||||
static void sisfb_free_node(struct SIS_HEAP *memheap, struct SIS_OH *poh);
|
||||
|
||||
|
||||
/* ------------------ Internal helper routines ----------------- */
|
||||
|
||||
static void __init
|
||||
|
|
|
@ -661,121 +661,4 @@ static struct _customttable {
|
|||
}
|
||||
};
|
||||
|
||||
/* ---------------------- Prototypes ------------------------- */
|
||||
|
||||
/* Interface used by the world */
|
||||
#ifndef MODULE
|
||||
static int sisfb_setup(char *options);
|
||||
#endif
|
||||
|
||||
/* Interface to the low level console driver */
|
||||
static int sisfb_init(void);
|
||||
|
||||
/* fbdev routines */
|
||||
static int sisfb_get_fix(struct fb_fix_screeninfo *fix, int con,
|
||||
struct fb_info *info);
|
||||
|
||||
static int sisfb_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
static int sisfb_set_par(struct fb_info *info);
|
||||
static int sisfb_blank(int blank,
|
||||
struct fb_info *info);
|
||||
extern void fbcon_sis_fillrect(struct fb_info *info,
|
||||
const struct fb_fillrect *rect);
|
||||
extern void fbcon_sis_copyarea(struct fb_info *info,
|
||||
const struct fb_copyarea *area);
|
||||
extern int fbcon_sis_sync(struct fb_info *info);
|
||||
|
||||
/* Internal 2D accelerator functions */
|
||||
extern int sisfb_initaccel(struct sis_video_info *ivideo);
|
||||
extern void sisfb_syncaccel(struct sis_video_info *ivideo);
|
||||
|
||||
/* Internal general routines */
|
||||
static void sisfb_search_mode(char *name, bool quiet);
|
||||
static int sisfb_validate_mode(struct sis_video_info *ivideo, int modeindex, u32 vbflags);
|
||||
static u8 sisfb_search_refresh_rate(struct sis_video_info *ivideo, unsigned int rate,
|
||||
int index);
|
||||
static int sisfb_setcolreg(unsigned regno, unsigned red, unsigned green,
|
||||
unsigned blue, unsigned transp,
|
||||
struct fb_info *fb_info);
|
||||
static int sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive,
|
||||
struct fb_info *info);
|
||||
static void sisfb_pre_setmode(struct sis_video_info *ivideo);
|
||||
static void sisfb_post_setmode(struct sis_video_info *ivideo);
|
||||
static bool sisfb_CheckVBRetrace(struct sis_video_info *ivideo);
|
||||
static bool sisfbcheckvretracecrt2(struct sis_video_info *ivideo);
|
||||
static bool sisfbcheckvretracecrt1(struct sis_video_info *ivideo);
|
||||
static bool sisfb_bridgeisslave(struct sis_video_info *ivideo);
|
||||
static void sisfb_detect_VB_connect(struct sis_video_info *ivideo);
|
||||
static void sisfb_get_VB_type(struct sis_video_info *ivideo);
|
||||
static void sisfb_set_TVxposoffset(struct sis_video_info *ivideo, int val);
|
||||
static void sisfb_set_TVyposoffset(struct sis_video_info *ivideo, int val);
|
||||
#ifdef CONFIG_FB_SIS_300
|
||||
unsigned int sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
|
||||
void sisfb_write_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg, unsigned int val);
|
||||
unsigned int sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg);
|
||||
#endif
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
void sisfb_write_nbridge_pci_byte(struct SiS_Private *SiS_Pr, int reg, unsigned char val);
|
||||
unsigned int sisfb_read_mio_pci_word(struct SiS_Private *SiS_Pr, int reg);
|
||||
#endif
|
||||
|
||||
/* SiS-specific exported functions */
|
||||
void sis_malloc(struct sis_memreq *req);
|
||||
void sis_malloc_new(struct pci_dev *pdev, struct sis_memreq *req);
|
||||
void sis_free(u32 base);
|
||||
void sis_free_new(struct pci_dev *pdev, u32 base);
|
||||
|
||||
/* Internal heap routines */
|
||||
static int sisfb_heap_init(struct sis_video_info *ivideo);
|
||||
static struct SIS_OH * sisfb_poh_new_node(struct SIS_HEAP *memheap);
|
||||
static struct SIS_OH * sisfb_poh_allocate(struct SIS_HEAP *memheap, u32 size);
|
||||
static void sisfb_delete_node(struct SIS_OH *poh);
|
||||
static void sisfb_insert_node(struct SIS_OH *pohList, struct SIS_OH *poh);
|
||||
static struct SIS_OH * sisfb_poh_free(struct SIS_HEAP *memheap, u32 base);
|
||||
static void sisfb_free_node(struct SIS_HEAP *memheap, struct SIS_OH *poh);
|
||||
|
||||
/* Routines from init.c/init301.c */
|
||||
extern unsigned short SiS_GetModeID_LCD(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, bool FSTN, unsigned short CustomT,
|
||||
int LCDwith, int LCDheight, unsigned int VBFlags2);
|
||||
extern unsigned short SiS_GetModeID_TV(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, unsigned int VBFlags2);
|
||||
extern unsigned short SiS_GetModeID_VGA2(int VGAEngine, unsigned int VBFlags, int HDisplay,
|
||||
int VDisplay, int Depth, unsigned int VBFlags2);
|
||||
extern void SiSRegInit(struct SiS_Private *SiS_Pr, SISIOADDRESS BaseAddr);
|
||||
extern bool SiSSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
|
||||
extern void SiS_SetEnableDstn(struct SiS_Private *SiS_Pr, int enable);
|
||||
extern void SiS_SetEnableFstn(struct SiS_Private *SiS_Pr, int enable);
|
||||
|
||||
extern bool SiSDetermineROMLayout661(struct SiS_Private *SiS_Pr);
|
||||
|
||||
extern bool sisfb_gettotalfrommode(struct SiS_Private *SiS_Pr, unsigned char modeno,
|
||||
int *htotal, int *vtotal, unsigned char rateindex);
|
||||
extern int sisfb_mode_rate_to_dclock(struct SiS_Private *SiS_Pr,
|
||||
unsigned char modeno, unsigned char rateindex);
|
||||
extern int sisfb_mode_rate_to_ddata(struct SiS_Private *SiS_Pr, unsigned char modeno,
|
||||
unsigned char rateindex, struct fb_var_screeninfo *var);
|
||||
|
||||
/* Chrontel TV, DDC and DPMS functions */
|
||||
extern unsigned short SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg);
|
||||
extern void SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
|
||||
extern unsigned short SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg);
|
||||
extern void SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
|
||||
extern void SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
|
||||
unsigned char myor, unsigned char myand);
|
||||
extern void SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime);
|
||||
extern void SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo);
|
||||
extern unsigned short SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
|
||||
unsigned short adaptnum, unsigned short DDCdatatype, unsigned char *buffer,
|
||||
unsigned int VBFlags2);
|
||||
extern unsigned short SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr);
|
||||
#ifdef CONFIG_FB_SIS_315
|
||||
extern void SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr);
|
||||
extern void SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr);
|
||||
#endif
|
||||
extern void SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr);
|
||||
extern void SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr);
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -1293,7 +1293,6 @@ static struct fb_ops ufx_ops = {
|
|||
* Assumes no active clients have framebuffer open */
|
||||
static int ufx_realloc_framebuffer(struct ufx_data *dev, struct fb_info *info)
|
||||
{
|
||||
int retval = -ENOMEM;
|
||||
int old_len = info->fix.smem_len;
|
||||
int new_len;
|
||||
unsigned char *old_fb = info->screen_base;
|
||||
|
@ -1308,10 +1307,8 @@ static int ufx_realloc_framebuffer(struct ufx_data *dev, struct fb_info *info)
|
|||
* Alloc system memory for virtual framebuffer
|
||||
*/
|
||||
new_fb = vmalloc(new_len);
|
||||
if (!new_fb) {
|
||||
pr_err("Virtual framebuffer alloc failed");
|
||||
goto error;
|
||||
}
|
||||
if (!new_fb)
|
||||
return -ENOMEM;
|
||||
|
||||
if (info->screen_base) {
|
||||
memcpy(new_fb, old_fb, old_len);
|
||||
|
@ -1323,11 +1320,7 @@ static int ufx_realloc_framebuffer(struct ufx_data *dev, struct fb_info *info)
|
|||
info->fix.smem_start = (unsigned long) new_fb;
|
||||
info->flags = smscufx_info_flags;
|
||||
}
|
||||
|
||||
retval = 0;
|
||||
|
||||
error:
|
||||
return retval;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* sets up I2C Controller for 100 Kbps, std. speed, 7-bit addr, master,
|
||||
|
@ -1620,8 +1613,8 @@ static int ufx_usb_probe(struct usb_interface *interface,
|
|||
{
|
||||
struct usb_device *usbdev;
|
||||
struct ufx_data *dev;
|
||||
struct fb_info *info = NULL;
|
||||
int retval = -ENOMEM;
|
||||
struct fb_info *info;
|
||||
int retval;
|
||||
u32 id_rev, fpga_rev;
|
||||
|
||||
/* usb initialization */
|
||||
|
@ -1631,7 +1624,7 @@ static int ufx_usb_probe(struct usb_interface *interface,
|
|||
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
if (dev == NULL) {
|
||||
dev_err(&usbdev->dev, "ufx_usb_probe: failed alloc of dev struct\n");
|
||||
goto error;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* we need to wait for both usb and fbdev to spin down on disconnect */
|
||||
|
@ -1652,9 +1645,8 @@ static int ufx_usb_probe(struct usb_interface *interface,
|
|||
dev_dbg(dev->gdev, "fb_defio enable=%d\n", fb_defio);
|
||||
|
||||
if (!ufx_alloc_urb_list(dev, WRITES_IN_FLIGHT, MAX_TRANSFER)) {
|
||||
retval = -ENOMEM;
|
||||
dev_err(dev->gdev, "ufx_alloc_urb_list failed\n");
|
||||
goto error;
|
||||
goto e_nomem;
|
||||
}
|
||||
|
||||
/* We don't register a new USB class. Our client interface is fbdev */
|
||||
|
@ -1662,9 +1654,8 @@ static int ufx_usb_probe(struct usb_interface *interface,
|
|||
/* allocates framebuffer driver structure, not framebuffer memory */
|
||||
info = framebuffer_alloc(0, &usbdev->dev);
|
||||
if (!info) {
|
||||
retval = -ENOMEM;
|
||||
dev_err(dev->gdev, "framebuffer_alloc failed\n");
|
||||
goto error;
|
||||
goto e_nomem;
|
||||
}
|
||||
|
||||
dev->info = info;
|
||||
|
@ -1675,7 +1666,7 @@ static int ufx_usb_probe(struct usb_interface *interface,
|
|||
retval = fb_alloc_cmap(&info->cmap, 256, 0);
|
||||
if (retval < 0) {
|
||||
dev_err(dev->gdev, "fb_alloc_cmap failed %x\n", retval);
|
||||
goto error;
|
||||
goto destroy_modedb;
|
||||
}
|
||||
|
||||
INIT_DELAYED_WORK(&dev->free_framebuffer_work,
|
||||
|
@ -1736,26 +1727,20 @@ static int ufx_usb_probe(struct usb_interface *interface,
|
|||
return 0;
|
||||
|
||||
error:
|
||||
if (dev) {
|
||||
if (info) {
|
||||
if (info->cmap.len != 0)
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
if (info->monspecs.modedb)
|
||||
destroy_modedb:
|
||||
fb_destroy_modedb(info->monspecs.modedb);
|
||||
vfree(info->screen_base);
|
||||
|
||||
fb_destroy_modelist(&info->modelist);
|
||||
|
||||
framebuffer_release(info);
|
||||
}
|
||||
|
||||
put_ref:
|
||||
kref_put(&dev->kref, ufx_free); /* ref for framebuffer */
|
||||
kref_put(&dev->kref, ufx_free); /* last ref from kref_init */
|
||||
|
||||
/* dev has been deallocated. Do not dereference */
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
||||
e_nomem:
|
||||
retval = -ENOMEM;
|
||||
goto put_ref;
|
||||
}
|
||||
|
||||
static void ufx_usb_disconnect(struct usb_interface *interface)
|
||||
|
|
|
@ -628,7 +628,8 @@ static int ssd1307fb_probe(struct i2c_client *client,
|
|||
goto fb_alloc_error;
|
||||
}
|
||||
|
||||
ssd1307fb_defio = devm_kzalloc(&client->dev, sizeof(struct fb_deferred_io), GFP_KERNEL);
|
||||
ssd1307fb_defio = devm_kzalloc(&client->dev, sizeof(*ssd1307fb_defio),
|
||||
GFP_KERNEL);
|
||||
if (!ssd1307fb_defio) {
|
||||
dev_err(&client->dev, "Couldn't allocate deferred io.\n");
|
||||
ret = -ENOMEM;
|
||||
|
|
|
@ -1126,10 +1126,8 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
|
|||
int bpp, xres, yres;
|
||||
|
||||
fb = kzalloc(sizeof(*fb), GFP_ATOMIC);
|
||||
if (!fb) {
|
||||
printk(KERN_ERR "stifb: Could not allocate stifb structure\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
if (!fb)
|
||||
return -ENOMEM;
|
||||
|
||||
info = &fb->info;
|
||||
|
||||
|
|
|
@ -428,7 +428,6 @@ static void dlfb_compress_hline(
|
|||
const uint16_t *pixel = *pixel_start_ptr;
|
||||
uint32_t dev_addr = *device_address_ptr;
|
||||
uint8_t *cmd = *command_buffer_ptr;
|
||||
const int bpp = 2;
|
||||
|
||||
while ((pixel_end > pixel) &&
|
||||
(cmd_buffer_end - MIN_RLX_CMD_BYTES > cmd)) {
|
||||
|
@ -441,9 +440,9 @@ static void dlfb_compress_hline(
|
|||
|
||||
*cmd++ = 0xAF;
|
||||
*cmd++ = 0x6B;
|
||||
*cmd++ = (uint8_t) ((dev_addr >> 16) & 0xFF);
|
||||
*cmd++ = (uint8_t) ((dev_addr >> 8) & 0xFF);
|
||||
*cmd++ = (uint8_t) ((dev_addr) & 0xFF);
|
||||
*cmd++ = dev_addr >> 16;
|
||||
*cmd++ = dev_addr >> 8;
|
||||
*cmd++ = dev_addr;
|
||||
|
||||
cmd_pixels_count_byte = cmd++; /* we'll know this later */
|
||||
cmd_pixel_start = pixel;
|
||||
|
@ -453,15 +452,15 @@ static void dlfb_compress_hline(
|
|||
|
||||
cmd_pixel_end = pixel + min(MAX_CMD_PIXELS + 1,
|
||||
min((int)(pixel_end - pixel),
|
||||
(int)(cmd_buffer_end - cmd) / bpp));
|
||||
(int)(cmd_buffer_end - cmd) / BPP));
|
||||
|
||||
prefetch_range((void *) pixel, (cmd_pixel_end - pixel) * bpp);
|
||||
prefetch_range((void *) pixel, (cmd_pixel_end - pixel) * BPP);
|
||||
|
||||
while (pixel < cmd_pixel_end) {
|
||||
const uint16_t * const repeating_pixel = pixel;
|
||||
|
||||
*(uint16_t *)cmd = cpu_to_be16p(pixel);
|
||||
cmd += 2;
|
||||
*cmd++ = *pixel >> 8;
|
||||
*cmd++ = *pixel;
|
||||
pixel++;
|
||||
|
||||
if (unlikely((pixel < cmd_pixel_end) &&
|
||||
|
@ -490,7 +489,7 @@ static void dlfb_compress_hline(
|
|||
}
|
||||
|
||||
*cmd_pixels_count_byte = (pixel - cmd_pixel_start) & 0xFF;
|
||||
dev_addr += (pixel - cmd_pixel_start) * bpp;
|
||||
dev_addr += (pixel - cmd_pixel_start) * BPP;
|
||||
}
|
||||
|
||||
if (cmd_buffer_end <= MIN_RLX_CMD_BYTES + cmd) {
|
||||
|
@ -1136,7 +1135,6 @@ static struct fb_ops dlfb_ops = {
|
|||
*/
|
||||
static int dlfb_realloc_framebuffer(struct dlfb_data *dlfb, struct fb_info *info)
|
||||
{
|
||||
int retval = -ENOMEM;
|
||||
int old_len = info->fix.smem_len;
|
||||
int new_len;
|
||||
unsigned char *old_fb = info->screen_base;
|
||||
|
@ -1152,7 +1150,7 @@ static int dlfb_realloc_framebuffer(struct dlfb_data *dlfb, struct fb_info *info
|
|||
new_fb = vmalloc(new_len);
|
||||
if (!new_fb) {
|
||||
dev_err(info->dev, "Virtual framebuffer alloc failed\n");
|
||||
goto error;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (info->screen_base) {
|
||||
|
@ -1181,11 +1179,7 @@ static int dlfb_realloc_framebuffer(struct dlfb_data *dlfb, struct fb_info *info
|
|||
dlfb->backing_buffer = new_back;
|
||||
}
|
||||
}
|
||||
|
||||
retval = 0;
|
||||
|
||||
error:
|
||||
return retval;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1531,15 +1525,16 @@ static int dlfb_parse_vendor_descriptor(struct dlfb_data *dlfb,
|
|||
u8 length;
|
||||
u16 key;
|
||||
|
||||
key = le16_to_cpu(*((u16 *) desc));
|
||||
desc += sizeof(u16);
|
||||
length = *desc;
|
||||
desc++;
|
||||
key = *desc++;
|
||||
key |= (u16)*desc++ << 8;
|
||||
length = *desc++;
|
||||
|
||||
switch (key) {
|
||||
case 0x0200: { /* max_area */
|
||||
u32 max_area;
|
||||
max_area = le32_to_cpu(*((u32 *)desc));
|
||||
u32 max_area = *desc++;
|
||||
max_area |= (u32)*desc++ << 8;
|
||||
max_area |= (u32)*desc++ << 16;
|
||||
max_area |= (u32)*desc++ << 24;
|
||||
dev_warn(&intf->dev,
|
||||
"DL chip limited to %d pixel modes\n",
|
||||
max_area);
|
||||
|
|
|
@ -651,7 +651,7 @@ static int vmlfb_check_var_locked(struct fb_var_screeninfo *var,
|
|||
}
|
||||
|
||||
pitch = ALIGN((var->xres * var->bits_per_pixel) >> 3, 0x40);
|
||||
mem = pitch * var->yres_virtual;
|
||||
mem = (u64)pitch * var->yres_virtual;
|
||||
if (mem > vinfo->vram_contig_size) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ static void probe(struct via_aux_bus *bus, u8 addr)
|
|||
.name = name};
|
||||
/* check vendor id and device id */
|
||||
const u8 id[] = {0x01, 0x00, 0x06, 0x00}, len = ARRAY_SIZE(id);
|
||||
u8 tmp[len];
|
||||
u8 tmp[ARRAY_SIZE(id)];
|
||||
|
||||
if (!via_aux_read(&drv, 0x00, tmp, len) || memcmp(id, tmp, len))
|
||||
return;
|
||||
|
|
|
@ -36,7 +36,7 @@ void via_aux_vt1631_probe(struct via_aux_bus *bus)
|
|||
.name = name};
|
||||
/* check vendor id and device id */
|
||||
const u8 id[] = {0x06, 0x11, 0x91, 0x31}, len = ARRAY_SIZE(id);
|
||||
u8 tmp[len];
|
||||
u8 tmp[ARRAY_SIZE(id)];
|
||||
|
||||
if (!via_aux_read(&drv, 0x00, tmp, len) || memcmp(id, tmp, len))
|
||||
return;
|
||||
|
|
|
@ -36,7 +36,7 @@ static void probe(struct via_aux_bus *bus, u8 addr)
|
|||
.name = name};
|
||||
/* check vendor id and device id */
|
||||
const u8 id[] = {0x06, 0x11, 0x92, 0x31}, len = ARRAY_SIZE(id);
|
||||
u8 tmp[len];
|
||||
u8 tmp[ARRAY_SIZE(id)];
|
||||
|
||||
if (!via_aux_read(&drv, 0x00, tmp, len) || memcmp(id, tmp, len))
|
||||
return;
|
||||
|
|
|
@ -36,7 +36,7 @@ void via_aux_vt1636_probe(struct via_aux_bus *bus)
|
|||
.name = name};
|
||||
/* check vendor id and device id */
|
||||
const u8 id[] = {0x06, 0x11, 0x45, 0x33}, len = ARRAY_SIZE(id);
|
||||
u8 tmp[len];
|
||||
u8 tmp[ARRAY_SIZE(id)];
|
||||
|
||||
if (!via_aux_read(&drv, 0x00, tmp, len) || memcmp(id, tmp, len))
|
||||
return;
|
||||
|
|
|
@ -244,23 +244,3 @@ dispfail:
|
|||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(of_get_display_timings);
|
||||
|
||||
/**
|
||||
* of_display_timings_exist - check if a display-timings node is provided
|
||||
* @np: device_node with the timing
|
||||
**/
|
||||
int of_display_timings_exist(const struct device_node *np)
|
||||
{
|
||||
struct device_node *timings_np;
|
||||
|
||||
if (!np)
|
||||
return -EINVAL;
|
||||
|
||||
timings_np = of_parse_phandle(np, "display-timings", 0);
|
||||
if (!timings_np)
|
||||
return -EINVAL;
|
||||
|
||||
of_node_put(timings_np);
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(of_display_timings_exist);
|
||||
|
|
|
@ -19,7 +19,6 @@ struct display_timings;
|
|||
int of_get_display_timing(const struct device_node *np, const char *name,
|
||||
struct display_timing *dt);
|
||||
struct display_timings *of_get_display_timings(const struct device_node *np);
|
||||
int of_display_timings_exist(const struct device_node *np);
|
||||
#else
|
||||
static inline int of_get_display_timing(const struct device_node *np,
|
||||
const char *name, struct display_timing *dt)
|
||||
|
@ -31,10 +30,6 @@ of_get_display_timings(const struct device_node *np)
|
|||
{
|
||||
return NULL;
|
||||
}
|
||||
static inline int of_display_timings_exist(const struct device_node *np)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue