STRUCT MSM_PINCTRL_SOC_DATA(9)
π NAME π
okay so struct msm_pinctrl_soc_data β it's the Qualcomm pin controller driver configuration struct, bestie. that's literally the whole thing. this page lives in the Kernel API Manual, section 9, and it's here to tell u what every single field of this struct means π«Ά
β¨ SYNOPSIS β¨
like, here's the actual struct, copy it exactly, no cap:
struct msm_pinctrl_soc_data {
const struct pinctrl_pin_desc *pins;
unsigned npins;
const struct pinfunction *functions;
unsigned nfunctions;
const struct msm_pingroup *groups;
unsigned ngroups;
unsigned ngpios;
bool pull_no_keeper;
const char *const *tiles;
unsigned int ntiles;
const int *reserved_gpios;
const struct msm_gpio_wakeirq_map *wakeirq_map;
unsigned int nwakeirq_map;
bool wakeirq_dual_edge_errata;
unsigned int gpio_func;
unsigned int egpio_func;
};
π Members π
okay so field by field, let's go π
pinsβ an array that describes all the pins the pin controller affects. all of them. the whole cast πnpinsβ the number of entries inpins. yes it's the count. yes it's a separate field. we love a matching pair.functionsβ an array describing all the mux functions the SoC supports β¨nfunctionsβ the number of entries infunctions.groupsβ an array describing all the pin groups the pin SoC supports.ngroupsβ the number of entries ingroups. (the original page literally spells it "numbmer" and honestly? iconic typo behavior, we're keeping the energy but not the spelling π)ngpiosβ it's in the struct, bestie. it's sitting right there betweenngroupsandpull_no_keeperlooking pretty.pull_no_keeperβ abool, and if it's set, the SoC does not support keeper bias. no keeper. none. periodt.tilesβ aconst char *const *array of tiles. it's in the struct, it's part of the vibe.ntilesβunsigned int, the number of tiles.reserved_gpiosβ aconst int *of reserved GPIOs.wakeirq_mapβ the map of wakeup capable GPIOs and the pin at PDC/MPM π₯nwakeirq_mapβ the number of entries inwakeirq_map.wakeirq_dual_edge_errataβ if this istruethen GPIOs using thewakeirq_mapneed to be aware that their parent can't handle dual edge interrupts. like, that's the whole warning. be aware. πgpio_funcβ which function number is GPIO (usually0).egpio_funcβ if non-zero then this SoC supports eGPIO. and okay this one needs the full explanation so listen up: even though in hardware this is a mux 1-level above the TLMM, we'll treat it as if this is just another mux state of the TLMM. since it doesn't really map to hardware, we'll allocate a virtual function number for eGPIO, and any time we see that function number used we'll treat it as a request to mux away from our TLMM towards another owner. that's the deal, no notes π
ngl some of these fields (ngpios,tiles,ntiles,reserved_gpios) show up in the struct up top but don't get their own little description down here β that's just how the page is, don't come for me, i'm reporting faithfully π«‘
π SEE ALSO π
- Kernel file
./drivers/pinctrl/qcom/pinctrl-msm.h struct msm_pingroup(9)struct msm_gpio_wakeirq_map(9)
go read those next, bestie, iykyk π¦
and that's the page!! mwah π this came from ./drivers/pinctrl/qcom, dated October 2026, and it's struct msm_pinctrl_soc_data(9) all the way down. slay, go configure some pins πΈβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms