mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
fbdev: Wrap fbcon updates from vga-switcheroo in helper
Handle console remapping in fbcon in fb_switch_output(). Vga-switcheroo invokes this functionality before switching physical outputs to a new graphics device. Open-coding fbcon state in vga-switcheroo exposed fbdev implementation details. Vga-switcheroo is used for switching physical outputs among graphics hardware. This functionality is only supported by DRM drivers. A later update will further move fb_switch_output() into DRM's fbdev emulation; thus fully decoupling vga-switcheroo from fbdev. v3: - remove Kconfig dependency related to fbcon (Geert) v2: - use '#if defined' (Helge) Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
committed by
Helge Deller
parent
8ef78cae98
commit
2f4230fad9
@@ -4,7 +4,7 @@ config VGA_SWITCHEROO
|
||||
depends on X86
|
||||
depends on ACPI
|
||||
depends on PCI
|
||||
depends on (FRAMEBUFFER_CONSOLE=n || FB=y)
|
||||
depends on FB=y
|
||||
select VGA_ARB
|
||||
help
|
||||
Many laptops released in 2008/9/10 have two GPUs with a multiplexer
|
||||
|
||||
@@ -31,11 +31,9 @@
|
||||
#define pr_fmt(fmt) "vga_switcheroo: " fmt
|
||||
|
||||
#include <linux/apple-gmux.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/fbcon.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/pm_domain.h>
|
||||
@@ -735,8 +733,10 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client)
|
||||
if (!active->driver_power_control)
|
||||
set_audio_state(active->id, VGA_SWITCHEROO_OFF);
|
||||
|
||||
#if defined(CONFIG_FB)
|
||||
if (new_client->fb_info)
|
||||
fbcon_remap_all(new_client->fb_info);
|
||||
fb_switch_outputs(new_client->fb_info);
|
||||
#endif
|
||||
|
||||
mutex_lock(&vgasr_priv.mux_hw_lock);
|
||||
ret = vgasr_priv.handler->switchto(new_client->id);
|
||||
|
||||
@@ -684,6 +684,16 @@ void fb_set_suspend(struct fb_info *info, int state)
|
||||
}
|
||||
EXPORT_SYMBOL(fb_set_suspend);
|
||||
|
||||
/**
|
||||
* fb_switch_outputs - framebuffer got the outputs from vga-switcheroo
|
||||
* @info: framebuffer
|
||||
*/
|
||||
void fb_switch_outputs(struct fb_info *info)
|
||||
{
|
||||
fbcon_remap_all(info);
|
||||
}
|
||||
EXPORT_SYMBOL(fb_switch_outputs);
|
||||
|
||||
static int __init fbmem_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -608,6 +608,7 @@ void fb_pad_unaligned_buffer(u8 *dst, u32 d_pitch, const u8 *src, u32 idx, u32 h
|
||||
u32 shift_high, u32 shift_low, u32 mod);
|
||||
void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, const u8 *src, u32 s_pitch, u32 height);
|
||||
extern void fb_set_suspend(struct fb_info *info, int state);
|
||||
extern void fb_switch_outputs(struct fb_info *info);
|
||||
extern int fb_get_color_depth(struct fb_var_screeninfo *var,
|
||||
struct fb_fix_screeninfo *fix);
|
||||
extern int fb_get_options(const char *name, char **option);
|
||||
|
||||
Reference in New Issue
Block a user