/* Copyright (c) 2014 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. */ /* Master/slave identification */ #ifndef __BOARD_KEYBORG_MASTER_SLAVE_H #define __BOARD_KEYBORG_MASTER_SLAVE_H /** * Get the identity of this chip. * * @return 1 if master; otherwise, 0. */ int master_slave_is_master(void); /** * Synchronize with the other chip. The other chip must also call this * function to synchronize. * * @param timeout_ms Timeout value in millisecond. If the other chip * doesn't synchronize within this time, the sync * call fails. * * @return EC_SUCCESS, or non-zero if any error. */ #define master_slave_sync(timeout_ms) \ master_slave_sync_impl(__FILE__, __LINE__, timeout_ms) int master_slave_sync_impl(const char *filename, int line, int timeout_ms); /** * Enable/disable master-slave interrupt. Master-slave interrupt is * implemented using SYNC1/SYNC2 signal, so this is assuming the master * and the slave are in sync waiting for interrupt. */ void master_slave_enable_interrupt(void); void master_slave_disable_interrupt(void); /* Interrupt the other chip with a 1-ms pulse. */ void master_slave_wake_other(void); /** * Identify this chip and shake hands with the other chip. * * @return EC_SUCCESS, or non-zero if any error. */ int master_slave_init(void); #endif /* __BOARD_KEYBORG_MASTER_SLAVE_H */