From 7d5ac91832918a5fda0277aacb8c62421efdeaa2 Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Mon, 20 Jul 2015 15:17:08 +0200 Subject: [PATCH] input: TWL4030 input support for power button, USB and charger This adds support for detecting a few inputs exported by the TWL4030. Currently-supported inputs are the power button, USB and charger presence. Reviewed-by: Tom Rini Signed-off-by: Paul Kocialkowski --- drivers/input/Makefile | 1 + drivers/input/twl4030.c | 49 +++++++++++++++++++++++++++++++++++++++++ include/twl4030.h | 14 ++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 drivers/input/twl4030.c diff --git a/drivers/input/Makefile b/drivers/input/Makefile index a8e9be2f7f..24fec9b83e 100644 --- a/drivers/input/Makefile +++ b/drivers/input/Makefile @@ -7,6 +7,7 @@ obj-$(CONFIG_I8042_KBD) += i8042.o obj-$(CONFIG_TEGRA_KEYBOARD) += tegra-kbc.o +obj-$(CONFIG_TWL4030_INPUT) += twl4030.o obj-$(CONFIG_CROS_EC_KEYB) += cros_ec_keyb.o ifdef CONFIG_PS2KBD obj-y += keyboard.o pc_keyb.o diff --git a/drivers/input/twl4030.c b/drivers/input/twl4030.c new file mode 100644 index 0000000000..a5ded35d92 --- /dev/null +++ b/drivers/input/twl4030.c @@ -0,0 +1,49 @@ +/* + * TWL4030 input + * + * Copyright (C) 2015 Paul Kocialkowski + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include + +int twl4030_input_power_button(void) +{ + u8 data; + + twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER, + TWL4030_PM_MASTER_STS_HW_CONDITIONS, &data); + + if (data & TWL4030_PM_MASTER_STS_HW_CONDITIONS_PWON) + return 1; + + return 0; +} + +int twl4030_input_charger(void) +{ + u8 data; + + twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER, + TWL4030_PM_MASTER_STS_HW_CONDITIONS, &data); + + if (data & TWL4030_PM_MASTER_STS_HW_CONDITIONS_CHG) + return 1; + + return 0; +} + +int twl4030_input_usb(void) +{ + u8 data; + + twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER, + TWL4030_PM_MASTER_STS_HW_CONDITIONS, &data); + + if (data & TWL4030_PM_MASTER_STS_HW_CONDITIONS_USB || + data & TWL4030_PM_MASTER_STS_HW_CONDITIONS_VBUS) + return 1; + + return 0; +} diff --git a/include/twl4030.h b/include/twl4030.h index 2d0ca18bbf..a4d5fbdb61 100644 --- a/include/twl4030.h +++ b/include/twl4030.h @@ -208,6 +208,12 @@ #define TWL4030_PM_MASTER_SW_EVENTS_DEVSLP (1 << 1) #define TWL4030_PM_MASTER_SW_EVENTS_DEVOFF (1 << 0) +/* HW conditions */ +#define TWL4030_PM_MASTER_STS_HW_CONDITIONS_PWON (1 << 0) +#define TWL4030_PM_MASTER_STS_HW_CONDITIONS_CHG (1 << 1) +#define TWL4030_PM_MASTER_STS_HW_CONDITIONS_USB (1 << 2) +#define TWL4030_PM_MASTER_STS_HW_CONDITIONS_VBUS (1 << 7) + /* Power transition */ #define TWL4030_PM_MASTER_CFG_TRANSITION_STARTON_PWON (1 << 0) #define TWL4030_PM_MASTER_CFG_TRANSITION_STARTON_CHG (1 << 1) @@ -669,6 +675,14 @@ void twl4030_power_init(void); /* For initializing mmc power */ void twl4030_power_mmc_init(int dev_index); +/* + * Input + */ + +int twl4030_input_power_button(void); +int twl4030_input_charger(void); +int twl4030_input_usb(void); + /* * LED */ -- 2.39.5