148
148
#define IQS269_ATI_POLL_TIMEOUT_US (iqs269->delay_mult * 500000)
149
149
#define IQS269_ATI_STABLE_DELAY_MS (iqs269->delay_mult * 150)
150
150
151
- #define IQS269_PWR_MODE_POLL_SLEEP_US IQS269_ATI_POLL_SLEEP_US
152
- #define IQS269_PWR_MODE_POLL_TIMEOUT_US IQS269_ATI_POLL_TIMEOUT_US
153
-
154
151
#define iqs269_irq_wait () usleep_range(200, 250)
155
152
156
153
enum iqs269_local_cap_size {
@@ -295,7 +292,6 @@ struct iqs269_private {
295
292
struct input_dev * keypad ;
296
293
struct input_dev * slider [IQS269_NUM_SL ];
297
294
unsigned int keycode [ARRAY_SIZE (iqs269_events ) * IQS269_NUM_CH ];
298
- unsigned int suspend_mode ;
299
295
unsigned int delay_mult ;
300
296
unsigned int ch_num ;
301
297
bool hall_enable ;
@@ -767,17 +763,6 @@ static int iqs269_parse_prop(struct iqs269_private *iqs269)
767
763
iqs269 -> hall_enable = device_property_present (& client -> dev ,
768
764
"azoteq,hall-enable" );
769
765
770
- if (!device_property_read_u32 (& client -> dev , "azoteq,suspend-mode" ,
771
- & val )) {
772
- if (val > IQS269_SYS_SETTINGS_PWR_MODE_MAX ) {
773
- dev_err (& client -> dev , "Invalid suspend mode: %u\n" ,
774
- val );
775
- return - EINVAL ;
776
- }
777
-
778
- iqs269 -> suspend_mode = val ;
779
- }
780
-
781
766
error = regmap_raw_read (iqs269 -> regmap , IQS269_SYS_SETTINGS , sys_reg ,
782
767
sizeof (* sys_reg ));
783
768
if (error )
@@ -1005,6 +990,17 @@ static int iqs269_parse_prop(struct iqs269_private *iqs269)
1005
990
general &= ~IQS269_SYS_SETTINGS_DIS_AUTO ;
1006
991
general &= ~IQS269_SYS_SETTINGS_PWR_MODE_MASK ;
1007
992
993
+ if (!device_property_read_u32 (& client -> dev , "azoteq,suspend-mode" ,
994
+ & val )) {
995
+ if (val > IQS269_SYS_SETTINGS_PWR_MODE_MAX ) {
996
+ dev_err (& client -> dev , "Invalid suspend mode: %u\n" ,
997
+ val );
998
+ return - EINVAL ;
999
+ }
1000
+
1001
+ general |= (val << IQS269_SYS_SETTINGS_PWR_MODE_SHIFT );
1002
+ }
1003
+
1008
1004
if (!device_property_read_u32 (& client -> dev , "azoteq,ulp-update" ,
1009
1005
& val )) {
1010
1006
if (val > IQS269_SYS_SETTINGS_ULP_UPDATE_MAX ) {
@@ -1687,59 +1683,30 @@ static int iqs269_probe(struct i2c_client *client)
1687
1683
return error ;
1688
1684
}
1689
1685
1686
+ static u16 iqs269_general_get (struct iqs269_private * iqs269 )
1687
+ {
1688
+ u16 general = be16_to_cpu (iqs269 -> sys_reg .general );
1689
+
1690
+ general &= ~IQS269_SYS_SETTINGS_REDO_ATI ;
1691
+ general &= ~IQS269_SYS_SETTINGS_ACK_RESET ;
1692
+
1693
+ return general | IQS269_SYS_SETTINGS_DIS_AUTO ;
1694
+ }
1695
+
1690
1696
static int iqs269_suspend (struct device * dev )
1691
1697
{
1692
1698
struct iqs269_private * iqs269 = dev_get_drvdata (dev );
1693
1699
struct i2c_client * client = iqs269 -> client ;
1694
- unsigned int val ;
1695
1700
int error ;
1701
+ u16 general = iqs269_general_get (iqs269 );
1696
1702
1697
- if (!iqs269 -> suspend_mode )
1703
+ if (!( general & IQS269_SYS_SETTINGS_PWR_MODE_MASK ) )
1698
1704
return 0 ;
1699
1705
1700
1706
disable_irq (client -> irq );
1701
1707
1702
- /*
1703
- * Automatic power mode switching must be disabled before the device is
1704
- * forced into any particular power mode. In this case, the device will
1705
- * transition into normal-power mode.
1706
- */
1707
- error = regmap_update_bits (iqs269 -> regmap , IQS269_SYS_SETTINGS ,
1708
- IQS269_SYS_SETTINGS_DIS_AUTO , ~0 );
1709
- if (error )
1710
- goto err_irq ;
1711
-
1712
- /*
1713
- * The following check ensures the device has completed its transition
1714
- * into normal-power mode before a manual mode switch is performed.
1715
- */
1716
- error = regmap_read_poll_timeout (iqs269 -> regmap , IQS269_SYS_FLAGS , val ,
1717
- !(val & IQS269_SYS_FLAGS_PWR_MODE_MASK ),
1718
- IQS269_PWR_MODE_POLL_SLEEP_US ,
1719
- IQS269_PWR_MODE_POLL_TIMEOUT_US );
1720
- if (error )
1721
- goto err_irq ;
1722
-
1723
- error = regmap_update_bits (iqs269 -> regmap , IQS269_SYS_SETTINGS ,
1724
- IQS269_SYS_SETTINGS_PWR_MODE_MASK ,
1725
- iqs269 -> suspend_mode <<
1726
- IQS269_SYS_SETTINGS_PWR_MODE_SHIFT );
1727
- if (error )
1728
- goto err_irq ;
1729
-
1730
- /*
1731
- * This last check ensures the device has completed its transition into
1732
- * the desired power mode to prevent any spurious interrupts from being
1733
- * triggered after iqs269_suspend has already returned.
1734
- */
1735
- error = regmap_read_poll_timeout (iqs269 -> regmap , IQS269_SYS_FLAGS , val ,
1736
- (val & IQS269_SYS_FLAGS_PWR_MODE_MASK )
1737
- == (iqs269 -> suspend_mode <<
1738
- IQS269_SYS_FLAGS_PWR_MODE_SHIFT ),
1739
- IQS269_PWR_MODE_POLL_SLEEP_US ,
1740
- IQS269_PWR_MODE_POLL_TIMEOUT_US );
1708
+ error = regmap_write (iqs269 -> regmap , IQS269_SYS_SETTINGS , general );
1741
1709
1742
- err_irq :
1743
1710
iqs269_irq_wait ();
1744
1711
enable_irq (client -> irq );
1745
1712
@@ -1750,43 +1717,20 @@ static int iqs269_resume(struct device *dev)
1750
1717
{
1751
1718
struct iqs269_private * iqs269 = dev_get_drvdata (dev );
1752
1719
struct i2c_client * client = iqs269 -> client ;
1753
- unsigned int val ;
1754
1720
int error ;
1721
+ u16 general = iqs269_general_get (iqs269 );
1755
1722
1756
- if (!iqs269 -> suspend_mode )
1723
+ if (!( general & IQS269_SYS_SETTINGS_PWR_MODE_MASK ) )
1757
1724
return 0 ;
1758
1725
1759
1726
disable_irq (client -> irq );
1760
1727
1761
- error = regmap_update_bits (iqs269 -> regmap , IQS269_SYS_SETTINGS ,
1762
- IQS269_SYS_SETTINGS_PWR_MODE_MASK , 0 );
1763
- if (error )
1764
- goto err_irq ;
1765
-
1766
- /*
1767
- * This check ensures the device has returned to normal-power mode
1768
- * before automatic power mode switching is re-enabled.
1769
- */
1770
- error = regmap_read_poll_timeout (iqs269 -> regmap , IQS269_SYS_FLAGS , val ,
1771
- !(val & IQS269_SYS_FLAGS_PWR_MODE_MASK ),
1772
- IQS269_PWR_MODE_POLL_SLEEP_US ,
1773
- IQS269_PWR_MODE_POLL_TIMEOUT_US );
1774
- if (error )
1775
- goto err_irq ;
1776
-
1777
- error = regmap_update_bits (iqs269 -> regmap , IQS269_SYS_SETTINGS ,
1778
- IQS269_SYS_SETTINGS_DIS_AUTO , 0 );
1779
- if (error )
1780
- goto err_irq ;
1781
-
1782
- /*
1783
- * This step reports any events that may have been "swallowed" as a
1784
- * result of polling PWR_MODE (which automatically acknowledges any
1785
- * pending interrupts).
1786
- */
1787
- error = iqs269_report (iqs269 );
1728
+ error = regmap_write (iqs269 -> regmap , IQS269_SYS_SETTINGS ,
1729
+ general & ~IQS269_SYS_SETTINGS_PWR_MODE_MASK );
1730
+ if (!error )
1731
+ error = regmap_write (iqs269 -> regmap , IQS269_SYS_SETTINGS ,
1732
+ general & ~IQS269_SYS_SETTINGS_DIS_AUTO );
1788
1733
1789
- err_irq :
1790
1734
iqs269_irq_wait ();
1791
1735
enable_irq (client -> irq );
1792
1736
0 commit comments