1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2225f5eecSMinkyu Kang /*
3225f5eecSMinkyu Kang  * Copyright (C) 2012 Samsung Electronics
4225f5eecSMinkyu Kang  * Abhilash Kesavan <a.kesavan@samsung.com>
5225f5eecSMinkyu Kang  */
6225f5eecSMinkyu Kang 
7225f5eecSMinkyu Kang #ifndef __ASM_ARM_ARCH_PINMUX_H
8225f5eecSMinkyu Kang #define __ASM_ARM_ARCH_PINMUX_H
9225f5eecSMinkyu Kang 
10225f5eecSMinkyu Kang #include "periph.h"
11225f5eecSMinkyu Kang 
12225f5eecSMinkyu Kang /*
13225f5eecSMinkyu Kang  * Flags for setting specific configarations of peripherals.
14225f5eecSMinkyu Kang  * List will grow with support for more devices getting added.
15225f5eecSMinkyu Kang  */
16225f5eecSMinkyu Kang enum {
17225f5eecSMinkyu Kang 	PINMUX_FLAG_NONE	= 0x00000000,
18225f5eecSMinkyu Kang 
19225f5eecSMinkyu Kang 	/* Flags for eMMC */
20225f5eecSMinkyu Kang 	PINMUX_FLAG_8BIT_MODE	= 1 << 0,       /* SDMMC 8-bit mode */
21225f5eecSMinkyu Kang 
22225f5eecSMinkyu Kang 	/* Flags for SROM controller */
23225f5eecSMinkyu Kang 	PINMUX_FLAG_BANK	= 3 << 0,       /* bank number (0-3) */
24225f5eecSMinkyu Kang 	PINMUX_FLAG_16BIT	= 1 << 2,       /* 16-bit width */
25225f5eecSMinkyu Kang };
26225f5eecSMinkyu Kang 
27225f5eecSMinkyu Kang /**
28225f5eecSMinkyu Kang  * Configures the pinmux for a particular peripheral.
29225f5eecSMinkyu Kang  *
30225f5eecSMinkyu Kang  * Each gpio can be configured in many different ways (4 bits on exynos)
31225f5eecSMinkyu Kang  * such as "input", "output", "special function", "external interrupt"
32225f5eecSMinkyu Kang  * etc. This function will configure the peripheral pinmux along with
33225f5eecSMinkyu Kang  * pull-up/down and drive strength.
34225f5eecSMinkyu Kang  *
35225f5eecSMinkyu Kang  * @param peripheral	peripheral to be configured
36225f5eecSMinkyu Kang  * @param flags		configure flags
37225f5eecSMinkyu Kang  * @return 0 if ok, -1 on error (e.g. unsupported peripheral)
38225f5eecSMinkyu Kang  */
39225f5eecSMinkyu Kang int exynos_pinmux_config(int peripheral, int flags);
40225f5eecSMinkyu Kang 
41225f5eecSMinkyu Kang /**
42225f5eecSMinkyu Kang  * Decode the peripheral id using the interrpt numbers.
43225f5eecSMinkyu Kang  *
44225f5eecSMinkyu Kang  * @param blob  Device tree blob
45225f5eecSMinkyu Kang  * @param node  FDT I2C node to find
46225f5eecSMinkyu Kang  * @return peripheral id if ok, PERIPH_ID_NONE on error
47225f5eecSMinkyu Kang  */
48225f5eecSMinkyu Kang int pinmux_decode_periph_id(const void *blob, int node);
49225f5eecSMinkyu Kang #endif
50