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

Commit 2df033ca authored by Uwe Kleine-König's avatar Uwe Kleine-König Committed by Felipe Balbi
Browse files

usb: dwc3: pci: make better use of gpiod API



Since 39b2bbe3 (gpio: add flags argument to gpiod_get*() functions)
which appeared in v3.17-rc1, the gpiod_get* functions take an additional
parameter that allows to specify direction and initial value for output.

Use this additional parameter and the _optional variant to simplify the
driver and improve error handling. Also expand the comment to explain
why it's not sensible to switch to devm_gpiod_get and why the gpiod_put
is also necessary.

Furthermore this is one caller less that stops us making the flags
argument to gpiod_get*() mandatory.

Tested-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 83b7b67c
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -83,17 +83,23 @@ static int dwc3_pci_quirks(struct pci_dev *pdev)
		acpi_dev_add_driver_gpios(ACPI_COMPANION(&pdev->dev),
					  acpi_dwc3_byt_gpios);

		/* These GPIOs will turn on the USB2 PHY */
		gpio = gpiod_get(&pdev->dev, "cs");
		if (!IS_ERR(gpio)) {
			gpiod_direction_output(gpio, 0);
		/*
		 * These GPIOs will turn on the USB2 PHY. Note that we have to
		 * put the gpio descriptors again here because the phy driver
		 * might want to grab them, too.
		 */
		gpio = gpiod_get_optional(&pdev->dev, "cs", GPIOD_OUT_LOW);
		if (IS_ERR(gpio))
			return PTR_ERR(gpio);

		gpiod_set_value_cansleep(gpio, 1);
		gpiod_put(gpio);
		}

		gpio = gpiod_get(&pdev->dev, "reset");
		if (!IS_ERR(gpio)) {
			gpiod_direction_output(gpio, 0);
		gpio = gpiod_get_optional(&pdev->dev, "reset", GPIOD_OUT_LOW);
		if (IS_ERR(gpio))
			return PTR_ERR(gpio);

		if (gpio) {
			gpiod_set_value_cansleep(gpio, 1);
			gpiod_put(gpio);
			usleep_range(10000, 11000);