On 05.04.2013 15:03, Felipe Balbi wrote:
> On Thu, Apr 04, 2013 at 09:50:09PM +0200, Daniel Mack wrote:
>> The musb struct is currently allocated along with the hcd, which makes
>> it difficult to build a driver that only acts as gadget device.
>>
>> Fix this by allocation musb directly, and keep the hcd around as pointer.
>
> Fix this by *allocating*
>
>> struct hc_driver musb_hc_driver can now also be static to musb_host.c,
>> and the macro musb_to_hcd() is just a pointer dereferencer for now, and
>> will be elminiated later.
>>
>> Signed-off-by: Daniel Mack <[email protected]>
>> ---
>> drivers/usb/musb/musb_core.c | 60 ++++++++++++++++++--------------------
>> drivers/usb/musb/musb_core.h | 1 +
>> drivers/usb/musb/musb_gadget.c | 10 -------
>> drivers/usb/musb/musb_host.c | 65
>> ++++++++++++++++++++++++++++++++++++++++--
>> drivers/usb/musb/musb_host.h | 21 +++++++-------
>> 5 files changed, 102 insertions(+), 55 deletions(-)
>>
>> diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
>> index 37a261a..d5e9794 100644
>> --- a/drivers/usb/musb/musb_core.c
>> +++ b/drivers/usb/musb/musb_core.c
>> @@ -404,7 +404,8 @@ void musb_hnp_stop(struct musb *musb)
>> break;
>> case OTG_STATE_B_HOST:
>> dev_dbg(musb->controller, "HNP: Disabling HR\n");
>> - hcd->self.is_b_host = 0;
>> + if (hcd)
>> + hcd->self.is_b_host = 0;
>> musb->xceiv->state = OTG_STATE_B_PERIPHERAL;
>> MUSB_DEV_MODE(musb);
>> reg = musb_readb(mbase, MUSB_POWER);
>> @@ -484,7 +485,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8
>> int_usb,
>>
>> musb->xceiv->state = OTG_STATE_A_HOST;
>> musb->is_active = 1;
>> - usb_hcd_resume_root_hub(musb_to_hcd(musb));
>> + musb_host_resume_root_hub(musb);
>
> this small re-factoring should be done in a separate patch coming before
> $subject.
>
>> @@ -734,17 +736,13 @@ b_host:
>> if ((devctl & MUSB_DEVCTL_VBUS)
>> == (3 << MUSB_DEVCTL_VBUS_SHIFT)) {
>> musb->xceiv->state = OTG_STATE_A_HOST;
>> - hcd->self.is_b_host = 0;
>> + if (hcd)
>> + hcd->self.is_b_host = 0;
>> }
>> break;
>> }
>>
>> - /* poke the root hub */
>> - MUSB_HST_MODE(musb);
>> - if (hcd->status_urb)
>> - usb_hcd_poll_rh_status(hcd);
>> - else
>> - usb_hcd_resume_root_hub(hcd);
>> + musb_host_poke_root_hub(musb);
>
> likewise for this one.
>
>> @@ -1763,24 +1762,18 @@ static struct musb *allocate_instance(struct device
>> *dev,
>> struct musb *musb;
>> struct musb_hw_ep *ep;
>> int epnum;
>> - struct usb_hcd *hcd;
>> + int ret;
>>
>> - hcd = usb_create_hcd(&musb_hc_driver, dev, dev_name(dev));
>> - if (!hcd)
>> + musb = kzalloc(sizeof(*musb), GFP_KERNEL);
>
> devm_* ? Or perhaps in a later patch.
>
>> +void musb_host_cleanup(struct musb *musb)
>> +{
>> + usb_remove_hcd(musb->hcd);
>> + musb->hcd = NULL;
>> +}
>> +
>> +void musb_host_free(struct musb *musb)
>> +{
>> + usb_put_hcd(musb->hcd);
>> +}
>> +
>> +void musb_host_resume_root_hub(struct musb *musb)
>> +{
>> + usb_hcd_resume_root_hub(musb->hcd);
>> +}
>> +
>> +void musb_host_poll_rh_status(struct musb *musb)
>> +{
>> + usb_hcd_poll_rh_status(musb->hcd);
>> +}
>> +
>> +void musb_host_poke_root_hub(struct musb *musb)
>> +{
>> + MUSB_HST_MODE(musb);
>> + if (musb->hcd->status_urb)
>> + usb_hcd_poll_rh_status(musb->hcd);
>> + else
>> + usb_hcd_resume_root_hub(musb->hcd);
>> +}
>
> no need to check for NULL hcd in any of these ? I guess you're relying
> on those being stubbed out when Host isn't compiled in, am I right ?
Yes, exactly. musb->hcd will be a NULL pointer then, which is unused by
the static inline function.
Thanks for the review though, prepare a new series.
Daniel
>
> just being sure...
>
>> diff --git a/drivers/usb/musb/musb_host.h b/drivers/usb/musb/musb_host.h
>> index 9670269..fb24422 100644
>> --- a/drivers/usb/musb/musb_host.h
>> +++ b/drivers/usb/musb/musb_host.h
>> @@ -37,15 +37,9 @@
>>
>> #include <linux/scatterlist.h>
>>
>> -static inline struct usb_hcd *musb_to_hcd(struct musb *musb)
>> -{
>> - return container_of((void *) musb, struct usb_hcd, hcd_priv);
>> -}
>> +#define musb_to_hcd(MUSB) ((MUSB)->hcd)
>
> all lower cases, please.
>
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html