diff options
Diffstat (limited to 'chip/npcx/i2c-npcx5.c')
-rw-r--r-- | chip/npcx/i2c-npcx5.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/chip/npcx/i2c-npcx5.c b/chip/npcx/i2c-npcx5.c new file mode 100644 index 0000000000..6b78fd53f9 --- /dev/null +++ b/chip/npcx/i2c-npcx5.c @@ -0,0 +1,47 @@ +/* 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 module driver depends on chip series for Chrome EC */ + +#include "i2c.h" +#include "i2c_chip.h" +#include "registers.h" +#include "util.h" + +/*****************************************************************************/ +/* IC specific low-level driver depends on chip series */ + +int i2c_port_to_controller(int port) +{ + if (port < 0 || port >= I2C_PORT_COUNT) + return -1; + + return (port == NPCX_I2C_PORT0_0) ? 0 : port - 1; +} + +void i2c_select_port(int port) +{ + /* + * I2C0_1 uses port 1 of controller 0. All other I2C pin sets + * use port 0. + */ + if (port > NPCX_I2C_PORT0_1) + return; + + /* Select IO pins for multi-ports I2C controllers */ + UPDATE_BIT(NPCX_GLUE_SMBSEL, NPCX_SMBSEL_SMB0SEL, + (port == NPCX_I2C_PORT0_1)); +} + +int i2c_is_raw_mode(int port) +{ + int bit = (port > NPCX_I2C_PORT0_1) ? ((port - 1) * 2) : port; + + if (IS_BIT_SET(NPCX_DEVALT(2), bit)) + return 0; + else + return 1; +} + |