summaryrefslogtreecommitdiff
path: root/zephyr/include/drivers/cros_cbi.h
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/include/drivers/cros_cbi.h')
-rw-r--r--zephyr/include/drivers/cros_cbi.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/zephyr/include/drivers/cros_cbi.h b/zephyr/include/drivers/cros_cbi.h
new file mode 100644
index 0000000000..aa55e03b77
--- /dev/null
+++ b/zephyr/include/drivers/cros_cbi.h
@@ -0,0 +1,102 @@
+/* Copyright 2021 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.
+ */
+
+/**
+ * @file
+ * @brief Chrome OS-specific API for access to Cros Board Info(CBI)
+ */
+
+#ifndef ZEPHYR_INCLUDE_DRIVERS_CROS_CBI_H_
+#define ZEPHYR_INCLUDE_DRIVERS_CROS_CBI_H_
+
+#include <kernel.h>
+#include <device.h>
+#include <devicetree.h>
+
+#define CBI_SSFC_VALUE_COMPAT named_cbi_ssfc_value
+#define CBI_SSFC_VALUE_ID(id) DT_CAT(CBI_SSFC_VALUE_, id)
+#define CBI_SSFC_VALUE_ID_WITH_COMMA(id) CBI_SSFC_VALUE_ID(id),
+#define CBI_SSFC_VALUE_INST_ENUM(inst, _) \
+ CBI_SSFC_VALUE_ID_WITH_COMMA(DT_INST(inst, CBI_SSFC_VALUE_COMPAT))
+#define CROS_CBI_LABEL "cros_cbi"
+
+enum cbi_ssfc_value_id {
+ UTIL_LISTIFY(DT_NUM_INST_STATUS_OKAY(CBI_SSFC_VALUE_COMPAT),
+ CBI_SSFC_VALUE_INST_ENUM)
+ CBI_SSFC_VALUE_COUNT
+};
+
+/**
+ * @cond INTERNAL_HIDDEN
+ *
+ * cros cbi raw driver API definition and system call entry points
+ *
+ * (Internal use only.)
+ */
+typedef int (*cros_cbi_api_init)(const struct device *dev);
+typedef int (*cros_cbi_api_ssfc_check_match)(const struct device *dev,
+ enum cbi_ssfc_value_id value_id);
+
+__subsystem struct cros_cbi_driver_api {
+ cros_cbi_api_init init;
+ cros_cbi_api_ssfc_check_match ssfc_check_match;
+};
+
+/**
+ * @endcond
+ */
+
+/**
+ * @brief Initialize CBI.
+ *
+ * @param dev Pointer to the device structure for the CBI instance.
+ *
+ * @return 0 If successful.
+ * @retval -ENOTSUP Not supported api function.
+ */
+__syscall int cros_cbi_init(const struct device *dev);
+
+static inline int z_impl_cros_cbi_init(const struct device *dev)
+{
+ const struct cros_cbi_driver_api *api =
+ (const struct cros_cbi_driver_api *)dev->api;
+
+ if (!api->init) {
+ return -ENOTSUP;
+ }
+
+ return api->init(dev);
+}
+
+/**
+ * @brief Check if the CBI SSFC value matches the one in the EEPROM
+ *
+ * @param dev Pointer to the device.
+ *
+ * @return 1 If matches, 0 if not.
+ * @retval -ENOTSUP Not supported api function.
+ */
+__syscall int cros_cbi_ssfc_check_match(const struct device *dev,
+ enum cbi_ssfc_value_id value_id);
+
+static inline int
+z_impl_cros_cbi_ssfc_check_match(const struct device *dev,
+ enum cbi_ssfc_value_id value_id)
+{
+ const struct cros_cbi_driver_api *api =
+ (const struct cros_cbi_driver_api *)dev->api;
+
+ if (!api->ssfc_check_match) {
+ return -ENOTSUP;
+ }
+
+ return api->ssfc_check_match(dev, value_id);
+}
+
+/**
+ * @}
+ */
+#include <syscalls/cros_cbi.h>
+#endif /* ZEPHYR_INCLUDE_DRIVERS_CROS_CBI_H_ */