Lines Matching +full:timeout +full:- +full:minutes

1 // SPDX-License-Identifier: GPL-2.0-only
10 * Copyright (C) 2005-2014 Dell Inc.
31 #include "dell-rbtn.h"
32 #include "dell-smbios.h"
34 #include "dell-wmi-privacy.h"
45 * The list must end with -1
58 quirks = dmi->driver_data; in dmi_matched()
64 * is used then BIOS silently set timeout to 0 without any error message.
68 .kbd_timeouts = { 0, 5, 15, 60, 5 * 60, 15 * 60, -1 },
89 .name = "dell-laptop",
360 buffer->input[0] = arg0; in dell_fill_request()
361 buffer->input[1] = arg1; in dell_fill_request()
362 buffer->input[2] = arg2; in dell_fill_request()
363 buffer->input[3] = arg3; in dell_fill_request()
371 buffer->cmd_class = class; in dell_send_request()
372 buffer->cmd_select = select; in dell_send_request()
376 return dell_smbios_error(buffer->output[0]); in dell_send_request()
380 * Derived from information in smbios-wireless-ctl:
387 * cbRes1 Standard return codes (0, -1, -2)
403 * 13-15 Reserved (0)
410 * 20-31 Reserved (0)
428 * 1-7 Reserved (0)
430 * cbRes1 Standard return codes (0, -1, -2)
437 * 5-31 Reserved (0)
454 * 5-7 Reserved (0)
458 * cbRes1 Standard return codes (0, -1, -2)
465 * 5-6 Reserved (0)
468 * 9-14 Reserved (0)
470 * 16-31 Reserved (0)
476 * cbRes1 Standard return codes (0, -1, -2)
488 * cbRes1 Standard return codes (0, -1, -2)
492 * cbRes1 Standard return codes (0, -1, -2)
496 * cbRes1 Standard return codes (0, -1, -2)
503 int hwswitch_bit = (unsigned long)data - 1; in dell_rfkill_set()
536 /* Has hw-switch, sync sw_state to BIOS */ in dell_rfkill_update_sw_state()
543 /* No hw-switch, sync BIOS state to sw_state */ in dell_rfkill_update_sw_state()
551 if (hwswitch & (BIT(radio - 1))) in dell_rfkill_update_hw_state()
778 wifi_rfkill = rfkill_alloc("dell-wifi", &platform_device->dev, in dell_setup_rfkill()
782 ret = -ENOMEM; in dell_setup_rfkill()
791 bluetooth_rfkill = rfkill_alloc("dell-bluetooth", in dell_setup_rfkill()
792 &platform_device->dev, in dell_setup_rfkill()
796 ret = -ENOMEM; in dell_setup_rfkill()
805 wwan_rfkill = rfkill_alloc("dell-wwan", in dell_setup_rfkill()
806 &platform_device->dev, in dell_setup_rfkill()
810 ret = -ENOMEM; in dell_setup_rfkill()
819 * Dell Airplane Mode Switch driver (dell-rbtn) supports ACPI devices in dell_setup_rfkill()
833 * dell-rbtn driver will automatically remove its own rfkill devices in dell_setup_rfkill()
858 pr_info("Symbols from dell-rbtn acpi driver are not available\n"); in dell_setup_rfkill()
859 ret = -ENODEV; in dell_setup_rfkill()
863 pr_info("Using dell-rbtn acpi driver for receiving events\n"); in dell_setup_rfkill()
864 } else if (ret != -ENODEV) { in dell_setup_rfkill()
926 return -ENODEV; in dell_send_intensity()
929 token->location, bd->props.brightness, 0, 0); in dell_send_intensity()
948 return -ENODEV; in dell_get_intensity()
950 dell_fill_request(&buffer, token->location, 0, 0, 0); in dell_get_intensity()
993 .name = "dell-laptop::touchpad",
1009 * Derived from information in smbios-keyboard-ctl:
1017 * cbRES1 Standard return codes (0, -1, -2)
1018 * cbRES2, word0 Bitmap of user-selectable modes
1021 * bit 2 Auto: ALS-based On; ALS-based Off (Travis ATG)
1022 * bit 3 Auto: ALS- and input-activity-based On; input-activity based Off
1023 * bit 4 Auto: Input-activity-based On; input-activity based Off
1024 * bit 5 Auto: Input-activity-based On (illumination level 25%); input-activity based Off
1025 * bit 6 Auto: Input-activity-based On (illumination level 50%); input-activity based Off
1026 * bit 7 Auto: Input-activity-based On (illumination level 75%); input-activity based Off
1027 * bit 8 Auto: Input-activity-based On (illumination level 100%); input-activity based Off
1028 * bits 9-15 Reserved for future use
1034 * 3-255 Reserved for future use
1040 * bits 4-7 Reserved for future use
1041 * cbRES3, byte1 Supported timeout unit bitmap
1043 * bit 1 Minutes
1046 * bits 4-7 Reserved for future use
1049 * cbRES4, byte1 Maximum acceptable minutes value (0 if minutes not supported).
1054 * cbRES1 Standard return codes (0, -1, -2)
1058 * bit 2 Auto: ALS-based On; ALS-based Off (Travis ATG)
1059 * bit 3 Auto: ALS- and input-activity-based On; input-activity based Off
1060 * bit 4 Auto: Input-activity-based On; input-activity based Off
1061 * bit 5 Auto: Input-activity-based On (illumination level 25%); input-activity based Off
1062 * bit 6 Auto: Input-activity-based On (illumination level 50%); input-activity based Off
1063 * bit 7 Auto: Input-activity-based On (illumination level 75%); input-activity based Off
1064 * bit 8 Auto: Input-activity-based On (illumination level 100%); input-activity based Off
1065 * bits 9-15 Reserved for future use
1072 * bits 4-7 Reserved for future use
1073 * cbRES2, byte3 Current Timeout on battery
1074 * bits 7:6 Timeout units indicator:
1076 * 01b Minutes
1079 * bits 5:0 Timeout value (0-63) in sec/min/hr/day
1080 * NOTE: A value of 0 means always on (no timeout) if any bits of RES3 byte
1085 * cbRES3, byte3 Current timeout on AC Power
1086 * bits 7:6 Timeout units indicator:
1088 * 01b Minutes
1091 * Bits 5:0 Timeout value (0-63) in sec/min/hr/day
1092 * NOTE: A value of 0 means always on (no timeout) if any bits of RES3 byte2
1096 * cbRES1 Standard return codes (0, -1, -2)
1100 * bit 2 Auto: ALS-based On; ALS-based Off (Travis ATG)
1101 * bit 3 Auto: ALS- and input-activity-based On; input-activity based Off
1102 * bit 4 Auto: Input-activity-based On; input-activity based Off
1103 * bit 5 Auto: Input-activity-based On (illumination level 25%); input-activity based Off
1104 * bit 6 Auto: Input-activity-based On (illumination level 50%); input-activity based Off
1105 * bit 7 Auto: Input-activity-based On (illumination level 75%); input-activity based Off
1106 * bit 8 Auto: Input-activity-based On (illumination level 100%); input-activity based Off
1107 * bits 9-15 Reserved for future use
1115 * bits 4-7 Reserved for future use
1116 * cbArg2, byte3 Desired Timeout on battery
1117 * bits 7:6 Timeout units indicator:
1119 * 01b Minutes
1122 * bits 5:0 Timeout value (0-63) in sec/min/hr/day
1125 * cbArg3, byte3 Desired Timeout on AC power
1126 * bits 7:6 Timeout units indicator:
1128 * 01b Minutes
1131 * bits 5:0 Timeout value (0-63) in sec/min/hr/day
1167 u8 minutes; member
1235 info->modes = buffer.output[1] & 0xFFFF; in kbd_get_info()
1236 info->type = (buffer.output[1] >> 24) & 0xFF; in kbd_get_info()
1237 info->triggers = buffer.output[2] & 0xFF; in kbd_get_info()
1239 info->levels = (buffer.output[2] >> 16) & 0xFF; in kbd_get_info()
1241 if (quirks && quirks->kbd_led_levels_off_1 && info->levels) in kbd_get_info()
1242 info->levels--; in kbd_get_info()
1245 info->seconds = (buffer.output[3] >> 0) & 0xFF; in kbd_get_info()
1247 info->minutes = (buffer.output[3] >> 8) & 0xFF; in kbd_get_info()
1249 info->hours = (buffer.output[3] >> 16) & 0xFF; in kbd_get_info()
1251 info->days = (buffer.output[3] >> 24) & 0xFF; in kbd_get_info()
1261 return kbd_mode_levels_count - 1; in kbd_get_max_level()
1270 return state->level; in kbd_get_level()
1274 if (kbd_mode_levels[i] == state->mode_bit) in kbd_get_level()
1279 return -EINVAL; in kbd_get_level()
1287 if (state->level == level) in kbd_set_level()
1289 state->level = level; in kbd_set_level()
1290 if (level != 0 && state->mode_bit == KBD_MODE_BIT_OFF) in kbd_set_level()
1291 state->mode_bit = kbd_previous_mode_bit; in kbd_set_level()
1292 else if (level == 0 && state->mode_bit != KBD_MODE_BIT_OFF) { in kbd_set_level()
1293 kbd_previous_mode_bit = state->mode_bit; in kbd_set_level()
1294 state->mode_bit = KBD_MODE_BIT_OFF; in kbd_set_level()
1302 state->mode_bit = kbd_mode_levels[level]; in kbd_set_level()
1306 return -EINVAL; in kbd_set_level()
1320 state->mode_bit = ffs(buffer.output[1] & 0xFFFF); in kbd_get_state()
1321 if (state->mode_bit != 0) in kbd_get_state()
1322 state->mode_bit--; in kbd_get_state()
1324 state->triggers = (buffer.output[1] >> 16) & 0xFF; in kbd_get_state()
1325 state->timeout_value = (buffer.output[1] >> 24) & 0x3F; in kbd_get_state()
1326 state->timeout_unit = (buffer.output[1] >> 30) & 0x3; in kbd_get_state()
1327 state->als_setting = buffer.output[2] & 0xFF; in kbd_get_state()
1328 state->als_value = (buffer.output[2] >> 8) & 0xFF; in kbd_get_state()
1329 state->level = (buffer.output[2] >> 16) & 0xFF; in kbd_get_state()
1330 state->timeout_value_ac = (buffer.output[2] >> 24) & 0x3F; in kbd_get_state()
1331 state->timeout_unit_ac = (buffer.output[2] >> 30) & 0x3; in kbd_get_state()
1343 input1 = BIT(state->mode_bit) & 0xFFFF; in kbd_set_state()
1344 input1 |= (state->triggers & 0xFF) << 16; in kbd_set_state()
1345 input1 |= (state->timeout_value & 0x3F) << 24; in kbd_set_state()
1346 input1 |= (state->timeout_unit & 0x3) << 30; in kbd_set_state()
1347 input2 = state->als_setting & 0xFF; in kbd_set_state()
1348 input2 |= (state->level & 0xFF) << 16; in kbd_set_state()
1349 input2 |= (state->timeout_value_ac & 0x3F) << 24; in kbd_set_state()
1350 input2 |= (state->timeout_unit_ac & 0x3) << 30; in kbd_set_state()
1385 return -EINVAL; in kbd_set_token_bit()
1389 return -EINVAL; in kbd_set_token_bit()
1391 dell_fill_request(&buffer, token->location, token->value, 0, 0); in kbd_set_token_bit()
1405 return -EINVAL; in kbd_get_token_bit()
1409 return -EINVAL; in kbd_get_token_bit()
1411 dell_fill_request(&buffer, token->location, 0, 0, 0); in kbd_get_token_bit()
1418 return (val == token->value); in kbd_get_token_bit()
1451 * timeout value which is shared for both battery and AC power in kbd_init_info()
1454 if ((quirks && quirks->kbd_missing_ac_tag) || in kbd_init_info()
1460 /* NOTE: timeout value is stored in 6 bits so max value is 63 */ in kbd_init_info()
1463 if (kbd_info.minutes > 63) in kbd_init_info()
1464 kbd_info.minutes = 63; in kbd_init_info()
1485 kbd_previous_mode_bit--; in kbd_init_info()
1536 if (quirks && quirks->kbd_led_not_present) in kbd_init()
1565 return -EINVAL; in kbd_led_timeout_store()
1570 return -EINVAL; in kbd_led_timeout_store()
1581 if (value > kbd_info.minutes) in kbd_led_timeout_store()
1596 return -EINVAL; in kbd_led_timeout_store()
1599 if (quirks && quirks->needs_kbd_timeouts) in kbd_led_timeout_store()
1616 if (quirks && quirks->needs_kbd_timeouts) { in kbd_led_timeout_store()
1617 for (i = 0; quirks->kbd_timeouts[i] != -1; i++) { in kbd_led_timeout_store()
1618 if (value <= quirks->kbd_timeouts[i]) { in kbd_led_timeout_store()
1619 value = quirks->kbd_timeouts[i]; in kbd_led_timeout_store()
1627 } else if (value / 60 <= kbd_info.minutes && kbd_info.minutes) { in kbd_led_timeout_store()
1637 return -EINVAL; in kbd_led_timeout_store()
1700 return -EINVAL; in kbd_led_timeout_show()
1723 int trigger_bit = -1; in kbd_led_triggers_store()
1729 return -EINVAL; in kbd_led_triggers_store()
1731 if (trigger[0] != '+' && trigger[0] != '-') in kbd_led_triggers_store()
1732 return -EINVAL; in kbd_led_triggers_store()
1756 if (trigger[0] == '-' && in kbd_led_triggers_store()
1766 if (trigger_bit == -1) { in kbd_led_triggers_store()
1767 ret = -EINVAL; in kbd_led_triggers_store()
1786 ret = -EINVAL; in kbd_led_triggers_store()
1796 ret = -EINVAL; in kbd_led_triggers_store()
1836 buf[len++] = '-'; in kbd_led_triggers_show()
1842 buf[len - 1] = '\n'; in kbd_led_triggers_show()
1894 ret = -EINVAL; in kbd_led_als_enabled_store()
2023 for (num = kbd_token_bits; num != 0 && ret > 0; --ret) in kbd_led_level_get()
2024 num &= num - 1; /* clear the first bit set */ in kbd_led_level_get()
2027 return ffs(num) - 1; in kbd_led_level_get()
2055 for (num = kbd_token_bits; num != 0 && value > 0; --value) in kbd_led_level_set()
2056 num &= num - 1; /* clear the first bit set */ in kbd_led_level_set()
2060 ret = kbd_set_token_bit(ffs(num) - 1); in kbd_led_level_set()
2063 ret = -ENXIO; in kbd_led_level_set()
2088 return -ENODEV; in kbd_led_init()
2095 kbd_led.max_brightness--; in kbd_led_init()
2166 return -ENODEV; in micmute_led_set()
2168 dell_fill_request(&buffer, token->location, token->value, 0, 0); in micmute_led_set()
2178 .default_trigger = "audio-micmute",
2194 return -ENODEV; in mute_led_set()
2196 dell_fill_request(&buffer, token->location, token->value, 0, 0); in mute_led_set()
2206 .default_trigger = "audio-mute",
2216 return -ENODEV; in dell_init()
2225 platform_device = platform_device_alloc("dell-laptop", PLATFORM_DEVID_NONE); in dell_init()
2227 ret = -ENOMEM; in dell_init()
2241 if (quirks && quirks->touchpad_led) in dell_init()
2242 touchpad_led_init(&platform_device->dev); in dell_init()
2244 kbd_led_init(&platform_device->dev); in dell_init()
2256 ret = led_classdev_register(&platform_device->dev, &micmute_led_cdev); in dell_init()
2265 ret = led_classdev_register(&platform_device->dev, &mute_led_cdev); in dell_init()
2278 dell_fill_request(&buffer, token->location, 0, 0, 0); in dell_init()
2291 &platform_device->dev, in dell_init()
2302 dell_backlight_device->props.brightness = in dell_init()
2304 if (dell_backlight_device->props.brightness < 0) { in dell_init()
2305 ret = dell_backlight_device->props.brightness; in dell_init()
2336 if (quirks && quirks->touchpad_led) in dell_exit()
2351 /* dell-rbtn.c driver export functions which will not work correctly (and could
2352 * cause kernel crash) if they are called before dell-rbtn.c init code. This is
2353 * not problem when dell-rbtn.c is compiled as external module. When both files
2354 * (dell-rbtn.c and dell-laptop.c) are compiled statically into kernel, then we
2355 * need to ensure that dell_init() will be called after initializing dell-rbtn.