drivers/usb/gadget/udc/atmel_usba_udc.h

Source file repositories/reference/linux-study-clean/drivers/usb/gadget/udc/atmel_usba_udc.h

File Facts

System
Linux kernel
Corpus path
drivers/usb/gadget/udc/atmel_usba_udc.h
Extension
.h
Size
10252 bytes
Lines
382
Domain
Driver Families
Bucket
drivers/usb
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct usba_dma_desc {
	dma_addr_t next;
	dma_addr_t addr;
	u32 ctrl;
};

struct usba_fifo_cfg {
	u8			hw_ep_num;
	u16			fifo_size;
	u8			nr_banks;
};

struct usba_ep {
	int					state;
	void __iomem				*ep_regs;
	void __iomem				*dma_regs;
	void __iomem				*fifo;
	char					name[8];
	struct usb_ep				ep;
	struct usba_udc				*udc;

	struct list_head			queue;

	u16					fifo_size;
	u8					nr_banks;
	u8					index;
	unsigned int				can_dma:1;
	unsigned int				can_isoc:1;
	unsigned int				is_isoc:1;
	unsigned int				is_in:1;
	unsigned long				ept_cfg;
#ifdef CONFIG_USB_GADGET_DEBUG_FS
	u32					last_dma_status;
	struct dentry				*debugfs_dir;
#endif
};

struct usba_ep_config {
	u8					nr_banks;
	unsigned int				can_dma:1;
	unsigned int				can_isoc:1;
};

struct usba_request {
	struct usb_request			req;
	struct list_head			queue;

	u32					ctrl;

	unsigned int				submitted:1;
	unsigned int				last_transaction:1;
	unsigned int				using_dma:1;
	unsigned int				mapped:1;
};

struct usba_udc_errata {
	void (*toggle_bias)(struct usba_udc *udc, int is_on);
	void (*pulse_bias)(struct usba_udc *udc);
};

struct usba_udc_config {
	const struct usba_udc_errata *errata;
	const struct usba_ep_config *config;
	const int num_ep;
	const bool ep_prealloc;
};

struct usba_udc {
	/* Protect hw registers from concurrent modifications */
	spinlock_t lock;

	/* Mutex to prevent concurrent start or stop */
	struct mutex vbus_mutex;

	void __iomem *regs;
	void __iomem *fifo;

	struct usb_gadget gadget;
	struct usb_gadget_driver *driver;
	struct platform_device *pdev;
	const struct usba_udc_errata *errata;
	int irq;
	struct gpio_desc *vbus_pin;
	int num_ep;
	struct usba_fifo_cfg *fifo_cfg;
	struct clk *pclk;
	struct clk *hclk;
	struct usba_ep *usba_ep;
	bool bias_pulse_needed;
	bool clocked;

Annotation

Implementation Notes