struct gpio_desc *rst_gpio;
};
+typedef void (packet_enqueue)(struct usb_hcd *hcd, struct isp1760_qh *qh,
+ struct isp1760_qtd *qtd);
+
static inline struct isp1760_hcd *hcd_to_priv(struct usb_hcd *hcd)
{
return (struct isp1760_hcd *) (hcd->hcd_priv);
kmem_cache_destroy(urb_listitem_cachep);
}
-struct usb_hcd *isp1760_register(phys_addr_t res_start, resource_size_t res_len,
- int irq, unsigned long irqflags,
- struct device *dev, const char *busname,
- unsigned int devflags)
+int isp1760_register(phys_addr_t res_start, resource_size_t res_len, int irq,
+ unsigned long irqflags, struct device *dev,
+ const char *busname, unsigned int devflags)
{
struct usb_hcd *hcd;
struct isp1760_hcd *priv;
int ret;
if (usb_disabled())
- return ERR_PTR(-ENODEV);
+ return -ENODEV;
/* prevent usb-core allocating DMA pages */
dev->dma_mask = NULL;
hcd = usb_create_hcd(&isp1760_hc_driver, dev, dev_name(dev));
if (!hcd)
- return ERR_PTR(-ENOMEM);
+ return -ENOMEM;
priv = hcd_to_priv(hcd);
priv->devflags = devflags;
dev_set_drvdata(dev, hcd);
- return hcd;
+ return 0;
err_unmap:
iounmap(hcd->regs);
err_put:
usb_put_hcd(hcd);
- return ERR_PTR(ret);
+ return ret;
}
void isp1760_unregister(struct device *dev)
#define _ISP1760_HCD_H_
/* exports for if */
-struct usb_hcd *isp1760_register(phys_addr_t res_start, resource_size_t res_len,
- int irq, unsigned long irqflags,
- struct device *dev, const char *busname,
- unsigned int devflags);
+int isp1760_register(phys_addr_t res_start, resource_size_t res_len, int irq,
+ unsigned long irqflags, struct device *dev,
+ const char *busname, unsigned int devflags);
void isp1760_unregister(struct device *dev);
int init_kmem_once(void);
};
-typedef void (packet_enqueue)(struct usb_hcd *hcd, struct isp1760_qh *qh,
- struct isp1760_qtd *qtd);
-
/*
* Device flags that can vary from board to board. All of these
* indicate the most "atypical" case, so that a devflags of 0 is
u8 latency, limit;
__u32 reg_data;
int retry_count;
- struct usb_hcd *hcd;
unsigned int devflags = 0;
int ret_status = 0;
writel(reg_data, iobase + PLX_INT_CSR_REG);
dev->dev.dma_mask = NULL;
- hcd = isp1760_register(pci_mem_phy0, memlength, dev->irq,
- IRQF_SHARED, &dev->dev, dev_name(&dev->dev),
- devflags);
- if (IS_ERR(hcd)) {
- ret_status = -ENODEV;
+ ret_status = isp1760_register(pci_mem_phy0, memlength, dev->irq,
+ IRQF_SHARED, &dev->dev,
+ dev_name(&dev->dev), devflags);
+ if (ret_status < 0)
goto cleanup3;
- }
/* done with PLX IO access */
iounmap(iobase);
struct resource *mem_res;
struct resource *irq_res;
resource_size_t mem_size;
- struct usb_hcd *hcd;
int ret;
mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
devflags |= ISP1760_FLAG_DREQ_POL_HIGH;
}
- hcd = isp1760_register(mem_res->start, mem_size, irq_res->start,
+ ret = isp1760_register(mem_res->start, mem_size, irq_res->start,
irqflags, &pdev->dev, dev_name(&pdev->dev),
devflags);
- if (IS_ERR(hcd)) {
- pr_warning("isp1760: Failed to register the HCD device\n");
- ret = PTR_ERR(hcd);
+ if (ret < 0)
goto cleanup;
- }
pr_info("ISP1760 USB device initialised\n");
return 0;