diff options
Diffstat (limited to 'zephyr')
-rw-r--r-- | zephyr/dts/bindings/gpio/gpio-enum-name.yaml | 10 | ||||
-rw-r--r-- | zephyr/dts/bindings/i2c/cros-ec-i2c-port-base.yaml | 11 | ||||
-rw-r--r-- | zephyr/projects/volteer/boards/arm/volteer/volteer.dts | 54 | ||||
-rw-r--r-- | zephyr/projects/volteer/delbin/gpio.dts | 12 | ||||
-rw-r--r-- | zephyr/projects/volteer/volteer/gpio.dts | 10 | ||||
-rw-r--r-- | zephyr/shim/src/i2c.c | 21 |
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) |