[RFC PATCH 04/23] at91: Make UDC device common
Ryan Mallon
ryan at bluewatersys.com
Tue Apr 19 21:10:07 EDT 2011
Replace the individual UDC device code for each at91 variant with a
single implementation in devices.c
Signed-off-by: Ryan Mallon <ryan at bluewatersys.com>
---
arch/arm/mach-at91/at572d940hf_devices.c | 52 +++--------------------------
arch/arm/mach-at91/at91rm9200_devices.c | 48 ++-------------------------
arch/arm/mach-at91/at91sam9260_devices.c | 48 ++-------------------------
arch/arm/mach-at91/at91sam9261_devices.c | 47 ++------------------------
arch/arm/mach-at91/at91sam9263_devices.c | 48 ++-------------------------
arch/arm/mach-at91/devices.c | 52 ++++++++++++++++++++++++++++++
arch/arm/mach-at91/devices.h | 1 +
7 files changed, 75 insertions(+), 221 deletions(-)
diff --git a/arch/arm/mach-at91/at572d940hf_devices.c b/arch/arm/mach-at91/at572d940hf_devices.c
index 169e5c4..ad74f57 100644
--- a/arch/arm/mach-at91/at572d940hf_devices.c
+++ b/arch/arm/mach-at91/at572d940hf_devices.c
@@ -51,52 +51,11 @@ static struct at91_dev_table_usb_ohci __initdata device_usbh_ohci = {
* USB Device (Gadget)
* -------------------------------------------------------------------- */
-#ifdef CONFIG_USB_GADGET_AT91
-static struct at91_udc_data udc_data;
-
-static struct resource udc_resources[] = {
- [0] = {
- .start = AT572D940HF_BASE_UDP,
- .end = AT572D940HF_BASE_UDP + SZ_16K - 1,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = AT572D940HF_ID_UDP,
- .end = AT572D940HF_ID_UDP,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static struct platform_device at572d940hf_udc_device = {
- .name = "at91_udc",
- .id = -1,
- .dev = {
- .platform_data = &udc_data,
- },
- .resource = udc_resources,
- .num_resources = ARRAY_SIZE(udc_resources),
+static struct __initdata at91_dev_table_basic_device device_udc = {
+ .mmio_base = AT572D940HF_BASE_UDP,
+ .irq = AT572D940HF_ID_UDP,
};
-void __init at91_add_device_udc(struct at91_udc_data *data)
-{
- if (!data)
- return;
-
- if (data->vbus_pin) {
- at91_set_gpio_input(data->vbus_pin, 0);
- at91_set_deglitch(data->vbus_pin, 1);
- }
-
- /* Pullup pin is handled internally */
-
- udc_data = *data;
- platform_device_register(&at572d940hf_udc_device);
-}
-#else
-void __init at91_add_device_udc(struct at91_udc_data *data) {}
-#endif
-
-
/* --------------------------------------------------------------------
* Ethernet
* -------------------------------------------------------------------- */
@@ -115,8 +74,8 @@ static struct __initdata at91_pin_config eth_rmii_pins[] = {
};
static struct __initdata at91_dev_table_ethernet device_eth = {
- .mmio_base = AT91SAM9260_BASE_EMAC,
- .irq = AT91SAM9260_ID_EMAC,
+ .mmio_base = AT572D940HF_BASE_EMAC,
+ .irq = AT572D940HF_ID_EMAC,
.rmii_pins = eth_rmii_pins,
.nr_rmii_pins = ARRAY_SIZE(eth_rmii_pins),
};
@@ -876,6 +835,7 @@ void __init at91_add_device_mAgic(void) {}
static struct at91_device_table __initdata at572d940hf_device_table = {
.ethernet = &device_eth,
.usbh_ohci = &device_usbh_ohci,
+ .udc = &device_udc,
};
void __init at572d940hf_init_devices(void)
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c
index 428b9da..8230d83 100644
--- a/arch/arm/mach-at91/at91rm9200_devices.c
+++ b/arch/arm/mach-at91/at91rm9200_devices.c
@@ -38,52 +38,11 @@ static struct at91_dev_table_usb_ohci __initdata device_usbh_ohci = {
* USB Device (Gadget)
* -------------------------------------------------------------------- */
-#ifdef CONFIG_USB_GADGET_AT91
-static struct at91_udc_data udc_data;
-
-static struct resource udc_resources[] = {
- [0] = {
- .start = AT91RM9200_BASE_UDP,
- .end = AT91RM9200_BASE_UDP + SZ_16K - 1,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = AT91RM9200_ID_UDP,
- .end = AT91RM9200_ID_UDP,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static struct platform_device at91rm9200_udc_device = {
- .name = "at91_udc",
- .id = -1,
- .dev = {
- .platform_data = &udc_data,
- },
- .resource = udc_resources,
- .num_resources = ARRAY_SIZE(udc_resources),
+static struct __initdata at91_dev_table_basic_device device_udc = {
+ .mmio_base = AT91RM9200_BASE_UDP,
+ .irq = AT91RM9200_ID_UDP,
};
-void __init at91_add_device_udc(struct at91_udc_data *data)
-{
- if (!data)
- return;
-
- if (data->vbus_pin) {
- at91_set_gpio_input(data->vbus_pin, 0);
- at91_set_deglitch(data->vbus_pin, 1);
- }
- if (data->pullup_pin)
- at91_set_gpio_output(data->pullup_pin, 0);
-
- udc_data = *data;
- platform_device_register(&at91rm9200_udc_device);
-}
-#else
-void __init at91_add_device_udc(struct at91_udc_data *data) {}
-#endif
-
-
/* --------------------------------------------------------------------
* Ethernet
* -------------------------------------------------------------------- */
@@ -1099,6 +1058,7 @@ void __init at91_add_device_serial(void) {}
static struct at91_device_table __initdata at91rm9200_device_table = {
.ethernet = &device_eth,
.usbh_ohci = &device_usbh_ohci,
+ .udc = &device_udc,
};
void __init at91rm9200_init_devices(void)
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c
index b71e6b0..d743335 100644
--- a/arch/arm/mach-at91/at91sam9260_devices.c
+++ b/arch/arm/mach-at91/at91sam9260_devices.c
@@ -39,52 +39,11 @@ static struct at91_dev_table_usb_ohci __initdata device_usbh_ohci = {
* USB Device (Gadget)
* -------------------------------------------------------------------- */
-#ifdef CONFIG_USB_GADGET_AT91
-static struct at91_udc_data udc_data;
-
-static struct resource udc_resources[] = {
- [0] = {
- .start = AT91SAM9260_BASE_UDP,
- .end = AT91SAM9260_BASE_UDP + SZ_16K - 1,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = AT91SAM9260_ID_UDP,
- .end = AT91SAM9260_ID_UDP,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static struct platform_device at91_udc_device = {
- .name = "at91_udc",
- .id = -1,
- .dev = {
- .platform_data = &udc_data,
- },
- .resource = udc_resources,
- .num_resources = ARRAY_SIZE(udc_resources),
+static struct __initdata at91_dev_table_basic_device device_udc = {
+ .mmio_base = AT91SAM9260_BASE_UDP,
+ .irq = AT91SAM9260_ID_UDP,
};
-void __init at91_add_device_udc(struct at91_udc_data *data)
-{
- if (!data)
- return;
-
- if (data->vbus_pin) {
- at91_set_gpio_input(data->vbus_pin, 0);
- at91_set_deglitch(data->vbus_pin, 1);
- }
-
- /* Pullup pin is handled internally by USB device peripheral */
-
- udc_data = *data;
- platform_device_register(&at91_udc_device);
-}
-#else
-void __init at91_add_device_udc(struct at91_udc_data *data) {}
-#endif
-
-
/* --------------------------------------------------------------------
* Ethernet
* -------------------------------------------------------------------- */
@@ -1255,6 +1214,7 @@ void __init at91_add_device_cf(struct at91_cf_data * data) {}
static struct at91_device_table __initdata at91sam9260_device_table = {
.ethernet = &device_eth,
.usbh_ohci = &device_usbh_ohci,
+ .udc = &device_udc,
};
void __init at91sam9260_init_devices(void)
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c
index 16d5b91..ab194c0 100644
--- a/arch/arm/mach-at91/at91sam9261_devices.c
+++ b/arch/arm/mach-at91/at91sam9261_devices.c
@@ -42,51 +42,11 @@ static struct at91_dev_table_usb_ohci __initdata device_usbh_ohci = {
* USB Device (Gadget)
* -------------------------------------------------------------------- */
-#ifdef CONFIG_USB_GADGET_AT91
-static struct at91_udc_data udc_data;
-
-static struct resource udc_resources[] = {
- [0] = {
- .start = AT91SAM9261_BASE_UDP,
- .end = AT91SAM9261_BASE_UDP + SZ_16K - 1,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = AT91SAM9261_ID_UDP,
- .end = AT91SAM9261_ID_UDP,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static struct platform_device at91sam9261_udc_device = {
- .name = "at91_udc",
- .id = -1,
- .dev = {
- .platform_data = &udc_data,
- },
- .resource = udc_resources,
- .num_resources = ARRAY_SIZE(udc_resources),
+static struct __initdata at91_dev_table_basic_device device_udc = {
+ .mmio_base = AT91SAM9261_BASE_UDP,
+ .irq = AT91SAM9261_ID_UDP,
};
-void __init at91_add_device_udc(struct at91_udc_data *data)
-{
- if (!data)
- return;
-
- if (data->vbus_pin) {
- at91_set_gpio_input(data->vbus_pin, 0);
- at91_set_deglitch(data->vbus_pin, 1);
- }
-
- /* Pullup pin is handled internally by USB device peripheral */
-
- udc_data = *data;
- platform_device_register(&at91sam9261_udc_device);
-}
-#else
-void __init at91_add_device_udc(struct at91_udc_data *data) {}
-#endif
-
/* --------------------------------------------------------------------
* MMC / SD
* -------------------------------------------------------------------- */
@@ -1009,6 +969,7 @@ void __init at91_add_device_serial(void) {}
static struct at91_device_table __initdata at91sam9261_device_table = {
.usbh_ohci = &device_usbh_ohci,
+ .udc = &device_udc,
};
void __init at91sam9261_init_devices(void)
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
index 1f851f6..530e4c6 100644
--- a/arch/arm/mach-at91/at91sam9263_devices.c
+++ b/arch/arm/mach-at91/at91sam9263_devices.c
@@ -42,52 +42,11 @@ static struct at91_dev_table_usb_ohci __initdata device_usbh_ohci = {
* USB Device (Gadget)
* -------------------------------------------------------------------- */
-#ifdef CONFIG_USB_GADGET_AT91
-static struct at91_udc_data udc_data;
-
-static struct resource udc_resources[] = {
- [0] = {
- .start = AT91SAM9263_BASE_UDP,
- .end = AT91SAM9263_BASE_UDP + SZ_16K - 1,
- .flags = IORESOURCE_MEM,
- },
- [1] = {
- .start = AT91SAM9263_ID_UDP,
- .end = AT91SAM9263_ID_UDP,
- .flags = IORESOURCE_IRQ,
- },
-};
-
-static struct platform_device at91_udc_device = {
- .name = "at91_udc",
- .id = -1,
- .dev = {
- .platform_data = &udc_data,
- },
- .resource = udc_resources,
- .num_resources = ARRAY_SIZE(udc_resources),
+static struct __initdata at91_dev_table_basic_device device_udc = {
+ .mmio_base = AT91SAM9263_BASE_UDP,
+ .irq = AT91SAM9263_ID_UDP,
};
-void __init at91_add_device_udc(struct at91_udc_data *data)
-{
- if (!data)
- return;
-
- if (data->vbus_pin) {
- at91_set_gpio_input(data->vbus_pin, 0);
- at91_set_deglitch(data->vbus_pin, 1);
- }
-
- /* Pullup pin is handled internally by USB device peripheral */
-
- udc_data = *data;
- platform_device_register(&at91_udc_device);
-}
-#else
-void __init at91_add_device_udc(struct at91_udc_data *data) {}
-#endif
-
-
/* --------------------------------------------------------------------
* Ethernet
* -------------------------------------------------------------------- */
@@ -1347,6 +1306,7 @@ void __init at91_add_device_serial(void) {}
static struct at91_device_table __initdata at91sam9263_device_table = {
.ethernet = &device_eth,
.usbh_ohci = &device_usbh_ohci,
+ .udc = &device_udc,
};
void __init at91sam9263_init_devices(void)
diff --git a/arch/arm/mach-at91/devices.c b/arch/arm/mach-at91/devices.c
index 7d1f680..28dc002 100644
--- a/arch/arm/mach-at91/devices.c
+++ b/arch/arm/mach-at91/devices.c
@@ -185,6 +185,58 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {}
#endif
/* --------------------------------------------------------------------
+ * USB Device (Gadget)
+ * -------------------------------------------------------------------- */
+#ifdef CONFIG_USB_GADGET_AT91
+
+static struct at91_udc_data udc_data;
+
+static struct resource udc_resources[] = {
+ [0] = {
+ .end = SZ_16K,
+ .flags = IORESOURCE_MEM,
+ },
+ [1] = {
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct platform_device at91_udc_device = {
+ .name = "at91_udc",
+ .id = -1,
+ .dev = {
+ .platform_data = &udc_data,
+ },
+ .resource = udc_resources,
+ .num_resources = ARRAY_SIZE(udc_resources),
+};
+
+void __init at91_add_device_udc(struct at91_udc_data *data)
+{
+ struct at91_dev_table_basic_device *info = devices->udc;
+
+ BUG_ON(!info);
+ init_resource_mem(&udc_resources[0], info->mmio_base);
+ init_resource_irq(&udc_resources[1], info->irq);
+
+ if (!data)
+ return;
+
+ if (data->vbus_pin) {
+ at91_set_gpio_input(data->vbus_pin, 0);
+ at91_set_deglitch(data->vbus_pin, 1);
+ }
+ if (data->pullup_pin)
+ at91_set_gpio_output(data->pullup_pin, 0);
+
+ udc_data = *data;
+ platform_device_register(&at91_udc_device);
+}
+#else
+void __init at91_add_device_udc(struct at91_udc_data *data) {}
+#endif
+
+/* --------------------------------------------------------------------
* Ethernet
* -------------------------------------------------------------------- */
diff --git a/arch/arm/mach-at91/devices.h b/arch/arm/mach-at91/devices.h
index eb4de05..9203f58 100644
--- a/arch/arm/mach-at91/devices.h
+++ b/arch/arm/mach-at91/devices.h
@@ -52,6 +52,7 @@ struct at91_device_table {
struct at91_dev_table_ethernet *ethernet;
struct at91_dev_table_usb_ohci *usbh_ohci;
struct at91_dev_table_basic_device *usbh_ehci;
+ struct at91_dev_table_basic_device *udc;
};
extern void __init at91_init_devices(struct at91_device_table *device_table);
--
1.7.0.4
More information about the linux-arm-kernel
mailing list