|
@@ -50,7 +50,7 @@
|
|
|
*/
|
|
|
#undef START_IN_KERNEL_MODE
|
|
|
|
|
|
-#define DRV_VER "0.5.26"
|
|
|
+#define DRV_VER "0.7.0"
|
|
|
|
|
|
/*
|
|
|
* According to the Atom N270 datasheet,
|
|
@@ -119,116 +119,152 @@ struct fancmd {
|
|
|
u8 cmd_auto;
|
|
|
};
|
|
|
|
|
|
+struct manualcmd {
|
|
|
+ u8 mreg;
|
|
|
+ u8 moff;
|
|
|
+};
|
|
|
+
|
|
|
+/* default register and command to disable fan in manual mode */
|
|
|
+static const struct manualcmd mcmd = {
|
|
|
+ .mreg = 0x94,
|
|
|
+ .moff = 0xff,
|
|
|
+};
|
|
|
+
|
|
|
/* BIOS settings */
|
|
|
-struct bios_settings_t {
|
|
|
+struct bios_settings {
|
|
|
const char *vendor;
|
|
|
const char *product;
|
|
|
const char *version;
|
|
|
- unsigned char fanreg;
|
|
|
- unsigned char tempreg;
|
|
|
+ u8 fanreg;
|
|
|
+ u8 tempreg;
|
|
|
struct fancmd cmd;
|
|
|
+ int mcmd_enable;
|
|
|
};
|
|
|
|
|
|
/* Register addresses and values for different BIOS versions */
|
|
|
-static const struct bios_settings_t bios_tbl[] = {
|
|
|
+static const struct bios_settings bios_tbl[] = {
|
|
|
/* AOA110 */
|
|
|
- {"Acer", "AOA110", "v0.3109", 0x55, 0x58, {0x1f, 0x00} },
|
|
|
- {"Acer", "AOA110", "v0.3114", 0x55, 0x58, {0x1f, 0x00} },
|
|
|
- {"Acer", "AOA110", "v0.3301", 0x55, 0x58, {0xaf, 0x00} },
|
|
|
- {"Acer", "AOA110", "v0.3304", 0x55, 0x58, {0xaf, 0x00} },
|
|
|
- {"Acer", "AOA110", "v0.3305", 0x55, 0x58, {0xaf, 0x00} },
|
|
|
- {"Acer", "AOA110", "v0.3307", 0x55, 0x58, {0xaf, 0x00} },
|
|
|
- {"Acer", "AOA110", "v0.3308", 0x55, 0x58, {0x21, 0x00} },
|
|
|
- {"Acer", "AOA110", "v0.3309", 0x55, 0x58, {0x21, 0x00} },
|
|
|
- {"Acer", "AOA110", "v0.3310", 0x55, 0x58, {0x21, 0x00} },
|
|
|
+ {"Acer", "AOA110", "v0.3109", 0x55, 0x58, {0x1f, 0x00}, 0},
|
|
|
+ {"Acer", "AOA110", "v0.3114", 0x55, 0x58, {0x1f, 0x00}, 0},
|
|
|
+ {"Acer", "AOA110", "v0.3301", 0x55, 0x58, {0xaf, 0x00}, 0},
|
|
|
+ {"Acer", "AOA110", "v0.3304", 0x55, 0x58, {0xaf, 0x00}, 0},
|
|
|
+ {"Acer", "AOA110", "v0.3305", 0x55, 0x58, {0xaf, 0x00}, 0},
|
|
|
+ {"Acer", "AOA110", "v0.3307", 0x55, 0x58, {0xaf, 0x00}, 0},
|
|
|
+ {"Acer", "AOA110", "v0.3308", 0x55, 0x58, {0x21, 0x00}, 0},
|
|
|
+ {"Acer", "AOA110", "v0.3309", 0x55, 0x58, {0x21, 0x00}, 0},
|
|
|
+ {"Acer", "AOA110", "v0.3310", 0x55, 0x58, {0x21, 0x00}, 0},
|
|
|
/* AOA150 */
|
|
|
- {"Acer", "AOA150", "v0.3114", 0x55, 0x58, {0x1f, 0x00} },
|
|
|
- {"Acer", "AOA150", "v0.3301", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Acer", "AOA150", "v0.3304", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Acer", "AOA150", "v0.3305", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Acer", "AOA150", "v0.3307", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Acer", "AOA150", "v0.3308", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Acer", "AOA150", "v0.3309", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Acer", "AOA150", "v0.3310", 0x55, 0x58, {0x20, 0x00} },
|
|
|
+ {"Acer", "AOA150", "v0.3114", 0x55, 0x58, {0x1f, 0x00}, 0},
|
|
|
+ {"Acer", "AOA150", "v0.3301", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Acer", "AOA150", "v0.3304", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Acer", "AOA150", "v0.3305", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Acer", "AOA150", "v0.3307", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Acer", "AOA150", "v0.3308", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Acer", "AOA150", "v0.3309", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Acer", "AOA150", "v0.3310", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
/* LT1005u */
|
|
|
- {"Acer", "LT-10Q", "v0.3310", 0x55, 0x58, {0x20, 0x00} },
|
|
|
+ {"Acer", "LT-10Q", "v0.3310", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
/* Acer 1410 */
|
|
|
- {"Acer", "Aspire 1410", "v0.3108", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v0.3113", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v0.3115", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v0.3117", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v0.3119", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v0.3120", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v1.3204", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v1.3303", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v1.3308", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v1.3310", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1410", "v1.3314", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
+ {"Acer", "Aspire 1410", "v0.3108", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v0.3113", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v0.3115", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v0.3117", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v0.3119", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v0.3120", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v1.3204", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v1.3303", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v1.3308", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v1.3310", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1410", "v1.3314", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
/* Acer 1810xx */
|
|
|
- {"Acer", "Aspire 1810TZ", "v0.3108", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v0.3108", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v0.3113", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v0.3113", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v0.3115", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v0.3115", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v0.3117", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v0.3117", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v0.3119", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v0.3119", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v0.3120", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v0.3120", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v1.3204", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v1.3204", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v1.3303", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v1.3303", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v1.3308", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v1.3308", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v1.3310", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v1.3310", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810TZ", "v1.3314", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1810T", "v1.3314", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
+ {"Acer", "Aspire 1810TZ", "v0.3108", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v0.3108", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v0.3113", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v0.3113", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v0.3115", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v0.3115", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v0.3117", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v0.3117", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v0.3119", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v0.3119", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v0.3120", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v0.3120", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v1.3204", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v1.3204", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v1.3303", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v1.3303", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v1.3308", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v1.3308", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v1.3310", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v1.3310", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810TZ", "v1.3314", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1810T", "v1.3314", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ /* Acer 5755G */
|
|
|
+ {"Acer", "Aspire 5755G", "V1.20", 0xab, 0xb4, {0x00, 0x08}, 0},
|
|
|
+ {"Acer", "Aspire 5755G", "V1.21", 0xab, 0xb3, {0x00, 0x08}, 0},
|
|
|
+ /* Acer 521 */
|
|
|
+ {"Acer", "AO521", "V1.11", 0x55, 0x58, {0x1f, 0x00}, 0},
|
|
|
/* Acer 531 */
|
|
|
- {"Acer", "AO531h", "v0.3104", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Acer", "AO531h", "v0.3201", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Acer", "AO531h", "v0.3304", 0x55, 0x58, {0x20, 0x00} },
|
|
|
+ {"Acer", "AO531h", "v0.3104", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Acer", "AO531h", "v0.3201", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Acer", "AO531h", "v0.3304", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
/* Acer 751 */
|
|
|
- {"Acer", "AO751h", "V0.3212", 0x55, 0x58, {0x21, 0x00} },
|
|
|
+ {"Acer", "AO751h", "V0.3206", 0x55, 0x58, {0x21, 0x00}, 0},
|
|
|
+ {"Acer", "AO751h", "V0.3212", 0x55, 0x58, {0x21, 0x00}, 0},
|
|
|
+ /* Acer 753 */
|
|
|
+ {"Acer", "Aspire One 753", "V1.24", 0x93, 0xac, {0x14, 0x04}, 1},
|
|
|
/* Acer 1825 */
|
|
|
- {"Acer", "Aspire 1825PTZ", "V1.3118", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Acer", "Aspire 1825PTZ", "V1.3127", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
+ {"Acer", "Aspire 1825PTZ", "V1.3118", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Acer", "Aspire 1825PTZ", "V1.3127", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ /* Acer Extensa 5420 */
|
|
|
+ {"Acer", "Extensa 5420", "V1.17", 0x93, 0xac, {0x14, 0x04}, 1},
|
|
|
+ /* Acer Aspire 5315 */
|
|
|
+ {"Acer", "Aspire 5315", "V1.19", 0x93, 0xac, {0x14, 0x04}, 1},
|
|
|
+ /* Acer Aspire 5739 */
|
|
|
+ {"Acer", "Aspire 5739G", "V1.3311", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
/* Acer TravelMate 7730 */
|
|
|
- {"Acer", "TravelMate 7730G", "v0.3509", 0x55, 0x58, {0xaf, 0x00} },
|
|
|
+ {"Acer", "TravelMate 7730G", "v0.3509", 0x55, 0x58, {0xaf, 0x00}, 0},
|
|
|
+ /* Acer TravelMate TM8573T */
|
|
|
+ {"Acer", "TM8573T", "V1.13", 0x93, 0xa8, {0x14, 0x04}, 1},
|
|
|
/* Gateway */
|
|
|
- {"Gateway", "AOA110", "v0.3103", 0x55, 0x58, {0x21, 0x00} },
|
|
|
- {"Gateway", "AOA150", "v0.3103", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Gateway", "LT31", "v1.3103", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Gateway", "LT31", "v1.3201", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Gateway", "LT31", "v1.3302", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Gateway", "LT31", "v1.3303t", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
+ {"Gateway", "AOA110", "v0.3103", 0x55, 0x58, {0x21, 0x00}, 0},
|
|
|
+ {"Gateway", "AOA150", "v0.3103", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Gateway", "LT31", "v1.3103", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Gateway", "LT31", "v1.3201", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Gateway", "LT31", "v1.3302", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Gateway", "LT31", "v1.3303t", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
/* Packard Bell */
|
|
|
- {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x00} },
|
|
|
- {"Packard Bell", "DOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Packard Bell", "AOA110", "v0.3105", 0x55, 0x58, {0x21, 0x00} },
|
|
|
- {"Packard Bell", "AOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00} },
|
|
|
- {"Packard Bell", "ENBFT", "V1.3118", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "ENBFT", "V1.3127", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMU", "v1.3303", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMU", "v0.3120", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMU", "v0.3108", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMU", "v0.3113", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMU", "v0.3115", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMU", "v0.3117", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMU", "v0.3119", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMU", "v1.3204", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMA", "v1.3201", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMA", "v1.3302", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTMA", "v1.3303t", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
- {"Packard Bell", "DOTVR46", "v1.3308", 0x55, 0x58, {0x9e, 0x00} },
|
|
|
+ {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Packard Bell", "AOA110", "v0.3105", 0x55, 0x58, {0x21, 0x00}, 0},
|
|
|
+ {"Packard Bell", "AOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00}, 0},
|
|
|
+ {"Packard Bell", "ENBFT", "V1.3118", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "ENBFT", "V1.3127", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMU", "v1.3303", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMU", "v0.3120", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMU", "v0.3108", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMU", "v0.3113", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMU", "v0.3115", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMU", "v0.3117", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMU", "v0.3119", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMU", "v1.3204", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMA", "v1.3201", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMA", "v1.3302", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTMA", "v1.3303t", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
+ {"Packard Bell", "DOTVR46", "v1.3308", 0x55, 0x58, {0x9e, 0x00}, 0},
|
|
|
/* pewpew-terminator */
|
|
|
- {"", "", "", 0, 0, {0, 0} }
|
|
|
+ {"", "", "", 0, 0, {0, 0}, 0}
|
|
|
};
|
|
|
|
|
|
-static const struct bios_settings_t *bios_cfg __read_mostly;
|
|
|
+static const struct bios_settings *bios_cfg __read_mostly;
|
|
|
+
|
|
|
+/*
|
|
|
+ * this struct is used to instruct thermal layer to use bang_bang instead of
|
|
|
+ * default governor for acerhdf
|
|
|
+ */
|
|
|
+static struct thermal_zone_params acerhdf_zone_params = {
|
|
|
+ .governor_name = "bang_bang",
|
|
|
+};
|
|
|
|
|
|
static int acerhdf_get_temp(int *temp)
|
|
|
{
|
|
@@ -275,6 +311,12 @@ static void acerhdf_change_fanstate(int state)
|
|
|
fanstate = state;
|
|
|
|
|
|
ec_write(bios_cfg->fanreg, cmd);
|
|
|
+
|
|
|
+ if (bios_cfg->mcmd_enable && state == ACERHDF_FAN_OFF) {
|
|
|
+ if (verbose)
|
|
|
+ pr_notice("turning off fan manually\n");
|
|
|
+ ec_write(mcmd.mreg, mcmd.moff);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void acerhdf_check_param(struct thermal_zone_device *thermal)
|
|
@@ -401,6 +443,21 @@ static int acerhdf_get_trip_type(struct thermal_zone_device *thermal, int trip,
|
|
|
{
|
|
|
if (trip == 0)
|
|
|
*type = THERMAL_TRIP_ACTIVE;
|
|
|
+ else if (trip == 1)
|
|
|
+ *type = THERMAL_TRIP_CRITICAL;
|
|
|
+ else
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int acerhdf_get_trip_hyst(struct thermal_zone_device *thermal, int trip,
|
|
|
+ unsigned long *temp)
|
|
|
+{
|
|
|
+ if (trip != 0)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ *temp = fanon - fanoff;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -410,6 +467,10 @@ static int acerhdf_get_trip_temp(struct thermal_zone_device *thermal, int trip,
|
|
|
{
|
|
|
if (trip == 0)
|
|
|
*temp = fanon;
|
|
|
+ else if (trip == 1)
|
|
|
+ *temp = ACERHDF_TEMP_CRIT;
|
|
|
+ else
|
|
|
+ return -EINVAL;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -429,6 +490,7 @@ static struct thermal_zone_device_ops acerhdf_dev_ops = {
|
|
|
.get_mode = acerhdf_get_mode,
|
|
|
.set_mode = acerhdf_set_mode,
|
|
|
.get_trip_type = acerhdf_get_trip_type,
|
|
|
+ .get_trip_hyst = acerhdf_get_trip_hyst,
|
|
|
.get_trip_temp = acerhdf_get_trip_temp,
|
|
|
.get_crit_temp = acerhdf_get_crit_temp,
|
|
|
};
|
|
@@ -481,9 +543,7 @@ static int acerhdf_set_cur_state(struct thermal_cooling_device *cdev,
|
|
|
}
|
|
|
|
|
|
if (state == 0) {
|
|
|
- /* turn fan off only if below fanoff temperature */
|
|
|
- if ((cur_state == ACERHDF_FAN_AUTO) &&
|
|
|
- (cur_temp < fanoff))
|
|
|
+ if (cur_state == ACERHDF_FAN_AUTO)
|
|
|
acerhdf_change_fanstate(ACERHDF_FAN_OFF);
|
|
|
} else {
|
|
|
if (cur_state == ACERHDF_FAN_OFF)
|
|
@@ -558,7 +618,7 @@ static int str_starts_with(const char *str, const char *start)
|
|
|
static int acerhdf_check_hardware(void)
|
|
|
{
|
|
|
char const *vendor, *version, *product;
|
|
|
- const struct bios_settings_t *bt = NULL;
|
|
|
+ const struct bios_settings *bt = NULL;
|
|
|
|
|
|
/* get BIOS data */
|
|
|
vendor = dmi_get_system_info(DMI_SYS_VENDOR);
|
|
@@ -660,12 +720,20 @@ static int acerhdf_register_thermal(void)
|
|
|
if (IS_ERR(cl_dev))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- thz_dev = thermal_zone_device_register("acerhdf", 1, 0, NULL,
|
|
|
- &acerhdf_dev_ops, NULL, 0,
|
|
|
+ thz_dev = thermal_zone_device_register("acerhdf", 2, 0, NULL,
|
|
|
+ &acerhdf_dev_ops,
|
|
|
+ &acerhdf_zone_params, 0,
|
|
|
(kernelmode) ? interval*1000 : 0);
|
|
|
if (IS_ERR(thz_dev))
|
|
|
return -EINVAL;
|
|
|
|
|
|
+ if (strcmp(thz_dev->governor->name,
|
|
|
+ acerhdf_zone_params.governor_name)) {
|
|
|
+ pr_err("Didn't get thermal governor %s, perhaps not compiled into thermal subsystem.\n",
|
|
|
+ acerhdf_zone_params.governor_name);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -722,9 +790,15 @@ MODULE_ALIAS("dmi:*:*Acer*:pnAOA*:");
|
|
|
MODULE_ALIAS("dmi:*:*Acer*:pnAO751h*:");
|
|
|
MODULE_ALIAS("dmi:*:*Acer*:pnAspire*1410*:");
|
|
|
MODULE_ALIAS("dmi:*:*Acer*:pnAspire*1810*:");
|
|
|
+MODULE_ALIAS("dmi:*:*Acer*:pnAspire*5755G:");
|
|
|
MODULE_ALIAS("dmi:*:*Acer*:pnAspire*1825PTZ:");
|
|
|
+MODULE_ALIAS("dmi:*:*Acer*:pnAO521*:");
|
|
|
MODULE_ALIAS("dmi:*:*Acer*:pnAO531*:");
|
|
|
+MODULE_ALIAS("dmi:*:*Acer*:pnAspire*5739G:");
|
|
|
+MODULE_ALIAS("dmi:*:*Acer*:pnAspire*One*753:");
|
|
|
+MODULE_ALIAS("dmi:*:*Acer*:pnAspire*5315:");
|
|
|
MODULE_ALIAS("dmi:*:*Acer*:TravelMate*7730G:");
|
|
|
+MODULE_ALIAS("dmi:*:*Acer*:TM8573T:");
|
|
|
MODULE_ALIAS("dmi:*:*Gateway*:pnAOA*:");
|
|
|
MODULE_ALIAS("dmi:*:*Gateway*:pnLT31*:");
|
|
|
MODULE_ALIAS("dmi:*:*Packard*Bell*:pnAOA*:");
|
|
@@ -733,6 +807,7 @@ MODULE_ALIAS("dmi:*:*Packard*Bell*:pnDOTMU*:");
|
|
|
MODULE_ALIAS("dmi:*:*Packard*Bell*:pnENBFT*:");
|
|
|
MODULE_ALIAS("dmi:*:*Packard*Bell*:pnDOTMA*:");
|
|
|
MODULE_ALIAS("dmi:*:*Packard*Bell*:pnDOTVR46*:");
|
|
|
+MODULE_ALIAS("dmi:*:*Acer*:pnExtensa 5420*:");
|
|
|
|
|
|
module_init(acerhdf_init);
|
|
|
module_exit(acerhdf_exit);
|