/*
 * 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 indivial 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 indivial 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
 */
