i2c: separate slave and master code

Split i2c.c code in two (i2c_slave.c and i2c_master.c). i2c_slave.c is
used when EC has no i2c device connected (i2c master code not needed)
but EC is connected to AP via i2c.

BRANCH=none
BUG=b:37584134
TEST=1. Compile rose board with CONFIG_I2C and CONFIG_CMD_HOSTCMD. Then
        make sure EC_CMD_GET_PROTOCOL_INFO works.
     2. On Kevin and Elm, cherry-pick to firmware branch respectively,
        build and flash ec, i2c function works.

Change-Id: I1f95ad277713c5e30913e0a010ca03dfd9ec248c
Signed-off-by: Wei-Ning Huang <wnhuang@google.com>
Reviewed-on: https://chromium-review.googlesource.com/484999
Commit-Ready: Wei-Ning Huang <wnhuang@chromium.org>
Tested-by: Wei-Ning Huang <wnhuang@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
This commit is contained in:
Wei-Ning Huang
2017-04-21 23:32:53 +08:00
committed by chrome-bot
parent ee28ccb0ca
commit 59bd55c41e
3 changed files with 30 additions and 21 deletions

View File

@@ -56,7 +56,8 @@ common-$(CONFIG_FMAP)+=fmap.o
common-$(CONFIG_GESTURE_SW_DETECTION)+=gesture.o
common-$(CONFIG_HOSTCMD_EVENTS)+=host_event_commands.o
common-$(CONFIG_HOSTCMD_PD)+=host_command_master.o
common-$(CONFIG_I2C_MASTER)+=i2c.o
common-$(CONFIG_I2C_MASTER)+=i2c_master.o
common-$(CONFIG_I2C_SLAVE)+=i2c_slave.o
common-$(CONFIG_I2C_VIRTUAL_BATTERY)+=virtual_battery.o
common-$(CONFIG_INDUCTIVE_CHARGING)+=inductive_charging.o
common-$(CONFIG_KEYBOARD_PROTOCOL_8042)+=keyboard_8042.o \

View File

@@ -1019,23 +1019,3 @@ DECLARE_CONSOLE_COMMAND(i2ctest, command_i2ctest,
"i2ctest count|udelay|dev",
"I2C stress test");
#endif /* CONFIG_CMD_I2C_STRESS_TEST */
#ifdef CONFIG_HOSTCMD_I2C_SLAVE_ADDR
int i2c_get_protocol_info(struct host_cmd_handler_args *args)
{
struct ec_response_get_protocol_info *r = args->response;
memset(r, 0, sizeof(*r));
r->protocol_versions = (1 << 3);
r->max_request_packet_size = I2C_MAX_HOST_PACKET_SIZE;
r->max_response_packet_size = I2C_MAX_HOST_PACKET_SIZE;
r->flags = 0;
args->response_size = sizeof(*r);
return EC_SUCCESS;
}
DECLARE_HOST_COMMAND(EC_CMD_GET_PROTOCOL_INFO,
i2c_get_protocol_info,
EC_VER_MASK(0));
#endif /* CONFIG_HOSTCMD_I2C_SLAVE_ADDR */

28
common/i2c_slave.c Normal file
View File

@@ -0,0 +1,28 @@
/* Copyright 2017 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.
*/
/* I2C slave cross-platform code for Chrome EC */
#include "host_command.h"
#include "i2c.h"
#include "util.h"
int i2c_get_protocol_info(struct host_cmd_handler_args *args)
{
struct ec_response_get_protocol_info *r = args->response;
memset(r, 0, sizeof(*r));
r->protocol_versions = (1 << 3);
r->max_request_packet_size = I2C_MAX_HOST_PACKET_SIZE;
r->max_response_packet_size = I2C_MAX_HOST_PACKET_SIZE;
r->flags = 0;
args->response_size = sizeof(*r);
return EC_SUCCESS;
}
DECLARE_HOST_COMMAND(EC_CMD_GET_PROTOCOL_INFO,
i2c_get_protocol_info,
EC_VER_MASK(0));