power_controller: read gpio pins from device tree
[bmcd] / src / hal / helpers.rs
index 33f7e3f16b4451124078e5911a7a86ac5f5b1f23..c0699b5b411c254715e75f8d73044fbc09edb450 100644 (file)
@@ -11,6 +11,7 @@
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
+use std::collections::HashMap;
 const NODE_COUNT: u8 = 4;
 
 /// small helper macro which handles the code duplication of declaring gpio lines.
@@ -56,3 +57,11 @@ pub fn bit_iterator(nodes_state: u8, nodes_mask: u8) -> impl Iterator<Item = (us
         (mask != 0).then_some((n as usize, state))
     })
 }
+
+pub fn load_lines(chip: &gpiod::Chip) -> HashMap<String, gpiod::LineId> {
+    HashMap::from_iter((0..chip.num_lines()).filter_map(|i| {
+        chip.line_info(i)
+            .ok()
+            .map(|info| (info.name, i as gpiod::LineId))
+    }))
+}