/*
 * Copyright (C) 2010 Renesas Solutions Corp.
 *
 * Kuninori Morimoto <morimoto.kuninori@renesas.com>
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 */

#ifndef __ASM_SH7372_H__
#define __ASM_SH7372_H__

#include <linux/sh_clk.h>
#include <linux/pm_domain.h>

/*
 * Pin Function Controller:
 *	GPIO_FN_xx - GPIO used to select pin function
 *	GPIO_PORTxx - GPIO mapped to real I/O pin on CPU
 */
enum {
	/* PORT */
	GPIO_PORT0, GPIO_PORT1, GPIO_PORT2, GPIO_PORT3, GPIO_PORT4,
	GPIO_PORT5, GPIO_PORT6, GPIO_PORT7, GPIO_PORT8, GPIO_PORT9,

	GPIO_PORT10, GPIO_PORT11, GPIO_PORT12, GPIO_PORT13, GPIO_PORT14,
	GPIO_PORT15, GPIO_PORT16, GPIO_PORT17, GPIO_PORT18, GPIO_PORT19,

	GPIO_PORT20, GPIO_PORT21, GPIO_PORT22, GPIO_PORT23, GPIO_PORT24,
	GPIO_PORT25, GPIO_PORT26, GPIO_PORT27, GPIO_PORT28, GPIO_PORT29,

	GPIO_PORT30, GPIO_PORT31, GPIO_PORT32, GPIO_PORT33, GPIO_PORT34,
	GPIO_PORT35, GPIO_PORT36, GPIO_PORT37, GPIO_PORT38, GPIO_PORT39,

	GPIO_PORT40, GPIO_PORT41, GPIO_PORT42, GPIO_PORT43, GPIO_PORT44,
	GPIO_PORT45, GPIO_PORT46, GPIO_PORT47, GPIO_PORT48, GPIO_PORT49,

	GPIO_PORT50, GPIO_PORT51, GPIO_PORT52, GPIO_PORT53, GPIO_PORT54,
	GPIO_PORT55, GPIO_PORT56, GPIO_PORT57, GPIO_PORT58, GPIO_PORT59,

	GPIO_PORT60, GPIO_PORT61, GPIO_PORT62, GPIO_PORT63, GPIO_PORT64,
	GPIO_PORT65, GPIO_PORT66, GPIO_PORT67, GPIO_PORT68, GPIO_PORT69,

	GPIO_PORT70, GPIO_PORT71, GPIO_PORT72, GPIO_PORT73, GPIO_PORT74,
	GPIO_PORT75, GPIO_PORT76, GPIO_PORT77, GPIO_PORT78, GPIO_PORT79,

	GPIO_PORT80, GPIO_PORT81, GPIO_PORT82, GPIO_PORT83, GPIO_PORT84,
	GPIO_PORT85, GPIO_PORT86, GPIO_PORT87, GPIO_PORT88, GPIO_PORT89,

	GPIO_PORT90, GPIO_PORT91, GPIO_PORT92, GPIO_PORT93, GPIO_PORT94,
	GPIO_PORT95, GPIO_PORT96, GPIO_PORT97, GPIO_PORT98, GPIO_PORT99,

	GPIO_PORT100, GPIO_PORT101, GPIO_PORT102, GPIO_PORT103, GPIO_PORT104,
	GPIO_PORT105, GPIO_PORT106, GPIO_PORT107, GPIO_PORT108, GPIO_PORT109,

	GPIO_PORT110, GPIO_PORT111, GPIO_PORT112, GPIO_PORT113, GPIO_PORT114,
	GPIO_PORT115, GPIO_PORT116, GPIO_PORT117, GPIO_PORT118, GPIO_PORT119,

	GPIO_PORT120, GPIO_PORT121, GPIO_PORT122, GPIO_PORT123, GPIO_PORT124,
	GPIO_PORT125, GPIO_PORT126, GPIO_PORT127, GPIO_PORT128, GPIO_PORT129,

	GPIO_PORT130, GPIO_PORT131, GPIO_PORT132, GPIO_PORT133, GPIO_PORT134,
	GPIO_PORT135, GPIO_PORT136, GPIO_PORT137, GPIO_PORT138, GPIO_PORT139,

