blob: 8e0590062944620ed5bfc266e42ce9f6e97aaf71 [file]
// Licensed under the Apache-2.0 license
// SPDX-License-Identifier: Apache-2.0
//! SCU Pin Control (Pinctrl) for multi-function pin configuration.
//!
//! Provides register-level access to configure AST1060 pins for different
//! functions (I2C, I3C, GPIO, etc.) via SCU multiplex registers.
use super::ScuRegisters;
use paste::paste;
/// Describes a single pin configuration operation.
#[derive(Clone, Copy, Debug)]
pub struct PinctrlPin {
/// SCU register offset (0x410, 0x414, 0x690, etc.)
pub offset: u32,
/// Bit position within the register (0-31)
pub bit: u32,
/// true = clear bit, false = set bit
pub clear: bool,
}
/// Macro to generate paired pin constants for set/clear operations.
macro_rules! gen_pin_pairs {
($reg_name:ident, $offset:expr, $bit:expr) => {
paste! {
pub const [<PIN_ $reg_name _ $bit>]: PinctrlPin = PinctrlPin {
offset: $offset,
bit: $bit,
clear: false,
};
pub const [<CLR_PIN_ $reg_name _ $bit>]: PinctrlPin = PinctrlPin {
offset: $offset,
bit: $bit,
clear: true,
};
}
};
}
// Generate individual pin constants for each SCU register and bit position
paste! {
gen_pin_pairs!(SCU410, 0x410, 0);
gen_pin_pairs!(SCU410, 0x410, 1);
gen_pin_pairs!(SCU410, 0x410, 2);
gen_pin_pairs!(SCU410, 0x410, 3);
gen_pin_pairs!(SCU410, 0x410, 4);
gen_pin_pairs!(SCU410, 0x410, 5);
gen_pin_pairs!(SCU410, 0x410, 6);
gen_pin_pairs!(SCU410, 0x410, 7);
gen_pin_pairs!(SCU410, 0x410, 8);
gen_pin_pairs!(SCU410, 0x410, 9);
gen_pin_pairs!(SCU410, 0x410, 10);
gen_pin_pairs!(SCU410, 0x410, 11);
gen_pin_pairs!(SCU410, 0x410, 12);
gen_pin_pairs!(SCU410, 0x410, 13);
gen_pin_pairs!(SCU410, 0x410, 14);
gen_pin_pairs!(SCU410, 0x410, 15);
gen_pin_pairs!(SCU410, 0x410, 16);
gen_pin_pairs!(SCU410, 0x410, 17);
gen_pin_pairs!(SCU410, 0x410, 18);
gen_pin_pairs!(SCU410, 0x410, 19);
gen_pin_pairs!(SCU410, 0x410, 20);
gen_pin_pairs!(SCU410, 0x410, 21);
gen_pin_pairs!(SCU410, 0x410, 22);
gen_pin_pairs!(SCU410, 0x410, 23);
gen_pin_pairs!(SCU410, 0x410, 24);
gen_pin_pairs!(SCU410, 0x410, 25);
gen_pin_pairs!(SCU410, 0x410, 26);
gen_pin_pairs!(SCU410, 0x410, 27);
gen_pin_pairs!(SCU410, 0x410, 28);
gen_pin_pairs!(SCU410, 0x410, 29);
gen_pin_pairs!(SCU410, 0x410, 30);
gen_pin_pairs!(SCU410, 0x410, 31);
gen_pin_pairs!(SCU414, 0x414, 0);
gen_pin_pairs!(SCU414, 0x414, 1);
gen_pin_pairs!(SCU414, 0x414, 2);
gen_pin_pairs!(SCU414, 0x414, 3);
gen_pin_pairs!(SCU414, 0x414, 4);
gen_pin_pairs!(SCU414, 0x414, 5);
gen_pin_pairs!(SCU414, 0x414, 6);
gen_pin_pairs!(SCU414, 0x414, 7);
gen_pin_pairs!(SCU414, 0x414, 8);
gen_pin_pairs!(SCU414, 0x414, 9);
gen_pin_pairs!(SCU414, 0x414, 10);
gen_pin_pairs!(SCU414, 0x414, 11);
gen_pin_pairs!(SCU414, 0x414, 12);
gen_pin_pairs!(SCU414, 0x414, 13);
gen_pin_pairs!(SCU414, 0x414, 14);
gen_pin_pairs!(SCU414, 0x414, 15);
gen_pin_pairs!(SCU414, 0x414, 16);
gen_pin_pairs!(SCU414, 0x414, 17);
gen_pin_pairs!(SCU414, 0x414, 18);
gen_pin_pairs!(SCU414, 0x414, 19);
gen_pin_pairs!(SCU414, 0x414, 20);
gen_pin_pairs!(SCU414, 0x414, 21);
gen_pin_pairs!(SCU414, 0x414, 22);
gen_pin_pairs!(SCU414, 0x414, 23);
gen_pin_pairs!(SCU414, 0x414, 24);
gen_pin_pairs!(SCU414, 0x414, 25);
gen_pin_pairs!(SCU414, 0x414, 26);
gen_pin_pairs!(SCU414, 0x414, 27);
gen_pin_pairs!(SCU414, 0x414, 28);
gen_pin_pairs!(SCU414, 0x414, 29);
gen_pin_pairs!(SCU414, 0x414, 30);
gen_pin_pairs!(SCU414, 0x414, 31);
gen_pin_pairs!(SCU418, 0x418, 0);
gen_pin_pairs!(SCU418, 0x418, 1);
gen_pin_pairs!(SCU418, 0x418, 2);
gen_pin_pairs!(SCU418, 0x418, 3);
gen_pin_pairs!(SCU418, 0x418, 4);
gen_pin_pairs!(SCU418, 0x418, 5);
gen_pin_pairs!(SCU418, 0x418, 6);
gen_pin_pairs!(SCU418, 0x418, 7);
gen_pin_pairs!(SCU418, 0x418, 8);
gen_pin_pairs!(SCU418, 0x418, 9);
gen_pin_pairs!(SCU418, 0x418, 10);
gen_pin_pairs!(SCU418, 0x418, 11);
gen_pin_pairs!(SCU418, 0x418, 12);
gen_pin_pairs!(SCU418, 0x418, 13);
gen_pin_pairs!(SCU418, 0x418, 14);
gen_pin_pairs!(SCU418, 0x418, 15);
gen_pin_pairs!(SCU418, 0x418, 16);
gen_pin_pairs!(SCU418, 0x418, 17);
gen_pin_pairs!(SCU418, 0x418, 18);
gen_pin_pairs!(SCU418, 0x418, 19);
gen_pin_pairs!(SCU418, 0x418, 20);
gen_pin_pairs!(SCU418, 0x418, 21);
gen_pin_pairs!(SCU418, 0x418, 22);
gen_pin_pairs!(SCU418, 0x418, 23);
gen_pin_pairs!(SCU418, 0x418, 24);
gen_pin_pairs!(SCU418, 0x418, 25);
gen_pin_pairs!(SCU418, 0x418, 26);
gen_pin_pairs!(SCU418, 0x418, 27);
gen_pin_pairs!(SCU418, 0x418, 28);
gen_pin_pairs!(SCU418, 0x418, 29);
gen_pin_pairs!(SCU418, 0x418, 30);
gen_pin_pairs!(SCU418, 0x418, 31);
gen_pin_pairs!(SCU41C, 0x41C, 0);
gen_pin_pairs!(SCU41C, 0x41C, 1);
gen_pin_pairs!(SCU41C, 0x41C, 2);
gen_pin_pairs!(SCU41C, 0x41C, 3);
gen_pin_pairs!(SCU41C, 0x41C, 4);
gen_pin_pairs!(SCU41C, 0x41C, 5);
gen_pin_pairs!(SCU41C, 0x41C, 6);
gen_pin_pairs!(SCU41C, 0x41C, 7);
gen_pin_pairs!(SCU41C, 0x41C, 8);
gen_pin_pairs!(SCU41C, 0x41C, 9);
gen_pin_pairs!(SCU41C, 0x41C, 10);
gen_pin_pairs!(SCU41C, 0x41C, 11);
gen_pin_pairs!(SCU41C, 0x41C, 12);
gen_pin_pairs!(SCU41C, 0x41C, 13);
gen_pin_pairs!(SCU41C, 0x41C, 14);
gen_pin_pairs!(SCU41C, 0x41C, 15);
gen_pin_pairs!(SCU41C, 0x41C, 16);
gen_pin_pairs!(SCU41C, 0x41C, 17);
gen_pin_pairs!(SCU41C, 0x41C, 18);
gen_pin_pairs!(SCU41C, 0x41C, 19);
gen_pin_pairs!(SCU41C, 0x41C, 20);
gen_pin_pairs!(SCU41C, 0x41C, 21);
gen_pin_pairs!(SCU41C, 0x41C, 22);
gen_pin_pairs!(SCU41C, 0x41C, 23);
gen_pin_pairs!(SCU41C, 0x41C, 24);
gen_pin_pairs!(SCU41C, 0x41C, 25);
gen_pin_pairs!(SCU41C, 0x41C, 26);
gen_pin_pairs!(SCU41C, 0x41C, 27);
gen_pin_pairs!(SCU41C, 0x41C, 28);
gen_pin_pairs!(SCU41C, 0x41C, 29);
gen_pin_pairs!(SCU41C, 0x41C, 30);
gen_pin_pairs!(SCU41C, 0x41C, 31);
gen_pin_pairs!(SCU430, 0x430, 0);
gen_pin_pairs!(SCU430, 0x430, 1);
gen_pin_pairs!(SCU430, 0x430, 2);
gen_pin_pairs!(SCU430, 0x430, 3);
gen_pin_pairs!(SCU430, 0x430, 4);
gen_pin_pairs!(SCU430, 0x430, 5);
gen_pin_pairs!(SCU430, 0x430, 6);
gen_pin_pairs!(SCU430, 0x430, 7);
gen_pin_pairs!(SCU430, 0x430, 8);
gen_pin_pairs!(SCU430, 0x430, 9);
gen_pin_pairs!(SCU430, 0x430, 10);
gen_pin_pairs!(SCU430, 0x430, 11);
gen_pin_pairs!(SCU430, 0x430, 12);
gen_pin_pairs!(SCU430, 0x430, 13);
gen_pin_pairs!(SCU430, 0x430, 14);
gen_pin_pairs!(SCU430, 0x430, 15);
gen_pin_pairs!(SCU430, 0x430, 16);
gen_pin_pairs!(SCU430, 0x430, 17);
gen_pin_pairs!(SCU430, 0x430, 18);
gen_pin_pairs!(SCU430, 0x430, 19);
gen_pin_pairs!(SCU430, 0x430, 20);
gen_pin_pairs!(SCU430, 0x430, 21);
gen_pin_pairs!(SCU430, 0x430, 22);
gen_pin_pairs!(SCU430, 0x430, 23);
gen_pin_pairs!(SCU430, 0x430, 24);
gen_pin_pairs!(SCU430, 0x430, 25);
gen_pin_pairs!(SCU430, 0x430, 26);
gen_pin_pairs!(SCU430, 0x430, 27);
gen_pin_pairs!(SCU430, 0x430, 28);
gen_pin_pairs!(SCU430, 0x430, 29);
gen_pin_pairs!(SCU430, 0x430, 30);
gen_pin_pairs!(SCU430, 0x430, 31);
gen_pin_pairs!(SCU434, 0x434, 0);
gen_pin_pairs!(SCU434, 0x434, 1);
gen_pin_pairs!(SCU434, 0x434, 2);
gen_pin_pairs!(SCU434, 0x434, 3);
gen_pin_pairs!(SCU434, 0x434, 4);
gen_pin_pairs!(SCU434, 0x434, 5);
gen_pin_pairs!(SCU434, 0x434, 6);
gen_pin_pairs!(SCU434, 0x434, 7);
gen_pin_pairs!(SCU434, 0x434, 8);
gen_pin_pairs!(SCU434, 0x434, 9);
gen_pin_pairs!(SCU434, 0x434, 10);
gen_pin_pairs!(SCU434, 0x434, 11);
gen_pin_pairs!(SCU434, 0x434, 12);
gen_pin_pairs!(SCU434, 0x434, 13);
gen_pin_pairs!(SCU434, 0x434, 14);
gen_pin_pairs!(SCU434, 0x434, 15);
gen_pin_pairs!(SCU434, 0x434, 16);
gen_pin_pairs!(SCU434, 0x434, 17);
gen_pin_pairs!(SCU434, 0x434, 18);
gen_pin_pairs!(SCU434, 0x434, 19);
gen_pin_pairs!(SCU434, 0x434, 20);
gen_pin_pairs!(SCU434, 0x434, 21);
gen_pin_pairs!(SCU434, 0x434, 22);
gen_pin_pairs!(SCU434, 0x434, 23);
gen_pin_pairs!(SCU434, 0x434, 24);
gen_pin_pairs!(SCU434, 0x434, 25);
gen_pin_pairs!(SCU434, 0x434, 26);
gen_pin_pairs!(SCU434, 0x434, 27);
gen_pin_pairs!(SCU434, 0x434, 28);
gen_pin_pairs!(SCU434, 0x434, 29);
gen_pin_pairs!(SCU434, 0x434, 30);
gen_pin_pairs!(SCU434, 0x434, 31);
gen_pin_pairs!(SCU4B0, 0x4B0, 0);
gen_pin_pairs!(SCU4B0, 0x4B0, 1);
gen_pin_pairs!(SCU4B0, 0x4B0, 2);
gen_pin_pairs!(SCU4B0, 0x4B0, 3);
gen_pin_pairs!(SCU4B0, 0x4B0, 4);
gen_pin_pairs!(SCU4B0, 0x4B0, 5);
gen_pin_pairs!(SCU4B0, 0x4B0, 6);
gen_pin_pairs!(SCU4B0, 0x4B0, 7);
gen_pin_pairs!(SCU4B0, 0x4B0, 8);
gen_pin_pairs!(SCU4B0, 0x4B0, 9);
gen_pin_pairs!(SCU4B0, 0x4B0, 10);
gen_pin_pairs!(SCU4B0, 0x4B0, 11);
gen_pin_pairs!(SCU4B0, 0x4B0, 12);
gen_pin_pairs!(SCU4B0, 0x4B0, 13);
gen_pin_pairs!(SCU4B0, 0x4B0, 14);
gen_pin_pairs!(SCU4B0, 0x4B0, 15);
gen_pin_pairs!(SCU4B0, 0x4B0, 16);
gen_pin_pairs!(SCU4B0, 0x4B0, 17);
gen_pin_pairs!(SCU4B0, 0x4B0, 18);
gen_pin_pairs!(SCU4B0, 0x4B0, 19);
gen_pin_pairs!(SCU4B0, 0x4B0, 20);
gen_pin_pairs!(SCU4B0, 0x4B0, 21);
gen_pin_pairs!(SCU4B0, 0x4B0, 22);
gen_pin_pairs!(SCU4B0, 0x4B0, 23);
gen_pin_pairs!(SCU4B0, 0x4B0, 24);
gen_pin_pairs!(SCU4B0, 0x4B0, 25);
gen_pin_pairs!(SCU4B0, 0x4B0, 26);
gen_pin_pairs!(SCU4B0, 0x4B0, 27);
gen_pin_pairs!(SCU4B0, 0x4B0, 28);
gen_pin_pairs!(SCU4B0, 0x4B0, 29);
gen_pin_pairs!(SCU4B0, 0x4B0, 30);
gen_pin_pairs!(SCU4B0, 0x4B0, 31);
gen_pin_pairs!(SCU4B4, 0x4B4, 0);
gen_pin_pairs!(SCU4B4, 0x4B4, 1);
gen_pin_pairs!(SCU4B4, 0x4B4, 2);
gen_pin_pairs!(SCU4B4, 0x4B4, 3);
gen_pin_pairs!(SCU4B4, 0x4B4, 4);
gen_pin_pairs!(SCU4B4, 0x4B4, 5);
gen_pin_pairs!(SCU4B4, 0x4B4, 6);
gen_pin_pairs!(SCU4B4, 0x4B4, 7);
gen_pin_pairs!(SCU4B4, 0x4B4, 8);
gen_pin_pairs!(SCU4B4, 0x4B4, 9);
gen_pin_pairs!(SCU4B4, 0x4B4, 10);
gen_pin_pairs!(SCU4B4, 0x4B4, 11);
gen_pin_pairs!(SCU4B4, 0x4B4, 12);
gen_pin_pairs!(SCU4B4, 0x4B4, 13);
gen_pin_pairs!(SCU4B4, 0x4B4, 14);
gen_pin_pairs!(SCU4B4, 0x4B4, 15);
gen_pin_pairs!(SCU4B4, 0x4B4, 16);
gen_pin_pairs!(SCU4B4, 0x4B4, 17);
gen_pin_pairs!(SCU4B4, 0x4B4, 18);
gen_pin_pairs!(SCU4B4, 0x4B4, 19);
gen_pin_pairs!(SCU4B4, 0x4B4, 20);
gen_pin_pairs!(SCU4B4, 0x4B4, 21);
gen_pin_pairs!(SCU4B4, 0x4B4, 22);
gen_pin_pairs!(SCU4B4, 0x4B4, 23);
gen_pin_pairs!(SCU4B4, 0x4B4, 24);
gen_pin_pairs!(SCU4B4, 0x4B4, 25);
gen_pin_pairs!(SCU4B4, 0x4B4, 26);
gen_pin_pairs!(SCU4B4, 0x4B4, 27);
gen_pin_pairs!(SCU4B4, 0x4B4, 28);
gen_pin_pairs!(SCU4B4, 0x4B4, 29);
gen_pin_pairs!(SCU4B4, 0x4B4, 30);
gen_pin_pairs!(SCU4B4, 0x4B4, 31);
gen_pin_pairs!(SCU4B8, 0x4B8, 0);
gen_pin_pairs!(SCU4B8, 0x4B8, 1);
gen_pin_pairs!(SCU4B8, 0x4B8, 2);
gen_pin_pairs!(SCU4B8, 0x4B8, 3);
gen_pin_pairs!(SCU4B8, 0x4B8, 4);
gen_pin_pairs!(SCU4B8, 0x4B8, 5);
gen_pin_pairs!(SCU4B8, 0x4B8, 6);
gen_pin_pairs!(SCU4B8, 0x4B8, 7);
gen_pin_pairs!(SCU4B8, 0x4B8, 8);
gen_pin_pairs!(SCU4B8, 0x4B8, 9);
gen_pin_pairs!(SCU4B8, 0x4B8, 10);
gen_pin_pairs!(SCU4B8, 0x4B8, 11);
gen_pin_pairs!(SCU4B8, 0x4B8, 12);
gen_pin_pairs!(SCU4B8, 0x4B8, 13);
gen_pin_pairs!(SCU4B8, 0x4B8, 14);
gen_pin_pairs!(SCU4B8, 0x4B8, 15);
gen_pin_pairs!(SCU4B8, 0x4B8, 16);
gen_pin_pairs!(SCU4B8, 0x4B8, 17);
gen_pin_pairs!(SCU4B8, 0x4B8, 18);
gen_pin_pairs!(SCU4B8, 0x4B8, 19);
gen_pin_pairs!(SCU4B8, 0x4B8, 20);
gen_pin_pairs!(SCU4B8, 0x4B8, 21);
gen_pin_pairs!(SCU4B8, 0x4B8, 22);
gen_pin_pairs!(SCU4B8, 0x4B8, 23);
gen_pin_pairs!(SCU4B8, 0x4B8, 24);
gen_pin_pairs!(SCU4B8, 0x4B8, 25);
gen_pin_pairs!(SCU4B8, 0x4B8, 26);
gen_pin_pairs!(SCU4B8, 0x4B8, 27);
gen_pin_pairs!(SCU4B8, 0x4B8, 28);
gen_pin_pairs!(SCU4B8, 0x4B8, 29);
gen_pin_pairs!(SCU4B8, 0x4B8, 30);
gen_pin_pairs!(SCU4B8, 0x4B8, 31);
gen_pin_pairs!(SCU4BC, 0x4BC, 0);
gen_pin_pairs!(SCU4BC, 0x4BC, 1);
gen_pin_pairs!(SCU4BC, 0x4BC, 2);
gen_pin_pairs!(SCU4BC, 0x4BC, 3);
gen_pin_pairs!(SCU4BC, 0x4BC, 4);
gen_pin_pairs!(SCU4BC, 0x4BC, 5);
gen_pin_pairs!(SCU4BC, 0x4BC, 6);
gen_pin_pairs!(SCU4BC, 0x4BC, 7);
gen_pin_pairs!(SCU4BC, 0x4BC, 8);
gen_pin_pairs!(SCU4BC, 0x4BC, 9);
gen_pin_pairs!(SCU4BC, 0x4BC, 10);
gen_pin_pairs!(SCU4BC, 0x4BC, 11);
gen_pin_pairs!(SCU4BC, 0x4BC, 12);
gen_pin_pairs!(SCU4BC, 0x4BC, 13);
gen_pin_pairs!(SCU4BC, 0x4BC, 14);
gen_pin_pairs!(SCU4BC, 0x4BC, 15);
gen_pin_pairs!(SCU4BC, 0x4BC, 16);
gen_pin_pairs!(SCU4BC, 0x4BC, 17);
gen_pin_pairs!(SCU4BC, 0x4BC, 18);
gen_pin_pairs!(SCU4BC, 0x4BC, 19);
gen_pin_pairs!(SCU4BC, 0x4BC, 20);
gen_pin_pairs!(SCU4BC, 0x4BC, 21);
gen_pin_pairs!(SCU4BC, 0x4BC, 22);
gen_pin_pairs!(SCU4BC, 0x4BC, 23);
gen_pin_pairs!(SCU4BC, 0x4BC, 24);
gen_pin_pairs!(SCU4BC, 0x4BC, 25);
gen_pin_pairs!(SCU4BC, 0x4BC, 26);
gen_pin_pairs!(SCU4BC, 0x4BC, 27);
gen_pin_pairs!(SCU4BC, 0x4BC, 28);
gen_pin_pairs!(SCU4BC, 0x4BC, 29);
gen_pin_pairs!(SCU4BC, 0x4BC, 30);
gen_pin_pairs!(SCU4BC, 0x4BC, 31);
gen_pin_pairs!(SCU690, 0x690, 0);
gen_pin_pairs!(SCU690, 0x690, 1);
gen_pin_pairs!(SCU690, 0x690, 2);
gen_pin_pairs!(SCU690, 0x690, 3);
gen_pin_pairs!(SCU690, 0x690, 4);
gen_pin_pairs!(SCU690, 0x690, 5);
gen_pin_pairs!(SCU690, 0x690, 6);
gen_pin_pairs!(SCU690, 0x690, 7);
gen_pin_pairs!(SCU690, 0x690, 8);
gen_pin_pairs!(SCU690, 0x690, 9);
gen_pin_pairs!(SCU690, 0x690, 10);
gen_pin_pairs!(SCU690, 0x690, 11);
gen_pin_pairs!(SCU690, 0x690, 12);
gen_pin_pairs!(SCU690, 0x690, 13);
gen_pin_pairs!(SCU690, 0x690, 14);
gen_pin_pairs!(SCU690, 0x690, 15);
gen_pin_pairs!(SCU690, 0x690, 16);
gen_pin_pairs!(SCU690, 0x690, 17);
gen_pin_pairs!(SCU690, 0x690, 18);
gen_pin_pairs!(SCU690, 0x690, 19);
gen_pin_pairs!(SCU690, 0x690, 20);
gen_pin_pairs!(SCU690, 0x690, 21);
gen_pin_pairs!(SCU690, 0x690, 22);
gen_pin_pairs!(SCU690, 0x690, 23);
gen_pin_pairs!(SCU690, 0x690, 24);
gen_pin_pairs!(SCU690, 0x690, 25);
gen_pin_pairs!(SCU690, 0x690, 26);
gen_pin_pairs!(SCU690, 0x690, 27);
gen_pin_pairs!(SCU690, 0x690, 28);
gen_pin_pairs!(SCU690, 0x690, 29);
gen_pin_pairs!(SCU690, 0x690, 30);
gen_pin_pairs!(SCU690, 0x690, 31);
gen_pin_pairs!(SCU694, 0x694, 0);
gen_pin_pairs!(SCU694, 0x694, 1);
gen_pin_pairs!(SCU694, 0x694, 2);
gen_pin_pairs!(SCU694, 0x694, 3);
gen_pin_pairs!(SCU694, 0x694, 4);
gen_pin_pairs!(SCU694, 0x694, 5);
gen_pin_pairs!(SCU694, 0x694, 6);
gen_pin_pairs!(SCU694, 0x694, 7);
gen_pin_pairs!(SCU694, 0x694, 8);
gen_pin_pairs!(SCU694, 0x694, 9);
gen_pin_pairs!(SCU694, 0x694, 10);
gen_pin_pairs!(SCU694, 0x694, 11);
gen_pin_pairs!(SCU694, 0x694, 12);
gen_pin_pairs!(SCU694, 0x694, 13);
gen_pin_pairs!(SCU694, 0x694, 14);
gen_pin_pairs!(SCU694, 0x694, 15);
gen_pin_pairs!(SCU694, 0x694, 16);
gen_pin_pairs!(SCU694, 0x694, 17);
gen_pin_pairs!(SCU694, 0x694, 18);
gen_pin_pairs!(SCU694, 0x694, 19);
gen_pin_pairs!(SCU694, 0x694, 20);
gen_pin_pairs!(SCU694, 0x694, 21);
gen_pin_pairs!(SCU694, 0x694, 22);
gen_pin_pairs!(SCU694, 0x694, 23);
gen_pin_pairs!(SCU694, 0x694, 24);
gen_pin_pairs!(SCU694, 0x694, 25);
gen_pin_pairs!(SCU694, 0x694, 26);
gen_pin_pairs!(SCU694, 0x694, 27);
gen_pin_pairs!(SCU694, 0x694, 28);
gen_pin_pairs!(SCU694, 0x694, 29);
gen_pin_pairs!(SCU694, 0x694, 30);
gen_pin_pairs!(SCU694, 0x694, 31);
gen_pin_pairs!(SCU698, 0x698, 0);
gen_pin_pairs!(SCU698, 0x698, 1);
gen_pin_pairs!(SCU698, 0x698, 2);
gen_pin_pairs!(SCU698, 0x698, 3);
gen_pin_pairs!(SCU698, 0x698, 4);
gen_pin_pairs!(SCU698, 0x698, 5);
gen_pin_pairs!(SCU698, 0x698, 6);
gen_pin_pairs!(SCU698, 0x698, 7);
gen_pin_pairs!(SCU698, 0x698, 8);
gen_pin_pairs!(SCU698, 0x698, 9);
gen_pin_pairs!(SCU698, 0x698, 10);
gen_pin_pairs!(SCU698, 0x698, 11);
gen_pin_pairs!(SCU698, 0x698, 12);
gen_pin_pairs!(SCU698, 0x698, 13);
gen_pin_pairs!(SCU698, 0x698, 14);
gen_pin_pairs!(SCU698, 0x698, 15);
gen_pin_pairs!(SCU698, 0x698, 16);
gen_pin_pairs!(SCU698, 0x698, 17);
gen_pin_pairs!(SCU698, 0x698, 18);
gen_pin_pairs!(SCU698, 0x698, 19);
gen_pin_pairs!(SCU698, 0x698, 20);
gen_pin_pairs!(SCU698, 0x698, 21);
gen_pin_pairs!(SCU698, 0x698, 22);
gen_pin_pairs!(SCU698, 0x698, 23);
gen_pin_pairs!(SCU698, 0x698, 24);
gen_pin_pairs!(SCU698, 0x698, 25);
gen_pin_pairs!(SCU698, 0x698, 26);
gen_pin_pairs!(SCU698, 0x698, 27);
gen_pin_pairs!(SCU698, 0x698, 28);
gen_pin_pairs!(SCU698, 0x698, 29);
gen_pin_pairs!(SCU698, 0x698, 30);
gen_pin_pairs!(SCU698, 0x698, 31);
gen_pin_pairs!(SCU69C, 0x69C, 0);
gen_pin_pairs!(SCU69C, 0x69C, 1);
gen_pin_pairs!(SCU69C, 0x69C, 2);
gen_pin_pairs!(SCU69C, 0x69C, 3);
gen_pin_pairs!(SCU69C, 0x69C, 4);
gen_pin_pairs!(SCU69C, 0x69C, 5);
gen_pin_pairs!(SCU69C, 0x69C, 6);
gen_pin_pairs!(SCU69C, 0x69C, 7);
gen_pin_pairs!(SCU69C, 0x69C, 8);
gen_pin_pairs!(SCU69C, 0x69C, 9);
gen_pin_pairs!(SCU69C, 0x69C, 10);
gen_pin_pairs!(SCU69C, 0x69C, 11);
gen_pin_pairs!(SCU69C, 0x69C, 12);
gen_pin_pairs!(SCU69C, 0x69C, 13);
gen_pin_pairs!(SCU69C, 0x69C, 14);
gen_pin_pairs!(SCU69C, 0x69C, 15);
gen_pin_pairs!(SCU69C, 0x69C, 16);
gen_pin_pairs!(SCU69C, 0x69C, 17);
gen_pin_pairs!(SCU69C, 0x69C, 18);
gen_pin_pairs!(SCU69C, 0x69C, 19);
gen_pin_pairs!(SCU69C, 0x69C, 20);
gen_pin_pairs!(SCU69C, 0x69C, 21);
gen_pin_pairs!(SCU69C, 0x69C, 22);
gen_pin_pairs!(SCU69C, 0x69C, 23);
gen_pin_pairs!(SCU69C, 0x69C, 24);
gen_pin_pairs!(SCU69C, 0x69C, 25);
gen_pin_pairs!(SCU69C, 0x69C, 26);
gen_pin_pairs!(SCU69C, 0x69C, 27);
gen_pin_pairs!(SCU69C, 0x69C, 28);
gen_pin_pairs!(SCU69C, 0x69C, 29);
gen_pin_pairs!(SCU69C, 0x69C, 30);
gen_pin_pairs!(SCU69C, 0x69C, 31);
gen_pin_pairs!(SCU6B0, 0x6B0, 0);
gen_pin_pairs!(SCU6B0, 0x6B0, 1);
gen_pin_pairs!(SCU6B0, 0x6B0, 2);
gen_pin_pairs!(SCU6B0, 0x6B0, 3);
gen_pin_pairs!(SCU6B0, 0x6B0, 4);
gen_pin_pairs!(SCU6B0, 0x6B0, 5);
gen_pin_pairs!(SCU6B0, 0x6B0, 6);
gen_pin_pairs!(SCU6B0, 0x6B0, 7);
gen_pin_pairs!(SCU6B0, 0x6B0, 8);
gen_pin_pairs!(SCU6B0, 0x6B0, 9);
gen_pin_pairs!(SCU6B0, 0x6B0, 10);
gen_pin_pairs!(SCU6B0, 0x6B0, 11);
gen_pin_pairs!(SCU6B0, 0x6B0, 12);
gen_pin_pairs!(SCU6B0, 0x6B0, 13);
gen_pin_pairs!(SCU6B0, 0x6B0, 14);
gen_pin_pairs!(SCU6B0, 0x6B0, 15);
gen_pin_pairs!(SCU6B0, 0x6B0, 16);
gen_pin_pairs!(SCU6B0, 0x6B0, 17);
gen_pin_pairs!(SCU6B0, 0x6B0, 18);
gen_pin_pairs!(SCU6B0, 0x6B0, 19);
gen_pin_pairs!(SCU6B0, 0x6B0, 20);
gen_pin_pairs!(SCU6B0, 0x6B0, 21);
gen_pin_pairs!(SCU6B0, 0x6B0, 22);
gen_pin_pairs!(SCU6B0, 0x6B0, 23);
gen_pin_pairs!(SCU6B0, 0x6B0, 24);
gen_pin_pairs!(SCU6B0, 0x6B0, 25);
gen_pin_pairs!(SCU6B0, 0x6B0, 26);
gen_pin_pairs!(SCU6B0, 0x6B0, 27);
gen_pin_pairs!(SCU6B0, 0x6B0, 28);
gen_pin_pairs!(SCU6B0, 0x6B0, 29);
gen_pin_pairs!(SCU6B0, 0x6B0, 30);
gen_pin_pairs!(SCU6B0, 0x6B0, 31);
}
/// I2C1 pin group: SCL2/SDA2 mux selection on SCU414[30:31].
///
/// The SVD names these EnblSCL2FnPin/EnblSDA2FnPin, but they correspond to
/// PAC peripheral I2c1 (controller 1, base 0x7e7b_0100). The SVD uses
/// 1-based naming where "2" means "second bus", matching PAC I2c1.
pub const PINCTRL_I2C1: &[PinctrlPin] = &[PIN_SCU414_30, PIN_SCU414_31];
/// I2C2 pin group: SCL3/SDA3 mux selection on SCU418[0:1].
///
/// The SVD names these EnblSCL3FnPin/EnblSDA3FnPin, corresponding to
/// PAC peripheral I2c2 (controller 2, base 0x7e7b_0180). On the Test
/// Harness board, these pins are exposed on J15 and used for inter-device
/// I2C communication between the two AST1060 daughter cards.
pub const PINCTRL_I2C2: &[PinctrlPin] = &[PIN_SCU418_0, PIN_SCU418_1];
/// GPIOA pin groups: GPIO mux selection.
pub const PINCTRL_GPIOA0: &[PinctrlPin] = &[CLR_PIN_SCU410_0, CLR_PIN_SCU4B0_0, CLR_PIN_SCU690_0];
pub const PINCTRL_GPIOA1: &[PinctrlPin] = &[CLR_PIN_SCU410_1, CLR_PIN_SCU4B0_1, CLR_PIN_SCU690_1];
pub const PINCTRL_GPIOA2: &[PinctrlPin] = &[CLR_PIN_SCU410_2, CLR_PIN_SCU4B0_2, CLR_PIN_SCU690_2];
pub const PINCTRL_GPIOA3: &[PinctrlPin] = &[CLR_PIN_SCU410_3, CLR_PIN_SCU4B0_3, CLR_PIN_SCU690_3];
pub const PINCTRL_GPIOA4: &[PinctrlPin] = &[CLR_PIN_SCU410_4, CLR_PIN_SCU4B0_4, CLR_PIN_SCU690_4];
pub const PINCTRL_GPIOA5: &[PinctrlPin] = &[CLR_PIN_SCU410_5, CLR_PIN_SCU4B0_5, CLR_PIN_SCU690_5];
pub const PINCTRL_GPIOA6: &[PinctrlPin] = &[CLR_PIN_SCU410_6, CLR_PIN_SCU4B0_6, CLR_PIN_SCU690_6];
pub const PINCTRL_GPIOA7: &[PinctrlPin] = &[CLR_PIN_SCU410_7, CLR_PIN_SCU4B0_7, CLR_PIN_SCU690_7];
/// GPIOB pin groups: GPIO mux selection.
pub const PINCTRL_GPIOB0: &[PinctrlPin] = &[CLR_PIN_SCU410_8, CLR_PIN_SCU4B0_8, CLR_PIN_SCU690_8];
pub const PINCTRL_GPIOB1: &[PinctrlPin] = &[CLR_PIN_SCU410_9, CLR_PIN_SCU4B0_9, CLR_PIN_SCU690_9];
pub const PINCTRL_GPIOB2: &[PinctrlPin] =
&[CLR_PIN_SCU410_10, CLR_PIN_SCU4B0_10, CLR_PIN_SCU690_10];
pub const PINCTRL_GPIOB3: &[PinctrlPin] =
&[CLR_PIN_SCU410_11, CLR_PIN_SCU4B0_11, CLR_PIN_SCU690_11];
pub const PINCTRL_GPIOB4: &[PinctrlPin] =
&[CLR_PIN_SCU410_12, CLR_PIN_SCU4B0_12, CLR_PIN_SCU690_12];
pub const PINCTRL_GPIOB5: &[PinctrlPin] =
&[CLR_PIN_SCU410_13, CLR_PIN_SCU4B0_13, CLR_PIN_SCU690_13];
pub const PINCTRL_GPIOB6: &[PinctrlPin] =
&[CLR_PIN_SCU410_14, CLR_PIN_SCU4B0_14, CLR_PIN_SCU690_14];
pub const PINCTRL_GPIOB7: &[PinctrlPin] =
&[CLR_PIN_SCU410_15, CLR_PIN_SCU4B0_15, CLR_PIN_SCU690_15];
/// GPIOC pin groups: GPIO mux selection.
pub const PINCTRL_GPIOC0: &[PinctrlPin] =
&[CLR_PIN_SCU410_16, CLR_PIN_SCU4B0_16, CLR_PIN_SCU690_16];
pub const PINCTRL_GPIOC1: &[PinctrlPin] =
&[CLR_PIN_SCU410_17, CLR_PIN_SCU4B0_17, CLR_PIN_SCU690_17];
pub const PINCTRL_GPIOC2: &[PinctrlPin] =
&[CLR_PIN_SCU410_18, CLR_PIN_SCU4B0_18, CLR_PIN_SCU690_18];
pub const PINCTRL_GPIOC3: &[PinctrlPin] =
&[CLR_PIN_SCU410_19, CLR_PIN_SCU4B0_19, CLR_PIN_SCU690_19];
pub const PINCTRL_GPIOC4: &[PinctrlPin] =
&[CLR_PIN_SCU410_20, CLR_PIN_SCU4B0_20, CLR_PIN_SCU690_20];
pub const PINCTRL_GPIOC5: &[PinctrlPin] =
&[CLR_PIN_SCU410_21, CLR_PIN_SCU4B0_21, CLR_PIN_SCU690_21];
pub const PINCTRL_GPIOC6: &[PinctrlPin] =
&[CLR_PIN_SCU410_22, CLR_PIN_SCU4B0_22, CLR_PIN_SCU690_22];
pub const PINCTRL_GPIOC7: &[PinctrlPin] =
&[CLR_PIN_SCU410_23, CLR_PIN_SCU4B0_23, CLR_PIN_SCU690_23];
/// GPIOD pin groups: GPIO mux selection.
pub const PINCTRL_GPIOD0: &[PinctrlPin] =
&[CLR_PIN_SCU410_24, CLR_PIN_SCU4B0_24, CLR_PIN_SCU690_24];
pub const PINCTRL_GPIOD1: &[PinctrlPin] =
&[CLR_PIN_SCU410_25, CLR_PIN_SCU4B0_25, CLR_PIN_SCU690_25];
pub const PINCTRL_GPIOD2: &[PinctrlPin] =
&[CLR_PIN_SCU410_26, CLR_PIN_SCU4B0_26, CLR_PIN_SCU690_26];
pub const PINCTRL_GPIOD3: &[PinctrlPin] =
&[CLR_PIN_SCU410_27, CLR_PIN_SCU4B0_27, CLR_PIN_SCU690_27];
pub const PINCTRL_GPIOD4: &[PinctrlPin] =
&[CLR_PIN_SCU410_28, CLR_PIN_SCU4B0_28, CLR_PIN_SCU690_28];
pub const PINCTRL_GPIOD5: &[PinctrlPin] =
&[CLR_PIN_SCU410_29, CLR_PIN_SCU4B0_29, CLR_PIN_SCU690_29];
pub const PINCTRL_GPIOD6: &[PinctrlPin] =
&[CLR_PIN_SCU410_30, CLR_PIN_SCU4B0_30, CLR_PIN_SCU690_30];
pub const PINCTRL_GPIOD7: &[PinctrlPin] =
&[CLR_PIN_SCU410_31, CLR_PIN_SCU4B0_31, CLR_PIN_SCU690_31];
/// GPIOE pin groups: GPIO mux selection.
pub const PINCTRL_GPIOE0: &[PinctrlPin] = &[CLR_PIN_SCU414_0, CLR_PIN_SCU4B4_0, CLR_PIN_SCU694_0];
pub const PINCTRL_GPIOE1: &[PinctrlPin] = &[CLR_PIN_SCU414_1, CLR_PIN_SCU4B4_1, CLR_PIN_SCU694_1];
pub const PINCTRL_GPIOE2: &[PinctrlPin] = &[CLR_PIN_SCU414_2, CLR_PIN_SCU4B4_2, CLR_PIN_SCU694_2];
pub const PINCTRL_GPIOE3: &[PinctrlPin] = &[CLR_PIN_SCU414_3, CLR_PIN_SCU4B4_3, CLR_PIN_SCU694_3];
pub const PINCTRL_GPIOE4: &[PinctrlPin] = &[CLR_PIN_SCU414_4, CLR_PIN_SCU4B4_4, CLR_PIN_SCU694_4];
pub const PINCTRL_GPIOE5: &[PinctrlPin] = &[CLR_PIN_SCU414_5, CLR_PIN_SCU4B4_5, CLR_PIN_SCU694_5];
pub const PINCTRL_GPIOE6: &[PinctrlPin] = &[CLR_PIN_SCU414_6, CLR_PIN_SCU4B4_6, CLR_PIN_SCU694_6];
pub const PINCTRL_GPIOE7: &[PinctrlPin] = &[CLR_PIN_SCU414_7, CLR_PIN_SCU4B4_7, CLR_PIN_SCU694_7];
/// GPIOF pin groups: GPIO mux selection.
pub const PINCTRL_GPIOF0: &[PinctrlPin] = &[CLR_PIN_SCU414_8, CLR_PIN_SCU4B4_8, CLR_PIN_SCU694_8];
pub const PINCTRL_GPIOF1: &[PinctrlPin] = &[CLR_PIN_SCU414_9, CLR_PIN_SCU4B4_9, CLR_PIN_SCU694_9];
pub const PINCTRL_GPIOF2: &[PinctrlPin] =
&[CLR_PIN_SCU414_10, CLR_PIN_SCU4B4_10, CLR_PIN_SCU694_10];
pub const PINCTRL_GPIOF3: &[PinctrlPin] =
&[CLR_PIN_SCU414_11, CLR_PIN_SCU4B4_11, CLR_PIN_SCU694_11];
pub const PINCTRL_GPIOF4: &[PinctrlPin] =
&[CLR_PIN_SCU414_12, CLR_PIN_SCU4B4_12, CLR_PIN_SCU694_12];
pub const PINCTRL_GPIOF5: &[PinctrlPin] =
&[CLR_PIN_SCU414_13, CLR_PIN_SCU4B4_13, CLR_PIN_SCU694_13];
pub const PINCTRL_GPIOF6: &[PinctrlPin] =
&[CLR_PIN_SCU414_14, CLR_PIN_SCU4B4_14, CLR_PIN_SCU694_14];
pub const PINCTRL_GPIOF7: &[PinctrlPin] =
&[CLR_PIN_SCU414_15, CLR_PIN_SCU4B4_15, CLR_PIN_SCU694_15];
/// GPIOG pin groups: GPIO mux selection.
pub const PINCTRL_GPIOG0: &[PinctrlPin] =
&[CLR_PIN_SCU414_16, CLR_PIN_SCU4B4_16, CLR_PIN_SCU694_16];
pub const PINCTRL_GPIOG1: &[PinctrlPin] =
&[CLR_PIN_SCU414_17, CLR_PIN_SCU4B4_17, CLR_PIN_SCU694_17];
pub const PINCTRL_GPIOG2: &[PinctrlPin] =
&[CLR_PIN_SCU414_18, CLR_PIN_SCU4B4_18, CLR_PIN_SCU694_18];
pub const PINCTRL_GPIOG3: &[PinctrlPin] =
&[CLR_PIN_SCU414_19, CLR_PIN_SCU4B4_19, CLR_PIN_SCU694_19];
pub const PINCTRL_GPIOG4: &[PinctrlPin] =
&[CLR_PIN_SCU414_20, CLR_PIN_SCU4B4_20, CLR_PIN_SCU694_20];
pub const PINCTRL_GPIOG5: &[PinctrlPin] =
&[CLR_PIN_SCU414_21, CLR_PIN_SCU4B4_21, CLR_PIN_SCU694_21];
pub const PINCTRL_GPIOG6: &[PinctrlPin] =
&[CLR_PIN_SCU414_22, CLR_PIN_SCU4B4_22, CLR_PIN_SCU694_22];
pub const PINCTRL_GPIOG7: &[PinctrlPin] =
&[CLR_PIN_SCU414_23, CLR_PIN_SCU4B4_23, CLR_PIN_SCU694_23];
/// GPIOH pin groups: GPIO mux selection.
pub const PINCTRL_GPIOH0: &[PinctrlPin] =
&[CLR_PIN_SCU414_24, CLR_PIN_SCU4B4_24, CLR_PIN_SCU694_24];
pub const PINCTRL_GPIOH1: &[PinctrlPin] =
&[CLR_PIN_SCU414_25, CLR_PIN_SCU4B4_25, CLR_PIN_SCU694_25];
pub const PINCTRL_GPIOH2: &[PinctrlPin] =
&[CLR_PIN_SCU414_26, CLR_PIN_SCU4B4_26, CLR_PIN_SCU694_26];
pub const PINCTRL_GPIOH3: &[PinctrlPin] =
&[CLR_PIN_SCU414_27, CLR_PIN_SCU4B4_27, CLR_PIN_SCU694_27];
pub const PINCTRL_GPIOH4: &[PinctrlPin] =
&[CLR_PIN_SCU414_28, CLR_PIN_SCU4B4_28, CLR_PIN_SCU694_28];
pub const PINCTRL_GPIOH5: &[PinctrlPin] =
&[CLR_PIN_SCU414_29, CLR_PIN_SCU4B4_29, CLR_PIN_SCU694_29];
pub const PINCTRL_GPIOH6: &[PinctrlPin] = &[CLR_PIN_SCU414_30];
pub const PINCTRL_GPIOH7: &[PinctrlPin] = &[CLR_PIN_SCU414_31];
/// GPIOI pin groups: GPIO mux selection.
pub const PINCTRL_GPIOI0: &[PinctrlPin] = &[CLR_PIN_SCU418_0];
pub const PINCTRL_GPIOI1: &[PinctrlPin] = &[CLR_PIN_SCU418_1];
pub const PINCTRL_GPIOI2: &[PinctrlPin] = &[CLR_PIN_SCU418_2];
pub const PINCTRL_GPIOI3: &[PinctrlPin] = &[CLR_PIN_SCU418_3];
pub const PINCTRL_GPIOI4: &[PinctrlPin] = &[CLR_PIN_SCU418_4];
pub const PINCTRL_GPIOI5: &[PinctrlPin] = &[CLR_PIN_SCU418_5];
pub const PINCTRL_GPIOI6: &[PinctrlPin] = &[CLR_PIN_SCU418_6];
pub const PINCTRL_GPIOI7: &[PinctrlPin] = &[CLR_PIN_SCU418_7];
/// GPIOJ pin groups: GPIO mux selection.
pub const PINCTRL_GPIOJ0: &[PinctrlPin] = &[CLR_PIN_SCU418_8, CLR_PIN_SCU4B8_8];
pub const PINCTRL_GPIOJ1: &[PinctrlPin] = &[CLR_PIN_SCU418_9, CLR_PIN_SCU4B8_9];
pub const PINCTRL_GPIOJ2: &[PinctrlPin] = &[CLR_PIN_SCU418_10, CLR_PIN_SCU4B8_10];
pub const PINCTRL_GPIOJ3: &[PinctrlPin] = &[CLR_PIN_SCU418_11, CLR_PIN_SCU4B8_11];
pub const PINCTRL_GPIOJ4: &[PinctrlPin] = &[CLR_PIN_SCU418_12, CLR_PIN_SCU4B8_12];
pub const PINCTRL_GPIOJ5: &[PinctrlPin] = &[CLR_PIN_SCU418_13, CLR_PIN_SCU4B8_13];
pub const PINCTRL_GPIOJ6: &[PinctrlPin] = &[CLR_PIN_SCU418_14, CLR_PIN_SCU4B8_14];
pub const PINCTRL_GPIOJ7: &[PinctrlPin] = &[CLR_PIN_SCU418_15, CLR_PIN_SCU4B8_15];
/// GPIOK pin groups: GPIO mux selection.
pub const PINCTRL_GPIOK0: &[PinctrlPin] = &[CLR_PIN_SCU418_16, CLR_PIN_SCU4B8_16];
pub const PINCTRL_GPIOK1: &[PinctrlPin] = &[CLR_PIN_SCU418_17, CLR_PIN_SCU4B8_17];
pub const PINCTRL_GPIOK2: &[PinctrlPin] = &[CLR_PIN_SCU418_18, CLR_PIN_SCU4B8_18];
pub const PINCTRL_GPIOK3: &[PinctrlPin] = &[CLR_PIN_SCU418_19, CLR_PIN_SCU4B8_19];
pub const PINCTRL_GPIOK4: &[PinctrlPin] = &[CLR_PIN_SCU418_20, CLR_PIN_SCU4B8_20];
pub const PINCTRL_GPIOK5: &[PinctrlPin] = &[CLR_PIN_SCU418_21, CLR_PIN_SCU4B8_21];
pub const PINCTRL_GPIOK6: &[PinctrlPin] = &[CLR_PIN_SCU418_22, CLR_PIN_SCU4B8_22];
pub const PINCTRL_GPIOK7: &[PinctrlPin] = &[CLR_PIN_SCU418_23, CLR_PIN_SCU4B8_23];
/// GPIOL pin groups: GPIO mux selection.
pub const PINCTRL_GPIOL0: &[PinctrlPin] = &[CLR_PIN_SCU418_24];
pub const PINCTRL_GPIOL1: &[PinctrlPin] = &[CLR_PIN_SCU418_25];
pub const PINCTRL_GPIOL2: &[PinctrlPin] = &[CLR_PIN_SCU418_26];
pub const PINCTRL_GPIOL3: &[PinctrlPin] = &[CLR_PIN_SCU418_27];
pub const PINCTRL_GPIOL4: &[PinctrlPin] =
&[CLR_PIN_SCU418_28, CLR_PIN_SCU4B8_28, CLR_PIN_SCU698_28];
pub const PINCTRL_GPIOL5: &[PinctrlPin] =
&[CLR_PIN_SCU418_29, CLR_PIN_SCU4B8_29, CLR_PIN_SCU698_29];
pub const PINCTRL_GPIOL6: &[PinctrlPin] =
&[CLR_PIN_SCU418_30, CLR_PIN_SCU4B8_30, CLR_PIN_SCU698_30];
pub const PINCTRL_GPIOL7: &[PinctrlPin] =
&[CLR_PIN_SCU418_31, CLR_PIN_SCU4B8_31, CLR_PIN_SCU698_31];
/// GPIOM pin groups: GPIO mux selection.
pub const PINCTRL_GPIOM0: &[PinctrlPin] = &[CLR_PIN_SCU41C_0];
pub const PINCTRL_GPIOM1: &[PinctrlPin] = &[CLR_PIN_SCU41C_1];
pub const PINCTRL_GPIOM2: &[PinctrlPin] = &[CLR_PIN_SCU41C_2];
pub const PINCTRL_GPIOM3: &[PinctrlPin] = &[CLR_PIN_SCU41C_3];
pub const PINCTRL_GPIOM4: &[PinctrlPin] = &[CLR_PIN_SCU41C_4];
pub const PINCTRL_GPIOM5: &[PinctrlPin] = &[CLR_PIN_SCU41C_5];
/// GPION pin groups: GPIO mux selection.
pub const PINCTRL_GPION0: &[PinctrlPin] = &[CLR_PIN_SCU41C_8];
pub const PINCTRL_GPION1: &[PinctrlPin] = &[CLR_PIN_SCU41C_9, CLR_PIN_SCU4BC_9, CLR_PIN_SCU69C_9];
pub const PINCTRL_GPION2: &[PinctrlPin] = &[CLR_PIN_SCU41C_10];
pub const PINCTRL_GPION3: &[PinctrlPin] =
&[CLR_PIN_SCU41C_11, CLR_PIN_SCU4BC_11, CLR_PIN_SCU69C_11];
pub const PINCTRL_GPION4: &[PinctrlPin] = &[CLR_PIN_SCU41C_12, CLR_PIN_SCU4BC_12];
pub const PINCTRL_GPION5: &[PinctrlPin] = &[CLR_PIN_SCU41C_13, CLR_PIN_SCU4BC_13];
pub const PINCTRL_GPION6: &[PinctrlPin] = &[CLR_PIN_SCU41C_14, CLR_PIN_SCU4BC_14];
pub const PINCTRL_GPION7: &[PinctrlPin] = &[CLR_PIN_SCU41C_15, CLR_PIN_SCU4BC_15];
/// GPIOO pin groups: GPIO mux selection.
pub const PINCTRL_GPIOO0: &[PinctrlPin] = &[CLR_PIN_SCU41C_16, CLR_PIN_SCU4BC_16];
pub const PINCTRL_GPIOO1: &[PinctrlPin] = &[CLR_PIN_SCU41C_17, CLR_PIN_SCU4BC_17];
pub const PINCTRL_GPIOO2: &[PinctrlPin] = &[CLR_PIN_SCU41C_18, CLR_PIN_SCU4BC_18];
pub const PINCTRL_GPIOO3: &[PinctrlPin] = &[CLR_PIN_SCU41C_19, CLR_PIN_SCU4BC_19];
pub const PINCTRL_GPIOO4: &[PinctrlPin] =
&[CLR_PIN_SCU41C_20, CLR_PIN_SCU4BC_20, CLR_PIN_SCU69C_20];
pub const PINCTRL_GPIOO5: &[PinctrlPin] =
&[CLR_PIN_SCU41C_21, CLR_PIN_SCU4BC_21, CLR_PIN_SCU69C_21];
pub const PINCTRL_GPIOO6: &[PinctrlPin] =
&[CLR_PIN_SCU41C_22, CLR_PIN_SCU4BC_22, CLR_PIN_SCU69C_22];
pub const PINCTRL_GPIOO7: &[PinctrlPin] =
&[CLR_PIN_SCU41C_23, CLR_PIN_SCU4BC_23, CLR_PIN_SCU69C_23];
/// GPIOP pin groups: GPIO mux selection.
pub const PINCTRL_GPIOP0: &[PinctrlPin] =
&[CLR_PIN_SCU41C_24, CLR_PIN_SCU4BC_24, CLR_PIN_SCU69C_24];
pub const PINCTRL_GPIOP1: &[PinctrlPin] = &[CLR_PIN_SCU41C_25, CLR_PIN_SCU4BC_25];
pub const PINCTRL_GPIOP2: &[PinctrlPin] = &[CLR_PIN_SCU41C_26, CLR_PIN_SCU4BC_26];
pub const PINCTRL_GPIOP3: &[PinctrlPin] = &[CLR_PIN_SCU41C_27, CLR_PIN_SCU4BC_27];
pub const PINCTRL_GPIOP4: &[PinctrlPin] = &[CLR_PIN_SCU41C_28, CLR_PIN_SCU4BC_28];
pub const PINCTRL_GPIOP5: &[PinctrlPin] = &[CLR_PIN_SCU41C_29, CLR_PIN_SCU4BC_29];
pub const PINCTRL_GPIOP6: &[PinctrlPin] =
&[CLR_PIN_SCU41C_30, CLR_PIN_SCU4BC_30, CLR_PIN_SCU69C_30];
pub const PINCTRL_GPIOP7: &[PinctrlPin] =
&[CLR_PIN_SCU41C_31, CLR_PIN_SCU4BC_31, CLR_PIN_SCU69C_31];
/// GPIOQ pin groups: GPIO mux selection.
pub const PINCTRL_GPIOQ0: &[PinctrlPin] = &[CLR_PIN_SCU430_0, CLR_PIN_SCU6B0_0];
pub const PINCTRL_GPIOQ1: &[PinctrlPin] = &[CLR_PIN_SCU430_1, CLR_PIN_SCU6B0_1];
pub const PINCTRL_GPIOQ2: &[PinctrlPin] = &[CLR_PIN_SCU430_2, CLR_PIN_SCU6B0_2];
pub const PINCTRL_GPIOQ3: &[PinctrlPin] = &[CLR_PIN_SCU430_3, CLR_PIN_SCU6B0_3];
pub const PINCTRL_GPIOQ4: &[PinctrlPin] = &[CLR_PIN_SCU430_4, CLR_PIN_SCU6B0_4];
/// GPIOR pin groups: GPIO mux selection.
pub const PINCTRL_GPIOR2: &[PinctrlPin] = &[CLR_PIN_SCU430_10];
pub const PINCTRL_GPIOR3: &[PinctrlPin] = &[CLR_PIN_SCU430_11];
/// GPIOS pin groups: GPIO mux selection.
pub const PINCTRL_GPIOS2: &[PinctrlPin] = &[CLR_PIN_SCU430_17];
pub const PINCTRL_GPIOS3: &[PinctrlPin] = &[CLR_PIN_SCU430_18];
/// GPIOT pin groups: GPIO mux selection.
pub const PINCTRL_GPIOT0: &[PinctrlPin] = &[PIN_SCU430_24];
pub const PINCTRL_GPIOT1: &[PinctrlPin] = &[PIN_SCU430_25];
pub const PINCTRL_GPIOT2: &[PinctrlPin] = &[PIN_SCU430_26];
pub const PINCTRL_GPIOT3: &[PinctrlPin] = &[PIN_SCU430_27];
pub const PINCTRL_GPIOT4: &[PinctrlPin] = &[PIN_SCU430_28];
pub const PINCTRL_GPIOT5: &[PinctrlPin] = &[PIN_SCU430_29];
pub const PINCTRL_GPIOT6: &[PinctrlPin] = &[PIN_SCU430_30];
pub const PINCTRL_GPIOT7: &[PinctrlPin] = &[PIN_SCU430_31];
/// GPIOU pin groups: GPIO mux selection.
pub const PINCTRL_GPIOU0: &[PinctrlPin] = &[PIN_SCU434_0];
pub const PINCTRL_GPIOU1: &[PinctrlPin] = &[PIN_SCU434_1];
pub const PINCTRL_GPIOU2: &[PinctrlPin] = &[PIN_SCU434_2];
pub const PINCTRL_GPIOU3: &[PinctrlPin] = &[PIN_SCU434_3];
pub const PINCTRL_GPIOU4: &[PinctrlPin] = &[PIN_SCU434_4];
pub const PINCTRL_GPIOU5: &[PinctrlPin] = &[PIN_SCU434_5];
pub const PINCTRL_GPIOU6: &[PinctrlPin] = &[PIN_SCU434_6];
pub const PINCTRL_GPIOU7: &[PinctrlPin] = &[PIN_SCU434_7];
/// FMC quad-SPI pin group: mux selection on SCU430[10:11].
pub const PINCTRL_FMC_QUAD: &[PinctrlPin] = &[PIN_SCU430_10, PIN_SCU430_11];
/// SPI1 quad.
pub const PINCTRL_SPI1_QUAD: &[PinctrlPin] = &[PIN_SCU430_17, PIN_SCU430_18];
/// SPI2 quad.
pub const PINCTRL_SPI2_QUAD: &[PinctrlPin] = &[
PIN_SCU41C_30,
PIN_SCU41C_31,
PIN_SCU430_0,
PIN_SCU430_1,
PIN_SCU430_2,
PIN_SCU430_3,
PIN_SCU430_4,
];
/// SPIM1
pub const PINCTRL_SPIM1_DEFAULT: &[PinctrlPin] = &[
// CSIN
CLR_PIN_SCU410_0,
CLR_PIN_SCU4B0_0,
PIN_SCU690_0,
// CLKIN
CLR_PIN_SCU410_1,
CLR_PIN_SCU4B0_1,
PIN_SCU690_1,
// MOSIIN
CLR_PIN_SCU410_2,
CLR_PIN_SCU4B0_2,
PIN_SCU690_2,
// MISOIN
CLR_PIN_SCU410_3,
CLR_PIN_SCU4B0_3,
PIN_SCU690_3,
// IO2IN
CLR_PIN_SCU410_4,
CLR_PIN_SCU4B0_4,
PIN_SCU690_4,
// IO3IN
CLR_PIN_SCU410_5,
CLR_PIN_SCU4B0_5,
PIN_SCU690_5,
// CSOUT
CLR_PIN_SCU410_6,
CLR_PIN_SCU4B0_6,
PIN_SCU690_6,
];
/// SPIM2
pub const PINCTRL_SPIM2_DEFAULT: &[PinctrlPin] = &[
// CSIN
CLR_PIN_SCU410_14,
CLR_PIN_SCU4B0_14,
PIN_SCU690_14,
// CLKIN
CLR_PIN_SCU410_15,
CLR_PIN_SCU4B0_15,
PIN_SCU690_15,
// MOSIIN
CLR_PIN_SCU410_16,
CLR_PIN_SCU4B0_16,
PIN_SCU690_16,
// MISOIN
CLR_PIN_SCU410_17,
CLR_PIN_SCU4B0_17,
PIN_SCU690_17,
// IO2IN
CLR_PIN_SCU410_18,
CLR_PIN_SCU4B0_18,
PIN_SCU690_18,
// IO3IN
CLR_PIN_SCU410_19,
CLR_PIN_SCU4B0_19,
PIN_SCU690_19,
// CSOUT
CLR_PIN_SCU410_20,
CLR_PIN_SCU4B0_20,
PIN_SCU690_20,
];
/// SPIM3
pub const PINCTRL_SPIM3_DEFAULT: &[PinctrlPin] = &[
// CSIN
CLR_PIN_SCU410_28,
CLR_PIN_SCU4B0_28,
PIN_SCU690_28,
// CLKIN
CLR_PIN_SCU410_29,
CLR_PIN_SCU4B0_29,
PIN_SCU690_29,
// MOSIIN
CLR_PIN_SCU410_30,
CLR_PIN_SCU4B0_30,
PIN_SCU690_30,
// MISOIN
CLR_PIN_SCU410_31,
CLR_PIN_SCU4B0_31,
PIN_SCU690_31,
// IO2IN
CLR_PIN_SCU414_0,
CLR_PIN_SCU4B4_0,
PIN_SCU694_0,
// IO3IN
CLR_PIN_SCU414_1,
CLR_PIN_SCU4B4_1,
PIN_SCU694_1,
// CSOUT
CLR_PIN_SCU414_2,
CLR_PIN_SCU4B4_2,
PIN_SCU694_2,
// CLKOUT
CLR_PIN_SCU414_3,
CLR_PIN_SCU4B4_3,
PIN_SCU694_3,
// MOSIOUT
CLR_PIN_SCU414_4,
CLR_PIN_SCU4B4_4,
PIN_SCU694_4,
// MISOOUT
CLR_PIN_SCU414_5,
CLR_PIN_SCU4B4_5,
PIN_SCU694_5,
// IO2OUT
CLR_PIN_SCU414_6,
CLR_PIN_SCU4B4_6,
PIN_SCU694_6,
// IO3OUT
CLR_PIN_SCU414_7,
CLR_PIN_SCU4B4_7,
PIN_SCU694_7,
];
/// SPIM4
pub const PINCTRL_SPIM4_DEFAULT: &[PinctrlPin] = &[
// CSIN
CLR_PIN_SCU414_10,
CLR_PIN_SCU4B4_10,
PIN_SCU694_10,
// CLKIN
CLR_PIN_SCU414_11,
CLR_PIN_SCU4B4_11,
PIN_SCU694_11,
// MOSIIN
CLR_PIN_SCU414_12,
CLR_PIN_SCU4B4_12,
PIN_SCU694_12,
// MISOIN
CLR_PIN_SCU414_13,
CLR_PIN_SCU4B4_13,
PIN_SCU694_13,
// IO2IN
CLR_PIN_SCU414_14,
CLR_PIN_SCU4B4_14,
PIN_SCU694_14,
// IO3IN
CLR_PIN_SCU414_15,
CLR_PIN_SCU4B4_15,
PIN_SCU694_15,
// CSOUT
CLR_PIN_SCU414_16,
CLR_PIN_SCU4B4_16,
PIN_SCU694_16,
// CLKOUT
CLR_PIN_SCU414_17,
CLR_PIN_SCU4B4_17,
PIN_SCU694_17,
// MOSIOUT
CLR_PIN_SCU414_18,
CLR_PIN_SCU4B4_18,
PIN_SCU694_18,
// MISOOUT
CLR_PIN_SCU414_19,
CLR_PIN_SCU4B4_19,
PIN_SCU694_19,
// IO2OUT
CLR_PIN_SCU414_20,
CLR_PIN_SCU4B4_20,
PIN_SCU694_20,
// IO3OUT
CLR_PIN_SCU414_21,
CLR_PIN_SCU4B4_21,
PIN_SCU694_21,
];
// =============================================================================
// I3C pin groups
// =============================================================================
//
// The AST1060 routes each I3C bus to either a Low-Voltage (LV) pad set,
// enabled in SCU418, or a High-Voltage (HV) pad set, enabled in SCU4B8
// (SVD fields `EnblI3CSCLn/SDAn{LV,HV}FnPin`). Setting the bit selects the
// I3C function on that pad.
//
// Naming follows the PAC instance / `BUS_NUM`, 0-based: `PINCTRL_I3C0` is PAC
// `I3c` (bus 0), `_I3C1` is PAC `I3c1` (bus 1), etc. — matching the aspeed-rust
// reference's `PINCTRL_HVI3Cn` groups (e.g. `PINCTRL_HVI3C2` == bus 2 == PAC
// `I3c2`). NOTE the SVD names the pads 1-based (SDA1..SDA4); bus `n` uses the
// SVD's `SDA(n+1)`/`SCL(n+1)` pads.
//
// The HV groups additionally **clear** the conflicting LV function bits on the
// same pads (`CLR_PIN_SCU418_*`), exactly as the reference does — enabling the
// HV pad alone without first releasing the LV pad would leave both functions
// muxed onto it. LV groups need no such clear (HV defaults off).
/// I3C bus 0 (PAC `I3c`) — LV pads: SCL/SDA on SCU418[16:17].
pub const PINCTRL_I3C0: &[PinctrlPin] = &[PIN_SCU418_16, PIN_SCU418_17];
/// I3C bus 1 (PAC `I3c1`) — LV pads: SCL/SDA on SCU418[18:19].
pub const PINCTRL_I3C1: &[PinctrlPin] = &[PIN_SCU418_18, PIN_SCU418_19];
/// I3C bus 2 (PAC `I3c2`) — LV pads: SCL/SDA on SCU418[20:21].
pub const PINCTRL_I3C2: &[PinctrlPin] = &[PIN_SCU418_20, PIN_SCU418_21];
/// I3C bus 3 (PAC `I3c3`) — LV pads: SCL/SDA on SCU418[22:23].
pub const PINCTRL_I3C3: &[PinctrlPin] = &[PIN_SCU418_22, PIN_SCU418_23];
/// I3C bus 0 (PAC `I3c`) — HV pads: SCU4B8[8:9], clearing LV SCU418[8:9],[16:17].
pub const PINCTRL_HVI3C0: &[PinctrlPin] = &[
CLR_PIN_SCU418_8,
CLR_PIN_SCU418_9,
CLR_PIN_SCU418_16,
CLR_PIN_SCU418_17,
PIN_SCU4B8_8,
PIN_SCU4B8_9,
];
/// I3C bus 1 (PAC `I3c1`) — HV pads: SCU4B8[10:11], clearing LV SCU418[10:11],[18:19].
pub const PINCTRL_HVI3C1: &[PinctrlPin] = &[
CLR_PIN_SCU418_10,
CLR_PIN_SCU418_11,
CLR_PIN_SCU418_18,
CLR_PIN_SCU418_19,
PIN_SCU4B8_10,
PIN_SCU4B8_11,
];
/// I3C bus 2 (PAC `I3c2`) — HV pads: SCU4B8[12:13], clearing LV SCU418[12:13],[20:21].
/// This is the bus/pad set the AST1060 Test Harness wires for I3C, and the one
/// the aspeed-rust EVB tests (`PINCTRL_HVI3C2`) use.
pub const PINCTRL_HVI3C2: &[PinctrlPin] = &[
CLR_PIN_SCU418_12,
CLR_PIN_SCU418_13,
CLR_PIN_SCU418_20,
CLR_PIN_SCU418_21,
PIN_SCU4B8_12,
PIN_SCU4B8_13,
];
/// I3C bus 3 (PAC `I3c3`) — HV pads: SCU4B8[14:15], clearing LV SCU418[14:15],[22:23].
pub const PINCTRL_HVI3C3: &[PinctrlPin] = &[
CLR_PIN_SCU418_14,
CLR_PIN_SCU418_15,
CLR_PIN_SCU418_22,
CLR_PIN_SCU418_23,
PIN_SCU4B8_14,
PIN_SCU4B8_15,
];
/// SGPIOM (Serial GPIO Master) pin group: mux selection on SCU41C[8:11].
///
/// Enables the four SGPIOM serial pins:
/// - bit 8 `sgpmclk` — serial clock out
/// - bit 9 `sgpmld` — load/latch out
/// - bit 10 `sgpmo` — serial data out
/// - bit 11 `sgpmi` — serial data in
///
/// Mux bits derived from the AST10x0 datasheet / Zephyr `ast10x0-pinctrl.dtsi`
/// (`pin_sgpmclk/ld/o/i` = `SIG_DESC_SET(0x41C, 8..11)`).
pub const PINCTRL_SGPIOM: &[PinctrlPin] =
&[PIN_SCU41C_8, PIN_SCU41C_9, PIN_SCU41C_10, PIN_SCU41C_11];
/// Macro to safely modify a register bit (set or clear).
macro_rules! modify_reg {
($reg:expr, $bit:expr, $clear:expr) => {{
let mut val: u32 = $reg.read().bits();
if $clear {
val &= !(1 << $bit);
} else {
val |= (1 << $bit);
}
$reg.write(|w| unsafe { w.bits(val) });
}};
}
impl ScuRegisters {
/// Apply a pinctrl group configuration.
///
/// Iterates through pin descriptors and applies each to the corresponding
/// SCU register offset and bit position.
///
/// # Example
/// ```no_run
/// # use ast10x0_peripherals::scu::{ScuRegisters, pinctrl};
/// # unsafe {
/// let scu = ScuRegisters::new_global();
/// scu.apply_pinctrl_group(&[pinctrl::CLR_PIN_SCU41C_0]);
/// # }
/// ```
pub fn apply_pinctrl_group(&self, pins: &[PinctrlPin]) {
let regs = self.regs();
for pin in pins {
match pin.offset {
0x410 => modify_reg!(regs.scu410(), pin.bit, pin.clear),
0x414 => modify_reg!(regs.scu414(), pin.bit, pin.clear),
0x418 => modify_reg!(regs.scu418(), pin.bit, pin.clear),
0x41C => modify_reg!(regs.scu41c(), pin.bit, pin.clear),
0x430 => modify_reg!(regs.scu430(), pin.bit, pin.clear),
0x434 => modify_reg!(regs.scu434(), pin.bit, pin.clear),
0x4B0 => modify_reg!(regs.scu4b0(), pin.bit, pin.clear),
0x4B4 => modify_reg!(regs.scu4b4(), pin.bit, pin.clear),
0x4B8 => modify_reg!(regs.scu4b8(), pin.bit, pin.clear),
0x4BC => modify_reg!(regs.scu4bc(), pin.bit, pin.clear),
0x690 => modify_reg!(regs.scu690(), pin.bit, pin.clear),
0x694 => modify_reg!(regs.scu694(), pin.bit, pin.clear),
0x698 => modify_reg!(regs.scu698(), pin.bit, pin.clear),
0x69C => modify_reg!(regs.scu69c(), pin.bit, pin.clear),
0x6B0 => modify_reg!(regs.scu6b0(), pin.bit, pin.clear),
_ => {} // Unknown offset, silently ignore
}
}
}
}