Commit 96b29cac authored by Magnus Damm's avatar Magnus Damm Committed by Greg Kroah-Hartman

staging: emxx_udc: I/O memory and IRQ resource support

Adjust the emxx_udc driver to make use of the standard
driver model to pass I/O memory and IRQ as resources
instead of hard coding those things in the driver.

Needs more work - the VBUS signal is yet not handled.
Signed-off-by: default avatarMagnus Damm <damm+renesas@opensource.se>
Acked-by: default avatarSimon Horman <horms+renesas@verge.net.au>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 33aa8d45
...@@ -3356,37 +3356,38 @@ static int nbu2ss_drv_probe(struct platform_device *pdev) ...@@ -3356,37 +3356,38 @@ static int nbu2ss_drv_probe(struct platform_device *pdev)
{ {
int status = -ENODEV; int status = -ENODEV;
struct nbu2ss_udc *udc; struct nbu2ss_udc *udc;
struct resource *r;
int irq;
void __iomem *mmio_base;
udc = &udc_controller; udc = &udc_controller;
memset(udc, 0, sizeof(struct nbu2ss_udc)); memset(udc, 0, sizeof(struct nbu2ss_udc));
platform_set_drvdata(pdev, udc); platform_set_drvdata(pdev, udc);
/* IO Memory Region */ /* require I/O memory and IRQ to be provided as resources */
if (!request_mem_region(USB_BASE_ADDRESS, USB_BASE_SIZE r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
, driver_name)) { mmio_base = devm_request_and_ioremap(&pdev->dev, r);
if (IS_ERR(mmio_base)) {
dev_err(&pdev->dev, "failed to map I/O memory\n");
return PTR_ERR(mmio_base);
}
ERR("request_mem_region failed\n"); irq = platform_get_irq(pdev, 0);
return -EBUSY; if (irq < 0) {
dev_err(&pdev->dev, "failed to get IRQ\n");
return irq;
} }
status = devm_request_irq(&pdev->dev, irq, _nbu2ss_udc_irq,
0, driver_name, udc);
/* IO Memory */ /* IO Memory */
udc->p_regs = (PT_FC_REGS)ioremap(USB_BASE_ADDRESS, USB_BASE_SIZE); udc->p_regs = (PT_FC_REGS)mmio_base;
if (!udc->p_regs) {
ERR("request_io_mem failed\n");
goto cleanup3;
}
/* USB Function Controller Interrupt */ /* USB Function Controller Interrupt */
status = request_irq(USB_UDC_IRQ_1,
_nbu2ss_udc_irq,
IRQF_DISABLED,
driver_name,
udc);
if (status != 0) { if (status != 0) {
ERR("request_irq(USB_UDC_IRQ_1) failed\n"); ERR("request_irq(USB_UDC_IRQ_1) failed\n");
goto cleanup2; goto cleanup1;
} }
/* Driver Initialization */ /* Driver Initialization */
...@@ -3412,18 +3413,6 @@ static int nbu2ss_drv_probe(struct platform_device *pdev) ...@@ -3412,18 +3413,6 @@ static int nbu2ss_drv_probe(struct platform_device *pdev)
return status; return status;
cleanup1: cleanup1:
/* Interrupt Handler - Release */
free_irq(USB_UDC_IRQ_1, udc);
cleanup2:
/* IO Memory - Release */
if (udc->p_regs)
iounmap(udc->p_regs);
cleanup3:
/* IO Memory Region - Release */
release_mem_region(USB_BASE_ADDRESS, USB_BASE_SIZE);
return status; return status;
} }
...@@ -3455,19 +3444,9 @@ static int __exit nbu2ss_drv_remove(struct platform_device *pdev) ...@@ -3455,19 +3444,9 @@ static int __exit nbu2ss_drv_remove(struct platform_device *pdev)
(void *)ep->virt_buf, ep->phys_buf); (void *)ep->virt_buf, ep->phys_buf);
} }
/* Interrupt Handler - Release */
free_irq(USB_UDC_IRQ_1, udc);
/* Interrupt Handler - Release */ /* Interrupt Handler - Release */
free_irq(INT_VBUS, udc); free_irq(INT_VBUS, udc);
/* IO Memory - Release */
if (udc->p_regs)
iounmap(udc->p_regs);
/* IO Memory Region - Release */
release_mem_region(USB_BASE_ADDRESS, USB_BASE_SIZE);
return 0; return 0;
} }
......
...@@ -47,20 +47,11 @@ ...@@ -47,20 +47,11 @@
/*------------ Board dependence(Resource) */ /*------------ Board dependence(Resource) */
#define USB_BASE_ADDRESS EMXX_USBS1_BASE
#define USB_BASE_SIZE 0x2000
#define USB_UDC_IRQ_0 INT_USBF0
#define USB_UDC_IRQ_1 INT_USBF1
#define VBUS_VALUE GPIO_VBUS #define VBUS_VALUE GPIO_VBUS
/* below hacked up for staging integration */ /* below hacked up for staging integration */
#define GPIO_VBUS 0 /* GPIO_P153 on KZM9D */ #define GPIO_VBUS 0 /* GPIO_P153 on KZM9D */
#define INT_VBUS 0 /* IRQ for GPIO_P153 */ #define INT_VBUS 0 /* IRQ for GPIO_P153 */
#define INT_USBF0 158
#define INT_USBF1 159
#define EMXX_USBS0_BASE 0xe2700000
#define EMXX_USBS1_BASE 0xe2800000
/*------------ Board dependence(Wait) */ /*------------ Board dependence(Wait) */
......
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