| @@ -68,12 +68,12 @@ MODULE_LICENSE("GPL"); · 67 unmodified lines |
| 68 | 68 | #define ASUS_FAN_CTRL_MANUAL 1 |
| 69 | 69 | #define ASUS_FAN_CTRL_AUTO 2 |
| 70 | 70 | |
| 71 | | −#define ASUS_FAN_MODE_NORMAL 0 |
| 72 | | −#define ASUS_FAN_MODE_OVERBOOST 1 |
| 73 | | −#define ASUS_FAN_MODE_OVERBOOST_MASK 0x01 |
| 74 | | −#define ASUS_FAN_MODE_SILENT 2 |
| 75 | | −#define ASUS_FAN_MODE_SILENT_MASK 0x02 |
| 76 | | −#define ASUS_FAN_MODES_MASK 0x03 |
| 71 | +#define ASUS_FAN_BOOST_MODE_NORMAL 0 |
| 72 | +#define ASUS_FAN_BOOST_MODE_OVERBOOST 1 |
| 73 | +#define ASUS_FAN_BOOST_MODE_OVERBOOST_MASK 0x01 |
| 74 | +#define ASUS_FAN_BOOST_MODE_SILENT 2 |
| 75 | +#define ASUS_FAN_BOOST_MODE_SILENT_MASK 0x02 |
| 76 | +#define ASUS_FAN_BOOST_MODES_MASK 0x03 |
| 77 | 77 | |
| 78 | 78 | #define USB_INTEL_XUSB2PR 0xD0 |
| 79 | 79 | #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 |
| @@ -182,9 +182,9 @@ struct asus_wmi { · 102 unmodified lines |
| 182 | 182 | int asus_hwmon_num_fans; |
| 183 | 183 | int asus_hwmon_pwm; |
| 184 | 184 | |
| 185 | | − bool fan_mode_available; |
| 186 | | − u8 fan_mode_mask; |
| 187 | | − u8 fan_mode; |
| 185 | + bool fan_boost_mode_available; |
| 186 | + u8 fan_boost_mode_mask; |
| 187 | + u8 fan_boost_mode; |
| 188 | 188 | |
| 189 | 189 | struct hotplug_slot hotplug_slot; |
| 190 | 190 | struct mutex hotplug_lock; |
| @@ -1487,14 +1487,15 @@ static int asus_wmi_fan_init(struct asus_wmi *asus) · 1296 unmodified lines |
| 1487 | 1487 | |
| 1488 | 1488 | /* Fan mode *******************************************************************/ |
| 1489 | 1489 | |
| 1490 | | −static int fan_mode_check_present(struct asus_wmi *asus) |
| 1490 | +static int fan_boost_mode_check_present(struct asus_wmi *asus) |
| 1491 | 1491 | { |
| 1492 | 1492 | u32 result; |
| 1493 | 1493 | int err; |
| 1494 | 1494 | |
| 1495 | | − asus->fan_mode_available = false; |
| 1495 | + asus->fan_boost_mode_available = false; |
| 1496 | 1496 | |
| 1497 | | − err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_FAN_MODE, &result); |
| 1497 | + err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_FAN_BOOST_MODE, |
| 1498 | + &result); |
| 1498 | 1499 | if (err) { |
| 1499 | 1500 | if (err == -ENODEV) |
| 1500 | 1501 | return 0; |
| @@ -1503,72 +1504,77 @@ static int fan_mode_check_present(struct asus_wmi *asus) · 2 unmodified lines |
| 1503 | 1504 | } |
| 1504 | 1505 | |
| 1505 | 1506 | if ((result & ASUS_WMI_DSTS_PRESENCE_BIT) && |
| 1506 | | − (result & ASUS_FAN_MODES_MASK)) { |
| 1507 | | − asus->fan_mode_available = true; |
| 1508 | | − asus->fan_mode_mask = result & ASUS_FAN_MODES_MASK; |
| 1507 | + (result & ASUS_FAN_BOOST_MODES_MASK)) { |
| 1508 | + asus->fan_boost_mode_available = true; |
| 1509 | + asus->fan_boost_mode_mask = result & ASUS_FAN_BOOST_MODES_MASK; |
| 1509 | 1510 | } |
| 1510 | 1511 | |
| 1511 | 1512 | return 0; |
| 1512 | 1513 | } |
| 1513 | 1514 | |
| 1514 | | −static int fan_mode_write(struct asus_wmi *asus) |
| 1515 | +static int fan_boost_mode_write(struct asus_wmi *asus) |
| 1515 | 1516 | { |
| 1516 | 1517 | int err; |
| 1517 | 1518 | u8 value; |
| 1518 | 1519 | u32 retval; |
| 1519 | 1520 | |
| 1520 | | − value = asus->fan_mode; |
| 1521 | + value = asus->fan_boost_mode; |
| 1521 | 1522 | |
| 1522 | | − pr_info("Set fan mode: %u\n", value); |
| 1523 | | − err = asus_wmi_set_devstate(ASUS_WMI_DEVID_FAN_MODE, value, &retval); |
| 1523 | + pr_info("Set fan boost mode: %u\n", value); |
| 1524 | + err = asus_wmi_set_devstate(ASUS_WMI_DEVID_FAN_BOOST_MODE, value, |
| 1525 | + &retval); |
| 1524 | 1526 | |
| 1525 | 1527 | if (err) { |
| 1526 | | − pr_warn("Failed to set fan mode: %d\n", err); |
| 1528 | + pr_warn("Failed to set fan boost mode: %d\n", err); |
| 1527 | 1529 | return err; |
| 1528 | 1530 | } |
| 1529 | 1531 | |
| 1530 | 1532 | if (retval != 1) { |
| 1531 | | − pr_warn("Failed to set fan mode (retval): 0x%x\n", retval); |
| 1533 | + pr_warn("Failed to set fan boost mode (retval): 0x%x\n", |
| 1534 | + retval); |
| 1532 | 1535 | return -EIO; |
| 1533 | 1536 | } |
| 1534 | 1537 | |
| 1535 | 1538 | return 0; |
| 1536 | 1539 | } |
| 1537 | 1540 | |
| 1538 | | −static int fan_mode_switch_next(struct asus_wmi *asus) |
| 1541 | +static int fan_boost_mode_switch_next(struct asus_wmi *asus) |
| 1539 | 1542 | { |
| 1540 | | − if (asus->fan_mode == ASUS_FAN_MODE_NORMAL) { |
| 1541 | | − if (asus->fan_mode_mask & ASUS_FAN_MODE_OVERBOOST_MASK) |
| 1542 | | − asus->fan_mode = ASUS_FAN_MODE_OVERBOOST; |
| 1543 | | − else if (asus->fan_mode_mask & ASUS_FAN_MODE_SILENT_MASK) |
| 1544 | | − asus->fan_mode = ASUS_FAN_MODE_SILENT; |
| 1545 | | − } else if (asus->fan_mode == ASUS_FAN_MODE_OVERBOOST) { |
| 1546 | | − if (asus->fan_mode_mask & ASUS_FAN_MODE_SILENT_MASK) |
| 1547 | | − asus->fan_mode = ASUS_FAN_MODE_SILENT; |
| 1543 | + u8 mask = asus->fan_boost_mode_mask; |
| 1544 | + |
| 1545 | + if (asus->fan_boost_mode == ASUS_FAN_BOOST_MODE_NORMAL) { |
| 1546 | + if (mask & ASUS_FAN_BOOST_MODE_OVERBOOST_MASK) |
| 1547 | + asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_OVERBOOST; |
| 1548 | + else if (mask & ASUS_FAN_BOOST_MODE_SILENT_MASK) |
| 1549 | + asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_SILENT; |
| 1550 | + } else if (asus->fan_boost_mode == ASUS_FAN_BOOST_MODE_OVERBOOST) { |
| 1551 | + if (mask & ASUS_FAN_BOOST_MODE_SILENT_MASK) |
| 1552 | + asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_SILENT; |
| 1548 | 1553 | else |
| 1549 | | − asus->fan_mode = ASUS_FAN_MODE_NORMAL; |
| 1554 | + asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_NORMAL; |
| 1550 | 1555 | } else { |
| 1551 | | − asus->fan_mode = ASUS_FAN_MODE_NORMAL; |
| 1556 | + asus->fan_boost_mode = ASUS_FAN_BOOST_MODE_NORMAL; |
| 1552 | 1557 | } |
| 1553 | 1558 | |
| 1554 | | − return fan_mode_write(asus); |
| 1559 | + return fan_boost_mode_write(asus); |
| 1555 | 1560 | } |
| 1556 | 1561 | |
| 1557 | | −static ssize_t fan_mode_show(struct device *dev, |
| 1558 | | − struct device_attribute *attr, char *buf) |
| 1562 | +static ssize_t fan_boost_mode_show(struct device *dev, |
| 1563 | + struct device_attribute *attr, char *buf) |
| 1559 | 1564 | { |
| 1560 | 1565 | struct asus_wmi *asus = dev_get_drvdata(dev); |
| 1561 | 1566 | |
| 1562 | | − return scnprintf(buf, PAGE_SIZE, "%d\n", asus->fan_mode); |
| 1567 | + return scnprintf(buf, PAGE_SIZE, "%d\n", asus->fan_boost_mode); |
| 1563 | 1568 | } |
| 1564 | 1569 | |
| 1565 | | −static ssize_t fan_mode_store(struct device *dev, struct device_attribute *attr, |
| 1566 | | − const char *buf, size_t count) |
| 1570 | +static ssize_t fan_boost_mode_store(struct device *dev, |
| 1571 | + struct device_attribute *attr, |
| 1572 | + const char *buf, size_t count) |
| 1567 | 1573 | { |
| 1568 | 1574 | int result; |
| 1569 | 1575 | u8 new_mode; |
| 1570 | | − |
| 1571 | 1576 | struct asus_wmi *asus = dev_get_drvdata(dev); |
| 1577 | + u8 mask = asus->fan_boost_mode_mask; |
| 1572 | 1578 | |
| 1573 | 1579 | result = kstrtou8(buf, 10, &new_mode); |
| 1574 | 1580 | if (result < 0) { |
| @@ -1576,24 +1582,24 @@ static ssize_t fan_mode_store(struct device *dev, struct device_attribute *attr, · 1 unmodified line |
| 1576 | 1582 | return result; |
| 1577 | 1583 | } |
| 1578 | 1584 | |
| 1579 | | − if (new_mode == ASUS_FAN_MODE_OVERBOOST) { |
| 1580 | | − if (!(asus->fan_mode_mask & ASUS_FAN_MODE_OVERBOOST_MASK)) |
| 1585 | + if (new_mode == ASUS_FAN_BOOST_MODE_OVERBOOST) { |
| 1586 | + if (!(mask & ASUS_FAN_BOOST_MODE_OVERBOOST_MASK)) |
| 1581 | 1587 | return -EINVAL; |
| 1582 | | − } else if (new_mode == ASUS_FAN_MODE_SILENT) { |
| 1583 | | − if (!(asus->fan_mode_mask & ASUS_FAN_MODE_SILENT_MASK)) |
| 1588 | + } else if (new_mode == ASUS_FAN_BOOST_MODE_SILENT) { |
| 1589 | + if (!(mask & ASUS_FAN_BOOST_MODE_SILENT_MASK)) |
| 1584 | 1590 | return -EINVAL; |
| 1585 | | − } else if (new_mode != ASUS_FAN_MODE_NORMAL) { |
| 1591 | + } else if (new_mode != ASUS_FAN_BOOST_MODE_NORMAL) { |
| 1586 | 1592 | return -EINVAL; |
| 1587 | 1593 | } |
| 1588 | 1594 | |
| 1589 | | − asus->fan_mode = new_mode; |
| 1590 | | − fan_mode_write(asus); |
| 1595 | + asus->fan_boost_mode = new_mode; |
| 1596 | + fan_boost_mode_write(asus); |
| 1591 | 1597 | |
| 1592 | 1598 | return result; |
| 1593 | 1599 | } |
| 1594 | 1600 | |
| 1595 | | −// Fan mode: 0 - normal, 1 - overboost, 2 - silent |
| 1596 | | −static DEVICE_ATTR_RW(fan_mode); |
| 1601 | +// Fan boost mode: 0 - normal, 1 - overboost, 2 - silent |
| 1602 | +static DEVICE_ATTR_RW(fan_boost_mode); |
| 1597 | 1603 | |
| 1598 | 1604 | /* Backlight ******************************************************************/ |
| 1599 | 1605 | |
| @@ -1873,8 +1879,8 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus) · 273 unmodified lines |
| 1873 | 1879 | return; |
| 1874 | 1880 | } |
| 1875 | 1881 | |
| 1876 | | − if (asus->fan_mode_available && code == NOTIFY_KBD_FBM) { |
| 1877 | | − fan_mode_switch_next(asus); |
| 1882 | + if (asus->fan_boost_mode_available && code == NOTIFY_KBD_FBM) { |
| 1883 | + fan_boost_mode_switch_next(asus); |
| 1878 | 1884 | return; |
| 1879 | 1885 | } |
| 1880 | 1886 | |
| @@ -2034,7 +2040,7 @@ static struct attribute *platform_attributes[] = { · 153 unmodified lines |
| 2034 | 2040 | &dev_attr_touchpad.attr, |
| 2035 | 2041 | &dev_attr_lid_resume.attr, |
| 2036 | 2042 | &dev_attr_als_enable.attr, |
| 2037 | | − &dev_attr_fan_mode.attr, |
| 2043 | + &dev_attr_fan_boost_mode.attr, |
| 2038 | 2044 | NULL |
| 2039 | 2045 | }; |
| 2040 | 2046 | |
| @@ -2056,8 +2062,8 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj, · 15 unmodified lines |
| 2056 | 2062 | devid = ASUS_WMI_DEVID_LID_RESUME; |
| 2057 | 2063 | else if (attr == &dev_attr_als_enable.attr) |
| 2058 | 2064 | devid = ASUS_WMI_DEVID_ALS_ENABLE; |
| 2059 | | − else if (attr == &dev_attr_fan_mode.attr) |
| 2060 | | − ok = asus->fan_mode_available; |
| 2065 | + else if (attr == &dev_attr_fan_boost_mode.attr) |
| 2066 | + ok = asus->fan_boost_mode_available; |
| 2061 | 2067 | |
| 2062 | 2068 | if (devid != -1) |
| 2063 | 2069 | ok = !(asus_wmi_get_devstate_simple(asus, devid) < 0); |
| @@ -2315,9 +2321,9 @@ static int asus_wmi_add(struct platform_device *pdev) · 251 unmodified lines |
| 2315 | 2321 | if (err) |
| 2316 | 2322 | goto fail_platform; |
| 2317 | 2323 | |
| 2318 | | − err = fan_mode_check_present(asus); |
| 2324 | + err = fan_boost_mode_check_present(asus); |
| 2319 | 2325 | if (err) |
| 2320 | | − goto fail_fan_mode; |
| 2326 | + goto fail_fan_boost_mode; |
| 2321 | 2327 | |
| 2322 | 2328 | err = asus_wmi_sysfs_init(asus->platform_device); |
| 2323 | 2329 | if (err) |
| @@ -2402,7 +2408,7 @@ fail_hwmon: · 78 unmodified lines |
| 2402 | 2408 | fail_input: |
| 2403 | 2409 | asus_wmi_sysfs_exit(asus->platform_device); |
| 2404 | 2410 | fail_sysfs: |
| 2405 | | −fail_fan_mode: |
| 2411 | +fail_fan_boost_mode: |
| 2406 | 2412 | fail_platform: |
| 2407 | 2413 | kfree(asus); |
| 2408 | 2414 | return err; |