* [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).