blob: 926f1e7f90a47929eb6e4792f8ded7a4da490600 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
// See pinmux_config.h for the explaination of this include ordering.
#include "sw/device/lib/testing/json/pinmux.h"
#undef UJSON_SERDE_IMPL
#define UJSON_SERDE_IMPL 1
#include "sw/device/lib/base/macros.h"
#include "sw/device/lib/base/status.h"
#include "sw/device/lib/dif/dif_pinmux.h"
#include "sw/device/lib/testing/json/pinmux_config.h"
#include "sw/device/lib/testing/test_framework/ujson_ottf.h"
status_t pinmux_config(ujson_t *uj, dif_pinmux_t *pinmux) {
pinmux_config_t config;
TRY(ujson_deserialize_pinmux_config_t(uj, &config));
for (size_t i = 0; i < ARRAYSIZE(config.input.peripheral); ++i) {
if (config.input.peripheral[i] == kPinmuxPeripheralInEnd) {
break;
}
TRY(dif_pinmux_input_select(pinmux, config.input.peripheral[i],
config.input.selector[i]));
}
for (size_t i = 0; i < ARRAYSIZE(config.output.mio); ++i) {
if (config.output.mio[i] == kPinmuxMioOutEnd) {
break;
}
TRY(dif_pinmux_output_select(pinmux, config.output.mio[i],
config.output.selector[i]));
}
return RESP_OK_STATUS(uj);
}