~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/mfd/iqs62x.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0+ */
  2 /*
  3  * Azoteq IQS620A/621/622/624/625 Multi-Function Sensors
  4  *
  5  * Copyright (C) 2019 Jeff LaBundy <jeff@labundy.com>
  6  */
  7 
  8 #ifndef __LINUX_MFD_IQS62X_H
  9 #define __LINUX_MFD_IQS62X_H
 10 
 11 #define IQS620_PROD_NUM                         0x41
 12 #define IQS621_PROD_NUM                         0x46
 13 #define IQS622_PROD_NUM                         0x42
 14 #define IQS624_PROD_NUM                         0x43
 15 #define IQS625_PROD_NUM                         0x4E
 16 
 17 #define IQS620_HW_NUM_V0                        0x82
 18 #define IQS620_HW_NUM_V1                        IQS620_HW_NUM_V0
 19 #define IQS620_HW_NUM_V2                        IQS620_HW_NUM_V0
 20 #define IQS620_HW_NUM_V3                        0x92
 21 
 22 #define IQS621_ALS_FLAGS                        0x16
 23 #define IQS622_ALS_FLAGS                        0x14
 24 
 25 #define IQS624_HALL_UI                          0x70
 26 #define IQS624_HALL_UI_WHL_EVENT                BIT(4)
 27 #define IQS624_HALL_UI_INT_EVENT                BIT(3)
 28 #define IQS624_HALL_UI_AUTO_CAL                 BIT(2)
 29 
 30 #define IQS624_INTERVAL_DIV                     0x7D
 31 
 32 #define IQS620_GLBL_EVENT_MASK                  0xD7
 33 #define IQS620_GLBL_EVENT_MASK_PMU              BIT(6)
 34 
 35 #define IQS62X_NUM_KEYS                         16
 36 #define IQS62X_NUM_EVENTS                       (IQS62X_NUM_KEYS + 6)
 37 
 38 #define IQS62X_EVENT_SIZE                       10
 39 
 40 enum iqs62x_ui_sel {
 41         IQS62X_UI_PROX,
 42         IQS62X_UI_SAR1,
 43 };
 44 
 45 enum iqs62x_event_reg {
 46         IQS62X_EVENT_NONE,
 47         IQS62X_EVENT_SYS,
 48         IQS62X_EVENT_PROX,
 49         IQS62X_EVENT_HYST,
 50         IQS62X_EVENT_HALL,
 51         IQS62X_EVENT_ALS,
 52         IQS62X_EVENT_IR,
 53         IQS62X_EVENT_WHEEL,
 54         IQS62X_EVENT_INTER,
 55         IQS62X_EVENT_UI_LO,
 56         IQS62X_EVENT_UI_HI,
 57 };
 58 
 59 enum iqs62x_event_flag {
 60         /* keys */
 61         IQS62X_EVENT_PROX_CH0_T,
 62         IQS62X_EVENT_PROX_CH0_P,
 63         IQS62X_EVENT_PROX_CH1_T,
 64         IQS62X_EVENT_PROX_CH1_P,
 65         IQS62X_EVENT_PROX_CH2_T,
 66         IQS62X_EVENT_PROX_CH2_P,
 67         IQS62X_EVENT_HYST_POS_T,
 68         IQS62X_EVENT_HYST_POS_P,
 69         IQS62X_EVENT_HYST_NEG_T,
 70         IQS62X_EVENT_HYST_NEG_P,
 71         IQS62X_EVENT_SAR1_ACT,
 72         IQS62X_EVENT_SAR1_QRD,
 73         IQS62X_EVENT_SAR1_MOVE,
 74         IQS62X_EVENT_SAR1_HALT,
 75         IQS62X_EVENT_WHEEL_UP,
 76         IQS62X_EVENT_WHEEL_DN,
 77 
 78         /* switches */
 79         IQS62X_EVENT_HALL_N_T,
 80         IQS62X_EVENT_HALL_N_P,
 81         IQS62X_EVENT_HALL_S_T,
 82         IQS62X_EVENT_HALL_S_P,
 83 
 84         /* everything else */
 85         IQS62X_EVENT_SYS_RESET,
 86         IQS62X_EVENT_SYS_ATI,
 87 };
 88 
 89 struct iqs62x_event_data {
 90         u16 ui_data;
 91         u8 als_flags;
 92         u8 ir_flags;
 93         u8 interval;
 94 };
 95 
 96 struct iqs62x_event_desc {
 97         enum iqs62x_event_reg reg;
 98         u8 mask;
 99         u8 val;
100 };
101 
102 struct iqs62x_dev_desc {
103         const char *dev_name;
104         const struct mfd_cell *sub_devs;
105         int num_sub_devs;
106         u8 prod_num;
107         u8 sw_num;
108         const u8 *cal_regs;
109         int num_cal_regs;
110         u8 prox_mask;
111         u8 sar_mask;
112         u8 hall_mask;
113         u8 hyst_mask;
114         u8 temp_mask;
115         u8 als_mask;
116         u8 ir_mask;
117         u8 prox_settings;
118         u8 als_flags;
119         u8 hall_flags;
120         u8 hyst_shift;
121         u8 interval;
122         u8 interval_div;
123         const char *fw_name;
124         const enum iqs62x_event_reg (*event_regs)[IQS62X_EVENT_SIZE];
125 };
126 
127 struct iqs62x_core {
128         const struct iqs62x_dev_desc *dev_desc;
129         struct i2c_client *client;
130         struct regmap *regmap;
131         struct blocking_notifier_head nh;
132         struct list_head fw_blk_head;
133         struct completion ati_done;
134         struct completion fw_done;
135         enum iqs62x_ui_sel ui_sel;
136         unsigned long event_cache;
137         u8 sw_num;
138         u8 hw_num;
139 };
140 
141 extern const struct iqs62x_event_desc iqs62x_events[IQS62X_NUM_EVENTS];
142 
143 #endif /* __LINUX_MFD_IQS62X_H */
144 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php