diff --git a/libplatsupport/src/mach/exynos/mux.c b/libplatsupport/src/mach/exynos/mux.c
index 68a98e3..0bbaf35 100644
--- a/libplatsupport/src/mach/exynos/mux.c
+++ b/libplatsupport/src/mach/exynos/mux.c
@@ -36,13 +36,13 @@
 
 static volatile struct mux_bank *_bank[GPIO_NBANKS];
 
-static struct mux_bank **mux_priv_get_banks(mux_sys_t *mux)
+static struct mux_bank **mux_priv_get_banks(const mux_sys_t *mux)
 {
     assert(mux);
     return (struct mux_bank **)mux->priv;
 }
 
-static struct mux_cfg *get_mux_cfg(mux_sys_t *mux, int port)
+static struct mux_cfg *get_mux_cfg(const mux_sys_t *mux, int port)
 {
     struct mux_bank **bank;
     int b, p;
@@ -140,7 +140,7 @@
     exynos_mux_set_con(cfg, pin, con);
 }
 
-static int exynos_mux_feature_enable(mux_sys_t *mux, mux_feature_t mux_feature,
+static int exynos_mux_feature_enable(const mux_sys_t *mux, mux_feature_t mux_feature,
                                      UNUSED enum mux_gpio_dir mgd)
 {
     if (mux_feature < 0 || mux_feature >= NMUX_FEATURES) {
diff --git a/libplatsupport/src/mach/exynos/serial.c b/libplatsupport/src/mach/exynos/serial.c
index 3233e65..b8dcc5e 100644
--- a/libplatsupport/src/mach/exynos/serial.c
+++ b/libplatsupport/src/mach/exynos/serial.c
@@ -599,8 +599,8 @@
     if (vaddr == NULL) {
         return NULL;
     }
-    clk = clk_init(clock_id, o);
+    clk = clk_init(clock_id, (ps_io_ops_t *)o);
     mux_uart_init(uart_mux_feature,(mux_sys_t*) &o->mux_sys);
     chardevice_init(d, vaddr, NULL);
-    return exynos_serial_init(0, vaddr, &o->mux_sys, clk, d) ? NULL : d;
+    return exynos_serial_init(0, vaddr, (mux_sys_t*) &o->mux_sys, clk, d) ? NULL : d;
 }
diff --git a/libplatsupport/src/plat/tk1/gpio.c b/libplatsupport/src/plat/tk1/gpio.c
index d5cd470..6d7e817 100644
--- a/libplatsupport/src/plat/tk1/gpio.c
+++ b/libplatsupport/src/plat/tk1/gpio.c
@@ -302,7 +302,7 @@
     assert(*reg_vaddr == val);
 }
 
-static void tegra_set_level(gpio_t *gpio, enum gpio_level level)
+static int tegra_set_level(gpio_t *gpio, enum gpio_level level)
 {
     gpio_sys_t *gpio_sys = gpio->gpio_sys;
     enum gpio_pin pin = gpio->id;
@@ -329,9 +329,10 @@
 
     *reg_vaddr = val;
     assert(*reg_vaddr == val);
+    return 0;
 }
 
-static bool tegra_read_level(gpio_t *gpio)
+static int tegra_read_level(gpio_t *gpio)
 {
     gpio_sys_t *gpio_sys = gpio->gpio_sys;
     enum gpio_pin pin = gpio->id;
diff --git a/libplatsupport/src/plat/tk1/mux.c b/libplatsupport/src/plat/tk1/mux.c
index a1738d9..58567c1 100644
--- a/libplatsupport/src/plat/tk1/mux.c
+++ b/libplatsupport/src/plat/tk1/mux.c
@@ -251,13 +251,13 @@
     gpio_sys_t *gpio_sys;
 } tegra_mux_state_t;
 
-static const tegra_mux_state_t *tk1_mux_get_priv(mux_sys_t *mux_sys)
+static const tegra_mux_state_t *tk1_mux_get_priv(const mux_sys_t *mux_sys)
 {
     assert(mux_sys != NULL);
     return (const tegra_mux_state_t *)mux_sys->priv;
 }
 
-static volatile uint32_t *tk1_mux_get_group_reg_handle_for_pin(mux_sys_t *ms, int mux_reg_index)
+static volatile uint32_t *tk1_mux_get_group_reg_handle_for_pin(const mux_sys_t *ms, int mux_reg_index)
 {
     volatile uint32_t   *ret;
     int                 group_offset;
@@ -269,7 +269,7 @@
     return &ret[group_offset / sizeof(uint32_t)];
 }
 
-static void tk1_mux_set_drive_strength_for_pin(mux_sys_t *ms,
+static void tk1_mux_set_drive_strength_for_pin(const mux_sys_t *ms,
                                                int mux_reg_index,
                                                uint8_t drive_up_strength,
                                                uint8_t drive_down_strength)
@@ -301,7 +301,7 @@
     ZF_LOGD("Group off 0x%x: new val: 0x%x.", group_offset, *reg);
 }
 
-static int tk1_mux_set_pin_params(mux_sys_t *mux, struct tk1_mux_pin_desc *desc,
+static int tk1_mux_set_pin_params(const mux_sys_t *mux, struct tk1_mux_pin_desc *desc,
                                   enum mux_gpio_dir mux_gpio_dir)
 {
     uint32_t regval, requiredval;
@@ -509,7 +509,7 @@
                           | pupd_val << MUX_REG_PUPD_SHIFT;
 }
 
-static int tk1_mux_feature_enable(mux_sys_t *mux, mux_feature_t feat,
+static int tk1_mux_feature_enable(const mux_sys_t *mux, mux_feature_t feat,
                                   enum mux_gpio_dir mux_gpio_dir)
 {
     int error;
@@ -590,7 +590,7 @@
     return 0;
 }
 
-static int tk1_mux_feature_disable(mux_sys_t *mux, mux_feature_t feat)
+static int tk1_mux_feature_disable(const mux_sys_t *mux, mux_feature_t feat)
 {
     tk1_mux_feature_pinmap_t *map;
     const tegra_mux_state_t *s = tk1_mux_get_priv(mux);
