Skip to contentSkip to conversation

Repost: asus strict model checking

PATCH In review Thomas Renninger 3 participants 10 messages Aug 1, 2006 – Aug 3, 2006 ACPI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Repost: asus strict model checking

These are some minor patches I already posted...
All are patched against 2.6.18-rc2.

Do only load asus acpi module when model is listed

Description: There are machines that have a device with HID: ATK0100 (Asus) and a device with HID SNY5001 (Sony). Bad things happen if sony and asus driver are loaded there.

Reference: https://bugzilla.novell.org/show_bug.cgi?id=166920

 drivers/acpi/asus_acpi.c |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)
drivers/acpi/asus_acpi.c +20 -5
Index: linux-2.6.18-rc2/drivers/acpi/asus_acpi.c
===================================================================
@@ -77,10 +77,14 @@ MODULE_LICENSE("GPL");
 
 static uid_t asus_uid;
 static gid_t asus_gid;
+static int force;
 module_param(asus_uid, uint, 0);
 MODULE_PARM_DESC(asus_uid, "UID for entries in /proc/acpi/asus.\n");
 module_param(asus_gid, uint, 0);
 MODULE_PARM_DESC(asus_gid, "GID for entries in /proc/acpi/asus.\n");
+module_param(force, int, 0);
+MODULE_PARM_DESC(force, "Force loading of the module even if the laptop"
+		 "model is not listed.\n");
 
 /* For each model, all features implemented, 
  * those marked with R are relative to HOTK, A for absolute */
@@ -1171,11 +1175,22 @@ static int asus_hotk_get_info(void)
 			printk(KERN_NOTICE
 			       "  Samsung P30 detected, supported\n");
 		} else {
-			hotk->model = M2E;
-			printk(KERN_NOTICE "  unsupported model %s, trying "
-			       "default values\n", string);
-			printk(KERN_NOTICE
-			       "  send /proc/acpi/dsdt to the developers\n");
+			if (force){
+				hotk->model = M2E;
+				printk(KERN_NOTICE "  unsupported model"
+				       "%s, trying default values\n",
+				       string);
+				printk(KERN_NOTICE
+				       "  send /proc/acpi/dsdt"
+				       " to the developers\n");
+			}
+			else{
+				printk(KERN_NOTICE "  %s unsupported model %s,"
+				       " aborting.\nForce loading with force=1"
+				       " parameter\n",
+				       ACPI_HOTK_NAME, string);
+				return -ENODEV;
+			}
 		}
 		hotk->methods = &model_conf[hotk->model];
 		return AE_OK;

Do only load asus acpi module when model is listed

Reference: https://bugzilla.novell.org/show_bug.cgi?id=166920

 drivers/acpi/asus_acpi.c |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)
drivers/acpi/asus_acpi.c +20 -5
Index: linux-2.6.18-rc2/drivers/acpi/asus_acpi.c
===================================================================
@@ -77,10 +77,14 @@ MODULE_LICENSE("GPL");
 
 static uid_t asus_uid;
 static gid_t asus_gid;
+static int force;
 module_param(asus_uid, uint, 0);
 MODULE_PARM_DESC(asus_uid, "UID for entries in /proc/acpi/asus.\n");
 module_param(asus_gid, uint, 0);
 MODULE_PARM_DESC(asus_gid, "GID for entries in /proc/acpi/asus.\n");
+module_param(force, int, 0);
+MODULE_PARM_DESC(force, "Force loading of the module even if the laptop"
+		 "model is not listed.\n");
 
 /* For each model, all features implemented, 
  * those marked with R are relative to HOTK, A for absolute */
@@ -1171,11 +1175,22 @@ static int asus_hotk_get_info(void)
 			printk(KERN_NOTICE
 			       "  Samsung P30 detected, supported\n");
 		} else {
-			hotk->model = M2E;
-			printk(KERN_NOTICE "  unsupported model %s, trying "
-			       "default values\n", string);
-			printk(KERN_NOTICE
-			       "  send /proc/acpi/dsdt to the developers\n");
+			if (force){
+				hotk->model = M2E;
+				printk(KERN_NOTICE "  unsupported model"
+				       "%s, trying default values\n",
+				       string);
+				printk(KERN_NOTICE
+				       "  send /proc/acpi/dsdt"
+				       " to the developers\n");
+			}
+			else{
+				printk(KERN_NOTICE "  %s unsupported model %s,"
+				       " aborting.\nForce loading with force=1"
+				       " parameter\n",
+				       ACPI_HOTK_NAME, string);
+				return -ENODEV;
+			}
 		}
 		hotk->methods = &model_conf[hotk->model];
 		return AE_OK;
