1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2020 Linaro Ltd.
6 #ifndef __PINCTRL_LPASS_LPI_H__
7 #define __PINCTRL_LPASS_LPI_H__
9 #include <linux/bitops.h>
10 #include <linux/bitfield.h>
13 #define LPI_SLEW_RATE_CTL_REG 0xa000
14 #define LPI_TLMM_REG_OFFSET 0x1000
15 #define LPI_SLEW_RATE_MAX 0x03
16 #define LPI_SLEW_BITS_SIZE 0x02
17 #define LPI_SLEW_RATE_MASK GENMASK(1, 0)
18 #define LPI_GPIO_CFG_REG 0x00
19 #define LPI_GPIO_PULL_MASK GENMASK(1, 0)
20 #define LPI_GPIO_FUNCTION_MASK GENMASK(5, 2)
21 #define LPI_GPIO_OUT_STRENGTH_MASK GENMASK(8, 6)
22 #define LPI_GPIO_OE_MASK BIT(9)
23 #define LPI_GPIO_VALUE_REG 0x04
24 #define LPI_GPIO_VALUE_IN_MASK BIT(0)
25 #define LPI_GPIO_VALUE_OUT_MASK BIT(1)
27 #define LPI_GPIO_BIAS_DISABLE 0x0
28 #define LPI_GPIO_PULL_DOWN 0x1
29 #define LPI_GPIO_KEEPER 0x2
30 #define LPI_GPIO_PULL_UP 0x3
31 #define LPI_GPIO_DS_TO_VAL(v) (v / 2 - 1)
32 #define LPI_NO_SLEW -1
34 #define LPI_FUNCTION(fname) \
35 [LPI_MUX_##fname] = { \
37 .groups = fname##_groups, \
38 .ngroups = ARRAY_SIZE(fname##_groups), \
41 #define LPI_PINGROUP(id, soff, f1, f2, f3, f4) \
43 .group.name = "gpio" #id, \
44 .group.pins = gpio##id##_pins, \
46 .slew_offset = soff, \
47 .group.num_pins = ARRAY_SIZE(gpio##id##_pins), \
59 struct group_desc group;
61 /* Bit offset in slew register for SoundWire pins only */
69 const char * const *groups;
73 struct lpi_pinctrl_variant_data {
74 const struct pinctrl_pin_desc *pins;
76 const struct lpi_pingroup *groups;
78 const struct lpi_function *functions;
82 int lpi_pinctrl_probe(struct platform_device *pdev);
83 int lpi_pinctrl_remove(struct platform_device *pdev);
85 #endif /*__PINCTRL_LPASS_LPI_H__*/