| // Copyright lowRISC contributors. |
| // Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| #include "sw/device/lib/dif/dif_pinmux.h" |
| |
| #include "sw/device/lib/base/bitfield.h" |
| #include "sw/device/lib/dif/dif_base.h" |
| |
| #include "pinmux_regs.h" // Generated. |
| |
| OT_WARN_UNUSED_RESULT |
| dif_result_t dif_pinmux_input_select(const dif_pinmux_t *pinmux, |
| dif_pinmux_index_t peripheral_input, |
| dif_pinmux_index_t insel) { |
| if (pinmux == NULL || peripheral_input >= PINMUX_PARAM_N_MIO_PERIPH_IN || |
| insel >= (2 + PINMUX_PARAM_N_MIO_PADS)) { |
| return kDifBadArg; |
| } |
| uint32_t reg_offset = |
| PINMUX_MIO_PERIPH_INSEL_0_REG_OFFSET + (peripheral_input << 2); |
| uint32_t reg_value = |
| bitfield_field32_write(0, PINMUX_MIO_PERIPH_INSEL_0_IN_0_FIELD, insel); |
| mmio_region_write32(pinmux->base_addr, reg_offset, reg_value); |
| return kDifOk; |
| } |
| |
| dif_result_t dif_pinmux_output_select(const dif_pinmux_t *pinmux, |
| dif_pinmux_index_t mio_pad_output, |
| dif_pinmux_index_t outsel) { |
| if (pinmux == NULL || mio_pad_output >= PINMUX_PARAM_N_MIO_PADS || |
| outsel >= (2 + PINMUX_PARAM_N_MIO_PERIPH_OUT)) { |
| return kDifBadArg; |
| } |
| uint32_t reg_offset = PINMUX_MIO_OUTSEL_0_REG_OFFSET + (mio_pad_output << 2); |
| uint32_t reg_value = |
| bitfield_field32_write(0, PINMUX_MIO_OUTSEL_0_OUT_0_FIELD, outsel); |
| mmio_region_write32(pinmux->base_addr, reg_offset, reg_value); |
| return kDifOk; |
| } |