/*
 * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This file is free software; you can redistribute it and/or
 *     modify it under the terms of the GNU General Public License as
 *     published by the Free Software Foundation; either version 2 of the
 *     License, or (at your option) any later version.
 *
 *     This file is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */

#ifndef _DT_BINDINGS_RST_SUN8I_R40_H_
#define _DT_BINDINGS_RST_SUN8I_R40_H_

#define RST_USB_PHY0		0
#define RST_USB_PHY1		1
#define RST_USB_PHY2		2

#define RST_DRAM		3
#define RST_MBUS		4

#define RST_BUS_MIPI_DSI	5
#define RST_BUS_CE		6
#define RST_BUS_DMA		7
#define RST_BUS_MMC0		8
#define RST_BUS_MMC1		9
#define RST_BUS_MMC2		10
#define RST_BUS_MMC3		11
#define RST_BUS_NAND		12
#define RST_BUS_DRAM		13
#define RST_BUS_EMAC		14
#define RST_BUS_TS		15
#define RST_BUS_HSTIMER		16
#define RST_BUS_SPI0		17
#define RST_BUS_SPI1		18
#define RST_BUS_SPI2		19
#define RST_BUS_SPI3		20
#define RST_BUS_SATA		21
#define RST_BUS_OTG		22
#define RST_BUS_EHCI0		23
#define RST_BUS_EHCI1		24
#define RST_BUS_EHCI2		25
#define RST_BUS_OHCI0		26
#define RST_BUS_OHCI1		27
#define RST_BUS_OHCI2		28
#define RST_BUS_VE		29
#define RST_BUS_MP		30
#define RST_BUS_DEINTERLACE	31
#define RST_BUS_CSI0		32
#define RST_BUS_CSI1		33
#define RST_BUS_HDMI0		34
#define RST_BUS_HDMI1		35
#define RST_BUS_DE		36
#define RST_BUS_TVE0		37
#define RST_BUS_TVE1		38
#define RST_BUS_TVE_TOP		39
#define RST_BUS_GMAC		40
#define RST_BUS_GPU		41
#define RST_BUS_TVD0		42
#define RST_BUS_TVD1		43
#define RST_BUS_TVD2		44
#define RST_BUS_TVD3		45
#define RST_BUS_TVD_TOP		46
#define RST_BUS_TCON_LCD0	47
#define RST_BUS_TCON_LCD1	48
#define RST_BUS_TCON_TV0	49
#define RST_BUS_TCON_TV1	50
#define RST_BUS_TCON_TOP	51
#define RST_BUS_DBG		52
#define RST_BUS_LVDS		53
#define RST_BUS_CODEC		54
#define RST_BUS_SPDIF		55
#define RST_BUS_AC97		56
#define RST_BUS_IR0		57
#define RST_BUS_IR1		58
#define RST_BUS_THS		59
#define RST_BUS_KEYPAD		60
#define RST_BUS_I2S0		61
#define RST_BUS_I2S1		62
#define RST_BUS_I2S2		63
#define RST_BUS_I2C0		64
#define RST_BUS_I2C1		65
#define RST_BUS_I2C2		66
#define RST_BUS_I2C3		67
#define RST_BUS_CAN		68
#define RST_BUS_SCR		69
#define RST_BUS_PS20		70
#define RST_BUS_PS21		71
#define RST_BUS_I2C4		72
#define RST_BUS_UART0		73
#define RST_BUS_UART1		74
#define RST_BUS_UART2		75
#define RST_BUS_UART3		76
#define RST_BUS_UART4		77
#define RST_BUS_UART5		78
#define RST_BUS_UART6		79
#define RST_BUS_UART7		80

#endif /* _DT_BINDINGS_RST_SUN8I_R40_H_ */
