Re: [PATCH 3/7] usb: musb: factor out hcd initalization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <zonque@xxxxxxxxx>
> ---
>  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 ?

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.

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux