diff options
author | 2023-10-10 14:33:42 +0000 | |
---|---|---|
committer | 2023-10-10 14:33:42 +0000 | |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/u-boot/drivers/input/twl4030.c | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/u-boot/drivers/input/twl4030.c')
-rw-r--r-- | roms/u-boot/drivers/input/twl4030.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/roms/u-boot/drivers/input/twl4030.c b/roms/u-boot/drivers/input/twl4030.c new file mode 100644 index 000000000..3a1c46b30 --- /dev/null +++ b/roms/u-boot/drivers/input/twl4030.c @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * TWL4030 input + * + * Copyright (C) 2015 Paul Kocialkowski <contact@paulk.fr> + */ + +#include <twl4030.h> + +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; +} + +int twl4030_keypad_scan(unsigned char *matrix) +{ + u8 data; + u8 c, r; + + twl4030_i2c_read_u8(TWL4030_CHIP_KEYPAD, + TWL4030_KEYPAD_KEYP_CTRL_REG, &data); + + data |= TWL4030_KEYPAD_CTRL_SOFT_NRST | TWL4030_KEYPAD_CTRL_KBD_ON; + data &= ~TWL4030_KEYPAD_CTRL_SOFTMODEN; + + twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, + TWL4030_KEYPAD_KEYP_CTRL_REG, data); + + for (c = 0; c < 8; c++) { + data = 0xff & ~(1 << c); + twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, + TWL4030_KEYPAD_KBC_REG, data); + + data = 0xff; + twl4030_i2c_read_u8(TWL4030_CHIP_KEYPAD, + TWL4030_KEYPAD_KBR_REG, &data); + + for (r = 0; r < 8; r++) + matrix[c * 8 + r] = !(data & (1 << r)); + } + + data = 0xff & ~(TWL4030_KEYPAD_CTRL_SOFT_NRST); + twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD, + TWL4030_KEYPAD_KEYP_CTRL_REG, data); + + return 0; +} + +int twl4030_keypad_key(unsigned char *matrix, u8 c, u8 r) +{ + return matrix[c * 8 + r]; +} |