/* * 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 #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_ */