Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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);
}
Exemplo n.º 3
0
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);
	}
}
Exemplo n.º 6
0
/*
 * 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)];
}