/*
 * Copyright (C) 2016 Maxime Ripard <maxime.ripard@free-electrons.com>
 *
 * 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_CLK_SUN50I_A64_H_
#define _DT_BINDINGS_CLK_SUN50I_A64_H_

#define CLK_PLL_PERIPH0		11

#define CLK_BUS_MIPI_DSI	28
#define CLK_BUS_CE		29
#define CLK_BUS_DMA		30
#define CLK_BUS_MMC0		31
#define CLK_BUS_MMC1		32
#define CLK_BUS_MMC2		33
#define CLK_BUS_NAND		34
#define CLK_BUS_DRAM		35
#define CLK_BUS_EMAC		36
#define CLK_BUS_TS		37
#define CLK_BUS_HSTIMER		38
#define CLK_BUS_SPI0		39
#define CLK_BUS_SPI1		40
#define CLK_BUS_OTG		41
#define CLK_BUS_EHCI0		42
#define CLK_BUS_EHCI1		43
#define CLK_BUS_OHCI0		44
#define CLK_BUS_OHCI1		45
#define CLK_BUS_VE		46
#define CLK_BUS_TCON0		47
#define CLK_BUS_TCON1		48
#define CLK_BUS_DEINTERLACE	49
#define CLK_BUS_CSI		50
#define CLK_BUS_HDMI		51
#define CLK_BUS_DE		52
#define CLK_BUS_GPU		53
#define CLK_BUS_MSGBOX		54
#define CLK_BUS_SPINLOCK	55
#define CLK_BUS_CODEC		56
#define CLK_BUS_SPDIF		57
#define CLK_BUS_PIO		58
#define CLK_BUS_THS		59
#define CLK_BUS_I2S0		60
#define CLK_BUS_I2S1		61
#define CLK_BUS_I2S2		62
#define CLK_BUS_I2C0		63
#define CLK_BUS_I2C1		64
#define CLK_BUS_I2C2		65
#define CLK_BUS_SCR		66
#define CLK_BUS_UART0		67
#define CLK_BUS_UART1		68
#define CLK_BUS_UART2		69
#define CLK_BUS_UART3		70
#define CLK_BUS_UART4		71
#define CLK_BUS_DBG		72
#define CLK_THS			73
#define CLK_NAND		74
#define CLK_MMC0		75
#define CLK_MMC1		76
#define CLK_MMC2		77
#define CLK_TS			78
#define CLK_CE			79
#define CLK_SPI0		80
#define CLK_SPI1		81
#define CLK_I2S0		82
#define CLK_I2S1		83
#define CLK_I2S2		84
#define CLK_SPDIF		85
#define CLK_USB_PHY0		86
#define CLK_USB_PHY1		87
#define CLK_USB_HSIC		88
#define CLK_USB_HSIC_12M	89

#define CLK_USB_OHCI0		91

#define CLK_USB_OHCI1		93

#define CLK_DRAM_VE		95
#define CLK_DRAM_CSI		96
#define CLK_DRAM_DEINTERLACE	97
#define CLK_DRAM_TS		98
#define CLK_DE			99
#define CLK_TCON0		100
#define CLK_TCON1		101
#define CLK_DEINTERLACE		102
#define CLK_CSI_MISC		103
#define CLK_CSI_SCLK		104
#define CLK_CSI_MCLK		105
#define CLK_VE			106
#define CLK_AC_DIG		107
#define CLK_AC_DIG_4X		108
#define CLK_AVS			109
#define CLK_HDMI		110
#define CLK_HDMI_DDC		111

#define CLK_DSI_DPHY		113
#define CLK_GPU			114

#endif /* _DT_BINDINGS_CLK_SUN50I_H_ */
