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:
committed by
Greg Kroah-Hartman
parent
be12be546b
commit
bd73bfcd44
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user