xref: /openbmc/phosphor-buttons/README.md (revision 14c1e96445898800fb36b3cab4235eeddbc59535)
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