blob: a3a0d0d97c7287367bd4d111cca19e6d7c166dd1 [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];
/// FMC quad-SPI pin group: mux selection on SCU430[10:11].
pub const PINCTRL_FMC_QUAD: &[PinctrlPin] = &[PIN_SCU430_10, PIN_SCU430_11];
/// 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
}
}
}
}