@@ -28,6 +28,7 @@ struct i2c_hid_of_goodix {
2828 struct regulator * vdd ;
2929 struct regulator * vddio ;
3030 struct gpio_desc * reset_gpio ;
31+ bool no_reset_during_suspend ;
3132 const struct goodix_i2c_hid_timing_data * timings ;
3233};
3334
@@ -37,6 +38,14 @@ static int goodix_i2c_hid_power_up(struct i2chid_ops *ops)
3738 container_of (ops , struct i2c_hid_of_goodix , ops );
3839 int ret ;
3940
41+ /*
42+ * We assert reset GPIO here (instead of during power-down) to ensure
43+ * the device will have a clean state after powering up, just like the
44+ * normal scenarios will have.
45+ */
46+ if (ihid_goodix -> no_reset_during_suspend )
47+ gpiod_set_value_cansleep (ihid_goodix -> reset_gpio , 1 );
48+
4049 ret = regulator_enable (ihid_goodix -> vdd );
4150 if (ret )
4251 return ret ;
@@ -60,7 +69,9 @@ static void goodix_i2c_hid_power_down(struct i2chid_ops *ops)
6069 struct i2c_hid_of_goodix * ihid_goodix =
6170 container_of (ops , struct i2c_hid_of_goodix , ops );
6271
63- gpiod_set_value_cansleep (ihid_goodix -> reset_gpio , 1 );
72+ if (!ihid_goodix -> no_reset_during_suspend )
73+ gpiod_set_value_cansleep (ihid_goodix -> reset_gpio , 1 );
74+
6475 regulator_disable (ihid_goodix -> vddio );
6576 regulator_disable (ihid_goodix -> vdd );
6677}
@@ -91,6 +102,9 @@ static int i2c_hid_of_goodix_probe(struct i2c_client *client)
91102 if (IS_ERR (ihid_goodix -> vddio ))
92103 return PTR_ERR (ihid_goodix -> vddio );
93104
105+ ihid_goodix -> no_reset_during_suspend =
106+ of_property_read_bool (client -> dev .of_node , "goodix,no-reset-during-suspend" );
107+
94108 ihid_goodix -> timings = device_get_match_data (& client -> dev );
95109
96110 return i2c_hid_core_probe (client , & ihid_goodix -> ops , 0x0001 , 0 );
0 commit comments