	GPIO_PORT140, GPIO_PORT141, GPIO_PORT142, GPIO_PORT143, GPIO_PORT144,
	GPIO_PORT145, GPIO_PORT146, GPIO_PORT147, GPIO_PORT148, GPIO_PORT149,

	GPIO_PORT150, GPIO_PORT151, GPIO_PORT152, GPIO_PORT153, GPIO_PORT154,
	GPIO_PORT155, GPIO_PORT156, GPIO_PORT157, GPIO_PORT158, GPIO_PORT159,

	GPIO_PORT160, GPIO_PORT161, GPIO_PORT162, GPIO_PORT163, GPIO_PORT164,
	GPIO_PORT165, GPIO_PORT166, GPIO_PORT167, GPIO_PORT168, GPIO_PORT169,

	GPIO_PORT170, GPIO_PORT171, GPIO_PORT172, GPIO_PORT173, GPIO_PORT174,
	GPIO_PORT175, GPIO_PORT176, GPIO_PORT177, GPIO_PORT178, GPIO_PORT179,

	GPIO_PORT180, GPIO_PORT181, GPIO_PORT182, GPIO_PORT183, GPIO_PORT184,
	GPIO_PORT185, GPIO_PORT186, GPIO_PORT187, GPIO_PORT188, GPIO_PORT189,

	GPIO_PORT190,

	/* IRQ */
	GPIO_FN_IRQ0_6,		/* PORT   6 */
	GPIO_FN_IRQ0_162,	/* PORT 162 */
	GPIO_FN_IRQ1,		/* PORT  12 */
	GPIO_FN_IRQ2_4,		/* PORT   4 */
	GPIO_FN_IRQ2_5,		/* PORT   5 */
	GPIO_FN_IRQ3_8,		/* PORT   8 */
	GPIO_FN_IRQ3_16,	/* PORT  16 */
	GPIO_FN_IRQ4_17,	/* PORT  17 */
	GPIO_FN_IRQ4_163,	/* PORT 163 */
	GPIO_FN_IRQ5,		/* PORT  18 */
	GPIO_FN_IRQ6_39,	/* PORT  39 */
	GPIO_FN_IRQ6_164,	/* PORT 164 */
	GPIO_FN_IRQ7_40,	/* PORT  40 */
	GPIO_FN_IRQ7_167,	/* PORT 167 */
	GPIO_FN_IRQ8_41,	/* PORT  41 */
	GPIO_FN_IRQ8_168,	/* PORT 168 */
	GPIO_FN_IRQ9_42,	/* PORT  42 */
	GPIO_FN_IRQ9_169,	/* PORT 169 */
	GPIO_FN_IRQ10,		/* PORT  65 */
	GPIO_FN_IRQ11,		/* PORT  67 */
	GPIO_FN_IRQ12_80,	/* PORT  80 */
	GPIO_FN_IRQ12_137,	/* PORT 137 */
	GPIO_FN_IRQ13_81,	/* PORT  81 */
	GPIO_FN_IRQ13_145,	/* PORT 145 */
	GPIO_FN_IRQ14_82,	/* PORT  82 */
	GPIO_FN_IRQ14_146,	/* PORT 146 */
	GPIO_FN_IRQ15_83,	/* PORT  83 */
	GPIO_FN_IRQ15_147,	/* PORT 147 */
	GPIO_FN_IRQ16_84,	/* PORT  84 */
	GPIO_FN_IRQ16_170,	/* PORT 170 */
	GPIO_FN_IRQ17,		/* PORT  85 */
	GPIO_FN_IRQ18,		/* PORT  86 */
	GPIO_FN_IRQ19,		/* PORT  87 */
	GPIO_FN_IRQ20,		/* PORT  92 */
	GPIO_FN_IRQ21,		/* PORT  93 */
	GPIO_FN_IRQ22,		/* PORT  94 */
	GPIO_FN_IRQ23,		/* PORT  95 */
	GPIO_FN_IRQ24,		/* PORT 112 */
	GPIO_FN_IRQ25,		/* PORT 119 */
	GPIO_FN_IRQ26_121,	/* PORT 121 */
	GPIO_FN_IRQ26_172,	/* PORT 172 */
	GPIO_FN_IRQ27_122,	/* PORT 122 */
	GPIO_FN_IRQ27_180,	/* PORT 180 */
	GPIO_FN_IRQ28_123,	/* PORT 123 */
	GPIO_FN_IRQ28_181,	/* PORT 181 */
	GPIO_FN_IRQ29_129,	/* PORT 129 */
	GPIO_FN_IRQ29_182,	/* PORT 182 */
	GPIO_FN_IRQ30_130,	/* PORT 130 */
	GPIO_FN_IRQ30_183,	/* PORT 183 */
	GPIO_FN_IRQ31_138,	/* PORT 138 */
	GPIO_FN_IRQ31_184,	/* PORT 184 */

