diff options
Diffstat (limited to 'drivers/usb/phy')
| -rw-r--r-- | drivers/usb/phy/phy-am335x.c | 5 | ||||
| -rw-r--r-- | drivers/usb/phy/phy-generic.c | 68 | ||||
| -rw-r--r-- | drivers/usb/phy/phy-generic.h | 4 | ||||
| -rw-r--r-- | drivers/usb/phy/phy-mxs-usb.c | 2 | ||||
| -rw-r--r-- | drivers/usb/phy/phy-rcar-gen2-usb.c | 4 |
5 files changed, 41 insertions, 42 deletions
diff --git a/drivers/usb/phy/phy-am335x.c b/drivers/usb/phy/phy-am335x.c index 6370e50649d7..0e3c60cb669a 100644 --- a/drivers/usb/phy/phy-am335x.c +++ b/drivers/usb/phy/phy-am335x.c | |||
| @@ -52,8 +52,7 @@ static int am335x_phy_probe(struct platform_device *pdev) | |||
| 52 | return am_phy->id; | 52 | return am_phy->id; |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | ret = usb_phy_gen_create_phy(dev, &am_phy->usb_phy_gen, | 55 | ret = usb_phy_gen_create_phy(dev, &am_phy->usb_phy_gen, NULL); |
| 56 | USB_PHY_TYPE_USB2, 0, false); | ||
| 57 | if (ret) | 56 | if (ret) |
| 58 | return ret; | 57 | return ret; |
| 59 | 58 | ||
| @@ -66,8 +65,6 @@ static int am335x_phy_probe(struct platform_device *pdev) | |||
| 66 | platform_set_drvdata(pdev, am_phy); | 65 | platform_set_drvdata(pdev, am_phy); |
| 67 | 66 | ||
| 68 | return 0; | 67 | return 0; |
| 69 | |||
| 70 | return ret; | ||
| 71 | } | 68 | } |
| 72 | 69 | ||
| 73 | static int am335x_phy_remove(struct platform_device *pdev) | 70 | static int am335x_phy_remove(struct platform_device *pdev) |
diff --git a/drivers/usb/phy/phy-generic.c b/drivers/usb/phy/phy-generic.c index fce3a9e9bb5d..aa6d37b3378a 100644 --- a/drivers/usb/phy/phy-generic.c +++ b/drivers/usb/phy/phy-generic.c | |||
| @@ -48,8 +48,9 @@ void usb_nop_xceiv_register(void) | |||
| 48 | if (pd) | 48 | if (pd) |
| 49 | return; | 49 | return; |
| 50 | pd = platform_device_register_simple("usb_phy_gen_xceiv", -1, NULL, 0); | 50 | pd = platform_device_register_simple("usb_phy_gen_xceiv", -1, NULL, 0); |
| 51 | if (!pd) { | 51 | if (IS_ERR(pd)) { |
| 52 | pr_err("Unable to register generic usb transceiver\n"); | 52 | pr_err("Unable to register generic usb transceiver\n"); |
| 53 | pd = NULL; | ||
| 53 | return; | 54 | return; |
| 54 | } | 55 | } |
| 55 | } | 56 | } |
| @@ -150,10 +151,40 @@ static int nop_set_host(struct usb_otg *otg, struct usb_bus *host) | |||
| 150 | } | 151 | } |
| 151 | 152 | ||
| 152 | int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_gen_xceiv *nop, | 153 | int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_gen_xceiv *nop, |
| 153 | enum usb_phy_type type, u32 clk_rate, bool needs_vcc) | 154 | struct usb_phy_gen_xceiv_platform_data *pdata) |
| 154 | { | 155 | { |
| 156 | enum usb_phy_type type = USB_PHY_TYPE_USB2; | ||
| 155 | int err; | 157 | int err; |
| 156 | 158 | ||
| 159 | u32 clk_rate = 0; | ||
| 160 | bool needs_vcc = false; | ||
| 161 | |||
| 162 | nop->reset_active_low = true; /* default behaviour */ | ||
| 163 | |||
| 164 | if (dev->of_node) { | ||
| 165 | struct device_node *node = dev->of_node; | ||
| 166 | enum of_gpio_flags flags = 0; | ||
| 167 | |||
| 168 | if (of_property_read_u32(node, "clock-frequency", &clk_rate)) | ||
| 169 | clk_rate = 0; | ||
| 170 | |||
| 171 | needs_vcc = of_property_read_bool(node, "vcc-supply"); | ||
| 172 | nop->gpio_reset = of_get_named_gpio_flags(node, "reset-gpios", | ||
| 173 | 0, &flags); | ||
| 174 | if (nop->gpio_reset == -EPROBE_DEFER) | ||
| 175 | return -EPROBE_DEFER; | ||
| 176 | |||
| 177 | nop->reset_active_low = flags & OF_GPIO_ACTIVE_LOW; | ||
| 178 | |||
| 179 | } else if (pdata) { | ||
| 180 | type = pdata->type; | ||
| 181 | clk_rate = pdata->clk_rate; | ||
| 182 | needs_vcc = pdata->needs_vcc; | ||
| 183 | nop->gpio_reset = pdata->gpio_reset; | ||
| 184 | } else { | ||
| 185 | nop->gpio_reset = -1; | ||
| 186 | } | ||
| 187 | |||
| 157 | nop->phy.otg = devm_kzalloc(dev, sizeof(*nop->phy.otg), | 188 | nop->phy.otg = devm_kzalloc(dev, sizeof(*nop->phy.otg), |
| 158 | GFP_KERNEL); | 189 | GFP_KERNEL); |
| 159 | if (!nop->phy.otg) | 190 | if (!nop->phy.otg) |
| @@ -218,43 +249,14 @@ EXPORT_SYMBOL_GPL(usb_phy_gen_create_phy); | |||
| 218 | static int usb_phy_gen_xceiv_probe(struct platform_device *pdev) | 249 | static int usb_phy_gen_xceiv_probe(struct platform_device *pdev) |
| 219 | { | 250 | { |
| 220 | struct device *dev = &pdev->dev; | 251 | struct device *dev = &pdev->dev; |
| 221 | struct usb_phy_gen_xceiv_platform_data *pdata = | ||
| 222 | dev_get_platdata(&pdev->dev); | ||
| 223 | struct usb_phy_gen_xceiv *nop; | 252 | struct usb_phy_gen_xceiv *nop; |
| 224 | enum usb_phy_type type = USB_PHY_TYPE_USB2; | ||
| 225 | int err; | 253 | int err; |
| 226 | u32 clk_rate = 0; | ||
| 227 | bool needs_vcc = false; | ||
| 228 | 254 | ||
| 229 | nop = devm_kzalloc(dev, sizeof(*nop), GFP_KERNEL); | 255 | nop = devm_kzalloc(dev, sizeof(*nop), GFP_KERNEL); |
| 230 | if (!nop) | 256 | if (!nop) |
| 231 | return -ENOMEM; | 257 | return -ENOMEM; |
| 232 | 258 | ||
| 233 | nop->reset_active_low = true; /* default behaviour */ | 259 | err = usb_phy_gen_create_phy(dev, nop, dev_get_platdata(&pdev->dev)); |
| 234 | |||
| 235 | if (dev->of_node) { | ||
| 236 | struct device_node *node = dev->of_node; | ||
| 237 | enum of_gpio_flags flags; | ||
| 238 | |||
| 239 | if (of_property_read_u32(node, "clock-frequency", &clk_rate)) | ||
| 240 | clk_rate = 0; | ||
| 241 | |||
| 242 | needs_vcc = of_property_read_bool(node, "vcc-supply"); | ||
| 243 | nop->gpio_reset = of_get_named_gpio_flags(node, "reset-gpios", | ||
| 244 | 0, &flags); | ||
| 245 | if (nop->gpio_reset == -EPROBE_DEFER) | ||
| 246 | return -EPROBE_DEFER; | ||
| 247 | |||
| 248 | nop->reset_active_low = flags & OF_GPIO_ACTIVE_LOW; | ||
| 249 | |||
| 250 | } else if (pdata) { | ||
| 251 | type = pdata->type; | ||
| 252 | clk_rate = pdata->clk_rate; | ||
| 253 | needs_vcc = pdata->needs_vcc; | ||
| 254 | nop->gpio_reset = pdata->gpio_reset; | ||
| 255 | } | ||
| 256 | |||
| 257 | err = usb_phy_gen_create_phy(dev, nop, type, clk_rate, needs_vcc); | ||
| 258 | if (err) | 260 | if (err) |
| 259 | return err; | 261 | return err; |
| 260 | 262 | ||
| @@ -271,8 +273,6 @@ static int usb_phy_gen_xceiv_probe(struct platform_device *pdev) | |||
| 271 | platform_set_drvdata(pdev, nop); | 273 | platform_set_drvdata(pdev, nop); |
| 272 | 274 | ||
| 273 | return 0; | 275 | return 0; |
| 274 | |||
| 275 | return err; | ||
| 276 | } | 276 | } |
| 277 | 277 | ||
| 278 | static int usb_phy_gen_xceiv_remove(struct platform_device *pdev) | 278 | static int usb_phy_gen_xceiv_remove(struct platform_device *pdev) |
diff --git a/drivers/usb/phy/phy-generic.h b/drivers/usb/phy/phy-generic.h index d2a220d81734..38a81f307b82 100644 --- a/drivers/usb/phy/phy-generic.h +++ b/drivers/usb/phy/phy-generic.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _PHY_GENERIC_H_ | 1 | #ifndef _PHY_GENERIC_H_ |
| 2 | #define _PHY_GENERIC_H_ | 2 | #define _PHY_GENERIC_H_ |
| 3 | 3 | ||
| 4 | #include <linux/usb/usb_phy_gen_xceiv.h> | ||
| 5 | |||
| 4 | struct usb_phy_gen_xceiv { | 6 | struct usb_phy_gen_xceiv { |
| 5 | struct usb_phy phy; | 7 | struct usb_phy phy; |
| 6 | struct device *dev; | 8 | struct device *dev; |
| @@ -14,6 +16,6 @@ int usb_gen_phy_init(struct usb_phy *phy); | |||
| 14 | void usb_gen_phy_shutdown(struct usb_phy *phy); | 16 | void usb_gen_phy_shutdown(struct usb_phy *phy); |
| 15 | 17 | ||
| 16 | int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_gen_xceiv *nop, | 18 | int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_gen_xceiv *nop, |
| 17 | enum usb_phy_type type, u32 clk_rate, bool needs_vcc); | 19 | struct usb_phy_gen_xceiv_platform_data *pdata); |
| 18 | 20 | ||
| 19 | #endif | 21 | #endif |
diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c index fdd33b44dbd3..545844b7e796 100644 --- a/drivers/usb/phy/phy-mxs-usb.c +++ b/drivers/usb/phy/phy-mxs-usb.c | |||
| @@ -164,7 +164,7 @@ static int mxs_phy_probe(struct platform_device *pdev) | |||
| 164 | 164 | ||
| 165 | mxs_phy->clk = clk; | 165 | mxs_phy->clk = clk; |
| 166 | 166 | ||
| 167 | platform_set_drvdata(pdev, &mxs_phy->phy); | 167 | platform_set_drvdata(pdev, mxs_phy); |
| 168 | 168 | ||
| 169 | ret = usb_add_phy_dev(&mxs_phy->phy); | 169 | ret = usb_add_phy_dev(&mxs_phy->phy); |
| 170 | if (ret) | 170 | if (ret) |
diff --git a/drivers/usb/phy/phy-rcar-gen2-usb.c b/drivers/usb/phy/phy-rcar-gen2-usb.c index a99a6953f11c..db3ab34cddb4 100644 --- a/drivers/usb/phy/phy-rcar-gen2-usb.c +++ b/drivers/usb/phy/phy-rcar-gen2-usb.c | |||
| @@ -107,10 +107,10 @@ static void __rcar_gen2_usb_phy_init(struct rcar_gen2_usb_phy_priv *priv) | |||
| 107 | clk_prepare_enable(priv->clk); | 107 | clk_prepare_enable(priv->clk); |
| 108 | 108 | ||
| 109 | /* Set USB channels in the USBHS UGCTRL2 register */ | 109 | /* Set USB channels in the USBHS UGCTRL2 register */ |
| 110 | val = ioread32(priv->base); | 110 | val = ioread32(priv->base + USBHS_UGCTRL2_REG); |
| 111 | val &= ~(USBHS_UGCTRL2_USB0_HS | USBHS_UGCTRL2_USB2_SS); | 111 | val &= ~(USBHS_UGCTRL2_USB0_HS | USBHS_UGCTRL2_USB2_SS); |
| 112 | val |= priv->ugctrl2; | 112 | val |= priv->ugctrl2; |
| 113 | iowrite32(val, priv->base); | 113 | iowrite32(val, priv->base + USBHS_UGCTRL2_REG); |
| 114 | } | 114 | } |
| 115 | 115 | ||
| 116 | /* Shutdown USB channels */ | 116 | /* Shutdown USB channels */ |
