From b73fda3a05f78a3ce78708e319f2eb719fd55719 Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Sun, 16 Jun 2013 16:56:34 +0200 Subject: imx233: rewrite pinctrl using new registers Change-Id: I907a0b599ef65061360c215580f96f59b78b615b --- firmware/target/arm/imx233/pinctrl-imx233.h | 56 +++++++++++------------------ 1 file changed, 21 insertions(+), 35 deletions(-) (limited to 'firmware/target/arm/imx233/pinctrl-imx233.h') diff --git a/firmware/target/arm/imx233/pinctrl-imx233.h b/firmware/target/arm/imx233/pinctrl-imx233.h index 5b4b9c4cd5..82ed47d57e 100644 --- a/firmware/target/arm/imx233/pinctrl-imx233.h +++ b/firmware/target/arm/imx233/pinctrl-imx233.h @@ -24,26 +24,12 @@ #define __PINCTRL_IMX233_H__ #include "config.h" +#include "system.h" +#include "regs/regs-pinctrl.h" // set to debug pinctrl use #define IMX233_PINCTRL_DEBUG -#define HW_PINCTRL_BASE 0x80018000 - -#define HW_PINCTRL_CTRL (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x0)) -#define HW_PINCTRL_MUXSEL(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x100 + (i) * 0x10)) -#define HW_PINCTRL_DRIVE(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x200 + (i) * 0x10)) -#define HW_PINCTRL_PULL(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x400 + (i) * 0x10)) -#define HW_PINCTRL_DOUT(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x500 + (i) * 0x10)) -#define HW_PINCTRL_DIN(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x600 + (i) * 0x10)) -#define HW_PINCTRL_DOE(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x700 + (i) * 0x10)) -#define HW_PINCTRL_PIN2IRQ(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x800 + (i) * 0x10)) -#define HW_PINCTRL_IRQEN(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x900 + (i) * 0x10)) -#define HW_PINCTRL_IRQEN(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x900 + (i) * 0x10)) -#define HW_PINCTRL_IRQLEVEL(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0xa00 + (i) * 0x10)) -#define HW_PINCTRL_IRQPOL(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0xb00 + (i) * 0x10)) -#define HW_PINCTRL_IRQSTAT(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0xc00 + (i) * 0x10)) - #define PINCTRL_FUNCTION_MAIN 0 #define PINCTRL_FUNCTION_ALT1 1 #define PINCTRL_FUNCTION_ALT2 2 @@ -72,72 +58,72 @@ typedef void (*pin_irq_cb_t)(int bank, int pin); static inline void imx233_pinctrl_init(void) { - __REG_CLR(HW_PINCTRL_CTRL) = __BLOCK_CLKGATE | __BLOCK_SFTRST; + HW_PINCTRL_CTRL_CLR = BM_OR2(PINCTRL_CTRL, CLKGATE, SFTRST); } static inline void imx233_set_pin_drive_strength(unsigned bank, unsigned pin, unsigned strength) { - __REG_CLR(HW_PINCTRL_DRIVE(4 * bank + pin / 8)) = 3 << (4 * (pin % 8)); - __REG_SET(HW_PINCTRL_DRIVE(4 * bank + pin / 8)) = strength << (4 * (pin % 8)); + HW_PINCTRL_DRIVEn_CLR(4 * bank + pin / 8) = 3 << (4 * (pin % 8)); + HW_PINCTRL_DRIVEn_SET(4 * bank + pin / 8) = strength << (4 * (pin % 8)); } static inline void imx233_enable_gpio_output(unsigned bank, unsigned pin, bool enable) { - if(enable) - __REG_SET(HW_PINCTRL_DOE(bank)) = 1 << pin; + if(enable) + HW_PINCTRL_DOEn_SET(bank) = 1 << pin; else - __REG_CLR(HW_PINCTRL_DOE(bank)) = 1 << pin; + HW_PINCTRL_DOEn_CLR(bank) = 1 << pin; } static inline void imx233_enable_gpio_output_mask(unsigned bank, uint32_t pin_mask, bool enable) { if(enable) - __REG_SET(HW_PINCTRL_DOE(bank)) = pin_mask; + HW_PINCTRL_DOEn_SET(bank) = pin_mask; else - __REG_CLR(HW_PINCTRL_DOE(bank)) = pin_mask; + HW_PINCTRL_DOEn_CLR(bank) = pin_mask; } static inline void imx233_set_gpio_output(unsigned bank, unsigned pin, bool value) { if(value) - __REG_SET(HW_PINCTRL_DOUT(bank)) = 1 << pin; + HW_PINCTRL_DOUTn_SET(bank) = 1 << pin; else - __REG_CLR(HW_PINCTRL_DOUT(bank)) = 1 << pin; + HW_PINCTRL_DOUTn_CLR(bank) = 1 << pin; } static inline void imx233_set_gpio_output_mask(unsigned bank, uint32_t pin_mask, bool value) { if(value) - __REG_SET(HW_PINCTRL_DOUT(bank)) = pin_mask; + HW_PINCTRL_DOUTn_SET(bank) = pin_mask; else - __REG_CLR(HW_PINCTRL_DOUT(bank)) = pin_mask; + HW_PINCTRL_DOUTn_CLR(bank) = pin_mask; } static inline uint32_t imx233_get_gpio_input_mask(unsigned bank, uint32_t pin_mask) { - return HW_PINCTRL_DIN(bank) & pin_mask; + return HW_PINCTRL_DINn(bank) & pin_mask; } static inline void imx233_set_pin_function(unsigned bank, unsigned pin, unsigned function) { - __REG_CLR(HW_PINCTRL_MUXSEL(2 * bank + pin / 16)) = 3 << (2 * (pin % 16)); - __REG_SET(HW_PINCTRL_MUXSEL(2 * bank + pin / 16)) = function << (2 * (pin % 16)); + HW_PINCTRL_MUXSELn_CLR(2 * bank + pin / 16) = 3 << (2 * (pin % 16)); + HW_PINCTRL_MUXSELn_SET(2 * bank + pin / 16) = function << (2 * (pin % 16)); } static inline void imx233_enable_pin_pullup(unsigned bank, unsigned pin, bool enable) { if(enable) - __REG_SET(HW_PINCTRL_PULL(bank)) = 1 << pin; + HW_PINCTRL_PULLn_SET(bank) = 1 << pin; else - __REG_CLR(HW_PINCTRL_PULL(bank)) = 1 << pin; + HW_PINCTRL_PULLn_CLR(bank) = 1 << pin; } static inline void imx233_enable_pin_pullup_mask(unsigned bank, uint32_t pin_msk, bool enable) { if(enable) - __REG_SET(HW_PINCTRL_PULL(bank)) = pin_msk; + HW_PINCTRL_PULLn_SET(bank) = pin_msk; else - __REG_CLR(HW_PINCTRL_PULL(bank)) = pin_msk; + HW_PINCTRL_PULLn_CLR(bank) = pin_msk; } /** On irq, the pin irq interrupt is disable and then cb is called; -- cgit v1.2.3