	/*
	 * MSIOF0	(PORT 36, 37, 38, 39
	 * 		      40, 41, 42, 43, 44, 45)
	 */
	GPIO_FN_MSIOF0_TSYNC,	GPIO_FN_MSIOF0_TSCK,
	GPIO_FN_MSIOF0_RXD,	GPIO_FN_MSIOF0_RSCK,
	GPIO_FN_MSIOF0_RSYNC,	GPIO_FN_MSIOF0_MCK0,
	GPIO_FN_MSIOF0_MCK1,	GPIO_FN_MSIOF0_SS1,
	GPIO_FN_MSIOF0_SS2,	GPIO_FN_MSIOF0_TXD,

	/*
	 * MSIOF1	(PORT 39, 40, 41, 42, 43, 44
	 * 		      84, 85, 86, 87, 88, 89, 90, 91, 92, 93)
	 */
	GPIO_FN_MSIOF1_TSCK_39,	GPIO_FN_MSIOF1_TSYNC_40,
	GPIO_FN_MSIOF1_TSCK_88,	GPIO_FN_MSIOF1_TSYNC_89,
	GPIO_FN_MSIOF1_TXD_41,	GPIO_FN_MSIOF1_RXD_42,
	GPIO_FN_MSIOF1_TXD_90,	GPIO_FN_MSIOF1_RXD_91,
	GPIO_FN_MSIOF1_SS1_43,	GPIO_FN_MSIOF1_SS2_44,
	GPIO_FN_MSIOF1_SS1_92,	GPIO_FN_MSIOF1_SS2_93,
	GPIO_FN_MSIOF1_RSCK,	GPIO_FN_MSIOF1_RSYNC,
	GPIO_FN_MSIOF1_MCK0,	GPIO_FN_MSIOF1_MCK1,

	/*
	 * MSIOF2	(PORT 134, 135, 136, 137, 138, 139
	 *		      148, 149, 150, 151)
	 */
	GPIO_FN_MSIOF2_RSCK,	GPIO_FN_MSIOF2_RSYNC,
	GPIO_FN_MSIOF2_MCK0,	GPIO_FN_MSIOF2_MCK1,
	GPIO_FN_MSIOF2_SS1,	GPIO_FN_MSIOF2_SS2,
	GPIO_FN_MSIOF2_TSYNC,	GPIO_FN_MSIOF2_TSCK,
	GPIO_FN_MSIOF2_RXD,	GPIO_FN_MSIOF2_TXD,

	/* MSIOF3	(PORT 76, 77, 78, 79, 80, 81, 82, 83) */
	GPIO_FN_BBIF1_RXD,	GPIO_FN_BBIF1_TSYNC,
	GPIO_FN_BBIF1_TSCK,	GPIO_FN_BBIF1_TXD,
	GPIO_FN_BBIF1_RSCK,	GPIO_FN_BBIF1_RSYNC,
	GPIO_FN_BBIF1_FLOW,	GPIO_FN_BB_RX_FLOW_N,

	/* MSIOF4	(PORT 0, 1, 2, 3) */
	GPIO_FN_BBIF2_TSCK1,	GPIO_FN_BBIF2_TSYNC1,
	GPIO_FN_BBIF2_TXD1,	GPIO_FN_BBIF2_RXD,

	/* FSI		(PORT 4, 5, 6, 7, 8, 9, 10, 11, 15) */
	GPIO_FN_FSIACK,		GPIO_FN_FSIBCK,
	GPIO_FN_FSIAILR,	GPIO_FN_FSIAIBT,
	GPIO_FN_FSIAISLD,	GPIO_FN_FSIAOMC,
	GPIO_FN_FSIAOLR,	GPIO_FN_FSIAOBT,
	GPIO_FN_FSIAOSLD,	GPIO_FN_FSIASPDIF_11,
	GPIO_FN_FSIASPDIF_15,

