static int configure_uart_gpios(int on) { int ret = 0, i; static int uart_gpios[] = { 53, 54, 55, 56 }; static int uart_gpios_status; if (on == uart_gpios_status) return 0; uart_gpios_status = on; for (i = 0; i < ARRAY_SIZE(uart_gpios); i++) { if (on) { ret = msm_gpiomux_get(uart_gpios[i]); if (unlikely(ret)) break; } else { ret = msm_gpiomux_put(uart_gpios[i]); if (unlikely(ret)) return ret; } } if (ret) { uart_gpios_status = 0; for (; i >= 0; i--) msm_gpiomux_put(uart_gpios[i]); } return ret; }
static int configure_pcm_gpios(int on) { int ret = 0, i; static int pcm_gpios[] = { 111, 112, 113, 114 }; static int pcm_gpios_status; if (on == pcm_gpios_status) return 0; pcm_gpios_status = on; for (i = 0; i < ARRAY_SIZE(pcm_gpios); i++) { if (on) { ret = msm_gpiomux_get(pcm_gpios[i]); if (unlikely(ret)) break; } else { ret = msm_gpiomux_put(pcm_gpios[i]); if (unlikely(ret)) return ret; } } if (ret) { pcm_gpios_status = 0; while (--i >= 0) msm_gpiomux_put(pcm_gpios[i]); } return ret; }
static int configure_pcm_gpios(int on) { int ret = 0, i; int pcm_gpios[] = {111, 112, 113, 114}; for (i = 0; i < ARRAY_SIZE(pcm_gpios); i++) { if (on) { ret = msm_gpiomux_get(pcm_gpios[i]); if (unlikely(ret)) break; } else { ret = msm_gpiomux_put(pcm_gpios[i]); if (unlikely(ret)) return ret; } } if (ret) for (; i >= 0; i--) msm_gpiomux_put(pcm_gpios[i]); return ret; }
static int ctp_uart_pin_mux(int on) { int rc; static int is_on = 0; pr_debug("%s: on=%d\n", __func__, on); if (on && !is_on) rc = msm_gpiomux_get(GPIO_CTP_RX); else if (!on && is_on) rc = msm_gpiomux_put(GPIO_CTP_RX); else rc = 0; is_on = on; return (rc); }
/* helper function to manipulate group of gpios (msm_gpiomux)*/ static int configure_gpiomux_gpios(int on, int gpios[], int cnt) { int ret = 0; int i; for (i = 0; i < cnt; i++) { //printk(KERN_ERR "%s:pin(%d):%s\n", __func__, gpios[i], on?"on":"off"); if (on) { ret = msm_gpiomux_get(gpios[i]); if (unlikely(ret)) break; } else { ret = msm_gpiomux_put(gpios[i]); if (unlikely(ret)) return ret; } } if (ret) for (; i >= 0; i--) msm_gpiomux_put(gpios[i]); return ret; }
static int msm_gpio_request(struct gpio_chip *chip, unsigned offset) { return msm_gpiomux_get(chip->base + offset); }