96
96
#define IQS269_MISC_B_TRACKING_UI_ENABLE BIT(4)
97
97
#define IQS269_MISC_B_FILT_STR_SLIDER GENMASK(1, 0)
98
98
99
- #define IQS269_CHx_SETTINGS 0x8C
100
-
101
99
#define IQS269_CHx_ENG_A_MEAS_CAP_SIZE BIT(15)
102
100
#define IQS269_CHx_ENG_A_RX_GND_INACTIVE BIT(13)
103
101
#define IQS269_CHx_ENG_A_LOCAL_CAP_SIZE BIT(12)
@@ -245,6 +243,18 @@ struct iqs269_ver_info {
245
243
u8 padding ;
246
244
} __packed ;
247
245
246
+ struct iqs269_ch_reg {
247
+ u8 rx_enable ;
248
+ u8 tx_enable ;
249
+ __be16 engine_a ;
250
+ __be16 engine_b ;
251
+ __be16 ati_comp ;
252
+ u8 thresh [3 ];
253
+ u8 hyst ;
254
+ u8 assoc_select ;
255
+ u8 assoc_weight ;
256
+ } __packed ;
257
+
248
258
struct iqs269_sys_reg {
249
259
__be16 general ;
250
260
u8 active ;
@@ -266,18 +276,7 @@ struct iqs269_sys_reg {
266
276
u8 timeout_swipe ;
267
277
u8 thresh_swipe ;
268
278
u8 redo_ati ;
269
- } __packed ;
270
-
271
- struct iqs269_ch_reg {
272
- u8 rx_enable ;
273
- u8 tx_enable ;
274
- __be16 engine_a ;
275
- __be16 engine_b ;
276
- __be16 ati_comp ;
277
- u8 thresh [3 ];
278
- u8 hyst ;
279
- u8 assoc_select ;
280
- u8 assoc_weight ;
279
+ struct iqs269_ch_reg ch_reg [IQS269_NUM_CH ];
281
280
} __packed ;
282
281
283
282
struct iqs269_flags {
@@ -292,7 +291,6 @@ struct iqs269_private {
292
291
struct regmap * regmap ;
293
292
struct mutex lock ;
294
293
struct iqs269_switch_desc switches [ARRAY_SIZE (iqs269_events )];
295
- struct iqs269_ch_reg ch_reg [IQS269_NUM_CH ];
296
294
struct iqs269_sys_reg sys_reg ;
297
295
struct input_dev * keypad ;
298
296
struct input_dev * slider [IQS269_NUM_SL ];
@@ -307,6 +305,7 @@ struct iqs269_private {
307
305
static int iqs269_ati_mode_set (struct iqs269_private * iqs269 ,
308
306
unsigned int ch_num , unsigned int mode )
309
307
{
308
+ struct iqs269_ch_reg * ch_reg = iqs269 -> sys_reg .ch_reg ;
310
309
u16 engine_a ;
311
310
312
311
if (ch_num >= IQS269_NUM_CH )
@@ -317,12 +316,12 @@ static int iqs269_ati_mode_set(struct iqs269_private *iqs269,
317
316
318
317
mutex_lock (& iqs269 -> lock );
319
318
320
- engine_a = be16_to_cpu (iqs269 -> ch_reg [ch_num ].engine_a );
319
+ engine_a = be16_to_cpu (ch_reg [ch_num ].engine_a );
321
320
322
321
engine_a &= ~IQS269_CHx_ENG_A_ATI_MODE_MASK ;
323
322
engine_a |= (mode << IQS269_CHx_ENG_A_ATI_MODE_SHIFT );
324
323
325
- iqs269 -> ch_reg [ch_num ].engine_a = cpu_to_be16 (engine_a );
324
+ ch_reg [ch_num ].engine_a = cpu_to_be16 (engine_a );
326
325
iqs269 -> ati_current = false;
327
326
328
327
mutex_unlock (& iqs269 -> lock );
@@ -333,13 +332,14 @@ static int iqs269_ati_mode_set(struct iqs269_private *iqs269,
333
332
static int iqs269_ati_mode_get (struct iqs269_private * iqs269 ,
334
333
unsigned int ch_num , unsigned int * mode )
335
334
{
335
+ struct iqs269_ch_reg * ch_reg = iqs269 -> sys_reg .ch_reg ;
336
336
u16 engine_a ;
337
337
338
338
if (ch_num >= IQS269_NUM_CH )
339
339
return - EINVAL ;
340
340
341
341
mutex_lock (& iqs269 -> lock );
342
- engine_a = be16_to_cpu (iqs269 -> ch_reg [ch_num ].engine_a );
342
+ engine_a = be16_to_cpu (ch_reg [ch_num ].engine_a );
343
343
mutex_unlock (& iqs269 -> lock );
344
344
345
345
engine_a &= IQS269_CHx_ENG_A_ATI_MODE_MASK ;
@@ -351,6 +351,7 @@ static int iqs269_ati_mode_get(struct iqs269_private *iqs269,
351
351
static int iqs269_ati_base_set (struct iqs269_private * iqs269 ,
352
352
unsigned int ch_num , unsigned int base )
353
353
{
354
+ struct iqs269_ch_reg * ch_reg = iqs269 -> sys_reg .ch_reg ;
354
355
u16 engine_b ;
355
356
356
357
if (ch_num >= IQS269_NUM_CH )
@@ -379,12 +380,12 @@ static int iqs269_ati_base_set(struct iqs269_private *iqs269,
379
380
380
381
mutex_lock (& iqs269 -> lock );
381
382
382
- engine_b = be16_to_cpu (iqs269 -> ch_reg [ch_num ].engine_b );
383
+ engine_b = be16_to_cpu (ch_reg [ch_num ].engine_b );
383
384
384
385
engine_b &= ~IQS269_CHx_ENG_B_ATI_BASE_MASK ;
385
386
engine_b |= base ;
386
387
387
- iqs269 -> ch_reg [ch_num ].engine_b = cpu_to_be16 (engine_b );
388
+ ch_reg [ch_num ].engine_b = cpu_to_be16 (engine_b );
388
389
iqs269 -> ati_current = false;
389
390
390
391
mutex_unlock (& iqs269 -> lock );
@@ -395,13 +396,14 @@ static int iqs269_ati_base_set(struct iqs269_private *iqs269,
395
396
static int iqs269_ati_base_get (struct iqs269_private * iqs269 ,
396
397
unsigned int ch_num , unsigned int * base )
397
398
{
399
+ struct iqs269_ch_reg * ch_reg = iqs269 -> sys_reg .ch_reg ;
398
400
u16 engine_b ;
399
401
400
402
if (ch_num >= IQS269_NUM_CH )
401
403
return - EINVAL ;
402
404
403
405
mutex_lock (& iqs269 -> lock );
404
- engine_b = be16_to_cpu (iqs269 -> ch_reg [ch_num ].engine_b );
406
+ engine_b = be16_to_cpu (ch_reg [ch_num ].engine_b );
405
407
mutex_unlock (& iqs269 -> lock );
406
408
407
409
switch (engine_b & IQS269_CHx_ENG_B_ATI_BASE_MASK ) {
@@ -429,6 +431,7 @@ static int iqs269_ati_base_get(struct iqs269_private *iqs269,
429
431
static int iqs269_ati_target_set (struct iqs269_private * iqs269 ,
430
432
unsigned int ch_num , unsigned int target )
431
433
{
434
+ struct iqs269_ch_reg * ch_reg = iqs269 -> sys_reg .ch_reg ;
432
435
u16 engine_b ;
433
436
434
437
if (ch_num >= IQS269_NUM_CH )
@@ -439,12 +442,12 @@ static int iqs269_ati_target_set(struct iqs269_private *iqs269,
439
442
440
443
mutex_lock (& iqs269 -> lock );
441
444
442
- engine_b = be16_to_cpu (iqs269 -> ch_reg [ch_num ].engine_b );
445
+ engine_b = be16_to_cpu (ch_reg [ch_num ].engine_b );
443
446
444
447
engine_b &= ~IQS269_CHx_ENG_B_ATI_TARGET_MASK ;
445
448
engine_b |= target / 32 ;
446
449
447
- iqs269 -> ch_reg [ch_num ].engine_b = cpu_to_be16 (engine_b );
450
+ ch_reg [ch_num ].engine_b = cpu_to_be16 (engine_b );
448
451
iqs269 -> ati_current = false;
449
452
450
453
mutex_unlock (& iqs269 -> lock );
@@ -455,13 +458,14 @@ static int iqs269_ati_target_set(struct iqs269_private *iqs269,
455
458
static int iqs269_ati_target_get (struct iqs269_private * iqs269 ,
456
459
unsigned int ch_num , unsigned int * target )
457
460
{
461
+ struct iqs269_ch_reg * ch_reg = iqs269 -> sys_reg .ch_reg ;
458
462
u16 engine_b ;
459
463
460
464
if (ch_num >= IQS269_NUM_CH )
461
465
return - EINVAL ;
462
466
463
467
mutex_lock (& iqs269 -> lock );
464
- engine_b = be16_to_cpu (iqs269 -> ch_reg [ch_num ].engine_b );
468
+ engine_b = be16_to_cpu (ch_reg [ch_num ].engine_b );
465
469
mutex_unlock (& iqs269 -> lock );
466
470
467
471
* target = (engine_b & IQS269_CHx_ENG_B_ATI_TARGET_MASK ) * 32 ;
@@ -531,13 +535,7 @@ static int iqs269_parse_chan(struct iqs269_private *iqs269,
531
535
if (fwnode_property_present (ch_node , "azoteq,slider1-select" ))
532
536
iqs269 -> sys_reg .slider_select [1 ] |= BIT (reg );
533
537
534
- ch_reg = & iqs269 -> ch_reg [reg ];
535
-
536
- error = regmap_raw_read (iqs269 -> regmap ,
537
- IQS269_CHx_SETTINGS + reg * sizeof (* ch_reg ) / 2 ,
538
- ch_reg , sizeof (* ch_reg ));
539
- if (error )
540
- return error ;
538
+ ch_reg = & iqs269 -> sys_reg .ch_reg [reg ];
541
539
542
540
error = iqs269_parse_mask (ch_node , "azoteq,rx-enable" ,
543
541
& ch_reg -> rx_enable );
@@ -1042,10 +1040,8 @@ static int iqs269_parse_prop(struct iqs269_private *iqs269)
1042
1040
1043
1041
static int iqs269_dev_init (struct iqs269_private * iqs269 )
1044
1042
{
1045
- struct iqs269_sys_reg * sys_reg = & iqs269 -> sys_reg ;
1046
- struct iqs269_ch_reg * ch_reg ;
1047
1043
unsigned int val ;
1048
- int error , i ;
1044
+ int error ;
1049
1045
1050
1046
mutex_lock (& iqs269 -> lock );
1051
1047
@@ -1055,27 +1051,8 @@ static int iqs269_dev_init(struct iqs269_private *iqs269)
1055
1051
if (error )
1056
1052
goto err_mutex ;
1057
1053
1058
- for (i = 0 ; i < IQS269_NUM_CH ; i ++ ) {
1059
- if (!(sys_reg -> active & BIT (i )))
1060
- continue ;
1061
-
1062
- ch_reg = & iqs269 -> ch_reg [i ];
1063
-
1064
- error = regmap_raw_write (iqs269 -> regmap ,
1065
- IQS269_CHx_SETTINGS + i *
1066
- sizeof (* ch_reg ) / 2 , ch_reg ,
1067
- sizeof (* ch_reg ));
1068
- if (error )
1069
- goto err_mutex ;
1070
- }
1071
-
1072
- /*
1073
- * The REDO-ATI and ATI channel selection fields must be written in the
1074
- * same block write, so every field between registers 0x80 through 0x8B
1075
- * (inclusive) must be written as well.
1076
- */
1077
- error = regmap_raw_write (iqs269 -> regmap , IQS269_SYS_SETTINGS , sys_reg ,
1078
- sizeof (* sys_reg ));
1054
+ error = regmap_raw_write (iqs269 -> regmap , IQS269_SYS_SETTINGS ,
1055
+ & iqs269 -> sys_reg , sizeof (iqs269 -> sys_reg ));
1079
1056
if (error )
1080
1057
goto err_mutex ;
1081
1058
@@ -1349,6 +1326,7 @@ static ssize_t hall_bin_show(struct device *dev,
1349
1326
struct device_attribute * attr , char * buf )
1350
1327
{
1351
1328
struct iqs269_private * iqs269 = dev_get_drvdata (dev );
1329
+ struct iqs269_ch_reg * ch_reg = iqs269 -> sys_reg .ch_reg ;
1352
1330
struct i2c_client * client = iqs269 -> client ;
1353
1331
unsigned int val ;
1354
1332
int error ;
@@ -1363,8 +1341,8 @@ static ssize_t hall_bin_show(struct device *dev,
1363
1341
if (error )
1364
1342
return error ;
1365
1343
1366
- switch (iqs269 -> ch_reg [IQS269_CHx_HALL_ACTIVE ].rx_enable &
1367
- iqs269 -> ch_reg [IQS269_CHx_HALL_INACTIVE ].rx_enable ) {
1344
+ switch (ch_reg [IQS269_CHx_HALL_ACTIVE ].rx_enable &
1345
+ ch_reg [IQS269_CHx_HALL_INACTIVE ].rx_enable ) {
1368
1346
case IQS269_HALL_PAD_R :
1369
1347
val &= IQS269_CAL_DATA_A_HALL_BIN_R_MASK ;
1370
1348
val >>= IQS269_CAL_DATA_A_HALL_BIN_R_SHIFT ;
@@ -1444,16 +1422,18 @@ static ssize_t rx_enable_show(struct device *dev,
1444
1422
struct device_attribute * attr , char * buf )
1445
1423
{
1446
1424
struct iqs269_private * iqs269 = dev_get_drvdata (dev );
1425
+ struct iqs269_ch_reg * ch_reg = iqs269 -> sys_reg .ch_reg ;
1447
1426
1448
1427
return scnprintf (buf , PAGE_SIZE , "%u\n" ,
1449
- iqs269 -> ch_reg [iqs269 -> ch_num ].rx_enable );
1428
+ ch_reg [iqs269 -> ch_num ].rx_enable );
1450
1429
}
1451
1430
1452
1431
static ssize_t rx_enable_store (struct device * dev ,
1453
1432
struct device_attribute * attr , const char * buf ,
1454
1433
size_t count )
1455
1434
{
1456
1435
struct iqs269_private * iqs269 = dev_get_drvdata (dev );
1436
+ struct iqs269_ch_reg * ch_reg = iqs269 -> sys_reg .ch_reg ;
1457
1437
unsigned int val ;
1458
1438
int error ;
1459
1439
@@ -1466,7 +1446,7 @@ static ssize_t rx_enable_store(struct device *dev,
1466
1446
1467
1447
mutex_lock (& iqs269 -> lock );
1468
1448
1469
- iqs269 -> ch_reg [iqs269 -> ch_num ].rx_enable = val ;
1449
+ ch_reg [iqs269 -> ch_num ].rx_enable = val ;
1470
1450
iqs269 -> ati_current = false;
1471
1451
1472
1452
mutex_unlock (& iqs269 -> lock );
0 commit comments