	/* FMSI		(PORT 12, 13, 14, 15, 16, 17, 18, 65) */
	GPIO_FN_FMSOCK,		GPIO_FN_FMSOOLR,
	GPIO_FN_FMSIOLR,	GPIO_FN_FMSOOBT,
	GPIO_FN_FMSIOBT,	GPIO_FN_FMSOSLD,
	GPIO_FN_FMSOILR,	GPIO_FN_FMSIILR,
	GPIO_FN_FMSOIBT,	GPIO_FN_FMSIIBT,
	GPIO_FN_FMSISLD,	GPIO_FN_FMSICK,

	/* SCIFA0	(PORT 152, 153, 156, 157, 158) */
	GPIO_FN_SCIFA0_TXD,	GPIO_FN_SCIFA0_RXD,
	GPIO_FN_SCIFA0_SCK,	GPIO_FN_SCIFA0_RTS,
	GPIO_FN_SCIFA0_CTS,

	/* SCIFA1	(PORT 154, 155, 159, 160, 161) */
	GPIO_FN_SCIFA1_TXD,	GPIO_FN_SCIFA1_RXD,
	GPIO_FN_SCIFA1_SCK,	GPIO_FN_SCIFA1_RTS,
	GPIO_FN_SCIFA1_CTS,

	/* SCIFA2	(PORT 94, 95, 96, 97, 98) */
	GPIO_FN_SCIFA2_CTS1,	GPIO_FN_SCIFA2_RTS1,
	GPIO_FN_SCIFA2_TXD1,	GPIO_FN_SCIFA2_RXD1,
	GPIO_FN_SCIFA2_SCK1,

	/* SCIFA3	(PORT 43, 44,
			     140, 141, 142, 143, 144) */
	GPIO_FN_SCIFA3_CTS_43,	GPIO_FN_SCIFA3_CTS_140,
	GPIO_FN_SCIFA3_RTS_44,	GPIO_FN_SCIFA3_RTS_141,
	GPIO_FN_SCIFA3_SCK,	GPIO_FN_SCIFA3_TXD,
	GPIO_FN_SCIFA3_RXD,

	/* SCIFA4	(PORT 5, 6) */
	GPIO_FN_SCIFA4_RXD,	GPIO_FN_SCIFA4_TXD,

	/* SCIFA5	(PORT 8, 12) */
	GPIO_FN_SCIFA5_RXD,	GPIO_FN_SCIFA5_TXD,

	/* SCIFB	(PORT 162, 163, 164, 165, 166) */
	GPIO_FN_SCIFB_SCK,	GPIO_FN_SCIFB_RTS,
	GPIO_FN_SCIFB_CTS,	GPIO_FN_SCIFB_TXD,
	GPIO_FN_SCIFB_RXD,

	/*
	 * CEU		(PORT 16, 17,
	 *		      100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
	 *		      110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
	 *		      120)
	 */
	GPIO_FN_VIO_HD,		GPIO_FN_VIO_CKO1,	GPIO_FN_VIO_CKO2,
	GPIO_FN_VIO_VD,		GPIO_FN_VIO_CLK,	GPIO_FN_VIO_FIELD,
	GPIO_FN_VIO_CKO,
	GPIO_FN_VIO_D0,		GPIO_FN_VIO_D1,		GPIO_FN_VIO_D2,
	GPIO_FN_VIO_D3,		GPIO_FN_VIO_D4,		GPIO_FN_VIO_D5,
	GPIO_FN_VIO_D6,		GPIO_FN_VIO_D7,		GPIO_FN_VIO_D8,
	GPIO_FN_VIO_D9,		GPIO_FN_VIO_D10,	GPIO_FN_VIO_D11,
	GPIO_FN_VIO_D12,	GPIO_FN_VIO_D13,	GPIO_FN_VIO_D14,
	GPIO_FN_VIO_D15,

	/* USB0		(PORT 113, 114, 115, 116, 117, 167) */
	GPIO_FN_IDIN_0,		GPIO_FN_EXTLP_0,
	GPIO_FN_OVCN2_0,	GPIO_FN_PWEN_0,
	GPIO_FN_OVCN_0,		GPIO_FN_VBUS0_0,

