66 */
77
88#include <linux/module.h>
9- #include <linux/gpio.h>
9+ #include <linux/gpio/consumer .h>
1010#include <linux/delay.h>
11- #include <linux/of_gpio .h>
11+ #include <linux/of .h>
1212#include <linux/nfc.h>
1313#include <net/nfc/nci.h>
1414#include <net/nfc/nci_core.h>
@@ -112,13 +112,12 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy,
112112
113113 memcpy (& priv -> config , pdata , sizeof (* pdata ));
114114
115- if (gpio_is_valid (priv -> config .reset_n_io )) {
116- rc = gpio_request_one (priv -> config .reset_n_io ,
117- GPIOF_OUT_INIT_LOW ,
118- "nfcmrvl_reset_n" );
119- if (rc < 0 ) {
120- priv -> config .reset_n_io = - EINVAL ;
121- nfc_err (dev , "failed to request reset_n io\n" );
115+ if (!priv -> config .reset_gpio ) {
116+ priv -> config .reset_gpio =
117+ devm_gpiod_get_optional (dev , "reset" , GPIOD_OUT_HIGH );
118+ if (IS_ERR (priv -> config .reset_gpio )) {
119+ priv -> config .reset_gpio = NULL ;
120+ nfc_err (dev , "failed to get reset gpio\n" );
122121 }
123122 }
124123
@@ -144,7 +143,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy,
144143 if (!priv -> ndev ) {
145144 nfc_err (dev , "nci_allocate_device failed\n" );
146145 rc = - ENOMEM ;
147- goto error_free_gpio ;
146+ goto error_free ;
148147 }
149148
150149 rc = nfcmrvl_fw_dnld_init (priv );
@@ -171,9 +170,7 @@ struct nfcmrvl_private *nfcmrvl_nci_register_dev(enum nfcmrvl_phy phy,
171170 nfcmrvl_fw_dnld_deinit (priv );
172171error_free_dev :
173172 nci_free_device (priv -> ndev );
174- error_free_gpio :
175- if (gpio_is_valid (priv -> config .reset_n_io ))
176- gpio_free (priv -> config .reset_n_io );
173+ error_free :
177174 kfree (priv );
178175 return ERR_PTR (rc );
179176}
@@ -189,9 +186,6 @@ void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv)
189186
190187 nfcmrvl_fw_dnld_deinit (priv );
191188
192- if (gpio_is_valid (priv -> config .reset_n_io ))
193- gpio_free (priv -> config .reset_n_io );
194-
195189 nci_free_device (ndev );
196190 kfree (priv );
197191}
@@ -233,34 +227,25 @@ void nfcmrvl_chip_reset(struct nfcmrvl_private *priv)
233227 /* Reset possible fault of previous session */
234228 clear_bit (NFCMRVL_PHY_ERROR , & priv -> flags );
235229
236- if (gpio_is_valid ( priv -> config .reset_n_io ) ) {
230+ if (priv -> config .reset_gpio ) {
237231 nfc_info (priv -> dev , "reset the chip\n" );
238- gpio_set_value (priv -> config .reset_n_io , 0 );
232+ gpiod_set_value (priv -> config .reset_gpio , 1 );
239233 usleep_range (5000 , 10000 );
240- gpio_set_value (priv -> config .reset_n_io , 1 );
234+ gpiod_set_value (priv -> config .reset_gpio , 0 );
241235 } else
242236 nfc_info (priv -> dev , "no reset available on this interface\n" );
243237}
244238
245239void nfcmrvl_chip_halt (struct nfcmrvl_private * priv )
246240{
247- if (gpio_is_valid ( priv -> config .reset_n_io ) )
248- gpio_set_value (priv -> config .reset_n_io , 0 );
241+ if (priv -> config .reset_gpio )
242+ gpiod_set_value (priv -> config .reset_gpio , 1 );
249243}
250244
251245int nfcmrvl_parse_dt (struct device_node * node ,
252246 struct nfcmrvl_platform_data * pdata )
253247{
254- int reset_n_io ;
255-
256- reset_n_io = of_get_named_gpio (node , "reset-n-io" , 0 );
257- if (reset_n_io < 0 ) {
258- pr_info ("no reset-n-io config\n" );
259- } else if (!gpio_is_valid (reset_n_io )) {
260- pr_err ("invalid reset-n-io GPIO\n" );
261- return reset_n_io ;
262- }
263- pdata -> reset_n_io = reset_n_io ;
248+ pdata -> reset_gpio = NULL ;
264249 pdata -> hci_muxed = of_property_read_bool (node , "hci-muxed" );
265250
266251 return 0 ;
0 commit comments