blob: 85957d37ad9a575db7a583fa9f618d5ee5a25581 [file] [log] [blame]
// 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;
}