diff options
author | Randall Spangler <rspangler@chromium.org> | 2017-07-25 16:22:27 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-07-31 21:39:39 -0700 |
commit | 00ea73ab166ebc8a2c4b5693b7fa776c76c7fe45 (patch) | |
tree | c99009ec5bce12c97a85a32695bd7f0f435c1e2c /include/usb_i2c.h | |
parent | ddbfe690e294e595c6ed3511dcf417410d9b2804 (diff) | |
download | chrome-ec-00ea73ab166ebc8a2c4b5693b7fa776c76c7fe45.tar.gz |
usb_i2c: Fail if board I2C bridge is disabled
Add usb_i2c_board_is_enabled().
On Cr50, this is now also connected to the I2C CCD capability. The
USB-I2C bridge can only be used when the capability is available.
On other platforms (Servo V4, etc.) where usb_i2c_board_enable() is
a no-op, add a dummy implementation which always returns true.
See go/cr50-ccd-wp for more information.
BUG=b:62537474
BRANCH=cr50
TEST=manual with CR50_DEV=1
Connect host PC to dev board USB port
On host PC:
sudo servod -c ccd_cr50.xml -c reef_r1_inas.xml
dut-control pp3300_ec_shv_reg --> fail, error 0x8001
ccdoops --> reset I2C config
ccd i2c disable --> I2C disabled
On host PC:
sudo servod -c ccd_cr50.xml -c reef_r1_inas.xml
dut-control pp3300_ec_shv_reg --> fail, error 0x0006
ccd i2c enable --> I2C enabled
ccdunlock --> I2C disabled
ccdoops --> I2C enabled
ccdset i2c unlesslocked
ccdlock --> I2C disabled
ccdunlock --> I2C enabled
Change-Id: Ia3df32e239a5f7c5915bc6c7e408ce0dc8b26c89
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/590577
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Diffstat (limited to 'include/usb_i2c.h')
-rw-r--r-- | include/usb_i2c.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/include/usb_i2c.h b/include/usb_i2c.h index 335550b66e..c464e062a5 100644 --- a/include/usb_i2c.h +++ b/include/usb_i2c.h @@ -45,6 +45,7 @@ * 0x0003: Write count invalid (mismatch with merged payload) * 0x0004: Read count invalid (> 60 bytes) * 0x0005: The port specified is invalid. + * 0x0006: The I2C interface is disabled. * 0x8000: Unknown error mask * The bottom 15 bits will contain the bottom 15 bits from the EC * error code. @@ -60,6 +61,7 @@ enum usb_i2c_error { USB_I2C_WRITE_COUNT_INVALID = 0x0003, USB_I2C_READ_COUNT_INVALID = 0x0004, USB_I2C_PORT_INVALID = 0x0005, + USB_I2C_DISABLED = 0x0006, USB_I2C_UNKNOWN_ERROR = 0x8000, }; @@ -149,8 +151,27 @@ void usb_i2c_deferred(struct usb_i2c_config const *config); /* * These functions should be implemented by the board to provide any board - * specific operations required to enable or disable access to the I2C device. + * specific operations required to enable or disable access to the I2C device, + * and to return the current board enable state. + */ + +/** + * Enable the I2C device + * + * @return EC_SUCCESS or non-zero error code. */ int usb_i2c_board_enable(void); + +/** + * Disable the I2C device + */ void usb_i2c_board_disable(void); + +/** + * Check if the I2C device is enabled + * + * @return 1 if enabled, 0 if disabled. + */ +int usb_i2c_board_is_enabled(void); + #endif /* __CROS_USB_I2C_H */ |