linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] MIPS: JZ4740: Qi LB60: Remove support for AVT2 variant
@ 2016-04-18 18:58 Maarten ter Huurne
  2016-04-18 18:58 ` [PATCH 2/3] MIPS: JZ4740: Probe OHCI platform device via DT Maarten ter Huurne
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Maarten ter Huurne @ 2016-04-18 18:58 UTC (permalink / raw)
  To: Ralf Baechle
  Cc: Lars-Peter Clausen, Paul Cercueil, linux-mips, linux-kernel,
	Maarten ter Huurne

AVT2 was a prototype board of which about 5 were made, none of which
are in use anymore.

Signed-off-by: Maarten ter Huurne <maarten@treewalker.org>
---
 arch/mips/jz4740/board-qi_lb60.c | 52 ++--------------------------------------
 1 file changed, 2 insertions(+), 50 deletions(-)

diff --git a/arch/mips/jz4740/board-qi_lb60.c b/arch/mips/jz4740/board-qi_lb60.c
index 934b15b..4e3f9b7a 100644
--- a/arch/mips/jz4740/board-qi_lb60.c
+++ b/arch/mips/jz4740/board-qi_lb60.c
@@ -39,8 +39,6 @@
 
 #include "clock.h"
 
-static bool is_avt2;
-
 /* GPIOs */
 #define QI_LB60_GPIO_SD_CD		JZ_GPIO_PORTD(0)
 #define QI_LB60_GPIO_SD_VCC_EN_N	JZ_GPIO_PORTD(2)
@@ -367,43 +365,12 @@ static struct jz4740_mmc_platform_data qi_lb60_mmc_pdata = {
 	.power_active_low	= 1,
 };
 
-/* OHCI */
-static struct regulator_consumer_supply avt2_usb_regulator_consumer =
-	REGULATOR_SUPPLY("vbus", "jz4740-ohci");
-
-static struct regulator_init_data avt2_usb_regulator_init_data = {
-	.num_consumer_supplies = 1,
-	.consumer_supplies = &avt2_usb_regulator_consumer,
-	.constraints = {
-		.name = "USB power",
-		.min_uV = 5000000,
-		.max_uV = 5000000,
-		.valid_modes_mask = REGULATOR_MODE_NORMAL,
-		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
-	},
-};
-
-static struct fixed_voltage_config avt2_usb_regulator_data = {
-	.supply_name = "USB power",
-	.microvolts = 5000000,
-	.gpio = JZ_GPIO_PORTB(17),
-	.init_data = &avt2_usb_regulator_init_data,
-};
-
-static struct platform_device avt2_usb_regulator_device = {
-	.name = "reg-fixed-voltage",
-	.id = -1,
-	.dev = {
-		.platform_data = &avt2_usb_regulator_data,
-	}
-};
-
+/* beeper */
 static struct pwm_lookup qi_lb60_pwm_lookup[] = {
 	PWM_LOOKUP("jz4740-pwm", 4, "pwm-beeper", NULL, 0,
 		   PWM_POLARITY_NORMAL),
 };
 
-/* beeper */
 static struct platform_device qi_lb60_pwm_beeper = {
 	.name = "pwm-beeper",
 	.id = -1,
@@ -487,11 +454,6 @@ static int __init qi_lb60_init_platform_devices(void)
 	spi_register_board_info(qi_lb60_spi_board_info,
 				ARRAY_SIZE(qi_lb60_spi_board_info));
 
-	if (is_avt2) {
-		platform_device_register(&avt2_usb_regulator_device);
-		platform_device_register(&jz4740_usb_ohci_device);
-	}
-
 	pwm_add_table(qi_lb60_pwm_lookup, ARRAY_SIZE(qi_lb60_pwm_lookup));
 
 	return platform_add_devices(jz_platform_devices,
@@ -499,19 +461,9 @@ static int __init qi_lb60_init_platform_devices(void)
 
 }
 
-static __init int board_avt2(char *str)
-{
-	qi_lb60_mmc_pdata.card_detect_active_low = 1;
-	is_avt2 = true;
-
-	return 1;
-}
-__setup("avt2", board_avt2);
-
 static int __init qi_lb60_board_setup(void)
 {
-	printk(KERN_INFO "Qi Hardware JZ4740 QI %s setup\n",
-		is_avt2 ? "AVT2" : "LB60");
+	printk(KERN_INFO "Qi Hardware JZ4740 QI LB60 setup\n");
 
 	board_gpio_setup();
 
-- 
2.6.6

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] MIPS: JZ4740: Probe OHCI platform device via DT
  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 ` Maarten ter Huurne
  2016-04-18 18:58 ` [PATCH 3/3] USB: ohci-jz4740: Remove obsolete driver Maarten ter Huurne
  2016-04-23 11:57 ` [PATCH 1/3] MIPS: JZ4740: Qi LB60: Remove support for AVT2 variant Lars-Peter Clausen
  2 siblings, 0 replies; 6+ messages in thread
