diff options
-rw-r--r-- | drivers/usb/misc/usb251xb.c | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/drivers/usb/misc/usb251xb.c b/drivers/usb/misc/usb251xb.c index 11ec78e45282..9c8f7e2b6740 100644 --- a/drivers/usb/misc/usb251xb.c +++ b/drivers/usb/misc/usb251xb.c @@ -20,12 +20,11 @@ */ #include <linux/delay.h> -#include <linux/gpio.h> +#include <linux/gpio/consumer.h> #include <linux/i2c.h> #include <linux/module.h> #include <linux/nls.h> #include <linux/of_device.h> -#include <linux/of_gpio.h> #include <linux/slab.h> /* Internal Register Set Addresses & Default Values acc. to DS00001692C */ @@ -126,7 +125,7 @@ struct usb251xb { struct device *dev; struct i2c_client *i2c; u8 skip_config; - int gpio_reset; + struct gpio_desc *gpio_reset; u16 vendor_id; u16 product_id; u16 device_id; @@ -234,13 +233,13 @@ static const struct usb251xb_data usb2517i_data = { static void usb251xb_reset(struct usb251xb *hub, int state) { - if (!gpio_is_valid(hub->gpio_reset)) + if (!hub->gpio_reset) return; - gpio_set_value_cansleep(hub->gpio_reset, state); + gpiod_set_value_cansleep(hub->gpio_reset, state); /* wait for hub recovery/stabilization */ - if (state) + if (!state) usleep_range(500, 750); /* >=500us at power on */ else usleep_range(1, 10); /* >=1us at power down */ @@ -259,7 +258,7 @@ static int usb251xb_connect(struct usb251xb *hub) i2c_wb[0] = 0x01; i2c_wb[1] = USB251XB_STATUS_COMMAND_ATTACH; - usb251xb_reset(hub, 1); + usb251xb_reset(hub, 0); err = i2c_smbus_write_i2c_block_data(hub->i2c, USB251XB_ADDR_STATUS_COMMAND, 2, i2c_wb); @@ -309,7 +308,7 @@ static int usb251xb_connect(struct usb251xb *hub) i2c_wb[USB251XB_ADDR_PORT_MAP_7] = hub->port_map7; i2c_wb[USB251XB_ADDR_STATUS_COMMAND] = USB251XB_STATUS_COMMAND_ATTACH; - usb251xb_reset(hub, 1); + usb251xb_reset(hub, 0); /* write registers */ for (i = 0; i < (USB251XB_I2C_REG_SZ / USB251XB_I2C_WRITE_SZ); i++) { @@ -362,19 +361,13 @@ static int usb251xb_get_ofdata(struct usb251xb *hub, else hub->skip_config = 0; - hub->gpio_reset = of_get_named_gpio(np, "reset-gpios", 0); - if (hub->gpio_reset == -EPROBE_DEFER) + hub->gpio_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); + if (PTR_ERR(hub->gpio_reset) == -EPROBE_DEFER) { return -EPROBE_DEFER; - if (gpio_is_valid(hub->gpio_reset)) { - err = devm_gpio_request_one(dev, hub->gpio_reset, - GPIOF_OUT_INIT_LOW, - "usb251xb reset"); - if (err) { - dev_err(dev, - "unable to request GPIO %d as reset pin (%d)\n", - hub->gpio_reset, err); - return err; - } + } else if (IS_ERR(hub->gpio_reset)) { + err = PTR_ERR(hub->gpio_reset); + dev_err(dev, "unable to request GPIO reset pin (%d)\n", err); + return err; } if (of_property_read_u16_array(np, "vendor-id", &hub->vendor_id, 1)) |