All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ralf Baechle <ralf@linux-mips.org>
To: Maarten ter Huurne <maarten@treewalker.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org
Cc: Lars-Peter Clausen <lars@metafoo.de>,
	Paul Cercueil <paul@crapouillou.net>,
	linux-mips@linux-mips.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/3] USB: ohci-jz4740: Remove obsolete driver
Date: Fri, 13 May 2016 18:40:17 +0200	[thread overview]
Message-ID: <20160513164017.GL4215@linux-mips.org> (raw)
In-Reply-To: <1461005933-24876-3-git-send-email-maarten@treewalker.org>

Maarten,

if you submit a USB change to the USB mailing list and maintainer the
probability for the maintainer to ack this patch will actuall rise
significantly ;-)

Greg, I assume this patch is ok to merge or do you want to funnel it
hrough your tree?  I think it would be good to take this through the
MIPS tree together with the remainder of the series.

  Ralf

On Mon, Apr 18, 2016 at 08:58:53PM +0200, Maarten ter Huurne wrote:

> The ohci-platform driver can control the clock, while usb-nop-xceiv
> as the PHY can control the vbus regulator. So this JZ4740-specific
> glue is not needed anymore.
> 
> Signed-off-by: Maarten ter Huurne <maarten@treewalker.org>
> ---
>  drivers/usb/host/ohci-hcd.c    |   5 -
>  drivers/usb/host/ohci-jz4740.c | 245 -----------------------------------------
>  2 files changed, 250 deletions(-)
>  delete mode 100644 drivers/usb/host/ohci-jz4740.c
> 
> diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
> index 04dcedf..0449235 100644
> --- a/drivers/usb/host/ohci-hcd.c
> +++ b/drivers/usb/host/ohci-hcd.c
> @@ -1245,11 +1245,6 @@ MODULE_LICENSE ("GPL");
>  #define TMIO_OHCI_DRIVER	ohci_hcd_tmio_driver
>  #endif
>  
> -#ifdef CONFIG_MACH_JZ4740
> -#include "ohci-jz4740.c"
> -#define PLATFORM_DRIVER	ohci_hcd_jz4740_driver
> -#endif
> -
>  #ifdef CONFIG_TILE_USB
>  #include "ohci-tilegx.c"
>  #define PLATFORM_DRIVER		ohci_hcd_tilegx_driver
> diff --git a/drivers/usb/host/ohci-jz4740.c b/drivers/usb/host/ohci-jz4740.c
> deleted file mode 100644
> index 4db78f1..0000000
> --- a/drivers/usb/host/ohci-jz4740.c
> +++ /dev/null
> @@ -1,245 +0,0 @@
> -/*
> - *  Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
> - *
> - *  This program is free software; you can redistribute it and/or modify it
> - *  under  the terms of the GNU General  Public License as published by the
> - *  Free Software Foundation;  either version 2 of the License, or (at your
> - *  option) any later version.
> - *
> - *  You should have received a copy of the  GNU General Public License along
> - *  with this program; if not, write  to the Free Software Foundation, Inc.,
> - *  675 Mass Ave, Cambridge, MA 02139, USA.
> - *
> - */
> -
> -#include <linux/platform_device.h>
> -#include <linux/clk.h>
> -#include <linux/regulator/consumer.h>
> -
> -struct jz4740_ohci_hcd {
> -	struct ohci_hcd ohci_hcd;
> -
> -	struct regulator *vbus;
> -	bool vbus_enabled;
> -	struct clk *clk;
> -};
> -
> -static inline struct jz4740_ohci_hcd *hcd_to_jz4740_hcd(struct usb_hcd *hcd)
> -{
> -	return (struct jz4740_ohci_hcd *)(hcd->hcd_priv);
> -}
> -
> -static inline struct usb_hcd *jz4740_hcd_to_hcd(struct jz4740_ohci_hcd *jz4740_ohci)
> -{
> -	return container_of((void *)jz4740_ohci, struct usb_hcd, hcd_priv);
> -}
> -
> -static int ohci_jz4740_start(struct usb_hcd *hcd)
> -{
> -	struct ohci_hcd *ohci = hcd_to_ohci(hcd);
> -	int	ret;
> -
> -	ret = ohci_init(ohci);
> -	if (ret < 0)
> -		return ret;
> -
> -	ohci->num_ports = 1;
> -
> -	ret = ohci_run(ohci);
> -	if (ret < 0) {
> -		dev_err(hcd->self.controller, "Can not start %s",
> -			hcd->self.bus_name);
> -		ohci_stop(hcd);
> -		return ret;
> -	}
> -	return 0;
> -}
> -
> -static int ohci_jz4740_set_vbus_power(struct jz4740_ohci_hcd *jz4740_ohci,
> -	bool enabled)
> -{
> -	int ret = 0;
> -
> -	if (!jz4740_ohci->vbus)
> -		return 0;
> -
> -	if (enabled && !jz4740_ohci->vbus_enabled) {
> -		ret = regulator_enable(jz4740_ohci->vbus);
> -		if (ret)
> -			dev_err(jz4740_hcd_to_hcd(jz4740_ohci)->self.controller,
> -				"Could not power vbus\n");
> -	} else if (!enabled && jz4740_ohci->vbus_enabled) {
> -		ret = regulator_disable(jz4740_ohci->vbus);
> -	}
> -
> -	if (ret == 0)
> -		jz4740_ohci->vbus_enabled = enabled;
> -
> -	return ret;
> -}
> -
> -static int ohci_jz4740_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
> -	u16 wIndex, char *buf, u16 wLength)
> -{
> -	struct jz4740_ohci_hcd *jz4740_ohci = hcd_to_jz4740_hcd(hcd);
> -	int ret = 0;
> -
> -	switch (typeReq) {
> -	case SetPortFeature:
> -		if (wValue == USB_PORT_FEAT_POWER)
> -			ret = ohci_jz4740_set_vbus_power(jz4740_ohci, true);
> -		break;
> -	case ClearPortFeature:
> -		if (wValue == USB_PORT_FEAT_POWER)
> -			ret = ohci_jz4740_set_vbus_power(jz4740_ohci, false);
> -		break;
> -	}
> -
> -	if (ret)
> -		return ret;
> -
> -	return ohci_hub_control(hcd, typeReq, wValue, wIndex, buf, wLength);
> -}
> -
> -
> -static const struct hc_driver ohci_jz4740_hc_driver = {
> -	.description =		hcd_name,
> -	.product_desc =		"JZ4740 OHCI",
> -	.hcd_priv_size =	sizeof(struct jz4740_ohci_hcd),
> -
> -	/*
> -	 * generic hardware linkage
> -	 */
> -	.irq =			ohci_irq,
> -	.flags =		HCD_USB11 | HCD_MEMORY,
> -
> -	/*
> -	 * basic lifecycle operations
> -	 */
> -	.start =		ohci_jz4740_start,
> -	.stop =			ohci_stop,
> -	.shutdown =		ohci_shutdown,
> -
> -	/*
> -	 * managing i/o requests and associated device resources
> -	 */
> -	.urb_enqueue =		ohci_urb_enqueue,
> -	.urb_dequeue =		ohci_urb_dequeue,
> -	.endpoint_disable =	ohci_endpoint_disable,
> -
> -	/*
> -	 * scheduling support
> -	 */
> -	.get_frame_number =	ohci_get_frame,
> -
> -	/*
> -	 * root hub support
> -	 */
> -	.hub_status_data =	ohci_hub_status_data,
> -	.hub_control =		ohci_jz4740_hub_control,
> -#ifdef	CONFIG_PM
> -	.bus_suspend =		ohci_bus_suspend,
> -	.bus_resume =		ohci_bus_resume,
> -#endif
> -	.start_port_reset =	ohci_start_port_reset,
> -};
> -
> -
> -static int jz4740_ohci_probe(struct platform_device *pdev)
> -{
> -	int ret;
> -	struct usb_hcd *hcd;
> -	struct jz4740_ohci_hcd *jz4740_ohci;
> -	struct resource *res;
> -	int irq;
> -
> -	irq = platform_get_irq(pdev, 0);
> -	if (irq < 0) {
> -		dev_err(&pdev->dev, "Failed to get platform irq\n");
> -		return irq;
> -	}
> -
> -	hcd = usb_create_hcd(&ohci_jz4740_hc_driver, &pdev->dev, "jz4740");
> -	if (!hcd) {
> -		dev_err(&pdev->dev, "Failed to create hcd.\n");
> -		return -ENOMEM;
> -	}
> -
> -	jz4740_ohci = hcd_to_jz4740_hcd(hcd);
> -
> -	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> -	hcd->regs = devm_ioremap_resource(&pdev->dev, res);
> -	if (IS_ERR(hcd->regs)) {
> -		ret = PTR_ERR(hcd->regs);
> -		goto err_free;
> -	}
> -	hcd->rsrc_start = res->start;
> -	hcd->rsrc_len = resource_size(res);
> -
> -	jz4740_ohci->clk = devm_clk_get(&pdev->dev, "uhc");
> -	if (IS_ERR(jz4740_ohci->clk)) {
> -		ret = PTR_ERR(jz4740_ohci->clk);
> -		dev_err(&pdev->dev, "Failed to get clock: %d\n", ret);
> -		goto err_free;
> -	}
> -
> -	jz4740_ohci->vbus = devm_regulator_get(&pdev->dev, "vbus");
> -	if (IS_ERR(jz4740_ohci->vbus))
> -		jz4740_ohci->vbus = NULL;
> -
> -
> -	clk_set_rate(jz4740_ohci->clk, 48000000);
> -	clk_enable(jz4740_ohci->clk);
> -	if (jz4740_ohci->vbus)
> -		ohci_jz4740_set_vbus_power(jz4740_ohci, true);
> -
> -	platform_set_drvdata(pdev, hcd);
> -
> -	ohci_hcd_init(hcd_to_ohci(hcd));
> -
> -	ret = usb_add_hcd(hcd, irq, 0);
> -	if (ret) {
> -		dev_err(&pdev->dev, "Failed to add hcd: %d\n", ret);
> -		goto err_disable;
> -	}
> -	device_wakeup_enable(hcd->self.controller);
> -
> -	return 0;
> -
> -err_disable:
> -	if (jz4740_ohci->vbus)
> -		regulator_disable(jz4740_ohci->vbus);
> -	clk_disable(jz4740_ohci->clk);
> -
> -err_free:
> -	usb_put_hcd(hcd);
> -
> -	return ret;
> -}
> -
> -static int jz4740_ohci_remove(struct platform_device *pdev)
> -{
> -	struct usb_hcd *hcd = platform_get_drvdata(pdev);
> -	struct jz4740_ohci_hcd *jz4740_ohci = hcd_to_jz4740_hcd(hcd);
> -
> -	usb_remove_hcd(hcd);
> -
> -	if (jz4740_ohci->vbus)
> -		regulator_disable(jz4740_ohci->vbus);
> -
> -	clk_disable(jz4740_ohci->clk);
> -
> -	usb_put_hcd(hcd);
> -
> -	return 0;
> -}
> -
> -static struct platform_driver ohci_hcd_jz4740_driver = {
> -	.probe = jz4740_ohci_probe,
> -	.remove = jz4740_ohci_remove,
> -	.driver = {
> -		.name = "jz4740-ohci",
> -	},
> -};
> -
> -MODULE_ALIAS("platform:jz4740-ohci");
> -- 
> 2.6.6

  reply	other threads:[~2016-05-13 16:40 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-18 18:58 [PATCH 1/3] MIPS: JZ4740: Qi LB60: Remove support for AVT2 variant Maarten ter Huurne
2016-04-18 18:58 ` [PATCH 2/3] MIPS: JZ4740: Probe OHCI platform device via DT Maarten ter Huurne
2016-04-18 18:58 ` [PATCH 3/3] USB: ohci-jz4740: Remove obsolete driver Maarten ter Huurne
2016-05-13 16:40   ` Ralf Baechle [this message]
2016-05-13 16:50     ` Greg Kroah-Hartman
2016-04-23 11:57 ` [PATCH 1/3] MIPS: JZ4740: Qi LB60: Remove support for AVT2 variant Lars-Peter Clausen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160513164017.GL4215@linux-mips.org \
    --to=ralf@linux-mips.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=lars@metafoo.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=maarten@treewalker.org \
    --cc=paul@crapouillou.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.