diff options
author | Andrew McRae <amcrae@google.com> | 2022-01-31 18:53:24 +1100 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2022-01-31 23:04:39 +0000 |
commit | fc8a00bc65db2d0d98382f17e896d8bc4276acb6 (patch) | |
tree | da073f109fe08a9f7ac2393309bb96bdc6e427ac | |
parent | 0908443a2d381ade5838abffdaddba1f9fc10ee9 (diff) | |
download | chrome-ec-fc8a00bc65db2d0d98382f17e896d8bc4276acb6.tar.gz |
skyrim: Migrate GPIO access to Zephyr API
Migrate GPIO access to use the Zephyr GPIO API
BUG=b:216466985
TEST=zmake configure -b {skyrim,guybrush}
BRANCH=none
Signed-off-by: Andrew McRae <amcrae@google.com>
Change-Id: I50759479c62eac112e77d4e94a292541dff4adce
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3426251
Reviewed-by: Denis Brockus <dbrockus@chromium.org>
-rw-r--r-- | zephyr/projects/skyrim/gpio.dts | 10 | ||||
-rw-r--r-- | zephyr/projects/skyrim/guybrush.dts | 4 | ||||
-rw-r--r-- | zephyr/projects/skyrim/power_signals.c | 31 | ||||
-rw-r--r-- | zephyr/projects/skyrim/power_signals_guybrush.c | 23 | ||||
-rw-r--r-- | zephyr/projects/skyrim/skyrim.dts | 4 | ||||
-rw-r--r-- | zephyr/projects/skyrim/usb_pd_policy.c | 2 | ||||
-rw-r--r-- | zephyr/projects/skyrim/usbc_config.c | 26 |
7 files changed, 56 insertions, 44 deletions
diff --git a/zephyr/projects/skyrim/gpio.dts b/zephyr/projects/skyrim/gpio.dts index 89e60f37cc..8b328b76c4 100644 --- a/zephyr/projects/skyrim/gpio.dts +++ b/zephyr/projects/skyrim/gpio.dts @@ -49,11 +49,11 @@ gpios = <&gpiob 7 GPIO_OUT_LOW>; enum-name = "GPIO_EN_PWR_A"; }; - en_pwr_s0_r { + gpio_en_pwr_s0_r: en_pwr_s0_r { gpios = <&gpiof 1 GPIO_OUT_LOW>; enum-name = "GPIO_EN_PWR_S0_R"; }; - en_pwr_pcore_s0_r { + gpio_en_pwr_pcore_s0_r: en_pwr_pcore_s0_r { gpios = <&gpioe 1 GPIO_OUT_LOW>; enum-name = "GPIO_EN_PWR_PCORE_S0_R"; }; @@ -61,7 +61,7 @@ gpios = <&gpio7 6 GPIO_ODR_HIGH>; enum-name = "GPIO_SYS_RESET_L"; }; - ec_soc_rsmrst_l { + gpio_ec_soc_rsmrst_l: ec_soc_rsmrst_l { gpios = <&gpioc 5 GPIO_OUT_LOW>; enum-name = "GPIO_PCH_RSMRST_L"; }; @@ -106,11 +106,11 @@ gpios = <&gpio9 6 GPIO_INPUT_PULL_UP>; enum-name = "GPIO_USB_C1_BC12_INT_ODL"; }; - usb_c0_tcpc_rst_l { + gpio_usb_c0_tcpc_rst_l: usb_c0_tcpc_rst_l { gpios = <&gpio3 4 GPIO_OUT_HIGH>; enum-name = "GPIO_USB_C0_TCPC_RST_L"; }; - usb_c1_tcpc_rst_l { + gpio_usb_c1_tcpc_rst_l: usb_c1_tcpc_rst_l { gpios = <&gpio3 7 GPIO_OUT_HIGH>; enum-name = "GPIO_USB_C1_TCPC_RST_L"; }; diff --git a/zephyr/projects/skyrim/guybrush.dts b/zephyr/projects/skyrim/guybrush.dts index b5ca05644a..7e699e8f9e 100644 --- a/zephyr/projects/skyrim/guybrush.dts +++ b/zephyr/projects/skyrim/guybrush.dts @@ -49,7 +49,7 @@ ec_mem_event { gpios = <&gpioa 5 GPIO_OUT_LOW>; }; - ec_soc_pwr_btn_l { + gpio_ec_soc_pwr_btn_l: ec_soc_pwr_btn_l { gpios = <&gpio6 3 GPIO_OUT_HIGH>; enum-name = "GPIO_PCH_PWRBTN_L"; }; @@ -59,7 +59,7 @@ soc_thermtrip_odl { gpios = <&gpioe 5 GPIO_INPUT>; }; - usb_c0_c1_fault_odl { + gpio_usb_c0_c1_fault_odl: usb_c0_c1_fault_odl { gpios = <&gpio7 3 GPIO_ODR_HIGH>; enum-name = "GPIO_USB_C0_C1_FAULT_ODL"; }; diff --git a/zephyr/projects/skyrim/power_signals.c b/zephyr/projects/skyrim/power_signals.c index 000f098f92..7c46a27505 100644 --- a/zephyr/projects/skyrim/power_signals.c +++ b/zephyr/projects/skyrim/power_signals.c @@ -55,28 +55,31 @@ void board_pwrbtn_to_pch(int level) const uint32_t timeout_rsmrst_rise_us = 30 * MSEC; /* Add delay for G3 exit if asserting PWRBTN_L and RSMRST_L is low. */ - if (!level && !gpio_get_level(GPIO_PCH_RSMRST_L)) { + if (!level && + !gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_ec_soc_rsmrst_l))) { start = get_time(); do { usleep(200); - if (gpio_get_level(GPIO_PCH_RSMRST_L)) + if (gpio_pin_get_dt( + GPIO_DT_FROM_NODELABEL(gpio_ec_soc_rsmrst_l))) break; } while (time_since32(start) < timeout_rsmrst_rise_us); - if (!gpio_get_level(GPIO_PCH_RSMRST_L)) + if (!gpio_pin_get_dt( + GPIO_DT_FROM_NODELABEL(gpio_ec_soc_rsmrst_l))) ccprints("Error pwrbtn: RSMRST_L still low"); msleep(16); } - gpio_set_level(GPIO_PCH_PWRBTN_L, level); + gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_ec_soc_pwr_btn_l), level); } /* Note: signal parameter unused */ void baseboard_set_soc_pwr_pgood(enum gpio_signal unused) { - gpio_set_level(GPIO_EC_SOC_PWR_GOOD, - gpio_get_level(GPIO_EN_PWR_PCORE_S0_R) && - gpio_get_level(GPIO_PG_LPDDR5_S0_OD)); + gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_ec_soc_pwr_good), + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_en_pwr_pcore_s0_r)) && + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_pg_lpddr5_s0_od))); } /* Note: signal parameter unused */ @@ -86,10 +89,10 @@ void baseboard_set_en_pwr_pcore(enum gpio_signal unused) * EC must AND signals PG_LPDDR5_S3_OD, PG_GROUPC_S0_OD, and * EN_PWR_S0_R */ - gpio_set_level(GPIO_EN_PWR_PCORE_S0_R, - gpio_get_level(GPIO_PG_LPDDR5_S3_OD) && - gpio_get_level(GPIO_PG_GROUPC_S0_OD) && - gpio_get_level(GPIO_EN_PWR_S0_R)); + gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_en_pwr_pcore_s0_r), + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_pg_lpddr5_s3_od)) && + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_pg_groupc_s0_od)) && + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_en_pwr_s0_r))); /* Update EC_SOC_PWR_GOOD based on our results */ baseboard_set_soc_pwr_pgood(unused); @@ -99,9 +102,9 @@ void baseboard_en_pwr_s0(enum gpio_signal signal) { /* EC must AND signals SLP_S3_L and PG_PWR_S5 */ - gpio_set_level(GPIO_EN_PWR_S0_R, - gpio_get_level(GPIO_PCH_SLP_S3_L) && - gpio_get_level(GPIO_S5_PGOOD)); + gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_en_pwr_s0_r), + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_slp_s3_l)) && + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_pg_pwr_s5))); /* Change EN_PWR_PCORE_S0_R if needed*/ baseboard_set_en_pwr_pcore(signal); diff --git a/zephyr/projects/skyrim/power_signals_guybrush.c b/zephyr/projects/skyrim/power_signals_guybrush.c index d6d881dfa8..587ea49472 100644 --- a/zephyr/projects/skyrim/power_signals_guybrush.c +++ b/zephyr/projects/skyrim/power_signals_guybrush.c @@ -67,38 +67,41 @@ void board_pwrbtn_to_pch(int level) const uint32_t timeout_rsmrst_rise_us = 30 * MSEC; /* Add delay for G3 exit if asserting PWRBTN_L and RSMRST_L is low. */ - if (!level && !gpio_get_level(GPIO_PCH_RSMRST_L)) { + if (!level && + !gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_ec_soc_rsmrst_l))) { start = get_time(); do { usleep(200); - if (gpio_get_level(GPIO_PCH_RSMRST_L)) + if (gpio_pin_get_dt( + GPIO_DT_FROM_NODELABEL(gpio_ec_soc_rsmrst_l))) break; } while (time_since32(start) < timeout_rsmrst_rise_us); - if (!gpio_get_level(GPIO_PCH_RSMRST_L)) + if (!gpio_pin_get_dt( + GPIO_DT_FROM_NODELABEL(gpio_ec_soc_rsmrst_l))) ccprints("Error pwrbtn: RSMRST_L still low"); msleep(16); } - gpio_set_level(GPIO_PCH_PWRBTN_L, level); + gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_ec_soc_pwr_btn_l), level); } void baseboard_en_pwr_pcore_s0(enum gpio_signal signal) { /* EC must AND signals PG_LPDDR4X_S3_OD and PG_GROUPC_S0_OD */ - gpio_set_level(GPIO_EN_PWR_PCORE_S0_R, - gpio_get_level(GPIO_PG_LPDDR4X_S3_OD) && - gpio_get_level(GPIO_PG_GROUPC_S0_OD)); + gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_en_pwr_pcore_s0_r), + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_pg_lpddr4x_s3_od)) && + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_pg_groupc_s0_od))); } void baseboard_en_pwr_s0(enum gpio_signal signal) { /* EC must AND signals SLP_S3_L and PG_PWR_S5 */ - gpio_set_level(GPIO_EN_PWR_S0_R, - gpio_get_level(GPIO_PCH_SLP_S3_L) && - gpio_get_level(GPIO_S5_PGOOD)); + gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_en_pwr_s0_r), + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_slp_s3_l)) && + gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_pg_pwr_s5))); /* Now chain off to the normal power signal interrupt handler. */ power_signal_interrupt(signal); diff --git a/zephyr/projects/skyrim/skyrim.dts b/zephyr/projects/skyrim/skyrim.dts index 28bdbc0588..4dfaa1dd58 100644 --- a/zephyr/projects/skyrim/skyrim.dts +++ b/zephyr/projects/skyrim/skyrim.dts @@ -37,7 +37,7 @@ gpios = <&gpioa 1 GPIO_OUT_HIGH>; enum-name = "GPIO_EC_INT_L"; }; - ec_soc_pwr_good { + gpio_ec_soc_pwr_good: ec_soc_pwr_good { gpios = <&gpiod 3 GPIO_OUT_LOW>; enum-name = "GPIO_EC_SOC_PWR_GOOD"; }; @@ -64,7 +64,7 @@ 3axis_int_l { gpios = <&gpioa 2 GPIO_INPUT_PULL_UP>; }; - ec_soc_pwr_btn_l { + gpio_ec_soc_pwr_btn_l: ec_soc_pwr_btn_l { gpios = <&gpioa 7 GPIO_OUT_HIGH>; enum-name = "GPIO_PCH_PWRBTN_L"; }; diff --git a/zephyr/projects/skyrim/usb_pd_policy.c b/zephyr/projects/skyrim/usb_pd_policy.c index 0aa21293fe..0adc8b1b51 100644 --- a/zephyr/projects/skyrim/usb_pd_policy.c +++ b/zephyr/projects/skyrim/usb_pd_policy.c @@ -26,7 +26,7 @@ int pd_check_vconn_swap(int port) * S5_PGOOD depends on PG_PP5000_S5 being asserted, * so GPIO_S5_PGOOD is a reasonable proxy for PP5000_S5 */ - return gpio_get_level(GPIO_S5_PGOOD); + return gpio_pin_get_dt(GPIO_DT_FROM_NODELABEL(gpio_pg_pwr_s5)); } void pd_power_supply_reset(int port) diff --git a/zephyr/projects/skyrim/usbc_config.c b/zephyr/projects/skyrim/usbc_config.c index 08e437094e..f8c10f0369 100644 --- a/zephyr/projects/skyrim/usbc_config.c +++ b/zephyr/projects/skyrim/usbc_config.c @@ -394,19 +394,19 @@ void tcpc_alert_event(enum gpio_signal signal) static void reset_nct38xx_port(int port) { - enum gpio_signal reset_gpio_l; + const struct gpio_dt_spec *reset_gpio_l; if (port == USBC_PORT_C0) - reset_gpio_l = GPIO_USB_C0_TCPC_RST_L; + reset_gpio_l = GPIO_DT_FROM_NODELABEL(gpio_usb_c0_tcpc_rst_l); else if (port == USBC_PORT_C1) - reset_gpio_l = GPIO_USB_C1_TCPC_RST_L; + reset_gpio_l = GPIO_DT_FROM_NODELABEL(gpio_usb_c1_tcpc_rst_l); else /* Invalid port: do nothing */ return; - gpio_set_level(reset_gpio_l, 0); + gpio_pin_set_dt(reset_gpio_l, 0); msleep(NCT38XX_RESET_HOLD_DELAY_MS); - gpio_set_level(reset_gpio_l, 1); + gpio_pin_set_dt(reset_gpio_l, 1); nct38xx_reset_notify(port); if (NCT3807_RESET_POST_DELAY_MS != 0) msleep(NCT3807_RESET_POST_DELAY_MS); @@ -430,13 +430,17 @@ uint16_t tcpc_get_alert_status(void) * Check which port has the ALERT line set and ignore if that TCPC has * its reset line active. */ - if (!gpio_get_level(GPIO_USB_C0_TCPC_INT_ODL)) { - if (gpio_get_level(GPIO_USB_C0_TCPC_RST_L) != 0) + if (!gpio_pin_get_dt( + GPIO_DT_FROM_NODELABEL(gpio_usb_c0_tcpc_int_odl))) { + if (gpio_pin_get_dt( + GPIO_DT_FROM_NODELABEL(gpio_usb_c0_tcpc_rst_l)) != 0) status |= PD_STATUS_TCPC_ALERT_0; } - if (!gpio_get_level(GPIO_USB_C1_TCPC_INT_ODL)) { - if (gpio_get_level(GPIO_USB_C1_TCPC_RST_L) != 0) + if (!gpio_pin_get_dt( + GPIO_DT_FROM_NODELABEL(gpio_usb_c1_tcpc_int_odl))) { + if (gpio_pin_get_dt( + GPIO_DT_FROM_NODELABEL(gpio_usb_c1_tcpc_rst_l)) != 0) status |= PD_STATUS_TCPC_ALERT_1; } @@ -634,7 +638,9 @@ void board_overcurrent_event(int port, int is_overcurrented) switch (port) { case USBC_PORT_C0: case USBC_PORT_C1: - gpio_set_level(GPIO_USB_C0_C1_FAULT_ODL, !is_overcurrented); + gpio_pin_set_dt( + GPIO_DT_FROM_NODELABEL(gpio_usb_c0_c1_fault_odl), + !is_overcurrented); break; default: |