示例#1
0
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;
}
示例#2
0
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);
}