aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/i2c/pca9538/pca9538.h
diff options
context:
space:
mode:
authorWerner Zeh <werner.zeh@siemens.com>2018-02-14 07:52:08 +0100
committerWerner Zeh <werner.zeh@siemens.com>2018-02-15 07:33:04 +0000
commita45d94ac0bd388445957e0b116bbae12d010ae1a (patch)
tree2bfcd612460ef183fc44e6c21304f3ef0b77df85 /src/drivers/i2c/pca9538/pca9538.h
parenta94b112aec5a8df83313816ca2ca8019cffaba5f (diff)
drivers/i2c: Add chip driver for I/O expander PCA9538
The chip PCA9538 is a 8 bit I/O expander connected to the systems I2C bus. Add a chip driver to support this chip. Beside the pure chip driver two interface functions are provided to read the state of the pins and write output values to the pins. As the slave address of this chip is hardware configurable the function pca9538_get_dev() is used to get the right slave address. This function needs to be implemented in mainboard code if one needs to use the interface functions to read and write I/O state. Change-Id: Ic856123b4f4c8b721928ee3a2a4bb37833ea4b20 Signed-off-by: Werner Zeh <werner.zeh@siemens.com> Reviewed-on: https://review.coreboot.org/23748 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/drivers/i2c/pca9538/pca9538.h')
-rw-r--r--src/drivers/i2c/pca9538/pca9538.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/drivers/i2c/pca9538/pca9538.h b/src/drivers/i2c/pca9538/pca9538.h
new file mode 100644
index 0000000000..6db95be646
--- /dev/null
+++ b/src/drivers/i2c/pca9538/pca9538.h
@@ -0,0 +1,38 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2018 Siemens AG
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _I2C_PCA9538_H_
+#define _I2C_PCA9538_H_
+
+#include <types.h>
+#include <device/device.h>
+
+/* Register layout */
+#define INPUT_REG 0x00
+#define OUTPUT_REG 0x01
+#define INPUT_INVERT_REG 0x02
+#define IO_CONFIG_REG 0x03
+
+/* Provide some functions to read input and write output values. */
+uint8_t pca9538_read_input(void);
+void pca9538_set_output(uint8_t val);
+/*
+ * Provide a way to get the right device structure for the I/O expander.
+ * The user of this driver has to provide this function if read/write of I/O
+ * values on the I/O expander is needed.
+ */
+struct device *pca9538_get_dev(void);
+
+#endif /* _I2C_PCA9538_H_ */