Re: [PATCHv6 1/8] usb: dwc2: Update the gadget driver to use common dwc2_hsotg structure

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

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 10/30/2014 08:54 AM, Felipe Balbi wrote:
> On Tue, Oct 28, 2014 at 06:25:42PM -0500,
> dinguyen@xxxxxxxxxxxxxxxxxxxxx wrote:
>> From: Dinh Nguyen <dinguyen@xxxxxxxxxxxxxxxxxxxxx>
>> 
>> Adds the gadget data structure and appropriate data structure
>> pointers to the common dwc2_hsotg data structure. To keep the
>> driver data dereference code looking clean, the gadget variable
>> declares are only available for peripheral and dual-role mode.
>> This is needed so that the dwc2_hsotg data structure can be used
>> by the hcd and gadget drivers.
>> 
>> Updates gadget.c to use the dwc2_hsotg data structure and gadget
>> pointers that have been moved into the common dwc2_hsotg
>> structure.
>> 
>> Signed-off-by: Dinh Nguyen <dinguyen@xxxxxxxxxxxxxxxxxxxxx> 
>> Signed-off-by: Paul Zimmerman <paulz@xxxxxxxxxxxx> --- v5: Keep
>> the changes to mininum and maintain hcd and gadget driver to
>> build and work separately. Use IS_ENABLED() instead of #if
>> defined v3: Updated with paulz's suggestion to avoid double
>> pointers. v2: Left the function parameter name as 'hsotg' and
>> just changed its type. --- drivers/usb/dwc2/core.h   | 156
>> ++++++++++++++++++++++++---------------------- 
>> drivers/usb/dwc2/gadget.c | 145
>> +++++++++++++++++++++--------------------- 2 files changed, 154
>> insertions(+), 147 deletions(-)
>> 
>> diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h 
>> index 55c90c5..96c283d 100644 --- a/drivers/usb/dwc2/core.h +++
>> b/drivers/usb/dwc2/core.h @@ -84,7 +84,7 @@ static const char *
>> const s3c_hsotg_supply_names[] = { */ #define EP0_MPS_LIMIT   64
>> 
>> -struct s3c_hsotg; +struct dwc2_hsotg; struct s3c_hsotg_req;
>> 
>> /** @@ -130,7 +130,7 @@ struct s3c_hsotg_req; struct s3c_hsotg_ep
>> { struct usb_ep           ep; struct list_head        queue; -
>> struct s3c_hsotg        *parent; +	struct dwc2_hsotg
>> *parent; struct s3c_hsotg_req    *req; struct dentry
>> *debugfs;
>> 
>> @@ -155,67 +155,6 @@ struct s3c_hsotg_ep { };
>> 
>> /** - * struct s3c_hsotg - driver state. - * @dev: The parent
>> device supplied to the probe function - * @driver: USB gadget
>> driver - * @phy: The otg phy transceiver structure for phy
>> control. - * @uphy: The otg phy transceiver structure for old USB
>> phy control. - * @plat: The platform specific configuration data.
>> This can be removed once - * all SoCs support usb transceiver. -
>> * @regs: The memory area mapped for accessing registers. - *
>> @irq: The IRQ number we are using - * @supplies: Definition of
>> USB power supplies - * @phyif: PHY interface width - *
>> @dedicated_fifos: Set if the hardware has dedicated IN-EP fifos. 
>> - * @num_of_eps: Number of available EPs (excluding EP0) - *
>> @debug_root: root directrory for debugfs. - * @debug_file: main
>> status file for debugfs. - * @debug_fifo: FIFO status file for
>> debugfs. - * @ep0_reply: Request used for ep0 reply. - *
>> @ep0_buff: Buffer for EP0 reply data, if needed. - * @ctrl_buff:
>> Buffer for EP0 control requests. - * @ctrl_req: Request for EP0
>> control packets. - * @setup: NAK management for EP0 SETUP - *
>> @last_rst: Time of last reset - * @eps: The endpoints being
>> supplied to the gadget framework - */ -struct s3c_hsotg { -
>> struct device            *dev; -	struct usb_gadget_driver
>> *driver; -	struct phy               *phy; -	struct usb_phy
>> *uphy; -	struct s3c_hsotg_plat    *plat; - -	spinlock_t
>> lock; - -	void __iomem            *regs; -	int
>> irq; -	struct clk              *clk; - -	struct
>> regulator_bulk_data
>> supplies[ARRAY_SIZE(s3c_hsotg_supply_names)]; - -	u32
>> phyif; -	int			fifo_mem; -	unsigned int
>> dedicated_fifos:1; -	unsigned char           num_of_eps; -	u32
>> fifo_map; - -	struct dentry           *debug_root; -	struct
>> dentry           *debug_file; -	struct dentry
>> *debug_fifo; - -	struct usb_request      *ep0_reply; -	struct
>> usb_request      *ctrl_req; -	u8
>> ep0_buff[8]; -	u8                      ctrl_buff[8]; - -	struct
>> usb_gadget       gadget; -	unsigned int            setup; -
>> unsigned long           last_rst; -	struct s3c_hsotg_ep
>> *eps; -}; - -/** * struct s3c_hsotg_req - data transfer request *
>> @req: The USB gadget request * @queue: The list of requests for
>> the endpoint this is queued for. @@ -229,6 +168,7 @@ struct
>> s3c_hsotg_req { unsigned char           mapped; };
>> 
>> +#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) ||
>> IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE) #define call_gadget(_hs,
>> _entry) \ do { \ if ((_hs)->gadget.speed != USB_SPEED_UNKNOWN &&
>> \ @@ -238,6 +178,9 @@ do { \ spin_lock(&_hs->lock); \ } \ } while
>> (0) +#else +#define call_gadget(_hs, _entry)	do {} while (0) 
>> +#endif
>> 
>> struct dwc2_hsotg; struct dwc2_host_chan; @@ -495,11 +438,13 @@
>> struct dwc2_hw_params { * struct dwc2_hsotg - Holds the state of
>> the driver, including the non-periodic * and periodic schedules 
>> * + * These are common for both host and peripheral modes: + * *
>> @dev:                The struct device pointer * @regs:		Pointer
>> to controller regs - * @core_params:        Parameters that
>> define how the core should be configured * @hw_params:
>> Parameters that were autodetected from the *
>> hardware registers + * @core_params:	Parameters that define how
>> the core should be configured * @op_state:           The
>> operational State, during transitions (a_host=> *
>> a_peripheral and b_device=>b_host) this may not match *
>> the core, but allows the software to determine @@ -508,6 +453,8
>> @@ struct dwc2_hw_params { *                      -
>> USB_DR_MODE_PERIPHERAL *                      - USB_DR_MODE_HOST 
>> *                      - USB_DR_MODE_OTG + * @lock:		Spinlock
>> that protects all the driver data structures + * @priv:		Stores a
>> pointer to the struct usb_hcd * @queuing_high_bandwidth: True if
>> multiple packets of a high-bandwidth *
>> transfer are in process of being queued * @srp_success:
>> Stores status of SRP request in the case of a FS PHY @@ -517,6
>> +464,9 @@ struct dwc2_hw_params { *
>> interrupt * @wkp_timer:          Timer object for handling Wakeup
>> Detected interrupt * @lx_state:           Lx state of connected
>> device + * + * These are for host mode: + * * @flags:
>> Flags for handling root port state changes *
>> @non_periodic_sched_inactive: Inactive QHs in the non-periodic
>> schedule. *                      Transfers associated with these
>> QHs are not currently @@ -585,11 +535,31 @@ struct dwc2_hw_params
>> { * @status_buf_dma:     DMA address for status_buf *
>> @start_work:         Delayed work for handling host A-cable
>> connection * @reset_work:         Delayed work for handling a
>> port reset - * @lock:               Spinlock that protects all
>> the driver data structures - * @priv:               Stores a
>> pointer to the struct usb_hcd * @otg_port:           OTG port
>> number * @frame_list:         Frame list * @frame_list_dma:
>> Frame list DMA address + * + * These are for peripheral mode: +
>> * + * @driver:             USB gadget driver + * @phy:
>> The otg phy transceiver structure for phy control. + * @uphy:
>> The otg phy transceiver structure for old USB phy control. + *
>> @plat:               The platform specific configuration data.
>> This can be removed once + *                      all SoCs
>> support usb transceiver. + * @supplies:           Definition of
>> USB power supplies + * @phyif:              PHY interface width +
>> * @dedicated_fifos:    Set if the hardware has dedicated IN-EP
>> fifos. + * @num_of_eps:         Number of available EPs
>> (excluding EP0) + * @debug_root:         Root directrory for
>> debugfs. + * @debug_file:         Main status file for debugfs. +
>> * @debug_fifo:         FIFO status file for debugfs. + *
>> @ep0_reply:          Request used for ep0 reply. + * @ep0_buff:
>> Buffer for EP0 reply data, if needed. + * @ctrl_buff:
>> Buffer for EP0 control requests. + * @ctrl_req:           Request
>> for EP0 control packets. + * @setup:              NAK management
>> for EP0 SETUP + * @last_rst:           Time of last reset + *
>> @eps:                The endpoints being supplied to the gadget
>> framework */ struct dwc2_hsotg { struct device *dev; @@ -601,6
>> +571,9 @@ struct dwc2_hsotg { enum usb_otg_state op_state; enum
>> usb_dr_mode dr_mode;
>> 
>> +	spinlock_t lock; +	void *priv; + unsigned int
>> queuing_high_bandwidth:1; unsigned int srp_success:1;
>> 
>> @@ -609,6 +582,14 @@ struct dwc2_hsotg { struct timer_list
>> wkp_timer; enum dwc2_lx_state lx_state;
>> 
>> +	/* DWC OTG HW Release versions */ +#define DWC2_CORE_REV_2_71a
>> 0x4f54271a +#define DWC2_CORE_REV_2_90a	0x4f54290a +#define
>> DWC2_CORE_REV_2_92a	0x4f54292a +#define DWC2_CORE_REV_2_94a
>> 0x4f54294a +#define DWC2_CORE_REV_3_00a	0x4f54300a + +#if
>> IS_ENABLED(CONFIG_USB_DWC2_HOST) ||
>> IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE) union
>> dwc2_hcd_internal_flags { u32 d32; struct { @@ -655,19 +636,10 @@
>> struct dwc2_hsotg {
>> 
>> struct delayed_work start_work; struct delayed_work reset_work; -
>> spinlock_t lock; -	void *priv; u8 otg_port; u32 *frame_list; 
>> dma_addr_t frame_list_dma;
>> 
>> -	/* DWC OTG HW Release versions */ -#define DWC2_CORE_REV_2_71a
>> 0x4f54271a -#define DWC2_CORE_REV_2_90a	0x4f54290a -#define
>> DWC2_CORE_REV_2_92a	0x4f54292a -#define DWC2_CORE_REV_2_94a
>> 0x4f54294a -#define DWC2_CORE_REV_3_00a	0x4f54300a - #ifdef
>> DEBUG u32 frrem_samples; u64 frrem_accum; @@ -686,6 +658,40 @@
>> struct dwc2_hsotg { u32 hfnum_other_samples_b; u64
>> hfnum_other_frrem_accum_b; #endif +#endif /* CONFIG_USB_DWC2_HOST
>> || CONFIG_USB_DWC2_DUAL_ROLE */ + +#if
>> IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) ||
>> IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE) +	/* Gadget structures */ +
>> struct usb_gadget_driver *driver; +	struct phy *phy;
> 
> this shouldn't be limited to gadget.
> 
>> +	struct usb_phy *uphy;
> 
> this shouldn't be limited to gadget.
> 
>> +	struct s3c_hsotg_plat *plat; + +	int	irq;
> 
> this shouldn't be limited to gadget.
> 
>> +	struct clk *clk;
> 
> this shouldn't be limited to gadget.
> 
>> + +	struct regulator_bulk_data
>> supplies[ARRAY_SIZE(s3c_hsotg_supply_names)];
> 
> this shouldn't be limited to gadget.
> 
>> +	u32 phyif; +	int fifo_mem; +	unsigned int dedicated_fifos:1; +
>> unsigned char num_of_eps; +	u32 fifo_map; + +	struct dentry
>> *debug_root;
> 
> this shouldn't be limited to gadget.
> 
>> +	struct dentry *debug_file;
> 
> this shouldn't be limited to gadget.
> 
>> +	struct dentry *debug_fifo;
> 
> this shouldn't be limited to gadget.
> 

All fixed..

thanks,
Dinh
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iQIcBAEBAgAGBQJUU6LrAAoJEBmUBAuBoyj024wP/j7x+PW8rV8Aqzhkg4d1zSKE
BE7/Axir8uPVTZfIOFBouHz6h0APztgW+by7DZdXCE8K6gUDAfzruxLRHNjctT6E
KRj6A+i7qYnF/0+kc9b2InWYfS8NcOxths7r70RhJz7jlCphpaqlfhlicMSc0Ury
Z/EeOYRpbwltDHGSBSkcPaw0yL4h/BQIRm1rRaUj+10cliSYwW5Re6mfiWVV+0pl
WA56MM5xf7N9PO1Q+TPyStLyUTLyb3jiNwCOWfUCIkpHwJC9AIgbuBZXPMrSGOoL
cMNoLHkgfY4HPFgzGlGxIgbHdkMec6A78FzSgz04P5+Uzh/MGKyrecordMbpQAPS
DCGGWOsPrujAbWhgrus+cfxznIV3+4vhP+uC387RgLsYaJLRpAEpYN5aTABRU8u2
uEsbfYIhRGaGDQqTR0mzcKMXy9xoUMLNLkpiaqlGTs2Et0f1ZkElIn/dpefx417u
Ocmfq7ab0cXgHnYNjdk9yE9JchgjUG5sn+INKbm/lLmXNyN3VHNZnBO42v1d78Gw
sylySISc1aUJGXkuRJDPM4oC4jyPrerLB4BQbF0bQqaakz+U83+I+wZ7e9IOldO9
bPk5I7VZO8F8Ve0oP1WvuVZGeCnhrTd2isfx/orQ4J3uQFBD9hddGyaroDPtRIkA
zoNVOSXVySi9EiPYT12u
=382E
-----END PGP SIGNATURE-----
--
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