Merge branch 'develop'

master v0.4.2
Lekensteyn 13 years ago
commit 979fbcf552

@ -0,0 +1,24 @@
modname := bbswitch
DKMS := dkms
modver := $(shell awk -F'"' '/define *BBSWITCH_VERSION/{print $$2}' < bbswitch.c)
# directory in which generated files are stored
DKMS_DEST := /usr/src/$(modname)-$(modver)
all: install
src_install:
mkdir -p '$(DKMS_DEST)'
cp Makefile bbswitch.c '$(DKMS_DEST)'
sed 's/#MODULE_VERSION#/$(modver)/' dkms/dkms.conf > '$(DKMS_DEST)/dkms.conf'
build: src_install
$(DKMS) build 'bbswitch/$(modver)'
install: build
$(DKMS) install 'bbswitch/$(modver)'
uninstall:
$(DKMS) remove bbswitch/$(modver) --all
.PHONY: all src_install build install uninstall

@ -1,3 +1,11 @@
Version 0.4.2 - 26 April 2012
* Fixed a documentation error on unload_state.
* Added Makefile.dkms and documentation for easier installation using DKMS.
* Make /proc/acpi/bbswitch world-writable
* Fix NULL pointer dereference when reporting a failure during ACPI method
evaluation.
Version 0.4.1 - 16 January 2012
* Corrected a small error that yielded an confusing error message "The discrete

@ -38,10 +38,16 @@ information.
DKMS support
------------
Change `#MODULE_VERSION#` to the current version of bbswitch. Copy the
Makefile, C source and dkms.conf file to `/usr/src/bbswitch-VERSION/` (replace
VERSION with the current version of bbswitch which has been inserted for
`#MODULE_VERSION#`.
If you have DKMS installed, you can install bbswitch in such a way that it
survives kernel upgrades. It is recommended to remove older versions of bbswitch
by running `dkms remove bbswitch/OLDVERSION --all` as root. To install the new
version, simply run:
# make -f Makefile.dkms
To uninstall it, run:
# make -f Makefile.dkms uninstall
Usage
-----
@ -74,7 +80,7 @@ The module has some options that control the behavior on loading and unloading:
`load_state` and `unload_state`. Valid values are `-1`, `0` and `1` meaning "do
not change the card state", "turn the card off" and "turn the card on"
respectively. For example, if you want to have `bbswitch` disable the card
immediately when loading the module while disabling the card on unload, load the
immediately when loading the module while enabling the card on unload, load the
module with:
# modprobe bbswitch load_state=0 unload_state=1

@ -16,10 +16,12 @@
#include <linux/suspend.h>
#include <linux/seq_file.h>
#define BBSWITCH_VERSION "0.4.2"
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Toggle the discrete graphics card");
MODULE_AUTHOR("Peter Lekensteyn <lekensteyn@gmail.com>");
MODULE_VERSION("0.4.1");
MODULE_VERSION(BBSWITCH_VERSION);
enum {
CARD_UNCHANGED = -1,
@ -69,12 +71,11 @@ static struct notifier_block nb;
/* whether the card was off before suspend or not; on: 0, off: 1 */
int dis_before_suspend_disabled;
static char *buffer_to_string(const char buffer[], char *target) {
static char *buffer_to_string(const char *buffer, size_t n, char *target) {
int i;
for (i=0; i<sizeof(buffer); i++) {
sprintf(target + i * 5, "%02X,", buffer[i]);
for (i=0; i<n; i++) {
snprintf(target + i * 5, 5 * (n - i), "0x%02X,", buffer ? buffer[i] & 0xFF : 0);
}
target[sizeof(buffer) * 5] = '\0';
return target;
}
@ -110,12 +111,13 @@ static int acpi_call_dsm(acpi_handle handle, const char muid[16], int revid,
err = acpi_evaluate_object(handle, "_DSM", &input, &output);
if (err) {
char tmp[5 * max(sizeof(muid), sizeof(args))];
char muid_str[5 * 16];
char args_str[5 * 4];
printk(KERN_WARNING "bbswitch: failed to evaluate _DSM {%s} %X %X"
printk(KERN_WARNING "bbswitch: failed to evaluate _DSM {%s} 0x%X 0x%X"
" {%s}: %s\n",
buffer_to_string(muid, tmp), revid, func,
buffer_to_string(args, tmp), acpi_format_exception(err));
buffer_to_string(muid, 16, muid_str), revid, func,
buffer_to_string(args, 4, args_str), acpi_format_exception(err));
return err;
}
@ -330,6 +332,8 @@ static int __init bbswitch_init(void) {
struct pci_dev *pdev = NULL;
acpi_handle igd_handle = NULL;
printk(KERN_INFO "bbswitch: version %s\n", BBSWITCH_VERSION);
while ((pdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) != NULL) {
struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER, NULL };
acpi_handle handle;
@ -386,7 +390,7 @@ static int __init bbswitch_init(void) {
}
}
acpi_entry = proc_create("bbswitch", 0660, acpi_root_dir, &bbswitch_fops);
acpi_entry = proc_create("bbswitch", 0664, acpi_root_dir, &bbswitch_fops);
if (acpi_entry == NULL) {
printk(KERN_ERR "bbswitch: Couldn't create proc entry\n");
return -ENOMEM;

Loading…
Cancel
Save