| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Intel Tangier pinctrl functions |
| * |
| * Copyright (C) 2016, 2023 Intel Corporation |
| * |
| * Authors: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| * Raag Jadav <raag.jadav@intel.com> |
| */ |
| |
| #ifndef PINCTRL_TANGIER_H |
| #define PINCTRL_TANGIER_H |
| |
| #include <linux/spinlock_types.h> |
| #include <linux/types.h> |
| |
| #include <linux/pinctrl/pinctrl.h> |
| |
| #include "pinctrl-intel.h" |
| |
| struct device; |
| struct platform_device; |
| |
| #define TNG_FAMILY_NR 64 |
| #define TNG_FAMILY_LEN 0x400 |
| |
| /** |
| * struct tng_family - Tangier pin family description |
| * @barno: MMIO BAR number where registers for this family reside |
| * @pin_base: Starting pin of pins in this family |
| * @npins: Number of pins in this family |
| * @protected: True if family is protected by access |
| * @regs: Family specific common registers |
| */ |
| struct tng_family { |
| unsigned int barno; |
| unsigned int pin_base; |
| size_t npins; |
| bool protected; |
| void __iomem *regs; |
| }; |
| |
| #define TNG_FAMILY(b, s, e) \ |
| { \ |
| .barno = (b), \ |
| .pin_base = (s), \ |
| .npins = (e) - (s) + 1, \ |
| } |
| |
| #define TNG_FAMILY_PROTECTED(b, s, e) \ |
| { \ |
| .barno = (b), \ |
| .pin_base = (s), \ |
| .npins = (e) - (s) + 1, \ |
| .protected = true, \ |
| } |
| |
| /** |
| * struct tng_pinctrl - Tangier pinctrl private structure |
| * @dev: Pointer to the device structure |
| * @lock: Lock to serialize register access |
| * @pctldesc: Pin controller description |
| * @pctldev: Pointer to the pin controller device |
| * @families: Array of families this pinctrl handles |
| * @nfamilies: Number of families in the array |
| * @functions: Array of functions |
| * @nfunctions: Number of functions in the array |
| * @groups: Array of pin groups |
| * @ngroups: Number of groups in the array |
| * @pins: Array of pins this pinctrl controls |
| * @npins: Number of pins in the array |
| */ |
| struct tng_pinctrl { |
| struct device *dev; |
| raw_spinlock_t lock; |
| struct pinctrl_desc pctldesc; |
| struct pinctrl_dev *pctldev; |
| |
| /* Pin controller configuration */ |
| const struct tng_family *families; |
| size_t nfamilies; |
| const struct intel_function *functions; |
| size_t nfunctions; |
| const struct intel_pingroup *groups; |
| size_t ngroups; |
| const struct pinctrl_pin_desc *pins; |
| size_t npins; |
| }; |
| |
| int devm_tng_pinctrl_probe(struct platform_device *pdev); |
| |
| #endif /* PINCTRL_TANGIER_H */ |