Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31da46d9 authored by Ben Dooks's avatar Ben Dooks
Browse files

ARM: S3C24XX: Wrapper s3c2410_gpio_setpin and s3c2410_gpio_pullup()



Change s3c2410_gpio_setpin() and s3c2410_gpio_pullup() to use
the new s3c_ gpio configuration calls until all their users
are converted.

Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
parent fb378747
Loading
Loading
Loading
Loading
+19 −28
Original line number Diff line number Diff line
/* linux/arch/arm/plat-s3c24xx/gpio.c
 *
 * Copyright (c) 2004-2005 Simtec Electronics
 * Copyright (c) 2004-2010 Simtec Electronics
 *	Ben Dooks <ben@simtec.co.uk>
 *
 * S3C24XX GPIO support
@@ -25,6 +25,7 @@
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/gpio.h>
#include <linux/io.h>

#include <mach/hardware.h>
@@ -33,44 +34,34 @@

#include <mach/regs-gpio.h>

/* gpiolib wrappers until these are totally eliminated */

void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)
{
	void __iomem *base = S3C24XX_GPIO_BASE(pin);
	unsigned long offs = S3C2410_GPIO_OFFSET(pin);
	unsigned long flags;
	unsigned long up;
	int ret;

	if (pin < S3C2410_GPIO_BANKB)
		return;
	WARN_ON(to);	/* should be none of these left */

	local_irq_save(flags);
	if (!to) {
		/* if pull is enabled, try first with up, and if that
		 * fails, try using down */

	up = __raw_readl(base + 0x08);
	up &= ~(1L << offs);
	up |= to << offs;
	__raw_writel(up, base + 0x08);

	local_irq_restore(flags);
		ret = s3c_gpio_setpull(pin, S3C_GPIO_PULL_UP);
		if (ret)
			s3c_gpio_setpull(pin, S3C_GPIO_PULL_DOWN);
	} else {
		s3c_gpio_setpull(pin, S3C_GPIO_PULL_NONE);
	}
}

EXPORT_SYMBOL(s3c2410_gpio_pullup);


void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)
{
	void __iomem *base = S3C24XX_GPIO_BASE(pin);
	unsigned long offs = S3C2410_GPIO_OFFSET(pin);
	unsigned long flags;
	unsigned long dat;
	/* do this via gpiolib until all users removed */

	local_irq_save(flags);

	dat = __raw_readl(base + 0x04);
	dat &= ~(1 << offs);
	dat |= to << offs;
	__raw_writel(dat, base + 0x04);

	local_irq_restore(flags);
	gpio_request(pin, "temporary");
	gpio_set_value(pin, to);
	gpio_free(pin);
}

EXPORT_SYMBOL(s3c2410_gpio_setpin);