From: Maarten ter Huurne @ 2016-04-18 18:58 UTC (permalink / raw)
  To: Ralf Baechle
  Cc: Lars-Peter Clausen, Paul Cercueil, linux-mips, linux-kernel,
	Maarten ter Huurne

The DT fragment will select the ohci-platform driver, since that can
handle the JZ4740 OHCI just fine. While I don't have a JZ4740-based
board with anything connected to the USB host controller, I did test
the generic OHCI driver successfully on a JZ4770-based board.

The device is disabled by default; boards that want to use it can
override the "status" property. The mass-production Qi LB60 boards
don't use the USB host controller.

Signed-off-by: Maarten ter Huurne <maarten@treewalker.org>
---
 arch/mips/boot/dts/ingenic/jz4740.dtsi       | 14 ++++++++++++++
 arch/mips/include/asm/mach-jz4740/platform.h |  1 -
 arch/mips/jz4740/platform.c                  | 25 -------------------------
 3 files changed, 14 insertions(+), 26 deletions(-)

diff --git a/arch/mips/boot/dts/ingenic/jz4740.dtsi b/arch/mips/boot/dts/ingenic/jz4740.dtsi
index 8b2437c..4a9c8f2 100644
--- a/arch/mips/boot/dts/ingenic/jz4740.dtsi
+++ b/arch/mips/boot/dts/ingenic/jz4740.dtsi
@@ -65,4 +65,18 @@
 		clocks = <&ext>, <&cgu JZ4740_CLK_UART1>;
 		clock-names = "baud", "module";
 	};
+
+	uhc: uhc@13030000 {
+		compatible = "ingenic,jz4740-ohci", "generic-ohci";
+		reg = <0x13030000 0x1000>;
+
+		clocks = <&cgu JZ4740_CLK_UHC>;
+		assigned-clocks = <&cgu JZ4740_CLK_UHC>;
+		assigned-clock-rates = <48000000>;
+
+		interrupt-parent = <&intc>;
+		interrupts = <3>;
+
+		status = "disabled";
+	};
 };
diff --git a/arch/mips/include/asm/mach-jz4740/platform.h b/arch/mips/include/asm/mach-jz4740/platform.h
index 32cfbe6..073b8bf 100644
--- a/arch/mips/include/asm/mach-jz4740/platform.h
+++ b/arch/mips/include/asm/mach-jz4740/platform.h
@@ -19,7 +19,6 @@
 
 #include <linux/platform_device.h>
 
-extern struct platform_device jz4740_usb_ohci_device;
 extern struct platform_device jz4740_udc_device;
 extern struct platform_device jz4740_udc_xceiv_device;
 extern struct platform_device jz4740_mmc_device;
diff --git a/arch/mips/jz4740/platform.c b/arch/mips/jz4740/platform.c
index e8a463b..2f1dab3 100644
--- a/arch/mips/jz4740/platform.c
+++ b/arch/mips/jz4740/platform.c
@@ -32,31 +32,6 @@
 
 #include "clock.h"
 
