summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zephyr/dts/bindings/gpio/gpio-enum-name.yaml10
-rw-r--r--zephyr/dts/bindings/i2c/cros-ec-i2c-port-base.yaml11
-rw-r--r--zephyr/projects/volteer/boards/arm/volteer/volteer.dts54
-rw-r--r--zephyr/projects/volteer/delbin/gpio.dts12
-rw-r--r--zephyr/projects/volteer/volteer/gpio.dts10
-rw-r--r--zephyr/shim/src/i2c.c21
6 files changed, 117 insertions, 1 deletions
diff --git a/zephyr/dts/bindings/gpio/gpio-enum-name.yaml b/zephyr/dts/bindings/gpio/gpio-enum-name.yaml
index 33ba278d53..321e0a62e3 100644
--- a/zephyr/dts/bindings/gpio/gpio-enum-name.yaml
+++ b/zephyr/dts/bindings/gpio/gpio-enum-name.yaml
@@ -23,6 +23,16 @@ properties:
- GPIO_EC_BATT_PRES_ODL
- GPIO_EC_I2C0_SENSOR_SCL
- GPIO_EC_I2C0_SENSOR_SDA
+ - GPIO_EC_I2C1_USB_C0_SCL
+ - GPIO_EC_I2C1_USB_C0_SDA
+ - GPIO_EC_I2C2_USB_C1_SCL
+ - GPIO_EC_I2C2_USB_C1_SDA
+ - GPIO_EC_I2C3_USB_1_MIX_SCL
+ - GPIO_EC_I2C3_USB_1_MIX_SDA
+ - GPIO_EC_I2C5_BATTERY_SCL
+ - GPIO_EC_I2C5_BATTERY_SDA
+ - GPIO_EC_I2C7_EEPROM_PWR_SCL_R
+ - GPIO_EC_I2C7_EEPROM_PWR_SDA_R
- GPIO_EC_IMU_INT_L
- GPIO_EC_INT_L
- GPIO_EC_PCH_SYS_PWROK
diff --git a/zephyr/dts/bindings/i2c/cros-ec-i2c-port-base.yaml b/zephyr/dts/bindings/i2c/cros-ec-i2c-port-base.yaml
index 49d9ee53c4..eb6b572569 100644
--- a/zephyr/dts/bindings/i2c/cros-ec-i2c-port-base.yaml
+++ b/zephyr/dts/bindings/i2c/cros-ec-i2c-port-base.yaml
@@ -32,3 +32,14 @@ properties:
description:
Human readable string describing the device (used as device_get_binding()
argument).
+
+child-binding:
+ description: Optional configuration bindings
+ properties:
+ frequency:
+ type: int
+ required: true
+ description: Transfer data rate in kHz
+ child-binding:
+ description: SCL and SDA configurations
+ include: gpio-enum-name.yaml
diff --git a/zephyr/projects/volteer/boards/arm/volteer/volteer.dts b/zephyr/projects/volteer/boards/arm/volteer/volteer.dts
index ee28ed26b8..5a28c0c1c2 100644
--- a/zephyr/projects/volteer/boards/arm/volteer/volteer.dts
+++ b/zephyr/projects/volteer/boards/arm/volteer/volteer.dts
@@ -52,6 +52,15 @@
i2c-port = <&i2c0_0>;
enum-name = "I2C_PORT_SENSOR";
label = "SENSOR";
+ config {
+ frequency = <400>;
+ scl {
+ enum-name = "GPIO_EC_I2C0_SENSOR_SCL";
+ };
+ sda {
+ enum-name = "GPIO_EC_I2C0_SENSOR_SDA";
+ };
+ };
};
i2c-accel {
i2c-port = <&i2c0_0>;
@@ -62,21 +71,57 @@
i2c-port = <&i2c1_0>;
enum-name = "I2C_PORT_USB_C0";
label = "USB_C0";
+ config {
+ frequency = <1000>;
+ scl {
+ enum-name = "GPIO_EC_I2C1_USB_C0_SCL";
+ };
+ sda {
+ enum-name = "GPIO_EC_I2C1_USB_C0_SDA";
+ };
+ };
};
usb-c1 {
i2c-port = <&i2c2_0>;
enum-name = "I2C_PORT_USB_C1";
label = "USB_C1";
+ config {
+ frequency = <1000>;
+ scl {
+ enum-name = "GPIO_EC_I2C2_USB_C1_SCL";
+ };
+ sda {
+ enum-name = "GPIO_EC_I2C2_USB_C1_SDA";
+ };
+ };
};
usb1-mix {
i2c-port = <&i2c3_0>;
enum-name = "I2C_PORT_USB_1_MIX";
label = "USB_1_MIX";
+ config {
+ frequency = <100>;
+ scl {
+ enum-name = "GPIO_EC_I2C3_USB_1_MIX_SCL";
+ };
+ sda {
+ enum-name = "GPIO_EC_I2C3_USB_1_MIX_SDA";
+ };
+ };
};
power {
i2c-port = <&i2c5_0>;
enum-name = "I2C_PORT_POWER";
label = "POWER";
+ config {
+ frequency = <100>;
+ scl {
+ enum-name = "GPIO_EC_I2C5_BATTERY_SCL";
+ };
+ sda {
+ enum-name = "GPIO_EC_I2C5_BATTERY_SDA";
+ };
+ };
};
battery {
i2c-port = <&i2c5_0>;
@@ -89,6 +134,15 @@
enum-name = "I2C_PORT_EEPROM";
addr-flags = <0x50>;
label = "EEPROM";
+ config {
+ frequency = <100>;
+ scl {
+ enum-name = "GPIO_EC_I2C7_EEPROM_PWR_SCL_R";
+ };
+ sda {
+ enum-name = "GPIO_EC_I2C7_EEPROM_PWR_SDA_R";
+ };
+ };
};
charger {
i2c-port = <&i2c7_0>;
diff --git a/zephyr/projects/volteer/delbin/gpio.dts b/zephyr/projects/volteer/delbin/gpio.dts
index c29b8a95c3..b1424232d5 100644
--- a/zephyr/projects/volteer/delbin/gpio.dts
+++ b/zephyr/projects/volteer/delbin/gpio.dts
@@ -257,50 +257,62 @@
};
ec_i2c0_sensor_scl {
gpios = <&gpiob 5 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C0_SENSOR_SCL";
label = "EC_I2C0_SENSOR_SCL";
};
ec_i2c0_sensor_sda {
gpios = <&gpiob 4 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C0_SENSOR_SDA";
label = "EC_I2C0_SENSOR_SDA";
};
ec_i2c1_usb_c0_scl {
gpios = <&gpio9 0 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C1_USB_C0_SCL";
label = "EC_I2C1_USB_C0_SCL";
};
ec_i2c1_usb_c0_sda {
gpios = <&gpio8 7 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C1_USB_C0_SDA";
label = "EC_I2C1_USB_C0_SDA";
};
ec_i2c2_usb_c1_scl {
gpios = <&gpio9 2 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C2_USB_C1_SCL";
label = "EC_I2C2_USB_C1_SCL";
};
ec_i2c2_usb_c1_sda {
gpios = <&gpio9 1 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C2_USB_C1_SDA";
label = "EC_I2C2_USB_C1_SDA";
};
ec_i2c3_usb_1_mix_scl {
gpios = <&gpiod 1 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C3_USB_1_MIX_SCL";
label = "EC_I2C3_USB_1_MIX_SCL";
};
ec_i2c3_usb_1_mix_sda {
gpios = <&gpiod 0 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C3_USB_1_MIX_SDA";
label = "EC_I2C3_USB_1_MIX_SDA";
};
ec_i2c5_power_scl {
gpios = <&gpio3 3 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C5_BATTERY_SCL";
label = "EC_I2C5_POWER_SCL";
};
ec_i2c5_power_sda {
gpios = <&gpio3 6 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C5_BATTERY_SDA";
label = "EC_I2C5_POWER_SDA";
};
ec_i2c7_eeprom_scl {
gpios = <&gpiob 3 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C7_EEPROM_PWR_SCL_R";
label = "EC_I2C7_EEPROM_SCL";
};
ec_i2c7_eeprom_sda {
gpios = <&gpiob 2 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C7_EEPROM_PWR_SDA_R";
label = "EC_I2C7_EEPROM_SDA";
};
ec_batt_pres_odl {
diff --git a/zephyr/projects/volteer/volteer/gpio.dts b/zephyr/projects/volteer/volteer/gpio.dts
index c5934b77b2..901657e2fa 100644
--- a/zephyr/projects/volteer/volteer/gpio.dts
+++ b/zephyr/projects/volteer/volteer/gpio.dts
@@ -320,42 +320,52 @@
};
ec_i2c1_usb_c0_scl {
gpios = <&gpio9 0 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C1_USB_C0_SCL";
label = "EC_I2C1_USB_C0_SCL";
};
ec_i2c1_usb_c0_sda {
gpios = <&gpio8 7 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C1_USB_C0_SDA";
label = "EC_I2C1_USB_C0_SDA";
};
ec_i2c2_usb_c1_scl {
gpios = <&gpio9 2 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C2_USB_C1_SCL";
label = "EC_I2C2_USB_C1_SCL";
};
ec_i2c2_usb_c1_sda {
gpios = <&gpio9 1 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C2_USB_C1_SDA";
label = "EC_I2C2_USB_C1_SDA";
};
ec_i2c3_usb_1_mix_scl {
gpios = <&gpiod 1 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C3_USB_1_MIX_SCL";
label = "EC_I2C3_USB_1_MIX_SCL";
};
ec_i2c3_usb_1_mix_sda {
gpios = <&gpiod 0 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C3_USB_1_MIX_SDA";
label = "EC_I2C3_USB_1_MIX_SDA";
};
ec_i2c5_battery_scl {
gpios = <&gpio3 3 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C5_BATTERY_SCL";
label = "EC_I2C5_BATTERY_SCL";
};
ec_i2c5_battery_sda {
gpios = <&gpio3 6 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C5_BATTERY_SDA";
label = "EC_I2C5_BATTERY_SDA";
};
ec_i2c7_eeprom_pwr_scl_r {
gpios = <&gpiob 3 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C7_EEPROM_PWR_SCL_R";
label = "EC_I2C7_EEPROM_PWR_SCL_R";
};
ec_i2c7_eeprom_pwr_sda_r {
gpios = <&gpiob 2 GPIO_INPUT>;
+ enum-name = "GPIO_EC_I2C7_EEPROM_PWR_SDA_R";
label = "EC_I2C7_EEPROM_PWR_SDA_R";
};
ec_batt_pres_odl {
diff --git a/zephyr/shim/src/i2c.c b/zephyr/shim/src/i2c.c
index ddd73e27f1..c42e9e9e75 100644
--- a/zephyr/shim/src/i2c.c
+++ b/zephyr/shim/src/i2c.c
@@ -16,6 +16,21 @@
i2c_devices[I2C_PORT(id)] = device_get_binding( \
DT_PROP_BY_PHANDLE(id, i2c_port, label));
+#define I2C_CONFIG_GPIO(id, type) \
+ DT_ENUM_UPPER_TOKEN(DT_CHILD(DT_CHILD(id, config), type), enum_name)
+
+#define I2C_PORT_INIT(id) \
+ COND_CODE_1(DT_NODE_EXISTS(DT_CHILD(id, config)), \
+ ( \
+ { \
+ .name = DT_LABEL(id), \
+ .port = I2C_PORT(id), \
+ .kbps = DT_PROP(DT_CHILD(id, config), \
+ frequency), \
+ .scl = I2C_CONFIG_GPIO(id, scl), \
+ .sda = I2C_CONFIG_GPIO(id, sda), \
+ }, ), \
+ ())
/*
* Long term we will not need these, for now they're needed to get things to
* build since these extern symbols are usually defined in
@@ -24,7 +39,11 @@
* Since all the ports will eventually be handled by device tree. This will
* be removed at that point.
*/
-const struct i2c_port_t i2c_ports[] = {};
+const struct i2c_port_t i2c_ports[] = {
+#if DT_NODE_EXISTS(DT_PATH(named_i2c_ports))
+ DT_FOREACH_CHILD(DT_PATH(named_i2c_ports), I2C_PORT_INIT)
+#endif
+};
const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports);
int i2c_get_line_levels(int port)