/*
 * Copyright (c) 2020 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <ztest.h>
#include <device.h>
#include "abstract_driver.h"

#define MY_DRIVER_A	"my_driver_A"
#define MY_DRIVER_B	"my_driver_B"

/* define individual driver A */
static int my_driver_A_do_this(const struct device *device, int foo, int bar)
{
	return foo + bar;
}

static void my_driver_A_do_that(const struct device *device,
				unsigned int *baz)
{
	*baz = 1;
}

static struct subsystem_api my_driver_A_api_funcs = {
	.do_this = my_driver_A_do_this,
	.do_that = my_driver_A_do_that
};

int common_driver_init(const struct device *dev)
{
	return 0;
}

/* define individual driver B */
static int my_driver_B_do_this(const struct device *device, int foo, int bar)
{
	return foo - bar;
}

static void my_driver_B_do_that(const struct device *device,
				unsigned int *baz)
{
	*baz = 2;
}

static struct subsystem_api my_driver_B_api_funcs = {
	.do_this = my_driver_B_do_this,
	.do_that = my_driver_B_do_that
};

/**
 * @cond INTERNAL_HIDDEN
 */
DEVICE_DEFINE(my_driver_A, MY_DRIVER_A, &common_driver_init,
		NULL, NULL, NULL,
		POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
		&my_driver_A_api_funcs);

DEVICE_DEFINE(my_driver_B, MY_DRIVER_B, &common_driver_init,
		NULL, NULL, NULL,
		POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
		&my_driver_B_api_funcs);

/**
 * @endcond
 */
