diff options
Diffstat (limited to 'meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-samsung.patch')
-rw-r--r-- | meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-samsung.patch | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-samsung.patch b/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-samsung.patch new file mode 100644 index 000000000..88c978801 --- /dev/null +++ b/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-samsung.patch @@ -0,0 +1,206 @@ + + +From: Greg Kroah-Hartman <gregkh@suse.de> +Subject: Samsung backlight driver + +This driver implements backlight controls for Samsung laptops that currently do not have ACPI support for this control. + +It has been tested on the N130 laptop and properly works there. + +Info for the NC10 was provided by Soeren Sonnenburg <bugreports@nn7.de> Info for the NP-Q45 from Jie Huchet <jeremie@lamah.info> + +Many thanks to Dmitry Torokhov <dmitry.torokhov@gmail.com> for cleanups and other suggestions on how to make the driver simpler. + +Cc: Soeren Sonnenburg <bugreports@nn7.de> +Cc: Jie Huchet <jeremie@lamah.info> +Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/platform/x86/Kconfig | 12 ++ + drivers/platform/x86/Makefile | 1 + drivers/platform/x86/samsung-backlight.c | 157 ++++++++++++++++++++++++++++++++ 3 files changed, 170 insertions(+) +diff -purN vanilla-2.6.31-rc6/drivers/platform/x86/Kconfig linux-2.6.31-rc6/drivers/platform/x86/Kconfig +--- vanilla-2.6.31-rc6/drivers/platform/x86/Kconfig 2009-08-17 20:55:37.000000000 +0000 ++++ linux-2.6.31-rc6/drivers/platform/x86/Kconfig 2009-08-17 20:58:25.000000000 +0000 +@@ -425,4 +425,16 @@ config ACPI_TOSHIBA + + If you have a legacy free Toshiba laptop (such as the Libretto L1 + series), say Y. ++ ++config SAMSUNG_BACKLIGHT ++ tristate "Samsung Backlight driver" ++ depends on BACKLIGHT_CLASS_DEVICE ++ depends on DMI ++ ---help--- ++ This driver adds support to control the backlight on a number of ++ Samsung laptops, like the N130. ++ ++ It will only be loaded on laptops that properly need it, so it is ++ safe to say Y here. ++ + endif # X86_PLATFORM_DEVICES +diff -purN vanilla-2.6.31-rc6/drivers/platform/x86/Makefile linux-2.6.31-rc6/drivers/platform/x86/Makefile +--- vanilla-2.6.31-rc6/drivers/platform/x86/Makefile 2009-08-17 20:55:37.000000000 +0000 ++++ linux-2.6.31-rc6/drivers/platform/x86/Makefile 2009-08-17 20:58:44.000000000 +0000 +@@ -20,3 +20,4 @@ obj-$(CONFIG_INTEL_MENLOW) += intel_menl + obj-$(CONFIG_ACPI_WMI) += wmi.o + obj-$(CONFIG_ACPI_ASUS) += asus_acpi.o + obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o ++obj-$(CONFIG_SAMSUNG_BACKLIGHT) += samsung-backlight.o +diff -purN vanilla-2.6.31-rc6/drivers/platform/x86/samsung-backlight.c linux-2.6.31-rc6/drivers/platform/x86/samsung-backlight.c +--- vanilla-2.6.31-rc6/drivers/platform/x86/samsung-backlight.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.31-rc6/drivers/platform/x86/samsung-backlight.c 2009-08-17 21:00:10.000000000 +0000 +@@ -0,0 +1,151 @@ ++/* ++ * Samsung N130 and NC10 Laptop Backlight driver ++ * ++ * Copyright (C) 2009 Greg Kroah-Hartman (gregkh@suse.de) ++ * Copyright (C) 2009 Novell Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published by ++ * the Free Software Foundation. ++ */ ++ ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/module.h> ++#include <linux/pci.h> ++#include <linux/backlight.h> ++#include <linux/fb.h> ++#include <linux/dmi.h> ++ ++#define MAX_BRIGHT 0xff ++#define OFFSET 0xf4 ++ ++static int offset = OFFSET; ++module_param(offset, int, S_IRUGO | S_IWUSR); ++MODULE_PARM_DESC(offset, "The offset into the PCI device for the brightness control"); ++static struct pci_dev *pci_device; ++static struct backlight_device *backlight_device; ++ ++static u8 read_brightness(void) ++{ ++ u8 brightness; ++ ++ pci_read_config_byte(pci_device, offset, &brightness); ++ return brightness; ++} ++ ++static void set_brightness(u8 brightness) { ++ pci_write_config_byte(pci_device, offset, brightness); } ++ ++static int get_brightness(struct backlight_device *bd) { ++ return bd->props.brightness; ++} ++ ++static int update_status(struct backlight_device *bd) { ++ set_brightness(bd->props.brightness); ++ return 0; ++} ++ ++static struct backlight_ops backlight_ops = { ++ .get_brightness = get_brightness, ++ .update_status = update_status, ++}; ++ ++static int __init dmi_check_cb(const struct dmi_system_id *id) { ++ printk(KERN_INFO KBUILD_MODNAME ": found laptop model '%s'\n", ++ id->ident); ++ return 0; ++} ++ ++static struct dmi_system_id __initdata samsung_dmi_table[] = { ++ { ++ .ident = "N120", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "N120"), ++ DMI_MATCH(DMI_BOARD_NAME, "N120"), ++ }, ++ .callback = dmi_check_cb, ++ }, ++ { ++ .ident = "N130", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "N130"), ++ DMI_MATCH(DMI_BOARD_NAME, "N130"), ++ }, ++ .callback = dmi_check_cb, ++ }, ++ { ++ .ident = "NC10", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "NC10"), ++ DMI_MATCH(DMI_BOARD_NAME, "NC10"), ++ }, ++ .callback = dmi_check_cb, ++ }, ++ { ++ .ident = "NP-Q45", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "SQ45S70S"), ++ DMI_MATCH(DMI_BOARD_NAME, "SQ45S70S"), ++ }, ++ .callback = dmi_check_cb, ++ }, ++ { }, ++}; ++ ++static int __init samsung_init(void) ++{ ++ if (!dmi_check_system(samsung_dmi_table)) ++ return -ENODEV; ++ ++ /* ++ * The Samsung N120, N130, and NC10 use pci device id 0x27ae, while the ++ * NP-Q45 uses 0x2a02. Odds are we might need to add more to the ++ * list over time... ++ */ ++ pci_device = pci_get_device(PCI_VENDOR_ID_INTEL, 0x27ae, NULL); ++ if (!pci_device) { ++ pci_device = pci_get_device(PCI_VENDOR_ID_INTEL, 0x2a02, NULL); ++ if (!pci_device) ++ return -ENODEV; ++ } ++ ++ /* create a backlight device to talk to this one */ ++ backlight_device = backlight_device_register("samsung", ++ &pci_device->dev, ++ NULL, &backlight_ops); ++ if (IS_ERR(backlight_device)) { ++ pci_dev_put(pci_device); ++ return PTR_ERR(backlight_device); ++ } ++ ++ backlight_device->props.max_brightness = MAX_BRIGHT; ++ backlight_device->props.brightness = read_brightness(); ++ backlight_device->props.power = FB_BLANK_UNBLANK; ++ backlight_update_status(backlight_device); ++ ++ return 0; ++} ++ ++static void __exit samsung_exit(void) ++{ ++ backlight_device_unregister(backlight_device); ++ ++ /* we are done with the PCI device, put it back */ ++ pci_dev_put(pci_device); ++} ++ ++module_init(samsung_init); ++module_exit(samsung_exit); ++ ++MODULE_AUTHOR("Greg Kroah-Hartman <gregkh@suse.de>"); ++MODULE_DESCRIPTION("Samsung Backlight driver"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnN120:*:rnN120:*"); ++MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnN130:*:rnN130:*"); ++MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnNC10:*:rnNC10:*"); ++MODULE_ALIAS("dmi:*:svnSAMSUNGELECTRONICSCO.,LTD.:pnSQ45S70S:*:rnSQ45S70S:*"); |