// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

composite aml_pwm_init;

using fuchsia.gpio;
using fuchsia.hardware.gpio;
using fuchsia.hardware.pwm;

primary node "pwm" {
  fuchsia.hardware.pwm.Service == fuchsia.hardware.pwm.Service.ZirconTransport;
}

node "gpio-wifi" {
  fuchsia.hardware.gpio.Service == fuchsia.hardware.gpio.Service.ZirconTransport;
  fuchsia.gpio.FUNCTION == fuchsia.gpio.FUNCTION.WIFI_LPO;
}

node "gpio-bt" {
  fuchsia.hardware.gpio.Service == fuchsia.hardware.gpio.Service.ZirconTransport;
  fuchsia.gpio.FUNCTION == fuchsia.gpio.FUNCTION.BT_REG_ON;
}
