94 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.4 * Copyright (c) 2020 Linaro Ltd.5 */6#ifndef __PINCTRL_LPASS_LPI_H__7#define __PINCTRL_LPASS_LPI_H__8 9#include <linux/array_size.h>10#include <linux/bits.h>11 12#include "../core.h"13 14struct platform_device;15 16struct pinctrl_pin_desc;17 18#define LPI_SLEW_RATE_CTL_REG 0xa00019#define LPI_TLMM_REG_OFFSET 0x100020#define LPI_SLEW_RATE_MAX 0x0321#define LPI_SLEW_BITS_SIZE 0x0222#define LPI_SLEW_RATE_MASK GENMASK(1, 0)23#define LPI_GPIO_CFG_REG 0x0024#define LPI_GPIO_PULL_MASK GENMASK(1, 0)25#define LPI_GPIO_FUNCTION_MASK GENMASK(5, 2)26#define LPI_GPIO_OUT_STRENGTH_MASK GENMASK(8, 6)27#define LPI_GPIO_OE_MASK BIT(9)28#define LPI_GPIO_VALUE_REG 0x0429#define LPI_GPIO_VALUE_IN_MASK BIT(0)30#define LPI_GPIO_VALUE_OUT_MASK BIT(1)31 32#define LPI_GPIO_BIAS_DISABLE 0x033#define LPI_GPIO_PULL_DOWN 0x134#define LPI_GPIO_KEEPER 0x235#define LPI_GPIO_PULL_UP 0x336#define LPI_GPIO_DS_TO_VAL(v) (v / 2 - 1)37#define LPI_NO_SLEW -138 39#define LPI_FUNCTION(fname) \40 [LPI_MUX_##fname] = { \41 .name = #fname, \42 .groups = fname##_groups, \43 .ngroups = ARRAY_SIZE(fname##_groups), \44 }45 46#define LPI_PINGROUP(id, soff, f1, f2, f3, f4) \47 { \48 .pin = id, \49 .slew_offset = soff, \50 .funcs = (int[]){ \51 LPI_MUX_gpio, \52 LPI_MUX_##f1, \53 LPI_MUX_##f2, \54 LPI_MUX_##f3, \55 LPI_MUX_##f4, \56 }, \57 .nfuncs = 5, \58 }59 60/*61 * Slew rate control is done in the same register as rest of the62 * pin configuration.63 */64#define LPI_FLAG_SLEW_RATE_SAME_REG BIT(0)65 66struct lpi_pingroup {67 unsigned int pin;68 /* Bit offset in slew register for SoundWire pins only */69 int slew_offset;70 unsigned int *funcs;71 unsigned int nfuncs;72};73 74struct lpi_function {75 const char *name;76 const char * const *groups;77 unsigned int ngroups;78};79 80struct lpi_pinctrl_variant_data {81 const struct pinctrl_pin_desc *pins;82 int npins;83 const struct lpi_pingroup *groups;84 int ngroups;85 const struct lpi_function *functions;86 int nfunctions;87 unsigned int flags;88};89 90int lpi_pinctrl_probe(struct platform_device *pdev);91void lpi_pinctrl_remove(struct platform_device *pdev);92 93#endif /*__PINCTRL_LPASS_LPI_H__*/94