mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-27 18:25:05 +00:00
In some cases, the virtual battery code creates transactions that violate SB spec. One example: If the host command is structured as two messages - a write to 0x03 (reg addr), followed by two bytes of write data, the first byte of the second message (write data) will be sent to virtual_battery_read(), as if it were a reg read request. Let's do the following change for virtual battery: 1. Parse the command more carefully with state machines. 2. Support write caching for some critical registers. 3. Cache more attributes (0x03 and 0x0f). BUG=chrome-os-partner:59239, chromium:659819 BRANCH=none TEST='power_supply_info' works on kevin Change-Id: Icdeb12b21f0dc3c329f29b206b7b9395ca4c9998 Reviewed-on: https://chromium-review.googlesource.com/407987 Commit-Ready: Philip Chen <philipchen@chromium.org> Tested-by: Philip Chen <philipchen@chromium.org> Reviewed-by: Shawn N <shawnn@chromium.org>
50 lines
1.6 KiB
C
50 lines
1.6 KiB
C
/* Copyright 2016 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef __CROS_EC_VIRTUAL_BATTERY_H
|
|
#define __CROS_EC_VIRTUAL_BATTERY_H
|
|
|
|
#if defined(CONFIG_I2C_VIRTUAL_BATTERY) && defined(CONFIG_BATTERY_SMART)
|
|
#define VIRTUAL_BATTERY_ADDR BATTERY_ADDR
|
|
#endif
|
|
|
|
/**
|
|
* Read/write value of battery parameter from charge state.
|
|
*
|
|
* @param batt_cmd_head The beginning of the smart battery command
|
|
* @param dest Destination buffer for data
|
|
* @param read_len Number of bytes to read to the buffer
|
|
* @param write_len Number of bytes to write
|
|
* @return EC_SUCCESS if successful, non-zero if error.
|
|
*
|
|
*/
|
|
int virtual_battery_operation(const uint8_t *batt_cmd_head,
|
|
uint8_t *dest,
|
|
int read_len,
|
|
int write_len);
|
|
|
|
/**
|
|
* Parse a command for virtual battery function.
|
|
*
|
|
* @param resp Pointer to the data structure to store the i2c messages
|
|
* @param in_len Accumulative number of bytes read
|
|
* @param err_code Pointer to the return value of i2c_xfer() or
|
|
* virtual_battery_operation()
|
|
* @param xferflags Flags
|
|
* @param read_len Number of bytes to read
|
|
* @param write_len Number of bytes to write
|
|
* @param out Data to send
|
|
* @return EC_SUCCESS if successful, non-zero if error.
|
|
*/
|
|
int virtual_battery_handler(struct ec_response_i2c_passthru *resp,
|
|
int in_len, int *err_code, int xferflags,
|
|
int read_len, int write_len,
|
|
const uint8_t *out);
|
|
|
|
/* Reset the state machine and static variables. */
|
|
void reset_parse_state(void);
|
|
|
|
#endif /* __CROS_EC_VIRTUAL_BATTERY_H */
|