Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a2f981e authored by Gaurav Singhal's avatar Gaurav Singhal
Browse files

NFC: Fix crash due to invalid use of ese gpio



Some of the targets are not having ese gpio so if we try
to access this pin on these targets, crash is observed.

Change-Id: Ib5a2d7879f1b493bc445ab4a2d32a89f98d872b4
Signed-off-by: default avatarGaurav Singhal <gsinghal@codeaurora.org>
parent e170b405
Loading
Loading
Loading
Loading
+18 −10
Original line number Original line Diff line number Diff line
@@ -324,9 +324,11 @@ static int nqx_ese_pwr(struct nqx_dev *nqx_dev, unsigned long int arg)
	} else if (arg == 3) {
	} else if (arg == 3) {
		if (!nqx_dev->nfc_ven_enabled)
		if (!nqx_dev->nfc_ven_enabled)
			r = 0;
			r = 0;
		else
		else {
			if (gpio_is_valid(nqx_dev->ese_gpio))
				r = gpio_get_value(nqx_dev->ese_gpio);
				r = gpio_get_value(nqx_dev->ese_gpio);
		}
		}
	}
	return r;
	return r;
}
}


@@ -373,12 +375,15 @@ int nfc_ioctl_power_states(struct file *filp, unsigned long arg)
			__func__, nqx_dev);
			__func__, nqx_dev);
		if (gpio_is_valid(nqx_dev->firm_gpio))
		if (gpio_is_valid(nqx_dev->firm_gpio))
			gpio_set_value(nqx_dev->firm_gpio, 0);
			gpio_set_value(nqx_dev->firm_gpio, 0);

		if (gpio_is_valid(nqx_dev->ese_gpio)) {
			if (!gpio_get_value(nqx_dev->ese_gpio)) {
			if (!gpio_get_value(nqx_dev->ese_gpio)) {
				dev_dbg(&nqx_dev->client->dev, "disabling en_gpio\n");
				dev_dbg(&nqx_dev->client->dev, "disabling en_gpio\n");
				gpio_set_value(nqx_dev->en_gpio, 0);
				gpio_set_value(nqx_dev->en_gpio, 0);
			} else {
			} else {
				dev_dbg(&nqx_dev->client->dev, "keeping en_gpio high\n");
				dev_dbg(&nqx_dev->client->dev, "keeping en_gpio high\n");
			}
			}
		}
		r = nqx_clock_deselect(nqx_dev);
		r = nqx_clock_deselect(nqx_dev);
		if (r < 0)
		if (r < 0)
			dev_err(&nqx_dev->client->dev, "unable to disable clock\n");
			dev_err(&nqx_dev->client->dev, "unable to disable clock\n");
@@ -402,10 +407,12 @@ int nfc_ioctl_power_states(struct file *filp, unsigned long arg)
		/* We are switching to Dowload Mode, toggle the enable pin
		/* We are switching to Dowload Mode, toggle the enable pin
		 * in order to set the NFCC in the new mode
		 * in order to set the NFCC in the new mode
		 */
		 */
		if (gpio_is_valid(nqx_dev->ese_gpio)) {
			if (gpio_get_value(nqx_dev->ese_gpio)) {
			if (gpio_get_value(nqx_dev->ese_gpio)) {
				dev_err(&nqx_dev->client->dev, "FW download forbidden while ese is on\n");
				dev_err(&nqx_dev->client->dev, "FW download forbidden while ese is on\n");
				return -EBUSY; /* Device or resource busy */
				return -EBUSY; /* Device or resource busy */
			}
			}
		}
		gpio_set_value(nqx_dev->en_gpio, 1);
		gpio_set_value(nqx_dev->en_gpio, 1);
		msleep(20);
		msleep(20);
		if (gpio_is_valid(nqx_dev->firm_gpio))
		if (gpio_is_valid(nqx_dev->firm_gpio))
@@ -825,6 +832,7 @@ static int nqx_probe(struct i2c_client *client,
	nqx_dev->en_gpio = platform_data->en_gpio;
	nqx_dev->en_gpio = platform_data->en_gpio;
	nqx_dev->irq_gpio = platform_data->irq_gpio;
	nqx_dev->irq_gpio = platform_data->irq_gpio;
	nqx_dev->firm_gpio  = platform_data->firm_gpio;
	nqx_dev->firm_gpio  = platform_data->firm_gpio;
	nqx_dev->ese_gpio = platform_data->ese_gpio;
	nqx_dev->clkreq_gpio = platform_data->clkreq_gpio;
	nqx_dev->clkreq_gpio = platform_data->clkreq_gpio;
	nqx_dev->pdata = platform_data;
	nqx_dev->pdata = platform_data;