-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'x86-fb-for-linus' of git://git.kernel.org/pub/scm/linux…
…/kernel/git/tip/tip Pull x86 fb changes from Ingo Molnar: "This tree includes preparatory patches for SimpleDRM driver support, by David Herrmann. They clean up x86 framebuffer support by creating simplefb devices wherever possible. More background can be found at http://lwn.net/Articles/558104/" * 'x86-fb-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: fbdev: fbcon: select VT_HW_CONSOLE_BINDING fbdev: efifb: bind to efi-framebuffer fbdev: vesafb: bind to platform-framebuffer device fbdev: simplefb: add common x86 RGB formats x86: sysfb: move EFI quirks from efifb to sysfb x86: provide platform-devices for boot-framebuffers fbdev: simplefb: mark as fw and allocate apertures fbdev: simplefb: add init through platform_data
- Loading branch information
Showing
12 changed files
with
666 additions
and
330 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
#ifndef _ARCH_X86_KERNEL_SYSFB_H | ||
#define _ARCH_X86_KERNEL_SYSFB_H | ||
|
||
/* | ||
* Generic System Framebuffers on x86 | ||
* Copyright (c) 2012-2013 David Herrmann <dh.herrmann@gmail.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the Free | ||
* Software Foundation; either version 2 of the License, or (at your option) | ||
* any later version. | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/platform_data/simplefb.h> | ||
#include <linux/screen_info.h> | ||
|
||
enum { | ||
M_I17, /* 17-Inch iMac */ | ||
M_I20, /* 20-Inch iMac */ | ||
M_I20_SR, /* 20-Inch iMac (Santa Rosa) */ | ||
M_I24, /* 24-Inch iMac */ | ||
M_I24_8_1, /* 24-Inch iMac, 8,1th gen */ | ||
M_I24_10_1, /* 24-Inch iMac, 10,1th gen */ | ||
M_I27_11_1, /* 27-Inch iMac, 11,1th gen */ | ||
M_MINI, /* Mac Mini */ | ||
M_MINI_3_1, /* Mac Mini, 3,1th gen */ | ||
M_MINI_4_1, /* Mac Mini, 4,1th gen */ | ||
M_MB, /* MacBook */ | ||
M_MB_2, /* MacBook, 2nd rev. */ | ||
M_MB_3, /* MacBook, 3rd rev. */ | ||
M_MB_5_1, /* MacBook, 5th rev. */ | ||
M_MB_6_1, /* MacBook, 6th rev. */ | ||
M_MB_7_1, /* MacBook, 7th rev. */ | ||
M_MB_SR, /* MacBook, 2nd gen, (Santa Rosa) */ | ||
M_MBA, /* MacBook Air */ | ||
M_MBA_3, /* Macbook Air, 3rd rev */ | ||
M_MBP, /* MacBook Pro */ | ||
M_MBP_2, /* MacBook Pro 2nd gen */ | ||
M_MBP_2_2, /* MacBook Pro 2,2nd gen */ | ||
M_MBP_SR, /* MacBook Pro (Santa Rosa) */ | ||
M_MBP_4, /* MacBook Pro, 4th gen */ | ||
M_MBP_5_1, /* MacBook Pro, 5,1th gen */ | ||
M_MBP_5_2, /* MacBook Pro, 5,2th gen */ | ||
M_MBP_5_3, /* MacBook Pro, 5,3rd gen */ | ||
M_MBP_6_1, /* MacBook Pro, 6,1th gen */ | ||
M_MBP_6_2, /* MacBook Pro, 6,2th gen */ | ||
M_MBP_7_1, /* MacBook Pro, 7,1th gen */ | ||
M_MBP_8_2, /* MacBook Pro, 8,2nd gen */ | ||
M_UNKNOWN /* placeholder */ | ||
}; | ||
|
||
struct efifb_dmi_info { | ||
char *optname; | ||
unsigned long base; | ||
int stride; | ||
int width; | ||
int height; | ||
int flags; | ||
}; | ||
|
||
#ifdef CONFIG_EFI | ||
|
||
extern struct efifb_dmi_info efifb_dmi_list[]; | ||
void sysfb_apply_efi_quirks(void); | ||
|
||
#else /* CONFIG_EFI */ | ||
|
||
static inline void sysfb_apply_efi_quirks(void) | ||
{ | ||
} | ||
|
||
#endif /* CONFIG_EFI */ | ||
|
||
#ifdef CONFIG_X86_SYSFB | ||
|
||
bool parse_mode(const struct screen_info *si, | ||
struct simplefb_platform_data *mode); | ||
int create_simplefb(const struct screen_info *si, | ||
const struct simplefb_platform_data *mode); | ||
|
||
#else /* CONFIG_X86_SYSFB */ | ||
|
||
static inline bool parse_mode(const struct screen_info *si, | ||
struct simplefb_platform_data *mode) | ||
{ | ||
return false; | ||
} | ||
|
||
static inline int create_simplefb(const struct screen_info *si, | ||
const struct simplefb_platform_data *mode) | ||
{ | ||
return -EINVAL; | ||
} | ||
|
||
#endif /* CONFIG_X86_SYSFB */ | ||
|
||
#endif /* _ARCH_X86_KERNEL_SYSFB_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
/* | ||
* Generic System Framebuffers on x86 | ||
* Copyright (c) 2012-2013 David Herrmann <dh.herrmann@gmail.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the Free | ||
* Software Foundation; either version 2 of the License, or (at your option) | ||
* any later version. | ||
*/ | ||
|
||
/* | ||
* Simple-Framebuffer support for x86 systems | ||
* Create a platform-device for any available boot framebuffer. The | ||
* simple-framebuffer platform device is already available on DT systems, so | ||
* this module parses the global "screen_info" object and creates a suitable | ||
* platform device compatible with the "simple-framebuffer" DT object. If | ||
* the framebuffer is incompatible, we instead create a legacy | ||
* "vesa-framebuffer", "efi-framebuffer" or "platform-framebuffer" device and | ||
* pass the screen_info as platform_data. This allows legacy drivers | ||
* to pick these devices up without messing with simple-framebuffer drivers. | ||
* The global "screen_info" is still valid at all times. | ||
* | ||
* If CONFIG_X86_SYSFB is not selected, we never register "simple-framebuffer" | ||
* platform devices, but only use legacy framebuffer devices for | ||
* backwards compatibility. | ||
* | ||
* TODO: We set the dev_id field of all platform-devices to 0. This allows | ||
* other x86 OF/DT parsers to create such devices, too. However, they must | ||
* start at offset 1 for this to work. | ||
*/ | ||
|
||
#include <linux/err.h> | ||
#include <linux/init.h> | ||
#include <linux/kernel.h> | ||
#include <linux/mm.h> | ||
#include <linux/platform_data/simplefb.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/screen_info.h> | ||
#include <asm/sysfb.h> | ||
|
||
static __init int sysfb_init(void) | ||
{ | ||
struct screen_info *si = &screen_info; | ||
struct simplefb_platform_data mode; | ||
struct platform_device *pd; | ||
const char *name; | ||
bool compatible; | ||
int ret; | ||
|
||
sysfb_apply_efi_quirks(); | ||
|
||
/* try to create a simple-framebuffer device */ | ||
compatible = parse_mode(si, &mode); | ||
if (compatible) { | ||
ret = create_simplefb(si, &mode); | ||
if (!ret) | ||
return 0; | ||
} | ||
|
||
/* if the FB is incompatible, create a legacy framebuffer device */ | ||
if (si->orig_video_isVGA == VIDEO_TYPE_EFI) | ||
name = "efi-framebuffer"; | ||
else if (si->orig_video_isVGA == VIDEO_TYPE_VLFB) | ||
name = "vesa-framebuffer"; | ||
else | ||
name = "platform-framebuffer"; | ||
|
||
pd = platform_device_register_resndata(NULL, name, 0, | ||
NULL, 0, si, sizeof(*si)); | ||
return IS_ERR(pd) ? PTR_ERR(pd) : 0; | ||
} | ||
|
||
/* must execute after PCI subsystem for EFI quirks */ | ||
device_initcall(sysfb_init); |
Oops, something went wrong.