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