summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorJonas Jelonek <jelonek.jonas@gmail.com>2025-12-27 18:01:34 +0000
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>2026-01-02 10:59:50 +0100
commit2b03d9a40cd1fea42fd65d2b66df80edc0f374c8 (patch)
tree0e748da7b4b027dcb0dcb8f9d1fc48357cc49c51 /include/linux
parent2a7618ba8698874e9871a8ec5453e0068e94d9e5 (diff)
gpio: add gpio-line-mux driver
Add a new driver which provides a 1-to-many mapping for a single real GPIO using a multiplexer. Each virtual GPIO corresponds to a multiplexer state which, if set for the multiplexer, connects the real GPIO to the corresponding virtual GPIO. This can help in various usecases. One practical case is the special hardware design of the Realtek-based XS1930-10 switch from Zyxel. It features two SFP+ ports/cages whose signals are wired directly to the switch SoC. Although Realtek SoCs are short on GPIOs, there are usually enough the fit the SFP signals without any hacks. However, Zyxel did some weird design and connected RX_LOS, MOD_ABS and TX_FAULT of one SFP cage onto a single GPIO line controlled by a multiplexer (the same for the other SFP cage). The single multiplexer controls the lines for both SFP and depending on the state, the designated 'signal GPIO lines' are connected to one of the three SFP signals. Because the SFP core/driver doesn't support multiplexer but needs single GPIOs for each of the signals, this driver fills the gap between both. It registers a gpio_chip, provides multiple virtual GPIOs and sets the backing multiplexer accordingly. Due to several practical issues, this is input-only and doesn't support IRQs. Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com> Reviewed-by: Thomas Richard <thomas.richard@bootlin.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Link: https://lore.kernel.org/r/20251227180134.1262138-3-jelonek.jonas@gmail.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Diffstat (limited to 'include/linux')
0 files changed, 0 insertions, 0 deletions