int imx_gpio_get_pin(unsigned int pin) { u32 gpio_num = IOMUX_TO_GPIO(pin); u32 gpio_off = GPIO_TO_INDEX(gpio_num); u32 baddr = PORT_BADDR(GPIO_TO_PORT(gpio_num)); return (__REG(baddr + GPIO_DR) & (1 << gpio_off)) ? 1 : 0; }
void imx_gpio_pin_cfg_dir(unsigned int pin, int dir) { u32 gpio_num = IOMUX_TO_GPIO(pin); u32 gpio_off = GPIO_TO_INDEX(gpio_num); u32 baddr = PORT_BADDR(GPIO_TO_PORT(gpio_num)); if (dir) __REG(baddr + GPIO_GDIR) |= (1 << gpio_off); else __REG(baddr + GPIO_GDIR) &= ~(1 << gpio_off); }
void imx_gpio_set_pin(unsigned int pin, int val) { u32 gpio_num = IOMUX_TO_GPIO(pin); u32 gpio_off = GPIO_TO_INDEX(gpio_num); u32 baddr = PORT_BADDR(GPIO_TO_PORT(gpio_num)); if (val) __REG(baddr + GPIO_DR) |= (1 << gpio_off); else __REG(baddr + GPIO_DR) &= ~(1 << gpio_off); }
/*! * Request ownership for an IO pin. This function has to be the first one * being called before that pin is used. The caller has to check the * return value to make sure it returns 0. * * @param pin a name defined by \b iomux_pin_name_t * @param cfg an input function as defined in \b #iomux_pin_cfg_t * * @return 0 if successful; Non-zero otherwise */ int mxc_request_iomux(iomux_pin_name_t pin, iomux_pin_cfg_t cfg) { int ret = iomux_config_mux(pin, cfg); if (GPIO_TO_PORT(IOMUX_TO_GPIO(pin)) < GPIO_PORT_NUM) { if (((cfg & (~MUX_CONFIG_SION)) == MUX_CONFIG_GPIO) || (((cfg & (~MUX_CONFIG_SION)) == MUX_CONFIG_FUNC) && ((pin == MX35_PIN_GPIO1_0) || (pin == MX35_PIN_GPIO1_1) || (pin == MX35_PIN_GPIO2_0) || (pin == MX35_PIN_GPIO3_0)))) ret |= mxc_request_gpio(pin); } return ret; }
/*! * Release ownership for an IO pin * * @param pin a name defined by \b iomux_pin_name_t * @param cfg an input function as defined in \b #iomux_pin_cfg_t */ void mxc_free_iomux(iomux_pin_name_t pin, iomux_pin_cfg_t cfg) { u32 pin_index = PIN_TO_IOMUX_INDEX(pin); u8 *rp = iomux_pin_res_table + pin_index; BUG_ON((pin_index > MUX_PIN_NUM_MAX)); *rp = 0; if (GPIO_TO_PORT(IOMUX_TO_GPIO(pin)) < GPIO_PORT_NUM) { if (((cfg & (~MUX_CONFIG_SION)) == MUX_CONFIG_GPIO) || (((cfg & (~MUX_CONFIG_SION)) == MUX_CONFIG_FUNC) && ((pin == MX35_PIN_GPIO1_0) || (pin == MX35_PIN_GPIO1_1) || (pin == MX35_PIN_GPIO2_0) || (pin == MX35_PIN_GPIO3_0)))) mxc_free_gpio(pin); } }
/* * Find the pointer to the gpio_port for a given pin. * @param gpio a gpio pin number * @return pointer to \b struc \b gpio_port */ static inline struct gpio_port *get_gpio_port(u32 gpio) { return &gpio_port[GPIO_TO_PORT(gpio)]; }