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: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Alexandre Belloni
2015-08-10 16:23:11 +02:00
committed by Greg Kroah-Hartman
parent be12be546b
commit bd73bfcd44
+66 -85
View File
@@ -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)
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 (pdata) {
at91_for_each_port(i) {
/*
* do not configure PIO if not in relation with
* real USB port on board
*/
if (i >= pdata->ports) {
pdata->vbus_pin[i] = -EINVAL;
pdata->overcurrent_pin[i] = -EINVAL;
break;
}
if (!gpio_is_valid(pdata->vbus_pin[i]))
continue;
gpio = pdata->vbus_pin[i];
ret = gpio_request(gpio, "ohci_vbus");
if (ret) {
dev_err(&pdev->dev,
"can't request vbus gpio %d\n", gpio);
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);
} }
at91_for_each_port(i) { if (!gpio_is_valid(pdata->vbus_pin[i]))
if (!gpio_is_valid(pdata->overcurrent_pin[i])) continue;
continue; gpio = pdata->vbus_pin[i];
gpio = pdata->overcurrent_pin[i];
ret = gpio_request(gpio, "ohci_overcurrent"); ret = gpio_request(gpio, "ohci_vbus");
if (ret) { if (ret) {
dev_err(&pdev->dev, dev_err(&pdev->dev,
"can't request overcurrent gpio %d\n", "can't request vbus gpio %d\n", gpio);
gpio); continue;
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;
}
ret = gpio_direction_input(gpio); ohci_at91_usb_set_power(pdata, i, 1);
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), at91_for_each_port(i) {
ohci_hcd_at91_overcurrent_irq, if (!gpio_is_valid(pdata->overcurrent_pin[i]))
IRQF_SHARED, "ohci_overcurrent", pdev); continue;
if (ret) { gpio = pdata->overcurrent_pin[i];
gpio_free(gpio);
dev_err(&pdev->dev, ret = gpio_request(gpio, "ohci_overcurrent");
"can't get gpio IRQ for overcurrent\n"); if (ret) {
} 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),
ohci_hcd_at91_overcurrent_irq,
IRQF_SHARED, "ohci_overcurrent", pdev);
if (ret) {
gpio_free(gpio);
dev_err(&pdev->dev,
"can't get gpio IRQ for overcurrent\n");
} }
} }