-/* OHCI controller */
-static struct resource jz4740_usb_ohci_resources[] = {
-	{
-		.start	= JZ4740_UHC_BASE_ADDR,
-		.end	= JZ4740_UHC_BASE_ADDR + 0x1000 - 1,
-		.flags	= IORESOURCE_MEM,
-	},
-	{
-		.start	= JZ4740_IRQ_UHC,
-		.end	= JZ4740_IRQ_UHC,
-		.flags	= IORESOURCE_IRQ,
-	},
-};
-
-struct platform_device jz4740_usb_ohci_device = {
-	.name		= "jz4740-ohci",
-	.id		= -1,
-	.dev = {
-		.dma_mask = &jz4740_usb_ohci_device.dev.coherent_dma_mask,
-		.coherent_dma_mask = DMA_BIT_MASK(32),
-	},
-	.num_resources	= ARRAY_SIZE(jz4740_usb_ohci_resources),
-	.resource	= jz4740_usb_ohci_resources,
-};
-
 /* USB Device Controller */
 struct platform_device jz4740_udc_xceiv_device = {
 	.name = "usb_phy_generic",
-- 
2.6.6

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] USB: ohci-jz4740: Remove obsolete driver
  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 ` Maarten ter Huurne
  2016-05-13 16:40   ` Ralf Baechle
  2016-04-23 11:57 ` [PATCH 1/3] MIPS: JZ4740: Qi LB60: Remove support for AVT2 variant Lars-Peter Clausen
  2 siblings, 1 reply; 6+ messages in thread
From: Maarten ter Huurne @ 2016-04-18 18:58 UTC (permalink / raw)
  To: Ralf Baechle
  Cc: Lars-Peter Clausen, Paul Cercueil, linux-mips, linux-kernel,
	Maarten ter Huurne

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

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] MIPS: JZ4740: Qi LB60: Remove support for AVT2 variant
  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-04-23 11:57 ` Lars-Peter Clausen
  2 siblings, 0 replies; 6+ messages in thread
From: Lars-Peter Clausen @ 2016-04-23 11:57 UTC (permalink / raw)
  To: Maarten ter Huurne, Ralf Baechle; +Cc: Paul Cercueil, linux-mips, linux-kernel

On 04/18/2016 08:58 PM, Maarten ter Huurne wrote:
> AVT2 was a prototype board of which about 5 were made, none of which
> are in use anymore.
> 
> Signed-off-by: Maarten ter Huurne <maarten@treewalker.org>

Acked-by: Lars-Peter Clausen <lars@metafoo.de>

Thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] USB: ohci-jz4740: Remove obsolete driver
  2016-04-18 18:58 ` [PATCH 3/3] USB: ohci-jz4740: Remove obsolete driver Maarten ter Huurne
@ 2016-05-13 16:40   ` Ralf Baechle
  2016-05-13 16:50     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 6+ messages in thread
From: Ralf Baechle @ 2016-05-13 16:40 UTC (permalink / raw)
  To: Maarten ter Huurne, Greg Kroah-Hartman, linux-usb
  Cc: Lars-Peter Clausen, Paul Cercueil, linux-mips, linux-kernel

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] USB: ohci-jz4740: Remove obsolete driver
  2016-05-13 16:40   ` Ralf Baechle
@ 2016-05-13 16:50     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 6+ messages in thread
From: Greg Kroah-Hartman @ 2016-05-13 16:50 UTC (permalink / raw)
  To: Ralf Baechle
  Cc: Maarten ter Huurne, linux-usb, Lars-Peter Clausen, Paul Cercueil,
	linux-mips, linux-kernel

On Fri, May 13, 2016 at 06:40:17PM +0200, Ralf Baechle wrote:
> 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.

Deleting code?  Yes, I'm all for that :)

	Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

And yes, actually letting the maintainers know is a good thing, unless
you don't want your patches applied...

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-05-13 16:50 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).