diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 75bda0783395..f02e1bd20924 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -357,6 +357,7 @@ struct usb_gadget_ops {
  * @in_epnum: last used in ep number
  * @mA: last set mA value
  * @otg_caps: OTG capabilities of this gadget.
+ * @dw1: trace event purpose
  * @sg_supported: true if we can handle scatter-gather
  * @is_otg: True if the USB device port uses a Mini-AB jack, so that the
  *	gadget driver must provide a USB OTG descriptor.
@@ -432,30 +433,87 @@ struct usb_gadget {
 	unsigned			mA;
 	struct usb_otg_caps		*otg_caps;
 
-	unsigned			sg_supported:1;
-	unsigned			is_otg:1;
-	unsigned			is_a_peripheral:1;
-	unsigned			b_hnp_enable:1;
-	unsigned			a_hnp_support:1;
-	unsigned			a_alt_hnp_support:1;
-	unsigned			hnp_polling_support:1;
-	unsigned			host_request_flag:1;
-	unsigned			quirk_ep_out_aligned_size:1;
-	unsigned			quirk_altset_not_supp:1;
-	unsigned			quirk_stall_not_supp:1;
-	unsigned			quirk_zlp_not_supp:1;
-	unsigned			quirk_avoids_skb_reserve:1;
-	unsigned			is_selfpowered:1;
-	unsigned			deactivated:1;
-	unsigned			connected:1;
-	unsigned			lpm_capable:1;
-	unsigned			wakeup_capable:1;
-	unsigned			wakeup_armed:1;
+	union {
+		struct {
+			unsigned	sg_supported:1;
+			unsigned	is_otg:1;
+			unsigned	is_a_peripheral:1;
+			unsigned	b_hnp_enable:1;
+			unsigned	a_hnp_support:1;
+			unsigned	a_alt_hnp_support:1;
+			unsigned	hnp_polling_support:1;
+			unsigned	host_request_flag:1;
+			unsigned	quirk_ep_out_aligned_size:1;
+			unsigned	quirk_altset_not_supp:1;
+			unsigned	quirk_stall_not_supp:1;
+			unsigned	quirk_zlp_not_supp:1;
+			unsigned	quirk_avoids_skb_reserve:1;
+			unsigned	is_selfpowered:1;
+			unsigned	deactivated:1;
+			unsigned	connected:1;
+			unsigned	lpm_capable:1;
+			unsigned	wakeup_capable:1;
+			unsigned	wakeup_armed:1;
+		} __packed;
+
+		u32			dw1;
+	} __aligned(4);
 	int				irq;
 	int				id_number;
 };
 #define work_to_gadget(w)	(container_of((w), struct usb_gadget, work))
 
+#define USB_GADGET_BITFIELD(n, name) \
+	({\
+	union {\
+		struct {\
+			u32	sg_supported:1;\
+			u32	is_otg:1;\
+			u32	is_a_peripheral:1;\
+			u32	b_hnp_enable:1;\
+			u32	a_hnp_support:1;\
+			u32	a_alt_hnp_support:1;\
+			u32	hnp_polling_support:1;\
+			u32	host_request_flag:1;\
+			u32	quirk_ep_out_aligned_size:1;\
+			u32	quirk_altset_not_supp:1;\
+			u32	quirk_stall_not_supp:1;\
+			u32	quirk_zlp_not_supp:1;\
+			u32	quirk_avoids_skb_reserve:1;\
+			u32	is_selfpowered:1;\
+			u32	deactivated:1;\
+			u32	connected:1;\
+			u32	lpm_capable:1;\
+			u32	wakeup_capable:1;\
+			u32	wakeup_armed:1;\
+		} __packed;\
+		u32		dw1;\
+	} __aligned(4) __g_u_##name;\
+	u32 __g_##name; \
+	BUILD_BUG_ON(sizeof(__g_u_##name) != 4);\
+	__g_u_##name.dw1 = (n); __g_##name = __g_u_##name.name;\
+	__g_##name; })
+
+#define USB_GADGET_SG_SUPPORTED(n) USB_GADGET_BITFIELD((n), sg_supported)
+#define USB_GADGET_IS_OTG(n) USB_GADGET_BITFIELD((n), is_otg)
+#define USB_GADGET_IS_A_PERIPHERAL(n) USB_GADGET_BITFIELD((n), is_a_peripheral)
+#define USB_GADGET_B_HNP_ENABLE(n) USB_GADGET_BITFIELD((n), b_hnp_enable)
+#define USB_GADGET_A_HNP_SUPPORT(n) USB_GADGET_BITFIELD((n), a_hnp_support)
+#define USB_GADGET_A_ALT_HNP_SUPPORT(n) USB_GADGET_BITFIELD((n), a_alt_hnp_support)
+#define USB_GADGET_HNP_POLLING_SUPPORT(n) USB_GADGET_BITFIELD((n), hnp_polling_support)
+#define USB_GADGET_HOST_REQUEST_FLAG(n) USB_GADGET_BITFIELD((n), host_request_flag)
+#define USB_GADGET_QUIRK_EP_OUT_ALIGNED_SIZE(n) USB_GADGET_BITFIELD((n), quirk_ep_out_aligned_size)
+#define USB_GADGET_QUIRK_ALTSET_NOT_SUPP(n) USB_GADGET_BITFIELD((n), quirk_altset_not_supp)
+#define USB_GADGET_QUIRK_STALL_NOT_SUPP(n) USB_GADGET_BITFIELD((n), quirk_stall_not_supp)
+#define USB_GADGET_QUIRK_ZLP_NOT_SUPP(n) USB_GADGET_BITFIELD((n), quirk_zlp_not_supp)
+#define USB_GADGET_QUIRK_AVOIDS_SKB_RESERVE(n) USB_GADGET_BITFIELD((n), quirk_avoids_skb_reserve)
+#define USB_GADGET_IS_SELFPOWERED(n) USB_GADGET_BITFIELD((n), is_selfpowered)
+#define USB_GADGET_DEACTIVATED(n) USB_GADGET_BITFIELD((n), deactivated)
+#define USB_GADGET_CONNECTED(n) USB_GADGET_BITFIELD((n), connected)
+#define USB_GADGET_LPM_CAPABLE(n) USB_GADGET_BITFIELD((n), lpm_capable)
+#define USB_GADGET_WAKEUP_CAPABLE(n) USB_GADGET_BITFIELD((n), wakeup_capable)
+#define USB_GADGET_WAKEUP_ARMED(n) USB_GADGET_BITFIELD((n), wakeup_armed)
+
 /* Interface to the device model */
 static inline void set_gadget_data(struct usb_gadget *gadget, void *data)
 	{ dev_set_drvdata(&gadget->dev, data); }
