mfd: cros_ec: Add Smart Battery Firmware update API
authorGwendal Grignou <gwendal@chromium.org>
Mon, 3 Jun 2019 18:33:53 +0000 (11:33 -0700)
committerLee Jones <lee.jones@linaro.org>
Mon, 10 Jun 2019 08:15:08 +0000 (09:15 +0100)
Add API to update battery firmware.

Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Acked-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Benson Leung <bleung@chromium.org>
Reviewed-by: Fabien Lahoudere <fabien.lahoudere@collabora.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
include/linux/mfd/cros_ec_commands.h

index 7f98c6e63ad1a5152e2272564c09846dbd617cd4..49ea905cfd18aef0cedb1eca6065438b015ff170 100644 (file)
@@ -4243,6 +4243,79 @@ struct ec_response_battery_vendor_param {
        uint32_t value;
 } __ec_align4;
 
+/*****************************************************************************/
+/*
+ * Smart Battery Firmware Update Commands
+ */
+#define EC_CMD_SB_FW_UPDATE 0x00B5
+
+enum ec_sb_fw_update_subcmd {
+       EC_SB_FW_UPDATE_PREPARE  = 0x0,
+       EC_SB_FW_UPDATE_INFO     = 0x1, /*query sb info */
+       EC_SB_FW_UPDATE_BEGIN    = 0x2, /*check if protected */
+       EC_SB_FW_UPDATE_WRITE    = 0x3, /*check if protected */
+       EC_SB_FW_UPDATE_END      = 0x4,
+       EC_SB_FW_UPDATE_STATUS   = 0x5,
+       EC_SB_FW_UPDATE_PROTECT  = 0x6,
+       EC_SB_FW_UPDATE_MAX      = 0x7,
+};
+
+#define SB_FW_UPDATE_CMD_WRITE_BLOCK_SIZE 32
+#define SB_FW_UPDATE_CMD_STATUS_SIZE 2
+#define SB_FW_UPDATE_CMD_INFO_SIZE 8
+
+struct ec_sb_fw_update_header {
+       uint16_t subcmd;  /* enum ec_sb_fw_update_subcmd */
+       uint16_t fw_id;   /* firmware id */
+} __ec_align4;
+
+struct ec_params_sb_fw_update {
+       struct ec_sb_fw_update_header hdr;
+       union {
+               /* EC_SB_FW_UPDATE_PREPARE  = 0x0 */
+               /* EC_SB_FW_UPDATE_INFO     = 0x1 */
+               /* EC_SB_FW_UPDATE_BEGIN    = 0x2 */
+               /* EC_SB_FW_UPDATE_END      = 0x4 */
+               /* EC_SB_FW_UPDATE_STATUS   = 0x5 */
+               /* EC_SB_FW_UPDATE_PROTECT  = 0x6 */
+               /* Those have no args */
+
+               /* EC_SB_FW_UPDATE_WRITE    = 0x3 */
+               struct __ec_align4 {
+                       uint8_t  data[SB_FW_UPDATE_CMD_WRITE_BLOCK_SIZE];
+               } write;
+       };
+} __ec_align4;
+
+struct ec_response_sb_fw_update {
+       union {
+               /* EC_SB_FW_UPDATE_INFO     = 0x1 */
+               struct __ec_align1 {
+                       uint8_t data[SB_FW_UPDATE_CMD_INFO_SIZE];
+               } info;
+
+               /* EC_SB_FW_UPDATE_STATUS   = 0x5 */
+               struct __ec_align1 {
+                       uint8_t data[SB_FW_UPDATE_CMD_STATUS_SIZE];
+               } status;
+       };
+} __ec_align1;
+
+/*
+ * Entering Verified Boot Mode Command
+ * Default mode is VBOOT_MODE_NORMAL if EC did not receive this command.
+ * Valid Modes are: normal, developer, and recovery.
+ */
+#define EC_CMD_ENTERING_MODE 0x00B6
+
+struct ec_params_entering_mode {
+       int vboot_mode;
+} __ec_align4;
+
+#define VBOOT_MODE_NORMAL    0
+#define VBOOT_MODE_DEVELOPER 1
+#define VBOOT_MODE_RECOVERY  2
+
 /*****************************************************************************/
 /*
  * HDMI CEC commands