From: Karol Kozimor <sziwan-DETuoxkZsSqrDJvtcaxF/A@public.gmane.org>
To: len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
Cc: acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: [PATCH] acpi4asus update
Date: Tue, 23 Mar 2004 01:01:43 +0100 [thread overview]
Message-ID: <20040323000143.GA13711@hell.org.pl> (raw)
[-- Attachment #1: Type: text/plain, Size: 635 bytes --]
Hi,
The attached patch updates the acpi4asus driver to version 0.28 through the
following changes:
- Added support for Samsung P30
- Fixed an oops triggered by non-standard hardware (Samsung P30)
- Added support for L4400L and M6800N
The patch also removes some superfluous data. It doesn't include the
copy_from_user() conversion, it will be released as a separate patch.
The code should apply to current bk (both for 2.4 and 2.6). The patch is
also available here:
http://hell.org.pl/~sziwan/asus/acpi4asus-0.27-0.28.diff
Please apply, TIA,
Best regards,
--
Karol 'sziwan' Kozimor
sziwan-DETuoxkZsSqrDJvtcaxF/A@public.gmane.org
[-- Attachment #2: acpi4asus-0.27-0.28.diff --]
[-- Type: text/plain, Size: 9652 bytes --]
--- a/drivers/acpi/asus_acpi.c 2004-02-18 14:36:31.000000000 +0100
+++ b/drivers/acpi/asus_acpi.c 2004-03-22 22:40:10.000000000 +0100
@@ -41,7 +41,7 @@
#include <acpi/acpi_drivers.h>
#include <acpi/acpi_bus.h>
-#define ASUS_ACPI_VERSION "0.27"
+#define ASUS_ACPI_VERSION "0.28"
#define PROC_ASUS "asus" //the directory
#define PROC_MLED "mled"
@@ -125,12 +125,11 @@ struct asus_hotk {
L5x, //L5800C
L8L, //L8400L
M1A, //M1300A
- M2E, //M2400E
+ M2E, //M2400E, L4400L
+ P30, //Samsung P30
S1x, //S1300A, but also L1400B and M2400A (L84F)
S2x, //S200 (J1 reported), Victor MP-XP7210
- //TODO A1370D does not seem to have an ATK device
- // L8400 model doesn't have ATK
- xxN, //M2400N, M3700N, S1300N (Centrino)
+ xxN, //M2400N, M3700N, M6800N, S1300N, S5200N (Centrino)
END_MODEL
} model; //Models currently supported
u16 event_count[128]; //count for each event TODO make this better
@@ -140,6 +139,7 @@ struct asus_hotk {
#define A1x_PREFIX "\\_SB.PCI0.ISA.EC0."
#define L3C_PREFIX "\\_SB.PCI0.PX40.ECD0."
#define M1A_PREFIX "\\_SB.PCI0.PX40.EC0."
+#define P30_PREFIX "\\_SB.PCI0.LPCB.EC0."
#define S1x_PREFIX "\\_SB.PCI0.PX40."
#define S2x_PREFIX A1x_PREFIX
#define xxN_PREFIX "\\_SB.PCI0.SBRG.EC0."
@@ -166,7 +166,7 @@ static struct model_data model_conf[END_
.mt_lcd_switch = A1x_PREFIX "_Q10",
.lcd_status = "\\BKLI",
.brightness_up = A1x_PREFIX "_Q0E",
- .brightness_down = A1x_PREFIX "_Q0F",
+ .brightness_down = A1x_PREFIX "_Q0F"
},
{
@@ -176,11 +176,8 @@ static struct model_data model_conf[END_
.wled_status = "\\SG66",
.mt_lcd_switch = "\\Q10",
.lcd_status = "\\BAOF",
- .brightness_up = "\\Q0E",
- .brightness_down = "\\Q0F",
.brightness_set = "SPLV",
.brightness_get = "GPLV",
- .brightness_status = "\\CMOD",
.display_set = "SDSP",
.display_get = "\\INFB"
},
@@ -217,11 +214,8 @@ static struct model_data model_conf[END_
.mt_wled = "WLED",
.mt_lcd_switch = L3C_PREFIX "_Q10",
.lcd_status = "\\GL32",
- .brightness_up = L3C_PREFIX "_Q0F",
- .brightness_down = L3C_PREFIX "_Q0E",
.brightness_set = "SPLV",
.brightness_get = "GPLV",
- .brightness_status = "\\BLVL",
.display_set = "SDSP",
.display_get = "\\_SB.PCI0.PCI1.VGAC.NMAP"
},
@@ -233,11 +227,8 @@ static struct model_data model_conf[END_
.mt_wled = "WLED",
.mt_lcd_switch = "\\Q10",
.lcd_status = "\\BKLG",
- .brightness_up = "\\Q0E",
- .brightness_down = "\\Q0F",
.brightness_set = "SPLV",
.brightness_get = "GPLV",
- .brightness_status = "\\BLVL",
.display_set = "SDSP",
.display_get = "\\INFB"
},
@@ -257,14 +248,10 @@ static struct model_data model_conf[END_
{
.name = "L5x",
.mt_mled = "MLED",
-// .mt_wled = "WLED",
-// .wled_status = "\\WRED",
-/* Present, but not controlled by ACPI */
+/* WLED present, but not controlled by ACPI */
.mt_tled = "TLED",
.mt_lcd_switch = "\\Q0D",
.lcd_status = "\\BAOF",
- .brightness_up = "\\Q0C",
- .brightness_down = "\\Q0B",
.brightness_set = "SPLV",
.brightness_get = "GPLV",
.display_set = "SDSP",
@@ -294,8 +281,6 @@ static struct model_data model_conf[END_
.mt_wled = "WLED",
.mt_lcd_switch = "\\Q10",
.lcd_status = "\\GP06",
- .brightness_up = "\\Q0E",
- .brightness_down = "\\Q0F",
.brightness_set = "SPLV",
.brightness_get = "GPLV",
.display_set = "SDSP",
@@ -303,17 +288,26 @@ static struct model_data model_conf[END_
},
{
+ .name = "P30",
+ .mt_wled = "WLED",
+ .mt_lcd_switch = P30_PREFIX "_Q0E",
+ .lcd_status = "\\BKLT",
+ .brightness_up = P30_PREFIX "_Q68",
+ .brightness_down = P30_PREFIX "_Q69",
+ .brightness_get = "GPLV",
+ .display_set = "SDSP",
+ .display_get = "\\DNXT"
+ },
+
+ {
.name = "S1x",
.mt_mled = "MLED",
.mled_status = "\\EMLE",
.mt_wled = "WLED",
.mt_lcd_switch = S1x_PREFIX "Q10" ,
.lcd_status = "\\PNOF",
- .brightness_up = S1x_PREFIX "Q0F",
- .brightness_down = S1x_PREFIX "Q0E",
.brightness_set = "SPLV",
- .brightness_get = "GPLV",
- .brightness_status = "\\BRIT",
+ .brightness_get = "GPLV"
},
{
@@ -323,22 +317,17 @@ static struct model_data model_conf[END_
.mt_lcd_switch = S2x_PREFIX "_Q10",
.lcd_status = "\\BKLI",
.brightness_up = S2x_PREFIX "_Q0B",
- .brightness_down = S2x_PREFIX "_Q0A",
+ .brightness_down = S2x_PREFIX "_Q0A"
},
{
.name = "xxN",
.mt_mled = "MLED",
-// .mt_wled = "WLED",
-// .wled_status = "\\PO33",
-/* Present, but not controlled by ACPI */
+/* WLED present, but not controlled by ACPI */
.mt_lcd_switch = xxN_PREFIX "_Q10",
.lcd_status = "\\BKLT",
- .brightness_up = xxN_PREFIX "_Q0F",
- .brightness_down = xxN_PREFIX "_Q0E",
.brightness_set = "SPLV",
.brightness_get = "GPLV",
- .brightness_status = "\\LBTN",
.display_set = "SDSP",
.display_get = "\\ADVG"
}
@@ -663,6 +652,23 @@ proc_write_lcd(struct file *file, const
}
+static int read_brightness(struct asus_hotk *hotk)
+{
+ int value;
+
+ if(hotk->methods->brightness_get) { /* SPLV/GPLV laptop */
+ if (!read_acpi_int(hotk->handle, hotk->methods->brightness_get,
+ &value))
+ printk(KERN_WARNING "Asus ACPI: Error reading brightness\n");
+ } else if (hotk->methods->brightness_status) { /* For D1 for example */
+ if (!read_acpi_int(NULL, hotk->methods->brightness_status,
+ &value))
+ printk(KERN_WARNING "Asus ACPI: Error reading brightness\n");
+ } else /* No GPLV method */
+ value = hotk->brightness;
+ return value;
+}
+
/*
* Change the brightness level
*/
@@ -679,7 +685,7 @@ static void set_brightness(int value, st
}
/* No SPLV method if we are here, act as appropriate */
- value -= hotk->brightness;
+ value -= read_brightness(hotk);
while (value != 0) {
status = acpi_evaluate_object(NULL, (value > 0) ?
hotk->methods->brightness_up :
@@ -692,23 +698,6 @@ static void set_brightness(int value, st
return;
}
-static int read_brightness(struct asus_hotk *hotk)
-{
- int value;
-
- if(hotk->methods->brightness_get) { /* SPLV/GPLV laptop */
- if (!read_acpi_int(hotk->handle, hotk->methods->brightness_get,
- &value))
- printk(KERN_WARNING "Asus ACPI: Error reading brightness\n");
- } else if (hotk->methods->brightness_status) { /* For D1 for example */
- if (!read_acpi_int(NULL, hotk->methods->brightness_status,
- &value))
- printk(KERN_WARNING "Asus ACPI: Error reading brightness\n");
- } else /* No GPLV method */
- value = hotk->brightness;
- return value;
-}
-
static int
proc_read_brn(char *page, char **start, off_t off, int count, int *eof,
void *data)
@@ -929,12 +918,29 @@ static int __init asus_hotk_get_info(str
return -ENODEV;
}
- /* For testing purposes */
+ /* This needs to be called for some laptops to init properly */
if (!read_acpi_int(hotk->handle, "BSTS", &bsts_result))
printk(KERN_WARNING " Error calling BSTS\n");
else if (bsts_result)
printk(KERN_NOTICE " BSTS called, 0x%02x returned\n", bsts_result);
+ /* Samsung P30 has a device with a valid _HID whose INIT does not
+ * return anything. Catch this one and any similar here */
+ if (buffer.pointer == NULL) {
+ if (asus_info && /* Samsung P30 */
+ strncmp(asus_info->oem_table_id, "ODEM", 4) == 0) {
+ hotk->model = P30;
+ printk(KERN_NOTICE " Samsung P30 detected, supported\n");
+ } else {
+ hotk->model = M2E;
+ printk(KERN_WARNING " no string returned by INIT\n");
+ printk(KERN_WARNING " trying default values, supply "
+ "the developers with your DSDT\n");
+ }
+ hotk->methods = &model_conf[hotk->model];
+ return AE_OK;
+ }
+
model = (union acpi_object *) buffer.pointer;
if (model->type == ACPI_TYPE_STRING) {
printk(KERN_NOTICE " %s model detected, ", model->string.pointer);
@@ -953,12 +959,14 @@ static int __init asus_hotk_get_info(str
hotk->model = L8L;
else if (strncmp(model->string.pointer, "M2N", 3) == 0 ||
strncmp(model->string.pointer, "M3N", 3) == 0 ||
+ strncmp(model->string.pointer, "M6N", 3) == 0 ||
strncmp(model->string.pointer, "S1N", 3) == 0 ||
strncmp(model->string.pointer, "S5N", 3) == 0)
hotk->model = xxN;
else if (strncmp(model->string.pointer, "M1", 2) == 0)
hotk->model = M1A;
- else if (strncmp(model->string.pointer, "M2", 2) == 0)
+ else if (strncmp(model->string.pointer, "M2", 2) == 0 ||
+ strncmp(model->string.pointer, "L4E", 3) == 0)
hotk->model = M2E;
else if (strncmp(model->string.pointer, "L2", 2) == 0)
hotk->model = L2D;
@@ -994,6 +1002,13 @@ static int __init asus_hotk_get_info(str
else if (strncmp(model->string.pointer, "S5N", 3) == 0)
hotk->methods->mt_mled = NULL;
/* S5N has no MLED */
+ else if (strncmp(model->string.pointer, "M6N", 3) == 0) {
+ hotk->methods->display_get = NULL; //TODO
+ hotk->methods->lcd_status = "\\_SB.BKLT";
+ hotk->methods->mt_wled = "WLED";
+ hotk->methods->wled_status = "\\_SB.PCI0.SBRG.SG13";
+ /* M6N differs slightly and has a usable WLED */
+ }
else if (asus_info) {
if (strncmp(asus_info->oem_table_id, "L1", 2) == 0)
hotk->methods->mled_status = NULL;
next reply other threads:[~2004-03-23 0:01 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-03-23 0:01 Karol Kozimor [this message]
[not found] ` <20040323000143.GA13711-DETuoxkZsSqrDJvtcaxF/A@public.gmane.org>
2004-03-23 9:46 ` [PATCH] acpi4asus update Sebastian Henschel
[not found] ` <20040323094627.GA3413-5sK/Rx+du8M@public.gmane.org>
2004-03-23 12:27 ` Karol Kozimor
[not found] ` <20040323122735.GA18934-DETuoxkZsSqrDJvtcaxF/A@public.gmane.org>
2004-03-23 14:50 ` Sebastian Henschel
-- strict thread matches above, loose matches on Subject: below --
2004-01-27 22:13 Karol Kozimor
[not found] ` <20040127221341.GA19793-DETuoxkZsSqrDJvtcaxF/A@public.gmane.org>
2004-02-07 7:19 ` Len Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040323000143.GA13711@hell.org.pl \
--to=sziwan-detuoxkzssqrdjvtcaxf/a@public.gmane.org \
--cc=acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.