Permalink
Browse files

Merge branch 'develop'

  • Loading branch information...
Lekensteyn committed Apr 26, 2012
2 parents d5ff9a1 + d12ce73 commit 979fbcf552d8e27d0de763e1d593354604fd2ddc
Showing with 57 additions and 15 deletions.
  1. +24 −0 Makefile.dkms
  2. +8 −0 NEWS
  3. +11 −5 README.md
  4. +14 −10 bbswitch.c
View
@@ -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
View
8 NEWS
@@ -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
View
@@ -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
View
@@ -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;

0 comments on commit 979fbcf

Please sign in to comment.