blob: fc565d910377b6558376a6c1fb7d5d5c9a3db2e2 [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);
}
// GPIO
pub const PINCTRL_GPIOL2: &[PinctrlPin] = &[CLR_PIN_SCU418_26];
pub const PINCTRL_GPIOL3: &[PinctrlPin] = &[CLR_PIN_SCU418_27];
/// 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];
/// 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,
];
/// 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];
/// 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
}
}
}
}