| /* |
| * Copyright (c) 2019 Brett Witherspoon |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #define DT_DRV_COMPAT ti_cc13xx_cc26xx_pinmux |
| |
| #include <device.h> |
| #include <errno.h> |
| #include <sys/__assert.h> |
| #include <drivers/pinmux.h> |
| |
| #include <driverlib/ioc.h> |
| |
| 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); |