summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew McRae <amcrae@google.com>2022-01-31 18:53:24 +1100
committerCommit Bot <commit-bot@chromium.org>2022-01-31 23:04:39 +0000
commitfc8a00bc65db2d0d98382f17e896d8bc4276acb6 (patch)
treeda073f109fe08a9f7ac2393309bb96bdc6e427ac
parent0908443a2d381ade5838abffdaddba1f9fc10ee9 (diff)
downloadchrome-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.dts10
-rw-r--r--zephyr/projects/skyrim/guybrush.dts4
-rw-r--r--zephyr/projects/skyrim/power_signals.c31
-rw-r--r--zephyr/projects/skyrim/power_signals_guybrush.c23
-rw-r--r--zephyr/projects/skyrim/skyrim.dts4
-rw-r--r--zephyr/projects/skyrim/usb_pd_policy.c2
-rw-r--r--zephyr/projects/skyrim/usbc_config.c26
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: