/*
 * Copyright (c) 2018 Linaro Ltd.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <syscall_handler.h>
#include <drivers/led.h>

Z_SYSCALL_HANDLER(led_blink, dev, led, delay_on, delay_off)
{
	Z_OOPS(Z_SYSCALL_DRIVER_LED(dev, blink));
	return z_impl_led_blink((struct device *)dev, led, delay_on,
					delay_off);
}

Z_SYSCALL_HANDLER(led_set_brightness, dev, led, value)
{
	Z_OOPS(Z_SYSCALL_DRIVER_LED(dev, set_brightness));
	return z_impl_led_set_brightness((struct device *)dev, led, value);
}

Z_SYSCALL_HANDLER(led_on, dev, led)
{
	Z_OOPS(Z_SYSCALL_DRIVER_LED(dev, on));
	return z_impl_led_on((struct device *)dev, led);
}

Z_SYSCALL_HANDLER(led_off, dev, led)
{
	Z_OOPS(Z_SYSCALL_DRIVER_LED(dev, off));
	return z_impl_led_off((struct device *)dev, led);
}
