1*16ca80adSThomas Abraham /* 2*16ca80adSThomas Abraham * Exynos pinctrl driver header. 3*16ca80adSThomas Abraham * Copyright (C) 2016 Samsung Electronics 4*16ca80adSThomas Abraham * Thomas Abraham <thomas.ab@samsung.com> 5*16ca80adSThomas Abraham * 6*16ca80adSThomas Abraham * SPDX-License-Identifier: GPL-2.0+ 7*16ca80adSThomas Abraham */ 8*16ca80adSThomas Abraham 9*16ca80adSThomas Abraham #ifndef __PINCTRL_EXYNOS_H_ 10*16ca80adSThomas Abraham #define __PINCTRL_EXYNOS__H_ 11*16ca80adSThomas Abraham 12*16ca80adSThomas Abraham #define PIN_CON 0x00 /* Offset of pin function register */ 13*16ca80adSThomas Abraham #define PIN_DAT 0x04 /* Offset of pin data register */ 14*16ca80adSThomas Abraham #define PIN_PUD 0x08 /* Offset of pin pull up/down config register */ 15*16ca80adSThomas Abraham #define PIN_DRV 0x0C /* Offset of pin drive strength register */ 16*16ca80adSThomas Abraham 17*16ca80adSThomas Abraham /** 18*16ca80adSThomas Abraham * struct samsung_pin_bank_data: represent a controller pin-bank data. 19*16ca80adSThomas Abraham * @offset: starting offset of the pin-bank registers. 20*16ca80adSThomas Abraham * @nr_pins: number of pins included in this bank. 21*16ca80adSThomas Abraham * @name: name to be prefixed for each pin in this pin bank. 22*16ca80adSThomas Abraham */ 23*16ca80adSThomas Abraham struct samsung_pin_bank_data { 24*16ca80adSThomas Abraham u32 offset; 25*16ca80adSThomas Abraham u8 nr_pins; 26*16ca80adSThomas Abraham const char *name; 27*16ca80adSThomas Abraham }; 28*16ca80adSThomas Abraham 29*16ca80adSThomas Abraham #define EXYNOS_PIN_BANK(pins, reg, id) \ 30*16ca80adSThomas Abraham { \ 31*16ca80adSThomas Abraham .offset = reg, \ 32*16ca80adSThomas Abraham .nr_pins = pins, \ 33*16ca80adSThomas Abraham .name = id \ 34*16ca80adSThomas Abraham } 35*16ca80adSThomas Abraham 36*16ca80adSThomas Abraham /** 37*16ca80adSThomas Abraham * struct samsung_pin_ctrl: represent a pin controller. 38*16ca80adSThomas Abraham * @pin_banks: list of pin banks included in this controller. 39*16ca80adSThomas Abraham * @nr_banks: number of pin banks. 40*16ca80adSThomas Abraham */ 41*16ca80adSThomas Abraham struct samsung_pin_ctrl { 42*16ca80adSThomas Abraham const struct samsung_pin_bank_data *pin_banks; 43*16ca80adSThomas Abraham u32 nr_banks; 44*16ca80adSThomas Abraham }; 45*16ca80adSThomas Abraham 46*16ca80adSThomas Abraham /** 47*16ca80adSThomas Abraham * struct exynos_pinctrl_priv: exynos pin controller driver private data 48*16ca80adSThomas Abraham * @pin_ctrl: pin controller bank information. 49*16ca80adSThomas Abraham * @base: base address of the pin controller instance. 50*16ca80adSThomas Abraham * @num_banks: number of pin banks included in the pin controller. 51*16ca80adSThomas Abraham */ 52*16ca80adSThomas Abraham struct exynos_pinctrl_priv { 53*16ca80adSThomas Abraham const struct samsung_pin_ctrl *pin_ctrl; 54*16ca80adSThomas Abraham unsigned long base; 55*16ca80adSThomas Abraham int num_banks; 56*16ca80adSThomas Abraham }; 57*16ca80adSThomas Abraham 58*16ca80adSThomas Abraham /** 59*16ca80adSThomas Abraham * struct exynos_pinctrl_config_data: configuration for a peripheral. 60*16ca80adSThomas Abraham * @offset: offset of the config registers in the controller. 61*16ca80adSThomas Abraham * @mask: value of the register to be masked with. 62*16ca80adSThomas Abraham * @value: new value to be programmed. 63*16ca80adSThomas Abraham */ 64*16ca80adSThomas Abraham struct exynos_pinctrl_config_data { 65*16ca80adSThomas Abraham const unsigned int offset; 66*16ca80adSThomas Abraham const unsigned int mask; 67*16ca80adSThomas Abraham const unsigned int value; 68*16ca80adSThomas Abraham }; 69*16ca80adSThomas Abraham 70*16ca80adSThomas Abraham 71*16ca80adSThomas Abraham void exynos_pinctrl_setup_peri(struct exynos_pinctrl_config_data *conf, 72*16ca80adSThomas Abraham unsigned int num_conf, unsigned long base); 73*16ca80adSThomas Abraham int exynos_pinctrl_set_state(struct udevice *dev, 74*16ca80adSThomas Abraham struct udevice *config); 75*16ca80adSThomas Abraham int exynos_pinctrl_probe(struct udevice *dev); 76*16ca80adSThomas Abraham 77*16ca80adSThomas Abraham #endif /* __PINCTRL_EXYNOS_H_ */ 78