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

Commit 15e68a80 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Merge tag 'musb-for-v3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next

USB: MUSB changes for 3.4

Here are a set of changes to the MUSB driver. In summary we have
a patch making modules behave better, there's a fix on debugfs'
error path, a small change removing an unnecessary pm_runtime
call on musb_shutdown() and a fix to relesect the endpoint in
Interrupt context.

This last patch is needed because we must drop musb's lock when
calling request->complete() and that could cause problems if another
thread queues a request and ends up changing MUSB_INDEX register.
parents f7c96f59 39287076
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -456,7 +456,7 @@ static const struct musb_platform_ops am35x_ops = {

static u64 am35x_dmamask = DMA_BIT_MASK(32);

static int __init am35x_probe(struct platform_device *pdev)
static int __devinit am35x_probe(struct platform_device *pdev)
{
	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
	struct platform_device		*musb;
@@ -561,7 +561,7 @@ static int __init am35x_probe(struct platform_device *pdev)
	return ret;
}

static int __exit am35x_remove(struct platform_device *pdev)
static int __devexit am35x_remove(struct platform_device *pdev)
{
	struct am35x_glue	*glue = platform_get_drvdata(pdev);

@@ -630,7 +630,8 @@ static struct dev_pm_ops am35x_pm_ops = {
#endif

static struct platform_driver am35x_driver = {
	.remove		= __exit_p(am35x_remove),
	.probe		= am35x_probe,
	.remove		= __devexit_p(am35x_remove),
	.driver		= {
		.name	= "musb-am35x",
		.pm	= DEV_PM_OPS,
@@ -643,9 +644,9 @@ MODULE_LICENSE("GPL v2");

static int __init am35x_init(void)
{
	return platform_driver_probe(&am35x_driver, am35x_probe);
	return platform_driver_register(&am35x_driver);
}
subsys_initcall(am35x_init);
module_init(am35x_init);

static void __exit am35x_exit(void)
{
+5 −4
Original line number Diff line number Diff line
@@ -463,7 +463,7 @@ static const struct musb_platform_ops bfin_ops = {

static u64 bfin_dmamask = DMA_BIT_MASK(32);

static int __init bfin_probe(struct platform_device *pdev)
static int __devinit bfin_probe(struct platform_device *pdev)
{
	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
	struct platform_device		*musb;
@@ -525,7 +525,7 @@ static int __init bfin_probe(struct platform_device *pdev)
	return ret;
}

static int __exit bfin_remove(struct platform_device *pdev)
static int __devexit bfin_remove(struct platform_device *pdev)
{
	struct bfin_glue		*glue = platform_get_drvdata(pdev);

@@ -575,6 +575,7 @@ static struct dev_pm_ops bfin_pm_ops = {
#endif

static struct platform_driver bfin_driver = {
	.probe		= bfin_probe,
	.remove		= __exit_p(bfin_remove),
	.driver		= {
		.name	= "musb-blackfin",
@@ -588,9 +589,9 @@ MODULE_LICENSE("GPL v2");

static int __init bfin_init(void)
{
	return platform_driver_probe(&bfin_driver, bfin_probe);
	return platform_driver_register(&bfin_driver);
}
subsys_initcall(bfin_init);
module_init(bfin_init);

static void __exit bfin_exit(void)
{
+6 −5
Original line number Diff line number Diff line
@@ -478,7 +478,7 @@ static const struct musb_platform_ops da8xx_ops = {

static u64 da8xx_dmamask = DMA_BIT_MASK(32);

static int __init da8xx_probe(struct platform_device *pdev)
static int __devinit da8xx_probe(struct platform_device *pdev)
{
	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
	struct platform_device		*musb;
@@ -562,7 +562,7 @@ static int __init da8xx_probe(struct platform_device *pdev)
	return ret;
}

static int __exit da8xx_remove(struct platform_device *pdev)
static int __devexit da8xx_remove(struct platform_device *pdev)
{
	struct da8xx_glue		*glue = platform_get_drvdata(pdev);

@@ -576,7 +576,8 @@ static int __exit da8xx_remove(struct platform_device *pdev)
}

static struct platform_driver da8xx_driver = {
	.remove		= __exit_p(da8xx_remove),
	.probe		= da8xx_probe,
	.remove		= __devexit_p(da8xx_remove),
	.driver		= {
		.name	= "musb-da8xx",
	},
@@ -588,9 +589,9 @@ MODULE_LICENSE("GPL v2");

static int __init da8xx_init(void)
{
	return platform_driver_probe(&da8xx_driver, da8xx_probe);
	return platform_driver_register(&da8xx_driver);
}
subsys_initcall(da8xx_init);
module_init(da8xx_init);

static void __exit da8xx_exit(void)
{
+6 −5
Original line number Diff line number Diff line
@@ -511,7 +511,7 @@ static const struct musb_platform_ops davinci_ops = {

static u64 davinci_dmamask = DMA_BIT_MASK(32);

static int __init davinci_probe(struct platform_device *pdev)
static int __devinit davinci_probe(struct platform_device *pdev)
{
	struct musb_hdrc_platform_data	*pdata = pdev->dev.platform_data;
	struct platform_device		*musb;
@@ -594,7 +594,7 @@ static int __init davinci_probe(struct platform_device *pdev)
	return ret;
}

static int __exit davinci_remove(struct platform_device *pdev)
static int __devexit davinci_remove(struct platform_device *pdev)
{
	struct davinci_glue		*glue = platform_get_drvdata(pdev);

@@ -608,7 +608,8 @@ static int __exit davinci_remove(struct platform_device *pdev)
}

static struct platform_driver davinci_driver = {
	.remove		= __exit_p(davinci_remove),
	.probe		= davinci_probe,
	.remove		= __devexit_p(davinci_remove),
	.driver		= {
		.name	= "musb-davinci",
	},
@@ -620,9 +621,9 @@ MODULE_LICENSE("GPL v2");

static int __init davinci_init(void)
{
	return platform_driver_probe(&davinci_driver, davinci_probe);
	return platform_driver_register(&davinci_driver);
}
subsys_initcall(davinci_init);
module_init(davinci_init);

static void __exit davinci_exit(void)
{
+23 −28
Original line number Diff line number Diff line
@@ -1017,12 +1017,12 @@ static void musb_shutdown(struct platform_device *pdev)
	|| defined(CONFIG_USB_MUSB_OMAP2PLUS_MODULE)	\
	|| defined(CONFIG_USB_MUSB_AM35X)		\
	|| defined(CONFIG_USB_MUSB_AM35X_MODULE)
static ushort __initdata fifo_mode = 4;
static ushort __devinitdata fifo_mode = 4;
#elif defined(CONFIG_USB_MUSB_UX500)			\
	|| defined(CONFIG_USB_MUSB_UX500_MODULE)
static ushort __initdata fifo_mode = 5;
static ushort __devinitdata fifo_mode = 5;
#else
static ushort __initdata fifo_mode = 2;
static ushort __devinitdata fifo_mode = 2;
#endif

/* "modprobe ... fifo_mode=1" etc */
@@ -1035,7 +1035,7 @@ MODULE_PARM_DESC(fifo_mode, "initial endpoint configuration");
 */

/* mode 0 - fits in 2KB */
static struct musb_fifo_cfg __initdata mode_0_cfg[] = {
static struct musb_fifo_cfg __devinitdata mode_0_cfg[] = {
{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 512, },
{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 512, },
{ .hw_ep_num = 2, .style = FIFO_RXTX, .maxpacket = 512, },
@@ -1044,7 +1044,7 @@ static struct musb_fifo_cfg __initdata mode_0_cfg[] = {
};

/* mode 1 - fits in 4KB */
static struct musb_fifo_cfg __initdata mode_1_cfg[] = {
static struct musb_fifo_cfg __devinitdata mode_1_cfg[] = {
{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 512, .mode = BUF_DOUBLE, },
{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 512, .mode = BUF_DOUBLE, },
{ .hw_ep_num = 2, .style = FIFO_RXTX, .maxpacket = 512, .mode = BUF_DOUBLE, },
@@ -1053,7 +1053,7 @@ static struct musb_fifo_cfg __initdata mode_1_cfg[] = {
};

/* mode 2 - fits in 4KB */
static struct musb_fifo_cfg __initdata mode_2_cfg[] = {
static struct musb_fifo_cfg __devinitdata mode_2_cfg[] = {
{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 512, },
{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 512, },
{ .hw_ep_num = 2, .style = FIFO_TX,   .maxpacket = 512, },
@@ -1063,7 +1063,7 @@ static struct musb_fifo_cfg __initdata mode_2_cfg[] = {
};

/* mode 3 - fits in 4KB */
static struct musb_fifo_cfg __initdata mode_3_cfg[] = {
static struct musb_fifo_cfg __devinitdata mode_3_cfg[] = {
{ .hw_ep_num = 1, .style = FIFO_TX,   .maxpacket = 512, .mode = BUF_DOUBLE, },
{ .hw_ep_num = 1, .style = FIFO_RX,   .maxpacket = 512, .mode = BUF_DOUBLE, },
{ .hw_ep_num = 2, .style = FIFO_TX,   .maxpacket = 512, },
@@ -1073,7 +1073,7 @@ static struct musb_fifo_cfg __initdata mode_3_cfg[] = {
};

/* mode 4 - fits in 16KB */
static struct musb_fifo_cfg __initdata mode_4_cfg[] = {
static struct musb_fifo_cfg __devinitdata mode_4_cfg[] = {
{ .hw_ep_num =  1, .style = FIFO_TX,   .maxpacket = 512, },
{ .hw_ep_num =  1, .style = FIFO_RX,   .maxpacket = 512, },
{ .hw_ep_num =  2, .style = FIFO_TX,   .maxpacket = 512, },
@@ -1104,7 +1104,7 @@ static struct musb_fifo_cfg __initdata mode_4_cfg[] = {
};

/* mode 5 - fits in 8KB */
static struct musb_fifo_cfg __initdata mode_5_cfg[] = {
static struct musb_fifo_cfg __devinitdata mode_5_cfg[] = {
{ .hw_ep_num =  1, .style = FIFO_TX,   .maxpacket = 512, },
{ .hw_ep_num =  1, .style = FIFO_RX,   .maxpacket = 512, },
{ .hw_ep_num =  2, .style = FIFO_TX,   .maxpacket = 512, },
@@ -1140,7 +1140,7 @@ static struct musb_fifo_cfg __initdata mode_5_cfg[] = {
 *
 * returns negative errno or offset for next fifo.
 */
static int __init
static int __devinit
fifo_setup(struct musb *musb, struct musb_hw_ep  *hw_ep,
		const struct musb_fifo_cfg *cfg, u16 offset)
{
@@ -1211,11 +1211,11 @@ fifo_setup(struct musb *musb, struct musb_hw_ep *hw_ep,
	return offset + (maxpacket << ((c_size & MUSB_FIFOSZ_DPB) ? 1 : 0));
}

static struct musb_fifo_cfg __initdata ep0_cfg = {
static struct musb_fifo_cfg __devinitdata ep0_cfg = {
	.style = FIFO_RXTX, .maxpacket = 64,
};

static int __init ep_config_from_table(struct musb *musb)
static int __devinit ep_config_from_table(struct musb *musb)
{
	const struct musb_fifo_cfg	*cfg;
	unsigned		i, n;
@@ -1306,7 +1306,7 @@ static int __init ep_config_from_table(struct musb *musb)
 * ep_config_from_hw - when MUSB_C_DYNFIFO_DEF is false
 * @param musb the controller
 */
static int __init ep_config_from_hw(struct musb *musb)
static int __devinit ep_config_from_hw(struct musb *musb)
{
	u8 epnum = 0;
	struct musb_hw_ep *hw_ep;
@@ -1353,7 +1353,7 @@ enum { MUSB_CONTROLLER_MHDRC, MUSB_CONTROLLER_HDRC, };
/* Initialize MUSB (M)HDRC part of the USB hardware subsystem;
 * configure endpoints, or take their config from silicon
 */
static int __init musb_core_init(u16 musb_type, struct musb *musb)
static int __devinit musb_core_init(u16 musb_type, struct musb *musb)
{
	u8 reg;
	char *type;
@@ -1589,7 +1589,7 @@ irqreturn_t musb_interrupt(struct musb *musb)
EXPORT_SYMBOL_GPL(musb_interrupt);

#ifndef CONFIG_MUSB_PIO_ONLY
static bool __initdata use_dma = 1;
static bool __devinitdata use_dma = 1;

/* "modprobe ... use_dma=0" etc */
module_param(use_dma, bool, 0);
@@ -1777,7 +1777,7 @@ static void musb_irq_work(struct work_struct *data)
 * Init support
 */

static struct musb *__init
static struct musb *__devinit
allocate_instance(struct device *dev,
		struct musb_hdrc_config *config, void __iomem *mbase)
{
@@ -1853,7 +1853,7 @@ static void musb_free(struct musb *musb)
 * @mregs: virtual address of controller registers,
 *	not yet corrected for platform-specific offsets
 */
static int __init
static int __devinit
musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
{
	int			status;
@@ -2073,7 +2073,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
static u64	*orig_dma_mask;
#endif

static int __init musb_probe(struct platform_device *pdev)
static int __devinit musb_probe(struct platform_device *pdev)
{
	struct device	*dev = &pdev->dev;
	int		irq = platform_get_irq_byname(pdev, "mc");
@@ -2102,7 +2102,7 @@ static int __init musb_probe(struct platform_device *pdev)
	return status;
}

static int __exit musb_remove(struct platform_device *pdev)
static int __devexit musb_remove(struct platform_device *pdev)
{
	struct musb	*musb = dev_to_musb(&pdev->dev);
	void __iomem	*ctrl_base = musb->ctrl_base;
@@ -2112,11 +2112,9 @@ static int __exit musb_remove(struct platform_device *pdev)
	 *  - Peripheral mode: peripheral is deactivated (or never-activated)
	 *  - OTG mode: both roles are deactivated (or never-activated)
	 */
	pm_runtime_get_sync(musb->controller);
	musb_exit_debugfs(musb);
	musb_shutdown(pdev);

	pm_runtime_put(musb->controller);
	musb_free(musb);
	iounmap(ctrl_base);
	device_init_wakeup(&pdev->dev, 0);
@@ -2364,7 +2362,8 @@ static struct platform_driver musb_driver = {
		.owner		= THIS_MODULE,
		.pm		= MUSB_DEV_PM_OPS,
	},
	.remove		= __exit_p(musb_remove),
	.probe		= musb_probe,
	.remove		= __devexit_p(musb_remove),
	.shutdown	= musb_shutdown,
};

@@ -2380,13 +2379,9 @@ static int __init musb_init(void)
		", "
		"otg (peripheral+host)",
		musb_driver_name);
	return platform_driver_probe(&musb_driver, musb_probe);
	return platform_driver_register(&musb_driver);
}

/* make us init after usbcore and i2c (transceivers, regulators, etc)
 * and before usb gadget and host-side drivers start to register
 */
fs_initcall(musb_init);
module_init(musb_init);

static void __exit musb_cleanup(void)
{
Loading