use alloc::string::String;
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Compatible {
CdnsQspiNor,
CdnsUsb3,
DwApbI2c,
DwApbUart,
DwAxiDmac,
DwMac,
DwMmc,
Jh7110AonCrg,
Jh7110AonPinctrl,
Jh7110AonSyscon,
Jh7110Crypto,
Jh7110IspCrg,
Jh7110IspSyscon,
Jh7110MipiTxDphy,
Jh7110Pmu,
Jh7110StgCrg,
Jh7110StgSyscon,
Jh7110SysCrg,
Jh7110SysPinctrl,
Jh7110SysSyscon,
Jh7110Tdm,
Jh7110Trng,
Jh7110Usb,
Jh7110UsbPhy,
Jh7110VoutCrg,
Jh7110VoutSyscon,
Jh7110Wdt,
Pl022SspSpi,
Pl080Dmac,
RiscvClint,
RiscvPlic,
OcPwm,
OeOmc,
OeOphy,
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("cdns,qspi-nor") || val.contains("cdns,xspi-nor") {
Self::CdnsQspiNor
} else if val.contains("cdns,usb3") {
Self::CdnsUsb3
} else 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("snps,dw-axi-dmac") {
Self::DwAxiDmac
} else if val.contains("snps,dwmac") {
Self::DwMac
} else if val.contains("snps,dwmmc") || val.contains("starfive,jh7110-mmc") {
Self::DwMmc
} else if val.contains("starfive,jh7110-aoncrg") {
Self::Jh7110AonCrg
} else if val.contains("starfive,jh7110-aon-pinctrl") {
Self::Jh7110AonPinctrl
} else if val.contains("starfive,jh7110-aon-syscon") {
Self::Jh7110AonSyscon
} else if val.contains("starfive,jh7110-crypto") {
Self::Jh7110Crypto
} else if val.contains("starfive,jh7110-ispcrg") {
Self::Jh7110IspCrg
} else if val.contains("starfive,jh7110-isp-syscon") {
Self::Jh7110IspSyscon
} else if val.contains("starfive,jh7110-mipitx-dphy") {
Self::Jh7110MipiTxDphy
} else if val.contains("starfive,jh7110-pmu") {
Self::Jh7110Pmu
} else if val.contains("starfive,jh7110-stgcrg") {
Self::Jh7110StgCrg
} else if val.contains("starfive,jh7110-stg-syscon") {
Self::Jh7110StgSyscon
} else if val.contains("starfive,jh7110-syscrg") {
Self::Jh7110SysCrg
} else if val.contains("starfive,jh7110-sys-pinctrl") {
Self::Jh7110SysPinctrl
} else if val.contains("starfive,jh7110-sys-syscon") {
Self::Jh7110SysSyscon
} else if val.contains("starfive,jh7110-tdm") {
Self::Jh7110Tdm
} else if val.contains("starfive,jh7110-trng") {
Self::Jh7110Trng
} else if val.contains("starfive,jh7110-usb-phy") {
Self::Jh7110UsbPhy
} else if val.contains("starfive,jh7110-usb") {
Self::Jh7110Usb
} else if val.contains("starfive,jh7110-vout-syscon") {
Self::Jh7110VoutSyscon
} else if val.contains("starfive,jh7110-voutcrg") {
Self::Jh7110VoutCrg
} else if val.contains("starfive,jh7110-wdt") {
Self::Jh7110Wdt
} else if val.contains("arm,pl022") {
Self::Pl022SspSpi
} else if val.contains("arm,pl080") {
Self::Pl080Dmac
} else if val.contains("riscv,clint") {
Self::RiscvClint
} else if val.contains("riscv,plic") {
Self::RiscvPlic
} else if val.contains("opencores,pwm-v1") {
Self::OcPwm
} else if val.contains("openedges,omc") {
Self::OeOmc
} else if val.contains("openedges,ophy") {
Self::OeOphy
} 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()
}
}