#1 lore raw

Thomas,
Is it possible to use DMI interface for this kind of system identification?

Regards,
Alex.

Quoted 66 lines · Thomas Renninger

These are some minor patches I already posted...
All are patched against 2.6.18-rc2.

Do only load asus acpi module when model is listed

Description: There are machines that have a device with HID: ATK0100 (Asus) and a device with HID SNY5001 (Sony). Bad things happen if sony and asus driver are loaded there.

Reference: https://bugzilla.novell.org/show_bug.cgi?id=166920

 drivers/acpi/asus_acpi.c |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6.18-rc2/drivers/acpi/asus_acpi.c
===================================================================

drivers/acpi/asus_acpi.c +20 -5
@@ -77,10 +77,14 @@ MODULE_LICENSE("GPL");
 
 static uid_t asus_uid;
 static gid_t asus_gid;
+static int force;
 module_param(asus_uid, uint, 0);
 MODULE_PARM_DESC(asus_uid, "UID for entries in /proc/acpi/asus.\n");
 module_param(asus_gid, uint, 0);
 MODULE_PARM_DESC(asus_gid, "GID for entries in /proc/acpi/asus.\n");
+module_param(force, int, 0);
+MODULE_PARM_DESC(force, "Force loading of the module even if the laptop"
+		 "model is not listed.\n");
 
 /* For each model, all features implemented, 
  * those marked with R are relative to HOTK, A for absolute */
@@ -1171,11 +1175,22 @@ static int asus_hotk_get_info(void)
 			printk(KERN_NOTICE
 			       "  Samsung P30 detected, supported\n");
 		} else {
-			hotk->model = M2E;
-			printk(KERN_NOTICE "  unsupported model %s, trying "
-			       "default values\n", string);
-			printk(KERN_NOTICE
-			       "  send /proc/acpi/dsdt to the developers\n");
+			if (force){
+				hotk->model = M2E;
+				printk(KERN_NOTICE "  unsupported model"
+				       "%s, trying default values\n",
+				       string);
+				printk(KERN_NOTICE
+				       "  send /proc/acpi/dsdt"
+				       " to the developers\n");
+			}
+			else{
+				printk(KERN_NOTICE "  %s unsupported model %s,"
+				       " aborting.\nForce loading with force=1"
+				       " parameter\n",
+				       ACPI_HOTK_NAME, string);
+				return -ENODEV;
+			}
 		}
 		hotk->methods = &model_conf[hotk->model];
 		return AE_OK;
#2 lore raw
Quoted 2 lines · Alexey Starikovskiy

Thomas,
Is it possible to use DMI interface for this kind of system identification?

