blob: eca3aeaa4056e10dad3587f386a04d708142f266 [file] [log] [blame]
// Copyright 2023 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.
#include "src/devices/tests/runtime-composite-test/drivers/leaf-driver.h"
#include <lib/ddk/binding_driver.h>
#include <lib/ddk/metadata.h>
#include <bind/composite/test/lib/cpp/bind.h>
#include <bind/fuchsia/cpp/bind.h>
#include "src/devices/tests/runtime-composite-test/drivers/composite-driver.h"
namespace bind_test = bind_composite_test_lib;
namespace leaf_driver {
// static
zx_status_t LeafDriver::Bind(void* ctx, zx_device_t* device) {
auto dev = std::make_unique<LeafDriver>(device);
auto status = dev->DdkAdd("leaf");
if (status != ZX_OK) {
return status;
}
// Add the spec.
const ddk::BindRule node_1_bind_rules[] = {
ddk::MakeAcceptBindRule(bind_test::FLAG, true),
};
const device_bind_prop_t node_1_properties[] = {
ddk::MakeProperty(bind_fuchsia::PROTOCOL, bind_test::BIND_PROTOCOL_VALUE_1),
ddk::MakeProperty(bind_fuchsia::USB_VID, bind_test::BIND_USB_VID_VALUE),
};
const char* node_2_props_values[] = {bind_test::TEST_PROP_VALUE_1, bind_test::TEST_PROP_VALUE_2};
const ddk::BindRule node_2_bind_rules[] = {
ddk::MakeAcceptBindRuleList(bind_test::TEST_PROP, node_2_props_values),
ddk::MakeRejectBindRule(bind_fuchsia::USB_VID, 10u),
};
const device_bind_prop_t node_2_properties[] = {
ddk::MakeProperty(bind_fuchsia::PROTOCOL, bind_test::BIND_PROTOCOL_VALUE_2),
};
status = dev->DdkAddCompositeNodeSpec("test_composite_1",
ddk::CompositeNodeSpec(node_1_bind_rules, node_1_properties)
.AddParentSpec(node_2_bind_rules, node_2_properties));
if (status != ZX_OK) {
return status;
}
[[maybe_unused]] auto ptr = dev.release();
return ZX_OK;
}
static zx_driver_ops_t kDriverOps = []() -> zx_driver_ops_t {
zx_driver_ops_t ops = {};
ops.version = DRIVER_OPS_VERSION;
ops.bind = LeafDriver::Bind;
return ops;
}();
} // namespace leaf_driver
ZIRCON_DRIVER(LeafDriver, leaf_driver::kDriverOps, "zircon", "0.1");