diff --git a/CODEOWNERS b/CODEOWNERS index 9e1570c2acf..932148aecba 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -242,6 +242,7 @@ /include/device.h @wentongwu @nashif /include/display/ @vanwinkeljan /include/display/framebuf.h @gnuless +/include/dt-bindings/clock/kinetis_mcg.h @henrikbrixandersen /include/dt-bindings/clock/kinetis_scg.h @henrikbrixandersen /include/dt-bindings/pcie/ @gnuless /include/dt-bindings/usb/usb.h @galak @finikorg diff --git a/drivers/clock_control/CMakeLists.txt b/drivers/clock_control/CMakeLists.txt index 213b29a7b88..7d38bfa3dcb 100644 --- a/drivers/clock_control/CMakeLists.txt +++ b/drivers/clock_control/CMakeLists.txt @@ -2,6 +2,7 @@ zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_BEETLE beetle_clock_control.c) zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_MCUX_CCM clock_control_mcux_ccm.c) +zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_MCUX_MCG clock_control_mcux_mcg.c) zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_MCUX_PCC clock_control_mcux_pcc.c) zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_MCUX_SCG clock_control_mcux_scg.c) zephyr_sources_ifdef(CONFIG_CLOCK_CONTROL_MCUX_SIM clock_control_mcux_sim.c) diff --git a/drivers/clock_control/Kconfig b/drivers/clock_control/Kconfig index cf97595dbbe..c0b5c5b4111 100644 --- a/drivers/clock_control/Kconfig +++ b/drivers/clock_control/Kconfig @@ -31,6 +31,8 @@ source "drivers/clock_control/Kconfig.beetle" source "drivers/clock_control/Kconfig.mcux_ccm" +source "drivers/clock_control/Kconfig.mcux_mcg" + source "drivers/clock_control/Kconfig.mcux_pcc" source "drivers/clock_control/Kconfig.mcux_scg" diff --git a/drivers/clock_control/Kconfig.mcux_mcg b/drivers/clock_control/Kconfig.mcux_mcg new file mode 100644 index 00000000000..ca27dd2ac8b --- /dev/null +++ b/drivers/clock_control/Kconfig.mcux_mcg @@ -0,0 +1,12 @@ +# Kconfig - MCUXpresso SDK MCG +# +# Copyright (c) 2019 Vestas Wind Systems A/S +# +# SPDX-License-Identifier: Apache-2.0 +# + +menuconfig CLOCK_CONTROL_MCUX_MCG + bool "MCUX MCG driver" + depends on HAS_MCG + help + Enable support for mcux mcg driver. diff --git a/drivers/clock_control/clock_control_mcux_mcg.c b/drivers/clock_control/clock_control_mcux_mcg.c new file mode 100644 index 00000000000..c070b67e5d6 --- /dev/null +++ b/drivers/clock_control/clock_control_mcux_mcg.c @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2019 Vestas Wind Systems A/S + * + * Based on clock_control_mcux_sim.c, which is: + * Copyright (c) 2017, NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include + +#define LOG_LEVEL CONFIG_CLOCK_CONTROL_LOG_LEVEL +#include +LOG_MODULE_REGISTER(clock_control_mcg); + +static int mcux_mcg_on(struct device *dev, clock_control_subsys_t sub_system) +{ + return 0; +} + +static int mcux_mcg_off(struct device *dev, clock_control_subsys_t sub_system) +{ + return 0; +} + +static int mcux_mcg_get_rate(struct device *dev, + clock_control_subsys_t sub_system, + u32_t *rate) +{ + clock_name_t clock_name; + + switch ((u32_t) sub_system) { + case KINETIS_MCG_FIXED_FREQ_CLK: + clock_name = kCLOCK_McgFixedFreqClk; + break; + default: + LOG_ERR("Unsupported clock name"); + return -EINVAL; + break; + } + + *rate = CLOCK_GetFreq(clock_name); + return 0; +} + +static int mcux_mcg_init(struct device *dev) +{ + return 0; +} + +static const struct clock_control_driver_api mcux_mcg_driver_api = { + .on = mcux_mcg_on, + .off = mcux_mcg_off, + .get_rate = mcux_mcg_get_rate, +}; + +DEVICE_AND_API_INIT(mcux_mcg, DT_MCG_NAME, + &mcux_mcg_init, + NULL, NULL, + PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, + &mcux_mcg_driver_api); diff --git a/dts/bindings/arm/nxp,kinetis-mcg.yaml b/dts/bindings/arm/nxp,kinetis-mcg.yaml new file mode 100644 index 00000000000..c56ab1778db --- /dev/null +++ b/dts/bindings/arm/nxp,kinetis-mcg.yaml @@ -0,0 +1,26 @@ +# +# Copyright (c) 2019 Vestas Wind Systems A/S +# +# SPDX-License-Identifier: Apache-2.0 +# + +title: NXP Kinetis Multipurpose Clock Generator (MCG) + +description: > + This is a representation of the NXP Kinetis MCG IP node + +inherits: + !include base.yaml + +properties: + compatible: + constraint: "nxp,kinetis-mcg" + + reg: + category: required + + label: + category: required + +"#cells": + - name diff --git a/include/dt-bindings/clock/kinetis_mcg.h b/include/dt-bindings/clock/kinetis_mcg.h new file mode 100644 index 00000000000..1a7363ba681 --- /dev/null +++ b/include/dt-bindings/clock/kinetis_mcg.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2019 Vestas Wind Systems A/S + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_KINETIS_MCG_H_ +#define ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_KINETIS_MCG_H_ + +#define KINETIS_MCG_FIXED_FREQ_CLK 0 + +#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_KINETIS_MCG_H_ */