Skip to content

Commit

Permalink
usb: renesas_usbhs: Add Renesas USBHS Gadget
Browse files Browse the repository at this point in the history
This patch add usb gadget code to SuperH USBHS.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Kuninori Morimoto authored and Greg Kroah-Hartman committed Apr 13, 2011
1 parent f1407d5 commit 2f98382
Show file tree
Hide file tree
Showing 6 changed files with 1,402 additions and 1 deletion.
18 changes: 18 additions & 0 deletions drivers/usb/gadget/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,24 @@ config USB_R8A66597
default USB_GADGET
select USB_GADGET_SELECTED

config USB_GADGET_RENESAS_USBHS
boolean "Renesas USBHS"
depends on USB_RENESAS_USBHS
select USB_GADGET_DUALSPEED
help
Renesas USBHS is a discrete USB host and peripheral controller
chip that supports both full and high speed USB 2.0 data transfers.
platform is able to configure endpoint (pipe) style

Say "y" to enable the gadget specific portion of the USBHS driver.


config USB_RENESAS_USBHS_UDC
tristate
depends on USB_GADGET_RENESAS_USBHS
default USB_GADGET
select USB_GADGET_SELECTED

config USB_GADGET_PXA27X
boolean "PXA 27x"
depends on ARCH_PXA && (PXA27x || PXA3xx)
Expand Down
9 changes: 9 additions & 0 deletions drivers/usb/gadget/gadget_chips.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,12 @@
#define gadget_is_ci13xxx_msm(g) 0
#endif

#ifdef CONFIG_USB_GADGET_RENESAS_USBHS
#define gadget_is_renesas_usbhs(g) (!strcmp("renesas_usbhs_udc", (g)->name))
#else
#define gadget_is_renesas_usbhs(g) 0
#endif

/**
* usb_gadget_controller_number - support bcdDevice id convention
* @gadget: the controller being driven
Expand Down Expand Up @@ -207,6 +213,9 @@ static inline int usb_gadget_controller_number(struct usb_gadget *gadget)
return 0x27;
else if (gadget_is_ci13xxx_msm(gadget))
return 0x28;
else if (gadget_is_renesas_usbhs(gadget))
return 0x29;

return -ENOENT;
}

Expand Down
2 changes: 2 additions & 0 deletions drivers/usb/renesas_usbhs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@
obj-$(CONFIG_USB_RENESAS_USBHS) += renesas_usbhs.o

renesas_usbhs-y := common.o mod.o pipe.o

renesas_usbhs-$(CONFIG_USB_RENESAS_USBHS_UDC) += mod_gadget.o
17 changes: 16 additions & 1 deletion drivers/usb/renesas_usbhs/mod.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,17 +94,32 @@ int usbhs_mod_probe(struct usbhs_priv *priv)
struct device *dev = usbhs_priv_to_dev(priv);
int ret;

/*
* install host/gadget driver
*/
ret = usbhs_mod_gadget_probe(priv);
if (ret < 0)
return ret;

/* irq settings */
ret = request_irq(priv->irq, usbhs_interrupt,
IRQF_DISABLED, dev_name(dev), priv);
if (ret)
if (ret) {
dev_err(dev, "irq request err\n");
goto mod_init_gadget_err;
}

return ret;

mod_init_gadget_err:
usbhs_mod_gadget_remove(priv);

return ret;
}

void usbhs_mod_remove(struct usbhs_priv *priv)
{
usbhs_mod_gadget_remove(priv);
free_irq(priv->irq, priv);
}

Expand Down
16 changes: 16 additions & 0 deletions drivers/usb/renesas_usbhs/mod.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,20 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod);
mod->func(param); \
})

/*
* gadget control
*/
#ifdef CONFIG_USB_RENESAS_USBHS_UDC
extern int __devinit usbhs_mod_gadget_probe(struct usbhs_priv *priv);
extern void __devexit usbhs_mod_gadget_remove(struct usbhs_priv *priv);
#else
static inline int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
{
return 0;
}
static inline void usbhs_mod_gadget_remove(struct usbhs_priv *priv)
{
}
#endif

#endif /* RENESAS_USB_MOD_H */
Loading

0 comments on commit 2f98382

Please sign in to comment.