]>
Commit | Line | Data |
---|---|---|
2874c5fd | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
8284328c SP |
2 | /* |
3 | * SMSC ECE1099 | |
4 | * | |
5 | * Copyright 2012 Texas Instruments Inc. | |
6 | * | |
7 | * Author: Sourav Poddar <sourav.poddar@ti.com> | |
8284328c SP |
8 | */ |
9 | ||
10 | #ifndef __LINUX_MFD_SMSC_H | |
11 | #define __LINUX_MFD_SMSC_H | |
12 | ||
13 | #include <linux/regmap.h> | |
14 | ||
15 | #define SMSC_ID_ECE1099 1 | |
16 | #define SMSC_NUM_CLIENTS 2 | |
17 | ||
18 | #define SMSC_BASE_ADDR 0x38 | |
19 | #define OMAP_GPIO_SMSC_IRQ 151 | |
20 | ||
21 | #define SMSC_MAXGPIO 32 | |
22 | #define SMSC_BANK(offs) ((offs) >> 3) | |
23 | #define SMSC_BIT(offs) (1u << ((offs) & 0x7)) | |
24 | ||
25 | struct smsc { | |
26 | struct device *dev; | |
27 | struct i2c_client *i2c_clients[SMSC_NUM_CLIENTS]; | |
28 | struct regmap *regmap; | |
29 | int clk; | |
30 | /* Stored chip id */ | |
31 | int id; | |
32 | }; | |
33 | ||
34 | struct smsc_gpio; | |
35 | struct smsc_keypad; | |
36 | ||
37 | static inline int smsc_read(struct device *child, unsigned int reg, | |
38 | unsigned int *dest) | |
39 | { | |
40 | struct smsc *smsc = dev_get_drvdata(child->parent); | |
41 | ||
42 | return regmap_read(smsc->regmap, reg, dest); | |
43 | } | |
44 | ||
45 | static inline int smsc_write(struct device *child, unsigned int reg, | |
46 | unsigned int value) | |
47 | { | |
48 | struct smsc *smsc = dev_get_drvdata(child->parent); | |
49 | ||
50 | return regmap_write(smsc->regmap, reg, value); | |
51 | } | |
52 | ||
53 | /* Registers for SMSC */ | |
54 | #define SMSC_RESET 0xF5 | |
55 | #define SMSC_GRP_INT 0xF9 | |
56 | #define SMSC_CLK_CTRL 0xFA | |
57 | #define SMSC_WKUP_CTRL 0xFB | |
58 | #define SMSC_DEV_ID 0xFC | |
59 | #define SMSC_DEV_REV 0xFD | |
60 | #define SMSC_VEN_ID_L 0xFE | |
61 | #define SMSC_VEN_ID_H 0xFF | |
62 | ||
63 | /* CLK VALUE */ | |
64 | #define SMSC_CLK_VALUE 0x13 | |
65 | ||
66 | /* Registers for function GPIO INPUT */ | |
67 | #define SMSC_GPIO_DATA_IN_START 0x00 | |
68 | ||
69 | /* Registers for function GPIO OUPUT */ | |
70 | #define SMSC_GPIO_DATA_OUT_START 0x05 | |
71 | ||
72 | /* Definitions for SMSC GPIO CONFIGURATION REGISTER*/ | |
73 | #define SMSC_GPIO_INPUT_LOW 0x01 | |
74 | #define SMSC_GPIO_INPUT_RISING 0x09 | |
75 | #define SMSC_GPIO_INPUT_FALLING 0x11 | |
76 | #define SMSC_GPIO_INPUT_BOTH_EDGE 0x19 | |
77 | #define SMSC_GPIO_OUTPUT_PP 0x21 | |
78 | #define SMSC_GPIO_OUTPUT_OP 0x31 | |
79 | ||
80 | #define GRP_INT_STAT 0xf9 | |
81 | #define SMSC_GPI_INT 0x0f | |
82 | #define SMSC_CFG_START 0x0A | |
83 | ||
84 | /* Registers for SMSC GPIO INTERRUPT STATUS REGISTER*/ | |
85 | #define SMSC_GPIO_INT_STAT_START 0x32 | |
86 | ||
87 | /* Registers for SMSC GPIO INTERRUPT MASK REGISTER*/ | |
88 | #define SMSC_GPIO_INT_MASK_START 0x37 | |
89 | ||
90 | /* Registers for SMSC function KEYPAD*/ | |
91 | #define SMSC_KP_OUT 0x40 | |
92 | #define SMSC_KP_IN 0x41 | |
93 | #define SMSC_KP_INT_STAT 0x42 | |
94 | #define SMSC_KP_INT_MASK 0x43 | |
95 | ||
96 | /* Definitions for keypad */ | |
97 | #define SMSC_KP_KSO 0x70 | |
98 | #define SMSC_KP_KSI 0x51 | |
99 | #define SMSC_KSO_ALL_LOW 0x20 | |
100 | #define SMSC_KP_SET_LOW_PWR 0x0B | |
101 | #define SMSC_KP_SET_HIGH 0xFF | |
102 | #define SMSC_KSO_EVAL 0x00 | |
103 | ||
104 | #endif /* __LINUX_MFD_SMSC_H */ |