aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/via/viafbdev.c
diff options
context:
space:
mode:
authorFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2009-09-22 19:47:24 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-23 10:39:52 -0400
commitc4df5489e40e55f2962b9e8100ebc0d4d1374415 (patch)
treecaf6538a909b8578dd45f6dcbd45ed4a7281ef21 /drivers/video/via/viafbdev.c
parent68fa92082ffda84adcbae06fdd307fca53469c25 (diff)
viafb: improve viafb_par
This patch introduces viafb_shared and is the beginning of a smooth transition to use it. viafb_shared should contain all general, non-surface specific data that should be shared along all viafb framebuffers while viafb_par should only contain things that are specific to each surface or in other words extend fb_info. This change is intended to clean the dual/multi framebuffer handling up. This removes the annoyance that viafbinfo1->par points to a different structure than viaparinfo1. As the last change is fundamental it is difficult to ensure that all parts of the driver do not depend on the previous brokenness but the chance of regressions is very low. Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Cc: Scott Fang <ScottFang@viatech.com.cn> Cc: Joseph Chan <JosephChan@via.com.tw> Cc: Harald Welte <laforge@gnumonks.org> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video/via/viafbdev.c')
-rw-r--r--drivers/video/via/viafbdev.c35
1 files changed, 13 insertions, 22 deletions
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
index a17e138c92b3..4a8853a07602 100644
--- a/drivers/video/via/viafbdev.c
+++ b/drivers/video/via/viafbdev.c
@@ -1943,40 +1943,30 @@ static int __devinit via_pci_probe(void)
1943 char *tmpc, *tmpm; 1943 char *tmpc, *tmpm;
1944 char *tmpc_sec, *tmpm_sec; 1944 char *tmpc_sec, *tmpm_sec;
1945 int vmode_index; 1945 int vmode_index;
1946 u32 tmds_length, lvds_length, crt_length, chip_length, viafb_par_length; 1946 u32 viafb_par_length;
1947 1947
1948 DEBUG_MSG(KERN_INFO "VIAFB PCI Probe!!\n"); 1948 DEBUG_MSG(KERN_INFO "VIAFB PCI Probe!!\n");
1949 1949
1950 viafb_par_length = ALIGN(sizeof(struct viafb_par), BITS_PER_LONG/8); 1950 viafb_par_length = ALIGN(sizeof(struct viafb_par), BITS_PER_LONG/8);
1951 tmds_length = ALIGN(sizeof(struct tmds_setting_information),
1952 BITS_PER_LONG/8);
1953 lvds_length = ALIGN(sizeof(struct lvds_setting_information),
1954 BITS_PER_LONG/8);
1955 crt_length = ALIGN(sizeof(struct lvds_setting_information),
1956 BITS_PER_LONG/8);
1957 chip_length = ALIGN(sizeof(struct chip_information), BITS_PER_LONG/8);
1958 1951
1959 /* Allocate fb_info and ***_par here, also including some other needed 1952 /* Allocate fb_info and ***_par here, also including some other needed
1960 * variables 1953 * variables
1961 */ 1954 */
1962 viafbinfo = framebuffer_alloc(viafb_par_length + 2 * lvds_length + 1955 viafbinfo = framebuffer_alloc(viafb_par_length +
1963 tmds_length + crt_length + chip_length, NULL); 1956 ALIGN(sizeof(struct viafb_shared), BITS_PER_LONG/8), NULL);
1964 if (!viafbinfo) { 1957 if (!viafbinfo) {
1965 printk(KERN_ERR"Could not allocate memory for viafb_info.\n"); 1958 printk(KERN_ERR"Could not allocate memory for viafb_info.\n");
1966 return -ENODEV; 1959 return -ENODEV;
1967 } 1960 }
1968 1961
1969 viaparinfo = (struct viafb_par *)viafbinfo->par; 1962 viaparinfo = (struct viafb_par *)viafbinfo->par;
1970 viaparinfo->tmds_setting_info = (struct tmds_setting_information *) 1963 viaparinfo->shared = viafbinfo->par + viafb_par_length;
1971 ((unsigned long)viaparinfo + viafb_par_length); 1964 viaparinfo->tmds_setting_info = &viaparinfo->shared->tmds_setting_info;
1972 viaparinfo->lvds_setting_info = (struct lvds_setting_information *) 1965 viaparinfo->lvds_setting_info = &viaparinfo->shared->lvds_setting_info;
1973 ((unsigned long)viaparinfo->tmds_setting_info + tmds_length); 1966 viaparinfo->lvds_setting_info2 =
1974 viaparinfo->lvds_setting_info2 = (struct lvds_setting_information *) 1967 &viaparinfo->shared->lvds_setting_info2;
1975 ((unsigned long)viaparinfo->lvds_setting_info + lvds_length); 1968 viaparinfo->crt_setting_info = &viaparinfo->shared->crt_setting_info;
1976 viaparinfo->crt_setting_info = (struct crt_setting_information *) 1969 viaparinfo->chip_info = &viaparinfo->shared->chip_info;
1977 ((unsigned long)viaparinfo->lvds_setting_info2 + lvds_length);
1978 viaparinfo->chip_info = (struct chip_information *)
1979 ((unsigned long)viaparinfo->crt_setting_info + crt_length);
1980 1970
1981 if (viafb_dual_fb) 1971 if (viafb_dual_fb)
1982 viafb_SAMM_ON = 1; 1972 viafb_SAMM_ON = 1;
@@ -2142,6 +2132,7 @@ static int __devinit via_pci_probe(void)
2142 viaparinfo->iga_path = IGA1; 2132 viaparinfo->iga_path = IGA1;
2143 viaparinfo1->iga_path = IGA2; 2133 viaparinfo1->iga_path = IGA2;
2144 memcpy(viafbinfo1, viafbinfo, sizeof(struct fb_info)); 2134 memcpy(viafbinfo1, viafbinfo, sizeof(struct fb_info));
2135 viafbinfo1->par = viaparinfo1;
2145 viafbinfo1->screen_base = viafbinfo->screen_base + 2136 viafbinfo1->screen_base = viafbinfo->screen_base +
2146 viafb_second_offset; 2137 viafb_second_offset;
2147 2138
@@ -2193,7 +2184,7 @@ static int __devinit via_pci_probe(void)
2193 viafbinfo->node, viafbinfo->fix.id, default_var.xres, 2184 viafbinfo->node, viafbinfo->fix.id, default_var.xres,
2194 default_var.yres, default_var.bits_per_pixel); 2185 default_var.yres, default_var.bits_per_pixel);
2195 2186
2196 viafb_init_proc(&viaparinfo->proc_entry); 2187 viafb_init_proc(&viaparinfo->shared->proc_entry);
2197 viafb_init_dac(IGA2); 2188 viafb_init_dac(IGA2);
2198 return 0; 2189 return 0;
2199} 2190}
@@ -2214,7 +2205,7 @@ static void __devexit via_pci_remove(void)
2214 if (viafb_dual_fb) 2205 if (viafb_dual_fb)
2215 framebuffer_release(viafbinfo1); 2206 framebuffer_release(viafbinfo1);
2216 2207
2217 viafb_remove_proc(viaparinfo->proc_entry); 2208 viafb_remove_proc(viaparinfo->shared->proc_entry);
2218} 2209}
2219 2210
2220#ifndef MODULE 2211#ifndef MODULE