void __msm_gpio_set_polarity(unsigned gpio, unsigned val) { if (val) clr_gpio_bits(INTR_POL_CTL_HI, GPIO_INTR_CFG(gpio)); else set_gpio_bits(INTR_POL_CTL_HI, GPIO_INTR_CFG(gpio)); }
void __msm_gpio_set_intr_cfg_enable(unsigned gpio, unsigned val) { if (val) { set_gpio_bits(INTR_ENABLE, GPIO_INTR_CFG(gpio)); } else { clr_gpio_bits(INTR_ENABLE, GPIO_INTR_CFG(gpio)); } }
void __msm_gpio_set_config_direction(unsigned gpio, int input, int val) { if (input) clr_gpio_bits(BIT(GPIO_OE_BIT), GPIO_CONFIG(gpio)); else { __msm_gpio_set_inout(gpio, val); set_gpio_bits(BIT(GPIO_OE_BIT), GPIO_CONFIG(gpio)); } }
void __msm_gpio_install_direct_irq(unsigned gpio, unsigned irq, unsigned int input_polarity) { unsigned cfg; set_gpio_bits(BIT(GPIO_OE_BIT), GPIO_CONFIG(gpio)); cfg = __raw_readl(GPIO_INTR_CFG(gpio)); cfg &= ~(INTR_TARGET_PROC_NONE | INTR_RAW_STATUS_EN | INTR_ENABLE); cfg |= INTR_TARGET_PROC_APPS | INTR_DIR_CONN_EN; __raw_writel(cfg, GPIO_INTR_CFG(gpio)); cfg = gpio; if (input_polarity) cfg |= DC_POLARITY_HI; __raw_writel(cfg, GPIO_DIR_CONN_INTR(irq)); }