IMO it should be sufficient to use the already provided Asus hotkey model identification.
Using dmidecode to check for Asus and then fallback to the default model if the model is unknown (which does not work for a lot new Asus anyway?) sounds like the wrong way for me.
Better to have a not supported system (it's easy to white list an additional model) than to fall back to default and have a broken system (reading/writing to wrong EC registers,..).

Thomas

Quoted 70 lines

Regards,
Alex.

Quoted 66 lines · Thomas Renninger

These are some minor patches I already posted...
All are patched against 2.6.18-rc2.

Do only load asus acpi module when model is listed

Description: There are machines that have a device with HID: ATK0100 (Asus) and a device with HID SNY5001 (Sony). Bad things happen if sony and asus driver are loaded there.

Reference: https://bugzilla.novell.org/show_bug.cgi?id=166920

 drivers/acpi/asus_acpi.c |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6.18-rc2/drivers/acpi/asus_acpi.c
===================================================================

drivers/acpi/asus_acpi.c +20 -5
@@ -77,10 +77,14 @@ MODULE_LICENSE("GPL");
 
 static uid_t asus_uid;
 static gid_t asus_gid;
+static int force;
 module_param(asus_uid, uint, 0);
 MODULE_PARM_DESC(asus_uid, "UID for entries in /proc/acpi/asus.\n");
 module_param(asus_gid, uint, 0);
 MODULE_PARM_DESC(asus_gid, "GID for entries in /proc/acpi/asus.\n");
+module_param(force, int, 0);
+MODULE_PARM_DESC(force, "Force loading of the module even if the laptop"
+		 "model is not listed.\n");
 
 /* For each model, all features implemented, 
  * those marked with R are relative to HOTK, A for absolute */
@@ -1171,11 +1175,22 @@ static int asus_hotk_get_info(void)
 			printk(KERN_NOTICE
 			       "  Samsung P30 detected, supported\n");
 		} else {
-			hotk->model = M2E;
-			printk(KERN_NOTICE "  unsupported model %s, trying "
-			       "default values\n", string);
-			printk(KERN_NOTICE
-			       "  send /proc/acpi/dsdt to the developers\n");
+			if (force){
+				hotk->model = M2E;
+				printk(KERN_NOTICE "  unsupported model"
+				       "%s, trying default values\n",
+				       string);
+				printk(KERN_NOTICE
+				       "  send /proc/acpi/dsdt"
+				       " to the developers\n");
+			}
+			else{
+				printk(KERN_NOTICE "  %s unsupported model %s,"
+				       " aborting.\nForce loading with force=1"
+				       " parameter\n",
+				       ACPI_HOTK_NAME, string);
+				return -ENODEV;
+			}
 		}
 		hotk->methods = &model_conf[hotk->model];
 		return AE_OK;
#3 lore raw

Checks for Samsung P30/P35 are real hacks IMHO.

Quoted 91 lines · Thomas Renninger
Quoted 2 lines · Alexey Starikovskiy

Thomas,
Is it possible to use DMI interface for this kind of system identification?

IMO it should be sufficient to use the already provided Asus hotkey model identification.
Using dmidecode to check for Asus and then fallback to the default model if the model is unknown (which does not work for a lot new Asus anyway?) sounds like the wrong way for me.
Better to have a not supported system (it's easy to white list an additional model) than to fall back to default and have a broken system (reading/writing to wrong EC registers,..).

Thomas

Quoted 62 lines

Regards,
Alex.

Quoted 58 lines · Thomas Renninger

These are some minor patches I already posted...
All are patched against 2.6.18-rc2.

Do only load asus acpi module when model is listed

Description: There are machines that have a device with HID: ATK0100 (Asus) and a device with HID SNY5001 (Sony). Bad things happen if sony and asus driver are loaded there.

Reference: https://bugzilla.novell.org/show_bug.cgi?id=166920

 drivers/acpi/asus_acpi.c |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6.18-rc2/drivers/acpi/asus_acpi.c
===================================================================

drivers/acpi/asus_acpi.c +16 -5
@@ -77,10 +77,14 @@ MODULE_LICENSE("GPL");
 
 static uid_t asus_uid;
 static gid_t asus_gid;
+static int force;
 module_param(asus_uid, uint, 0);
 MODULE_PARM_DESC(asus_uid, "UID for entries in /proc/acpi/asus.\n");
 module_param(asus_gid, uint, 0);
 MODULE_PARM_DESC(asus_gid, "GID for entries in /proc/acpi/asus.\n");
+module_param(force, int, 0);
+MODULE_PARM_DESC(force, "Force loading of the module even if the laptop"
+		 "model is not listed.\n");
 
 /* For each model, all features implemented, 
  * those marked with R are relative to HOTK, A for absolute */
@@ -1171,11 +1175,22 @@ static int asus_hotk_get_info(void)
 			printk(KERN_NOTICE
 			       "  Samsung P30 detected, supported\n");
 		} else {
-			hotk->model = M2E;
-			printk(KERN_NOTICE "  unsupported model %s, trying "
-			       "default values\n", string);
-			printk(KERN_NOTICE
-			       "  send /proc/acpi/dsdt to the developers\n");
+			if (force){
+				hotk->model = M2E;
+				printk(KERN_NOTICE "  unsupported model"
+				       "%s, trying default values\n",
+				       string);
+				printk(KERN_NOTICE
+				       "  send /proc/acpi/dsdt"
+				       " to the developers\n");
+			}
+			else{
+				printk(KERN_NOTICE "  %s unsupported model %s,"
+				       " aborting.\nForce loading with force=1"
Quoted 8 lines

drivers/acpi/asus_acpi.c static int asus_hotk_get_info(void) · line 1196

Quoted 8 lines
drivers/acpi/asus_acpi.c +4 -0
+				       " parameter\n",
+				       ACPI_HOTK_NAME, string);
+				return -ENODEV;
+			}
 		}
 		hotk->methods = &model_conf[hotk->model];
 		return AE_OK;