	/* USB1		(PORT 18, 113, 114, 115, 116, 117, 138, 162, 168) */
	GPIO_FN_IDIN_1_18,	GPIO_FN_IDIN_1_113,
	GPIO_FN_PWEN_1_115,	GPIO_FN_PWEN_1_138,
	GPIO_FN_OVCN_1_114,	GPIO_FN_OVCN_1_162,
	GPIO_FN_EXTLP_1,	GPIO_FN_OVCN2_1,
	GPIO_FN_VBUS0_1,

	/* GPIO		(PORT 41, 42, 43, 44) */
	GPIO_FN_GPI0,	GPIO_FN_GPI1,	GPIO_FN_GPO0,	GPIO_FN_GPO1,

	/*
	 * BSC		(PORT 19,
	 *		      20, 21, 22, 25, 26, 27, 28, 29,
	 *		      30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
	 *		      40, 41, 42, 43, 44, 45,
	 *		      62, 63, 64, 65, 66, 67,
	 *		      71, 72, 74, 75)
	 */
	GPIO_FN_BS,	GPIO_FN_WE1,
	GPIO_FN_CKO,	GPIO_FN_WAIT,	GPIO_FN_RDWR,

	GPIO_FN_A0,	GPIO_FN_A1,	GPIO_FN_A2,	GPIO_FN_A3,
	GPIO_FN_A6,	GPIO_FN_A7,	GPIO_FN_A8,	GPIO_FN_A9,
	GPIO_FN_A10,	GPIO_FN_A11,	GPIO_FN_A12,	GPIO_FN_A13,
	GPIO_FN_A14,	GPIO_FN_A15,	GPIO_FN_A16,	GPIO_FN_A17,
	GPIO_FN_A18,	GPIO_FN_A19,	GPIO_FN_A20,	GPIO_FN_A21,
	GPIO_FN_A22,	GPIO_FN_A23,	GPIO_FN_A24,	GPIO_FN_A25,
	GPIO_FN_A26,

	GPIO_FN_CS0,	GPIO_FN_CS2,	GPIO_FN_CS4,
	GPIO_FN_CS5A,	GPIO_FN_CS5B,	GPIO_FN_CS6A,

	/*
	 * BSC/FLCTL		(PORT 23, 24,
	 *			      46, 47, 48, 49,
	 *			      50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
	 *			      60, 61, 69, 70)
	 */
	GPIO_FN_RD_FSC,		GPIO_FN_WE0_FWE,
	GPIO_FN_A4_FOE,		GPIO_FN_A5_FCDE,
	GPIO_FN_D0_NAF0,	GPIO_FN_D1_NAF1,	GPIO_FN_D2_NAF2,
	GPIO_FN_D3_NAF3,	GPIO_FN_D4_NAF4,	GPIO_FN_D5_NAF5,
	GPIO_FN_D6_NAF6,	GPIO_FN_D7_NAF7,	GPIO_FN_D8_NAF8,
	GPIO_FN_D9_NAF9,	GPIO_FN_D10_NAF10,	GPIO_FN_D11_NAF11,
	GPIO_FN_D12_NAF12,	GPIO_FN_D13_NAF13,	GPIO_FN_D14_NAF14,
	GPIO_FN_D15_NAF15,

	/*
	 * MMCIF(1)		(PORT 84, 85, 86, 87, 88, 89,
	 *			      90, 91, 92, 99)
	 */
	GPIO_FN_MMCD0_0,	GPIO_FN_MMCD0_1,	GPIO_FN_MMCD0_2,
	GPIO_FN_MMCD0_3,	GPIO_FN_MMCD0_4,	GPIO_FN_MMCD0_5,
	GPIO_FN_MMCD0_6,	GPIO_FN_MMCD0_7,
	GPIO_FN_MMCCMD0,	GPIO_FN_MMCCLK0,

	/* MMCIF(2)		(PORT 54, 55, 56, 57, 58, 59, 60, 61, 66, 67) */
	GPIO_FN_MMCD1_0,	GPIO_FN_MMCD1_1,	GPIO_FN_MMCD1_2,
	GPIO_FN_MMCD1_3,	GPIO_FN_MMCD1_4,	GPIO_FN_MMCD1_5,
	GPIO_FN_MMCD1_6,	GPIO_FN_MMCD1_7,
	GPIO_FN_MMCCLK1,	GPIO_FN_MMCCMD1,

