summaryrefslogtreecommitdiff
path: root/scripts/init-top/framebuffer
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/init-top/framebuffer')
-rwxr-xr-xscripts/init-top/framebuffer87
1 files changed, 87 insertions, 0 deletions
diff --git a/scripts/init-top/framebuffer b/scripts/init-top/framebuffer
new file mode 100755
index 0000000..21a6b19
--- /dev/null
+++ b/scripts/init-top/framebuffer
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+PREREQ=""
+prereqs()
+{
+ echo "$PREREQ"
+}
+case $1 in
+# get pre-requisites
+prereqs)
+ prereqs
+ exit 0
+ ;;
+esac
+
+
+# The options part of the kernel "video=" argument (i.e. everyting
+# after "video=<fbdriver>:") has very inconsistent rules.
+#
+# Generally the following applies:
+# 1) options are comma-separated
+# 2) options can be in either of these three forms:
+# <arg>=<value>, <arg>:<value>, <boolean-arg>.
+# 3) the "mode" option has the form <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m]
+# and may or may not start with "mode="
+#
+# When the options are used with modules, they need to be space-separated
+# and the following conversions are needed:
+# <arg>:<value> -> <arg>=<value>
+# <boolean-arg> -> <boolean-arg>=1
+# <modevalue> -> mode=<modevalue>
+parse_video_opts()
+{
+ local OPTS="$1"
+ local IFS=","
+
+ # Must be a line like video=<fbdriver>:<opt1>,[opt2]...
+ if [ "${OPTS}" = "${OPTS%%:*}" ]; then
+ return
+ fi
+ OPTS="${OPTS#*:}"
+ for opt in ${OPTS}; do
+ # Already in the "<arg>=<value>" form
+ if [ "${opt}" != "${opt#*=}" ]; then
+ echo -n "$opt "
+ # In the "<arg>:<value>" form
+ elif [ "${opt}" != "${opt#*:}" ]; then
+ echo -n "${opt%:*}=${opt#*:} "
+ # Presumably a modevalue without the "mode=" prefix
+ elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then
+ echo -n "mode=$opt "
+ # Presumably a boolean
+ else
+ echo -n "${opt}=1 "
+ fi
+ done
+}
+
+FB=""
+OPTS=""
+
+for x in $(cat /proc/cmdline); do
+ case ${x} in
+ vga=*)
+ FB="vesafb";
+ OPTS="";
+ ;;
+ video=*)
+ FB=${x#*=}
+ FB="${FB%%:*}"
+ OPTS="$(parse_video_opts "${x}")"
+ esac
+done
+
+# Map command line name to module name
+case ${FB} in
+matroxfb)
+ FB=matroxfb_base
+ ;;
+*)
+ ;;
+esac
+
+if [ -n "${FB}" ]; then
+ modprobe fbcon
+ modprobe ${FB} ${OPTS}
+fi