-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#4 lore raw
Quoted 1 line · Alexey Starikovskiy

Checks for Samsung P30/P35 are real hacks IMHO.

Why?

Thomas

Quoted 93 lines
Quoted 91 lines · Thomas Renninger
Quoted 2 lines · Alexey Starikovskiy

Thomas,
Is it possible to use DMI interface for this kind of system identification?

IMO it should be sufficient to use the already provided Asus hotkey model identification.
Using dmidecode to check for Asus and then fallback to the default model if the model is unknown (which does not work for a lot new Asus anyway?) sounds like the wrong way for me.
Better to have a not supported system (it's easy to white list an additional model) than to fall back to default and have a broken system (reading/writing to wrong EC registers,..).

Thomas

Quoted 62 lines

Regards,
Alex.

Quoted 58 lines · Thomas Renninger

These are some minor patches I already posted...
All are patched against 2.6.18-rc2.

Do only load asus acpi module when model is listed

Description: There are machines that have a device with HID: ATK0100 (Asus) and a device with HID SNY5001 (Sony). Bad things happen if sony and asus driver are loaded there.

Reference: https://bugzilla.novell.org/show_bug.cgi?id=166920

 drivers/acpi/asus_acpi.c |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

Index: linux-2.6.18-rc2/drivers/acpi/asus_acpi.c
===================================================================

drivers/acpi/asus_acpi.c +16 -5
@@ -77,10 +77,14 @@ MODULE_LICENSE("GPL");
 
 static uid_t asus_uid;
 static gid_t asus_gid;
+static int force;
 module_param(asus_uid, uint, 0);
 MODULE_PARM_DESC(asus_uid, "UID for entries in /proc/acpi/asus.\n");
 module_param(asus_gid, uint, 0);
 MODULE_PARM_DESC(asus_gid, "GID for entries in /proc/acpi/asus.\n");
+module_param(force, int, 0);
+MODULE_PARM_DESC(force, "Force loading of the module even if the laptop"
+		 "model is not listed.\n");
 
 /* For each model, all features implemented, 
  * those marked with R are relative to HOTK, A for absolute */
@@ -1171,11 +1175,22 @@ static int asus_hotk_get_info(void)
 			printk(KERN_NOTICE
 			       "  Samsung P30 detected, supported\n");
 		} else {
-			hotk->model = M2E;
-			printk(KERN_NOTICE "  unsupported model %s, trying "
-			       "default values\n", string);
-			printk(KERN_NOTICE
-			       "  send /proc/acpi/dsdt to the developers\n");
+			if (force){
+				hotk->model = M2E;
+				printk(KERN_NOTICE "  unsupported model"
+				       "%s, trying default values\n",
+				       string);
+				printk(KERN_NOTICE
+				       "  send /proc/acpi/dsdt"
+				       " to the developers\n");
+			}
+			else{
+				printk(KERN_NOTICE "  %s unsupported model %s,"
+				       " aborting.\nForce loading with force=1"
Quoted 8 lines

drivers/acpi/asus_acpi.c static int asus_hotk_get_info(void) · line 1196

Quoted 8 lines
drivers/acpi/asus_acpi.c +4 -0
+				       " parameter\n",
+				       ACPI_HOTK_NAME, string);
+				return -ENODEV;
+			}
 		}
 		hotk->methods = &model_conf[hotk->model];
 		return AE_OK;

-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#5 lore raw
Quoted 3 lines · Thomas Renninger
Quoted 1 line · Alexey Starikovskiy

Checks for Samsung P30/P35 are real hacks IMHO.

Why?

Because this DSDT signature could appear on any machine, and has nothing to do with ASUS or Samsung.

#6 lore raw
Quoted 6 lines · Alexey Starikovskiy
Quoted 3 lines · Thomas Renninger
Quoted 1 line · Alexey Starikovskiy

