| .. | .. |
|---|
| 21 | 21 | #include <linux/clk.h> |
|---|
| 22 | 22 | #include <linux/regulator/consumer.h> |
|---|
| 23 | 23 | #include <linux/of.h> |
|---|
| 24 | | -#include <linux/of_gpio.h> |
|---|
| 25 | | -#include <linux/gpio.h> |
|---|
| 24 | +#include <linux/gpio/consumer.h> |
|---|
| 26 | 25 | #include <linux/delay.h> |
|---|
| 27 | 26 | |
|---|
| 28 | 27 | #include "phy-generic.h" |
|---|
| .. | .. |
|---|
| 204 | 203 | return 0; |
|---|
| 205 | 204 | } |
|---|
| 206 | 205 | |
|---|
| 207 | | -int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop, |
|---|
| 208 | | - struct usb_phy_generic_platform_data *pdata) |
|---|
| 206 | +int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop) |
|---|
| 209 | 207 | { |
|---|
| 210 | 208 | enum usb_phy_type type = USB_PHY_TYPE_USB2; |
|---|
| 211 | 209 | int err = 0; |
|---|
| .. | .. |
|---|
| 221 | 219 | |
|---|
| 222 | 220 | needs_vcc = of_property_read_bool(node, "vcc-supply"); |
|---|
| 223 | 221 | needs_clk = of_property_read_bool(node, "clocks"); |
|---|
| 224 | | - nop->gpiod_reset = devm_gpiod_get_optional(dev, "reset", |
|---|
| 225 | | - GPIOD_ASIS); |
|---|
| 226 | | - err = PTR_ERR_OR_ZERO(nop->gpiod_reset); |
|---|
| 227 | | - if (!err) { |
|---|
| 228 | | - nop->gpiod_vbus = devm_gpiod_get_optional(dev, |
|---|
| 229 | | - "vbus-detect", |
|---|
| 230 | | - GPIOD_ASIS); |
|---|
| 231 | | - err = PTR_ERR_OR_ZERO(nop->gpiod_vbus); |
|---|
| 232 | | - } |
|---|
| 233 | | - } else if (pdata) { |
|---|
| 234 | | - type = pdata->type; |
|---|
| 235 | | - clk_rate = pdata->clk_rate; |
|---|
| 236 | | - needs_vcc = pdata->needs_vcc; |
|---|
| 237 | | - if (gpio_is_valid(pdata->gpio_reset)) { |
|---|
| 238 | | - err = devm_gpio_request_one(dev, pdata->gpio_reset, |
|---|
| 239 | | - GPIOF_ACTIVE_LOW, |
|---|
| 240 | | - dev_name(dev)); |
|---|
| 241 | | - if (!err) |
|---|
| 242 | | - nop->gpiod_reset = |
|---|
| 243 | | - gpio_to_desc(pdata->gpio_reset); |
|---|
| 244 | | - } |
|---|
| 245 | | - nop->gpiod_vbus = pdata->gpiod_vbus; |
|---|
| 222 | + } |
|---|
| 223 | + nop->gpiod_reset = devm_gpiod_get_optional(dev, "reset", |
|---|
| 224 | + GPIOD_ASIS); |
|---|
| 225 | + err = PTR_ERR_OR_ZERO(nop->gpiod_reset); |
|---|
| 226 | + if (!err) { |
|---|
| 227 | + nop->gpiod_vbus = devm_gpiod_get_optional(dev, |
|---|
| 228 | + "vbus-detect", |
|---|
| 229 | + GPIOD_ASIS); |
|---|
| 230 | + err = PTR_ERR_OR_ZERO(nop->gpiod_vbus); |
|---|
| 246 | 231 | } |
|---|
| 247 | 232 | |
|---|
| 248 | 233 | if (err == -EPROBE_DEFER) |
|---|
| .. | .. |
|---|
| 283 | 268 | return -EPROBE_DEFER; |
|---|
| 284 | 269 | } |
|---|
| 285 | 270 | |
|---|
| 271 | + nop->vbus_draw = devm_regulator_get_exclusive(dev, "vbus"); |
|---|
| 272 | + if (PTR_ERR(nop->vbus_draw) == -ENODEV) |
|---|
| 273 | + nop->vbus_draw = NULL; |
|---|
| 274 | + if (IS_ERR(nop->vbus_draw)) |
|---|
| 275 | + return dev_err_probe(dev, PTR_ERR(nop->vbus_draw), |
|---|
| 276 | + "could not get vbus regulator\n"); |
|---|
| 277 | + |
|---|
| 286 | 278 | nop->dev = dev; |
|---|
| 287 | 279 | nop->phy.dev = nop->dev; |
|---|
| 288 | 280 | nop->phy.label = "nop-xceiv"; |
|---|
| .. | .. |
|---|
| 308 | 300 | if (!nop) |
|---|
| 309 | 301 | return -ENOMEM; |
|---|
| 310 | 302 | |
|---|
| 311 | | - err = usb_phy_gen_create_phy(dev, nop, dev_get_platdata(&pdev->dev)); |
|---|
| 303 | + err = usb_phy_gen_create_phy(dev, nop); |
|---|
| 312 | 304 | if (err) |
|---|
| 313 | 305 | return err; |
|---|
| 314 | 306 | if (nop->gpiod_vbus) { |
|---|