xref: /openbmc/phosphor-buttons/README.md (revision 010035ee)
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            "gpio_config" :[
77dd5495cfSNaveen Moses               {
78dd5495cfSNaveen Moses                "pin": "D0",
79dd5495cfSNaveen Moses                "direction": "both"
80dd5495cfSNaveen Moses               }
81dd5495cfSNaveen Moses            ]
82dd5495cfSNaveen Moses        },
83dd5495cfSNaveen Moses        {
84dd5495cfSNaveen Moses            "name": "RESET_BUTTON",
85dd5495cfSNaveen Moses            "gpio_config" :[
86dd5495cfSNaveen Moses                {
87dd5495cfSNaveen Moses                "pin": "AB0",
88dd5495cfSNaveen Moses                "direction": "both"
89dd5495cfSNaveen Moses                 }
90dd5495cfSNaveen Moses            ]
91dd5495cfSNaveen Moses        },
92dd5495cfSNaveen Moses        {
93dd5495cfSNaveen Moses            "name" : "HOST_SELECTOR",
94dd5495cfSNaveen Moses
95d219fa3cSNaveen Moses            "group_gpio_config" : [
96dd5495cfSNaveen Moses            {
97dd5495cfSNaveen Moses                "pin": "AA4",
98dd5495cfSNaveen Moses                "direction": "both"
99dd5495cfSNaveen Moses            },
100dd5495cfSNaveen Moses            {
101dd5495cfSNaveen Moses                "pin": "AA5",
102dd5495cfSNaveen Moses                "direction": "both"
103dd5495cfSNaveen Moses            },
104dd5495cfSNaveen Moses            {
105dd5495cfSNaveen Moses                "pin": "AA6",
106dd5495cfSNaveen Moses                "direction": "both"
107dd5495cfSNaveen Moses            },
108dd5495cfSNaveen Moses            {
109dd5495cfSNaveen Moses                "pin": "AA7",
110dd5495cfSNaveen Moses                "direction": "both"
111dd5495cfSNaveen Moses            }
112dd5495cfSNaveen Moses            ]
113dd5495cfSNaveen Moses        },
114dd5495cfSNaveen Moses
115dd5495cfSNaveen Moses}
116d219fa3cSNaveen Moses```
117793f9b85SPatrick Williams
118d219fa3cSNaveen Moses## Single gpio config
119793f9b85SPatrick Williams
120793f9b85SPatrick WilliamsThis config is original config which can be used for configs with only single
121793f9b85SPatrick Williamsgpio such as power button,reset button, OCP debug card host select button.
122793f9b85SPatrick Williams
123c7645850SPatrick Williams```json
124d219fa3cSNaveen Moses{
125d219fa3cSNaveen Moses    "name": "POWER_BUTTON",
126d219fa3cSNaveen Moses    "pin": "D0",
127d219fa3cSNaveen Moses    "direction": "both"
128d219fa3cSNaveen Moses},
129d219fa3cSNaveen Moses```
130793f9b85SPatrick Williams
131793f9b85SPatrick Williams**Note:** this config is used by most of the other platforms so this format is
132793f9b85SPatrick Williamskept as it is so that existing gpio configs do not get affected.
133d219fa3cSNaveen Moses
134d219fa3cSNaveen Moses## Group gpio config
135793f9b85SPatrick Williams
136793f9b85SPatrick WilliamsThe following configs are related to multi-host bmc systems more info explained
137793f9b85SPatrick Williamsin the design:
138c7645850SPatrick Williams<https://github.com/openbmc/docs/blob/master/designs/multihost-phosphor-buttons.md>
139d219fa3cSNaveen Moses
140d219fa3cSNaveen Moses### Host selector gpio config example
141793f9b85SPatrick Williams
142d219fa3cSNaveen MosesThe host selector has four gpios associated. So the related gpios are mentioned
143c7645850SPatrick Williamsin a json array named group_gpio_config.
144d219fa3cSNaveen Moses
145793f9b85SPatrick Williams- name - This is name of the specific gpio line
146793f9b85SPatrick Williams- pin - This represents the pin number from linux dts file.
147793f9b85SPatrick Williams- polarity - polarity type of the gpio
148793f9b85SPatrick Williams- max_position - This represents the max number of hosts in the multi-host bmc
149793f9b85SPatrick Williams  system.
150793f9b85SPatrick Williams- host_selector_map - This map is oem specific host position map which has how
151793f9b85SPatrick Williams  the value read from the host selector gpios is mapped to the respective host
152793f9b85SPatrick Williams  number.
153d219fa3cSNaveen Moses
154d219fa3cSNaveen MosesExample : The value of "7" derived from the 4 host select gpio lines are mapped
155d219fa3cSNaveen Mosesto host position 1.
156793f9b85SPatrick Williams
157c7645850SPatrick Williams```json
158d219fa3cSNaveen Moses{
159d219fa3cSNaveen Moses  "name": "HOST_SELECTOR",
160d219fa3cSNaveen Moses
161d219fa3cSNaveen Moses  "group_gpio_config": [
162d219fa3cSNaveen Moses    {
163d219fa3cSNaveen Moses      "name": "host_select_0",
164d219fa3cSNaveen Moses      "pin": "AA4",
165d219fa3cSNaveen Moses      "direction": "both",
166d219fa3cSNaveen Moses      "polarity": "active_high"
167d219fa3cSNaveen Moses    },
168d219fa3cSNaveen Moses    {
169d219fa3cSNaveen Moses      "name": "host_select_1",
170d219fa3cSNaveen Moses      "pin": "AA5",
171d219fa3cSNaveen Moses      "direction": "both",
172d219fa3cSNaveen Moses      "polarity": "active_high"
173d219fa3cSNaveen Moses    },
174d219fa3cSNaveen Moses    {
175d219fa3cSNaveen Moses      "name": "host_select_2",
176d219fa3cSNaveen Moses      "pin": "AA6",
177d219fa3cSNaveen Moses      "direction": "both",
178d219fa3cSNaveen Moses      "polarity": "active_high"
179d219fa3cSNaveen Moses    },
180d219fa3cSNaveen Moses    {
181d219fa3cSNaveen Moses      "name": "host_select_3",
182d219fa3cSNaveen Moses      "pin": "AA7",
183d219fa3cSNaveen Moses      "direction": "both",
184d219fa3cSNaveen Moses      "polarity": "active_high"
185d219fa3cSNaveen Moses    }
186d219fa3cSNaveen Moses  ],
187d219fa3cSNaveen Moses  "max_position": 4,
188d219fa3cSNaveen Moses  "host_selector_map": {
189d219fa3cSNaveen Moses    "6": 0,
190d219fa3cSNaveen Moses    "7": 1,
191d219fa3cSNaveen Moses    "8": 2,
192d219fa3cSNaveen Moses    "9": 3,
193d219fa3cSNaveen Moses    "10": 4,
194d219fa3cSNaveen Moses    "11": 0,
195d219fa3cSNaveen Moses    "12": 1,
196d219fa3cSNaveen Moses    "13": 2,
197d219fa3cSNaveen Moses    "14": 3,
198d219fa3cSNaveen Moses    "15": 4
199d219fa3cSNaveen Moses  }
200c7645850SPatrick Williams}
201d219fa3cSNaveen Moses```
202793f9b85SPatrick Williams
203ccd7db05SDelphine CC Chiu### Host selector cpld config example
204ccd7db05SDelphine CC Chiu
205ccd7db05SDelphine CC ChiuThere are also some systems that get the host selector selection from the CPLD,
206ccd7db05SDelphine CC Chiuthe configuration is provided below.
207ccd7db05SDelphine CC Chiu
208ccd7db05SDelphine CC Chiu- name - The button interface type name.
209ccd7db05SDelphine CC Chiu- i2c_bus - The i2c bus of cpld
210ccd7db05SDelphine CC Chiu- i2c_address - The i2c address of cpld
211ccd7db05SDelphine CC Chiu- register_name - The register file name exported by CLD driver for IO event
212ccd7db05SDelphine CC Chiu  listen
213ccd7db05SDelphine CC Chiu- max_position - This represents the max number of hosts in the multi-host bmc
214ccd7db05SDelphine CC Chiu  system.
215ccd7db05SDelphine CC Chiu
216ccd7db05SDelphine CC Chiu```json
217ccd7db05SDelphine CC Chiu{
218ccd7db05SDelphine CC Chiu  "cpld_definitions": [
219ccd7db05SDelphine CC Chiu    {
220ccd7db05SDelphine CC Chiu      "name": "HOST_SELECTOR",
221ccd7db05SDelphine CC Chiu      "i2c_bus": 12,
222ccd7db05SDelphine CC Chiu      "i2c_address": 15,
223ccd7db05SDelphine CC Chiu      "register_name": "uart-selection-debug-card",
224ccd7db05SDelphine CC Chiu      "max_position": 4
225ccd7db05SDelphine CC Chiu    }
226ccd7db05SDelphine CC Chiu  ]
227ccd7db05SDelphine CC Chiu}
228ccd7db05SDelphine CC Chiu```
229ccd7db05SDelphine CC Chiu
230d219fa3cSNaveen Moses### Serial uart mux config
231793f9b85SPatrick Williams
232793f9b85SPatrick WilliamsSimilar to host selector there are multiple gpios associated with the serial
233*010035eeSManojkiran Edauart mux. These gpio configs are specified as part of json array
234d219fa3cSNaveen Moses"group_gpio_config".
235d219fa3cSNaveen Moses
236793f9b85SPatrick WilliamsHere the serial uart mux output is accessed via OCP debug card. SO the OCP debug
237793f9b85SPatrick Williamscard present gpio is mentioned part of the group_gpio_config. The debug card
238793f9b85SPatrick Williamspresent gpio is identified by its name "debug_card_present".
239d219fa3cSNaveen Moses
240793f9b85SPatrick WilliamsThe other gpios part of the group gpio config is serial uart MUX gpio select
241793f9b85SPatrick Williamslines and serial_uart_rx line.
242d219fa3cSNaveen Moses
243793f9b85SPatrick Williams- name - this is name of the specific gpio line
244793f9b85SPatrick Williams- pin - this represents the pin number from linux dts file.
245793f9b85SPatrick Williams- polarity - polarity type of the gpio
246793f9b85SPatrick Williams- serial_uart_mux_map - This is the map for selected host position to the serial
247d219fa3cSNaveen Moses  uart mux select output value
248793f9b85SPatrick Williams
249c7645850SPatrick Williams```json
250d219fa3cSNaveen Moses{
251d219fa3cSNaveen Moses  "name": "SERIAL_UART_MUX",
252d219fa3cSNaveen Moses
253d219fa3cSNaveen Moses  "group_gpio_config": [
254d219fa3cSNaveen Moses    {
255d219fa3cSNaveen Moses      "name": "serial_uart_sel_0",
256d219fa3cSNaveen Moses      "pin": "E0",
257d219fa3cSNaveen Moses      "direction": "out",
258d219fa3cSNaveen Moses      "polarity": "active_high"
259d219fa3cSNaveen Moses    },
260d219fa3cSNaveen Moses    {
261d219fa3cSNaveen Moses      "name": "serial_uart_sel_1",
262d219fa3cSNaveen Moses      "pin": "E1",
263d219fa3cSNaveen Moses      "direction": "out",
264d219fa3cSNaveen Moses      "polarity": "active_high"
265d219fa3cSNaveen Moses    },
266d219fa3cSNaveen Moses    {
267d219fa3cSNaveen Moses      "name": "serial_uart_sel_2",
268d219fa3cSNaveen Moses      "pin": "E2",
269d219fa3cSNaveen Moses      "direction": "out",
270d219fa3cSNaveen Moses      "polarity": "active_high"
271d219fa3cSNaveen Moses    },
272d219fa3cSNaveen Moses    {
273d219fa3cSNaveen Moses      "name": "serial_uart_sel_3",
274d219fa3cSNaveen Moses      "pin": "E3",
275d219fa3cSNaveen Moses      "direction": "out",
276d219fa3cSNaveen Moses      "polarity": "active_high"
277d219fa3cSNaveen Moses    },
278d219fa3cSNaveen Moses    {
279d219fa3cSNaveen Moses      "name": "serial_uart_rx",
280d219fa3cSNaveen Moses      "pin": "E4",
281d219fa3cSNaveen Moses      "direction": "out",
282d219fa3cSNaveen Moses      "polarity": "active_high"
283d219fa3cSNaveen Moses    },
284d219fa3cSNaveen Moses    {
285d219fa3cSNaveen Moses      "name": "debug_card_present",
286d219fa3cSNaveen Moses      "pin": "R3",
287d219fa3cSNaveen Moses      "direction": "both",
288d219fa3cSNaveen Moses      "polarity": "active_high"
289d219fa3cSNaveen Moses    }
290d219fa3cSNaveen Moses  ],
291d219fa3cSNaveen Moses  "serial_uart_mux_map": {
292d219fa3cSNaveen Moses    "0": 4,
293d219fa3cSNaveen Moses    "1": 0,
294d219fa3cSNaveen Moses    "2": 1,
295d219fa3cSNaveen Moses    "3": 2,
296d219fa3cSNaveen Moses    "4": 3
297d219fa3cSNaveen Moses  }
298d219fa3cSNaveen Moses}
299d219fa3cSNaveen Moses```
300