@@ -100,11 +100,11 @@ enum iqs7222_reg_key_id {
100
100
101
101
enum iqs7222_reg_grp_id {
102
102
IQS7222_REG_GRP_STAT ,
103
- IQS7222_REG_GRP_FILT ,
104
103
IQS7222_REG_GRP_CYCLE ,
105
104
IQS7222_REG_GRP_GLBL ,
106
105
IQS7222_REG_GRP_BTN ,
107
106
IQS7222_REG_GRP_CHAN ,
107
+ IQS7222_REG_GRP_FILT ,
108
108
IQS7222_REG_GRP_SLDR ,
109
109
IQS7222_REG_GRP_TPAD ,
110
110
IQS7222_REG_GRP_GPIO ,
@@ -286,6 +286,7 @@ static const struct iqs7222_event_desc iqs7222_tp_events[] = {
286
286
287
287
struct iqs7222_reg_grp_desc {
288
288
u16 base ;
289
+ u16 val_len ;
289
290
int num_row ;
290
291
int num_col ;
291
292
};
@@ -342,6 +343,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = {
342
343
},
343
344
[IQS7222_REG_GRP_FILT ] = {
344
345
.base = 0xAC00 ,
346
+ .val_len = 3 ,
345
347
.num_row = 1 ,
346
348
.num_col = 2 ,
347
349
},
@@ -400,6 +402,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = {
400
402
},
401
403
[IQS7222_REG_GRP_FILT ] = {
402
404
.base = 0xAC00 ,
405
+ .val_len = 3 ,
403
406
.num_row = 1 ,
404
407
.num_col = 2 ,
405
408
},
@@ -454,6 +457,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = {
454
457
},
455
458
[IQS7222_REG_GRP_FILT ] = {
456
459
.base = 0xC400 ,
460
+ .val_len = 3 ,
457
461
.num_row = 1 ,
458
462
.num_col = 2 ,
459
463
},
@@ -496,6 +500,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = {
496
500
},
497
501
[IQS7222_REG_GRP_FILT ] = {
498
502
.base = 0xC400 ,
503
+ .val_len = 3 ,
499
504
.num_row = 1 ,
500
505
.num_col = 2 ,
501
506
},
@@ -543,6 +548,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = {
543
548
},
544
549
[IQS7222_REG_GRP_FILT ] = {
545
550
.base = 0xAA00 ,
551
+ .val_len = 3 ,
546
552
.num_row = 1 ,
547
553
.num_col = 2 ,
548
554
},
@@ -600,6 +606,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = {
600
606
},
601
607
[IQS7222_REG_GRP_FILT ] = {
602
608
.base = 0xAA00 ,
609
+ .val_len = 3 ,
603
610
.num_row = 1 ,
604
611
.num_col = 2 ,
605
612
},
@@ -656,6 +663,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = {
656
663
},
657
664
[IQS7222_REG_GRP_FILT ] = {
658
665
.base = 0xAE00 ,
666
+ .val_len = 3 ,
659
667
.num_row = 1 ,
660
668
.num_col = 2 ,
661
669
},
@@ -712,6 +720,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = {
712
720
},
713
721
[IQS7222_REG_GRP_FILT ] = {
714
722
.base = 0xAE00 ,
723
+ .val_len = 3 ,
715
724
.num_row = 1 ,
716
725
.num_col = 2 ,
717
726
},
@@ -768,6 +777,7 @@ static const struct iqs7222_dev_desc iqs7222_devs[] = {
768
777
},
769
778
[IQS7222_REG_GRP_FILT ] = {
770
779
.base = 0xAE00 ,
780
+ .val_len = 3 ,
771
781
.num_row = 1 ,
772
782
.num_col = 2 ,
773
783
},
@@ -1604,7 +1614,7 @@ static int iqs7222_force_comms(struct iqs7222_private *iqs7222)
1604
1614
}
1605
1615
1606
1616
static int iqs7222_read_burst (struct iqs7222_private * iqs7222 ,
1607
- u16 reg , void * val , u16 num_val )
1617
+ u16 reg , void * val , u16 val_len )
1608
1618
{
1609
1619
u8 reg_buf [sizeof (__be16 )];
1610
1620
int ret , i ;
@@ -1619,7 +1629,7 @@ static int iqs7222_read_burst(struct iqs7222_private *iqs7222,
1619
1629
{
1620
1630
.addr = client -> addr ,
1621
1631
.flags = I2C_M_RD ,
1622
- .len = num_val * sizeof ( __le16 ) ,
1632
+ .len = val_len ,
1623
1633
.buf = (u8 * )val ,
1624
1634
},
1625
1635
};
@@ -1675,7 +1685,7 @@ static int iqs7222_read_word(struct iqs7222_private *iqs7222, u16 reg, u16 *val)
1675
1685
__le16 val_buf ;
1676
1686
int error ;
1677
1687
1678
- error = iqs7222_read_burst (iqs7222 , reg , & val_buf , 1 );
1688
+ error = iqs7222_read_burst (iqs7222 , reg , & val_buf , sizeof ( val_buf ) );
1679
1689
if (error )
1680
1690
return error ;
1681
1691
@@ -1685,10 +1695,9 @@ static int iqs7222_read_word(struct iqs7222_private *iqs7222, u16 reg, u16 *val)
1685
1695
}
1686
1696
1687
1697
static int iqs7222_write_burst (struct iqs7222_private * iqs7222 ,
1688
- u16 reg , const void * val , u16 num_val )
1698
+ u16 reg , const void * val , u16 val_len )
1689
1699
{
1690
1700
int reg_len = reg > U8_MAX ? sizeof (reg ) : sizeof (u8 );
1691
- int val_len = num_val * sizeof (__le16 );
1692
1701
int msg_len = reg_len + val_len ;
1693
1702
int ret , i ;
1694
1703
struct i2c_client * client = iqs7222 -> client ;
@@ -1747,7 +1756,7 @@ static int iqs7222_write_word(struct iqs7222_private *iqs7222, u16 reg, u16 val)
1747
1756
{
1748
1757
__le16 val_buf = cpu_to_le16 (val );
1749
1758
1750
- return iqs7222_write_burst (iqs7222 , reg , & val_buf , 1 );
1759
+ return iqs7222_write_burst (iqs7222 , reg , & val_buf , sizeof ( val_buf ) );
1751
1760
}
1752
1761
1753
1762
static int iqs7222_ati_trigger (struct iqs7222_private * iqs7222 )
@@ -1831,30 +1840,14 @@ static int iqs7222_dev_init(struct iqs7222_private *iqs7222, int dir)
1831
1840
1832
1841
/*
1833
1842
* Acknowledge reset before writing any registers in case the device
1834
- * suffers a spurious reset during initialization. Because this step
1835
- * may change the reserved fields of the second filter beta register,
1836
- * its cache must be updated.
1837
- *
1838
- * Writing the second filter beta register, in turn, may clobber the
1839
- * system status register. As such, the filter beta register pair is
1840
- * written first to protect against this hazard.
1843
+ * suffers a spurious reset during initialization.
1841
1844
*/
1842
1845
if (dir == WRITE ) {
1843
- u16 reg = dev_desc -> reg_grps [IQS7222_REG_GRP_FILT ].base + 1 ;
1844
- u16 filt_setup ;
1845
-
1846
1846
error = iqs7222_write_word (iqs7222 , IQS7222_SYS_SETUP ,
1847
1847
iqs7222 -> sys_setup [0 ] |
1848
1848
IQS7222_SYS_SETUP_ACK_RESET );
1849
1849
if (error )
1850
1850
return error ;
1851
-
1852
- error = iqs7222_read_word (iqs7222 , reg , & filt_setup );
1853
- if (error )
1854
- return error ;
1855
-
1856
- iqs7222 -> filt_setup [1 ] &= GENMASK (7 , 0 );
1857
- iqs7222 -> filt_setup [1 ] |= (filt_setup & ~GENMASK (7 , 0 ));
1858
1851
}
1859
1852
1860
1853
/*
@@ -1883,6 +1876,7 @@ static int iqs7222_dev_init(struct iqs7222_private *iqs7222, int dir)
1883
1876
int num_col = dev_desc -> reg_grps [i ].num_col ;
1884
1877
u16 reg = dev_desc -> reg_grps [i ].base ;
1885
1878
__le16 * val_buf ;
1879
+ u16 val_len = dev_desc -> reg_grps [i ].val_len ? : num_col * sizeof (* val_buf );
1886
1880
u16 * val ;
1887
1881
1888
1882
if (!num_col )
@@ -1900,7 +1894,7 @@ static int iqs7222_dev_init(struct iqs7222_private *iqs7222, int dir)
1900
1894
switch (dir ) {
1901
1895
case READ :
1902
1896
error = iqs7222_read_burst (iqs7222 , reg ,
1903
- val_buf , num_col );
1897
+ val_buf , val_len );
1904
1898
for (k = 0 ; k < num_col ; k ++ )
1905
1899
val [k ] = le16_to_cpu (val_buf [k ]);
1906
1900
break ;
@@ -1909,7 +1903,7 @@ static int iqs7222_dev_init(struct iqs7222_private *iqs7222, int dir)
1909
1903
for (k = 0 ; k < num_col ; k ++ )
1910
1904
val_buf [k ] = cpu_to_le16 (val [k ]);
1911
1905
error = iqs7222_write_burst (iqs7222 , reg ,
1912
- val_buf , num_col );
1906
+ val_buf , val_len );
1913
1907
break ;
1914
1908
1915
1909
default :
@@ -1962,7 +1956,7 @@ static int iqs7222_dev_info(struct iqs7222_private *iqs7222)
1962
1956
int error , i ;
1963
1957
1964
1958
error = iqs7222_read_burst (iqs7222 , IQS7222_PROD_NUM , dev_id ,
1965
- ARRAY_SIZE (dev_id ));
1959
+ sizeof (dev_id ));
1966
1960
if (error )
1967
1961
return error ;
1968
1962
@@ -2915,7 +2909,7 @@ static int iqs7222_report(struct iqs7222_private *iqs7222)
2915
2909
__le16 status [IQS7222_MAX_COLS_STAT ];
2916
2910
2917
2911
error = iqs7222_read_burst (iqs7222 , IQS7222_SYS_STATUS , status ,
2918
- num_stat );
2912
+ num_stat * sizeof ( * status ) );
2919
2913
if (error )
2920
2914
return error ;
2921
2915
0 commit comments