Commit bd73bfcd authored by Alexandre Belloni's avatar Alexandre Belloni Committed by Greg Kroah-Hartman

USB: host: ohci-at91: merge ohci_at91_of_init in ohci_hcd_at91_drv_probe

As device tree support is now mandatory, merge ohci_at91_of_init() in
ohci_hcd_at91_drv_probe().
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent be12be54
...@@ -449,16 +449,17 @@ static const struct of_device_id at91_ohci_dt_ids[] = { ...@@ -449,16 +449,17 @@ static const struct of_device_id at91_ohci_dt_ids[] = {
MODULE_DEVICE_TABLE(of, at91_ohci_dt_ids); MODULE_DEVICE_TABLE(of, at91_ohci_dt_ids);
static int ohci_at91_of_init(struct platform_device *pdev) /*-------------------------------------------------------------------------*/
static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
{ {
struct device_node *np = pdev->dev.of_node; struct device_node *np = pdev->dev.of_node;
int i, gpio, ret;
enum of_gpio_flags flags;
struct at91_usbh_data *pdata; struct at91_usbh_data *pdata;
u32 ports; int i;
int gpio;
if (!np) int ret;
return 0; enum of_gpio_flags flags;
u32 ports;
/* Right now device-tree probed devices don't get dma_mask set. /* Right now device-tree probed devices don't get dma_mask set.
* Since shared usb code relies on it, set it here for now. * Since shared usb code relies on it, set it here for now.
...@@ -489,89 +490,69 @@ static int ohci_at91_of_init(struct platform_device *pdev) ...@@ -489,89 +490,69 @@ static int ohci_at91_of_init(struct platform_device *pdev)
pdev->dev.platform_data = pdata; pdev->dev.platform_data = pdata;
return 0; at91_for_each_port(i) {
} /*
* do not configure PIO if not in relation with
/*-------------------------------------------------------------------------*/ * real USB port on board
*/
static int ohci_hcd_at91_drv_probe(struct platform_device *pdev) if (i >= pdata->ports) {
{ pdata->vbus_pin[i] = -EINVAL;
struct at91_usbh_data *pdata; pdata->overcurrent_pin[i] = -EINVAL;
int i; break;
int gpio; }
int ret;
ret = ohci_at91_of_init(pdev);
if (ret)
return ret;
pdata = dev_get_platdata(&pdev->dev); if (!gpio_is_valid(pdata->vbus_pin[i]))
continue;
gpio = pdata->vbus_pin[i];
if (pdata) { ret = gpio_request(gpio, "ohci_vbus");
at91_for_each_port(i) { if (ret) {
/* dev_err(&pdev->dev,
* do not configure PIO if not in relation with "can't request vbus gpio %d\n", gpio);
* real USB port on board continue;
*/ }
if (i >= pdata->ports) { ret = gpio_direction_output(gpio,
pdata->vbus_pin[i] = -EINVAL; !pdata->vbus_pin_active_low[i]);
pdata->overcurrent_pin[i] = -EINVAL; if (ret) {
break; dev_err(&pdev->dev,
} "can't put vbus gpio %d as output %d\n",
gpio, !pdata->vbus_pin_active_low[i]);
gpio_free(gpio);
continue;
}
if (!gpio_is_valid(pdata->vbus_pin[i])) ohci_at91_usb_set_power(pdata, i, 1);
continue; }
gpio = pdata->vbus_pin[i];
ret = gpio_request(gpio, "ohci_vbus"); at91_for_each_port(i) {
if (ret) { if (!gpio_is_valid(pdata->overcurrent_pin[i]))
dev_err(&pdev->dev, continue;
"can't request vbus gpio %d\n", gpio); gpio = pdata->overcurrent_pin[i];
continue;
}
ret = gpio_direction_output(gpio,
!pdata->vbus_pin_active_low[i]);
if (ret) {
dev_err(&pdev->dev,
"can't put vbus gpio %d as output %d\n",
gpio, !pdata->vbus_pin_active_low[i]);
gpio_free(gpio);
continue;
}
ohci_at91_usb_set_power(pdata, i, 1); ret = gpio_request(gpio, "ohci_overcurrent");
if (ret) {
dev_err(&pdev->dev,
"can't request overcurrent gpio %d\n",
gpio);
continue;
} }
at91_for_each_port(i) { ret = gpio_direction_input(gpio);
if (!gpio_is_valid(pdata->overcurrent_pin[i])) if (ret) {
continue; dev_err(&pdev->dev,
gpio = pdata->overcurrent_pin[i]; "can't configure overcurrent gpio %d as input\n",
gpio);
ret = gpio_request(gpio, "ohci_overcurrent"); gpio_free(gpio);
if (ret) { continue;
dev_err(&pdev->dev, }
"can't request overcurrent gpio %d\n",
gpio);
continue;
}
ret = gpio_direction_input(gpio);
if (ret) {
dev_err(&pdev->dev,
"can't configure overcurrent gpio %d as input\n",
gpio);
gpio_free(gpio);
continue;
}
ret = request_irq(gpio_to_irq(gpio), ret = request_irq(gpio_to_irq(gpio),
ohci_hcd_at91_overcurrent_irq, ohci_hcd_at91_overcurrent_irq,
IRQF_SHARED, "ohci_overcurrent", pdev); IRQF_SHARED, "ohci_overcurrent", pdev);
if (ret) { if (ret) {
gpio_free(gpio); gpio_free(gpio);
dev_err(&pdev->dev, dev_err(&pdev->dev,
"can't get gpio IRQ for overcurrent\n"); "can't get gpio IRQ for overcurrent\n");
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment