Commit 8b8a2b4b authored by David Brownell's avatar David Brownell Committed by Tony Lindgren

hsmmc.c glue uses standard GPIO calls

Convert the hsmmc init code over to standard GPIO calls:
gpio_request(), gpio_free(), gpio_get_value_cansleep().

NOTE that this doesn't pass GPIO numbers in to hsmmc_init();
those values are still hard-wired.  (For the write protect
signal, the LACK of value is hard-wired...)  So the hsmmc
glue is still kind of problematic.
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 73f251d3
......@@ -15,7 +15,9 @@
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/i2c/twl4030.h>
#include <mach/hardware.h>
#include <mach/mmc.h>
#include <mach/board.h>
......@@ -32,8 +34,6 @@
#define LDO_CLR 0x00
#define VSEL_S2_CLR 0x40
#define GPIO_0_BIT_POS (1 << 0)
#define MMC1_CD_IRQ 0
#define MMC2_CD_IRQ 1
#define OMAP2_CONTROL_DEVCONF0 0x48002274
#define OMAP2_CONTROL_DEVCONF1 0x490022E8
......@@ -45,9 +45,12 @@
#define OMAP2_CONTROL_PBIAS_PWRDNZ (1 << 1)
#define OMAP2_CONTROL_PBIAS_SCTRL (1 << 2)
static const int mmc1_cd_gpio = OMAP_MAX_GPIO_LINES; /* HACK!! */
static int hsmmc_card_detect(int irq)
{
return twl4030_get_gpio_datain(irq - TWL4030_GPIO_IRQ_BASE);
return gpio_get_value_cansleep(mmc1_cd_gpio);
}
/*
......@@ -60,11 +63,11 @@ static int hsmmc_late_init(struct device *dev)
/*
* Configure TWL4030 GPIO parameters for MMC hotplug irq
*/
ret = twl4030_request_gpio(MMC1_CD_IRQ);
ret = gpio_request(mmc1_cd_gpio, "mmc0_cd");
if (ret)
goto err;
ret = twl4030_set_gpio_debounce(MMC1_CD_IRQ, TWL4030_GPIO_IS_ENABLE);
ret = twl4030_set_gpio_debounce(0, true);
if (ret)
goto err;
......@@ -77,11 +80,7 @@ err:
static void hsmmc_cleanup(struct device *dev)
{
int ret = 0;
ret = twl4030_free_gpio(MMC1_CD_IRQ);
if (ret)
dev_err(dev, "Failed to configure TWL4030 GPIO IRQ\n");
gpio_free(mmc1_cd_gpio);
}
#ifdef CONFIG_PM
......@@ -123,7 +122,7 @@ static int hsmmc_suspend(struct device *dev, int slot)
{
int ret = 0;
disable_irq(TWL4030_GPIO_IRQ_NO(MMC1_CD_IRQ));
disable_irq(TWL4030_GPIO_IRQ_NO(0));
ret = mask_cd_interrupt(1);
return ret;
......@@ -133,7 +132,7 @@ static int hsmmc_resume(struct device *dev, int slot)
{
int ret = 0;
enable_irq(TWL4030_GPIO_IRQ_NO(MMC1_CD_IRQ));
enable_irq(TWL4030_GPIO_IRQ_NO(0));
ret = mask_cd_interrupt(0);
return ret;
......@@ -260,7 +259,7 @@ static struct omap_mmc_platform_data mmc1_data = {
MMC_VDD_165_195,
.name = "first slot",
.card_detect_irq = TWL4030_GPIO_IRQ_NO(MMC1_CD_IRQ),
.card_detect_irq = TWL4030_GPIO_IRQ_NO(0),
.card_detect = hsmmc_card_detect,
},
};
......
......@@ -97,31 +97,6 @@ static inline int gpio_twl4030_read(u8 address)
return (ret < 0) ? ret : data;
}
/*
* twl4030 GPIO request function
*/
int twl4030_request_gpio(int gpio)
{
if (unlikely(gpio >= TWL4030_GPIO_MAX))
return -EPERM;
return gpio_request(twl_gpiochip.base + gpio, NULL);
}
EXPORT_SYMBOL(twl4030_request_gpio);
/*
* TWL4030 GPIO free module
*/
int twl4030_free_gpio(int gpio)
{
if (unlikely(gpio >= TWL4030_GPIO_MAX))
return -EPERM;
gpio_free(twl_gpiochip.base + gpio);
return 0;
}
EXPORT_SYMBOL(twl4030_free_gpio);
static int twl4030_set_gpio_direction(int gpio, int is_input)
{
u8 d_bnk = gpio >> 3;
......@@ -158,7 +133,7 @@ static int twl4030_set_gpio_dataout(int gpio, int enable)
return gpio_twl4030_write(base, d_msk);
}
int twl4030_get_gpio_datain(int gpio)
static int twl4030_get_gpio_datain(int gpio)
{
u8 d_bnk = gpio >> 3;
u8 d_off = gpio & 0x7;
......@@ -176,7 +151,6 @@ int twl4030_get_gpio_datain(int gpio)
return ret;
}
EXPORT_SYMBOL(twl4030_get_gpio_datain);
/*
* Configure debounce timing value for a GPIO pin on TWL4030
......
......@@ -319,17 +319,13 @@ int twl4030_sih_setup(int module);
/* TWL4030 GPIO interrupt definitions */
#define TWL4030_GPIO_IRQ_NO(n) (TWL4030_GPIO_IRQ_BASE + (n))
#define TWL4030_GPIO_IS_ENABLE 1
/*
* Exported TWL4030 GPIO APIs
*
* WARNING -- use standard GPIO and IRQ calls instead; these will vanish.
*/
int twl4030_get_gpio_datain(int gpio);
int twl4030_request_gpio(int gpio);
int twl4030_set_gpio_debounce(int gpio, int enable);
int twl4030_free_gpio(int gpio);
#if defined(CONFIG_TWL4030_BCI_BATTERY) || \
defined(CONFIG_TWL4030_BCI_BATTERY_MODULE)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment