drivers/pinctrl/nxp/pinctrl-s32cc.c
Source file repositories/reference/linux-study-clean/drivers/pinctrl/nxp/pinctrl-s32cc.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/pinctrl/nxp/pinctrl-s32cc.c- Extension
.c- Size
- 24976 bytes
- Lines
- 989
- Domain
- Driver Families
- Bucket
- drivers/pinctrl
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/bitops.hlinux/err.hlinux/gpio/driver.hlinux/init.hlinux/io.hlinux/module.hlinux/of.hlinux/platform_device.hlinux/pinctrl/machine.hlinux/pinctrl/pinconf.hlinux/pinctrl/pinctrl.hlinux/pinctrl/pinmux.hlinux/regmap.hlinux/seq_file.hlinux/slab.h../core.h../pinconf.h../pinctrl-utils.hpinctrl-s32.h
Detected Declarations
struct s32_pinctrl_mem_regionstruct gpio_pin_configstruct s32_pinctrl_contextstruct s32_pinctrlenum s32_write_typefunction get_pin_nofunction get_pin_funcfunction s32_get_regionfunction s32_check_pinfunction s32_regmap_readfunction s32_regmap_writefunction s32_regmap_updatefunction s32_get_groups_countfunction s32_get_group_pinsfunction s32_pin_dbg_showfunction s32_dt_group_node_to_mapfunction s32_dt_node_to_mapfunction for_each_available_child_of_node_scopedfunction s32_pmx_setfunction s32_pmx_get_funcs_countfunction s32_pmx_get_groupsfunction s32_pmx_gpio_request_enablefunction s32_pmx_gpio_disable_freefunction list_for_each_entry_safefunction s32_pmx_gpio_set_directionfunction s32_get_slew_regvalfunction s32_pin_set_pullfunction s32_parse_pincfgfunction s32_pinconf_mscr_writefunction s32_pinconf_getfunction s32_pinconf_setfunction s32_pconf_group_setfunction s32_pinconf_dbg_showfunction s32_pinconf_group_dbg_showfunction s32_pinctrl_should_savefunction s32_pinctrl_suspendfunction s32_pinctrl_resumefunction s32_pinctrl_parse_groupsfunction s32_pinctrl_parse_functionsfunction for_each_child_of_node_scopedfunction s32_pinctrl_probe_dtfunction s32_pinctrl_probe
Annotated Snippet
struct s32_pinctrl_mem_region {
struct regmap *map;
const struct s32_pin_range *pin_range;
char name[8];
};
/*
* Holds pin configuration for GPIO's.
* @pin_id: Pin ID for this GPIO
* @config: Pin settings
* @list: Linked list entry for each gpio pin
*/
struct gpio_pin_config {
unsigned int pin_id;
unsigned int config;
struct list_head list;
};
/*
* Pad config save/restore for power suspend/resume.
*/
struct s32_pinctrl_context {
unsigned int *pads;
};
/*
* @dev: a pointer back to containing device
* @pctl: a pointer to the pinctrl device structure
* @regions: reserved memory regions with start/end pin
* @info: structure containing information about the pin
* @gpio_configs: Saved configurations for GPIO pins
* @gpiop_configs_lock: lock for the `gpio_configs` list
* @s32_pinctrl_context: Configuration saved over system sleep
*/
struct s32_pinctrl {
struct device *dev;
struct pinctrl_dev *pctl;
struct s32_pinctrl_mem_region *regions;
struct s32_pinctrl_soc_info *info;
struct list_head gpio_configs;
spinlock_t gpio_configs_lock;
#ifdef CONFIG_PM_SLEEP
struct s32_pinctrl_context saved_context;
#endif
};
static struct s32_pinctrl_mem_region *
s32_get_region(struct pinctrl_dev *pctldev, unsigned int pin)
{
struct s32_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
const struct s32_pin_range *pin_range;
unsigned int mem_regions = ipctl->info->soc_data->mem_regions;
unsigned int i;
for (i = 0; i < mem_regions; i++) {
pin_range = ipctl->regions[i].pin_range;
if (pin >= pin_range->start && pin <= pin_range->end)
return &ipctl->regions[i];
}
return NULL;
}
static inline int s32_check_pin(struct pinctrl_dev *pctldev,
unsigned int pin)
{
return s32_get_region(pctldev, pin) ? 0 : -EINVAL;
}
static inline int s32_regmap_read(struct pinctrl_dev *pctldev,
unsigned int pin, unsigned int *val)
{
struct s32_pinctrl_mem_region *region;
unsigned int offset;
region = s32_get_region(pctldev, pin);
if (!region)
return -EINVAL;
offset = (pin - region->pin_range->start) *
regmap_get_reg_stride(region->map);
return regmap_read(region->map, offset, val);
}
static inline int s32_regmap_write(struct pinctrl_dev *pctldev,
unsigned int pin,
unsigned int val)
{
struct s32_pinctrl_mem_region *region;
Annotation
- Immediate include surface: `linux/bitops.h`, `linux/err.h`, `linux/gpio/driver.h`, `linux/init.h`, `linux/io.h`, `linux/module.h`, `linux/of.h`, `linux/platform_device.h`.
- Detected declarations: `struct s32_pinctrl_mem_region`, `struct gpio_pin_config`, `struct s32_pinctrl_context`, `struct s32_pinctrl`, `enum s32_write_type`, `function get_pin_no`, `function get_pin_func`, `function s32_get_region`, `function s32_check_pin`, `function s32_regmap_read`.
- Atlas domain: Driver Families / drivers/pinctrl.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.