use alloc::string::String;
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Compatible {
DwApbI2c,
DwApbUart,
Pl022SspSpi,
Unknown(String),
None,
}
impl Compatible {
pub const fn is_known(&self) -> bool {
!(matches!(self, Self::Unknown(_)) || matches!(self, Self::None))
}
}
impl From<&str> for Compatible {
fn from(val: &str) -> Self {
if val.contains("dw-apb-i2c") || val.contains("designware-i2c") {
Self::DwApbI2c
} else if val.contains("dw-apb-uart") {
Self::DwApbUart
} else if val.contains("arm,pl022") {
Self::Pl022SspSpi
} else if val.is_empty() {
Self::None
} else {
Self::Unknown(val.into())
}
}
}
impl From<&device_tree::Node> for Compatible {
fn from(val: &device_tree::Node) -> Self {
val.prop_str("compatible").unwrap_or("").into()
}
}
impl From<device_tree::Node> for Compatible {
fn from(val: device_tree::Node) -> Self {
(&val).into()
}
}