From: Peter Chen <peter.chen@freescale.com> To: Roger Quadros <rogerq@ti.com> Cc: <gregkh@linuxfoundation.org>, <balbi@ti.com>, <stern@rowland.harvard.edu>, <dan.j.williams@intel.com>, <jun.li@freescale.com>, <mathias.nyman@linux.intel.com>, <linux-usb@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-omap@vger.kernel.org> Subject: Re: [RFC][PATCH 1/9] usb: hcd: Introduce usb_start/stop_hcd() Date: Thu, 19 Mar 2015 09:46:51 +0800 [thread overview] Message-ID: <20150319014650.GA1476@shlinux2> (raw) In-Reply-To: <1426686963-11613-2-git-send-email-rogerq@ti.com> On Wed, Mar 18, 2015 at 03:55:55PM +0200, Roger Quadros wrote: > To support OTG we want a mechanism to start and stop > the HCD from the OTG state machine. Add usb_start_hcd() > and usb_stop_hcd(). Hi Roger, You may not need to create another pair of hcd APIs for doing it, you can use usb_add_hcd/usb_remove_hcd directly, it is safer and cleaner. The chipidea uses it for both ID role switch use case and OTG FSM use case. Peter > > Signed-off-by: Roger Quadros <rogerq@ti.com> > --- > drivers/usb/core/hcd.c | 147 ++++++++++++++++++++++++++++++++---------------- > include/linux/usb/hcd.h | 2 + > 2 files changed, 100 insertions(+), 49 deletions(-) > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > index 45a915c..e28bd9d 100644 > --- a/drivers/usb/core/hcd.c > +++ b/drivers/usb/core/hcd.c > @@ -2613,7 +2613,76 @@ static void usb_put_invalidate_rhdev(struct usb_hcd *hcd) > } > > /** > - * usb_add_hcd - finish generic HCD structure initialization and register > + * usb_start_hcd - start the HCD > + * @hcd: the usb_hcd structure to initialize > + * > + * calls the drivers start() routine, registers the root hub > + * and creates the USB sysfs attributes. > + */ > +int usb_start_hcd(struct usb_hcd *hcd) > +{ > + int retval; > + struct usb_device *rhdev = hcd->self.root_hub; > + > + if (hcd->state != HC_STATE_HALT) { > + dev_err(hcd->self.controller, "not starting a running HCD\n"); > + return -EINVAL; > + } > + > + hcd->state = HC_STATE_RUNNING; > + retval = hcd->driver->start(hcd); > + if (retval < 0) { > + dev_err(hcd->self.controller, "startup error %d\n", retval); > + hcd->state = HC_STATE_HALT; > + return retval; > + } > + > + /* starting here, usbcore will pay attention to this root hub */ > + if ((retval = register_root_hub(hcd)) != 0) > + goto err_register_root_hub; > + > + retval = sysfs_create_group(&rhdev->dev.kobj, &usb_bus_attr_group); > + if (retval < 0) { > + pr_err("Cannot register USB bus sysfs attributes: %d\n", > + retval); > + goto error_create_attr_group; > + } > + if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) > + usb_hcd_poll_rh_status(hcd); > + > + return retval; > + > +error_create_attr_group: > + clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); > + if (HC_IS_RUNNING(hcd->state)) > + hcd->state = HC_STATE_QUIESCING; > + spin_lock_irq(&hcd_root_hub_lock); > + hcd->rh_registered = 0; > + spin_unlock_irq(&hcd_root_hub_lock); > + > +#ifdef CONFIG_PM > + cancel_work_sync(&hcd->wakeup_work); > +#endif > + mutex_lock(&usb_bus_list_lock); > + usb_disconnect(&rhdev); /* Sets rhdev to NULL */ > + mutex_unlock(&usb_bus_list_lock); > +err_register_root_hub: > + hcd->rh_pollable = 0; > + clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > + del_timer_sync(&hcd->rh_timer); > + hcd->driver->stop(hcd); > + hcd->state = HC_STATE_HALT; > + > + /* In case the HCD restarted the timer, stop it again. */ > + clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > + del_timer_sync(&hcd->rh_timer); > + > + return retval; > +} > +EXPORT_SYMBOL_GPL(usb_start_hcd); > + > +/** > + * usb_add_hcd - finish generic HCD structure initialization and register. > * @hcd: the usb_hcd structure to initialize > * @irqnum: Interrupt line to allocate > * @irqflags: Interrupt type flags > @@ -2757,50 +2826,12 @@ int usb_add_hcd(struct usb_hcd *hcd, > goto err_request_irq; > } > > - hcd->state = HC_STATE_RUNNING; > - retval = hcd->driver->start(hcd); > - if (retval < 0) { > - dev_err(hcd->self.controller, "startup error %d\n", retval); > + retval = usb_start_hcd(hcd); > + if (retval) > goto err_hcd_driver_start; > - } > - > - /* starting here, usbcore will pay attention to this root hub */ > - if ((retval = register_root_hub(hcd)) != 0) > - goto err_register_root_hub; > - > - retval = sysfs_create_group(&rhdev->dev.kobj, &usb_bus_attr_group); > - if (retval < 0) { > - printk(KERN_ERR "Cannot register USB bus sysfs attributes: %d\n", > - retval); > - goto error_create_attr_group; > - } > - if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) > - usb_hcd_poll_rh_status(hcd); > - > - return retval; > > -error_create_attr_group: > - clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); > - if (HC_IS_RUNNING(hcd->state)) > - hcd->state = HC_STATE_QUIESCING; > - spin_lock_irq(&hcd_root_hub_lock); > - hcd->rh_registered = 0; > - spin_unlock_irq(&hcd_root_hub_lock); > + return 0; > > -#ifdef CONFIG_PM > - cancel_work_sync(&hcd->wakeup_work); > -#endif > - mutex_lock(&usb_bus_list_lock); > - usb_disconnect(&rhdev); /* Sets rhdev to NULL */ > - mutex_unlock(&usb_bus_list_lock); > -err_register_root_hub: > - hcd->rh_pollable = 0; > - clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > - del_timer_sync(&hcd->rh_timer); > - hcd->driver->stop(hcd); > - hcd->state = HC_STATE_HALT; > - clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > - del_timer_sync(&hcd->rh_timer); > err_hcd_driver_start: > if (usb_hcd_is_primary_hcd(hcd) && hcd->irq > 0) > free_irq(irqnum, hcd); > @@ -2830,18 +2861,20 @@ err_phy: > EXPORT_SYMBOL_GPL(usb_add_hcd); > > /** > - * usb_remove_hcd - shutdown processing for generic HCDs > - * @hcd: the usb_hcd structure to remove > - * Context: !in_interrupt() > + * usb_stop_hcd - stop the HCD > + * @hcd: the usb_hcd structure to initialize > * > - * Disconnects the root hub, then reverses the effects of usb_add_hcd(), > - * invoking the HCD's stop() method. > + * removes the USB sysfs attributes, disconnects the root hub > + * and calls the driver's stop() routine. > */ > -void usb_remove_hcd(struct usb_hcd *hcd) > +void usb_stop_hcd(struct usb_hcd *hcd) > { > struct usb_device *rhdev = hcd->self.root_hub; > > - dev_info(hcd->self.controller, "remove, state %x\n", hcd->state); > + if (hcd->state == HC_STATE_HALT) { > + dev_err(hcd->self.controller, "not stopping a halted HCD\n"); > + return; > + } > > usb_get_dev(rhdev); > sysfs_remove_group(&rhdev->dev.kobj, &usb_bus_attr_group); > @@ -2888,6 +2921,22 @@ void usb_remove_hcd(struct usb_hcd *hcd) > /* In case the HCD restarted the timer, stop it again. */ > clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > del_timer_sync(&hcd->rh_timer); > +} > +EXPORT_SYMBOL_GPL(usb_stop_hcd); > + > +/** > + * usb_remove_hcd - shutdown processing for generic HCDs > + * @hcd: the usb_hcd structure to remove > + * Context: !in_interrupt() > + * > + * Disconnects the root hub, then reverses the effects of usb_add_hcd(), > + * invoking the HCD's stop() method. > + */ > +void usb_remove_hcd(struct usb_hcd *hcd) > +{ > + dev_info(hcd->self.controller, "remove, state %x\n", hcd->state); > + > + usb_stop_hcd(hcd); > > if (usb_hcd_is_primary_hcd(hcd)) { > if (hcd->irq > 0) > diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h > index 68b1e83..12aaf4c 100644 > --- a/include/linux/usb/hcd.h > +++ b/include/linux/usb/hcd.h > @@ -433,6 +433,8 @@ extern void usb_put_hcd(struct usb_hcd *hcd); > extern int usb_hcd_is_primary_hcd(struct usb_hcd *hcd); > extern int usb_add_hcd(struct usb_hcd *hcd, > unsigned int irqnum, unsigned long irqflags); > +extern int usb_start_hcd(struct usb_hcd *hcd); > +extern void usb_stop_hcd(struct usb_hcd *hcd); > extern void usb_remove_hcd(struct usb_hcd *hcd); > extern int usb_hcd_find_raw_port_number(struct usb_hcd *hcd, int port1); > > -- > 2.1.0 > -- Best Regards, Peter Chen
WARNING: multiple messages have this Message-ID (diff)
From: Peter Chen <peter.chen@freescale.com> To: Roger Quadros <rogerq@ti.com> Cc: gregkh@linuxfoundation.org, balbi@ti.com, stern@rowland.harvard.edu, dan.j.williams@intel.com, jun.li@freescale.com, mathias.nyman@linux.intel.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org Subject: Re: [RFC][PATCH 1/9] usb: hcd: Introduce usb_start/stop_hcd() Date: Thu, 19 Mar 2015 09:46:51 +0800 [thread overview] Message-ID: <20150319014650.GA1476@shlinux2> (raw) In-Reply-To: <1426686963-11613-2-git-send-email-rogerq@ti.com> On Wed, Mar 18, 2015 at 03:55:55PM +0200, Roger Quadros wrote: > To support OTG we want a mechanism to start and stop > the HCD from the OTG state machine. Add usb_start_hcd() > and usb_stop_hcd(). Hi Roger, You may not need to create another pair of hcd APIs for doing it, you can use usb_add_hcd/usb_remove_hcd directly, it is safer and cleaner. The chipidea uses it for both ID role switch use case and OTG FSM use case. Peter > > Signed-off-by: Roger Quadros <rogerq@ti.com> > --- > drivers/usb/core/hcd.c | 147 ++++++++++++++++++++++++++++++++---------------- > include/linux/usb/hcd.h | 2 + > 2 files changed, 100 insertions(+), 49 deletions(-) > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > index 45a915c..e28bd9d 100644 > --- a/drivers/usb/core/hcd.c > +++ b/drivers/usb/core/hcd.c > @@ -2613,7 +2613,76 @@ static void usb_put_invalidate_rhdev(struct usb_hcd *hcd) > } > > /** > - * usb_add_hcd - finish generic HCD structure initialization and register > + * usb_start_hcd - start the HCD > + * @hcd: the usb_hcd structure to initialize > + * > + * calls the drivers start() routine, registers the root hub > + * and creates the USB sysfs attributes. > + */ > +int usb_start_hcd(struct usb_hcd *hcd) > +{ > + int retval; > + struct usb_device *rhdev = hcd->self.root_hub; > + > + if (hcd->state != HC_STATE_HALT) { > + dev_err(hcd->self.controller, "not starting a running HCD\n"); > + return -EINVAL; > + } > + > + hcd->state = HC_STATE_RUNNING; > + retval = hcd->driver->start(hcd); > + if (retval < 0) { > + dev_err(hcd->self.controller, "startup error %d\n", retval); > + hcd->state = HC_STATE_HALT; > + return retval; > + } > + > + /* starting here, usbcore will pay attention to this root hub */ > + if ((retval = register_root_hub(hcd)) != 0) > + goto err_register_root_hub; > + > + retval = sysfs_create_group(&rhdev->dev.kobj, &usb_bus_attr_group); > + if (retval < 0) { > + pr_err("Cannot register USB bus sysfs attributes: %d\n", > + retval); > + goto error_create_attr_group; > + } > + if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) > + usb_hcd_poll_rh_status(hcd); > + > + return retval; > + > +error_create_attr_group: > + clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); > + if (HC_IS_RUNNING(hcd->state)) > + hcd->state = HC_STATE_QUIESCING; > + spin_lock_irq(&hcd_root_hub_lock); > + hcd->rh_registered = 0; > + spin_unlock_irq(&hcd_root_hub_lock); > + > +#ifdef CONFIG_PM > + cancel_work_sync(&hcd->wakeup_work); > +#endif > + mutex_lock(&usb_bus_list_lock); > + usb_disconnect(&rhdev); /* Sets rhdev to NULL */ > + mutex_unlock(&usb_bus_list_lock); > +err_register_root_hub: > + hcd->rh_pollable = 0; > + clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > + del_timer_sync(&hcd->rh_timer); > + hcd->driver->stop(hcd); > + hcd->state = HC_STATE_HALT; > + > + /* In case the HCD restarted the timer, stop it again. */ > + clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > + del_timer_sync(&hcd->rh_timer); > + > + return retval; > +} > +EXPORT_SYMBOL_GPL(usb_start_hcd); > + > +/** > + * usb_add_hcd - finish generic HCD structure initialization and register. > * @hcd: the usb_hcd structure to initialize > * @irqnum: Interrupt line to allocate > * @irqflags: Interrupt type flags > @@ -2757,50 +2826,12 @@ int usb_add_hcd(struct usb_hcd *hcd, > goto err_request_irq; > } > > - hcd->state = HC_STATE_RUNNING; > - retval = hcd->driver->start(hcd); > - if (retval < 0) { > - dev_err(hcd->self.controller, "startup error %d\n", retval); > + retval = usb_start_hcd(hcd); > + if (retval) > goto err_hcd_driver_start; > - } > - > - /* starting here, usbcore will pay attention to this root hub */ > - if ((retval = register_root_hub(hcd)) != 0) > - goto err_register_root_hub; > - > - retval = sysfs_create_group(&rhdev->dev.kobj, &usb_bus_attr_group); > - if (retval < 0) { > - printk(KERN_ERR "Cannot register USB bus sysfs attributes: %d\n", > - retval); > - goto error_create_attr_group; > - } > - if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) > - usb_hcd_poll_rh_status(hcd); > - > - return retval; > > -error_create_attr_group: > - clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); > - if (HC_IS_RUNNING(hcd->state)) > - hcd->state = HC_STATE_QUIESCING; > - spin_lock_irq(&hcd_root_hub_lock); > - hcd->rh_registered = 0; > - spin_unlock_irq(&hcd_root_hub_lock); > + return 0; > > -#ifdef CONFIG_PM > - cancel_work_sync(&hcd->wakeup_work); > -#endif > - mutex_lock(&usb_bus_list_lock); > - usb_disconnect(&rhdev); /* Sets rhdev to NULL */ > - mutex_unlock(&usb_bus_list_lock); > -err_register_root_hub: > - hcd->rh_pollable = 0; > - clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > - del_timer_sync(&hcd->rh_timer); > - hcd->driver->stop(hcd); > - hcd->state = HC_STATE_HALT; > - clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > - del_timer_sync(&hcd->rh_timer); > err_hcd_driver_start: > if (usb_hcd_is_primary_hcd(hcd) && hcd->irq > 0) > free_irq(irqnum, hcd); > @@ -2830,18 +2861,20 @@ err_phy: > EXPORT_SYMBOL_GPL(usb_add_hcd); > > /** > - * usb_remove_hcd - shutdown processing for generic HCDs > - * @hcd: the usb_hcd structure to remove > - * Context: !in_interrupt() > + * usb_stop_hcd - stop the HCD > + * @hcd: the usb_hcd structure to initialize > * > - * Disconnects the root hub, then reverses the effects of usb_add_hcd(), > - * invoking the HCD's stop() method. > + * removes the USB sysfs attributes, disconnects the root hub > + * and calls the driver's stop() routine. > */ > -void usb_remove_hcd(struct usb_hcd *hcd) > +void usb_stop_hcd(struct usb_hcd *hcd) > { > struct usb_device *rhdev = hcd->self.root_hub; > > - dev_info(hcd->self.controller, "remove, state %x\n", hcd->state); > + if (hcd->state == HC_STATE_HALT) { > + dev_err(hcd->self.controller, "not stopping a halted HCD\n"); > + return; > + } > > usb_get_dev(rhdev); > sysfs_remove_group(&rhdev->dev.kobj, &usb_bus_attr_group); > @@ -2888,6 +2921,22 @@ void usb_remove_hcd(struct usb_hcd *hcd) > /* In case the HCD restarted the timer, stop it again. */ > clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); > del_timer_sync(&hcd->rh_timer); > +} > +EXPORT_SYMBOL_GPL(usb_stop_hcd); > + > +/** > + * usb_remove_hcd - shutdown processing for generic HCDs > + * @hcd: the usb_hcd structure to remove > + * Context: !in_interrupt() > + * > + * Disconnects the root hub, then reverses the effects of usb_add_hcd(), > + * invoking the HCD's stop() method. > + */ > +void usb_remove_hcd(struct usb_hcd *hcd) > +{ > + dev_info(hcd->self.controller, "remove, state %x\n", hcd->state); > + > + usb_stop_hcd(hcd); > > if (usb_hcd_is_primary_hcd(hcd)) { > if (hcd->irq > 0) > diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h > index 68b1e83..12aaf4c 100644 > --- a/include/linux/usb/hcd.h > +++ b/include/linux/usb/hcd.h > @@ -433,6 +433,8 @@ extern void usb_put_hcd(struct usb_hcd *hcd); > extern int usb_hcd_is_primary_hcd(struct usb_hcd *hcd); > extern int usb_add_hcd(struct usb_hcd *hcd, > unsigned int irqnum, unsigned long irqflags); > +extern int usb_start_hcd(struct usb_hcd *hcd); > +extern void usb_stop_hcd(struct usb_hcd *hcd); > extern void usb_remove_hcd(struct usb_hcd *hcd); > extern int usb_hcd_find_raw_port_number(struct usb_hcd *hcd, int port1); > > -- > 2.1.0 > -- Best Regards, Peter Chen
next prev parent reply other threads:[~2015-03-19 1:47 UTC|newest] Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-03-18 13:55 [RFC][PATCH 0/9] USB: OTG Core functionality Roger Quadros 2015-03-18 13:55 ` Roger Quadros 2015-03-18 13:55 ` [RFC][PATCH 1/9] usb: hcd: Introduce usb_start/stop_hcd() Roger Quadros 2015-03-18 13:55 ` Roger Quadros 2015-03-18 19:49 ` Alan Stern 2015-03-18 19:49 ` Alan Stern 2015-03-18 21:41 ` Tony Lindgren 2015-03-18 21:41 ` Tony Lindgren 2015-03-19 1:51 ` Alan Stern 2015-03-19 1:51 ` Alan Stern 2015-03-19 2:38 ` Tony Lindgren 2015-03-19 2:38 ` Tony Lindgren 2015-03-19 11:38 ` Roger Quadros 2015-03-19 11:38 ` Roger Quadros 2015-03-19 14:17 ` Alan Stern 2015-03-19 14:17 ` Alan Stern 2015-03-20 6:32 ` Peter Chen 2015-03-20 6:32 ` Peter Chen 2015-03-20 9:49 ` Roger Quadros 2015-03-20 9:49 ` Roger Quadros 2015-03-19 1:46 ` Peter Chen [this message] 2015-03-19 1:46 ` Peter Chen 2015-03-18 13:55 ` [RFC][PATCH 2/9] usb: gadget: add usb_gadget_start/stop() Roger Quadros 2015-03-18 13:55 ` Roger Quadros 2015-03-19 3:30 ` Peter Chen 2015-03-19 3:30 ` Peter Chen 2015-03-19 10:14 ` Roger Quadros 2015-03-19 10:14 ` Roger Quadros 2015-03-19 14:09 ` Li Jun 2015-03-19 14:09 ` Li Jun 2015-03-19 14:50 ` Roger Quadros 2015-03-19 14:50 ` Roger Quadros 2015-03-20 7:18 ` Peter Chen 2015-03-20 7:18 ` Peter Chen 2015-03-20 9:46 ` Roger Quadros 2015-03-20 9:46 ` Roger Quadros 2015-03-20 11:08 ` Roger Quadros 2015-03-20 11:08 ` Roger Quadros 2015-03-21 1:30 ` Peter Chen 2015-03-21 1:30 ` Peter Chen 2015-03-18 13:55 ` [RFC][PATCH 3/9] usb: otg: add OTG core Roger Quadros 2015-03-18 13:55 ` Roger Quadros 2015-03-19 3:40 ` Peter Chen 2015-03-19 3:40 ` Peter Chen 2015-03-19 10:18 ` Roger Quadros 2015-03-19 10:18 ` Roger Quadros 2015-03-20 7:45 ` Peter Chen 2015-03-20 7:45 ` Peter Chen 2015-03-20 9:18 ` Roger Quadros 2015-03-20 9:18 ` Roger Quadros 2015-03-20 9:32 ` Peter Chen 2015-03-19 8:26 ` Li Jun 2015-03-19 8:26 ` Li Jun 2015-03-19 10:30 ` Roger Quadros 2015-03-19 10:30 ` Roger Quadros 2015-03-19 14:41 ` Li Jun 2015-03-19 14:41 ` Li Jun 2015-03-19 14:54 ` Roger Quadros 2015-03-19 14:54 ` Roger Quadros 2015-03-18 13:55 ` [RFC][PATCH 4/9] usb: otg: hub: Notify OTG fsm when A device sets b_hnp_enable Roger Quadros 2015-03-18 13:55 ` Roger Quadros 2015-03-18 13:55 ` [RFC][PATCH 5/9] usb: hcd: adapt to OTG Roger Quadros 2015-03-18 13:55 ` Roger Quadros 2015-03-18 13:56 ` [RFC][PATCH 6/9] usb: gadget: udc: " Roger Quadros 2015-03-18 13:56 ` Roger Quadros 2015-03-18 13:56 ` [RFC][PATCH 7/9] usb: dwc3: adapt to OTG core Roger Quadros 2015-03-18 13:56 ` Roger Quadros 2015-03-18 13:56 ` [RFC][PATCH 8/9] usb: otg-fsm: Remove unused members in struct otg_fsm Roger Quadros 2015-03-18 13:56 ` Roger Quadros 2015-03-19 3:46 ` Peter Chen 2015-03-19 3:46 ` Peter Chen 2015-03-19 10:20 ` Roger Quadros 2015-03-19 10:20 ` Roger Quadros 2015-03-18 13:56 ` [RFC][PATCH 9/9] usb: otg-fsm: Add documentation for " Roger Quadros 2015-03-18 13:56 ` Roger Quadros 2015-03-18 17:37 ` [RFC][PATCH 0/9] USB: OTG Core functionality Tony Lindgren 2015-03-19 10:31 ` Roger Quadros 2015-03-19 10:31 ` Roger Quadros
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=20150319014650.GA1476@shlinux2 \ --to=peter.chen@freescale.com \ --cc=balbi@ti.com \ --cc=dan.j.williams@intel.com \ --cc=gregkh@linuxfoundation.org \ --cc=jun.li@freescale.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-omap@vger.kernel.org \ --cc=linux-usb@vger.kernel.org \ --cc=mathias.nyman@linux.intel.com \ --cc=rogerq@ti.com \ --cc=stern@rowland.harvard.edu \ /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: linkBe 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.