summaryrefslogtreecommitdiff
path: root/zephyr/projects/nissa/src/nivviks/board_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/projects/nissa/src/nivviks/board_config.c')
-rw-r--r--zephyr/projects/nissa/src/nivviks/board_config.c44
1 files changed, 39 insertions, 5 deletions
diff --git a/zephyr/projects/nissa/src/nivviks/board_config.c b/zephyr/projects/nissa/src/nivviks/board_config.c
index aecaeaef7c..6ceeecbd86 100644
--- a/zephyr/projects/nissa/src/nivviks/board_config.c
+++ b/zephyr/projects/nissa/src/nivviks/board_config.c
@@ -5,25 +5,59 @@
/* Nivviks sub-board hardware configuration */
-#include "gpio.h"
+#include <init.h>
+#include <kernel.h>
+#include <sys/printk.h>
+
+#include "gpios.h"
#include "hooks.h"
+#include "task.h"
+
#include "sub_board.h"
static void nivviks_subboard_init(void)
{
enum nissa_sub_board_type sb = nissa_get_sb_type();
+ /*
+ * Need to initialise board specific GPIOs since the
+ * common init code does not know about them.
+ * Remove once common code initialises all GPIOs, not just
+ * the ones with enum-names.
+ */
+ gpio_pin_configure_dt(&gpio_usb_c0_int_odl,
+ GPIO_INPUT | gpio_usb_c0_int_odl.dt_flags);
if (sb != NISSA_SB_C_A && sb != NISSA_SB_HDMI_A) {
/* Turn off unused USB A1 GPIOs */
+ gpio_pin_configure_dt(&gpio_sub_usb_a1_ilimit_sdp,
+ GPIO_DISCONNECTED);
+ gpio_pin_configure_dt(&gpio_en_sub_usb_a1_vbus,
+ GPIO_DISCONNECTED);
}
if (sb == NISSA_SB_C_A || sb == NISSA_SB_C_LTE) {
/* Enable type-C port 1 */
+ gpio_pin_configure_dt(&gpio_usb_c1_int_odl,
+ GPIO_INPUT |
+ gpio_usb_c1_int_odl.dt_flags);
+ } else {
+ /* Disable the port 1 charger task */
+ task_disable_task(TASK_ID_USB_CHG_P1);
}
if (sb == NISSA_SB_HDMI_A) {
+ /* Disable I2C_PORT_USB_C1_TCPC */
+ /* TODO(b:212490923): Use pinctrl to switch from I2C */
/* Enable HDMI GPIOs */
+ gpio_pin_configure_dt(&gpio_en_sub_rails_odl,
+ GPIO_OUTPUT |
+ GPIO_OUTPUT_INIT_HIGH |
+ gpio_en_sub_rails_odl.dt_flags);
+ gpio_pin_configure_dt(&gpio_hdmi_en_sub_odl,
+ GPIO_OUTPUT |
+ GPIO_OUTPUT_INIT_HIGH |
+ gpio_hdmi_en_sub_odl.dt_flags);
+ /* Configure the interrupt separately */
+ gpio_pin_configure_dt(&gpio_hpd_sub_odl,
+ GPIO_INPUT | gpio_hpd_sub_odl.dt_flags);
}
}
-/*
- * Make sure setup is done after EEPROM is readable.
- */
-DECLARE_HOOK(HOOK_INIT, nivviks_subboard_init, HOOK_PRIO_INIT_I2C + 1);
+DECLARE_HOOK(HOOK_INIT, nivviks_subboard_init, HOOK_PRIO_FIRST+1);