	/* SPU2		(PORT 65) */
	GPIO_FN_VINT_I,

	/* FLCTL	(PORT 66, 68, 73) */
	GPIO_FN_FCE1,	GPIO_FN_FCE0,	GPIO_FN_FRB,

	/* HSI		(PORT 76, 77, 78, 79, 80, 81, 82, 83) */
	GPIO_FN_GP_RX_FLAG,	GPIO_FN_GP_RX_DATA,	GPIO_FN_GP_TX_READY,
	GPIO_FN_GP_RX_WAKE,	GPIO_FN_MP_TX_FLAG,	GPIO_FN_MP_TX_DATA,
	GPIO_FN_MP_RX_READY,	GPIO_FN_MP_TX_WAKE,

	/*
	 * MFI		(PORT 76, 77, 78, 79,
	 *		      80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
	 *		      90, 91, 92, 93, 94, 95, 96, 97, 98, 99)
	 */
	GPIO_FN_MFIv6,	/* see MSEL4CR 6 */
	GPIO_FN_MFIv4,	/* see MSEL4CR 6 */

	GPIO_FN_MEMC_CS0,		GPIO_FN_MEMC_BUSCLK_MEMC_A0,
	GPIO_FN_MEMC_CS1_MEMC_A1,	GPIO_FN_MEMC_ADV_MEMC_DREQ0,
	GPIO_FN_MEMC_WAIT_MEMC_DREQ1,	GPIO_FN_MEMC_NOE,
	GPIO_FN_MEMC_NWE,		GPIO_FN_MEMC_INT,

	GPIO_FN_MEMC_AD0,	GPIO_FN_MEMC_AD1,	GPIO_FN_MEMC_AD2,
	GPIO_FN_MEMC_AD3,	GPIO_FN_MEMC_AD4,	GPIO_FN_MEMC_AD5,
	GPIO_FN_MEMC_AD6,	GPIO_FN_MEMC_AD7,	GPIO_FN_MEMC_AD8,
	GPIO_FN_MEMC_AD9,	GPIO_FN_MEMC_AD10,	GPIO_FN_MEMC_AD11,
	GPIO_FN_MEMC_AD12,	GPIO_FN_MEMC_AD13,	GPIO_FN_MEMC_AD14,
	GPIO_FN_MEMC_AD15,

	/* SIM		(PORT 94, 95, 98) */
	GPIO_FN_SIM_RST,	GPIO_FN_SIM_CLK,	GPIO_FN_SIM_D,

	/* TPU		(PORT 93, 99, 112, 160, 161) */
	GPIO_FN_TPU0TO0,	GPIO_FN_TPU0TO1,
	GPIO_FN_TPU0TO2_93,	GPIO_FN_TPU0TO2_99,
	GPIO_FN_TPU0TO3,

	/* I2C2		(PORT 110, 111) */
	GPIO_FN_I2C_SCL2,	GPIO_FN_I2C_SDA2,

	/* I2C3(1)	(PORT 114, 115) */
	GPIO_FN_I2C_SCL3,	GPIO_FN_I2C_SDA3,

	/* I2C3(2)	(PORT 137, 145) */
	GPIO_FN_I2C_SCL3S,	GPIO_FN_I2C_SDA3S,

	/* I2C4(2)	(PORT 116, 117) */
	GPIO_FN_I2C_SCL4,	GPIO_FN_I2C_SDA4,

	/* I2C4(2)	(PORT 146, 147) */
	GPIO_FN_I2C_SCL4S,	GPIO_FN_I2C_SDA4S,

	/*
	 * KEYSC	(PORT 121, 122, 123, 124, 125, 126, 127, 128, 129,
	 *		      130, 131, 132, 133, 134, 135, 136)
	 */
	GPIO_FN_KEYOUT0,	GPIO_FN_KEYIN0_121,	GPIO_FN_KEYIN0_136,
	GPIO_FN_KEYOUT1,	GPIO_FN_KEYIN1_122,	GPIO_FN_KEYIN1_135,
	GPIO_FN_KEYOUT2,	GPIO_FN_KEYIN2_123,	GPIO_FN_KEYIN2_134,
	GPIO_FN_KEYOUT3,	GPIO_FN_KEYIN3_124,	GPIO_FN_KEYIN3_133,
	GPIO_FN_KEYOUT4,	GPIO_FN_KEYIN4,
	GPIO_FN_KEYOUT5,	GPIO_FN_KEYIN5,
	GPIO_FN_KEYOUT6,	GPIO_FN_KEYIN6,
	GPIO_FN_KEYOUT7,	GPIO_FN_KEYIN7,