Checks for Samsung P30/P35 are real hacks IMHO.

Why?

Because this DSDT signature could appear on any machine, and has nothing to do with ASUS or Samsung.

The string seems to define how the ATKD ACPI device has to be used. If this Device pops up on other machines than Asus it's fine. AFAIK the mappings from the string returned by ATKD.INIT and how the device has to be used then works fine.

It's probably much better than the way done on Thinkpads:
If we have ACPI func xy we assume to have an A21 or similar and use this set of function/variables.

I consider this an ugly hack:
IBM_HANDLE(ec, root, "\\_SB.PCI0.ISA.EC0", /* 240, 240x */

	   "\\_SB.PCI.ISA.EC",	/* 570 */
	   "\\_SB.PCI0.ISA0.EC0",	/* 600e/x, 770e, 770x */
	   "\\_SB.PCI0.ISA.EC",	/* A21e, A2xm/p, T20-22, X20-21 */
	   "\\_SB.PCI0.AD4S.EC0",	/* i1400, R30 */
	   "\\_SB.PCI0.ICH3.EC0",	/* R31 */
	   "\\_SB.PCI0.LPC.EC",	/* all others */

On Asus we should be happy ATKD.INIT is returning something useful and one can guess (be sure?) which ACPI functions to use for what. Checking for that string and making use of different ACPI variable/method names seems to be intended and looks like the defined way this should be used. As long as this is not officially specified (by ACPI consortium and/or vendors) and such special Devices exist, it is the best we can do.

Thomas

#7 lore raw

I was referring to this peace of artwork(asus_info is pointer to DSDT header):
------------------------------------------------------------------------------

        if (hotk->model == END_MODEL) { /* match failed */
                if (asus_info &&
                    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_NOTICE "  unsupported model %s, trying "
                               "default values\n", string);
                        printk(KERN_NOTICE
                               "  send /proc/acpi/dsdt to the developers\n");
                }
                hotk->methods = &model_conf[hotk->model];
                return AE_OK;
        }

------------------------------------------------------------------------------

Quoted 42 lines · Thomas Renninger
Quoted 6 lines · Alexey Starikovskiy
Quoted 3 lines · Thomas Renninger
Quoted 1 line · Alexey Starikovskiy

Checks for Samsung P30/P35 are real hacks IMHO.

Why?

Because this DSDT signature could appear on any machine, and has nothing to do with ASUS or Samsung.

The string seems to define how the ATKD ACPI device has to be used. If this Device pops up on other machines than Asus it's fine. AFAIK the mappings from the string returned by ATKD.INIT and how the device has to be used then works fine.

It's probably much better than the way done on Thinkpads:
If we have ACPI func xy we assume to have an A21 or similar and use this set of function/variables.

I consider this an ugly hack:
IBM_HANDLE(ec, root, "\\_SB.PCI0.ISA.EC0", /* 240, 240x */

	   "\\_SB.PCI.ISA.EC",	/* 570 */
	   "\\_SB.PCI0.ISA0.EC0",	/* 600e/x, 770e, 770x */
	   "\\_SB.PCI0.ISA.EC",	/* A21e, A2xm/p, T20-22, X20-21 */
	   "\\_SB.PCI0.AD4S.EC0",	/* i1400, R30 */
	   "\\_SB.PCI0.ICH3.EC0",	/* R31 */
	   "\\_SB.PCI0.LPC.EC",	/* all others */

On Asus we should be happy ATKD.INIT is returning something useful and one can guess (be sure?) which ACPI functions to use for what. Checking for that string and making use of different ACPI variable/method names seems to be intended and looks like the defined way this should be used. As long as this is not officially specified (by ACPI consortium and/or vendors) and such special Devices exist, it is the best we can do.

Thomas

-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#8 lore raw
Quoted 6 lines · Alexey Starikovskiy

I was referring to this peace of artwork(asus_info is pointer to DSDT header):
------------------------------------------------------------------------------

        if (hotk->model == END_MODEL) { /* match failed */
                if (asus_info &&
                    strncmp(asus_info->oem_table_id, "ODEM", 4) == 0) {
                        hotk->model = P30;

Oh yes, you are right this is awful.

Thomas