Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-1.0+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Renesas USB driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (C) 2011 Renesas Solutions Corp.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * Copyright (C) 2019 Renesas Electronics Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #ifndef RENESAS_USB_DRIVER_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #define RENESAS_USB_DRIVER_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #include <linux/clk.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #include <linux/extcon.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #include <linux/platform_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #include <linux/reset.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #include <linux/usb/renesas_usbhs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) struct usbhs_priv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #include "mod.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #include "pipe.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)  *		register define
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define SYSCFG		0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define BUSWAIT		0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define DVSTCTR		0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #define TESTMODE	0x000C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) #define CFIFO		0x0014
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define CFIFOSEL	0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define CFIFOCTR	0x0022
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #define D0FIFO		0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define D0FIFOSEL	0x0028
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define D0FIFOCTR	0x002A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define D1FIFO		0x0120
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define D1FIFOSEL	0x002C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define D1FIFOCTR	0x002E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define INTENB0		0x0030
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define INTENB1		0x0032
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define BRDYENB		0x0036
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define NRDYENB		0x0038
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define BEMPENB		0x003A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define INTSTS0		0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define INTSTS1		0x0042
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define BRDYSTS		0x0046
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define NRDYSTS		0x0048
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define BEMPSTS		0x004A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define FRMNUM		0x004C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define USBREQ		0x0054	/* USB request type register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #define USBVAL		0x0056	/* USB request value register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define USBINDX		0x0058	/* USB request index register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define USBLENG		0x005A	/* USB request length register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define DCPCFG		0x005C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define DCPMAXP		0x005E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #define DCPCTR		0x0060
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define PIPESEL		0x0064
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define PIPECFG		0x0068
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) #define PIPEBUF		0x006A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) #define PIPEMAXP	0x006C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) #define PIPEPERI	0x006E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #define PIPEnCTR	0x0070
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define PIPE1TRE	0x0090
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #define PIPE1TRN	0x0092
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) #define PIPE2TRE	0x0094
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #define PIPE2TRN	0x0096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #define PIPE3TRE	0x0098
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) #define PIPE3TRN	0x009A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #define PIPE4TRE	0x009C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) #define PIPE4TRN	0x009E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) #define PIPE5TRE	0x00A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) #define PIPE5TRN	0x00A2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #define PIPEBTRE	0x00A4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define PIPEBTRN	0x00A6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #define PIPECTRE	0x00A8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #define PIPECTRN	0x00AA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) #define PIPEDTRE	0x00AC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) #define PIPEDTRN	0x00AE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) #define PIPEETRE	0x00B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) #define PIPEETRN	0x00B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) #define PIPEFTRE	0x00B4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define PIPEFTRN	0x00B6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) #define PIPE9TRE	0x00B8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define PIPE9TRN	0x00BA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define PIPEATRE	0x00BC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define PIPEATRN	0x00BE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #define DEVADD0		0x00D0 /* Device address n configuration */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) #define DEVADD1		0x00D2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) #define DEVADD2		0x00D4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) #define DEVADD3		0x00D6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) #define DEVADD4		0x00D8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) #define DEVADD5		0x00DA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) #define DEVADD6		0x00DC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) #define DEVADD7		0x00DE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) #define DEVADD8		0x00E0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define DEVADD9		0x00E2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #define DEVADDA		0x00E4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define D2FIFOSEL	0x00F0	/* for R-Car Gen2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define D2FIFOCTR	0x00F2	/* for R-Car Gen2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define D3FIFOSEL	0x00F4	/* for R-Car Gen2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define D3FIFOCTR	0x00F6	/* for R-Car Gen2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define SUSPMODE	0x0102	/* for RZ/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) /* SYSCFG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define SCKE	(1 << 10)	/* USB Module Clock Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define CNEN	(1 << 8)	/* Single-ended receiver operation Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define HSE	(1 << 7)	/* High-Speed Operation Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define DCFM	(1 << 6)	/* Controller Function Select */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define DRPD	(1 << 5)	/* D+ Line/D- Line Resistance Control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define DPRPU	(1 << 4)	/* D+ Line Resistance Control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define USBE	(1 << 0)	/* USB Module Operation Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define UCKSEL	(1 << 2)	/* Clock Select for RZ/A1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define UPLLE	(1 << 1)	/* USB PLL Enable for RZ/A1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) /* DVSTCTR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define EXTLP	(1 << 10)	/* Controls the EXTLP pin output state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define PWEN	(1 << 9)	/* Controls the PWEN pin output state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define USBRST	(1 << 6)	/* Bus Reset Output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define UACT	(1 << 4)	/* USB Bus Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define RHST	(0x7)		/* Reset Handshake */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define  RHST_LOW_SPEED  1	/* Low-speed connection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define  RHST_FULL_SPEED 2	/* Full-speed connection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define  RHST_HIGH_SPEED 3	/* High-speed connection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) /* CFIFOSEL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define DREQE	(1 << 12)	/* DMA Transfer Request Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define MBW_32	(0x2 << 10)	/* CFIFO Port Access Bit Width */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) /* CFIFOCTR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define BVAL	(1 << 15)	/* Buffer Memory Enable Flag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define BCLR	(1 << 14)	/* CPU buffer clear */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define FRDY	(1 << 13)	/* FIFO Port Ready */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define DTLN_MASK (0x0FFF)	/* Receive Data Length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) /* INTENB0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define VBSE	(1 << 15)	/* Enable IRQ VBUS_0 and VBUSIN_0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define RSME	(1 << 14)	/* Enable IRQ Resume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define SOFE	(1 << 13)	/* Enable IRQ Frame Number Update */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define DVSE	(1 << 12)	/* Enable IRQ Device State Transition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define CTRE	(1 << 11)	/* Enable IRQ Control Stage Transition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define BEMPE	(1 << 10)	/* Enable IRQ Buffer Empty */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define NRDYE	(1 << 9)	/* Enable IRQ Buffer Not Ready Response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define BRDYE	(1 << 8)	/* Enable IRQ Buffer Ready */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) /* INTENB1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define BCHGE	(1 << 14)	/* USB Bus Change Interrupt Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define DTCHE	(1 << 12)	/* Disconnection Detect Interrupt Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define ATTCHE	(1 << 11)	/* Connection Detect Interrupt Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define EOFERRE	(1 << 6)	/* EOF Error Detect Interrupt Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define SIGNE	(1 << 5)	/* Setup Transaction Error Interrupt Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define SACKE	(1 << 4)	/* Setup Transaction ACK Interrupt Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) /* INTSTS0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define VBINT	(1 << 15)	/* VBUS0_0 and VBUS1_0 Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define DVST	(1 << 12)	/* Device State Transition Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define CTRT	(1 << 11)	/* Control Stage Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define BEMP	(1 << 10)	/* Buffer Empty Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #define BRDY	(1 << 8)	/* Buffer Ready Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define VBSTS	(1 << 7)	/* VBUS_0 and VBUSIN_0 Input Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define VALID	(1 << 3)	/* USB Request Receive */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define DVSQ_MASK		(0x7 << 4)	/* Device State */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) #define  POWER_STATE		(0 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define  DEFAULT_STATE		(1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define  ADDRESS_STATE		(2 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define  CONFIGURATION_STATE	(3 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) #define  SUSPENDED_STATE	(4 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define CTSQ_MASK		(0x7)	/* Control Transfer Stage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define  IDLE_SETUP_STAGE	0	/* Idle stage or setup stage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define  READ_DATA_STAGE	1	/* Control read data stage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) #define  READ_STATUS_STAGE	2	/* Control read status stage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) #define  WRITE_DATA_STAGE	3	/* Control write data stage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) #define  WRITE_STATUS_STAGE	4	/* Control write status stage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define  NODATA_STATUS_STAGE	5	/* Control write NoData status stage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #define  SEQUENCE_ERROR		6	/* Control transfer sequence error */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) /* INTSTS1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #define OVRCR	(1 << 15) /* OVRCR Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) #define BCHG	(1 << 14) /* USB Bus Change Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #define DTCH	(1 << 12) /* USB Disconnection Detect Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #define ATTCH	(1 << 11) /* ATTCH Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) #define EOFERR	(1 << 6)  /* EOF Error Detect Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #define SIGN	(1 << 5)  /* Setup Transaction Error Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #define SACK	(1 << 4)  /* Setup Transaction ACK Response Interrupt Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) /* PIPECFG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) /* DCPCFG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define TYPE_NONE	(0 << 14)	/* Transfer Type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) #define TYPE_BULK	(1 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define TYPE_INT	(2 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #define TYPE_ISO	(3 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define BFRE		(1 << 10)	/* BRDY Interrupt Operation Spec. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define DBLB		(1 << 9)	/* Double Buffer Mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define SHTNAK		(1 << 7)	/* Pipe Disable in Transfer End */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define DIR_OUT		(1 << 4)	/* Transfer Direction */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) /* PIPEMAXP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) /* DCPMAXP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define DEVSEL_MASK	(0xF << 12)	/* Device Select */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define DCP_MAXP_MASK	(0x7F)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define PIPE_MAXP_MASK	(0x7FF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) /* PIPEBUF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) #define BUFSIZE_SHIFT	10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define BUFSIZE_MASK	(0x1F << BUFSIZE_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define BUFNMB_MASK	(0xFF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) /* PIPEnCTR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) /* DCPCTR */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define BSTS		(1 << 15)	/* Buffer Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define SUREQ		(1 << 14)	/* Sending SETUP Token */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) #define INBUFM		(1 << 14)	/* (PIPEnCTR) Transfer Buffer Monitor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #define CSSTS		(1 << 12)	/* CSSTS Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) #define	ACLRM		(1 << 9)	/* Buffer Auto-Clear Mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #define SQCLR		(1 << 8)	/* Toggle Bit Clear */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define SQSET		(1 << 7)	/* Toggle Bit Set */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #define SQMON		(1 << 6)	/* Toggle Bit Check */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #define PBUSY		(1 << 5)	/* Pipe Busy */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define PID_MASK	(0x3)		/* Response PID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) #define  PID_NAK	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define  PID_BUF	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #define  PID_STALL10	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #define  PID_STALL11	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #define CCPL		(1 << 2)	/* Control Transfer End Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) /* PIPEnTRE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define TRENB		(1 << 9)	/* Transaction Counter Enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #define TRCLR		(1 << 8)	/* Transaction Counter Clear */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) /* FRMNUM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define FRNM_MASK	(0x7FF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) /* DEVADDn */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define UPPHUB(x)	(((x) & 0xF) << 11)	/* HUB Register */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #define HUBPORT(x)	(((x) & 0x7) << 8)	/* HUB Port for Target Device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #define USBSPD(x)	(((x) & 0x3) << 6)	/* Device Transfer Rate */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #define USBSPD_SPEED_LOW	0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #define USBSPD_SPEED_FULL	0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) #define USBSPD_SPEED_HIGH	0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) /* SUSPMODE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) #define SUSPM		(1 << 14)	/* SuspendM Control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)  *		struct
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) struct usbhs_priv {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	void __iomem *base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	unsigned int irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	unsigned long irqflags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	const struct renesas_usbhs_platform_callback *pfunc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	struct renesas_usbhs_driver_param	dparam;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	struct delayed_work notify_hotplug_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	struct platform_device *pdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	struct extcon_dev *edev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	spinlock_t		lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	 * module control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	struct usbhs_mod_info mod_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	 * pipe control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	struct usbhs_pipe_info pipe_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	 * fifo control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	struct usbhs_fifo_info fifo_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	struct phy *phy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	struct reset_control *rsts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	struct clk *clks[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288)  * common
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) u16 usbhs_read(struct usbhs_priv *priv, u32 reg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) void usbhs_write(struct usbhs_priv *priv, u32 reg, u16 data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) void usbhs_bset(struct usbhs_priv *priv, u32 reg, u16 mask, u16 data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) #define usbhs_lock(p, f) spin_lock_irqsave(usbhs_priv_to_lock(p), f)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) #define usbhs_unlock(p, f) spin_unlock_irqrestore(usbhs_priv_to_lock(p), f)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) int usbhs_get_id_as_gadget(struct platform_device *pdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)  * sysconfig
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) void usbhs_sys_host_ctrl(struct usbhs_priv *priv, int enable);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) void usbhs_sys_function_pullup(struct usbhs_priv *priv, int enable);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) void usbhs_sys_set_test_mode(struct usbhs_priv *priv, u16 mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)  * usb request
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) void usbhs_usbreq_get_val(struct usbhs_priv *priv, struct usb_ctrlrequest *req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) void usbhs_usbreq_set_val(struct usbhs_priv *priv, struct usb_ctrlrequest *req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314)  * bus
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) void usbhs_bus_send_sof_enable(struct usbhs_priv *priv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) void usbhs_bus_send_reset(struct usbhs_priv *priv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) int usbhs_bus_get_speed(struct usbhs_priv *priv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) int usbhs_vbus_ctrl(struct usbhs_priv *priv, int enable);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) int usbhsc_schedule_notify_hotplug(struct platform_device *pdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)  * frame
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) int usbhs_frame_get_num(struct usbhs_priv *priv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)  * device config
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) int usbhs_set_device_config(struct usbhs_priv *priv, int devnum, u16 upphub,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 			   u16 hubport, u16 speed);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)  * interrupt functions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) void usbhs_xxxsts_clear(struct usbhs_priv *priv, u16 sts_reg, u16 bit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339)  * data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) struct usbhs_priv *usbhs_pdev_to_priv(struct platform_device *pdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) #define usbhs_get_dparam(priv, param)	(priv->dparam.param)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) #define usbhs_priv_to_pdev(priv)	(priv->pdev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) #define usbhs_priv_to_dev(priv)		(&priv->pdev->dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) #define usbhs_priv_to_lock(priv)	(&priv->lock)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) #endif /* RENESAS_USB_DRIVER_H */