mach-ux500: platform data for SFH7741 proximity sensor driver
Proximity sensor is managed as an input event (SW_PROXIMITY). Signed-off-by: Philippe Langlais <philippe.langlais@linaro.org> [Named GPIO pin] Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
b3f1f73d35
commit
a71b819b6e
|
@ -20,6 +20,8 @@
|
|||
#include <linux/spi/spi.h>
|
||||
#include <linux/mfd/ab8500.h>
|
||||
#include <linux/mfd/tc3589x.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
@ -181,8 +183,58 @@ static void __init mop500_i2c_init(void)
|
|||
db8500_add_i2c3(&u8500_i2c3_data);
|
||||
}
|
||||
|
||||
static struct gpio_keys_button mop500_gpio_keys[] = {
|
||||
{
|
||||
.desc = "SFH7741 Proximity Sensor",
|
||||
.type = EV_SW,
|
||||
.code = SW_FRONT_PROXIMITY,
|
||||
.gpio = GPIO_PROX_SENSOR,
|
||||
.active_low = 0,
|
||||
.can_disable = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator *prox_regulator;
|
||||
static int mop500_prox_activate(struct device *dev);
|
||||
static void mop500_prox_deactivate(struct device *dev);
|
||||
|
||||
static struct gpio_keys_platform_data mop500_gpio_keys_data = {
|
||||
.buttons = mop500_gpio_keys,
|
||||
.nbuttons = ARRAY_SIZE(mop500_gpio_keys),
|
||||
.enable = mop500_prox_activate,
|
||||
.disable = mop500_prox_deactivate,
|
||||
};
|
||||
|
||||
static struct platform_device mop500_gpio_keys_device = {
|
||||
.name = "gpio-keys",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &mop500_gpio_keys_data,
|
||||
},
|
||||
};
|
||||
|
||||
static int mop500_prox_activate(struct device *dev)
|
||||
{
|
||||
prox_regulator = regulator_get(&mop500_gpio_keys_device.dev,
|
||||
"vcc");
|
||||
if (IS_ERR(prox_regulator)) {
|
||||
dev_err(&mop500_gpio_keys_device.dev,
|
||||
"no regulator\n");
|
||||
return PTR_ERR(prox_regulator);
|
||||
}
|
||||
regulator_enable(prox_regulator);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mop500_prox_deactivate(struct device *dev)
|
||||
{
|
||||
regulator_disable(prox_regulator);
|
||||
regulator_put(prox_regulator);
|
||||
}
|
||||
|
||||
/* add any platform devices here - TODO */
|
||||
static struct platform_device *platform_devs[] __initdata = {
|
||||
&mop500_gpio_keys_device,
|
||||
};
|
||||
|
||||
static void __init mop500_spi_init(void)
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
/* GPIOs on the TC35892 expander */
|
||||
#define GPIO_SDMMC_CD MOP500_EGPIO(3)
|
||||
#define GPIO_PROX_SENSOR MOP500_EGPIO(7)
|
||||
#define GPIO_BU21013_CS MOP500_EGPIO(13)
|
||||
#define GPIO_SDMMC_EN MOP500_EGPIO(17)
|
||||
#define GPIO_SDMMC_1V8_3V_SEL MOP500_EGPIO(18)
|
||||
|
|
Loading…
Reference in New Issue