Ejemplo n.º 1
0
int mxc_gpio_mode(int gpio_mode)
{
	unsigned int pin = gpio_mode & GPIO_PIN_MASK;
	unsigned int port = (gpio_mode & GPIO_PORT_MASK) >> GPIO_PORT_SHIFT;
	unsigned int ocr = (gpio_mode & GPIO_OCR_MASK) >> GPIO_OCR_SHIFT;
	unsigned int aout = (gpio_mode >> GPIO_AOUT_SHIFT) & 3;
	unsigned int bout = (gpio_mode >> GPIO_BOUT_SHIFT) & 3;

	if (port >= imx_iomuxv1_numports)
		return -EINVAL;

	/* Pullup enable */
	imx_iomuxv1_set_puen(port, pin, gpio_mode & GPIO_PUEN);

	/* Data direction */
	imx_iomuxv1_set_ddir(port, pin, gpio_mode & GPIO_OUT);

	/* Primary / alternate function */
	imx_iomuxv1_set_gpr(port, pin, gpio_mode & GPIO_AF);

	/* use as gpio? */
	imx_iomuxv1_set_gius(port, pin, !(gpio_mode & (GPIO_PF | GPIO_AF)));

	imx_iomuxv1_set_ocr(port, pin, ocr);

	imx_iomuxv1_set_iconfa(port, pin, aout);

	imx_iomuxv1_set_iconfb(port, pin, bout);

	return 0;
}
Ejemplo n.º 2
0
int mxc_gpio_mode(int gpio_mode)
{
    unsigned int pin = gpio_mode & GPIO_PIN_MASK;
    unsigned int port = (gpio_mode & GPIO_PORT_MASK) >> GPIO_PORT_SHIFT;
    unsigned int ocr = (gpio_mode & GPIO_OCR_MASK) >> GPIO_OCR_SHIFT;
    unsigned int aout = (gpio_mode >> GPIO_AOUT_SHIFT) & 3;
    unsigned int bout = (gpio_mode >> GPIO_BOUT_SHIFT) & 3;

    if (port >= imx_iomuxv1_numports)
        return -EINVAL;


    imx_iomuxv1_set_puen(port, pin, gpio_mode & GPIO_PUEN);


    imx_iomuxv1_set_ddir(port, pin, gpio_mode & GPIO_OUT);


    imx_iomuxv1_set_gpr(port, pin, gpio_mode & GPIO_AF);


    imx_iomuxv1_set_gius(port, pin, !(gpio_mode & (GPIO_PF | GPIO_AF)));

    imx_iomuxv1_set_ocr(port, pin, ocr);

    imx_iomuxv1_set_iconfa(port, pin, aout);

    imx_iomuxv1_set_iconfb(port, pin, bout);

    return 0;
}