brintos

brintos / linux-shallow public Read only

0
0
Text · 2.2 KiB · a9b2f65 Raw
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