chrome-platform-for-linus-4.13
Changes in this pull request are around catching up cros_ec with the internal chromeos-kernel versions of cros_ec, cros_ec_lpc, and cros_ec_lightbar. Also, switching maintainership from olof to bleung. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABCgAGBQJZZBB8AAoJEB8J9XsKL+ZYcf4P/iRXb23r6pJgaqE3jO1mLJjQ aJH8sMVk3q0tIA/Wo3blVZmUD87RkDPqQNRhUx4AKuTtkq+zi+YIdltBk9nyK2tZ oRKtAFe1RL1a7Bxvh2im51mFE91q05nItPee+zylAKHL2PudKsAtvsjqEP/qmIBm h3XkkOMzSB3cqAjzaLm6bE531pFoRx6yKWUMGr0aTbOjXewC2uhP/U9rJYqtiaYl 1oRfg1759cUxH1QXmsKIA5Ua2gKDZ+32aszxxgxSWmZ5671SB0psuyLW4Aar7XS0 MNKGIYgKWBAUHX8iBTLwz/Z4VBB8X9DS2BfDvCZwDJtjCjYcJPzLKjqyGeJ3wr0G jW/kfjJL0G1FPxmS7WnsiUcDJemn+p/ia2/9HipLMM61fy7clezmBaxV8I4aWMh0 zxW8Bk7+qOOv9D72ErKKHJ1oaZ3EWXgWWfiUEmr+99n6GOfFu0vF5+gcdV4HVLKB g2Gmt89OE+oMBAlWtDhX/RdhY2Xxf4POsCriBrqrealYXe9NIxjrleKRr6ysEj37 71/X6TFaqGTYoyyDAVjFmIu6upGVoCLLdx9b/BodV1hyq97AIKHOdzOXpCKk2nvx IuA+JOWeoSGBD28CBhuvitJFDwTJv973Z+N9VrvZj91MKI89zI3Y0+sPAm69fbQ4 mqkTtiLPIfCsvZE/7lWN =QtSr -----END PGP SIGNATURE----- Merge tag 'chrome-platform-for-linus-4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/bleung/chrome-platform Pull chrome platform updates from Benson Leung: "Changes in this pull request are around catching up cros_ec with the internal chromeos-kernel versions of cros_ec, cros_ec_lpc, and cros_ec_lightbar. Also, switching maintainership from olof to bleung" * tag 'chrome-platform-for-linus-4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/bleung/chrome-platform: platform/chrome : Add myself as Maintainer platform/chrome: cros_ec_lightbar - hide unused PM functions cros_ec: Don't signal wake event for non-wake host events cros_ec: Fix deadlock when EC is not responsive at probe cros_ec: Don't return error when checking command version platform/chrome: cros_ec_lightbar - Avoid I2C xfer to EC during suspend platform/chrome: cros_ec_lightbar - Add userspace lightbar control bit to EC platform/chrome: cros_ec_lightbar - Control of suspend/resume lightbar sequence platform/chrome: cros_ec_lightbar - Add lightbar program feature to sysfs platform/chrome: cros_ec_lpc: Add MKBP events support over ACPI platform/chrome: cros_ec_lpc: Add power management ops platform/chrome: cros_ec_lpc: Add support for GOOG004 ACPI device platform/chrome: cros_ec_lpc: Add support for mec1322 EC platform/chrome: cros_ec_lpc: Add R/W helpers to LPC protocol variants mfd: cros_ec: Add support for dumping panic information cros_ec_debugfs: Pass proper struct sizes to cros_ec_cmd_xfer() mfd: cros_ec: add debugfs, console log file mfd: cros_ec: Add EC console read structures definitions mfd: cros_ec: Add helper for event notifier.
This commit is contained in:
commit
a3ddacbae5
17 changed files with 1393 additions and 84 deletions
|
|
@ -149,6 +149,7 @@ struct cros_ec_device {
|
|||
|
||||
struct ec_response_get_next_event event_data;
|
||||
int event_size;
|
||||
u32 host_event_wake_mask;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -172,6 +173,8 @@ struct cros_ec_platform {
|
|||
u16 cmd_offset;
|
||||
};
|
||||
|
||||
struct cros_ec_debugfs;
|
||||
|
||||
/*
|
||||
* struct cros_ec_dev - ChromeOS EC device entry point
|
||||
*
|
||||
|
|
@ -179,6 +182,7 @@ struct cros_ec_platform {
|
|||
* @cdev: Character device structure in /dev
|
||||
* @ec_dev: cros_ec_device structure to talk to the physical device
|
||||
* @dev: pointer to the platform device
|
||||
* @debug_info: cros_ec_debugfs structure for debugging information
|
||||
* @cmd_offset: offset to apply for each command.
|
||||
*/
|
||||
struct cros_ec_dev {
|
||||
|
|
@ -186,6 +190,7 @@ struct cros_ec_dev {
|
|||
struct cdev cdev;
|
||||
struct cros_ec_device *ec_dev;
|
||||
struct device *dev;
|
||||
struct cros_ec_debugfs *debug_info;
|
||||
u16 cmd_offset;
|
||||
u32 features[2];
|
||||
};
|
||||
|
|
@ -295,10 +300,22 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev);
|
|||
* cros_ec_get_next_event - Fetch next event from the ChromeOS EC
|
||||
*
|
||||
* @ec_dev: Device to fetch event from
|
||||
* @wake_event: Pointer to a bool set to true upon return if the event might be
|
||||
* treated as a wake event. Ignored if null.
|
||||
*
|
||||
* Returns: 0 on success, Linux error number on failure
|
||||
*/
|
||||
int cros_ec_get_next_event(struct cros_ec_device *ec_dev);
|
||||
int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event);
|
||||
|
||||
/**
|
||||
* cros_ec_get_host_event - Return a mask of event set by the EC.
|
||||
*
|
||||
* When MKBP is supported, when the EC raises an interrupt,
|
||||
* We collect the events raised and call the functions in the ec notifier.
|
||||
*
|
||||
* This function is a helper to know which events are raised.
|
||||
*/
|
||||
u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev);
|
||||
|
||||
/* sysfs stuff */
|
||||
extern struct attribute_group cros_ec_attr_group;
|
||||
|
|
|
|||
|
|
@ -625,6 +625,10 @@ struct ec_params_get_cmd_versions {
|
|||
uint8_t cmd; /* Command to check */
|
||||
} __packed;
|
||||
|
||||
struct ec_params_get_cmd_versions_v1 {
|
||||
uint16_t cmd; /* Command to check */
|
||||
} __packed;
|
||||
|
||||
struct ec_response_get_cmd_versions {
|
||||
/*
|
||||
* Mask of supported versions; use EC_VER_MASK() to compare with a
|
||||
|
|
@ -1158,13 +1162,20 @@ struct lightbar_params_v1 {
|
|||
struct rgb_s color[8]; /* 0-3 are Google colors */
|
||||
} __packed;
|
||||
|
||||
/* Lightbar program */
|
||||
#define EC_LB_PROG_LEN 192
|
||||
struct lightbar_program {
|
||||
uint8_t size;
|
||||
uint8_t data[EC_LB_PROG_LEN];
|
||||
};
|
||||
|
||||
struct ec_params_lightbar {
|
||||
uint8_t cmd; /* Command (see enum lightbar_command) */
|
||||
union {
|
||||
struct {
|
||||
/* no args */
|
||||
} dump, off, on, init, get_seq, get_params_v0, get_params_v1,
|
||||
version, get_brightness, get_demo;
|
||||
version, get_brightness, get_demo, suspend, resume;
|
||||
|
||||
struct {
|
||||
uint8_t num;
|
||||
|
|
@ -1182,8 +1193,13 @@ struct ec_params_lightbar {
|
|||
uint8_t led;
|
||||
} get_rgb;
|
||||
|
||||
struct {
|
||||
uint8_t enable;
|
||||
} manual_suspend_ctrl;
|
||||
|
||||
struct lightbar_params_v0 set_params_v0;
|
||||
struct lightbar_params_v1 set_params_v1;
|
||||
struct lightbar_program set_program;
|
||||
};
|
||||
} __packed;
|
||||
|
||||
|
|
@ -1216,7 +1232,8 @@ struct ec_response_lightbar {
|
|||
struct {
|
||||
/* no return params */
|
||||
} off, on, init, set_brightness, seq, reg, set_rgb,
|
||||
demo, set_params_v0, set_params_v1;
|
||||
demo, set_params_v0, set_params_v1,
|
||||
set_program, manual_suspend_ctrl, suspend, resume;
|
||||
};
|
||||
} __packed;
|
||||
|
||||
|
|
@ -1240,6 +1257,10 @@ enum lightbar_command {
|
|||
LIGHTBAR_CMD_GET_DEMO = 15,
|
||||
LIGHTBAR_CMD_GET_PARAMS_V1 = 16,
|
||||
LIGHTBAR_CMD_SET_PARAMS_V1 = 17,
|
||||
LIGHTBAR_CMD_SET_PROGRAM = 18,
|
||||
LIGHTBAR_CMD_MANUAL_SUSPEND_CTRL = 19,
|
||||
LIGHTBAR_CMD_SUSPEND = 20,
|
||||
LIGHTBAR_CMD_RESUME = 21,
|
||||
LIGHTBAR_NUM_CMDS
|
||||
};
|
||||
|
||||
|
|
@ -2285,13 +2306,28 @@ struct ec_params_charge_control {
|
|||
#define EC_CMD_CONSOLE_SNAPSHOT 0x97
|
||||
|
||||
/*
|
||||
* Read next chunk of data from saved snapshot.
|
||||
* Read data from the saved snapshot. If the subcmd parameter is
|
||||
* CONSOLE_READ_NEXT, this will return data starting from the beginning of
|
||||
* the latest snapshot. If it is CONSOLE_READ_RECENT, it will start from the
|
||||
* end of the previous snapshot.
|
||||
*
|
||||
* The params are only looked at in version >= 1 of this command. Prior
|
||||
* versions will just default to CONSOLE_READ_NEXT behavior.
|
||||
*
|
||||
* Response is null-terminated string. Empty string, if there is no more
|
||||
* remaining output.
|
||||
*/
|
||||
#define EC_CMD_CONSOLE_READ 0x98
|
||||
|
||||
enum ec_console_read_subcmd {
|
||||
CONSOLE_READ_NEXT = 0,
|
||||
CONSOLE_READ_RECENT
|
||||
};
|
||||
|
||||
struct ec_params_console_read_v1 {
|
||||
uint8_t subcmd; /* enum ec_console_read_subcmd */
|
||||
} __packed;
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
|
|
|
|||
90
include/linux/mfd/cros_ec_lpc_mec.h
Normal file
90
include/linux/mfd/cros_ec_lpc_mec.h
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* cros_ec_lpc_mec - LPC variant I/O for Microchip EC
|
||||
*
|
||||
* Copyright (C) 2016 Google, Inc
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This driver uses the Chrome OS EC byte-level message-based protocol for
|
||||
* communicating the keyboard state (which keys are pressed) from a keyboard EC
|
||||
* to the AP over some bus (such as i2c, lpc, spi). The EC does debouncing,
|
||||
* but everything else (including deghosting) is done here. The main
|
||||
* motivation for this is to keep the EC firmware as simple as possible, since
|
||||
* it cannot be easily upgraded and EC flash/IRAM space is relatively
|
||||
* expensive.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_CROS_EC_MEC_H
|
||||
#define __LINUX_MFD_CROS_EC_MEC_H
|
||||
|
||||
#include <linux/mfd/cros_ec_commands.h>
|
||||
|
||||
enum cros_ec_lpc_mec_emi_access_mode {
|
||||
/* 8-bit access */
|
||||
ACCESS_TYPE_BYTE = 0x0,
|
||||
/* 16-bit access */
|
||||
ACCESS_TYPE_WORD = 0x1,
|
||||
/* 32-bit access */
|
||||
ACCESS_TYPE_LONG = 0x2,
|
||||
/*
|
||||
* 32-bit access, read or write of MEC_EMI_EC_DATA_B3 causes the
|
||||
* EC data register to be incremented.
|
||||
*/
|
||||
ACCESS_TYPE_LONG_AUTO_INCREMENT = 0x3,
|
||||
};
|
||||
|
||||
enum cros_ec_lpc_mec_io_type {
|
||||
MEC_IO_READ,
|
||||
MEC_IO_WRITE,
|
||||
};
|
||||
|
||||
/* Access IO ranges 0x800 thru 0x9ff using EMI interface instead of LPC */
|
||||
#define MEC_EMI_RANGE_START EC_HOST_CMD_REGION0
|
||||
#define MEC_EMI_RANGE_END (EC_LPC_ADDR_MEMMAP + EC_MEMMAP_SIZE)
|
||||
|
||||
/* EMI registers are relative to base */
|
||||
#define MEC_EMI_BASE 0x800
|
||||
#define MEC_EMI_HOST_TO_EC (MEC_EMI_BASE + 0)
|
||||
#define MEC_EMI_EC_TO_HOST (MEC_EMI_BASE + 1)
|
||||
#define MEC_EMI_EC_ADDRESS_B0 (MEC_EMI_BASE + 2)
|
||||
#define MEC_EMI_EC_ADDRESS_B1 (MEC_EMI_BASE + 3)
|
||||
#define MEC_EMI_EC_DATA_B0 (MEC_EMI_BASE + 4)
|
||||
#define MEC_EMI_EC_DATA_B1 (MEC_EMI_BASE + 5)
|
||||
#define MEC_EMI_EC_DATA_B2 (MEC_EMI_BASE + 6)
|
||||
#define MEC_EMI_EC_DATA_B3 (MEC_EMI_BASE + 7)
|
||||
|
||||
/*
|
||||
* cros_ec_lpc_mec_init
|
||||
*
|
||||
* Initialize MEC I/O.
|
||||
*/
|
||||
void cros_ec_lpc_mec_init(void);
|
||||
|
||||
/*
|
||||
* cros_ec_lpc_mec_destroy
|
||||
*
|
||||
* Cleanup MEC I/O.
|
||||
*/
|
||||
void cros_ec_lpc_mec_destroy(void);
|
||||
|
||||
/**
|
||||
* cros_ec_lpc_io_bytes_mec - Read / write bytes to MEC EMI port
|
||||
*
|
||||
* @io_type: MEC_IO_READ or MEC_IO_WRITE, depending on request
|
||||
* @offset: Base read / write address
|
||||
* @length: Number of bytes to read / write
|
||||
* @buf: Destination / source buffer
|
||||
*
|
||||
* @return 8-bit checksum of all bytes read / written
|
||||
*/
|
||||
u8 cros_ec_lpc_io_bytes_mec(enum cros_ec_lpc_mec_io_type io_type,
|
||||
unsigned int offset, unsigned int length, u8 *buf);
|
||||
|
||||
#endif /* __LINUX_MFD_CROS_EC_MEC_H */
|
||||
61
include/linux/mfd/cros_ec_lpc_reg.h
Normal file
61
include/linux/mfd/cros_ec_lpc_reg.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* cros_ec_lpc_reg - LPC access to the Chrome OS Embedded Controller
|
||||
*
|
||||
* Copyright (C) 2016 Google, Inc
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This driver uses the Chrome OS EC byte-level message-based protocol for
|
||||
* communicating the keyboard state (which keys are pressed) from a keyboard EC
|
||||
* to the AP over some bus (such as i2c, lpc, spi). The EC does debouncing,
|
||||
* but everything else (including deghosting) is done here. The main
|
||||
* motivation for this is to keep the EC firmware as simple as possible, since
|
||||
* it cannot be easily upgraded and EC flash/IRAM space is relatively
|
||||
* expensive.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_MFD_CROS_EC_REG_H
|
||||
#define __LINUX_MFD_CROS_EC_REG_H
|
||||
|
||||
/**
|
||||
* cros_ec_lpc_read_bytes - Read bytes from a given LPC-mapped address.
|
||||
* Returns 8-bit checksum of all bytes read.
|
||||
*
|
||||
* @offset: Base read address
|
||||
* @length: Number of bytes to read
|
||||
* @dest: Destination buffer
|
||||
*/
|
||||
u8 cros_ec_lpc_read_bytes(unsigned int offset, unsigned int length, u8 *dest);
|
||||
|
||||
/**
|
||||
* cros_ec_lpc_write_bytes - Write bytes to a given LPC-mapped address.
|
||||
* Returns 8-bit checksum of all bytes written.
|
||||
*
|
||||
* @offset: Base write address
|
||||
* @length: Number of bytes to write
|
||||
* @msg: Write data buffer
|
||||
*/
|
||||
u8 cros_ec_lpc_write_bytes(unsigned int offset, unsigned int length, u8 *msg);
|
||||
|
||||
/**
|
||||
* cros_ec_lpc_reg_init
|
||||
*
|
||||
* Initialize register I/O.
|
||||
*/
|
||||
void cros_ec_lpc_reg_init(void);
|
||||
|
||||
/**
|
||||
* cros_ec_lpc_reg_destroy
|
||||
*
|
||||
* Cleanup reg I/O.
|
||||
*/
|
||||
void cros_ec_lpc_reg_destroy(void);
|
||||
|
||||
#endif /* __LINUX_MFD_CROS_EC_REG_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue