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

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

 



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 <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 ?

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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




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

  Powered by Linux