MAINTAINERS: Add an entry for SPI NOR
[oweals/u-boot.git] / drivers / input / twl4030.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * TWL4030 input
4  *
5  * Copyright (C) 2015 Paul Kocialkowski <contact@paulk.fr>
6  */
7
8 #include <twl4030.h>
9
10 int twl4030_input_power_button(void)
11 {
12         u8 data;
13
14         twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER,
15                             TWL4030_PM_MASTER_STS_HW_CONDITIONS, &data);
16
17         if (data & TWL4030_PM_MASTER_STS_HW_CONDITIONS_PWON)
18                 return 1;
19
20         return 0;
21 }
22
23 int twl4030_input_charger(void)
24 {
25         u8 data;
26
27         twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER,
28                             TWL4030_PM_MASTER_STS_HW_CONDITIONS, &data);
29
30         if (data & TWL4030_PM_MASTER_STS_HW_CONDITIONS_CHG)
31                 return 1;
32
33         return 0;
34 }
35
36 int twl4030_input_usb(void)
37 {
38         u8 data;
39
40         twl4030_i2c_read_u8(TWL4030_CHIP_PM_MASTER,
41                             TWL4030_PM_MASTER_STS_HW_CONDITIONS, &data);
42
43         if (data & TWL4030_PM_MASTER_STS_HW_CONDITIONS_USB ||
44             data & TWL4030_PM_MASTER_STS_HW_CONDITIONS_VBUS)
45                 return 1;
46
47         return 0;
48 }
49
50 int twl4030_keypad_scan(unsigned char *matrix)
51 {
52         u8 data;
53         u8 c, r;
54
55         twl4030_i2c_read_u8(TWL4030_CHIP_KEYPAD,
56                             TWL4030_KEYPAD_KEYP_CTRL_REG, &data);
57
58         data |= TWL4030_KEYPAD_CTRL_SOFT_NRST | TWL4030_KEYPAD_CTRL_KBD_ON;
59         data &= ~TWL4030_KEYPAD_CTRL_SOFTMODEN;
60
61         twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD,
62                              TWL4030_KEYPAD_KEYP_CTRL_REG, data);
63
64         for (c = 0; c < 8; c++) {
65                 data = 0xff & ~(1 << c);
66                 twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD,
67                                      TWL4030_KEYPAD_KBC_REG, data);
68
69                 data = 0xff;
70                 twl4030_i2c_read_u8(TWL4030_CHIP_KEYPAD,
71                                     TWL4030_KEYPAD_KBR_REG, &data);
72
73                 for (r = 0; r < 8; r++)
74                         matrix[c * 8 + r] = !(data & (1 << r));
75         }
76
77         data = 0xff & ~(TWL4030_KEYPAD_CTRL_SOFT_NRST);
78         twl4030_i2c_write_u8(TWL4030_CHIP_KEYPAD,
79                              TWL4030_KEYPAD_KEYP_CTRL_REG, data);
80
81         return 0;
82 }
83
84 int twl4030_keypad_key(unsigned char *matrix, u8 c, u8 r)
85 {
86         return matrix[c * 8 + r];
87 }