You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
6.2 KiB
145 lines
6.2 KiB
/* |
|
* Copyright (c) 2020, Seagate Technology LLC |
|
* |
|
* SPDX-License-Identifier: Apache-2.0 |
|
*/ |
|
|
|
#ifndef ZEPHYR_DRIVERS_CLOCK_CONTROL_CLOCK_CONTROL_LPC11U6X_H_ |
|
#define ZEPHYR_DRIVERS_CLOCK_CONTROL_CLOCK_CONTROL_LPC11U6X_H_ |
|
|
|
#include <zephyr/drivers/pinctrl.h> |
|
|
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_I2C0 (1 << 5) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_GPIO (1 << 6) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_USART0 (1 << 12) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_USB (1 << 14) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_IOCON (1 << 16) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_PINT (1 << 19) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_USART1 (1 << 20) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_USART2 (1 << 21) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_USART3_4 (1 << 22) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_I2C1 (1 << 25) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_SRAM1 (1 << 26) |
|
#define LPC11U6X_SYS_AHB_CLK_CTRL_USB_SRAM (1 << 27) |
|
|
|
#define LPC11U6X_PDRUNCFG_IRC_PD (1 << 1) |
|
#define LPC11U6X_PDRUNCFG_SYSOSC_PD (1 << 5) |
|
#define LPC11U6X_PDRUNCFG_PLL_PD (1 << 7) |
|
#define LPC11U6X_PDRUNCFG_MASK 0xC800 |
|
|
|
#define LPC11U6X_SYS_PLL_CLK_SEL_IRC 0x0 |
|
#define LPC11U6X_SYS_PLL_CLK_SEL_SYSOSC 0x1 |
|
|
|
#define LPC11U6X_FLASH_TIMING_REG 0x4003C010 |
|
#define LPC11U6X_FLASH_TIMING_3CYCLES 0x2 |
|
#define LPC11U6X_FLASH_TIMING_MASK 0x3 |
|
|
|
#define LPC11U6X_SYS_PLL_CTRL_MSEL_MASK 0x1F |
|
#define LPC11U6X_SYS_PLL_CTRL_PSEL_SHIFT 5 |
|
#define LPC11U6X_SYS_PLL_CTRL_PSEL_MASK 0x3 |
|
|
|
#define LPC11U6X_MAIN_CLK_SRC_PLLOUT 0x3 |
|
|
|
#define LPC11U6X_PRESET_CTRL_I2C0 (1 << 1) |
|
#define LPC11U6X_PRESET_CTRL_I2C1 (1 << 3) |
|
#define LPC11U6X_PRESET_CTRL_FRG (1 << 4) |
|
#define LPC11U6X_PRESET_CTRL_USART1 (1 << 5) |
|
#define LPC11U6X_PRESET_CTRL_USART2 (1 << 6) |
|
#define LPC11U6X_PRESET_CTRL_USART3 (1 << 7) |
|
#define LPC11U6X_PRESET_CTRL_USART4 (1 << 8) |
|
|
|
#define LPC11U6X_USART_CLOCK_RATE 14745600 |
|
|
|
struct lpc11u6x_syscon_regs { |
|
volatile uint32_t sys_mem_remap; /* System memory remap */ |
|
volatile uint32_t p_reset_ctrl; /* Peripheral reset control */ |
|
volatile uint32_t sys_pll_ctrl; /* System PLL control */ |
|
volatile const uint32_t sys_pll_stat; /* System PLL status */ |
|
volatile uint32_t usb_pll_ctrl; /* USB PLL control */ |
|
volatile const uint32_t usb_pll_stat; /* USB PLL status */ |
|
volatile const uint32_t reserved1; |
|
volatile uint32_t rtc_osc_ctrl; /* RTC oscillator control */ |
|
volatile uint32_t sys_osc_ctrl; /* System oscillator control */ |
|
volatile uint32_t wdt_osc_ctrl; /* Watchdog oscillator |
|
* control |
|
*/ |
|
volatile uint32_t irc_ctrl; /* IRC Control */ |
|
volatile const uint32_t reserved2; |
|
volatile uint32_t sys_rst_stat; /* System reset status */ |
|
volatile const uint32_t reserved3[3]; |
|
volatile uint32_t sys_pll_clk_sel; /* System PLL clock source */ |
|
volatile uint32_t sys_pll_clk_uen; /* System PLL source update */ |
|
volatile uint32_t usb_pll_clk_sel; /* USB PLL clock source */ |
|
volatile uint32_t usb_pll_clk_uen; /* USB PLL clock source |
|
* update |
|
*/ |
|
volatile const uint32_t reserved4[8]; |
|
volatile uint32_t main_clk_sel; /* Main clock select */ |
|
volatile uint32_t main_clk_uen; /* Main clock update */ |
|
volatile uint32_t sys_ahb_clk_div; /* System clock divider */ |
|
volatile const uint32_t reserved5; |
|
volatile uint32_t sys_ahb_clk_ctrl; /* System clock control */ |
|
volatile const uint32_t reserved6[4]; |
|
volatile uint32_t ssp0_clk_div; /* SSP0 clock divider */ |
|
volatile uint32_t usart0_clk_div; /* USART0 clock divider */ |
|
volatile uint32_t ssp1_clk_div; /* SSP1 clock divider */ |
|
volatile uint32_t frg_clk_div; /* USART 1-4 fractional baud |
|
* rate generator clock divider |
|
*/ |
|
volatile const uint32_t reserved7[7]; |
|
volatile uint32_t usb_clk_sel; /* USB clock select */ |
|
volatile uint32_t usb_clk_uen; /* USB clock update */ |
|
volatile uint32_t usb_clk_div; /* USB clock divider */ |
|
volatile const uint32_t reserved8[5]; |
|
volatile uint32_t clk_out_sel; /* CLKOUT source select */ |
|
volatile uint32_t clk_out_uen; /* CLKOUT source update */ |
|
volatile uint32_t clk_out_div; /* CLKOUT divider */ |
|
volatile const uint32_t reserved9; |
|
volatile uint32_t uart_frg_div; /* USART1-4 fractional |
|
* generator divider |
|
*/ |
|
volatile uint32_t uart_frg_mult; /* USART1-4 fractional |
|
* generator multiplier |
|
*/ |
|
volatile const uint32_t reserved10; |
|
volatile uint32_t ext_trace_cmd; /* External trace buffer |
|
* command |
|
*/ |
|
volatile const uint32_t pio_por_cap[3]; /* CLKOUT source select */ |
|
volatile const uint32_t reserved11[10]; |
|
volatile uint32_t iocon_clk_div[7]; /* IOCON clock divider */ |
|
volatile uint32_t bod_ctrl; /* Brown-out detect control */ |
|
volatile uint32_t sys_tck_cal; /* System tick calibration */ |
|
volatile const uint32_t reserved12[6]; |
|
volatile uint32_t irq_latency; /* IRQ latency */ |
|
volatile uint32_t nmi_src; /* NMI source control */ |
|
volatile uint32_t pint_sel[8]; /* GPIO pin interrupt select */ |
|
volatile uint32_t usb_clk_ctrl; /* USB clock control */ |
|
volatile const uint32_t usb_clk_stat; /* USB clock status */ |
|
volatile uint32_t reserved13[25]; |
|
volatile uint32_t starterp0; /* Start logic 0 int wake-up */ |
|
volatile const uint32_t reserved14[3]; |
|
volatile uint32_t starterp1; /* Start logic 1 int wake-up */ |
|
volatile const uint32_t reserved15[6]; |
|
volatile uint32_t pd_sleep_cfg; /* Deep-sleep power-down |
|
* states |
|
*/ |
|
volatile uint32_t pd_awake_cfg; /* Power-down states for |
|
* wake-up from deep-sleep |
|
*/ |
|
volatile uint32_t pd_run_cfg; /* Power configuration */ |
|
volatile const uint32_t reserved16[110]; |
|
volatile const uint32_t device_id; /* Device identifier */ |
|
}; |
|
|
|
struct lpc11u6x_syscon_config { |
|
struct lpc11u6x_syscon_regs *syscon; |
|
const struct pinctrl_dev_config *pincfg; |
|
}; |
|
|
|
struct lpc11u6x_syscon_data { |
|
struct k_mutex mutex; |
|
uint8_t frg_in_use; |
|
uint8_t usart34_in_use; |
|
}; |
|
#endif /* ZEPHYR_DRIVERS_CLOCK_CONTROL_CLOCK_CONTROL_LPC11U6X_H_ */
|
|
|