mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-03 21:48:15 +00:00 
			
		
		
		
	cros_ec: Add support for v3 messages on LPC
At present version 3 messages are only supported on SPI. Add support for using LPC as well, as used on samus. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									a12ef7e26a
								
							
						
					
					
						commit
						d07b6e145e
					
				@ -40,6 +40,38 @@ static int wait_for_sync(struct cros_ec_dev *dev)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int cros_ec_lpc_packet(struct udevice *udev, int out_bytes, int in_bytes)
 | 
			
		||||
{
 | 
			
		||||
	struct cros_ec_dev *dev = dev_get_uclass_priv(udev);
 | 
			
		||||
	uint8_t *d;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	if (out_bytes > EC_LPC_HOST_PACKET_SIZE)
 | 
			
		||||
		return log_msg_ret("Cannot send that many bytes\n", -E2BIG);
 | 
			
		||||
 | 
			
		||||
	if (in_bytes > EC_LPC_HOST_PACKET_SIZE)
 | 
			
		||||
		return log_msg_ret("Cannot receive that many bytes\n", -E2BIG);
 | 
			
		||||
 | 
			
		||||
	if (wait_for_sync(dev))
 | 
			
		||||
		return log_msg_ret("Timeout waiting ready\n", -ETIMEDOUT);
 | 
			
		||||
 | 
			
		||||
	/* Write data */
 | 
			
		||||
	for (i = 0, d = (uint8_t *)dev->dout; i < out_bytes; i++, d++)
 | 
			
		||||
		outb(*d, EC_LPC_ADDR_HOST_PACKET + i);
 | 
			
		||||
 | 
			
		||||
	/* Start the command */
 | 
			
		||||
	outb(EC_COMMAND_PROTOCOL_3, EC_LPC_ADDR_HOST_CMD);
 | 
			
		||||
 | 
			
		||||
	if (wait_for_sync(dev))
 | 
			
		||||
		return log_msg_ret("Timeout waiting ready\n", -ETIMEDOUT);
 | 
			
		||||
 | 
			
		||||
	/* Read back args */
 | 
			
		||||
	for (i = 0, d = dev->din; i < in_bytes; i++, d++)
 | 
			
		||||
		*d = inb(EC_LPC_ADDR_HOST_PACKET + i);
 | 
			
		||||
 | 
			
		||||
	return in_bytes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int cros_ec_lpc_command(struct udevice *udev, uint8_t cmd, int cmd_version,
 | 
			
		||||
		     const uint8_t *dout, int dout_len,
 | 
			
		||||
		     uint8_t **dinp, int din_len)
 | 
			
		||||
@ -200,6 +232,7 @@ static int cros_ec_probe(struct udevice *dev)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct dm_cros_ec_ops cros_ec_ops = {
 | 
			
		||||
	.packet = cros_ec_lpc_packet,
 | 
			
		||||
	.command = cros_ec_lpc_command,
 | 
			
		||||
	.check_version = cros_ec_lpc_check_version,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user