	/*
	 * LCDC		(PORT      121, 122, 123, 124, 125, 126, 127, 128, 129,
	 *		      130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
	 *		      140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
	 *		      150, 151)
	 */
	GPIO_FN_LCDC0_SELECT, /* LCDC 0 */
	GPIO_FN_LCDC1_SELECT, /* LCDC 1 */
	GPIO_FN_LCDHSYN,	GPIO_FN_LCDCS,	GPIO_FN_LCDVSYN,
	GPIO_FN_LCDDCK,		GPIO_FN_LCDWR,	GPIO_FN_LCDRD,
	GPIO_FN_LCDDISP,	GPIO_FN_LCDRS,	GPIO_FN_LCDLCLK,
	GPIO_FN_LCDDON,

	GPIO_FN_LCDD0,	GPIO_FN_LCDD1,	GPIO_FN_LCDD2,	GPIO_FN_LCDD3,
	GPIO_FN_LCDD4,	GPIO_FN_LCDD5,	GPIO_FN_LCDD6,	GPIO_FN_LCDD7,
	GPIO_FN_LCDD8,	GPIO_FN_LCDD9,	GPIO_FN_LCDD10,	GPIO_FN_LCDD11,
	GPIO_FN_LCDD12,	GPIO_FN_LCDD13,	GPIO_FN_LCDD14,	GPIO_FN_LCDD15,
	GPIO_FN_LCDD16,	GPIO_FN_LCDD17,	GPIO_FN_LCDD18,	GPIO_FN_LCDD19,
	GPIO_FN_LCDD20,	GPIO_FN_LCDD21,	GPIO_FN_LCDD22,	GPIO_FN_LCDD23,

	/* IRDA		(PORT 139, 140, 141, 142) */
	GPIO_FN_IRDA_OUT,	GPIO_FN_IRDA_IN,	GPIO_FN_IRDA_FIRSEL,
	GPIO_FN_IROUT_139,	GPIO_FN_IROUT_140,

	/* TSIF1	(PORT 156, 157, 158, 159) */
	GPIO_FN_TS0_1SELECT, /* TSIF0 - 1 select */
	GPIO_FN_TS0_2SELECT, /* TSIF0 - 2 select */
	GPIO_FN_TS1_1SELECT, /* TSIF1 - 1 select */
	GPIO_FN_TS1_2SELECT, /* TSIF1 - 2 select */

	GPIO_FN_TS_SPSYNC1,	GPIO_FN_TS_SDAT1,
	GPIO_FN_TS_SDEN1,	GPIO_FN_TS_SCK1,

	/* TSIF2	(PORT 137, 145, 146, 147) */
	GPIO_FN_TS_SPSYNC2,	GPIO_FN_TS_SDAT2,
	GPIO_FN_TS_SDEN2,	GPIO_FN_TS_SCK2,

	/* HDMI		(PORT 169, 170) */
	GPIO_FN_HDMI_HPD,	GPIO_FN_HDMI_CEC,

	/* SDHI0	(PORT 171, 172, 173, 174, 175, 176, 177, 178) */
	GPIO_FN_SDHICLK0,	GPIO_FN_SDHICD0,
	GPIO_FN_SDHICMD0,	GPIO_FN_SDHIWP0,
	GPIO_FN_SDHID0_0,	GPIO_FN_SDHID0_1,
	GPIO_FN_SDHID0_2,	GPIO_FN_SDHID0_3,

	/* SDHI1	(PORT 179, 180, 181, 182, 183, 184) */
	GPIO_FN_SDHICLK1,	GPIO_FN_SDHICMD1,	GPIO_FN_SDHID1_0,
	GPIO_FN_SDHID1_1,	GPIO_FN_SDHID1_2,	GPIO_FN_SDHID1_3,

