Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.18-rc3 93 lines 2.9 kB view raw
1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Header for Broadcom brcmstb GPIO based drivers 4 * 5 * Copyright (C) 2024-2025 Ivan T. Ivanov, Andrea della Porta 6 * Copyright (C) 2021-3 Raspberry Pi Ltd. 7 * Copyright (C) 2012 Chris Boot, Simon Arlott, Stephen Warren 8 * 9 * Based heavily on the BCM2835 GPIO & pinctrl driver, which was inspired by: 10 * pinctrl-nomadik.c, please see original file for copyright information 11 * pinctrl-tegra.c, please see original file for copyright information 12 */ 13 14#ifndef __PINCTRL_BRCMSTB_H__ 15#define __PINCTRL_BRCMSTB_H__ 16 17#include <linux/types.h> 18#include <linux/platform_device.h> 19 20#define BRCMSTB_FUNC(f) \ 21 [func_##f] = #f 22 23#define MUX_BIT_VALID 0x8000 24#define PAD_BIT_INVALID 0xffff 25 26#define MUX_BIT(muxreg, muxshift) \ 27 (MUX_BIT_VALID + ((muxreg) << 5) + ((muxshift) << 2)) 28#define PAD_BIT(padreg, padshift) \ 29 (((padreg) << 5) + ((padshift) << 1)) 30 31#define GPIO_REGS(n, muxreg, muxshift, padreg, padshift) \ 32 [n] = { MUX_BIT(muxreg, muxshift), PAD_BIT(padreg, padshift) } 33 34#define EMMC_REGS(n, padreg, padshift) \ 35 [n] = { 0, PAD_BIT(padreg, padshift) } 36 37#define AON_GPIO_REGS(n, muxreg, muxshift, padreg, padshift) \ 38 GPIO_REGS(n, muxreg, muxshift, padreg, padshift) 39 40#define AON_SGPIO_REGS(n, muxreg, muxshift) \ 41 [(n) + 32] = { MUX_BIT(muxreg, muxshift), PAD_BIT_INVALID } 42 43#define GPIO_PIN(n) PINCTRL_PIN(n, "gpio" #n) 44/** 45 * AON pins are in the Always-On power domain. SGPIOs are also 'Safe' 46 * being 5V tolerant (necessary for the HDMI I2C pins), and can be driven 47 * while the power is off. 48 */ 49#define AON_GPIO_PIN(n) PINCTRL_PIN(n, "aon_gpio" #n) 50#define AON_SGPIO_PIN(n) PINCTRL_PIN((n) + 32, "aon_sgpio" #n) 51 52struct pin_regs { 53 u16 mux_bit; 54 u16 pad_bit; 55}; 56 57/** 58 * struct brcmstb_pin_funcs - pins provide their primary/alternate 59 * functions in this struct 60 * @func_mask: mask representing valid bits of the function selector 61 * in the registers 62 * @funcs: array of function identifiers 63 * @n_funcs: number of identifiers of the @funcs array above 64 */ 65struct brcmstb_pin_funcs { 66 const u32 func_mask; 67 const u8 *funcs; 68 const unsigned int n_funcs; 69}; 70 71/** 72 * struct brcmstb_pdata - specific data for a pinctrl chip implementation 73 * @pctl_desc: pin controller descriptor for this implementation 74 * @gpio_range: range of GPIOs served by this controller 75 * @pin_regs: array of register descriptors for each pin 76 * @pin_funcs: array of all possible assignable function for each pin 77 * @func_count: total number of functions 78 * @func_gpio: which function number is GPIO (usually 0) 79 * @func_names: an array listing all function names 80 */ 81struct brcmstb_pdata { 82 const struct pinctrl_desc *pctl_desc; 83 const struct pinctrl_gpio_range *gpio_range; 84 const struct pin_regs *pin_regs; 85 const struct brcmstb_pin_funcs *pin_funcs; 86 const unsigned int func_count; 87 const unsigned int func_gpio; 88 const char * const *func_names; 89}; 90 91int brcmstb_pinctrl_probe(struct platform_device *pdev); 92 93#endif