video: fbdev: controlfb: remove function prototypes part #2
Reorder code a bit and then remove no longer needed function prototypes. Acked-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200324134508.25120-6-b.zolnierkie@samsung.com
This commit is contained in:
parent
946e8fd4fb
commit
a57eb14ebb
|
@ -143,20 +143,12 @@ struct fb_info_control {
|
|||
|
||||
/******************** Prototypes for internal functions **********************/
|
||||
|
||||
static void set_control_clock(unsigned char *params);
|
||||
static int init_control(struct fb_info_control *p);
|
||||
static void control_set_hardware(struct fb_info_control *p,
|
||||
struct fb_par_control *par);
|
||||
static int control_of_init(struct device_node *dp);
|
||||
static void find_vram_size(struct fb_info_control *p);
|
||||
static int read_control_sense(struct fb_info_control *p);
|
||||
static int calc_clock_params(unsigned long clk, unsigned char *param);
|
||||
static int control_var_to_par(struct fb_var_screeninfo *var,
|
||||
struct fb_par_control *par, const struct fb_info *fb_info);
|
||||
static void control_par_to_var(struct fb_par_control *par,
|
||||
struct fb_var_screeninfo *var);
|
||||
static void control_init_info(struct fb_info *info, struct fb_info_control *p);
|
||||
static void control_cleanup(void);
|
||||
|
||||
|
||||
/************************** Internal variables *******************************/
|
||||
|
@ -370,77 +362,6 @@ static void set_control_clock(unsigned char *params)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* finish off the driver initialization and register
|
||||
*/
|
||||
static int __init init_control(struct fb_info_control *p)
|
||||
{
|
||||
int full, sense, vmode, cmode, vyres;
|
||||
struct fb_var_screeninfo var;
|
||||
int rc;
|
||||
|
||||
printk(KERN_INFO "controlfb: ");
|
||||
|
||||
full = p->total_vram == 0x400000;
|
||||
|
||||
/* Try to pick a video mode out of NVRAM if we have one. */
|
||||
cmode = default_cmode;
|
||||
if (IS_REACHABLE(CONFIG_NVRAM) && cmode == CMODE_NVRAM)
|
||||
cmode = nvram_read_byte(NV_CMODE);
|
||||
if (cmode < CMODE_8 || cmode > CMODE_32)
|
||||
cmode = CMODE_8;
|
||||
|
||||
vmode = default_vmode;
|
||||
if (IS_REACHABLE(CONFIG_NVRAM) && vmode == VMODE_NVRAM)
|
||||
vmode = nvram_read_byte(NV_VMODE);
|
||||
if (vmode < 1 || vmode > VMODE_MAX ||
|
||||
control_mac_modes[vmode - 1].m[full] < cmode) {
|
||||
sense = read_control_sense(p);
|
||||
printk(KERN_CONT "Monitor sense value = 0x%x, ", sense);
|
||||
vmode = mac_map_monitor_sense(sense);
|
||||
if (control_mac_modes[vmode - 1].m[full] < 0)
|
||||
vmode = VMODE_640_480_60;
|
||||
cmode = min(cmode, control_mac_modes[vmode - 1].m[full]);
|
||||
}
|
||||
|
||||
/* Initialize info structure */
|
||||
control_init_info(&p->info, p);
|
||||
|
||||
/* Setup default var */
|
||||
if (mac_vmode_to_var(vmode, cmode, &var) < 0) {
|
||||
/* This shouldn't happen! */
|
||||
printk("mac_vmode_to_var(%d, %d,) failed\n", vmode, cmode);
|
||||
try_again:
|
||||
vmode = VMODE_640_480_60;
|
||||
cmode = CMODE_8;
|
||||
if (mac_vmode_to_var(vmode, cmode, &var) < 0) {
|
||||
printk(KERN_ERR "controlfb: mac_vmode_to_var() failed\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
printk(KERN_INFO "controlfb: ");
|
||||
}
|
||||
printk("using video mode %d and color mode %d.\n", vmode, cmode);
|
||||
|
||||
vyres = (p->total_vram - CTRLFB_OFF) / (var.xres << cmode);
|
||||
if (vyres > var.yres)
|
||||
var.yres_virtual = vyres;
|
||||
|
||||
/* Apply default var */
|
||||
var.activate = FB_ACTIVATE_NOW;
|
||||
rc = fb_set_var(&p->info, &var);
|
||||
if (rc && (vmode != VMODE_640_480_60 || cmode != CMODE_8))
|
||||
goto try_again;
|
||||
|
||||
/* Register with fbdev layer */
|
||||
if (register_framebuffer(&p->info) < 0)
|
||||
return -ENXIO;
|
||||
|
||||
fb_info(&p->info, "control display adapter\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define RADACAL_WRITE(a,d) \
|
||||
out_8(&p->cmap_regs->addr, (a)); \
|
||||
out_8(&p->cmap_regs->dat, (d))
|
||||
|
@ -502,67 +423,6 @@ static void control_set_hardware(struct fb_info_control *p, struct fb_par_contro
|
|||
#endif /* CONFIG_BOOTX_TEXT */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Parse user specified options (`video=controlfb:')
|
||||
*/
|
||||
static void __init control_setup(char *options)
|
||||
{
|
||||
char *this_opt;
|
||||
|
||||
if (!options || !*options)
|
||||
return;
|
||||
|
||||
while ((this_opt = strsep(&options, ",")) != NULL) {
|
||||
if (!strncmp(this_opt, "vmode:", 6)) {
|
||||
int vmode = simple_strtoul(this_opt+6, NULL, 0);
|
||||
if (vmode > 0 && vmode <= VMODE_MAX &&
|
||||
control_mac_modes[vmode - 1].m[1] >= 0)
|
||||
default_vmode = vmode;
|
||||
} else if (!strncmp(this_opt, "cmode:", 6)) {
|
||||
int depth = simple_strtoul(this_opt+6, NULL, 0);
|
||||
switch (depth) {
|
||||
case CMODE_8:
|
||||
case CMODE_16:
|
||||
case CMODE_32:
|
||||
default_cmode = depth;
|
||||
break;
|
||||
case 8:
|
||||
default_cmode = CMODE_8;
|
||||
break;
|
||||
case 15:
|
||||
case 16:
|
||||
default_cmode = CMODE_16;
|
||||
break;
|
||||
case 24:
|
||||
case 32:
|
||||
default_cmode = CMODE_32;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int __init control_init(void)
|
||||
{
|
||||
struct device_node *dp;
|
||||
char *option = NULL;
|
||||
int ret = -ENXIO;
|
||||
|
||||
if (fb_get_options("controlfb", &option))
|
||||
return -ENODEV;
|
||||
control_setup(option);
|
||||
|
||||
dp = of_find_node_by_name(NULL, "control");
|
||||
if (dp && !control_of_init(dp))
|
||||
ret = 0;
|
||||
of_node_put(dp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
device_initcall(control_init);
|
||||
|
||||
/* Work out which banks of VRAM we have installed. */
|
||||
/* danj: I guess the card just ignores writes to nonexistant VRAM... */
|
||||
|
||||
|
@ -627,78 +487,6 @@ static void __init find_vram_size(struct fb_info_control *p)
|
|||
(bank1 + bank2) << 1, bank1 << 1, bank2 << 1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* find "control" and initialize
|
||||
*/
|
||||
static int __init control_of_init(struct device_node *dp)
|
||||
{
|
||||
struct fb_info_control *p;
|
||||
struct resource fb_res, reg_res;
|
||||
|
||||
if (control_fb) {
|
||||
printk(KERN_ERR "controlfb: only one control is supported\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if (of_pci_address_to_resource(dp, 2, &fb_res) ||
|
||||
of_pci_address_to_resource(dp, 1, ®_res)) {
|
||||
printk(KERN_ERR "can't get 2 addresses for control\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
p = kzalloc(sizeof(*p), GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
control_fb = p; /* save it for cleanups */
|
||||
|
||||
/* Map in frame buffer and registers */
|
||||
p->fb_orig_base = fb_res.start;
|
||||
p->fb_orig_size = resource_size(&fb_res);
|
||||
/* use the big-endian aperture (??) */
|
||||
p->frame_buffer_phys = fb_res.start + 0x800000;
|
||||
p->control_regs_phys = reg_res.start;
|
||||
p->control_regs_size = resource_size(®_res);
|
||||
|
||||
if (!p->fb_orig_base ||
|
||||
!request_mem_region(p->fb_orig_base,p->fb_orig_size,"controlfb")) {
|
||||
p->fb_orig_base = 0;
|
||||
goto error_out;
|
||||
}
|
||||
/* map at most 8MB for the frame buffer */
|
||||
p->frame_buffer = ioremap_wt(p->frame_buffer_phys, 0x800000);
|
||||
|
||||
if (!p->control_regs_phys ||
|
||||
!request_mem_region(p->control_regs_phys, p->control_regs_size,
|
||||
"controlfb regs")) {
|
||||
p->control_regs_phys = 0;
|
||||
goto error_out;
|
||||
}
|
||||
p->control_regs = ioremap(p->control_regs_phys, p->control_regs_size);
|
||||
|
||||
p->cmap_regs_phys = 0xf301b000; /* XXX not in prom? */
|
||||
if (!request_mem_region(p->cmap_regs_phys, 0x1000, "controlfb cmap")) {
|
||||
p->cmap_regs_phys = 0;
|
||||
goto error_out;
|
||||
}
|
||||
p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000);
|
||||
|
||||
if (!p->cmap_regs || !p->control_regs || !p->frame_buffer)
|
||||
goto error_out;
|
||||
|
||||
find_vram_size(p);
|
||||
if (!p->total_vram)
|
||||
goto error_out;
|
||||
|
||||
if (init_control(p) < 0)
|
||||
goto error_out;
|
||||
|
||||
return 0;
|
||||
|
||||
error_out:
|
||||
control_cleanup();
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the monitor sense value.
|
||||
* Note that this can be called before calibrate_delay,
|
||||
|
@ -1022,6 +810,115 @@ static void __init control_init_info(struct fb_info *info, struct fb_info_contro
|
|||
info->fix.accel = FB_ACCEL_NONE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse user specified options (`video=controlfb:')
|
||||
*/
|
||||
static void __init control_setup(char *options)
|
||||
{
|
||||
char *this_opt;
|
||||
|
||||
if (!options || !*options)
|
||||
return;
|
||||
|
||||
while ((this_opt = strsep(&options, ",")) != NULL) {
|
||||
if (!strncmp(this_opt, "vmode:", 6)) {
|
||||
int vmode = simple_strtoul(this_opt+6, NULL, 0);
|
||||
if (vmode > 0 && vmode <= VMODE_MAX &&
|
||||
control_mac_modes[vmode - 1].m[1] >= 0)
|
||||
default_vmode = vmode;
|
||||
} else if (!strncmp(this_opt, "cmode:", 6)) {
|
||||
int depth = simple_strtoul(this_opt+6, NULL, 0);
|
||||
switch (depth) {
|
||||
case CMODE_8:
|
||||
case CMODE_16:
|
||||
case CMODE_32:
|
||||
default_cmode = depth;
|
||||
break;
|
||||
case 8:
|
||||
default_cmode = CMODE_8;
|
||||
break;
|
||||
case 15:
|
||||
case 16:
|
||||
default_cmode = CMODE_16;
|
||||
break;
|
||||
case 24:
|
||||
case 32:
|
||||
default_cmode = CMODE_32;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* finish off the driver initialization and register
|
||||
*/
|
||||
static int __init init_control(struct fb_info_control *p)
|
||||
{
|
||||
int full, sense, vmode, cmode, vyres;
|
||||
struct fb_var_screeninfo var;
|
||||
int rc;
|
||||
|
||||
printk(KERN_INFO "controlfb: ");
|
||||
|
||||
full = p->total_vram == 0x400000;
|
||||
|
||||
/* Try to pick a video mode out of NVRAM if we have one. */
|
||||
cmode = default_cmode;
|
||||
if (IS_REACHABLE(CONFIG_NVRAM) && cmode == CMODE_NVRAM)
|
||||
cmode = nvram_read_byte(NV_CMODE);
|
||||
if (cmode < CMODE_8 || cmode > CMODE_32)
|
||||
cmode = CMODE_8;
|
||||
|
||||
vmode = default_vmode;
|
||||
if (IS_REACHABLE(CONFIG_NVRAM) && vmode == VMODE_NVRAM)
|
||||
vmode = nvram_read_byte(NV_VMODE);
|
||||
if (vmode < 1 || vmode > VMODE_MAX ||
|
||||
control_mac_modes[vmode - 1].m[full] < cmode) {
|
||||
sense = read_control_sense(p);
|
||||
printk(KERN_CONT "Monitor sense value = 0x%x, ", sense);
|
||||
vmode = mac_map_monitor_sense(sense);
|
||||
if (control_mac_modes[vmode - 1].m[full] < 0)
|
||||
vmode = VMODE_640_480_60;
|
||||
cmode = min(cmode, control_mac_modes[vmode - 1].m[full]);
|
||||
}
|
||||
|
||||
/* Initialize info structure */
|
||||
control_init_info(&p->info, p);
|
||||
|
||||
/* Setup default var */
|
||||
if (mac_vmode_to_var(vmode, cmode, &var) < 0) {
|
||||
/* This shouldn't happen! */
|
||||
printk("mac_vmode_to_var(%d, %d,) failed\n", vmode, cmode);
|
||||
try_again:
|
||||
vmode = VMODE_640_480_60;
|
||||
cmode = CMODE_8;
|
||||
if (mac_vmode_to_var(vmode, cmode, &var) < 0) {
|
||||
printk(KERN_ERR "controlfb: mac_vmode_to_var() failed\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
printk(KERN_INFO "controlfb: ");
|
||||
}
|
||||
printk("using video mode %d and color mode %d.\n", vmode, cmode);
|
||||
|
||||
vyres = (p->total_vram - CTRLFB_OFF) / (var.xres << cmode);
|
||||
if (vyres > var.yres)
|
||||
var.yres_virtual = vyres;
|
||||
|
||||
/* Apply default var */
|
||||
var.activate = FB_ACTIVATE_NOW;
|
||||
rc = fb_set_var(&p->info, &var);
|
||||
if (rc && (vmode != VMODE_640_480_60 || cmode != CMODE_8))
|
||||
goto try_again;
|
||||
|
||||
/* Register with fbdev layer */
|
||||
if (register_framebuffer(&p->info) < 0)
|
||||
return -ENXIO;
|
||||
|
||||
fb_info(&p->info, "control display adapter\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void control_cleanup(void)
|
||||
{
|
||||
|
@ -1048,4 +945,93 @@ static void control_cleanup(void)
|
|||
kfree(p);
|
||||
}
|
||||
|
||||
/*
|
||||
* find "control" and initialize
|
||||
*/
|
||||
static int __init control_of_init(struct device_node *dp)
|
||||
{
|
||||
struct fb_info_control *p;
|
||||
struct resource fb_res, reg_res;
|
||||
|
||||
if (control_fb) {
|
||||
printk(KERN_ERR "controlfb: only one control is supported\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if (of_pci_address_to_resource(dp, 2, &fb_res) ||
|
||||
of_pci_address_to_resource(dp, 1, ®_res)) {
|
||||
printk(KERN_ERR "can't get 2 addresses for control\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
p = kzalloc(sizeof(*p), GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
control_fb = p; /* save it for cleanups */
|
||||
|
||||
/* Map in frame buffer and registers */
|
||||
p->fb_orig_base = fb_res.start;
|
||||
p->fb_orig_size = resource_size(&fb_res);
|
||||
/* use the big-endian aperture (??) */
|
||||
p->frame_buffer_phys = fb_res.start + 0x800000;
|
||||
p->control_regs_phys = reg_res.start;
|
||||
p->control_regs_size = resource_size(®_res);
|
||||
|
||||
if (!p->fb_orig_base ||
|
||||
!request_mem_region(p->fb_orig_base,p->fb_orig_size,"controlfb")) {
|
||||
p->fb_orig_base = 0;
|
||||
goto error_out;
|
||||
}
|
||||
/* map at most 8MB for the frame buffer */
|
||||
p->frame_buffer = ioremap_wt(p->frame_buffer_phys, 0x800000);
|
||||
|
||||
if (!p->control_regs_phys ||
|
||||
!request_mem_region(p->control_regs_phys, p->control_regs_size,
|
||||
"controlfb regs")) {
|
||||
p->control_regs_phys = 0;
|
||||
goto error_out;
|
||||
}
|
||||
p->control_regs = ioremap(p->control_regs_phys, p->control_regs_size);
|
||||
|
||||
p->cmap_regs_phys = 0xf301b000; /* XXX not in prom? */
|
||||
if (!request_mem_region(p->cmap_regs_phys, 0x1000, "controlfb cmap")) {
|
||||
p->cmap_regs_phys = 0;
|
||||
goto error_out;
|
||||
}
|
||||
p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000);
|
||||
|
||||
if (!p->cmap_regs || !p->control_regs || !p->frame_buffer)
|
||||
goto error_out;
|
||||
|
||||
find_vram_size(p);
|
||||
if (!p->total_vram)
|
||||
goto error_out;
|
||||
|
||||
if (init_control(p) < 0)
|
||||
goto error_out;
|
||||
|
||||
return 0;
|
||||
|
||||
error_out:
|
||||
control_cleanup();
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
static int __init control_init(void)
|
||||
{
|
||||
struct device_node *dp;
|
||||
char *option = NULL;
|
||||
int ret = -ENXIO;
|
||||
|
||||
if (fb_get_options("controlfb", &option))
|
||||
return -ENODEV;
|
||||
control_setup(option);
|
||||
|
||||
dp = of_find_node_by_name(NULL, "control");
|
||||
if (dp && !control_of_init(dp))
|
||||
ret = 0;
|
||||
of_node_put(dp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
device_initcall(control_init);
|
||||
|
|
Loading…
Reference in New Issue