1dd5495cfSNaveen Moses# phosphor-buttons 2dd5495cfSNaveen Moses 3793f9b85SPatrick WilliamsPhosphor-buttons has a collection of IO event handler interfaces for physical 4b748fdb5SMatt Spinlerinputs which are typically part of some sort of panel. 5dd5495cfSNaveen Moses 6793f9b85SPatrick WilliamsIt defines an individual dbus interface object for each physical button/switch 7b748fdb5SMatt Spinlerinputs such as power button, reset button etc. Each button interface monitors 8b748fdb5SMatt Spinlerits associated IO for event changes and emits signals that the button-handler 9b748fdb5SMatt Spinlerapplication listens for. 10b748fdb5SMatt Spinler 11b748fdb5SMatt Spinler## Button Behavior 12b748fdb5SMatt Spinler 13b748fdb5SMatt Spinler### Power Button 14b748fdb5SMatt Spinler 15b748fdb5SMatt SpinlerAll events occur when the button is released. 16b748fdb5SMatt Spinler 17b748fdb5SMatt SpinlerIf the power is off, power on the host. 18b748fdb5SMatt Spinler 19b748fdb5SMatt SpinlerIf the power is on, it depends on how long the press was and which options are 20b748fdb5SMatt Spinlerenabled: 21b748fdb5SMatt Spinler 22b748fdb5SMatt Spinler- Short press: Do a host power off 23b748fdb5SMatt Spinler- Long press, as determined by the 'long-press-time-ms' meson option: Do a 24b748fdb5SMatt Spinler chassis (hard) power off. 25b748fdb5SMatt Spinler 26b748fdb5SMatt Spinler#### Custom Power Button Profiles 27b748fdb5SMatt Spinler 28b748fdb5SMatt SpinlerThe 'power-button-profile' meson option can be used to select custom power 29b748fdb5SMatt Spinlerbutton profiles that have different behaviors. 30b748fdb5SMatt Spinler 31b748fdb5SMatt SpinlerAvailable profiles are: 32b748fdb5SMatt Spinler 33b748fdb5SMatt Spinler- host_then_chassis_poweroff: When power is on, short presses are ignored and a 34b748fdb5SMatt Spinler long press issues a host power off first and then a chassis power off if held 35b748fdb5SMatt Spinler past a certain time. [This class](inc/host_then_chassis_poweroff.hpp) has 36b748fdb5SMatt Spinler additional details. 37b748fdb5SMatt Spinler 38b748fdb5SMatt Spinler### Multi-Host Buttons 39b748fdb5SMatt Spinler 40b748fdb5SMatt SpinlerSee [this section below](#group-gpio-config). 41b748fdb5SMatt Spinler 42b748fdb5SMatt Spinler### Reset Button 43b748fdb5SMatt Spinler 449456ffc9SHuyLeWhen released: 459456ffc9SHuyLe 469456ffc9SHuyLe- If 'reset-button-do-warm-reboot' meson option is set to enabled, does warm 479456ffc9SHuyLe reboot the host. 489456ffc9SHuyLe- Otherwise, reboots the host (default behavior) 49b748fdb5SMatt Spinler 50b748fdb5SMatt Spinler### ID Button 51b748fdb5SMatt Spinler 52b748fdb5SMatt SpinlerWhen released, toggles the 'enclosure_identify' LED group provided by the 53b748fdb5SMatt Spinlerphosphor-led-manager repository. The group name can be changed using the 54b748fdb5SMatt Spinler'id-led-group' meson option. 55dd5495cfSNaveen Moses 56dd5495cfSNaveen Moses## Gpio defs config 57793f9b85SPatrick Williams 58793f9b85SPatrick WilliamsIn order to monitor a button/input interface the respective gpio config details 59793f9b85SPatrick Williamsshould be mentioned in the gpio defs json file - 60c7645850SPatrick Williams`/etc/default/obmc/gpio/gpio_defs.json` 61dd5495cfSNaveen Moses 62dd5495cfSNaveen Moses1. The button interface type name. 63793f9b85SPatrick Williams2. An array consists of single or multiple gpio configs associated with the 64793f9b85SPatrick Williams specific button interface. 65dd5495cfSNaveen Moses 66cb418b0dSJonico EustaquioA gpio can be mapped using the "pin" or "num" keyword. The "pin" key uses 67cb418b0dSJonico Eustaquioalphanumerical references while the "num" key supports the integer pin number. 68cb418b0dSJonico Eustaquio 69dd5495cfSNaveen Moses## example gpio def Json config 70793f9b85SPatrick Williams 71c7645850SPatrick Williams```json 72dd5495cfSNaveen Moses{ 73dd5495cfSNaveen Moses "gpio_definitions": [ 74dd5495cfSNaveen Moses { 75dd5495cfSNaveen Moses "name": "POWER_BUTTON", 76dd5495cfSNaveen Moses "pin": "D0", 77dd5495cfSNaveen Moses "direction": "both" 78dd5495cfSNaveen Moses }, 79dd5495cfSNaveen Moses { 80dd5495cfSNaveen Moses "name": "RESET_BUTTON", 81dd5495cfSNaveen Moses "pin": "AB0", 82dd5495cfSNaveen Moses "direction": "both" 83dd5495cfSNaveen Moses }, 84dd5495cfSNaveen Moses { 85dd5495cfSNaveen Moses "name": "HOST_SELECTOR", 86dd5495cfSNaveen Moses 87d219fa3cSNaveen Moses "group_gpio_config": [ 88dd5495cfSNaveen Moses { 89dd5495cfSNaveen Moses "pin": "AA4", 90dd5495cfSNaveen Moses "direction": "both" 91dd5495cfSNaveen Moses }, 92dd5495cfSNaveen Moses { 93dd5495cfSNaveen Moses "pin": "AA5", 94dd5495cfSNaveen Moses "direction": "both" 95dd5495cfSNaveen Moses }, 96dd5495cfSNaveen Moses { 97dd5495cfSNaveen Moses "pin": "AA6", 98dd5495cfSNaveen Moses "direction": "both" 99dd5495cfSNaveen Moses }, 100dd5495cfSNaveen Moses { 101dd5495cfSNaveen Moses "pin": "AA7", 102dd5495cfSNaveen Moses "direction": "both" 103dd5495cfSNaveen Moses } 104dd5495cfSNaveen Moses ] 1054c47d4c9SPatrick Williams } 1064c47d4c9SPatrick Williams ] 107dd5495cfSNaveen Moses} 108d219fa3cSNaveen Moses``` 109793f9b85SPatrick Williams 110d219fa3cSNaveen Moses## Single gpio config 111793f9b85SPatrick Williams 112793f9b85SPatrick WilliamsThis config is original config which can be used for configs with only single 113793f9b85SPatrick Williamsgpio such as power button,reset button, OCP debug card host select button. 114793f9b85SPatrick Williams 115c7645850SPatrick Williams```json 116d219fa3cSNaveen Moses{ 117d219fa3cSNaveen Moses "name": "POWER_BUTTON", 118d219fa3cSNaveen Moses "pin": "D0", 119d219fa3cSNaveen Moses "direction": "both" 1204c47d4c9SPatrick Williams} 121d219fa3cSNaveen Moses``` 122793f9b85SPatrick Williams 123793f9b85SPatrick Williams**Note:** this config is used by most of the other platforms so this format is 124793f9b85SPatrick Williamskept as it is so that existing gpio configs do not get affected. 125d219fa3cSNaveen Moses 126d219fa3cSNaveen Moses## Group gpio config 127793f9b85SPatrick Williams 128793f9b85SPatrick WilliamsThe following configs are related to multi-host bmc systems more info explained 129793f9b85SPatrick Williamsin the design: 130c7645850SPatrick Williams<https://github.com/openbmc/docs/blob/master/designs/multihost-phosphor-buttons.md> 131d219fa3cSNaveen Moses 132d219fa3cSNaveen Moses### Host selector gpio config example 133793f9b85SPatrick Williams 134d219fa3cSNaveen MosesThe host selector has four gpios associated. So the related gpios are mentioned 135c7645850SPatrick Williamsin a json array named group_gpio_config. 136d219fa3cSNaveen Moses 137793f9b85SPatrick Williams- name - This is name of the specific gpio line 138793f9b85SPatrick Williams- pin - This represents the pin number from linux dts file. 139793f9b85SPatrick Williams- polarity - polarity type of the gpio 140793f9b85SPatrick Williams- max_position - This represents the max number of hosts in the multi-host bmc 141793f9b85SPatrick Williams system. 142793f9b85SPatrick Williams- host_selector_map - This map is oem specific host position map which has how 143793f9b85SPatrick Williams the value read from the host selector gpios is mapped to the respective host 144793f9b85SPatrick Williams number. 145d219fa3cSNaveen Moses 146d219fa3cSNaveen MosesExample : The value of "7" derived from the 4 host select gpio lines are mapped 147d219fa3cSNaveen Mosesto host position 1. 148793f9b85SPatrick Williams 149c7645850SPatrick Williams```json 150d219fa3cSNaveen Moses{ 151d219fa3cSNaveen Moses "name": "HOST_SELECTOR", 152d219fa3cSNaveen Moses 153d219fa3cSNaveen Moses "group_gpio_config": [ 154d219fa3cSNaveen Moses { 155d219fa3cSNaveen Moses "name": "host_select_0", 156d219fa3cSNaveen Moses "pin": "AA4", 157d219fa3cSNaveen Moses "direction": "both", 158d219fa3cSNaveen Moses "polarity": "active_high" 159d219fa3cSNaveen Moses }, 160d219fa3cSNaveen Moses { 161d219fa3cSNaveen Moses "name": "host_select_1", 162d219fa3cSNaveen Moses "pin": "AA5", 163d219fa3cSNaveen Moses "direction": "both", 164d219fa3cSNaveen Moses "polarity": "active_high" 165d219fa3cSNaveen Moses }, 166d219fa3cSNaveen Moses { 167d219fa3cSNaveen Moses "name": "host_select_2", 168d219fa3cSNaveen Moses "pin": "AA6", 169d219fa3cSNaveen Moses "direction": "both", 170d219fa3cSNaveen Moses "polarity": "active_high" 171d219fa3cSNaveen Moses }, 172d219fa3cSNaveen Moses { 173d219fa3cSNaveen Moses "name": "host_select_3", 174d219fa3cSNaveen Moses "pin": "AA7", 175d219fa3cSNaveen Moses "direction": "both", 176d219fa3cSNaveen Moses "polarity": "active_high" 177d219fa3cSNaveen Moses } 178d219fa3cSNaveen Moses ], 179d219fa3cSNaveen Moses "max_position": 4, 180d219fa3cSNaveen Moses "host_selector_map": { 181d219fa3cSNaveen Moses "6": 0, 182d219fa3cSNaveen Moses "7": 1, 183d219fa3cSNaveen Moses "8": 2, 184d219fa3cSNaveen Moses "9": 3, 185d219fa3cSNaveen Moses "10": 4, 186d219fa3cSNaveen Moses "11": 0, 187d219fa3cSNaveen Moses "12": 1, 188d219fa3cSNaveen Moses "13": 2, 189d219fa3cSNaveen Moses "14": 3, 190d219fa3cSNaveen Moses "15": 4 191d219fa3cSNaveen Moses } 192c7645850SPatrick Williams} 193d219fa3cSNaveen Moses``` 194793f9b85SPatrick Williams 195ccd7db05SDelphine CC Chiu### Host selector cpld config example 196ccd7db05SDelphine CC Chiu 197ccd7db05SDelphine CC ChiuThere are also some systems that get the host selector selection from the CPLD, 198ccd7db05SDelphine CC Chiuthe configuration is provided below. 199ccd7db05SDelphine CC Chiu 200ccd7db05SDelphine CC Chiu- name - The button interface type name. 201ccd7db05SDelphine CC Chiu- i2c_bus - The i2c bus of cpld 202ccd7db05SDelphine CC Chiu- i2c_address - The i2c address of cpld 203ccd7db05SDelphine CC Chiu- register_name - The register file name exported by CLD driver for IO event 204ccd7db05SDelphine CC Chiu listen 205ccd7db05SDelphine CC Chiu- max_position - This represents the max number of hosts in the multi-host bmc 206ccd7db05SDelphine CC Chiu system. 207ccd7db05SDelphine CC Chiu 208ccd7db05SDelphine CC Chiu```json 209ccd7db05SDelphine CC Chiu{ 210ccd7db05SDelphine CC Chiu "cpld_definitions": [ 211ccd7db05SDelphine CC Chiu { 212ccd7db05SDelphine CC Chiu "name": "HOST_SELECTOR", 213ccd7db05SDelphine CC Chiu "i2c_bus": 12, 214ccd7db05SDelphine CC Chiu "i2c_address": 15, 215ccd7db05SDelphine CC Chiu "register_name": "uart-selection-debug-card", 216ccd7db05SDelphine CC Chiu "max_position": 4 217ccd7db05SDelphine CC Chiu } 218ccd7db05SDelphine CC Chiu ] 219ccd7db05SDelphine CC Chiu} 220ccd7db05SDelphine CC Chiu``` 221ccd7db05SDelphine CC Chiu 222d219fa3cSNaveen Moses### Serial uart mux config 223793f9b85SPatrick Williams 224793f9b85SPatrick WilliamsSimilar to host selector there are multiple gpios associated with the serial 225010035eeSManojkiran Edauart mux. These gpio configs are specified as part of json array 226d219fa3cSNaveen Moses"group_gpio_config". 227d219fa3cSNaveen Moses 228793f9b85SPatrick WilliamsHere the serial uart mux output is accessed via OCP debug card. SO the OCP debug 229793f9b85SPatrick Williamscard present gpio is mentioned part of the group_gpio_config. The debug card 230793f9b85SPatrick Williamspresent gpio is identified by its name "debug_card_present". 231d219fa3cSNaveen Moses 232793f9b85SPatrick WilliamsThe other gpios part of the group gpio config is serial uart MUX gpio select 233793f9b85SPatrick Williamslines and serial_uart_rx line. 234d219fa3cSNaveen Moses 235793f9b85SPatrick Williams- name - this is name of the specific gpio line 236793f9b85SPatrick Williams- pin - this represents the pin number from linux dts file. 237793f9b85SPatrick Williams- polarity - polarity type of the gpio 238793f9b85SPatrick Williams- serial_uart_mux_map - This is the map for selected host position to the serial 239d219fa3cSNaveen Moses uart mux select output value 240793f9b85SPatrick Williams 241c7645850SPatrick Williams```json 242d219fa3cSNaveen Moses{ 243d219fa3cSNaveen Moses "name": "SERIAL_UART_MUX", 244d219fa3cSNaveen Moses 245d219fa3cSNaveen Moses "group_gpio_config": [ 246d219fa3cSNaveen Moses { 247d219fa3cSNaveen Moses "name": "serial_uart_sel_0", 248d219fa3cSNaveen Moses "pin": "E0", 249d219fa3cSNaveen Moses "direction": "out", 250d219fa3cSNaveen Moses "polarity": "active_high" 251d219fa3cSNaveen Moses }, 252d219fa3cSNaveen Moses { 253d219fa3cSNaveen Moses "name": "serial_uart_sel_1", 254d219fa3cSNaveen Moses "pin": "E1", 255d219fa3cSNaveen Moses "direction": "out", 256d219fa3cSNaveen Moses "polarity": "active_high" 257d219fa3cSNaveen Moses }, 258d219fa3cSNaveen Moses { 259d219fa3cSNaveen Moses "name": "serial_uart_sel_2", 260d219fa3cSNaveen Moses "pin": "E2", 261d219fa3cSNaveen Moses "direction": "out", 262d219fa3cSNaveen Moses "polarity": "active_high" 263d219fa3cSNaveen Moses }, 264d219fa3cSNaveen Moses { 265d219fa3cSNaveen Moses "name": "serial_uart_sel_3", 266d219fa3cSNaveen Moses "pin": "E3", 267d219fa3cSNaveen Moses "direction": "out", 268d219fa3cSNaveen Moses "polarity": "active_high" 269d219fa3cSNaveen Moses }, 270d219fa3cSNaveen Moses { 271d219fa3cSNaveen Moses "name": "serial_uart_rx", 272d219fa3cSNaveen Moses "pin": "E4", 273d219fa3cSNaveen Moses "direction": "out", 274d219fa3cSNaveen Moses "polarity": "active_high" 275d219fa3cSNaveen Moses }, 276d219fa3cSNaveen Moses { 277d219fa3cSNaveen Moses "name": "debug_card_present", 278d219fa3cSNaveen Moses "pin": "R3", 279d219fa3cSNaveen Moses "direction": "both", 280d219fa3cSNaveen Moses "polarity": "active_high" 281d219fa3cSNaveen Moses } 282d219fa3cSNaveen Moses ], 283d219fa3cSNaveen Moses "serial_uart_mux_map": { 284d219fa3cSNaveen Moses "0": 4, 285d219fa3cSNaveen Moses "1": 0, 286d219fa3cSNaveen Moses "2": 1, 287d219fa3cSNaveen Moses "3": 2, 288d219fa3cSNaveen Moses "4": 3 289d219fa3cSNaveen Moses } 290d219fa3cSNaveen Moses} 291d219fa3cSNaveen Moses``` 292*31ce375eSRush Chen 293*31ce375eSRush Chen## Multiple power gpio config example 294*31ce375eSRush Chen 295*31ce375eSRush ChenThis config is used for configs with multiple power buttons on each slots and 296*31ce375eSRush Chenwhole sled, or for which needs multi-level chassis power control behavior. 297*31ce375eSRush Chen 298*31ce375eSRush Chenname - this is name of the specific gpio line, "POWER_BUTTON" + the index of 299*31ce375eSRush Chenchassis instance 300*31ce375eSRush Chen 301*31ce375eSRush Chen- pin - this represents the pin number from linux dts file. 302*31ce375eSRush Chen- multi-action - default no action, set the corresponding behavior with 303*31ce375eSRush Chen following format: 304*31ce375eSRush Chen- duration - activate when pulling gpio over this value (unit: millisecond) 305*31ce375eSRush Chen- action - chassis power control behavior 306*31ce375eSRush Chen 307*31ce375eSRush Chen```json 308*31ce375eSRush Chen{ 309*31ce375eSRush Chen "gpio_definitions": [ 310*31ce375eSRush Chen { 311*31ce375eSRush Chen "name": "POWER_BUTTON0", 312*31ce375eSRush Chen "pin": "I6", 313*31ce375eSRush Chen "direction": "both", 314*31ce375eSRush Chen "multi-action": [ 315*31ce375eSRush Chen { 316*31ce375eSRush Chen "duration": 4000, 317*31ce375eSRush Chen "action": "chassis cycle" 318*31ce375eSRush Chen } 319*31ce375eSRush Chen ] 320*31ce375eSRush Chen }, 321*31ce375eSRush Chen { 322*31ce375eSRush Chen "name": "POWER_BUTTON1", 323*31ce375eSRush Chen "pin": "V0", 324*31ce375eSRush Chen "direction": "both", 325*31ce375eSRush Chen "multi-action": [ 326*31ce375eSRush Chen { 327*31ce375eSRush Chen "duration": 0, 328*31ce375eSRush Chen "action": "chassis on" 329*31ce375eSRush Chen }, 330*31ce375eSRush Chen { 331*31ce375eSRush Chen "duration": 4000, 332*31ce375eSRush Chen "action": "chassis cycle" 333*31ce375eSRush Chen }, 334*31ce375eSRush Chen { 335*31ce375eSRush Chen "duration": 8000, 336*31ce375eSRush Chen "action": "chassis off" 337*31ce375eSRush Chen } 338*31ce375eSRush Chen ] 339*31ce375eSRush Chen } 340*31ce375eSRush Chen ] 341*31ce375eSRush Chen} 342*31ce375eSRush Chen``` 343