]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
88364387 HT |
2 | /* |
3 | * Chromium OS cros_ec driver | |
4 | * | |
5 | * Copyright (c) 2012 The Chromium OS Authors. | |
88364387 HT |
6 | */ |
7 | ||
8 | #ifndef _CROS_EC_H | |
9 | #define _CROS_EC_H | |
10 | ||
11 | #include <linux/compiler.h> | |
12 | #include <ec_commands.h> | |
88364387 | 13 | #include <cros_ec_message.h> |
32f8a19f | 14 | #include <asm/gpio.h> |
b7e0d73b | 15 | #include <dm/of_extra.h> |
88364387 | 16 | |
88364387 HT |
17 | /* Our configuration information */ |
18 | struct cros_ec_dev { | |
84d6cbd3 | 19 | struct udevice *dev; /* Transport device */ |
32f8a19f | 20 | struct gpio_desc ec_int; /* GPIO used as EC interrupt line */ |
e8c12662 | 21 | int protocol_version; /* Protocol version to use */ |
88364387 HT |
22 | int optimise_flash_write; /* Don't write erased flash blocks */ |
23 | ||
24 | /* | |
25 | * These two buffers will always be dword-aligned and include enough | |
26 | * space for up to 7 word-alignment bytes also, so we can ensure that | |
27 | * the body of the message is always dword-aligned (64-bit). | |
28 | * | |
29 | * We use this alignment to keep ARM and x86 happy. Probably word | |
30 | * alignment would be OK, there might be a small performance advantage | |
31 | * to using dword. | |
32 | */ | |
33 | uint8_t din[ALIGN(MSG_BYTES + sizeof(int64_t), sizeof(int64_t))] | |
34 | __aligned(sizeof(int64_t)); | |
35 | uint8_t dout[ALIGN(MSG_BYTES + sizeof(int64_t), sizeof(int64_t))] | |
36 | __aligned(sizeof(int64_t)); | |
37 | }; | |
38 | ||
39 | /* | |
40 | * Hard-code the number of columns we happen to know we have right now. It | |
41 | * would be more correct to call cros_ec_info() at startup and determine the | |
42 | * actual number of keyboard cols from there. | |
43 | */ | |
44 | #define CROS_EC_KEYSCAN_COLS 13 | |
45 | ||
46 | /* Information returned by a key scan */ | |
47 | struct mbkp_keyscan { | |
48 | uint8_t data[CROS_EC_KEYSCAN_COLS]; | |
49 | }; | |
50 | ||
d7f25f35 SG |
51 | /* Holds information about the Chrome EC */ |
52 | struct fdt_cros_ec { | |
53 | struct fmap_entry flash; /* Address and size of EC flash */ | |
54 | /* | |
55 | * Byte value of erased flash, or -1 if not known. It is normally | |
56 | * 0xff but some flash devices use 0 (e.g. STM32Lxxx) | |
57 | */ | |
58 | int flash_erase_value; | |
59 | struct fmap_entry region[EC_FLASH_REGION_COUNT]; | |
60 | }; | |
61 | ||
88364387 HT |
62 | /** |
63 | * Read the ID of the CROS-EC device | |
64 | * | |
65 | * The ID is a string identifying the CROS-EC device. | |
66 | * | |
67 | * @param dev CROS-EC device | |
68 | * @param id Place to put the ID | |
69 | * @param maxlen Maximum length of the ID field | |
70 | * @return 0 if ok, -1 on error | |
71 | */ | |
6322a7b6 | 72 | int cros_ec_read_id(struct udevice *dev, char *id, int maxlen); |
88364387 HT |
73 | |
74 | /** | |
75 | * Read a keyboard scan from the CROS-EC device | |
76 | * | |
77 | * Send a message requesting a keyboard scan and return the result | |
78 | * | |
79 | * @param dev CROS-EC device | |
80 | * @param scan Place to put the scan results | |
81 | * @return 0 if ok, -1 on error | |
82 | */ | |
745009c4 | 83 | int cros_ec_scan_keyboard(struct udevice *dev, struct mbkp_keyscan *scan); |
88364387 | 84 | |
69007976 ANY |
85 | /** |
86 | * Get the next pending MKBP event from the ChromeOS EC device. | |
87 | * | |
88 | * Send a message requesting the next event and return the result. | |
89 | * | |
90 | * @param event Place to put the event. | |
91 | * @return 0 if ok, <0 on error. | |
92 | */ | |
93 | int cros_ec_get_next_event(struct udevice *dev, | |
94 | struct ec_response_get_next_event *event); | |
95 | ||
88364387 HT |
96 | /** |
97 | * Read which image is currently running on the CROS-EC device. | |
98 | * | |
99 | * @param dev CROS-EC device | |
100 | * @param image Destination for image identifier | |
101 | * @return 0 if ok, <0 on error | |
102 | */ | |
6322a7b6 SG |
103 | int cros_ec_read_current_image(struct udevice *dev, |
104 | enum ec_current_image *image); | |
88364387 HT |
105 | |
106 | /** | |
107 | * Read the hash of the CROS-EC device firmware. | |
108 | * | |
109 | * @param dev CROS-EC device | |
a12ef7e2 | 110 | * @param hash_offset Offset in flash to read from |
88364387 HT |
111 | * @param hash Destination for hash information |
112 | * @return 0 if ok, <0 on error | |
113 | */ | |
a12ef7e2 SG |
114 | int cros_ec_read_hash(struct udevice *dev, uint hash_offset, |
115 | struct ec_response_vboot_hash *hash); | |
88364387 HT |
116 | |
117 | /** | |
118 | * Send a reboot command to the CROS-EC device. | |
119 | * | |
120 | * Note that some reboot commands (such as EC_REBOOT_COLD) also reboot the AP. | |
121 | * | |
122 | * @param dev CROS-EC device | |
123 | * @param cmd Reboot command | |
124 | * @param flags Flags for reboot command (EC_REBOOT_FLAG_*) | |
125 | * @return 0 if ok, <0 on error | |
126 | */ | |
6322a7b6 | 127 | int cros_ec_reboot(struct udevice *dev, enum ec_reboot_cmd cmd, uint8_t flags); |
88364387 HT |
128 | |
129 | /** | |
130 | * Check if the CROS-EC device has an interrupt pending. | |
131 | * | |
132 | * Read the status of the external interrupt connected to the CROS-EC device. | |
133 | * If no external interrupt is configured, this always returns 1. | |
134 | * | |
135 | * @param dev CROS-EC device | |
136 | * @return 0 if no interrupt is pending | |
137 | */ | |
745009c4 | 138 | int cros_ec_interrupt_pending(struct udevice *dev); |
88364387 HT |
139 | |
140 | enum { | |
141 | CROS_EC_OK, | |
142 | CROS_EC_ERR = 1, | |
143 | CROS_EC_ERR_FDT_DECODE, | |
144 | CROS_EC_ERR_CHECK_VERSION, | |
145 | CROS_EC_ERR_READ_ID, | |
146 | CROS_EC_ERR_DEV_INIT, | |
147 | }; | |
148 | ||
149 | /** | |
836bb6e8 | 150 | * Initialise the Chromium OS EC driver |
88364387 HT |
151 | * |
152 | * @param blob Device tree blob containing setup information | |
153 | * @param cros_ecp Returns pointer to the cros_ec device, or NULL if none | |
154 | * @return 0 if we got an cros_ec device and all is well (or no cros_ec is | |
155 | * expected), -ve if we should have an cros_ec device but failed to find | |
156 | * one, or init failed (-CROS_EC_ERR_...). | |
157 | */ | |
6322a7b6 | 158 | int cros_ec_init(const void *blob, struct udevice**cros_ecp); |
88364387 HT |
159 | |
160 | /** | |
161 | * Read information about the keyboard matrix | |
162 | * | |
163 | * @param dev CROS-EC device | |
164 | * @param info Place to put the info structure | |
165 | */ | |
6322a7b6 | 166 | int cros_ec_info(struct udevice *dev, struct ec_response_mkbp_info *info); |
88364387 HT |
167 | |
168 | /** | |
169 | * Read the host event flags | |
170 | * | |
171 | * @param dev CROS-EC device | |
172 | * @param events_ptr Destination for event flags. Not changed on error. | |
173 | * @return 0 if ok, <0 on error | |
174 | */ | |
6322a7b6 | 175 | int cros_ec_get_host_events(struct udevice *dev, uint32_t *events_ptr); |
88364387 HT |
176 | |
177 | /** | |
178 | * Clear the specified host event flags | |
179 | * | |
180 | * @param dev CROS-EC device | |
181 | * @param events Event flags to clear | |
182 | * @return 0 if ok, <0 on error | |
183 | */ | |
6322a7b6 | 184 | int cros_ec_clear_host_events(struct udevice *dev, uint32_t events); |
88364387 HT |
185 | |
186 | /** | |
187 | * Get/set flash protection | |
188 | * | |
189 | * @param dev CROS-EC device | |
190 | * @param set_mask Mask of flags to set; if 0, just retrieves existing | |
191 | * protection state without changing it. | |
192 | * @param set_flags New flag values; only bits in set_mask are applied; | |
193 | * ignored if set_mask=0. | |
194 | * @param prot Destination for updated protection state from EC. | |
195 | * @return 0 if ok, <0 on error | |
196 | */ | |
6322a7b6 SG |
197 | int cros_ec_flash_protect(struct udevice *dev, uint32_t set_mask, |
198 | uint32_t set_flags, | |
199 | struct ec_response_flash_protect *resp); | |
88364387 | 200 | |
72ef8bfd SG |
201 | /** |
202 | * Notify EC of current boot mode | |
203 | * | |
204 | * @param dev CROS-EC device | |
205 | * @param vboot_mode Verified boot mode | |
206 | * @return 0 if ok, <0 on error | |
207 | */ | |
208 | int cros_ec_entering_mode(struct udevice *dev, int mode); | |
88364387 HT |
209 | |
210 | /** | |
211 | * Run internal tests on the cros_ec interface. | |
212 | * | |
213 | * @param dev CROS-EC device | |
214 | * @return 0 if ok, <0 if the test failed | |
215 | */ | |
6322a7b6 | 216 | int cros_ec_test(struct udevice *dev); |
88364387 HT |
217 | |
218 | /** | |
219 | * Update the EC RW copy. | |
220 | * | |
221 | * @param dev CROS-EC device | |
222 | * @param image the content to write | |
223 | * @param imafge_size content length | |
224 | * @return 0 if ok, <0 if the test failed | |
225 | */ | |
6322a7b6 SG |
226 | int cros_ec_flash_update_rw(struct udevice *dev, const uint8_t *image, |
227 | int image_size); | |
88364387 HT |
228 | |
229 | /** | |
230 | * Return a pointer to the board's CROS-EC device | |
231 | * | |
88364387 HT |
232 | * @return pointer to CROS-EC device, or NULL if none is available |
233 | */ | |
42116f64 | 234 | struct udevice *board_get_cros_ec_dev(void); |
88364387 | 235 | |
84d6cbd3 | 236 | struct dm_cros_ec_ops { |
2b4b6533 SG |
237 | /** |
238 | * check_version() - Check the protocol version being used (optional) | |
239 | * | |
240 | * If provided, this function should check that the EC can be supported | |
241 | * by the driver. If not provided, HELLO messages will be sent to try | |
242 | * to determine the protocol version. | |
243 | * | |
244 | * @dev: Device to check | |
245 | * @return 0 if the protocol is valid, -ve if not supported | |
246 | */ | |
84d6cbd3 | 247 | int (*check_version)(struct udevice *dev); |
2b4b6533 SG |
248 | |
249 | /** | |
250 | * command() - Old-style command interface | |
251 | * | |
252 | * This sends a command and receives a response (deprecated, use | |
253 | * packet()) | |
254 | * | |
255 | * @dev: Device to use | |
256 | * @cmd: Command to send (only supports 0-0xff) | |
257 | * @cmd_version: Version of command to send (often 0) | |
258 | * @dout: Output data (may be NULL If dout_len=0) | |
259 | * @dout_len: Length of output data excluding 4-byte header | |
260 | * @dinp: On input, set to point to input data, often struct | |
261 | * cros_ec_dev->din - typically this is left alone but may be | |
262 | * updated by the driver | |
263 | * @din_len: Maximum length of response | |
264 | * @return number of bytes in response, or -ve on error | |
265 | */ | |
84d6cbd3 SG |
266 | int (*command)(struct udevice *dev, uint8_t cmd, int cmd_version, |
267 | const uint8_t *dout, int dout_len, | |
268 | uint8_t **dinp, int din_len); | |
2b4b6533 SG |
269 | |
270 | /** | |
271 | * packet() - New-style command interface | |
272 | * | |
273 | * This interface is preferred over command(), since it is typically | |
274 | * easier to implement. | |
275 | * | |
276 | * @dev: Device to use | |
277 | * @out_bytes: Number of bytes to send (from struct cros_ec_dev->dout) | |
278 | * @in_bytes: Maximum number of bytes to expect in response | |
279 | * @return number of bytes in response, or -ve on error | |
280 | */ | |
84d6cbd3 | 281 | int (*packet)(struct udevice *dev, int out_bytes, int in_bytes); |
3a6c994f SG |
282 | |
283 | /** | |
284 | * get_switches() - Get value of EC switches | |
285 | * | |
286 | * This is currently supported on the LPC EC. | |
287 | * | |
288 | * @dev: Device to use | |
289 | * @return current switches value, or -ENOSYS if not supported | |
290 | */ | |
291 | int (*get_switches)(struct udevice *dev); | |
84d6cbd3 SG |
292 | }; |
293 | ||
294 | #define dm_cros_ec_get_ops(dev) \ | |
295 | ((struct dm_cros_ec_ops *)(dev)->driver->ops) | |
296 | ||
297 | int cros_ec_register(struct udevice *dev); | |
298 | ||
88364387 HT |
299 | /** |
300 | * Dump a block of data for a command. | |
301 | * | |
302 | * @param name Name for data (e.g. 'in', 'out') | |
303 | * @param cmd Command number associated with data, or -1 for none | |
304 | * @param data Data block to dump | |
305 | * @param len Length of data block to dump | |
306 | */ | |
307 | void cros_ec_dump_data(const char *name, int cmd, const uint8_t *data, int len); | |
308 | ||
309 | /** | |
310 | * Calculate a simple 8-bit checksum of a data block | |
311 | * | |
312 | * @param data Data block to checksum | |
313 | * @param size Size of data block in bytes | |
314 | * @return checksum value (0 to 255) | |
315 | */ | |
316 | int cros_ec_calc_checksum(const uint8_t *data, int size); | |
317 | ||
6322a7b6 | 318 | int cros_ec_flash_erase(struct udevice *dev, uint32_t offset, uint32_t size); |
88364387 HT |
319 | |
320 | /** | |
321 | * Read data from the flash | |
322 | * | |
323 | * Read an arbitrary amount of data from the EC flash, by repeatedly reading | |
324 | * small blocks. | |
325 | * | |
326 | * The offset starts at 0. You can obtain the region information from | |
327 | * cros_ec_flash_offset() to find out where to read for a particular region. | |
328 | * | |
329 | * @param dev CROS-EC device | |
330 | * @param data Pointer to data buffer to read into | |
331 | * @param offset Offset within flash to read from | |
332 | * @param size Number of bytes to read | |
333 | * @return 0 if ok, -1 on error | |
334 | */ | |
6322a7b6 SG |
335 | int cros_ec_flash_read(struct udevice *dev, uint8_t *data, uint32_t offset, |
336 | uint32_t size); | |
88364387 | 337 | |
bfeba017 MF |
338 | /** |
339 | * Read back flash parameters | |
340 | * | |
341 | * This function reads back parameters of the flash as reported by the EC | |
342 | * | |
343 | * @param dev Pointer to device | |
344 | * @param info Pointer to output flash info struct | |
345 | */ | |
6322a7b6 SG |
346 | int cros_ec_read_flashinfo(struct udevice *dev, |
347 | struct ec_response_flash_info *info); | |
bfeba017 | 348 | |
88364387 HT |
349 | /** |
350 | * Write data to the flash | |
351 | * | |
352 | * Write an arbitrary amount of data to the EC flash, by repeatedly writing | |
353 | * small blocks. | |
354 | * | |
355 | * The offset starts at 0. You can obtain the region information from | |
356 | * cros_ec_flash_offset() to find out where to write for a particular region. | |
357 | * | |
358 | * Attempting to write to the region where the EC is currently running from | |
359 | * will result in an error. | |
360 | * | |
361 | * @param dev CROS-EC device | |
362 | * @param data Pointer to data buffer to write | |
363 | * @param offset Offset within flash to write to. | |
364 | * @param size Number of bytes to write | |
365 | * @return 0 if ok, -1 on error | |
366 | */ | |
6322a7b6 SG |
367 | int cros_ec_flash_write(struct udevice *dev, const uint8_t *data, |
368 | uint32_t offset, uint32_t size); | |
88364387 HT |
369 | |
370 | /** | |
371 | * Obtain position and size of a flash region | |
372 | * | |
373 | * @param dev CROS-EC device | |
374 | * @param region Flash region to query | |
375 | * @param offset Returns offset of flash region in EC flash | |
376 | * @param size Returns size of flash region | |
377 | * @return 0 if ok, -1 on error | |
378 | */ | |
6322a7b6 SG |
379 | int cros_ec_flash_offset(struct udevice *dev, enum ec_flash_region region, |
380 | uint32_t *offset, uint32_t *size); | |
88364387 | 381 | |
7791df57 SG |
382 | /** |
383 | * cros_ec_get_sku_id() - Read the SKU ID | |
384 | * | |
385 | * @dev: CROS-EC device | |
386 | * return SKU ID, or -ve on error | |
387 | */ | |
388 | int cros_ec_get_sku_id(struct udevice *dev); | |
389 | ||
88364387 | 390 | /** |
6322a7b6 | 391 | * Read/write non-volatile data from/to a CROS-EC device. |
88364387 HT |
392 | * |
393 | * @param dev CROS-EC device | |
394 | * @param block Buffer of VbNvContext to be read/write | |
395 | * @return 0 if ok, -1 on error | |
396 | */ | |
6322a7b6 SG |
397 | int cros_ec_read_nvdata(struct udevice *dev, uint8_t *block, int size); |
398 | int cros_ec_write_nvdata(struct udevice *dev, const uint8_t *block, int size); | |
88364387 HT |
399 | |
400 | /** | |
401 | * Read the version information for the EC images | |
402 | * | |
403 | * @param dev CROS-EC device | |
404 | * @param versionp This is set to point to the version information | |
405 | * @return 0 if ok, -1 on error | |
406 | */ | |
6322a7b6 SG |
407 | int cros_ec_read_version(struct udevice *dev, |
408 | struct ec_response_get_version **versionp); | |
88364387 HT |
409 | |
410 | /** | |
411 | * Read the build information for the EC | |
412 | * | |
413 | * @param dev CROS-EC device | |
414 | * @param versionp This is set to point to the build string | |
415 | * @return 0 if ok, -1 on error | |
416 | */ | |
6322a7b6 | 417 | int cros_ec_read_build_info(struct udevice *dev, char **strp); |
88364387 HT |
418 | |
419 | /** | |
420 | * Switch on/off a LDO / FET. | |
421 | * | |
422 | * @param dev CROS-EC device | |
423 | * @param index index of the LDO/FET to switch | |
424 | * @param state new state of the LDO/FET : EC_LDO_STATE_ON|OFF | |
425 | * @return 0 if ok, -1 on error | |
426 | */ | |
f48eaf01 | 427 | int cros_ec_set_ldo(struct udevice *dev, uint8_t index, uint8_t state); |
88364387 HT |
428 | |
429 | /** | |
430 | * Read back a LDO / FET current state. | |
431 | * | |
432 | * @param dev CROS-EC device | |
433 | * @param index index of the LDO/FET to switch | |
434 | * @param state current state of the LDO/FET : EC_LDO_STATE_ON|OFF | |
435 | * @return 0 if ok, -1 on error | |
436 | */ | |
f48eaf01 | 437 | int cros_ec_get_ldo(struct udevice *dev, uint8_t index, uint8_t *state); |
41364f0f | 438 | |
41364f0f VB |
439 | /** |
440 | * Get access to the error reported when cros_ec_board_init() was called | |
441 | * | |
442 | * This permits delayed reporting of the EC error if it failed during | |
443 | * early init. | |
444 | * | |
445 | * @return error (0 if there was no error, -ve if there was an error) | |
446 | */ | |
447 | int cros_ec_get_error(void); | |
448 | ||
d7f25f35 SG |
449 | /** |
450 | * Returns information from the FDT about the Chrome EC flash | |
451 | * | |
2ec9d171 | 452 | * @param dev Device to read from |
d7f25f35 SG |
453 | * @param config Structure to use to return information |
454 | */ | |
2ec9d171 | 455 | int cros_ec_decode_ec_flash(struct udevice *dev, struct fdt_cros_ec *config); |
d7f25f35 | 456 | |
df93d90a SG |
457 | /** |
458 | * Check the current keyboard state, in case recovery mode is requested. | |
459 | * This function is for sandbox only. | |
460 | * | |
461 | * @param ec CROS-EC device | |
462 | */ | |
6322a7b6 | 463 | void cros_ec_check_keyboard(struct udevice *dev); |
df93d90a | 464 | |
cc456bd7 SG |
465 | struct i2c_msg; |
466 | /* | |
467 | * Tunnel an I2C transfer to the EC | |
468 | * | |
469 | * @param dev CROS-EC device | |
6d1a718f | 470 | * @param port The remote port on EC to use |
cc456bd7 SG |
471 | * @param msg List of messages to transfer |
472 | * @param nmsgs Number of messages to transfer | |
473 | */ | |
6d1a718f MF |
474 | int cros_ec_i2c_tunnel(struct udevice *dev, int port, struct i2c_msg *msg, |
475 | int nmsgs); | |
cc456bd7 | 476 | |
72ef8bfd SG |
477 | /** |
478 | * cros_ec_get_events_b() - Get event mask B | |
479 | * | |
480 | * @return value of event mask, default value of 0 if it could not be read | |
481 | */ | |
482 | uint64_t cros_ec_get_events_b(struct udevice *dev); | |
483 | ||
484 | /** | |
485 | * cros_ec_clear_events_b() - Clear even mask B | |
486 | * | |
487 | * Any pending events in the B range are cleared | |
488 | * | |
489 | * @return 0 if OK, -ve on error | |
490 | */ | |
491 | int cros_ec_clear_events_b(struct udevice *dev, uint64_t mask); | |
492 | ||
493 | /** | |
494 | * cros_ec_efs_verify() - tell the EC to verify one of its images | |
495 | * | |
496 | * @param dev CROS-EC device | |
497 | * @param region Flash region to query | |
498 | * @return 0 if OK, -ve on error | |
499 | */ | |
500 | int cros_ec_efs_verify(struct udevice *dev, enum ec_flash_region region); | |
501 | ||
502 | /** | |
503 | * cros_ec_battery_cutoff() - Request that the battery be cut off | |
504 | * | |
505 | * This tells the battery to stop supplying power. This is used before shipping | |
506 | * a device to ensure that the battery remains charged while the device is | |
507 | * shipped or sitting on the shelf waiting to be purchased. | |
508 | * | |
509 | * @param dev CROS-EC device | |
510 | * @param flags Flags to use (EC_BATTERY_CUTOFF_FLAG_...) | |
511 | * @return 0 if OK, -ve on error | |
512 | */ | |
513 | int cros_ec_battery_cutoff(struct udevice *dev, uint8_t flags); | |
514 | ||
1b9ee288 ANY |
515 | /** |
516 | * cros_ec_set_pwm_duty() - Set duty cycle of a generic pwm | |
517 | * | |
518 | * Note that duty value needs to be passed to the EC as a 16 bit number | |
519 | * for increased precision. | |
520 | * | |
521 | * @param dev CROS-EC device | |
522 | * @param index Index of the pwm | |
523 | * @param duty Desired duty cycle, in 0..EC_PWM_MAX_DUTY range. | |
524 | * @return 0 if OK, -ve on error | |
525 | */ | |
526 | int cros_ec_set_pwm_duty(struct udevice *dev, uint8_t index, uint16_t duty); | |
527 | ||
72ef8bfd SG |
528 | /** |
529 | * cros_ec_read_limit_power() - Check if power is limited by batter/charger | |
530 | * | |
531 | * Sometimes the battery is low and / or the device is connected to a charger | |
532 | * that cannot supply much power. | |
533 | * | |
534 | * @param dev CROS-EC device | |
535 | * @param limit_powerp Returns whether power is limited (0 or 1) | |
536 | * @return 0 if OK, -ENOSYS if the EC does not support this comment, -EINVAL | |
537 | * if the EC returned an invalid response | |
538 | */ | |
539 | int cros_ec_read_limit_power(struct udevice *dev, int *limit_powerp); | |
540 | ||
541 | /** | |
542 | * cros_ec_config_powerbtn() - Configure the behaviour of the power button | |
543 | * | |
544 | * @param dev CROS-EC device | |
545 | * @param flags Flags to use (EC_POWER_BUTTON_...) | |
546 | * @return 0 if OK, -ve on error | |
547 | */ | |
548 | int cros_ec_config_powerbtn(struct udevice *dev, uint32_t flags); | |
549 | ||
550 | /** | |
551 | * cros_ec_get_lid_shutdown_mask() - Set the lid shutdown mask | |
552 | * | |
553 | * Determines whether a lid close event is reported | |
554 | * | |
555 | * @param dev CROS-EC device | |
556 | * @return shufdown mas if OK, -ve on error | |
557 | */ | |
558 | int cros_ec_get_lid_shutdown_mask(struct udevice *dev); | |
559 | ||
560 | /** | |
561 | * cros_ec_set_lid_shutdown_mask() - Set the lid shutdown mask | |
562 | * | |
563 | * Set whether a lid close event is reported | |
564 | * | |
565 | * @param dev CROS-EC device | |
566 | * @param enable true to enable reporting, false to disable | |
567 | * @return shufdown mas if OK, -ve on error | |
568 | */ | |
569 | int cros_ec_set_lid_shutdown_mask(struct udevice *dev, int enable); | |
570 | ||
d8e9a938 SG |
571 | /** |
572 | * cros_ec_hello() - Send a hello message | |
573 | * | |
574 | * Sends a message with a fixed input value and checks that the expected output | |
575 | * value is received | |
576 | * | |
577 | * @dev: CROS-EC device | |
578 | * @handshakep: If non-NULL, returns received handshake value on error | |
579 | * @return 0 if OK, -ve on error | |
580 | */ | |
581 | int cros_ec_hello(struct udevice *dev, uint *handshakep); | |
8aec32f6 SG |
582 | |
583 | /** | |
584 | * cros_ec_get_features() - Get the set of features provided by the EC | |
585 | * | |
586 | * See enum ec_feature_code for the list of available features | |
587 | * | |
588 | * @dev: CROS-EC device | |
589 | * @featuresp: Returns a bitmask of supported features | |
590 | * @return 0 if OK, -ve on error | |
591 | */ | |
592 | int cros_ec_get_features(struct udevice *dev, u64 *featuresp); | |
593 | ||
594 | /** | |
595 | * cros_ec_check_feature() - Check if a feature is supported | |
596 | * | |
597 | * @dev: CROS-EC device | |
598 | * @feature: Feature number to check (enum ec_feature_code) | |
599 | * @return true if supported, false if not, -ve on error | |
600 | */ | |
601 | int cros_ec_check_feature(struct udevice *dev, uint feature); | |
602 | ||
3a6c994f SG |
603 | /** |
604 | * cros_ec_get_switches() - Get switches value | |
605 | * | |
606 | * @dev: CROS-EC device | |
607 | * @return switches value, or -ENOSYS if not supported, or other -ve value on | |
608 | * other error | |
609 | */ | |
610 | int cros_ec_get_switches(struct udevice *dev); | |
611 | ||
10f74659 SG |
612 | /** |
613 | * cros_ec_vstore_supported() - Check if vstore is supported | |
614 | * | |
615 | * @dev: CROS-EC device | |
616 | * @return false if not supported, true if supported, -ve on error | |
617 | */ | |
618 | int cros_ec_vstore_supported(struct udevice *dev); | |
619 | ||
620 | /** | |
621 | * cros_ec_vstore_info() - Get vstore information | |
622 | * | |
623 | * @dev: CROS-EC device | |
624 | * @lockedp: mask of locked slots | |
625 | * @return number of vstore slots supported by the EC,, -ve on error | |
626 | */ | |
627 | int cros_ec_vstore_info(struct udevice *dev, u32 *lockedp); | |
628 | ||
629 | /** | |
630 | * cros_ec_vstore_read() - Read data from EC vstore slot | |
631 | * | |
632 | * @dev: CROS-EC device | |
633 | * @slot: vstore slot to read from | |
634 | * @data: buffer to store read data, must be EC_VSTORE_SLOT_SIZE bytes | |
635 | * @return 0 if OK, -ve on error | |
636 | */ | |
637 | int cros_ec_vstore_read(struct udevice *dev, int slot, uint8_t *data); | |
638 | ||
639 | /** | |
640 | * cros_ec_vstore_write() - Save data into EC vstore slot | |
641 | * | |
642 | * The maximum size of data is EC_VSTORE_SLOT_SIZE. It is the caller's | |
643 | * responsibility to check the number of implemented slots by querying the | |
644 | * vstore info. | |
645 | * | |
646 | * @dev: CROS-EC device | |
647 | * @slot: vstore slot to write into | |
648 | * @data: data to write | |
649 | * @size: size of data in bytes | |
650 | * @return 0 if OK, -ve on error | |
651 | */ | |
652 | int cros_ec_vstore_write(struct udevice *dev, int slot, const uint8_t *data, | |
653 | size_t size); | |
654 | ||
88364387 | 655 | #endif |