ARM: pxa: lubbock: pass udc irqs as resource
Lubbock is the only machine that has three IRQs for the UDC. These are currently hardcoded in the driver based on a machine header file. Change this to use platform device resources as we use for the generic IRQ anyway. Cc: Felipe Balbi <balbi@kernel.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: linux-usb@vger.kernel.org Acked-by: Robert Jarzmik <robert.jarzmik@free.fr> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
e6c91e1adf
commit
047dc2a21e
@ -46,7 +46,7 @@
|
||||
|
||||
#include "pxa25x.h"
|
||||
#include <linux/platform_data/asoc-pxa.h>
|
||||
#include <mach/lubbock.h>
|
||||
#include "lubbock.h"
|
||||
#include "udc.h"
|
||||
#include <linux/platform_data/irda-pxaficp.h>
|
||||
#include <linux/platform_data/video-pxafb.h>
|
||||
@ -131,6 +131,13 @@ static struct pxa2xx_udc_mach_info udc_info __initdata = {
|
||||
// no D+ pullup; lubbock can't connect/disconnect in software
|
||||
};
|
||||
|
||||
static struct resource lubbock_udc_resources[] = {
|
||||
DEFINE_RES_MEM(0x40600000, 0x10000),
|
||||
DEFINE_RES_IRQ(IRQ_USB),
|
||||
DEFINE_RES_IRQ(LUBBOCK_USB_IRQ),
|
||||
DEFINE_RES_IRQ(LUBBOCK_USB_DISC_IRQ),
|
||||
};
|
||||
|
||||
/* GPIOs for SA1111 PCMCIA */
|
||||
static struct gpiod_lookup_table sa1111_pcmcia_gpio_table = {
|
||||
.dev_id = "1800",
|
||||
@ -496,6 +503,9 @@ static void __init lubbock_init(void)
|
||||
lubbock_init_pcmcia();
|
||||
|
||||
clk_add_alias("SA1111_CLK", NULL, "GPIO11_CLK", NULL);
|
||||
/* lubbock has two extra IRQs */
|
||||
pxa25x_device_udc.resource = lubbock_udc_resources;
|
||||
pxa25x_device_udc.num_resources = ARRAY_SIZE(lubbock_udc_resources);
|
||||
pxa_set_udc_info(&udc_info);
|
||||
pxa_set_fb_info(NULL, &sharp_lm8v31);
|
||||
pxa_set_mci_info(&lubbock_mci_platform_data);
|
||||
|
@ -1,7 +1,5 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* arch/arm/mach-pxa/include/mach/lubbock.h
|
||||
*
|
||||
* Author: Nicolas Pitre
|
||||
* Created: Jun 15, 2001
|
||||
* Copyright: MontaVista Software Inc.
|
@ -44,10 +44,6 @@
|
||||
#include <linux/usb/gadget.h>
|
||||
#include <linux/usb/otg.h>
|
||||
|
||||
#ifdef CONFIG_ARCH_LUBBOCK
|
||||
#include <mach/lubbock.h>
|
||||
#endif
|
||||
|
||||
#define UDCCR 0x0000 /* UDC Control Register */
|
||||
#define UDC_RES1 0x0004 /* UDC Undocumented - Reserved1 */
|
||||
#define UDC_RES2 0x0008 /* UDC Undocumented - Reserved2 */
|
||||
@ -1578,18 +1574,15 @@ lubbock_vbus_irq(int irq, void *_dev)
|
||||
int vbus;
|
||||
|
||||
dev->stats.irqs++;
|
||||
switch (irq) {
|
||||
case LUBBOCK_USB_IRQ:
|
||||
if (irq == dev->usb_irq) {
|
||||
vbus = 1;
|
||||
disable_irq(LUBBOCK_USB_IRQ);
|
||||
enable_irq(LUBBOCK_USB_DISC_IRQ);
|
||||
break;
|
||||
case LUBBOCK_USB_DISC_IRQ:
|
||||
disable_irq(dev->usb_irq);
|
||||
enable_irq(dev->usb_disc_irq);
|
||||
} else if (irq == dev->usb_disc_irq) {
|
||||
vbus = 0;
|
||||
disable_irq(LUBBOCK_USB_DISC_IRQ);
|
||||
enable_irq(LUBBOCK_USB_IRQ);
|
||||
break;
|
||||
default:
|
||||
disable_irq(dev->usb_disc_irq);
|
||||
enable_irq(dev->usb_irq);
|
||||
} else {
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
@ -2422,20 +2415,28 @@ static int pxa25x_udc_probe(struct platform_device *pdev)
|
||||
|
||||
#ifdef CONFIG_ARCH_LUBBOCK
|
||||
if (machine_is_lubbock()) {
|
||||
retval = devm_request_irq(&pdev->dev, LUBBOCK_USB_DISC_IRQ,
|
||||
dev->usb_irq = platform_get_irq(pdev, 1);
|
||||
if (dev->usb_irq < 0)
|
||||
return dev->usb_irq;
|
||||
|
||||
dev->usb_disc_irq = platform_get_irq(pdev, 2);
|
||||
if (dev->usb_disc_irq < 0)
|
||||
return dev->usb_disc_irq;
|
||||
|
||||
retval = devm_request_irq(&pdev->dev, dev->usb_disc_irq,
|
||||
lubbock_vbus_irq, 0, driver_name,
|
||||
dev);
|
||||
if (retval != 0) {
|
||||
pr_err("%s: can't get irq %i, err %d\n",
|
||||
driver_name, LUBBOCK_USB_DISC_IRQ, retval);
|
||||
driver_name, dev->usb_disc_irq, retval);
|
||||
goto err;
|
||||
}
|
||||
retval = devm_request_irq(&pdev->dev, LUBBOCK_USB_IRQ,
|
||||
retval = devm_request_irq(&pdev->dev, dev->usb_irq,
|
||||
lubbock_vbus_irq, 0, driver_name,
|
||||
dev);
|
||||
if (retval != 0) {
|
||||
pr_err("%s: can't get irq %i, err %d\n",
|
||||
driver_name, LUBBOCK_USB_IRQ, retval);
|
||||
driver_name, dev->usb_irq, retval);
|
||||
goto err;
|
||||
}
|
||||
} else
|
||||
|
@ -117,16 +117,13 @@ struct pxa25x_udc {
|
||||
u64 dma_mask;
|
||||
struct pxa25x_ep ep [PXA_UDC_NUM_ENDPOINTS];
|
||||
void __iomem *regs;
|
||||
int usb_irq;
|
||||
int usb_disc_irq;
|
||||
};
|
||||
#define to_pxa25x(g) (container_of((g), struct pxa25x_udc, gadget))
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef CONFIG_ARCH_LUBBOCK
|
||||
#include <mach/lubbock.h>
|
||||
/* lubbock can also report usb connect/disconnect irqs */
|
||||
#endif
|
||||
|
||||
static struct pxa25x_udc *the_controller;
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
Loading…
Reference in New Issue
Block a user