From a2ecab12c1ff62b13b456198191d8e315e4e88e3 Mon Sep 17 00:00:00 2001 From: Antonio Hernández Blas Date: Tue, 10 May 2011 11:02:51 -0500 Subject: system/tp_smapi: Added (SMAPI BIOS access for ThinkPad Laptops) Signed-off-by: Robby Workman --- system/tp_smapi/README | 20 ++++ system/tp_smapi/doinst.sh | 4 + system/tp_smapi/modprobe.thinkpad_ec.conf | 3 + system/tp_smapi/modprobe.tp_smapi.conf | 2 + system/tp_smapi/patches/tp_smapi-0.40-2.6.37.patch | 30 +++++ .../patches/tp_smapi-0.40-x200-x200s-support.patch | 11 ++ system/tp_smapi/slack-desc | 19 ++++ system/tp_smapi/tp_smapi.SlackBuild | 126 +++++++++++++++++++++ system/tp_smapi/tp_smapi.info | 10 ++ 9 files changed, 225 insertions(+) create mode 100644 system/tp_smapi/README create mode 100644 system/tp_smapi/doinst.sh create mode 100644 system/tp_smapi/modprobe.thinkpad_ec.conf create mode 100644 system/tp_smapi/modprobe.tp_smapi.conf create mode 100644 system/tp_smapi/patches/tp_smapi-0.40-2.6.37.patch create mode 100644 system/tp_smapi/patches/tp_smapi-0.40-x200-x200s-support.patch create mode 100644 system/tp_smapi/slack-desc create mode 100644 system/tp_smapi/tp_smapi.SlackBuild create mode 100644 system/tp_smapi/tp_smapi.info diff --git a/system/tp_smapi/README b/system/tp_smapi/README new file mode 100644 index 0000000000..fad787b148 --- /dev/null +++ b/system/tp_smapi/README @@ -0,0 +1,20 @@ +tp_smapi (SMAPI BIOS access for ThinkPad Laptops) + +ThinkPad laptops include a proprietary interface called SMAPI BIOS +(System Management Application Program Interface) which provides some +hardware control functionality that is not accessible by other means. + +WARNING: +This driver uses undocumented features and direct hardware access. +It thus cannot be guaranteed to work, and may cause arbitrary damage +(especially to models on which it wasn't tested). + +NOTES: +* There's a patch (patches/tp_smapi-0.40-x200-x200s-support.patch) to +add axis inversion handling for thinkpads x200 and x200s but since +this patch *does not* come from upstream its not applied by default +so use it at your own risk. Edit the SlackBuild to apply it. + +* It's highly recommended to read the following links: + http://www.thinkwiki.org/wiki/Tp_smapi + http://wiki.archlinux.org/index.php/Tp_smapi diff --git a/system/tp_smapi/doinst.sh b/system/tp_smapi/doinst.sh new file mode 100644 index 0000000000..6510094161 --- /dev/null +++ b/system/tp_smapi/doinst.sh @@ -0,0 +1,4 @@ +# Re-generate modules.dep and map files. +if [ -x sbin/depmod ]; then + chroot . /sbin/depmod -a @KERNEL@ 1> /dev/null 2> /dev/null +fi diff --git a/system/tp_smapi/modprobe.thinkpad_ec.conf b/system/tp_smapi/modprobe.thinkpad_ec.conf new file mode 100644 index 0000000000..6e9b47637e --- /dev/null +++ b/system/tp_smapi/modprobe.thinkpad_ec.conf @@ -0,0 +1,3 @@ +# Force loading of the thinkpad_ec module in case it refuses to do so because +# of reserved ports - this might happen on some newer Thinkpad laptops +options thinkpad_ec force_io=1 diff --git a/system/tp_smapi/modprobe.tp_smapi.conf b/system/tp_smapi/modprobe.tp_smapi.conf new file mode 100644 index 0000000000..98080e9df6 --- /dev/null +++ b/system/tp_smapi/modprobe.tp_smapi.conf @@ -0,0 +1,2 @@ +# Make sure that tp_smapi is always loaded before the hdaps module +install hdaps /sbin/modprobe -i tp_smapi ; /sbin/modprobe -i hdaps diff --git a/system/tp_smapi/patches/tp_smapi-0.40-2.6.37.patch b/system/tp_smapi/patches/tp_smapi-0.40-2.6.37.patch new file mode 100644 index 0000000000..60f05997a1 --- /dev/null +++ b/system/tp_smapi/patches/tp_smapi-0.40-2.6.37.patch @@ -0,0 +1,30 @@ +diff -urN tp_smapi-0.40.orig/thinkpad_ec.c tp_smapi-0.40/thinkpad_ec.c +--- tp_smapi-0.40.orig/thinkpad_ec.c 2008-12-16 08:03:06.000000000 +0300 ++++ tp_smapi-0.40/thinkpad_ec.c 2010-11-22 18:16:54.000000000 +0300 +@@ -88,7 +88,11 @@ + #define TPC_PREFETCH_JUNK (INITIAL_JIFFIES+1) /* Ignore prefetch */ + + /* Locking: */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) + static DECLARE_MUTEX(thinkpad_ec_mutex); ++#else ++static DEFINE_SEMAPHORE(thinkpad_ec_mutex); ++#endif + + /* Kludge in case the ACPI DSDT reserves the ports we need. */ + static int force_io; /* Willing to do IO to ports we couldn't reserve? */ +diff -urN tp_smapi-0.40.orig/tp_smapi.c tp_smapi-0.40/tp_smapi.c +--- tp_smapi-0.40.orig/tp_smapi.c 2008-12-16 08:03:06.000000000 +0300 ++++ tp_smapi-0.40/tp_smapi.c 2010-11-22 18:17:29.000000000 +0300 +@@ -109,7 +109,11 @@ + #define SMAPI_PORT2 0x4F /* fixed port, meaning unclear */ + static unsigned short smapi_port; /* APM control port, normally 0xB2 */ + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) + static DECLARE_MUTEX(smapi_mutex); ++#else ++static DEFINE_SEMAPHORE(smapi_mutex); ++#endif + + /** + * find_smapi_port - read SMAPI port from NVRAM diff --git a/system/tp_smapi/patches/tp_smapi-0.40-x200-x200s-support.patch b/system/tp_smapi/patches/tp_smapi-0.40-x200-x200s-support.patch new file mode 100644 index 0000000000..b1c4fa5c1a --- /dev/null +++ b/system/tp_smapi/patches/tp_smapi-0.40-x200-x200s-support.patch @@ -0,0 +1,11 @@ +--- a/hdaps.c ++++ b/hdaps.c +@@ -750,6 +750,8 @@ + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X60s", HDAPS_ORIENT_INVERT_Y), + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X60", HDAPS_ORIENT_SWAP | HDAPS_ORIENT_INVERT_X), + HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X61", HDAPS_ORIENT_SWAP | HDAPS_ORIENT_INVERT_X), ++ HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X200", HDAPS_ORIENT_SWAP | HDAPS_ORIENT_INVERT_XY), ++ HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X200s", HDAPS_ORIENT_SWAP | HDAPS_ORIENT_INVERT_XY), + { .ident = NULL } + }; + diff --git a/system/tp_smapi/slack-desc b/system/tp_smapi/slack-desc new file mode 100644 index 0000000000..b33810b7da --- /dev/null +++ b/system/tp_smapi/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +tp_smapi: tp_smapi (SMAPI BIOS access for ThinkPad Laptops) +tp_smapi: +tp_smapi: ThinkPad laptops include a proprietary interface called SMAPI BIOS +tp_smapi: (System Management Application Program Interface) which provides some +tp_smapi: hardware control functionality that is not accessible by other means. +tp_smapi: +tp_smapi: WARNING: +tp_smapi: This driver uses undocumented features and direct hardware access. +tp_smapi: It thus cannot be guaranteed to work, and may cause arbitrary damage +tp_smapi: (especially to models on which it wasn't tested). +tp_smapi: diff --git a/system/tp_smapi/tp_smapi.SlackBuild b/system/tp_smapi/tp_smapi.SlackBuild new file mode 100644 index 0000000000..3e982c13fa --- /dev/null +++ b/system/tp_smapi/tp_smapi.SlackBuild @@ -0,0 +1,126 @@ +#!/bin/sh + +# Slackware build script for tp_smapi + +# Copyright (c) 2008-2011, Antonio Hernández Blas +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1.- Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PRGNAM=tp_smapi +VERSION=0.40 +BUILD=${BUILD:-4} +TAG=${TAG:-_SBo} + +KERNEL=${KERNEL:-"$(uname -r)"} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i486 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i486" ]; then + SLKCFLAGS="-O2 -march=i486 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $PRGNAM-$VERSION +tar xvf $CWD/$PRGNAM-$VERSION.tgz +cd $PRGNAM-$VERSION +chown -R root:root . +chmod -R u+w,go+r-w,a-s . +find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + +# Thanks to debian, gentoo and arch guys for this patches :) +# Fix tp_smapi build in kernel version >= 2.6.37 +# http://sourceforge.net/tracker/index.php?func=detail&aid=3153602&group_id=1212&atid=101212 +patch -p1 < $CWD/patches/tp_smapi-0.40-2.6.37.patch + +# Adds axis inversion handling for x200 and x200s +# https://aur.archlinux.org/packages.php?ID=3985 +# This patch *does not* come from upstream, so use it at your own risk. +# patch -p1 < $CWD/patches/tp_smapi-0.40-x200-x200s-support.patch + +( case "$ARCH" in + i?86) ARCH=x86 ;; + esac + echo "ARCH=$ARCH" + make HDAPS=1 KVER=$KERNEL +) || exit 1 + +mkdir -p $PKG/lib/modules/${KERNEL}/extra +install -m 0664 hdaps.ko \ + $PKG/lib/modules/${KERNEL}/extra/ + +mkdir -p $PKG/lib/modules/${KERNEL}/kernel/drivers/firmware +install -m 0664 thinkpad_ec.ko tp_smapi.ko \ + $PKG/lib/modules/${KERNEL}/kernel/drivers/firmware + +# Make sure the tp_smapi module is loaded before the hdaps module +# Make sure the thinkpad_ec module will load +# We're not going to install these with a .new extension, because we don't +# want them to be present if the package is removed. +mkdir -p $PKG/etc/modprobe.d +cat $CWD/modprobe.tp_smapi.conf > $PKG/etc/modprobe.d/tp_smapi.conf +cat $CWD/modprobe.thinkpad_ec.conf > $PKG/etc/modprobe.d/thinkpad_ec.conf + +# Make hdaps kernel module from this package be prefered over hdaps in kernel-module package. +mkdir -p $PKG/etc/depmod.d +echo "override hdaps ${KERNEL} extra" > $PKG/etc/depmod.d/hdaps.conf + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# Fixup permissions on kernel modules +find $PKG/lib/modules -type f -exec chmod 0644 {} \; + +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a CHANGES README TODO $PKG/usr/doc/$PRGNAM-$VERSION +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +sed "s%@KERNEL@%$KERNEL%" $CWD/doinst.sh > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION\_$(echo ${KERNEL} | tr '-' '_')-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/system/tp_smapi/tp_smapi.info b/system/tp_smapi/tp_smapi.info new file mode 100644 index 0000000000..e5165c994d --- /dev/null +++ b/system/tp_smapi/tp_smapi.info @@ -0,0 +1,10 @@ +PRGNAM="tp_smapi" +VERSION="0.40" +HOMEPAGE="http://tpctl.sourceforge.net" +DOWNLOAD="http://downloads.sourceforge.net/tpctl/tp_smapi-0.40.tgz" +MD5SUM="f4eb8bb4d4413a5ae65aa7d77f4112c0" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +MAINTAINER="Antonio Hernández Blas" +EMAIL="hba.nihilismus@gmail.com" +APPROVED="rworkman" -- cgit v1.2.3-65-gdbad