fingerprint: fpc: Config power down mode for rst pin

pin 131 (gpp4-3) 3:gpp4  CON(0x1) DAT(0x1) PUD(0x1) DRV(0x0) CON_PDN(0x1) PUD_PDN(0x3)

Bug: 187150932
Test: build pass, verify on device
Change-Id: I7c21a7f7e4350a0e209125b168ce94af11835826
diff --git a/fpc1020_platform_tee.c b/fpc1020_platform_tee.c
index a7a8338..43e631d 100644
--- a/fpc1020_platform_tee.c
+++ b/fpc1020_platform_tee.c
@@ -48,6 +48,8 @@
 
 #define NUM_PARAMS_REG_ENABLE_SET 2
 
+const char *rst_gpio_power_down_state = "rst,power_down";
+
 struct vreg_config {
 	char *name;
 	unsigned long vmin;
@@ -72,6 +74,8 @@
 	struct mutex lock; /* To set/get exported values in sysfs */
 	bool prepared;
 	atomic_t wakeup_enabled; /* Used both in ISR and non-ISR */
+	struct pinctrl *rst_pinctrl;
+	struct pinctrl_state *rst_state;
 };
 
 static int vreg_setup(struct fpc1020_data *fpc1020, const char *name,
@@ -466,6 +470,34 @@
 
 }
 
+static int config_rst_power_down(struct fpc1020_data *fpc_data) {
+
+	struct device *dev = fpc_data->dev;
+	int result = 0;
+
+	fpc_data->rst_pinctrl = devm_pinctrl_get(dev);
+	if (IS_ERR(fpc_data->rst_pinctrl)) {
+         dev_err(dev, "%s: Can't get pinctrl\n",__func__);
+		 return -1;
+	}
+
+	fpc_data->rst_state = pinctrl_lookup_state(fpc_data->rst_pinctrl, rst_gpio_power_down_state);
+	if (IS_ERR_OR_NULL(fpc_data->rst_state)) {
+		dev_err(dev, "%s: Failed to lookup reset lower power state\n",__func__);
+		return -1;
+	}
+
+	result = pinctrl_select_state(fpc_data->rst_pinctrl, fpc_data->rst_state);
+	if (result) {
+		dev_err(dev, "%s: Can not set %s state\n",__func__, rst_gpio_power_down_state);
+		return -1;
+	}
+
+	dev_info(dev, "%s: finish\n",__func__);
+	return 0;
+}
+
+
 static int fpc1020_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
@@ -491,6 +523,11 @@
 		goto exit;
 	}
 
+	// Config reset lower power state
+	rc = config_rst_power_down(fpc1020);
+	if (rc)
+		goto exit;
+
 	// Request IRQ and Reset pin GPIO
 	rc = fpc1020_request_named_gpio(fpc1020, "fpc,gpio_irq",
 			&fpc1020->irq_gpio);