	/* SDHI2	(PORT 185, 186, 187, 188, 189, 190) */
	GPIO_FN_SDHICLK2,	GPIO_FN_SDHICMD2,	GPIO_FN_SDHID2_0,
	GPIO_FN_SDHID2_1,	GPIO_FN_SDHID2_2,	GPIO_FN_SDHID2_3,

	/* SDENC	see MSEL4CR 19 */
	GPIO_FN_SDENC_CPG,
	GPIO_FN_SDENC_DV_CLKI,
};

/* DMA slave IDs */
enum {
	SHDMA_SLAVE_INVALID,
	SHDMA_SLAVE_SCIF0_TX,
	SHDMA_SLAVE_SCIF0_RX,
	SHDMA_SLAVE_SCIF1_TX,
	SHDMA_SLAVE_SCIF1_RX,
	SHDMA_SLAVE_SCIF2_TX,
	SHDMA_SLAVE_SCIF2_RX,
	SHDMA_SLAVE_SCIF3_TX,
	SHDMA_SLAVE_SCIF3_RX,
	SHDMA_SLAVE_SCIF4_TX,
	SHDMA_SLAVE_SCIF4_RX,
	SHDMA_SLAVE_SCIF5_TX,
	SHDMA_SLAVE_SCIF5_RX,
	SHDMA_SLAVE_SCIF6_TX,
	SHDMA_SLAVE_SCIF6_RX,
	SHDMA_SLAVE_SDHI0_RX,
	SHDMA_SLAVE_SDHI0_TX,
	SHDMA_SLAVE_SDHI1_RX,
	SHDMA_SLAVE_SDHI1_TX,
	SHDMA_SLAVE_SDHI2_RX,
	SHDMA_SLAVE_SDHI2_TX,
	SHDMA_SLAVE_MMCIF_RX,
	SHDMA_SLAVE_MMCIF_TX,
	SHDMA_SLAVE_USB0_TX,
	SHDMA_SLAVE_USB0_RX,
	SHDMA_SLAVE_USB1_TX,
	SHDMA_SLAVE_USB1_RX,
};

extern struct clk sh7372_extal1_clk;
extern struct clk sh7372_extal2_clk;
extern struct clk sh7372_dv_clki_clk;
extern struct clk sh7372_dv_clki_div2_clk;
extern struct clk sh7372_pllc2_clk;
extern struct clk sh7372_fsiack_clk;
extern struct clk sh7372_fsibck_clk;
extern struct clk sh7372_fsidiva_clk;
extern struct clk sh7372_fsidivb_clk;

struct platform_device;

struct sh7372_pm_domain {
	struct generic_pm_domain genpd;
	struct dev_power_governor *gov;
	int (*suspend)(void);
	void (*resume)(void);
	unsigned int bit_shift;
	bool no_debug;
};

static inline struct sh7372_pm_domain *to_sh7372_pd(struct generic_pm_domain *d)
{
	return container_of(d, struct sh7372_pm_domain, genpd);
}

#ifdef CONFIG_PM
extern struct sh7372_pm_domain sh7372_a4lc;
extern struct sh7372_pm_domain sh7372_a4mp;
extern struct sh7372_pm_domain sh7372_d4;
extern struct sh7372_pm_domain sh7372_a4r;
extern struct sh7372_pm_domain sh7372_a3rv;
extern struct sh7372_pm_domain sh7372_a3ri;
extern struct sh7372_pm_domain sh7372_a4s;
extern struct sh7372_pm_domain sh7372_a3sp;
extern struct sh7372_pm_domain sh7372_a3sg;

extern void sh7372_init_pm_domain(struct sh7372_pm_domain *sh7372_pd);
extern void sh7372_add_device_to_domain(struct sh7372_pm_domain *sh7372_pd,
					struct platform_device *pdev);
extern void sh7372_pm_add_subdomain(struct sh7372_pm_domain *sh7372_pd,
				    struct sh7372_pm_domain *sh7372_sd);
#else
#define sh7372_init_pm_domain(pd) do { } while(0)
#define sh7372_add_device_to_domain(pd, pdev) do { } while(0)
#define sh7372_pm_add_subdomain(pd, sd) do { } while(0)
#endif /* CONFIG_PM */

extern void sh7372_intcs_suspend(void);
extern void sh7372_intcs_resume(void);
extern void sh7372_intca_suspend(void);
extern void sh7372_intca_resume(void);

#endif /* __ASM_SH7372_H__ */
