summaryrefslogtreecommitdiff
path: root/include/sps.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/sps.h')
-rw-r--r--include/sps.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/include/sps.h b/include/sps.h
new file mode 100644
index 0000000000..93be326b15
--- /dev/null
+++ b/include/sps.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2015 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_INCLUDE_SPS_H
+#define __CROS_EC_INCLUDE_SPS_H
+
+#include "spi.h"
+#include "util.h"
+
+/* SPS Control Mode */
+enum sps_mode {
+ SPS_GENERIC_MODE = 0,
+ SPS_SWETLAND_MODE = 1,
+ SPS_ROM_MODE = 2,
+ SPS_UNDEF_MODE = 3,
+};
+
+/*
+ * Tx interrupt callback function prototype. This function returns a portion
+ * of the received SPI data and current status of the CS line. When CS is
+ * deasserted, this function is called with data_size of zero and a non-zero
+ * cs_status. This allows the recipient to delineate the SPS frames.
+ */
+typedef void (*rx_handler_f)(uint32_t inst, uint8_t *data,
+ size_t data_size, int cs_status);
+
+/*
+ * Push data to the SPS TX FIFO
+ * @param inst Interface number
+ * @param data Pointer to 8-bit data
+ * @param data_size Number of bytes to transmit
+ * @return : actual number of bytes placed into tx fifo
+ */
+int sps_transmit(uint32_t inst, uint8_t *data, size_t data_size);
+
+/*
+ * These functions return zero on success or non-zero on failure (attempt to
+ * register a callback on top of existing one, or attempt to unregister
+ * non-exitisng callback.
+ */
+int sps_register_rx_handler(enum sps_mode mode, rx_handler_f rx_handler);
+int sps_unregister_rx_handler(void);
+
+#endif