@@ -404,25 +404,32 @@ pub fn expand(indevice: &Device) -> Result<Device> {
404
404
pub fn expand_properties ( device : & mut Device ) {
405
405
let default = device. default_register_properties . clone ( ) ;
406
406
for p in & mut device. peripherals {
407
+ if p. derived_from . is_some ( ) {
408
+ continue ;
409
+ }
407
410
let default = p. default_register_properties . derive_from ( & default) ;
408
411
if let Some ( regs) = p. registers . as_mut ( ) {
409
- for rc in regs {
410
- expand_properties_register_cluster ( rc, & default) ;
411
- }
412
+ expand_properties_registers ( regs, & default) ;
412
413
}
413
414
}
414
415
}
415
416
416
- fn expand_properties_register_cluster ( rc : & mut RegisterCluster , default : & RegisterProperties ) {
417
- match rc {
418
- RegisterCluster :: Cluster ( c) => {
419
- let default = c. default_register_properties . derive_from ( & default) ;
420
- for rc in & mut c. children {
421
- expand_properties_register_cluster ( rc, & default) ;
417
+ fn expand_properties_registers ( regs : & mut [ RegisterCluster ] , default : & RegisterProperties ) {
418
+ for rc in regs {
419
+ match rc {
420
+ RegisterCluster :: Cluster ( c) => {
421
+ if c. derived_from . is_some ( ) {
422
+ continue ;
423
+ }
424
+ let default = c. default_register_properties . derive_from ( & default) ;
425
+ expand_properties_registers ( & mut c. children , & default) ;
426
+ }
427
+ RegisterCluster :: Register ( r) => {
428
+ if r. derived_from . is_some ( ) {
429
+ continue ;
430
+ }
431
+ r. properties = r. properties . derive_from ( default) ;
422
432
}
423
- }
424
- RegisterCluster :: Register ( r) => {
425
- r. properties = r. properties . derive_from ( default) ;
426
433
}
427
434
}
428
435
}
0 commit comments