1/* 2 * Copyright 2020, Data61 3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO) 4 * ABN 41 687 119 230. 5 * 6 * This software may be distributed and modified according to the terms of 7 * the BSD 2-Clause license. Note that NO WARRANTY is provided. 8 * See "LICENSE_BSD2.txt" for details. 9 * 10 * @TAG(DATA61_BSD) 11 */ 12 13#include <errno.h> 14 15#include <utils/util.h> 16#include <gpiomuxserver.h> 17 18typedef struct gpiomuxserver_mux_interface_data { 19 int (*gpiomuxserver_feature_enable)(mux_feature_t mux_feature, mux_gpio_dir_t mux_gpio_dir); 20 int (*gpiomuxserver_feature_disable)(mux_feature_t mux_feature); 21} gpiomuxserver_mux_interface_data_t; 22 23static gpiomuxserver_mux_interface_data_t gpiomuxserver_mux_private_data; 24 25static int gpiomuxserver_feature_enable_wrapper(const mux_sys_t *mux, mux_feature_t feature, enum mux_gpio_dir dir) 26{ 27 gpiomuxserver_mux_interface_data_t *gpiomuxserver_data = mux->priv; 28 29 return gpiomuxserver_data->gpiomuxserver_feature_enable(feature, dir); 30} 31 32static int gpiomuxserver_feature_disable_wrapper(const mux_sys_t *mux, mux_feature_t feature) 33{ 34 gpiomuxserver_mux_interface_data_t *gpiomuxserver_data = mux->priv; 35 36 return gpiomuxserver_data->gpiomuxserver_feature_disable(feature); 37} 38 39int gpiomuxserver_mux_interface_init(int (*gpiomuxserver_feature_enable)(mux_feature_t mux_feature, 40 mux_gpio_dir_t mux_gpio_dir), 41 int (*gpiomuxserver_feature_disable)(mux_feature_t mux_feature), 42 mux_sys_t *mux_sys) 43{ 44 if (!gpiomuxserver_feature_enable) { 45 ZF_LOGE("gpiomuxserver_feature_enable is NULL"); 46 return -EINVAL; 47 } 48 49 if (!gpiomuxserver_feature_disable) { 50 ZF_LOGE("gpiomuxserver_feature_disable is NULL"); 51 return -EINVAL; 52 } 53 54 if (!mux_sys) { 55 ZF_LOGE("mux_sys is NULL"); 56 return -EINVAL; 57 } 58 59 gpiomuxserver_mux_private_data.gpiomuxserver_feature_enable = gpiomuxserver_feature_enable; 60 gpiomuxserver_mux_private_data.gpiomuxserver_feature_disable = gpiomuxserver_feature_disable; 61 62 mux_sys->priv = &gpiomuxserver_mux_private_data; 63 mux_sys->feature_enable = gpiomuxserver_feature_enable_wrapper; 64 mux_sys->feature_disable = gpiomuxserver_feature_disable_wrapper; 65 66 return 0; 67} 68