/* * Copyright (c) 2019 Brett Witherspoon * * SPDX-License-Identifier: Apache-2.0 */ #define DT_DRV_COMPAT ti_cc13xx_cc26xx_pinmux #include #include #include #include #include static int pinmux_cc13xx_cc26xx_set(const struct device *dev, uint32_t pin, uint32_t func) { ARG_UNUSED(dev); __ASSERT_NO_MSG(pin < NUM_IO_MAX); __ASSERT_NO_MSG(func < NUM_IO_PORTS); IOCIOPortIdSet(pin, func); return 0; } static int pinmux_cc13xx_cc26xx_get(const struct device *dev, uint32_t pin, uint32_t *func) { ARG_UNUSED(dev); __ASSERT_NO_MSG(pin < NUM_IO_MAX); *func = IOCPortConfigureGet(pin) & IOC_IOCFG0_PORT_ID_M; return 0; } static int pinmux_cc13xx_cc26xx_pullup(const struct device *dev, uint32_t pin, uint8_t func) { ARG_UNUSED(dev); __ASSERT_NO_MSG(pin < NUM_IO_MAX); switch (func) { case PINMUX_PULLUP_ENABLE: IOCIOPortPullSet(pin, IOC_IOPULL_UP); return 0; case PINMUX_PULLUP_DISABLE: IOCIOPortPullSet(pin, IOC_NO_IOPULL); return 0; } return -EINVAL; } static int pinmux_cc13xx_cc26xx_input(const struct device *dev, uint32_t pin, uint8_t func) { ARG_UNUSED(dev); __ASSERT_NO_MSG(pin < NUM_IO_MAX); switch (func) { case PINMUX_INPUT_ENABLED: IOCIOInputSet(pin, IOC_INPUT_ENABLE); return 0; case PINMUX_OUTPUT_ENABLED: IOCIOInputSet(pin, IOC_INPUT_DISABLE); return 0; } return -EINVAL; } static int pinmux_cc13xx_cc26xx_init(const struct device *dev) { ARG_UNUSED(dev); return 0; } static const struct pinmux_driver_api pinmux_cc13xx_cc26xx_driver_api = { .set = pinmux_cc13xx_cc26xx_set, .get = pinmux_cc13xx_cc26xx_get, .pullup = pinmux_cc13xx_cc26xx_pullup, .input = pinmux_cc13xx_cc26xx_input, }; DEVICE_DT_INST_DEFINE(0, &pinmux_cc13xx_cc26xx_init, NULL, NULL, NULL, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &pinmux_cc13xx_cc26xx_driver_api);