// 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_light;

using fuchsia.amlogic.platform;
using fuchsia.gpio;
using fuchsia.hardware.gpio;
using fuchsia.hardware.pwm;
using fuchsia.platform;
using fuchsia.pwm;

primary node "pdev" {
  fuchsia.BIND_PROTOCOL == fuchsia.platform.BIND_PROTOCOL.DEVICE;
  fuchsia.BIND_PLATFORM_DEV_VID == fuchsia.amlogic.platform.BIND_PLATFORM_DEV_VID.AMLOGIC;
  fuchsia.BIND_PLATFORM_DEV_PID == fuchsia.platform.BIND_PLATFORM_DEV_PID.GENERIC;
  fuchsia.BIND_PLATFORM_DEV_DID == fuchsia.platform.BIND_PLATFORM_DEV_DID.GPIO_LIGHT;
}

node "gpio-amber-led" {
  fuchsia.hardware.gpio.Service == fuchsia.hardware.gpio.Service.ZirconTransport;
  fuchsia.gpio.FUNCTION == fuchsia.gpio.FUNCTION.GPIO_AMBER_LED;
}

node "pwm-amber-led" {
  fuchsia.hardware.pwm.Service == fuchsia.hardware.pwm.Service.ZirconTransport;
  fuchsia.pwm.PWM_ID_FUNCTION == fuchsia.pwm.PWM_ID_FUNCTION.AMBER_LED;
}

optional node "gpio-green-led" {
  fuchsia.hardware.gpio.Service == fuchsia.hardware.gpio.Service.ZirconTransport;
  fuchsia.gpio.FUNCTION == fuchsia.gpio.FUNCTION.GPIO_GREEN_LED;
}

optional node "pwm-green-led" {
  fuchsia.hardware.pwm.Service == fuchsia.hardware.pwm.Service.ZirconTransport;
  fuchsia.pwm.PWM_ID_FUNCTION == fuchsia.pwm.PWM_ID_FUNCTION.GREEN_LED;
}

node "gpio-init" {
  fuchsia.BIND_INIT_STEP == fuchsia.gpio.BIND_INIT_STEP.GPIO;
}
