xref: /rk3399_rockchip-uboot/include/cros_ec.h (revision 2ec9d171bc5ee8c9bba78d9f35d61d2473467f66)
188364387SHung-ying Tyan /*
288364387SHung-ying Tyan  * Chromium OS cros_ec driver
388364387SHung-ying Tyan  *
488364387SHung-ying Tyan  * Copyright (c) 2012 The Chromium OS Authors.
588364387SHung-ying Tyan  *
61a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
788364387SHung-ying Tyan  */
888364387SHung-ying Tyan 
988364387SHung-ying Tyan #ifndef _CROS_EC_H
1088364387SHung-ying Tyan #define _CROS_EC_H
1188364387SHung-ying Tyan 
1288364387SHung-ying Tyan #include <linux/compiler.h>
1388364387SHung-ying Tyan #include <ec_commands.h>
1488364387SHung-ying Tyan #include <cros_ec_message.h>
1532f8a19fSSimon Glass #include <asm/gpio.h>
16b7e0d73bSSimon Glass #include <dm/of_extra.h>
1788364387SHung-ying Tyan 
1888364387SHung-ying Tyan /* Our configuration information */
1988364387SHung-ying Tyan struct cros_ec_dev {
2084d6cbd3SSimon Glass 	struct udevice *dev;		/* Transport device */
2132f8a19fSSimon Glass 	struct gpio_desc ec_int;	/* GPIO used as EC interrupt line */
22e8c12662SRandall Spangler 	int protocol_version;           /* Protocol version to use */
2388364387SHung-ying Tyan 	int optimise_flash_write;	/* Don't write erased flash blocks */
2488364387SHung-ying Tyan 
2588364387SHung-ying Tyan 	/*
2688364387SHung-ying Tyan 	 * These two buffers will always be dword-aligned and include enough
2788364387SHung-ying Tyan 	 * space for up to 7 word-alignment bytes also, so we can ensure that
2888364387SHung-ying Tyan 	 * the body of the message is always dword-aligned (64-bit).
2988364387SHung-ying Tyan 	 *
3088364387SHung-ying Tyan 	 * We use this alignment to keep ARM and x86 happy. Probably word
3188364387SHung-ying Tyan 	 * alignment would be OK, there might be a small performance advantage
3288364387SHung-ying Tyan 	 * to using dword.
3388364387SHung-ying Tyan 	 */
3488364387SHung-ying Tyan 	uint8_t din[ALIGN(MSG_BYTES + sizeof(int64_t), sizeof(int64_t))]
3588364387SHung-ying Tyan 		__aligned(sizeof(int64_t));
3688364387SHung-ying Tyan 	uint8_t dout[ALIGN(MSG_BYTES + sizeof(int64_t), sizeof(int64_t))]
3788364387SHung-ying Tyan 		__aligned(sizeof(int64_t));
3888364387SHung-ying Tyan };
3988364387SHung-ying Tyan 
4088364387SHung-ying Tyan /*
4188364387SHung-ying Tyan  * Hard-code the number of columns we happen to know we have right now.  It
4288364387SHung-ying Tyan  * would be more correct to call cros_ec_info() at startup and determine the
4388364387SHung-ying Tyan  * actual number of keyboard cols from there.
4488364387SHung-ying Tyan  */
4588364387SHung-ying Tyan #define CROS_EC_KEYSCAN_COLS 13
4688364387SHung-ying Tyan 
4788364387SHung-ying Tyan /* Information returned by a key scan */
4888364387SHung-ying Tyan struct mbkp_keyscan {
4988364387SHung-ying Tyan 	uint8_t data[CROS_EC_KEYSCAN_COLS];
5088364387SHung-ying Tyan };
5188364387SHung-ying Tyan 
52d7f25f35SSimon Glass /* Holds information about the Chrome EC */
53d7f25f35SSimon Glass struct fdt_cros_ec {
54d7f25f35SSimon Glass 	struct fmap_entry flash;	/* Address and size of EC flash */
55d7f25f35SSimon Glass 	/*
56d7f25f35SSimon Glass 	 * Byte value of erased flash, or -1 if not known. It is normally
57d7f25f35SSimon Glass 	 * 0xff but some flash devices use 0 (e.g. STM32Lxxx)
58d7f25f35SSimon Glass 	 */
59d7f25f35SSimon Glass 	int flash_erase_value;
60d7f25f35SSimon Glass 	struct fmap_entry region[EC_FLASH_REGION_COUNT];
61d7f25f35SSimon Glass };
62d7f25f35SSimon Glass 
6388364387SHung-ying Tyan /**
6488364387SHung-ying Tyan  * Read the ID of the CROS-EC device
6588364387SHung-ying Tyan  *
6688364387SHung-ying Tyan  * The ID is a string identifying the CROS-EC device.
6788364387SHung-ying Tyan  *
6888364387SHung-ying Tyan  * @param dev		CROS-EC device
6988364387SHung-ying Tyan  * @param id		Place to put the ID
7088364387SHung-ying Tyan  * @param maxlen	Maximum length of the ID field
7188364387SHung-ying Tyan  * @return 0 if ok, -1 on error
7288364387SHung-ying Tyan  */
7388364387SHung-ying Tyan int cros_ec_read_id(struct cros_ec_dev *dev, char *id, int maxlen);
7488364387SHung-ying Tyan 
7588364387SHung-ying Tyan /**
7688364387SHung-ying Tyan  * Read a keyboard scan from the CROS-EC device
7788364387SHung-ying Tyan  *
7888364387SHung-ying Tyan  * Send a message requesting a keyboard scan and return the result
7988364387SHung-ying Tyan  *
8088364387SHung-ying Tyan  * @param dev		CROS-EC device
8188364387SHung-ying Tyan  * @param scan		Place to put the scan results
8288364387SHung-ying Tyan  * @return 0 if ok, -1 on error
8388364387SHung-ying Tyan  */
84745009c4SSimon Glass int cros_ec_scan_keyboard(struct udevice *dev, struct mbkp_keyscan *scan);
8588364387SHung-ying Tyan 
8688364387SHung-ying Tyan /**
8788364387SHung-ying Tyan  * Read which image is currently running on the CROS-EC device.
8888364387SHung-ying Tyan  *
8988364387SHung-ying Tyan  * @param dev		CROS-EC device
9088364387SHung-ying Tyan  * @param image		Destination for image identifier
9188364387SHung-ying Tyan  * @return 0 if ok, <0 on error
9288364387SHung-ying Tyan  */
9388364387SHung-ying Tyan int cros_ec_read_current_image(struct cros_ec_dev *dev,
9488364387SHung-ying Tyan 		enum ec_current_image *image);
9588364387SHung-ying Tyan 
9688364387SHung-ying Tyan /**
9788364387SHung-ying Tyan  * Read the hash of the CROS-EC device firmware.
9888364387SHung-ying Tyan  *
9988364387SHung-ying Tyan  * @param dev		CROS-EC device
10088364387SHung-ying Tyan  * @param hash		Destination for hash information
10188364387SHung-ying Tyan  * @return 0 if ok, <0 on error
10288364387SHung-ying Tyan  */
10388364387SHung-ying Tyan int cros_ec_read_hash(struct cros_ec_dev *dev,
10488364387SHung-ying Tyan 		struct ec_response_vboot_hash *hash);
10588364387SHung-ying Tyan 
10688364387SHung-ying Tyan /**
10788364387SHung-ying Tyan  * Send a reboot command to the CROS-EC device.
10888364387SHung-ying Tyan  *
10988364387SHung-ying Tyan  * Note that some reboot commands (such as EC_REBOOT_COLD) also reboot the AP.
11088364387SHung-ying Tyan  *
11188364387SHung-ying Tyan  * @param dev		CROS-EC device
11288364387SHung-ying Tyan  * @param cmd		Reboot command
11388364387SHung-ying Tyan  * @param flags         Flags for reboot command (EC_REBOOT_FLAG_*)
11488364387SHung-ying Tyan  * @return 0 if ok, <0 on error
11588364387SHung-ying Tyan  */
11688364387SHung-ying Tyan int cros_ec_reboot(struct cros_ec_dev *dev, enum ec_reboot_cmd cmd,
11788364387SHung-ying Tyan 		uint8_t flags);
11888364387SHung-ying Tyan 
11988364387SHung-ying Tyan /**
12088364387SHung-ying Tyan  * Check if the CROS-EC device has an interrupt pending.
12188364387SHung-ying Tyan  *
12288364387SHung-ying Tyan  * Read the status of the external interrupt connected to the CROS-EC device.
12388364387SHung-ying Tyan  * If no external interrupt is configured, this always returns 1.
12488364387SHung-ying Tyan  *
12588364387SHung-ying Tyan  * @param dev		CROS-EC device
12688364387SHung-ying Tyan  * @return 0 if no interrupt is pending
12788364387SHung-ying Tyan  */
128745009c4SSimon Glass int cros_ec_interrupt_pending(struct udevice *dev);
12988364387SHung-ying Tyan 
13088364387SHung-ying Tyan enum {
13188364387SHung-ying Tyan 	CROS_EC_OK,
13288364387SHung-ying Tyan 	CROS_EC_ERR = 1,
13388364387SHung-ying Tyan 	CROS_EC_ERR_FDT_DECODE,
13488364387SHung-ying Tyan 	CROS_EC_ERR_CHECK_VERSION,
13588364387SHung-ying Tyan 	CROS_EC_ERR_READ_ID,
13688364387SHung-ying Tyan 	CROS_EC_ERR_DEV_INIT,
13788364387SHung-ying Tyan };
13888364387SHung-ying Tyan 
13988364387SHung-ying Tyan /**
140836bb6e8SSimon Glass  * Initialise the Chromium OS EC driver
14188364387SHung-ying Tyan  *
14288364387SHung-ying Tyan  * @param blob		Device tree blob containing setup information
14388364387SHung-ying Tyan  * @param cros_ecp        Returns pointer to the cros_ec device, or NULL if none
14488364387SHung-ying Tyan  * @return 0 if we got an cros_ec device and all is well (or no cros_ec is
14588364387SHung-ying Tyan  *	expected), -ve if we should have an cros_ec device but failed to find
14688364387SHung-ying Tyan  *	one, or init failed (-CROS_EC_ERR_...).
14788364387SHung-ying Tyan  */
14888364387SHung-ying Tyan int cros_ec_init(const void *blob, struct cros_ec_dev **cros_ecp);
14988364387SHung-ying Tyan 
15088364387SHung-ying Tyan /**
15188364387SHung-ying Tyan  * Read information about the keyboard matrix
15288364387SHung-ying Tyan  *
15388364387SHung-ying Tyan  * @param dev		CROS-EC device
15488364387SHung-ying Tyan  * @param info		Place to put the info structure
15588364387SHung-ying Tyan  */
15688364387SHung-ying Tyan int cros_ec_info(struct cros_ec_dev *dev,
157836bb6e8SSimon Glass 		struct ec_response_mkbp_info *info);
15888364387SHung-ying Tyan 
15988364387SHung-ying Tyan /**
16088364387SHung-ying Tyan  * Read the host event flags
16188364387SHung-ying Tyan  *
16288364387SHung-ying Tyan  * @param dev		CROS-EC device
16388364387SHung-ying Tyan  * @param events_ptr	Destination for event flags.  Not changed on error.
16488364387SHung-ying Tyan  * @return 0 if ok, <0 on error
16588364387SHung-ying Tyan  */
16688364387SHung-ying Tyan int cros_ec_get_host_events(struct cros_ec_dev *dev, uint32_t *events_ptr);
16788364387SHung-ying Tyan 
16888364387SHung-ying Tyan /**
16988364387SHung-ying Tyan  * Clear the specified host event flags
17088364387SHung-ying Tyan  *
17188364387SHung-ying Tyan  * @param dev		CROS-EC device
17288364387SHung-ying Tyan  * @param events	Event flags to clear
17388364387SHung-ying Tyan  * @return 0 if ok, <0 on error
17488364387SHung-ying Tyan  */
17588364387SHung-ying Tyan int cros_ec_clear_host_events(struct cros_ec_dev *dev, uint32_t events);
17688364387SHung-ying Tyan 
17788364387SHung-ying Tyan /**
17888364387SHung-ying Tyan  * Get/set flash protection
17988364387SHung-ying Tyan  *
18088364387SHung-ying Tyan  * @param dev		CROS-EC device
18188364387SHung-ying Tyan  * @param set_mask	Mask of flags to set; if 0, just retrieves existing
18288364387SHung-ying Tyan  *                      protection state without changing it.
18388364387SHung-ying Tyan  * @param set_flags	New flag values; only bits in set_mask are applied;
18488364387SHung-ying Tyan  *                      ignored if set_mask=0.
18588364387SHung-ying Tyan  * @param prot          Destination for updated protection state from EC.
18688364387SHung-ying Tyan  * @return 0 if ok, <0 on error
18788364387SHung-ying Tyan  */
18888364387SHung-ying Tyan int cros_ec_flash_protect(struct cros_ec_dev *dev,
18988364387SHung-ying Tyan 		       uint32_t set_mask, uint32_t set_flags,
19088364387SHung-ying Tyan 		       struct ec_response_flash_protect *resp);
19188364387SHung-ying Tyan 
19288364387SHung-ying Tyan 
19388364387SHung-ying Tyan /**
19488364387SHung-ying Tyan  * Run internal tests on the cros_ec interface.
19588364387SHung-ying Tyan  *
19688364387SHung-ying Tyan  * @param dev		CROS-EC device
19788364387SHung-ying Tyan  * @return 0 if ok, <0 if the test failed
19888364387SHung-ying Tyan  */
19988364387SHung-ying Tyan int cros_ec_test(struct cros_ec_dev *dev);
20088364387SHung-ying Tyan 
20188364387SHung-ying Tyan /**
20288364387SHung-ying Tyan  * Update the EC RW copy.
20388364387SHung-ying Tyan  *
20488364387SHung-ying Tyan  * @param dev		CROS-EC device
20588364387SHung-ying Tyan  * @param image		the content to write
20688364387SHung-ying Tyan  * @param imafge_size	content length
20788364387SHung-ying Tyan  * @return 0 if ok, <0 if the test failed
20888364387SHung-ying Tyan  */
20988364387SHung-ying Tyan int cros_ec_flash_update_rw(struct cros_ec_dev *dev,
21088364387SHung-ying Tyan 			 const uint8_t  *image, int image_size);
21188364387SHung-ying Tyan 
21288364387SHung-ying Tyan /**
21388364387SHung-ying Tyan  * Return a pointer to the board's CROS-EC device
21488364387SHung-ying Tyan  *
21588364387SHung-ying Tyan  * This should be implemented by board files.
21688364387SHung-ying Tyan  *
21788364387SHung-ying Tyan  * @return pointer to CROS-EC device, or NULL if none is available
21888364387SHung-ying Tyan  */
21988364387SHung-ying Tyan struct cros_ec_dev *board_get_cros_ec_dev(void);
22088364387SHung-ying Tyan 
22184d6cbd3SSimon Glass struct dm_cros_ec_ops {
22284d6cbd3SSimon Glass 	int (*check_version)(struct udevice *dev);
22384d6cbd3SSimon Glass 	int (*command)(struct udevice *dev, uint8_t cmd, int cmd_version,
22484d6cbd3SSimon Glass 		       const uint8_t *dout, int dout_len,
22584d6cbd3SSimon Glass 		       uint8_t **dinp, int din_len);
22684d6cbd3SSimon Glass 	int (*packet)(struct udevice *dev, int out_bytes, int in_bytes);
22784d6cbd3SSimon Glass };
22884d6cbd3SSimon Glass 
22984d6cbd3SSimon Glass #define dm_cros_ec_get_ops(dev) \
23084d6cbd3SSimon Glass 		((struct dm_cros_ec_ops *)(dev)->driver->ops)
23184d6cbd3SSimon Glass 
23284d6cbd3SSimon Glass int cros_ec_register(struct udevice *dev);
23384d6cbd3SSimon Glass 
234a6070283SRandall Spangler /**
23588364387SHung-ying Tyan  * Dump a block of data for a command.
23688364387SHung-ying Tyan  *
23788364387SHung-ying Tyan  * @param name	Name for data (e.g. 'in', 'out')
23888364387SHung-ying Tyan  * @param cmd	Command number associated with data, or -1 for none
23988364387SHung-ying Tyan  * @param data	Data block to dump
24088364387SHung-ying Tyan  * @param len	Length of data block to dump
24188364387SHung-ying Tyan  */
24288364387SHung-ying Tyan void cros_ec_dump_data(const char *name, int cmd, const uint8_t *data, int len);
24388364387SHung-ying Tyan 
24488364387SHung-ying Tyan /**
24588364387SHung-ying Tyan  * Calculate a simple 8-bit checksum of a data block
24688364387SHung-ying Tyan  *
24788364387SHung-ying Tyan  * @param data	Data block to checksum
24888364387SHung-ying Tyan  * @param size	Size of data block in bytes
24988364387SHung-ying Tyan  * @return checksum value (0 to 255)
25088364387SHung-ying Tyan  */
25188364387SHung-ying Tyan int cros_ec_calc_checksum(const uint8_t *data, int size);
25288364387SHung-ying Tyan 
25388364387SHung-ying Tyan int cros_ec_flash_erase(struct cros_ec_dev *dev, uint32_t offset,
25488364387SHung-ying Tyan 		uint32_t size);
25588364387SHung-ying Tyan 
25688364387SHung-ying Tyan /**
25788364387SHung-ying Tyan  * Read data from the flash
25888364387SHung-ying Tyan  *
25988364387SHung-ying Tyan  * Read an arbitrary amount of data from the EC flash, by repeatedly reading
26088364387SHung-ying Tyan  * small blocks.
26188364387SHung-ying Tyan  *
26288364387SHung-ying Tyan  * The offset starts at 0. You can obtain the region information from
26388364387SHung-ying Tyan  * cros_ec_flash_offset() to find out where to read for a particular region.
26488364387SHung-ying Tyan  *
26588364387SHung-ying Tyan  * @param dev		CROS-EC device
26688364387SHung-ying Tyan  * @param data		Pointer to data buffer to read into
26788364387SHung-ying Tyan  * @param offset	Offset within flash to read from
26888364387SHung-ying Tyan  * @param size		Number of bytes to read
26988364387SHung-ying Tyan  * @return 0 if ok, -1 on error
27088364387SHung-ying Tyan  */
27188364387SHung-ying Tyan int cros_ec_flash_read(struct cros_ec_dev *dev, uint8_t *data, uint32_t offset,
27288364387SHung-ying Tyan 		    uint32_t size);
27388364387SHung-ying Tyan 
27488364387SHung-ying Tyan /**
275bfeba017SMoritz Fischer  * Read back flash parameters
276bfeba017SMoritz Fischer  *
277bfeba017SMoritz Fischer  * This function reads back parameters of the flash as reported by the EC
278bfeba017SMoritz Fischer  *
279bfeba017SMoritz Fischer  * @param dev  Pointer to device
280bfeba017SMoritz Fischer  * @param info Pointer to output flash info struct
281bfeba017SMoritz Fischer  */
282bfeba017SMoritz Fischer int cros_ec_read_flashinfo(struct cros_ec_dev *dev,
283bfeba017SMoritz Fischer 			  struct ec_response_flash_info *info);
284bfeba017SMoritz Fischer 
285bfeba017SMoritz Fischer /**
28688364387SHung-ying Tyan  * Write data to the flash
28788364387SHung-ying Tyan  *
28888364387SHung-ying Tyan  * Write an arbitrary amount of data to the EC flash, by repeatedly writing
28988364387SHung-ying Tyan  * small blocks.
29088364387SHung-ying Tyan  *
29188364387SHung-ying Tyan  * The offset starts at 0. You can obtain the region information from
29288364387SHung-ying Tyan  * cros_ec_flash_offset() to find out where to write for a particular region.
29388364387SHung-ying Tyan  *
29488364387SHung-ying Tyan  * Attempting to write to the region where the EC is currently running from
29588364387SHung-ying Tyan  * will result in an error.
29688364387SHung-ying Tyan  *
29788364387SHung-ying Tyan  * @param dev		CROS-EC device
29888364387SHung-ying Tyan  * @param data		Pointer to data buffer to write
29988364387SHung-ying Tyan  * @param offset	Offset within flash to write to.
30088364387SHung-ying Tyan  * @param size		Number of bytes to write
30188364387SHung-ying Tyan  * @return 0 if ok, -1 on error
30288364387SHung-ying Tyan  */
30388364387SHung-ying Tyan int cros_ec_flash_write(struct cros_ec_dev *dev, const uint8_t *data,
30488364387SHung-ying Tyan 		     uint32_t offset, uint32_t size);
30588364387SHung-ying Tyan 
30688364387SHung-ying Tyan /**
30788364387SHung-ying Tyan  * Obtain position and size of a flash region
30888364387SHung-ying Tyan  *
30988364387SHung-ying Tyan  * @param dev		CROS-EC device
31088364387SHung-ying Tyan  * @param region	Flash region to query
31188364387SHung-ying Tyan  * @param offset	Returns offset of flash region in EC flash
31288364387SHung-ying Tyan  * @param size		Returns size of flash region
31388364387SHung-ying Tyan  * @return 0 if ok, -1 on error
31488364387SHung-ying Tyan  */
31588364387SHung-ying Tyan int cros_ec_flash_offset(struct cros_ec_dev *dev, enum ec_flash_region region,
31688364387SHung-ying Tyan 		      uint32_t *offset, uint32_t *size);
31788364387SHung-ying Tyan 
31888364387SHung-ying Tyan /**
31988364387SHung-ying Tyan  * Read/write VbNvContext from/to a CROS-EC device.
32088364387SHung-ying Tyan  *
32188364387SHung-ying Tyan  * @param dev		CROS-EC device
32288364387SHung-ying Tyan  * @param block		Buffer of VbNvContext to be read/write
32388364387SHung-ying Tyan  * @return 0 if ok, -1 on error
32488364387SHung-ying Tyan  */
32588364387SHung-ying Tyan int cros_ec_read_vbnvcontext(struct cros_ec_dev *dev, uint8_t *block);
32688364387SHung-ying Tyan int cros_ec_write_vbnvcontext(struct cros_ec_dev *dev, const uint8_t *block);
32788364387SHung-ying Tyan 
32888364387SHung-ying Tyan /**
32988364387SHung-ying Tyan  * Read the version information for the EC images
33088364387SHung-ying Tyan  *
33188364387SHung-ying Tyan  * @param dev		CROS-EC device
33288364387SHung-ying Tyan  * @param versionp	This is set to point to the version information
33388364387SHung-ying Tyan  * @return 0 if ok, -1 on error
33488364387SHung-ying Tyan  */
33588364387SHung-ying Tyan int cros_ec_read_version(struct cros_ec_dev *dev,
33688364387SHung-ying Tyan 		       struct ec_response_get_version **versionp);
33788364387SHung-ying Tyan 
33888364387SHung-ying Tyan /**
33988364387SHung-ying Tyan  * Read the build information for the EC
34088364387SHung-ying Tyan  *
34188364387SHung-ying Tyan  * @param dev		CROS-EC device
34288364387SHung-ying Tyan  * @param versionp	This is set to point to the build string
34388364387SHung-ying Tyan  * @return 0 if ok, -1 on error
34488364387SHung-ying Tyan  */
34588364387SHung-ying Tyan int cros_ec_read_build_info(struct cros_ec_dev *dev, char **strp);
34688364387SHung-ying Tyan 
34788364387SHung-ying Tyan /**
34888364387SHung-ying Tyan  * Switch on/off a LDO / FET.
34988364387SHung-ying Tyan  *
35088364387SHung-ying Tyan  * @param dev		CROS-EC device
35188364387SHung-ying Tyan  * @param index		index of the LDO/FET to switch
35288364387SHung-ying Tyan  * @param state		new state of the LDO/FET : EC_LDO_STATE_ON|OFF
35388364387SHung-ying Tyan  * @return 0 if ok, -1 on error
35488364387SHung-ying Tyan  */
355f48eaf01SSimon Glass int cros_ec_set_ldo(struct udevice *dev, uint8_t index, uint8_t state);
35688364387SHung-ying Tyan 
35788364387SHung-ying Tyan /**
35888364387SHung-ying Tyan  * Read back a LDO / FET current state.
35988364387SHung-ying Tyan  *
36088364387SHung-ying Tyan  * @param dev		CROS-EC device
36188364387SHung-ying Tyan  * @param index		index of the LDO/FET to switch
36288364387SHung-ying Tyan  * @param state		current state of the LDO/FET : EC_LDO_STATE_ON|OFF
36388364387SHung-ying Tyan  * @return 0 if ok, -1 on error
36488364387SHung-ying Tyan  */
365f48eaf01SSimon Glass int cros_ec_get_ldo(struct udevice *dev, uint8_t index, uint8_t *state);
36641364f0fSVadim Bendebury 
36741364f0fSVadim Bendebury /**
36841364f0fSVadim Bendebury  * Get access to the error reported when cros_ec_board_init() was called
36941364f0fSVadim Bendebury  *
37041364f0fSVadim Bendebury  * This permits delayed reporting of the EC error if it failed during
37141364f0fSVadim Bendebury  * early init.
37241364f0fSVadim Bendebury  *
37341364f0fSVadim Bendebury  * @return error (0 if there was no error, -ve if there was an error)
37441364f0fSVadim Bendebury  */
37541364f0fSVadim Bendebury int cros_ec_get_error(void);
37641364f0fSVadim Bendebury 
377d7f25f35SSimon Glass /**
378d7f25f35SSimon Glass  * Returns information from the FDT about the Chrome EC flash
379d7f25f35SSimon Glass  *
380*2ec9d171SSimon Glass  * @param dev		Device to read from
381d7f25f35SSimon Glass  * @param config	Structure to use to return information
382d7f25f35SSimon Glass  */
383*2ec9d171SSimon Glass int cros_ec_decode_ec_flash(struct udevice *dev, struct fdt_cros_ec *config);
384d7f25f35SSimon Glass 
385df93d90aSSimon Glass /**
386df93d90aSSimon Glass  * Check the current keyboard state, in case recovery mode is requested.
387df93d90aSSimon Glass  * This function is for sandbox only.
388df93d90aSSimon Glass  *
389df93d90aSSimon Glass  * @param ec		CROS-EC device
390df93d90aSSimon Glass  */
391df93d90aSSimon Glass void cros_ec_check_keyboard(struct cros_ec_dev *dev);
392df93d90aSSimon Glass 
393cc456bd7SSimon Glass struct i2c_msg;
394cc456bd7SSimon Glass /*
395cc456bd7SSimon Glass  * Tunnel an I2C transfer to the EC
396cc456bd7SSimon Glass  *
397cc456bd7SSimon Glass  * @param dev		CROS-EC device
3986d1a718fSMoritz Fischer  * @param port		The remote port on EC to use
399cc456bd7SSimon Glass  * @param msg		List of messages to transfer
400cc456bd7SSimon Glass  * @param nmsgs		Number of messages to transfer
401cc456bd7SSimon Glass  */
4026d1a718fSMoritz Fischer int cros_ec_i2c_tunnel(struct udevice *dev, int port, struct i2c_msg *msg,
4036d1a718fSMoritz Fischer 		       int nmsgs);
404cc456bd7SSimon Glass 
40588364387SHung-ying Tyan #endif
406