Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f98382d authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Greg Kroah-Hartman
Browse files

usb: renesas_usbhs: Add Renesas USBHS Gadget



This patch add usb gadget code to SuperH USBHS.

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent f1407d5c
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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)
+9 −0
Original line number Diff line number Diff line
@@ -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
@@ -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;
}

+2 −0
Original line number Diff line number Diff line
@@ -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
+16 −1
Original line number Diff line number Diff line
@@ -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);
}

+16 −0
Original line number Diff line number Diff line
@@ -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